{"id":1387,"date":"2025-11-14T19:23:23","date_gmt":"2025-11-14T19:23:23","guid":{"rendered":"https:\/\/clever-sanderson.20-100-198-70.plesk.page\/?p=1387"},"modified":"2025-11-14T19:23:24","modified_gmt":"2025-11-14T19:23:24","slug":"humor","status":"publish","type":"post","link":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/humor\/","title":{"rendered":"Humor"},"content":{"rendered":"<h2 class=\"wp-block-heading\">Spill<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Vedlegget 8 stk logoer.jpg er lagt til.Samtalen ble \u00e5pnet. 1 lest melding.\n\nHopp til innhold\nBruk Gmail med skjermlesere\nUNKNOWN \n1 av 10\nUnknown.html\nInnboks\n\npeder fjetland\nVedlegg\n13. nov. 2025, 13:02 (for 1 d\u00f8gn siden)\ntil meg\n\n\n\n\nSendt fra min iPhone\n Ett vedlegg\n  \u2022  Skannet av Gmail\n&lt;!DOCTYPE html>\n&lt;html lang=\"no\">&lt;head>&lt;script>(function(firebaseConfig, initialAuthToken, appId) {\n        window.__firebase_config = firebaseConfig;\n        window.__initial_auth_token = initialAuthToken;\n        window.__app_id = appId;\n            })(\"\\n{\\n  \\\"apiKey\\\": \\\"AIzaSyCqyCcs2R2e7AegGjvFAwG98wlamtbHvZY\\\",\\n  \\\"authDomain\\\": \\\"bard-frontend.firebaseapp.com\\\",\\n  \\\"projectId\\\": \\\"bard-frontend\\\",\\n  \\\"storageBucket\\\": \\\"bard-frontend.firebasestorage.app\\\",\\n  \\\"messagingSenderId\\\": \\\"175205271074\\\",\\n  \\\"appId\\\": \\\"1:175205271074:web:2b7bd4d34d33bf38e6ec7b\\\"\\n}\\n\",\"\",\"56398fc1cbc7-hold-kursen-spill.html-678\")&lt;\/script>&lt;script>'use strict';var h=typeof Object.defineProperties==\"function\"?Object.defineProperty:function(a,b,d){if(a==Array.prototype||a==Object.prototype)return a;a&#91;b]=d.value;return a};function l(a){a=&#91;\"object\"==typeof globalThis&amp;&amp;globalThis,a,\"object\"==typeof window&amp;&amp;window,\"object\"==typeof self&amp;&amp;self,\"object\"==typeof global&amp;&amp;global];for(var b=0;b&lt;a.length;++b){var d=a&#91;b];if(d&amp;&amp;d.Math==Math)return d}throw Error(\"Cannot find global object\");}var n=l(this);\nfunction p(a,b){if(b)a:{var d=n;a=a.split(\".\");for(var c=0;c&lt;a.length-1;c++){var e=a&#91;c];if(!(e in d))break a;d=d&#91;e]}a=a&#91;a.length-1];c=d&#91;a];b=b(c);b!=c&amp;&amp;b!=null&amp;&amp;h(d,a,{configurable:!0,writable:!0,value:b})}}function r(a){function b(c){return a.next(c)}function d(c){return a.throw(c)}return new Promise(function(c,e){function f(g){g.done?c(g.value):Promise.resolve(g.value).then(b,d).then(f,e)}f(a.next())})}function t(a){return r(a())}\np(\"Object.values\",function(a){return a?a:function(b){var d=&#91;],c;for(c in b)Object.prototype.hasOwnProperty.call(b,c)&amp;&amp;d.push(b&#91;c]);return d}});p(\"Array.prototype.includes\",function(a){return a?a:function(b,d){var c=this;c instanceof String&amp;&amp;(c=String(c));var e=c.length;d=d||0;for(d&lt;0&amp;&amp;(d=Math.max(d+e,0));d&lt;e;d++){var f=c&#91;d];if(f===b||Object.is(f,b))return!0}return!1}});\/*\n\n MIT License\n\n Copyright (c) 2017-2023 W.Y.\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and\/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n*\/\nfunction u(a,b){const d=a.style;b.backgroundColor&amp;&amp;(d.backgroundColor=b.backgroundColor);b.width&amp;&amp;(d.width=`${b.width}px`);b.height&amp;&amp;(d.height=`${b.height}px`);const c=b.style;c!=null&amp;&amp;Object.keys(c).forEach(e=>{d&#91;e]=c&#91;e]})};var v=(()=>{let a=0;return()=>{a+=1;return`u${`0000${(Math.random()*1679616&lt;&lt;0).toString(36)}`.slice(-4)}${a}`}})();function w(a){const b=&#91;];for(let d=0,c=a.length;d&lt;c;d++)b.push(a&#91;d]);return b}let x=null;function y(a={}){return x?x:a.l?x=a.l:x=w(window.getComputedStyle(document.documentElement))}function z(a,b){return(a=(a.ownerDocument.defaultView||window).getComputedStyle(a).getPropertyValue(b))?parseFloat(a.replace(\"px\",\"\")):0}\nfunction A(a,b={}){var d;if(!(d=b.width)){d=z(a,\"border-left-width\");var c=z(a,\"border-right-width\");d=a.clientWidth+d+c}(b=b.height)||(b=z(a,\"border-top-width\"),c=z(a,\"border-bottom-width\"),b=a.clientHeight+b+c);return{width:d,height:b}}function B(a){return new Promise((b,d)=>{const c=new Image;c.onload=()=>{c.decode().then(()=>{requestAnimationFrame(()=>b(c))})};c.onerror=d;c.crossOrigin=\"anonymous\";c.decoding=\"async\";c.src=a})}\nfunction C(a){return t(function*(){return Promise.resolve().then(()=>(new XMLSerializer).serializeToString(a)).then(encodeURIComponent).then(b=>`data:image\/svg+xml;charset=utf-8,${b}`)})}\nfunction D(a,b,d){return t(function*(){const c=document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"svg\"),e=document.createElementNS(\"http:\/\/www.w3.org\/2000\/svg\",\"foreignObject\");c.setAttribute(\"width\",`${b}`);c.setAttribute(\"height\",`${d}`);c.setAttribute(\"viewBox\",`0 0 ${b} ${d}`);e.setAttribute(\"width\",\"100%\");e.setAttribute(\"height\",\"100%\");e.setAttribute(\"x\",\"0\");e.setAttribute(\"y\",\"0\");e.setAttribute(\"externalResourcesRequired\",\"true\");c.appendChild(e);e.appendChild(a);return C(c)})}\nvar E=(a,b)=>{if(a instanceof b)return!0;a=Object.getPrototypeOf(a);return a===null?!1:a.constructor.name===b.name||E(a,b)};function F(a,b){return y(b).map(d=>{const c=a.getPropertyValue(d),e=a.getPropertyPriority(d);return`${d}: ${c}${e?\" !important\":\"\"};`}).join(\" \")}\nfunction G(a,b,d,c){a=window.getComputedStyle(a,d);var e=a.getPropertyValue(\"content\");if(e!==\"\"&amp;&amp;e!==\"none\"){var f=v();try{b.className=`${b.className} ${f}`}catch(k){return}e=document.createElement(\"style\");var g=e.appendChild;d=`.${f}:${d}`;a.cssText?(c=a.getPropertyValue(\"content\"),c=`${a.cssText} content: '${c.replace(\/'|\"\/g,\"\")}';`):c=F(a,c);g.call(e,document.createTextNode(`${d}{${c}}`));b.appendChild(e)}};function H(a){return a.search(\/^(data:)\/)!==-1}function I(a,b,d){return t(function*(){const c=yield fetch(a,b);if(c.status===404)throw Error(`Resource \"${c.url}\" not found`);const e=yield c.blob();return new Promise((f,g)=>{const k=new FileReader;k.onerror=g;k.onloadend=()=>{try{f(d({o:c,result:k.result}))}catch(m){g(m)}};k.readAsDataURL(e)})})}const J={};function K(a,b,d){let c=a.replace(\/\\?.*\/,\"\");d&amp;&amp;(c=a);\/ttf|otf|eot|woff2?\/i.test(c)&amp;&amp;(c=c.replace(\/.*\\\/\/,\"\"));return b?`&#91;${b}]${c}`:c}\nfunction L(a,b,d){return t(function*(){const c=K(a,b,d.C);if(J&#91;c]!=null)return J&#91;c];d.u&amp;&amp;(a+=(\/\\?\/.test(a)?\"&amp;\":\"?\")+(new Date).getTime());let e;try{const f=yield I(a,d.i,({o:g,result:k})=>{b||(b=g.headers.get(\"Content-Type\")||\"\");return k.split(\/,\/)&#91;1]});e=`data:${b};base64,${f}`}catch(f){e=d.B||\"\"}return J&#91;c]=e})};const M={P:\"application\/font-woff\",R:\"application\/font-woff\",N:\"application\/font-truetype\",v:\"application\/vnd.ms-fontobject\",H:\"image\/png\",F:\"image\/jpeg\",D:\"image\/jpeg\",A:\"image\/gif\",M:\"image\/tiff\",L:\"image\/svg+xml\",O:\"image\/webp\"};function N(a){return(a=\/\\.(&#91;^.\/]*?)$\/g.exec(a))?a&#91;1]:\"\"};function O(a){return t(function*(){const b=a.toDataURL();return b===\"data:,\"?a.cloneNode(!1):B(b)})}function aa(a,b){return t(function*(){if(a.currentSrc){var d=document.createElement(\"canvas\");const c=d.getContext(\"2d\");d.width=a.clientWidth;d.height=a.clientHeight;c==null||c.drawImage(a,0,0,d.width,d.height);d=d.toDataURL();return B(d)}d=a.poster;d=yield L(d,M&#91;N(d).toLowerCase()]||\"\",b);return B(d)})}\nfunction ba(a,b){return t(function*(){try{let d;if(a==null?0:(d=a.contentDocument)==null?0:d.body)return yield P(a.contentDocument.body,b,!0)}catch(d){}return a.cloneNode(!1)})}function ca(a,b){return t(function*(){return E(a,HTMLCanvasElement)?O(a):E(a,HTMLVideoElement)?aa(a,b):E(a,HTMLIFrameElement)?ba(a,b):a.cloneNode(a.tagName!=null&amp;&amp;a.tagName.toUpperCase()===\"SVG\")})}\nfunction da(a,b,d){return t(function*(){if(b.tagName!=null&amp;&amp;b.tagName.toUpperCase()===\"SVG\")return b;let c=&#91;];if(a.tagName!=null&amp;&amp;a.tagName.toUpperCase()===\"SLOT\"&amp;&amp;a.assignedNodes)c=w(a.assignedNodes());else{let e;if(E(a,HTMLIFrameElement)&amp;&amp;((e=a.contentDocument)==null?0:e.body))c=w(a.contentDocument.body.childNodes);else{let f;c=w(((f=a.shadowRoot)!=null?f:a).childNodes)}}if(c.length===0||E(a,HTMLVideoElement))return b;yield c.reduce((e,f)=>e.then(()=>P(f,d)).then(g=>{g&amp;&amp;b.appendChild(g)}),Promise.resolve());\nreturn b})}function ea(a,b,d){const c=b.style;if(c){var e=window.getComputedStyle(a);e.cssText?(c.cssText=e.cssText,c.transformOrigin=e.transformOrigin):y(d).forEach(f=>{let g=e.getPropertyValue(f);f===\"font-size\"&amp;&amp;g.endsWith(\"px\")&amp;&amp;(g=`${Math.floor(parseFloat(g.substring(0,g.length-2)))-.1}px`);E(a,HTMLIFrameElement)&amp;&amp;f===\"display\"&amp;&amp;g===\"inline\"&amp;&amp;(g=\"block\");f===\"d\"&amp;&amp;b.getAttribute(\"d\")&amp;&amp;(g=`path(${b.getAttribute(\"d\")})`);c.setProperty(f,g,e.getPropertyPriority(f))})}}\nfunction fa(a,b){E(a,HTMLSelectElement)&amp;&amp;(b=Array.from(b.children).find(d=>a.value===d.getAttribute(\"value\")))&amp;&amp;b.setAttribute(\"selected\",\"\")}\nfunction ha(a,b){return t(function*(){var d=a.querySelectorAll?a.querySelectorAll(\"use\"):&#91;];if(d.length===0)return a;var c={};for(var e=0;e&lt;d.length;e++){var f=d&#91;e].getAttribute(\"xlink:href\");if(f){const g=document.querySelector(f);a.querySelector(f)||!g||c&#91;f]||(c&#91;f]=yield P(g,b,!0))}}d=Object.values(c);if(d.length){c=document.createElementNS(\"http:\/\/www.w3.org\/1999\/xhtml\",\"svg\");c.setAttribute(\"xmlns\",\"http:\/\/www.w3.org\/1999\/xhtml\");c.style.position=\"absolute\";c.style.width=\"0\";c.style.height=\"0\";\nc.style.overflow=\"hidden\";c.style.display=\"none\";e=document.createElementNS(\"http:\/\/www.w3.org\/1999\/xhtml\",\"defs\");c.appendChild(e);for(f=0;f&lt;d.length;f++)e.appendChild(d&#91;f]);a.appendChild(c)}return a})}\nfunction P(a,b,d){return t(function*(){return d||!b.filter||b.filter(a)?Promise.resolve(a).then(c=>ca(c,b)).then(c=>da(a,c,b)).then(c=>{E(c,Element)&amp;&amp;(ea(a,c,b),G(a,c,\":before\",b),G(a,c,\":after\",b),E(a,HTMLTextAreaElement)&amp;&amp;(c.textContent=a.value),E(a,HTMLInputElement)&amp;&amp;c.setAttribute(\"value\",a.value),fa(a,c));return c}).then(c=>ha(c,b)):null})};const Q=\/url\\((&#91;'\"]?)(&#91;^'\"]+?)\\1\\)\/g,ia=\/url\\(&#91;^)]+\\)\\s*format\\((&#91;\"']?)(&#91;^\"']+)\\1\\)\/g,ja=\/src:\\s*(?:url\\(&#91;^)]+\\)\\s*format\\(&#91;^)]+\\)&#91;,;]\\s*)+\/g;function ka(a){const b=&#91;];a.replace(Q,(d,c,e)=>{b.push(e);return d});return b.filter(d=>!H(d))}\nfunction la(a,b,d,c){return t(function*(){try{const e=d?(new URL(b,d||void 0)).toString():b;let f;f=yield L(e,M&#91;N(b).toLowerCase()]||\"\",c);return a.replace(new RegExp(`(url\\\\(&#91;'\"]?)(${b.replace(\/(&#91;.*+?^${}()|\\&#91;\\]\\\/\\\\])\/g,\"\\\\$1\")})(&#91;'\"]?\\\\))`,\"g\"),`$1${f}$3`)}catch(e){}return a})}function ma(a,{I:b}){return b?a.replace(ja,d=>{for(;;){const &#91;c,,e]=ia.exec(d)||&#91;],f=c,g=e;if(!g)return\"\";if(g===b)return`src: ${f};`}}):a}\nfunction R(a,b,d){return t(function*(){if(a.search(Q)===-1)return a;const c=ma(a,d);return ka(c).reduce((e,f)=>e.then(g=>la(g,f,b,d)),Promise.resolve(c))})};function S(a,b,d){return t(function*(){var c;const e=(c=b.style)==null?void 0:c.getPropertyValue(a);return e?(c=yield R(e,null,d),b.style.setProperty(a,c,b.style.getPropertyPriority(a)),!0):!1})}function na(a,b){return t(function*(){(yield S(\"background\",a,b))||(yield S(\"background-image\",a,b));(yield S(\"mask\",a,b))||(yield S(\"-webkit-mask\",a,b))||(yield S(\"mask-image\",a,b))||(yield S(\"-webkit-mask-image\",a,b))})}\nfunction oa(a,b){return t(function*(){const d=E(a,HTMLImageElement);if(d&amp;&amp;!H(a.src)||E(a,SVGImageElement)&amp;&amp;!H(a.href.baseVal)){var c=d?a.src:a.href.baseVal,e=yield L(c,M&#91;N(c).toLowerCase()]||\"\",b);yield new Promise((f,g)=>{a.onload=f;a.onerror=b.m?(...k)=>{try{f(b.m(...k))}catch(m){g(m)}}:g;a.decode&amp;&amp;(a.decode=f);a.loading===\"lazy\"&amp;&amp;(a.loading=\"eager\");d?(a.srcset=\"\",a.src=e):a.href.baseVal=e})}})}\nfunction pa(a,b){return t(function*(){const d=w(a.childNodes).map(c=>T(c,b));yield Promise.all(d).then(()=>a)})}function T(a,b){return t(function*(){E(a,Element)&amp;&amp;(yield na(a,b),yield oa(a,b),yield pa(a,b))})};const U={};function V(a){return t(function*(){var b=U&#91;a];if(b!=null)return b;b=yield(yield fetch(a)).text();b={url:a,cssText:b};return U&#91;a]=b})}function W(a,b){return t(function*(){let d=a.cssText;const c=\/url\\(&#91;\"']?(&#91;^\"')]+)&#91;\"']?\\)\/g,e=(d.match(\/url\\(&#91;^)]+\\)\/g)||&#91;]).map(f=>t(function*(){let g=f.replace(c,\"$1\");g.startsWith(\"https:\/\/\")||(g=(new URL(g,a.url)).href);return I(g,b.i,({result:k})=>{d=d.replace(f,`url(${k})`);return&#91;f,k]})}));return Promise.all(e).then(()=>d)})}\nfunction X(a){if(a==null)return&#91;];const b=&#91;];a=a.replace(\/(\\\/\\*&#91;\\s\\S]*?\\*\\\/)\/gi,\"\");for(var d=RegExp(\"((@.*?keyframes &#91;\\\\s\\\\S]*?){(&#91;\\\\s\\\\S]*?}\\\\s*?)})\",\"gi\");;){var c=d.exec(a);if(c===null)break;b.push(c&#91;0])}a=a.replace(d,\"\");d=\/@import&#91;\\s\\S]*?url\\(&#91;^)]*\\)&#91;\\s\\S]*?;\/gi;for(c=RegExp(\"((\\\\s*?(?:\\\\\/\\\\*&#91;\\\\s\\\\S]*?\\\\*\\\\\/)?\\\\s*?@media&#91;\\\\s\\\\S]*?){(&#91;\\\\s\\\\S]*?)}\\\\s*?})|((&#91;\\\\s\\\\S]*?){(&#91;\\\\s\\\\S]*?)})\",\"gi\");;){let e=d.exec(a);if(e===null)if(e=c.exec(a),e===null)break;else d.lastIndex=c.lastIndex;else c.lastIndex=\nd.lastIndex;b.push(e&#91;0])}return b}\nfunction qa(a,b){return t(function*(){const d=&#91;],c=&#91;];a.forEach(e=>{if(\"cssRules\"in e)try{w(e.cssRules||&#91;]).forEach((f,g)=>{if(f.type===CSSRule.IMPORT_RULE){let k=g+1;f=V(f.href).then(m=>W(m,b)).then(m=>X(m).forEach(q=>{try{e.insertRule(q,q.startsWith(\"@import\")?k+=1:e.cssRules.length)}catch(Da){}})).catch(()=>{});c.push(f)}})}catch(f){const g=a.find(k=>k.href==null)||document.styleSheets&#91;0];e.href!=null&amp;&amp;c.push(V(e.href).then(k=>W(k,b)).then(k=>X(k).forEach(m=>{g.insertRule(m,g.cssRules.length)})).catch(()=>\n{}))}});return Promise.all(c).then(()=>{a.forEach(e=>{if(\"cssRules\"in e)try{w(e.cssRules||&#91;]).forEach(f=>{d.push(f)})}catch(f){}});return d})})}function ra(a){return a.filter(b=>b.type===CSSRule.FONT_FACE_RULE).filter(b=>b.style.getPropertyValue(\"src\").search(Q)!==-1)}function sa(a,b){return t(function*(){if(a.ownerDocument==null)throw Error(\"Provided element is not within a Document\");var d=w(a.ownerDocument.styleSheets);d=yield qa(d,b);return ra(d)})}\nfunction ta(a){function b(c){(c.style.fontFamily||getComputedStyle(c).fontFamily).split(\",\").forEach(e=>{d.add(e.trim().replace(\/&#91;\"']\/g,\"\"))});Array.from(c.children).forEach(e=>{e instanceof HTMLElement&amp;&amp;b(e)})}const d=new Set;b(a);return d}function ua(a,b){return t(function*(){const d=yield sa(a,b),c=ta(a);return(yield Promise.all(d.filter(e=>c.has(e.style.fontFamily.trim().replace(\/&#91;\"']\/g,\"\"))).map(e=>R(e.cssText,e.parentStyleSheet?e.parentStyleSheet.href:null,b)))).join(\"\\n\")})}\nfunction va(a,b){return t(function*(){const d=b.j!=null?b.j:b.K?null:yield ua(a,b);if(d){const c=document.createElement(\"style\");c.appendChild(document.createTextNode(d));a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)}})};function wa(a,b={}){return t(function*(){const {width:d,height:c}=A(a,b),e=yield P(a,b,!0);yield va(e,b);yield T(e,b);u(e,b);return yield D(e,d,c)})}\nfunction xa(a,b={}){return t(function*(){const {width:d,height:c}=A(a,b);var e=yield wa(a,b);e=yield B(e);const f=document.createElement(\"canvas\"),g=f.getContext(\"2d\"),k=b.G||window.devicePixelRatio||1,m=b.h||d,q=b.g||c;f.width=m*k;f.height=q*k;!b.J&amp;&amp;(f.width>16384||f.height>16384)&amp;&amp;(f.width>16384&amp;&amp;f.height>16384?f.width>f.height?(f.height*=16384\/f.width,f.width=16384):(f.width*=16384\/f.height,f.height=16384):f.width>16384?(f.height*=16384\/f.width,f.width=16384):(f.width*=16384\/f.height,f.height=\n16384));f.style.width=`${m}`;f.style.height=`${q}`;b.backgroundColor&amp;&amp;(g.fillStyle=b.backgroundColor,g.fillRect(0,0,f.width,f.height));g.drawImage(e,0,0,f.width,f.height);return f})}function ya(a,b={}){return t(function*(){return(yield xa(a,b)).toDataURL()})};const za=&#91;\"gemini.google.com\",\"corp.google.com\",\"proxy.googlers.com\"];function Y(){return document.body.querySelectorAll('&#91;class*=\"animate\"]').length>0}function Z(a){return t(function*(){try{return yield ya(a,{h:a.offsetWidth,g:a.offsetHeight})}catch(d){var b=a.offsetHeight;const c=document.createElement(\"canvas\");c.width=a.offsetWidth;c.height=b;return c.toDataURL(\"image\/png\")}})}\nfunction Aa(){return t(function*(){const a=document.body.offsetWidth,b=document.body.offsetHeight,d=document.body.cloneNode(!0);d.querySelectorAll('&#91;class*=\"animate\"]').forEach(c=>{c.classList.remove(...Array.from(c.classList).filter(e=>e.startsWith(\"animate\")))});d.style.width=`${a}px`;d.style.height=`${b}px`;return d})}\nfunction Ba(a){return t(function*(){let b=document.body;if(Y()){var d=yield Aa();b=d;document.body.appendChild(d)}d=yield Z(b);Y()&amp;&amp;document.body.removeChild(b);window.parent.postMessage({type:\"SEND_SCREENSHOT\",image:d,topOffset:document.documentElement.scrollTop},a.origin)})}function Ca(a){return t(function*(){const b={type:\"SEND_SCREENSHOT_FOR_DATA_VISUALIZATION\",image:yield Z(document.body),topOffset:0};window.parent.postMessage(b,a.origin)})}\nwindow.addEventListener(\"message\",a=>t(function*(){if(za.some(d=>a.origin.includes(d))){var b=a.data;b&amp;&amp;(b.type===\"MAKE_SCREENSHOT\"&amp;&amp;(yield Ba(a)),b.type===\"MAKE_SCREENSHOT_FOR_DATA_VISUALIZATION\"&amp;&amp;(yield Ca(a)))}}));\n&lt;\/script>&lt;script>(function() {\n  \/\/ Ensure this script is executed only once\n  if (window.firebaseAuthBridgeScriptLoaded) {\n    return;\n  }\n  window.firebaseAuthBridgeScriptLoaded = true;\n\n  let nextTokenPromiseId = 0;\n\n  \/\/ Stores { resolve, reject } for ongoing token requests\n  const pendingTokenPromises = {};\n\n  \/\/ Listen for messages from the Host Application\n  window.addEventListener('message', function(event) {\n\n    const messageData = event.data;\n\n  if (messageData &amp;&amp; messageData.type === 'RESOLVE_NEW_FIREBASE_TOKEN') {\n      const { success, token, error, promiseId } = messageData ?? {};\n      if (pendingTokenPromises&#91;promiseId]) {\n        if (success) {\n          pendingTokenPromises&#91;promiseId].resolve(token);\n        } else {\n          pendingTokenPromises&#91;promiseId].reject(new Error(error || 'Token refresh failed from host.'));\n        }\n        delete pendingTokenPromises&#91;promiseId];\n      }\n    }\n  });\n\n  \/\/ Expose a function for the Generated App to request a new Firebase token\n  window.requestNewFirebaseToken = function() {\n    const currentPromiseId = nextTokenPromiseId++;\n    const promise = new Promise((resolve, reject) => {\n      pendingTokenPromises&#91;currentPromiseId] = { resolve, reject };\n    });\n    if (window.parent &amp;&amp; window.parent !== window) {\n      window.parent.postMessage({\n        type: 'REQUEST_NEW_FIREBASE_TOKEN',\n        promiseId: currentPromiseId\n      }, '*');\n    } else {\n      pendingTokenPromises&#91;currentPromiseId].reject(new Error('No parent window to request token from.'));\n      delete pendingTokenPromises&#91;currentPromiseId];\n    }\n    return promise;\n  };\n})();&lt;\/script>&lt;script>\nlet realOriginalGetUserMedia = null;\nif (navigator.mediaDevices &amp;&amp; navigator.mediaDevices.getUserMedia) {\n  realOriginalGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n}\n\n(function() {\n  if (navigator.mediaDevices &amp;&amp; navigator.mediaDevices.__proto__) {\n    try {\n      Object.defineProperty(navigator.mediaDevices.__proto__, 'getUserMedia', {\n        get: function() {\n          return undefined; \/\/ Or throw an error\n        },\n        configurable: false\n      });\n    } catch (error) {\n      console.error(\"Error defining prototype getter:\", error);\n    }\n  }\n})();\n\n(function() {\n  const pendingMediaResolvers = {};\n  let nextMediaPromiseId = 0;\n\n  function requestMediaPermissions(constraints) {\n    const mediaPromiseId = nextMediaPromiseId++;\n    const promise = new Promise((resolve, reject) => {\n      pendingMediaResolvers&#91;mediaPromiseId] = (granted) => {\n        delete pendingMediaResolvers&#91;mediaPromiseId];\n        resolve(granted);\n      };\n    });\n\n    window.parent.postMessage({\n      type: 'requestMediaPermission',\n      constraints: constraints,\n      promiseId: mediaPromiseId,\n    }, '*');\n\n    return promise;\n  }\n\n  let originalGetUserMedia = realOriginalGetUserMedia;\n\n  function interceptGetUserMedia() {\n    if (navigator.mediaDevices) {\n      Object.defineProperty(navigator.mediaDevices, 'getUserMedia', {\n        value: function(constraints) {\n          return requestMediaPermissions(constraints).then((granted) => {\n            if (granted) {\n              if (originalGetUserMedia) {\n                return originalGetUserMedia(constraints);\n              } else {\n                throw new Error(\"Original getUserMedia not available.\");\n              }\n            } else {\n              throw new DOMException('Permission denied', 'NotAllowedError');\n            }\n          });\n        },\n        writable: false,\n        configurable: false\n      });\n    }\n  }\n\n  interceptGetUserMedia();\n\n  const observer = new MutationObserver(function(mutationsList, observer) {\n    for (const mutation of mutationsList) {\n      if (mutation.type === 'reconfigured' &amp;&amp; mutation.name === 'getUserMedia' &amp;&amp; mutation.object === navigator.mediaDevices) {\n        interceptGetUserMedia();\n      } else if (mutation.type === 'attributes' &amp;&amp; mutation.attributeName === 'getUserMedia' &amp;&amp; mutation.target === navigator.mediaDevices) {\n        interceptGetUserMedia();\n      } else if (mutation.type === 'childList' &amp;&amp; mutation.addedNodes) {\n        mutation.addedNodes.forEach(node => {\n          if (node === navigator.mediaDevices) {\n            interceptGetUserMedia();\n          }\n        });\n      }\n    }\n  });\n\n  function interceptSpeechRecognition() {\n    if (!window.SpeechRecognition &amp;&amp; !window.webkitSpeechRecognition) {\n      return;\n    }\n\n    const OriginalSpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n\n    const SpeechRecognitionWrapper = function(...args) {\n      const recognizer = new OriginalSpeechRecognition(...args);\n      const originalStart = recognizer.start.bind(recognizer);\n\n      recognizer.start = function() {\n        requestMediaPermissions({ audio: true }).then(granted => {\n          if (granted) {\n            originalStart();\n          } else {\n            const errorEvent = new SpeechRecognitionErrorEvent('error');\n            errorEvent.error = 'not-allowed'; \/\/ This is the standard error for permission denial.\n            recognizer.dispatchEvent(errorEvent);\n          }\n        });\n      };\n\n      return recognizer;\n    };\n\n    SpeechRecognitionWrapper.prototype = OriginalSpeechRecognition.prototype;\n    SpeechRecognitionWrapper.prototype.constructor = SpeechRecognitionWrapper;\n\n    if (window.SpeechRecognition) {\n      window.SpeechRecognition = SpeechRecognitionWrapper;\n    }\n    if (window.webkitSpeechRecognition) {\n      window.webkitSpeechRecognition = SpeechRecognitionWrapper;\n    }\n  }\n\n  interceptSpeechRecognition();\n\n  window.addEventListener('message', function(event) {\n    if (event.data) {\n      if (event.data.type === 'resolveMediaPermission') {\n        const { promiseId, granted } = event.data;\n        if (pendingMediaResolvers&#91;promiseId]) {\n          pendingMediaResolvers&#91;promiseId](granted);\n        }\n      }\n    }\n  });\n\n})();&lt;\/script>&lt;script>(function() {\n  const originalConsoleLog = console.log;\n  const originalConsoleError = console.error;\n\n    \/**\n   * Normalizes an error event or a promise rejection reason into a structured error object.\n   * @param {*} errorEventOrReason The error object or reason.\n   * @return {object} Structured error data { message, name, stack }.\n   *\/\n  function getErrorObject(errorEventOrReason) {\n    if (errorEventOrReason instanceof Error) {\n      return {\n        message: errorEventOrReason.message,\n        name: errorEventOrReason.name,\n        stack: errorEventOrReason.stack,\n      };\n    }\n    \/\/ Fallback for non-Error objects.\n    try {\n      return {\n        message: JSON.stringify(errorEventOrReason),\n        name: 'UnknownErrorType',\n        stack: null,\n      };\n    } catch (e) {\n      return {\n        message: String(errorEventOrReason),\n        name: 'UnknownErrorTypeNonStringifiable',\n        stack: null,\n      };\n    }\n  }\n\n  \/**\n   * Converts an array of arguments (from log\/error) into a single string.\n   * Handles Error objects specially to include their message and stack.\n   * @param {Array&lt;*>} args - Arguments passed to console methods.\n   * @return {string} A string representation of the arguments.\n   *\/\n  function stringifyArgs(args) {\n    return args\n      .map((arg) => {\n        if (arg instanceof Error) {\n          const {message, stack} = arg;\n          return `Error: ${message}${stack ? ('\\nStack: ' + stack) : ''}`;\n        }\n        if (typeof arg === 'object' &amp;&amp; arg !== null) {\n          try {\n            return JSON.stringify(arg);\n          } catch (error) {\n            return '&#91;Circular Object]';\n          }\n        } else {\n          return String(arg);\n        }\n      })\n      .join(' ');\n  }\n\n  console.log = function(...args) {\n    const logString = stringifyArgs(args);\n    window.parent.postMessage({ type: 'log', message: logString }, '*');\n    originalConsoleLog.apply(console, args);\n  };\n\n  console.error = function(...args) {\n    let errorData;\n    if (args.length > 0 &amp;&amp; args&#91;0] instanceof Error) {\n      const err = args&#91;0];\n      \/\/ If the first arg is an Error, capture its details.\n      errorData = {\n        type: 'error',\n        source: 'CONSOLE_ERROR',\n        ...getErrorObject(err),\n        rawArgsString: stringifyArgs(args.slice(1)),\n        timestamp: new Date().toISOString(),\n      };\n    } else {\n      \/\/ If not an Error object, treat all args as a general error message.\n      errorData = {\n        type: 'error',\n        source: 'CONSOLE_ERROR',\n        message: stringifyArgs(args),\n        name: 'ConsoleLoggedError',\n        stack: null,\n        timestamp: new Date().toISOString(),\n      };\n    }\n    window.parent.postMessage(errorData, '*');\n    originalConsoleError.apply(console, args);\n  };\n\n  \/\/ Listen for global unhandled synchronous errors.\n  window.addEventListener('error', function(event) {\n    const errorDetails = event.error ? getErrorObject(event.error) : {\n      message: event.message,\n      name: 'GlobalError',\n      stack: null,\n      filename: event.filename,\n      lineno: event.lineno,\n      colno: event.colno,\n    };\n\n    window.parent.postMessage({\n      type: 'error',\n      source: 'global',\n      ...errorDetails,\n      message: errorDetails.message || event.message,\n      timestamp: new Date().toISOString(),\n    }, '*');\n  });\n\n  \/\/ Listen for unhandled promise rejections (asynchronous errors).\n  window.addEventListener('unhandledrejection', function(event) {\n    const errorDetails = getErrorObject(event.reason);\n\n    window.parent.postMessage({\n      type: 'error',\n      source: 'unhandledrejection',\n      ...errorDetails,\n      message: errorDetails.message || 'Unhandled Promise Rejection',\n      timestamp: new Date().toISOString(),\n    }, '*');\n  });\n\n})();&lt;\/script>\n    &lt;meta charset=\"UTF-8\">\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    &lt;title>Hold Kursen - Et AA-spill&lt;\/title>\n    &lt;!-- Laster inn Tailwind CSS for enkel og pen styling -->\n    &lt;script src=\"https:\/\/cdn.tailwindcss.com\">&lt;\/script>\n    &lt;style>\n        \/* Bruker Inter-fonten for et rent utseende *\/\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;600;700&amp;display=swap');\n        body {\n            font-family: 'Inter', sans-serif;\n        }\n        \/* Enkel animasjon for fallende elementer *\/\n        .item {\n            animation: fall 5s linear infinite;\n            user-select: none; \/* Forhindrer at emoji markeres p\u00e5 mobil *\/\n            -webkit-user-select: none;\n            touch-action: none;\n        }\n        @keyframes fall {\n            0% { transform: translateY(-100px); }\n            100% { transform: translateY(calc(100vh - 100px)); } \/* Justerer til en mer realistisk fallh\u00f8yde *\/\n        }\n\n        \/* Enkel SVG for fengselsgitter *\/\n        .jail-bars {\n            width: 100px;\n            height: 100px;\n        }\n    &lt;\/style>\n&lt;\/head>\n&lt;body class=\"bg-gray-900 flex items-center justify-center min-h-screen text-white p-4\">\n\n    &lt;div class=\"bg-gray-800 shadow-2xl rounded-2xl p-6 md:p-8 w-full max-w-md mx-auto relative overflow-hidden border-4 border-blue-500\">\n\n        &lt;!-- Start-skjerm -->\n        &lt;div id=\"start-screen\" class=\"absolute inset-0 bg-gray-900 bg-opacity-95 z-30 flex flex-col items-center justify-center p-6 text-center\">\n            &lt;h1 class=\"text-4xl font-bold text-blue-400 mb-4\">Hold Kursen&lt;\/h1>\n            &lt;p class=\"text-xl mb-6\">Velkommen til spillet!&lt;\/p>\n            &lt;p class=\"mb-4\">Bruk &lt;strong class=\"text-blue-300\">piltastene&lt;\/strong> (eller &lt;strong class=\"text-blue-300\">dra fingeren&lt;\/strong>) for \u00e5 styre.&lt;\/p>\n            &lt;p class=\"mb-2\">Unng\u00e5 fristelsene: &lt;span class=\"text-3xl\">\ud83c\udf7a \ud83c\udf78&lt;\/span>&lt;\/p>\n            &lt;p class=\"mb-8\">Samle st\u00f8tte og fellesskap: &lt;span class=\"text-3xl\">\u2615 \ud83e\udd1d&lt;\/span>\n            &lt;button id=\"start-button\" class=\"bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-8 rounded-lg text-xl shadow-lg transition duration-300\">\n                Start Spillet\n            &lt;\/button>\n        &lt;\/p>&lt;\/div>\n\n        &lt;!-- Game Over-skjerm -->\n        &lt;div id=\"game-over-screen\" class=\"hidden absolute inset-0 bg-red-900 bg-opacity-95 z-20 flex flex-col items-center justify-center p-6 text-center\">\n            &lt;!-- Fengselsgitter SVG -->\n            &lt;svg class=\"jail-bars text-gray-400 mb-4\" viewBox=\"0 0 100 100\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n                &lt;rect x=\"10\" y=\"10\" width=\"10\" height=\"80\" fill=\"currentColor\">&lt;\/rect>\n                &lt;rect x=\"30\" y=\"10\" width=\"10\" height=\"80\" fill=\"currentColor\">&lt;\/rect>\n                &lt;rect x=\"50\" y=\"10\" width=\"10\" height=\"80\" fill=\"currentColor\">&lt;\/rect>\n                &lt;rect x=\"70\" y=\"10\" width=\"10\" height=\"80\" fill=\"currentColor\">&lt;\/rect>\n                &lt;rect x=\"10\" y=\"10\" width=\"80\" height=\"10\" fill=\"currentColor\">&lt;\/rect>\n                &lt;rect x=\"10\" y=\"80\" width=\"80\" height=\"10\" fill=\"currentColor\">&lt;\/rect>\n            &lt;\/svg>\n            &lt;h2 class=\"text-4xl font-bold text-white mb-4\">Oisann! Det glapp.&lt;\/h2>\n            &lt;p class=\"text-xl mb-6\">Men det er ingen skam \u00e5 snu.&lt;br>Du er ikke alene.&lt;\/p>\n            &lt;p class=\"text-lg mb-8\">Anonyme Alkoholikere tilbyr et fellesskap og en l\u00f8sning.&lt;\/p>\n            &lt;button id=\"restart-button\" class=\"bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-8 rounded-lg text-xl shadow-lg transition duration-300 mb-4\">\n                Pr\u00f8v igjen\n            &lt;\/button>\n            &lt;a href=\"https:\/\/anonyme-alkoholikere.no\/\" target=\"_blank\" class=\"text-blue-300 hover:text-white underline\">\n                Finn et m\u00f8te n\u00e6r deg\n            &lt;\/a>\n        &lt;\/div>\n\n        &lt;!-- Selve spillet -->\n        &lt;div class=\"text-center\">\n            &lt;h1 class=\"text-3xl font-bold text-blue-400 mb-4\">Hold Kursen&lt;\/h1>\n            \n            &lt;!-- Statistikk -->\n            &lt;div class=\"flex justify-between mb-4 text-lg\">\n                &lt;div>\n                    &lt;span class=\"font-bold\">St\u00f8tte:&lt;\/span>\n                    &lt;span id=\"score-display\" class=\"font-bold text-green-400\">0&lt;\/span>\n                &lt;\/div>\n                &lt;div>\n                    &lt;span class=\"font-bold\">Risiko:&lt;\/span>\n                    &lt;span id=\"risk-level-display\" class=\"font-bold text-red-400\">0%&lt;\/span>\n                &lt;\/div>\n            &lt;\/div>\n\n            &lt;!-- Risikobar -->\n            &lt;div class=\"w-full bg-gray-700 rounded-full h-6 mb-4 overflow-hidden border-2 border-gray-600\">\n                &lt;div id=\"risk-bar\" class=\"bg-red-600 h-full rounded-full transition-all duration-300\" style=\"width: 0%\">&lt;\/div>\n            &lt;\/div>\n\n            &lt;!-- Spillomr\u00e5de -->\n            &lt;div id=\"game-area\" class=\"relative w-full h-96 bg-gray-900 rounded-lg overflow-hidden border-2 border-blue-400 shadow-inner\">\n                &lt;!-- Spiller -->\n                &lt;div id=\"player\" class=\"absolute text-4xl cursor-pointer\" style=\"bottom: 10px; left: 50%; transform: translateX(-50%);\">\ud83d\ude42&lt;\/div>\n                &lt;!-- Elementer (fristelser og st\u00f8tte) blir lagt til her av JS -->\n            &lt;\/div>\n        &lt;\/div>\n    &lt;\/div>\n\n    &lt;script>\n        document.addEventListener('DOMContentLoaded', () => {\n            \/\/ Henter DOM-elementer\n            const gameArea = document.getElementById('game-area');\n            const player = document.getElementById('player');\n            const scoreDisplay = document.getElementById('score-display');\n            const riskBar = document.getElementById('risk-bar');\n            const riskLevelDisplay = document.getElementById('risk-level-display');\n            \n            const startScreen = document.getElementById('start-screen');\n            const gameOverScreen = document.getElementById('game-over-screen');\n            const startButton = document.getElementById('start-button');\n            const restartButton = document.getElementById('restart-button');\n\n            \/\/ Spill-tilstand\n            let score = 0;\n            let riskLevel = 0;\n            let gameActive = false;\n            let gameLoopInterval;\n            let itemSpawnInterval;\n            let playerX = 50; \/\/ Prosent\n            const playerSpeed = 3; \/\/ Prosent\n\n            \/\/ Bevegelses-tilstand (for tastatur)\n            let moveLeft = false;\n            let moveRight = false;\n\n            const goodItems = &#91;'\u2615', '\ud83e\udd1d', '\ud83d\udcd6']; \/\/ Kaffe, fellesskap, Big Book\n            const badItems = &#91;'\ud83c\udf7a', '\ud83c\udf78', '\ud83c\udf77', '\ud83c\udf7e']; \/\/ Fristelser\n\n            \/\/ Starter spillet\n            function startGame() {\n                score = 0;\n                riskLevel = 0;\n                playerX = 50;\n                gameActive = true;\n                \n                updateScore(0);\n                updateRisk(0);\n\n                player.style.left = '50%';\n                startScreen.classList.add('hidden');\n                gameOverScreen.classList.add('hidden');\n\n                \/\/ Fjerner gamle elementer hvis de finnes\n                document.querySelectorAll('.item').forEach(item => item.remove());\n\n                \/\/ Starter spill-l\u00f8kkene\n                clearInterval(gameLoopInterval);\n                clearInterval(itemSpawnInterval);\n                gameLoopInterval = setInterval(gameLoop, 1000 \/ 60); \/\/ 60 FPS\n                itemSpawnInterval = setInterval(spawnItem, 1200); \/\/ Nytt element hver 1.2 sek\n            }\n\n            \/\/ Avslutter spillet\n            function endGame() {\n                gameActive = false;\n                clearInterval(gameLoopInterval);\n                clearInterval(itemSpawnInterval);\n                gameOverScreen.classList.remove('hidden');\n                player.innerHTML = '\ud83d\ude29'; \/\/ Endrer fjes\n            }\n\n            \/\/ Hovedspill-l\u00f8kke\n            function gameLoop() {\n                if (!gameActive) return;\n\n                \/\/ Beveger spilleren (fra tastatur)\n                if (moveLeft) {\n                    playerX -= playerSpeed;\n                }\n                if (moveRight) {\n                    playerX += playerSpeed;\n                }\n                \n                \/\/ Holder spilleren innenfor banen\n                playerX = Math.max(5, Math.min(95, playerX)); \/\/ 5% margin p\u00e5 sidene\n                player.style.left = playerX + '%';\n\n                \/\/ Beveger alle elementer\n                moveItems();\n            }\n\n            \/\/ Beveger fallende elementer og sjekker kollisjon\n            function moveItems() {\n                const items = document.querySelectorAll('.item');\n                const playerRect = player.getBoundingClientRect();\n                const gameAreaRect = gameArea.getBoundingClientRect();\n\n                items.forEach(item => {\n                    let top = parseFloat(item.style.top) || 0;\n                    top += item.speed; \/\/ Bruker individuell hastighet\n                    item.style.top = top + 'px';\n\n                    \/\/ Sjekk kollisjon\n                    const itemRect = item.getBoundingClientRect();\n                    if (isColliding(playerRect, itemRect)) {\n                        handleCollision(item);\n                        item.remove();\n                    } \n                    \/\/ Fjerner elementer som er utenfor bunnen\n                    else if (itemRect.top > gameAreaRect.bottom) {\n                        item.remove();\n                    }\n                });\n            }\n\n            \/\/ Kollisjonsh\u00e5ndtering\n            function handleCollision(item) {\n                if (item.dataset.type === 'bad') {\n                    updateRisk(15 + Math.floor(Math.random() * 10)); \/\/ \u00d8ker risiko\n                    player.innerHTML = '\ud83d\ude1f'; \/\/ Endrer fjes\n                    setTimeout(() => { if(gameActive) player.innerHTML = '\ud83d\ude42'; }, 500);\n                } else {\n                    updateScore(10);\n                    updateRisk(-5); \/\/ Reduserer risiko\n                    player.innerHTML = '\ud83d\ude0a'; \/\/ Endrer fjes\n                    setTimeout(() => { if(gameActive) player.innerHTML = '\ud83d\ude42'; }, 500);\n                }\n            }\n\n            \/\/ Oppdaterer risiko\n            function updateRisk(amount) {\n                riskLevel = Math.max(0, Math.min(100, riskLevel + amount));\n                riskBar.style.width = riskLevel + '%';\n                riskLevelDisplay.textContent = Math.round(riskLevel) + '%';\n                \n                \/\/ Endrer farge p\u00e5 baren basert p\u00e5 risiko\n                if (riskLevel > 75) {\n                    riskBar.classList.remove('bg-yellow-500', 'bg-green-500');\n                    riskBar.classList.add('bg-red-600');\n                } else if (riskLevel > 40) {\n                    riskBar.classList.remove('bg-red-600', 'bg-green-500');\n                    riskBar.classList.add('bg-yellow-500');\n                } else {\n                    riskBar.classList.remove('bg-red-600', 'bg-yellow-500');\n                    riskBar.classList.add('bg-green-500'); \/\/ Starter som gr\u00f8nn\n                }\n\n                if (riskLevel >= 100) {\n                    endGame();\n                }\n            }\n            \n            \/\/ Oppdaterer poengsum\n            function updateScore(amount) {\n                score += amount;\n                scoreDisplay.textContent = score;\n            }\n\n            \/\/ Lager et nytt fallende element\n            function spawnItem() {\n                if (!gameActive) return;\n\n                const item = document.createElement('div');\n                item.classList.add('item', 'absolute', 'text-3xl');\n                \n                const isBad = Math.random() > 0.4; \/\/ 60% sjanse for bra, 40% for d\u00e5rlig\n                if (isBad) {\n                    item.innerHTML = badItems&#91;Math.floor(Math.random() * badItems.length)];\n                    item.dataset.type = 'bad';\n                } else {\n                    item.innerHTML = goodItems&#91;Math.floor(Math.random() * goodItems.length)];\n                    item.dataset.type = 'good';\n                }\n\n                item.style.left = (Math.random() * 90 + 5) + '%'; \/\/ 5% margin\n                item.style.top = '-40px'; \/\/ Starter utenfor toppen\n                item.speed = Math.random() * 2 + 2; \/\/ Variabel hastighet\n                \n                \/\/ Overstyrer animasjonshastighet\n                item.style.animationDuration = (Math.random() * 2 + 4) + 's';\n\n                gameArea.appendChild(item);\n            }\n\n            \/\/ Enkel kollisjonssjekk\n            function isColliding(rect1, rect2) {\n                return !(\n                    rect1.right &lt; rect2.left ||\n                    rect1.left > rect2.right ||\n                    rect1.bottom &lt; rect2.top ||\n                    rect1.top > rect2.bottom\n                );\n            }\n\n            \/\/ --- Event Listeners ---\n\n            \/\/ Tastaturkontroll\n            document.addEventListener('keydown', (e) => {\n                if (e.key === 'ArrowLeft') moveLeft = true;\n                if (e.key === 'ArrowRight') moveRight = true;\n            });\n            document.addEventListener('keyup', (e) => {\n                if (e.key === 'ArrowLeft') moveLeft = false;\n                if (e.key === 'ArrowRight') moveRight = false;\n            });\n\n            \/\/ Touch-kontroll (mobil)\n            function handleTouchMove(e) {\n                e.preventDefault(); \/\/ Forhindrer scrolling\n                if (!gameActive) return;\n                \n                const touchX = e.touches&#91;0].clientX;\n                const gameAreaRect = gameArea.getBoundingClientRect();\n                const newX = touchX - gameAreaRect.left;\n                \n                \/\/ Konverterer piksel-posisjon til prosent\n                playerX = (newX \/ gameAreaRect.width) * 100;\n                playerX = Math.max(5, Math.min(95, playerX));\n                player.style.left = playerX + '%';\n            }\n\n            gameArea.addEventListener('touchmove', handleTouchMove, { passive: false });\n            gameArea.addEventListener('touchstart', (e) => {\n                \/\/ Kj\u00f8rer f\u00f8rste bevegelse ved trykk\n                handleTouchMove(e);\n            }, { passive: false });\n\n            \/\/ Knapper\n            startButton.addEventListener('click', startGame);\n            restartButton.addEventListener('click', startGame);\n\n            \/\/ Initialiserer farge p\u00e5 riskobar\n            updateRisk(0);\n        });\n    &lt;\/script>\n\n&lt;\/body>&lt;\/html>\nUnknown.html\nUNsubscribe@flixbus.com. Trykk p\u00e5 Tab for \u00e5 sette inn.Viser Unknown.html.<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>Spill<\/p>","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1387","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Humor - AA Agder<\/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:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/humor\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Humor - AA Agder\" \/>\n<meta property=\"og:description\" content=\"Spill\" \/>\n<meta property=\"og:url\" content=\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/humor\/\" \/>\n<meta property=\"og:site_name\" content=\"AA Agder\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-14T19:23:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T19:23:24+00:00\" \/>\n<meta name=\"author\" content=\"Odd Einar Vold\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Odd Einar Vold\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/\",\"url\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/\",\"name\":\"Humor - AA Agder\",\"isPartOf\":{\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#website\"},\"datePublished\":\"2025-11-14T19:23:23+00:00\",\"dateModified\":\"2025-11-14T19:23:24+00:00\",\"author\":{\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#\/schema\/person\/888d10dc666e938b3c398ad64365de15\"},\"breadcrumb\":{\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Forside\",\"item\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Humor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#website\",\"url\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/\",\"name\":\"AA Rogaland\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#\/schema\/person\/888d10dc666e938b3c398ad64365de15\",\"name\":\"Odd Einar Vold\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5a767638907ab4be52e4e3c2d173e6a8d504704c464b8e5c3aea56cfa78fac00?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5a767638907ab4be52e4e3c2d173e6a8d504704c464b8e5c3aea56cfa78fac00?s=96&d=mm&r=g\",\"caption\":\"Odd Einar Vold\"},\"url\":\"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/author\/odd-einar-voldgmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Humor - AA Agder","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:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/humor\/","og_locale":"en_GB","og_type":"article","og_title":"Humor - AA Agder","og_description":"Spill","og_url":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/humor\/","og_site_name":"AA Agder","article_published_time":"2025-11-14T19:23:23+00:00","article_modified_time":"2025-11-14T19:23:24+00:00","author":"Odd Einar Vold","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Odd Einar Vold","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/","url":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/","name":"Humor - AA Agder","isPartOf":{"@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#website"},"datePublished":"2025-11-14T19:23:23+00:00","dateModified":"2025-11-14T19:23:24+00:00","author":{"@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#\/schema\/person\/888d10dc666e938b3c398ad64365de15"},"breadcrumb":{"@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/humor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Forside","item":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/"},{"@type":"ListItem","position":2,"name":"Humor"}]},{"@type":"WebSite","@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#website","url":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/","name":"AA Rogaland","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#\/schema\/person\/888d10dc666e938b3c398ad64365de15","name":"Odd Einar Vold","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5a767638907ab4be52e4e3c2d173e6a8d504704c464b8e5c3aea56cfa78fac00?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5a767638907ab4be52e4e3c2d173e6a8d504704c464b8e5c3aea56cfa78fac00?s=96&d=mm&r=g","caption":"Odd Einar Vold"},"url":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/author\/odd-einar-voldgmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/posts\/1387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/comments?post=1387"}],"version-history":[{"count":2,"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/posts\/1387\/revisions"}],"predecessor-version":[{"id":1389,"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/posts\/1387\/revisions\/1389"}],"wp:attachment":[{"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/media?parent=1387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/categories?post=1387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/confident-vaughan.20-100-198-70.plesk.page\/en\/wp-json\/wp\/v2\/tags?post=1387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}