{"id":6,"date":"2026-05-28T11:49:48","date_gmt":"2026-05-28T11:49:48","guid":{"rendered":"https:\/\/poocost.webgrida.no\/?page_id=6"},"modified":"2026-05-28T14:15:37","modified_gmt":"2026-05-28T12:15:37","slug":"poo-cost-calculator","status":"publish","type":"page","link":"https:\/\/poocost.webgrida.no\/","title":{"rendered":"Poo Cost Calculator"},"content":{"rendered":"\n<div id=\"poo-cost-app\">\n  <style>\n    #poo-cost-app {\n      min-height: 100vh;\n      background: #0c0a09;\n      color: #fafaf9;\n      padding: 12px;\n      display: flex;\n      justify-content: center;\n      font-family: \"Segoe UI\", Arial, sans-serif;\n      box-sizing: border-box;\n    }\n\n    #poo-cost-app * {\n      box-sizing: border-box;\n    }\n\n    #poo-cost-app .app {\n      width: 100%;\n      max-width: 390px;\n    }\n\n    #poo-cost-app .header {\n      text-align: center;\n      padding: 8px 0;\n    }\n\n    #poo-cost-app .emoji {\n      width: 64px;\n      height: 64px;\n      margin: 0 auto 12px;\n      border-radius: 999px;\n      background: #fcd34d;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      font-size: 38px;\n      box-shadow: 0 12px 28px rgba(0, 0, 0, 0.35);\n    }\n\n    #poo-cost-app .eyebrow {\n      margin: 0 0 8px;\n      color: #78716c;\n      font-size: 11px;\n      letter-spacing: 0.22em;\n      text-transform: uppercase;\n      line-height: 1.4;\n    }\n\n    #poo-cost-app h1 {\n      margin: 0;\n      color: #fafaf9;\n      font-size: 28px;\n      line-height: 1.05;\n      font-weight: 900;\n      letter-spacing: -0.03em;\n    }\n\n    #poo-cost-app .tagline {\n      margin: 8px 0 0;\n      color: #a8a29e;\n      font-size: 14px;\n      line-height: 1.45;\n    }\n\n    #poo-cost-app details {\n      margin-top: 16px;\n      border: 1px solid #292524;\n      border-radius: 18px;\n      background: #1c1917;\n      overflow: hidden;\n      text-align: left;\n    }\n\n    #poo-cost-app summary {\n      cursor: pointer;\n      padding: 12px 14px;\n      color: #d6d3d1;\n      font-size: 14px;\n      font-weight: 600;\n      list-style: none;\n    }\n\n    #poo-cost-app summary::-webkit-details-marker {\n      display: none;\n    }\n\n    #poo-cost-app .details-body {\n      border-top: 1px solid #292524;\n      padding: 14px;\n      color: #d6d3d1;\n      font-size: 14px;\n      line-height: 1.5;\n    }\n\n    #poo-cost-app .card {\n      border: 1px solid #292524;\n      border-radius: 24px;\n      background: #1c1917;\n      padding: 16px;\n      margin-top: 12px;\n      box-shadow: 0 18px 45px rgba(0, 0, 0, 0.25);\n    }\n\n    #poo-cost-app label {\n      display: block;\n      color: #a8a29e;\n      font-size: 14px;\n      margin-bottom: 8px;\n    }\n\n    #poo-cost-app input {\n      width: 100%;\n      border: 1px solid #57534e;\n      border-radius: 18px;\n      background: #000;\n      color: #fafaf9;\n      padding: 14px 16px;\n      font-size: 30px;\n      line-height: 1.1;\n      font-weight: 900;\n      outline: none;\n    }\n\n    #poo-cost-app input:focus {\n      border-color: #fcd34d;\n      box-shadow: 0 0 0 3px rgba(252, 211, 77, 0.18);\n    }\n\n    #poo-cost-app .helper {\n      display: block;\n      color: #78716c;\n      font-size: 12px;\n      margin-top: 8px;\n      line-height: 1.35;\n    }\n\n    #poo-cost-app .timer-card {\n      margin-top: 16px;\n      border: 1px solid #44403c;\n      border-radius: 24px;\n      background: #000;\n      padding: 20px;\n      text-align: center;\n    }\n\n    #poo-cost-app .small-muted {\n      color: #a8a29e;\n      font-size: 14px;\n      margin: 0 0 6px;\n    }\n\n    #poo-cost-app .timer {\n      margin: 0;\n      color: #fafaf9;\n      font-size: 58px;\n      line-height: 1;\n      font-weight: 900;\n      font-variant-numeric: tabular-nums;\n    }\n\n    #poo-cost-app .cost-card {\n      margin-top: 16px;\n      border-radius: 24px;\n      background: #fcd34d;\n      color: #1c1917;\n      padding: 20px;\n      text-align: center;\n    }\n\n    #poo-cost-app .cost-label {\n      margin: 0;\n      font-size: 12px;\n      font-weight: 800;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n    }\n\n    #poo-cost-app .cost {\n      margin: 4px 0 0;\n      color: #000;\n      font-size: 44px;\n      line-height: 1;\n      font-weight: 900;\n      letter-spacing: -0.04em;\n    }\n\n    #poo-cost-app .usd {\n      margin: 6px 0 0;\n      font-size: 14px;\n      opacity: 0.75;\n    }\n\n    #poo-cost-app .button-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 8px;\n      margin-top: 16px;\n    }\n\n    #poo-cost-app button {\n      height: 62px;\n      border: 0;\n      border-radius: 18px;\n      color: #fff;\n      font-size: 16px;\n      font-weight: 800;\n      cursor: pointer;\n    }\n\n    #poo-cost-app .start-button {\n      background: #059669;\n    }\n\n    #poo-cost-app .stop-button {\n      background: #dc2626;\n    }\n\n    #poo-cost-app .reset-button {\n      background: #44403c;\n    }\n\n    #poo-cost-app .message-box {\n      margin-top: 16px;\n      border-radius: 18px;\n      background: #292524;\n      color: #d6d3d1;\n      padding: 12px;\n      text-align: center;\n      font-size: 14px;\n      line-height: 1.4;\n    }\n\n    #poo-cost-app .quote-box {\n      margin-top: 8px;\n      border: 1px solid #292524;\n      border-radius: 18px;\n      background: #000;\n      color: #e7e5e4;\n      padding: 14px;\n      text-align: center;\n    }\n\n    #poo-cost-app .quote-title {\n      margin: 0 0 8px;\n      color: #78716c;\n      font-size: 11px;\n      font-weight: 800;\n      text-transform: uppercase;\n      letter-spacing: 0.08em;\n    }\n\n    #poo-cost-app .quote-text {\n      margin: 0;\n      font-size: 14px;\n      line-height: 1.45;\n      font-style: italic;\n    }\n\n    #poo-cost-app .totals-grid {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 8px;\n    }\n\n    #poo-cost-app .total-box,\n    #poo-cost-app .usd-total {\n      border: 1px solid #292524;\n      border-radius: 18px;\n      background: #000;\n      padding: 12px;\n      text-align: center;\n    }\n\n    #poo-cost-app .usd-total {\n      margin-top: 10px;\n      padding: 14px;\n    }\n\n    #poo-cost-app .total-label {\n      margin: 0;\n      color: #78716c;\n      font-size: 12px;\n    }\n\n    #poo-cost-app .total-value {\n      margin: 4px 0 0;\n      color: #fafaf9;\n      font-size: 23px;\n      font-weight: 900;\n    }\n\n    #poo-cost-app .footer {\n      padding: 12px 4px 4px;\n      text-align: center;\n      color: #78716c;\n      font-size: 11px;\n      line-height: 1.4;\n    }\n  <\/style>\n\n  <main class=\"app\">\n    <header class=\"header\">\n      <div class=\"emoji\">\ud83d\udca9<\/div>\n      <p class=\"eyebrow\">GRID-Arendal Internal Efficiency Initiative<\/p>\n      <h1>The GRID-Arendal Poo Cost Calculator<\/h1>\n      <p class=\"tagline\">Supporting organisational efficiency, one toilet break at a time.<\/p>\n\n      <details>\n        <summary>+ Read the official initiative briefing<\/summary>\n        <div class=\"details-body\">\n          In a bold effort to improve productivity and help balance the books, the Science, Operations &amp; Impact team now requires all staff to log their toilet activity for monthly auditing purposes. While the finance team insists this is \u201cstrictly evidence-based\u201d, management would like to remind staff that this tool is entirely light-hearted, mildly unnecessary, and absolutely not linked to performance reviews.\n        <\/div>\n      <\/details>\n    <\/header>\n\n    <section class=\"card\">\n      <label for=\"pooMonthlySalary\">Monthly salary, NOK<\/label>\n      <input id=\"pooMonthlySalary\" type=\"number\" min=\"0\" inputmode=\"numeric\" value=\"60000\" \/>\n      <span class=\"helper\" id=\"pooHourlyRate\">Estimated hourly rate: 369,23 kr based on 162.5 work hours\/month.<\/span>\n\n      <div class=\"timer-card\">\n        <p class=\"small-muted\">Current throne time<\/p>\n        <p class=\"timer\" id=\"pooTimer\">00:00<\/p>\n      <\/div>\n\n      <div class=\"cost-card\">\n        <p class=\"cost-label\">Cost so far<\/p>\n        <p class=\"cost\" id=\"pooCurrentCost\">0,00 kr<\/p>\n        <p class=\"usd\" id=\"pooCurrentUsd\">\u2248 $0.00<\/p>\n      <\/div>\n\n      <div class=\"button-grid\">\n        <button type=\"button\" class=\"start-button\" id=\"pooStart\">\ud83d\udebd Start<\/button>\n        <button type=\"button\" class=\"reset-button\" id=\"pooReset\">\u21ba Reset<\/button>\n      <\/div>\n\n      <div class=\"message-box\" id=\"pooMessage\">Strategic reflection is under way.<\/div>\n\n      <div class=\"quote-box\">\n        <p class=\"quote-title\">Inspirational toilet wisdom<\/p>\n        <p class=\"quote-text\" id=\"pooQuote\">\u2018Nature does not hurry, yet everything is accomplished.\u2019 \u00b7 Lao Tzu<\/p>\n      <\/div>\n    <\/section>\n\n    <section class=\"card\">\n      <div class=\"totals-grid\">\n        <div class=\"total-box\">\n          <p class=\"total-label\">Sessions<\/p>\n          <p class=\"total-value\" id=\"pooSessions\">0<\/p>\n        <\/div>\n        <div class=\"total-box\">\n          <p class=\"total-label\">Total NOK<\/p>\n          <p class=\"total-value\" id=\"pooTotalNok\">0,00 kr<\/p>\n        <\/div>\n      <\/div>\n\n      <div class=\"usd-total\">\n        <p class=\"total-label\">Total in USD, for dramatic effect<\/p>\n        <p class=\"total-value\" id=\"pooTotalUsd\">$0.00<\/p>\n        <p class=\"helper\">Fixed internal joke rate: 1 kr = 0.094 $<\/p>\n      <\/div>\n    <\/section>\n\n    <footer class=\"footer\">\n      100% satire. 0% analytics. No salary or toilet data is stored, tracked, transmitted, or shared.\n    <\/footer>\n  <\/main>\n\n  <script>\n    (function () {\n      const NOK_TO_USD = 0.094;\n      const WORK_HOURS_PER_MONTH = 162.5;\n\n      const messages = [\n        \"Strategic reflection is under way.\",\n        \"Productivity has left the building.\",\n        \"A bold investment in digestive wellbeing.\",\n        \"This session will be billed to facilities.\",\n        \"Deliverables are pending internal processing.\",\n        \"A quiet moment for organisational resilience.\",\n        \"Your KPIs are circling the drain.\",\n        \"You are now monetising porcelain time.\"\n      ];\n\n      const quotes = [\n        \"\u2018Nature does not hurry, yet everything is accomplished.\u2019 \u00b7 Lao Tzu\",\n        \"\u2018The creation of a thousand forests is in one acorn.\u2019 \u00b7 Ralph Waldo Emerson\",\n        \"\u2018Almost everything will work again if you unplug it for a few minutes, including you.\u2019 \u00b7 Anne Lamott\",\n        \"\u2018To think creatively, we must be able to look afresh.\u2019 \u00b7 George Kneller\",\n        \"\u2018Simplicity is the ultimate sophistication.\u2019 \u00b7 Leonardo da Vinci\",\n        \"\u2018Well done is better than well said.\u2019 \u00b7 Benjamin Franklin\",\n        \"\u2018The quieter you become, the more you can hear.\u2019 \u00b7 Ram Dass\",\n        \"\u2018An early-morning walk is a blessing for the whole day.\u2019 \u00b7 Henry David Thoreau\",\n        \"\u2018Nothing is softer or more flexible than water, yet nothing can resist it.\u2019 \u00b7 Lao Tzu\",\n        \"\u2018Even the darkest night will end and the sun will rise.\u2019 \u00b7 Victor Hugo\"\n      ];\n\n      let seconds = 0;\n      let running = false;\n      let timer = null;\n      let sessions = 0;\n      let totalNok = 0;\n\n      const salaryInput = document.getElementById(\"pooMonthlySalary\");\n      const hourlyRateEl = document.getElementById(\"pooHourlyRate\");\n      const timerEl = document.getElementById(\"pooTimer\");\n      const currentCostEl = document.getElementById(\"pooCurrentCost\");\n      const currentUsdEl = document.getElementById(\"pooCurrentUsd\");\n      const startButton = document.getElementById(\"pooStart\");\n      const resetButton = document.getElementById(\"pooReset\");\n      const messageEl = document.getElementById(\"pooMessage\");\n      const quoteEl = document.getElementById(\"pooQuote\");\n      const sessionsEl = document.getElementById(\"pooSessions\");\n      const totalNokEl = document.getElementById(\"pooTotalNok\");\n      const totalUsdEl = document.getElementById(\"pooTotalUsd\");\n\n      function formatNok(value) {\n        return new Intl.NumberFormat(\"nb-NO\", {\n          style: \"currency\",\n          currency: \"NOK\",\n          maximumFractionDigits: 2\n        }).format(value);\n      }\n\n      function formatUsd(value) {\n        return new Intl.NumberFormat(\"en-US\", {\n          style: \"currency\",\n          currency: \"USD\",\n          maximumFractionDigits: 2\n        }).format(value);\n      }\n\n      function formatTime(totalSeconds) {\n        const minutes = Math.floor(totalSeconds \/ 60);\n        const secs = totalSeconds % 60;\n        return String(minutes).padStart(2, \"0\") + \":\" + String(secs).padStart(2, \"0\");\n      }\n\n      function getHourlyRate() {\n        const monthlySalary = Number(salaryInput.value || 0);\n        return monthlySalary \/ WORK_HOURS_PER_MONTH;\n      }\n\n      function getCurrentCostNok() {\n        return seconds * (getHourlyRate() \/ 3600);\n      }\n\n      function randomItem(items) {\n        return items[Math.floor(Math.random() * items.length)];\n      }\n\n      function updateDisplay() {\n        const hourlyRate = getHourlyRate();\n        const currentCost = getCurrentCostNok();\n\n        hourlyRateEl.textContent = \"Estimated hourly rate: \" + formatNok(hourlyRate) + \" based on \" + WORK_HOURS_PER_MONTH + \" work hours\/month.\";\n        timerEl.textContent = formatTime(seconds);\n        currentCostEl.textContent = formatNok(currentCost);\n        currentUsdEl.textContent = \"\u2248 \" + formatUsd(currentCost * NOK_TO_USD);\n        sessionsEl.textContent = String(sessions);\n        totalNokEl.textContent = formatNok(totalNok);\n        totalUsdEl.textContent = formatUsd(totalNok * NOK_TO_USD);\n      }\n\n      function start() {\n        if (running) return;\n        seconds = 0;\n        running = true;\n        startButton.textContent = \"\u23f9 Stop\";\n        startButton.classList.remove(\"start-button\");\n        startButton.classList.add(\"stop-button\");\n        messageEl.textContent = randomItem(messages);\n        quoteEl.textContent = randomItem(quotes);\n\n        timer = window.setInterval(function () {\n          seconds += 1;\n          updateDisplay();\n        }, 1000);\n\n        updateDisplay();\n      }\n\n      function stop() {\n        if (!running) return;\n        running = false;\n        window.clearInterval(timer);\n        timer = null;\n        sessions += 1;\n        totalNok += getCurrentCostNok();\n        startButton.textContent = \"\ud83d\udebd Start\";\n        startButton.classList.remove(\"stop-button\");\n        startButton.classList.add(\"start-button\");\n        updateDisplay();\n      }\n\n      function reset() {\n        if (timer) {\n          window.clearInterval(timer);\n        }\n        timer = null;\n        running = false;\n        seconds = 0;\n        sessions = 0;\n        totalNok = 0;\n        startButton.textContent = \"\ud83d\udebd Start\";\n        startButton.classList.remove(\"stop-button\");\n        startButton.classList.add(\"start-button\");\n        messageEl.textContent = messages[0];\n        quoteEl.textContent = quotes[0];\n        updateDisplay();\n      }\n\n      startButton.addEventListener(\"click\", function () {\n        if (running) {\n          stop();\n        } else {\n          start();\n        }\n      });\n\n      resetButton.addEventListener(\"click\", reset);\n      salaryInput.addEventListener(\"input\", updateDisplay);\n\n      updateDisplay();\n    })();\n  <\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udca9 GRID-Arendal Internal Efficiency Initiative The GRID-Arendal Poo Cost Calculator Supporting organisational efficiency, one toilet break at a time. + Read the official initiative briefing In a bold effort to improve productivity and help balance the books, the Science, Operations &amp; Impact team now requires all staff to log their toilet activity for monthly auditing [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6"}],"version-history":[{"count":3,"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":18,"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions\/18"}],"wp:attachment":[{"href":"https:\/\/poocost.webgrida.no\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}