{"id":5833,"date":"2025-09-03T21:35:38","date_gmt":"2025-09-04T02:35:38","guid":{"rendered":"https:\/\/madlysane.com\/?page_id=5833"},"modified":"2025-09-23T07:09:09","modified_gmt":"2025-09-23T12:09:09","slug":"madlymatch","status":"publish","type":"page","link":"https:\/\/madlysane.site\/en\/madlymatch\/","title":{"rendered":"Madlymatch"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>Madly Match \u2013 Daily Sanity Puzzle<\/title>\n\n<!-- Social metadata (optional tune-up) -->\n<meta property=\"og:title\" content=\"Madly Match \u2013 Daily Sanity Puzzle\" \/>\n<meta property=\"og:description\" content=\"Match real-life challenges to uplifting solutions. New puzzle every day. Stay Madly Sane!\" \/>\n<meta property=\"og:type\" content=\"website\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n\n<style>\n  :root{\n    \/* ====== PLACEHOLDERS: set your brand colors ====== *\/\n    --brand: #4a148c;     \/* BRAND_PRIMARY *\/\n    --brand-light:#e1bee7;\/* BRAND_ACCENT (lighter tint for cards) *\/\n    --accent:#fce4ec;\n    --ok:#c8e6c9;\n    --err:#ffcdd2;\n    --card:#ffffff;\n    --bg:#f7f6fb;\n  }\n  *{box-sizing:border-box}\n  body {\n    margin:0; font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n    background: var(--bg); color:#222; text-align:center; padding: 20px 14px 60px;\n  }\n  header { max-width: 980px; margin: 0 auto 10px; }\n  h1 { margin: 8px 0 4px; color: var(--brand); font-weight: 800; }\n  p.sub { margin: 0 0 14px; color:#555; }\n  .meta { font-size: 14px; color:#666; margin-top: 4px; }\n\n  .brandbar { display:flex; gap:12px; align-items:center; justify-content:center; }\n  .brandbar img { height: 40px; width:auto; display:block; }\n  .brandtext { font-weight:800; color: var(--brand); }\n\n  .wrap { max-width: 980px; margin: 0 auto; }\n  .container {\n    display:flex; gap: 28px; justify-content: center; align-items:flex-start; flex-wrap: wrap; margin-top: 18px;\n  }\n  .column {\n    background: var(--card); padding: 16px; border-radius: 12px;\n    box-shadow: 0 4px 18px rgba(0,0,0,0.06); width: min(420px, 100%);\n  }\n  .column h3 { margin: 0 0 10px; color:#333; }\n  .dropzone, .card {\n    border-radius: 10px; padding: 12px 12px; text-align:left;\n    transition: transform .08s ease, background .2s ease, border .2s ease;\n  }\n  .dropzone {\n    background: var(--accent); border: 2px dashed #ce93d8; min-height: 54px; margin: 10px 0;\n  }\n  .dropzone.correct { background: var(--ok) !important; border-color: #66bb6a; }\n  .dropzone.wrong { background: var(--err) !important; border-color: #e57373; }\n  .card {\n    background: var(--brand-light); margin: 10px 0; cursor: grab; user-select: none;\n  }\n  .card:active { transform: scale(.98); }\n  .card.selected { outline: 3px solid var(--brand); }\n  .zones, .cards { margin-top: 6px; }\n  .panel {\n    max-width: 980px; margin: 18px auto 0; background: var(--card); padding: 14px; border-radius: 12px;\n    box-shadow: 0 4px 18px rgba(0,0,0,0.06);\n  }\n  .result { font-weight: 700; margin: 8px 0 12px; }\n  .btns { display:flex; flex-wrap: wrap; gap:10px; justify-content:center; }\n  button, .sharelink {\n    appearance: none; border: none; border-radius: 10px; padding: 10px 14px; font-weight: 700;\n    background: var(--brand); color: #fff; cursor: pointer; text-decoration: none; display:inline-flex; align-items:center; gap:8px;\n  }\n  button.secondary { background: #6a1b9a; }\n  button.ghost, .sharelink.ghost { background: #fff; color: var(--brand); border:2px solid var(--brand); }\n  .badge { font-size: 12px; padding: 2px 8px; border-radius: 999px; background: #ede7f6; color:#4527a0; font-weight:700; display:inline-block;}\n  footer { margin-top: 20px; color:#666; font-size: 13px; }\n  canvas { display: none; margin-top: 12px; }\n  @media (hover:hover) {.card:hover { transform: translateY(-1px); }}\n<\/style>\n<\/head>\n<body>\n<header>\n  <div class=\"brandbar\">\n    <!-- ====== PLACEHOLDER: set your logo URL below in JS (LOGO_URL) ====== -->\n    <img id=\"brandLogo\" alt=\"MadlySane logo\" style=\"display:none;\" \/>\n    <div class=\"brandtext\" id=\"brandFallback\">MadlySane.com<\/div>\n  <\/div>\n  <span class=\"badge\">MadlySane.com<\/span>\n  <h1>Madly Match \u2013 Daily Sanity Puzzle<\/h1>\n  <p class=\"sub\">Match each real-life challenge with the best solution. New puzzle every day. Share your time and challenge a friend.<\/p>\n  <div class=\"meta\" id=\"todayMeta\"><\/div>\n<\/header>\n\n<div class=\"wrap\">\n  <div class=\"container\">\n    <div class=\"column\" id=\"challengesCol\">\n      <h3>Challenges<\/h3>\n      <div class=\"zones\" id=\"challenges\"><\/div>\n    <\/div>\n    <div class=\"column\" id=\"solutionsCol\">\n      <h3>Solutions<\/h3>\n      <div class=\"cards\" id=\"solutions\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"panel\" id=\"panel\" style=\"display:none;\">\n    <div class=\"result\" id=\"result\"><\/div>\n    <div class=\"btns\">\n      <button id=\"copyBtn\">Copy share text<\/button>\n      <button class=\"secondary\" id=\"downloadBtn\">Download share card<\/button>\n      <a id=\"shareNative\" class=\"sharelink ghost\" href=\"#\" role=\"button\">Share\u2026<\/a>\n      <a id=\"shareX\" class=\"sharelink ghost\" target=\"_blank\" rel=\"noopener\">Share on X<\/a>\n      <a id=\"shareFB\" class=\"sharelink ghost\" target=\"_blank\" rel=\"noopener\">Share on Facebook<\/a>\n      <a id=\"shareLI\" class=\"sharelink ghost\" target=\"_blank\" rel=\"noopener\">Share on LinkedIn<\/a>\n    <\/div>\n    <canvas id=\"shareCanvas\" width=\"1000\" height=\"520\"><\/canvas>\n  <\/div>\n<\/div>\n\n<footer>\n  Pro tip: Tap a solution, then tap a challenge to match on mobile. On desktop, drag-and-drop works too.\n<\/footer>\n\n<script>\n\/* =========================\n   BRAND PLACEHOLDERS\n   =========================\n   - Update these values for your brand.\n*\/\nconst LOGO_URL = \"\/images\/madlysane-logo.png\";  \/\/ e.g., \"\/images\/madlysane-logo.png\" (same-origin recommended)\nconst TAGLINE  = \"You stayed Madly Sane today!\"; \/\/ Share-card tagline\nconst GAME_URL = (location.origin ? location.origin : \"https:\/\/madlysane.site\") + \"\/en\/madlymatch\"; \/\/ Canonical game URL\n\n\/* =========================\n   LOAD HEADER LOGO (optional)\n   ========================= *\/\n(function setBranding(){\n  const img = document.getElementById('brandLogo');\n  const fallback = document.getElementById('brandFallback');\n  if (!LOGO_URL) return; \/\/ no logo set\n  img.onload = () => { img.style.display = \"block\"; fallback.style.display = \"none\"; };\n  img.onerror = () => { img.style.display = \"none\"; fallback.style.display = \"block\"; };\n  img.src = LOGO_URL;\n})();\n\n\/* =========================\n   30-DAY PUZZLES (edit\/add freely)\n   ========================= *\/\nconst puzzles = [\n  {challenges:[{text:\"Feeling stressed at work\",answer:\"Take a 5 min walk\"},{text:\"Feeling lonely\",answer:\"Call a friend\"},{text:\"Overthinking before bed\",answer:\"Write in a journal\"}]},\n  {challenges:[{text:\"Too many emails\",answer:\"Set a 15 min email timer\"},{text:\"Low energy\",answer:\"Drink water and stretch\"},{text:\"Creative block\",answer:\"Change your environment\"}]},\n  {challenges:[{text:\"Feeling overwhelmed\",answer:\"Break tasks into small steps\"},{text:\"Can't focus\",answer:\"Try the Pomodoro technique\"},{text:\"Feeling disconnected\",answer:\"Join a local group or class\"}]},\n  {challenges:[{text:\"Procrastinating hard tasks\",answer:\"Do a 2 minute starter task\"},{text:\"Morning anxiety\",answer:\"Breathe 4 7 8 for one minute\"},{text:\"Afternoon slump\",answer:\"Get sunlight for 5 minutes\"}]},\n  {challenges:[{text:\"Negative self talk\",answer:\"Write one compassionate counter statement\"},{text:\"Doomscrolling\",answer:\"Set a 10 minute app limit\"},{text:\"Decision fatigue\",answer:\"Create a simple default choice\"}]},\n  {challenges:[{text:\"Tense shoulders\",answer:\"Progressive muscle relaxation\"},{text:\"Racing thoughts\",answer:\"Brain dump on paper\"},{text:\"Social hesitation\",answer:\"Send one kind message\"}]},\n  {challenges:[{text:\"Skipping meals\",answer:\"Prep a simple snack plate\"},{text:\"Not sleeping well\",answer:\"No screens 30 minutes before bed\"},{text:\"Missing workouts\",answer:\"Commit to a 5 minute move\"}]},\n  {challenges:[{text:\"Feeling stuck at home\",answer:\"Change rooms or step outside\"},{text:\"Clutter stress\",answer:\"Declutter one small surface\"},{text:\"Perfectionism\",answer:\"Publish a 'good enough' draft\"}]},\n  {challenges:[{text:\"Irritable mood\",answer:\"Drink water and walk 300 steps\"},{text:\"Isolation\",answer:\"Plan a 15 minute catch up\"},{text:\"Self doubt\",answer:\"List 3 recent wins\"}]},\n  {challenges:[{text:\"Meeting overload\",answer:\"Block a focus hour\"},{text:\"Endless to do list\",answer:\"Pick the top 3 for today\"},{text:\"News anxiety\",answer:\"Limit to one summary per day\"}]},\n  {challenges:[{text:\"Comparing yourself\",answer:\"Mute triggers for a week\"},{text:\"Saying yes to everything\",answer:\"Use a 24 hour pause before yes\"},{text:\"Mindless snacking\",answer:\"Eat a mindful first bite\"}]},\n  {challenges:[{text:\"Feeling behind\",answer:\"Define 'done' for one task\"},{text:\"Sunday scaries\",answer:\"Write a Monday micro plan\"},{text:\"Inbox chaos\",answer:\"Unsubscribe from 5 emails\"}]},\n  {challenges:[{text:\"Money worries\",answer:\"Check balances without judgment\"},{text:\"Project drag\",answer:\"Set a 15 min sprint with music\"},{text:\"Chores piling up\",answer:\"Pair chores with a podcast\"}]},\n  {challenges:[{text:\"People pleasing\",answer:\"Practice a kind 'no'\"},{text:\"Overcommitted schedule\",answer:\"Cancel one nonessential thing\"},{text:\"Phone addiction\",answer:\"Charge it outside the bedroom\"}]},\n  {challenges:[{text:\"Midweek burnout\",answer:\"Plan a small midweek treat\"},{text:\"Fear of failure\",answer:\"Write the worst case and a plan\"},{text:\"Analysis paralysis\",answer:\"Flip a coin to surface your gut\"}]},\n  {challenges:[{text:\"Habit inconsistency\",answer:\"Anchor habit to an existing routine\"},{text:\"Low motivation\",answer:\"Temptation bundle with a favorite\"},{text:\"Forgetfulness\",answer:\"Set a 2 minute reminder now\"}]},\n  {challenges:[{text:\"Conflict avoidance\",answer:\"Draft the first sentence only\"},{text:\"Work\/life blur\",answer:\"Add a 5 min shutdown ritual\"},{text:\"Skipping breaks\",answer:\"Add a micro break after meetings\"}]},\n  {challenges:[{text:\"Overeating at night\",answer:\"Eat a protein snack earlier\"},{text:\"Feeling unseen\",answer:\"Ask for feedback from a friend\"},{text:\"Lack of joy\",answer:\"Schedule 15 minutes of play\"}]},\n  {challenges:[{text:\"Shaky confidence\",answer:\"Power pose for 60 seconds\"},{text:\"Cluttered mind\",answer:\"Sort tasks into Now\/Next\/Later\"},{text:\"Low creativity\",answer:\"Notebook a bad idea on purpose\"}]},\n  {challenges:[{text:\"Worried about judgment\",answer:\"Share one imperfect thing\"},{text:\"Stuck indoors\",answer:\"Open a window, change air\"},{text:\"Monotony\",answer:\"Try a new route or caf\u00e9\"}]},\n  {challenges:[{text:\"Overgiving\",answer:\"Set a boundary statement\"},{text:\"Back to back calls\",answer:\"Schedule buffer blocks\"},{text:\"Evening restlessness\",answer:\"Stretch with slow music\"}]},\n  {challenges:[{text:\"Late starts\",answer:\"Prepare tomorrow\u2019s clothes now\"},{text:\"Unclear priorities\",answer:\"Write your 'one win' for today\"},{text:\"Mind clutter\",answer:\"Clean your desktop for 3 mins\"}]},\n  {challenges:[{text:\"Harsh inner critic\",answer:\"Talk to yourself like a friend\"},{text:\"Overload of tabs\",answer:\"Bookmark and close to 5 tabs\"},{text:\"Distraction spiral\",answer:\"Full screen the current task\"}]},\n  {challenges:[{text:\"Dreading a task\",answer:\"Put it on a 10 min timer\"},{text:\"Unfinished projects\",answer:\"Decide: finish, delegate, delete\"},{text:\"No time to cook\",answer:\"Default to a healthy fallback\"}]},\n  {challenges:[\n  {text:\"Brain fog mid-morning\",answer:\"Switch to a task that uses a different skill\"},\n  {text:\"Avoiding a tough email\",answer:\"Write the subject line only\"},\n  {text:\"Feeling socially drained\",answer:\"Schedule a solo recharge activity\"}\n]},  {challenges:[{text:\"Relationship tension\",answer:\"Lead with 'I feel' not 'you'\"},{text:\"Overthinking reply\",answer:\"Draft, breathe, send later\"},{text:\"Feeling invisible at work\",answer:\"Share a weekly win\"}]},\n  {challenges:[{text:\"Catastrophizing\",answer:\"Ask: will it matter in a year?\"},{text:\"Stale routine\",answer:\"Try a 10 min new skill\"},{text:\"Feeling messy\",answer:\"Reset the room corners\"}]},\n  {challenges:[{text:\"Stretched thin\",answer:\"Cut scope, keep the promise\"},{text:\"Unclear task\",answer:\"Write the first next action\"},{text:\"Missed workout\",answer:\"Do 10 squats and 10 breaths\"}]},\n  {challenges:[{text:\"Creative fear\",answer:\"Make a tiny ugly draft\"},{text:\"Cold outreach dread\",answer:\"Send one low stakes message\"},{text:\"Mind racing at night\",answer:\"Park worries on a notecard\"}]},\n  {challenges:[{text:\"Screen fatigue\",answer:\"10 20 30 eye\/stand rule\"},{text:\"Skipped water\",answer:\"Drink 12 oz right now\"},{text:\"Nervous energy\",answer:\"Shake it out for 30 seconds\"}]}\n];\n\n\/\/ Rollover happens at 4:00 AM local time\nconst rolloverHour = 4;\n\nconst now = new Date();\nconst msInDay = 1000 * 60 * 60 * 24;\n\n\/\/ Build an \"effective\" local date that only advances after rolloverHour\nconst effectiveNow = new Date(now);\n\n\/\/ If it's before the rollover hour, treat it as the previous day\nif (effectiveNow.getHours() < rolloverHour) {\n  effectiveNow.setDate(effectiveNow.getDate() - 1);\n}\n\n\/\/ Use midnight local time for day math\neffectiveNow.setHours(0, 0, 0, 0);\n\nconst startOfYear = new Date(effectiveNow.getFullYear(), 0, 1);\nstartOfYear.setHours(0, 0, 0, 0);\n\n\/\/ Day-of-year based on the effective day (changes at 4 AM local time)\nconst dayOfYear = Math.floor((effectiveNow - startOfYear) \/ msInDay);\n\n\/\/ Pick today's puzzle\nconst puzzle = puzzles[dayOfYear % puzzles.length];\n\n\/\/ Update meta info (date shown is the user's actual local date)\ndocument.getElementById('todayMeta').textContent =\n  `Day ${((dayOfYear % puzzles.length) + 1)} \u2022 ${now.toLocaleDateString()}`;\n\n\/\/ Populate challenges and solutions\nconst challengesDiv = document.getElementById('challenges');\nconst solutionsDiv = document.getElementById('solutions');\n\npuzzle.challenges.forEach(c => {\n  const dz = document.createElement('div');\n  dz.className = 'dropzone';\n  dz.dataset.answer = c.answer;\n  dz.textContent = c.text;\n  challengesDiv.appendChild(dz);\n});\n\nlet solutions = puzzle.challenges.map(c => c.answer);\nsolutions.sort(() => Math.random() - 0.5);\nsolutions.forEach(s => {\n  const card = document.createElement('div');\n  card.className = 'card';\n  card.textContent = s;\n  card.draggable = true;\n  solutionsDiv.appendChild(card);\n});\n\n\n\/* =========================\n   GAME LOGIC\n   ========================= *\/\nlet correctCount = 0;\nlet startTime = Date.now();\nlet selectedCard = null;\n\n\/\/ Desktop drag\ndocument.querySelectorAll('.card').forEach(card => {\n  card.addEventListener('dragstart', e => {\n    e.dataTransfer.setData('text\/plain', card.textContent);\n  });\n  \/\/ Mobile tap-to-select\n  card.addEventListener('click', () => {\n    if (selectedCard && selectedCard !== card) selectedCard.classList.remove('selected');\n    selectedCard = (selectedCard === card) ? null : card;\n    card.classList.toggle('selected');\n  });\n});\n\ndocument.querySelectorAll('.dropzone').forEach(zone => {\n  zone.addEventListener('dragover', e => e.preventDefault());\n  zone.addEventListener('drop', e => {\n    e.preventDefault();\n    const draggedText = e.dataTransfer.getData('text\/plain');\n    checkMatch(zone, draggedText);\n  });\n  \/\/ Mobile tap-to-place\n  zone.addEventListener('click', () => {\n    if (!selectedCard) return;\n    checkMatch(zone, selectedCard.textContent);\n  });\n});\n\nfunction checkMatch(zone, text) {\n  if (zone.classList.contains('correct')) return;\n  if (text === zone.dataset.answer) {\n    zone.classList.add('correct');\n    zone.textContent = zone.textContent + `  \u2705 (${text})`;\n    \/\/ remove the matched card\n    const card = [...document.querySelectorAll('.card')].find(c => c.textContent === text);\n    if (card) card.remove();\n    if (selectedCard === card) selectedCard = null;\n    correctCount++;\n    if (correctCount === puzzle.challenges.length) {\n      const timeTaken = Math.floor((Date.now() - startTime) \/ 1000);\n      onSolved(timeTaken);\n    }\n  } else {\n    zone.classList.add('wrong');\n    setTimeout(() => zone.classList.remove('wrong'), 450);\n  }\n}\n\n\/* =========================\n   COMPLETION & SHARING\n   ========================= *\/\nfunction onSolved(timeTaken) {\n  const panel = document.getElementById('panel');\n  const result = document.getElementById('result');\n  panel.style.display = 'block';\n  result.textContent = `\ud83c\udf89 You solved today's puzzle in ${timeTaken} seconds!`;\n\n  const shareText = `I solved today's #MadlyMatch puzzle in ${timeTaken} seconds! Play at ${GAME_URL}`;\n  const title = \"Madly Match \u2013 Daily Sanity Puzzle\";\n  const url = GAME_URL;\n\n  \/\/ Copy share text\n  document.getElementById('copyBtn').onclick = () => {\n    navigator.clipboard.writeText(shareText);\n    alert(\"Copied to clipboard! Share it on your socials.\");\n  };\n\n  \/\/ Native share (mobile)\n  const shareNative = document.getElementById('shareNative');\n  if (navigator.share) {\n    shareNative.onclick = async (e) => {\n      e.preventDefault();\n      try { await navigator.share({ title, text: shareText, url }); } catch {}\n    };\n  } else {\n    shareNative.style.display = 'none';\n  }\n\n  \/\/ Social links\n  const encText = encodeURIComponent(shareText);\n  const encURL = encodeURIComponent(url);\n  document.getElementById('shareX').href  = `https:\/\/twitter.com\/intent\/tweet?text=${encText}&url=${encURL}`;\n  document.getElementById('shareFB').href = `https:\/\/www.facebook.com\/sharer\/sharer.php?u=${encURL}`;\n  document.getElementById('shareLI').href = `https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=${encURL}`;\n\n  \/\/ Build branded share card (with logo if available)\n  buildShareCard(timeTaken);\n}\n\nfunction buildShareCard(timeTaken) {\n  const canvas = document.getElementById('shareCanvas');\n  const ctx = canvas.getContext('2d');\n\n  \/\/ Background\n  ctx.fillStyle = \"#f7f6fb\";\n  ctx.fillRect(0,0,canvas.width,canvas.height);\n\n  \/\/ Accent stripe\n  ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--brand-light').trim() || \"#e1bee7\";\n  ctx.fillRect(0,0,canvas.width,110);\n\n  \/\/ Try to draw logo; if it fails, draw brand text\n  const tryLogo = new Image();\n  tryLogo.crossOrigin = \"anonymous\"; \/\/ works if same-origin or with proper CORS headers\n  tryLogo.onload = () => {\n    const maxH = 64, maxW = 260;\n    let w = tryLogo.width, h = tryLogo.height;\n    const scale = Math.min(maxW\/w, maxH\/h);\n    w = Math.round(w*scale); h = Math.round(h*scale);\n    ctx.drawImage(tryLogo, 28, 24, w, h);\n    drawShareText(ctx, timeTaken, true);\n    finalizeDownload();\n  };\n  tryLogo.onerror = () => {\n    \/\/ Title \/ Brand fallback\n    ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--brand').trim() || \"#4a148c\";\n    ctx.font = \"bold 44px system-ui, -apple-system, Segoe UI, Roboto, Arial\";\n    ctx.fillText(\"Madly Match\", 28, 70);\n    ctx.fillStyle = \"#4527a0\";\n    ctx.font = \"bold 22px system-ui, -apple-system, Segoe UI, Roboto, Arial\";\n    ctx.fillText(\"MadlySane.com\", 28, 100);\n    drawShareText(ctx, timeTaken, false);\n    finalizeDownload();\n  };\n  tryLogo.src = LOGO_URL || \"\"; \/\/ empty will trigger onerror immediately\n\n  canvas.style.display = 'block';\n\n  function drawShareText(ctx, timeTaken, logoDrawn) {\n    \/\/ Main text\n    ctx.fillStyle = \"#222\";\n    ctx.font = \"28px system-ui, -apple-system, Segoe UI, Roboto, Arial\";\n    ctx.fillText(`Solved today's puzzle in ${timeTaken} seconds!`, 28, 170);\n\n    \/\/ Tagline + date\n    ctx.font = \"22px system-ui, -apple-system, Segoe UI, Roboto, Arial\";\n    ctx.fillText(TAGLINE, 28, 210);\n    ctx.fillText(`Date: ${new Date().toLocaleDateString()}`, 28, 246);\n\n    \/\/ CTA box\n    const brandColor = getComputedStyle(document.documentElement).getPropertyValue('--brand').trim() || \"#4a148c\";\n    ctx.fillStyle = brandColor;\n    ctx.fillRect(28, 310, 780, 72);\n    ctx.fillStyle = \"#fff\";\n    ctx.font = \"bold 26px system-ui, -apple-system, Segoe UI, Roboto, Arial\";\n    ctx.fillText(`Play Now \u2192 ${GAME_URL}`, 44, 358);\n  }\n\n  function finalizeDownload() {\n    document.getElementById('downloadBtn').onclick = () => {\n      const link = document.createElement('a');\n      link.download = 'madlymatch-result.png';\n      link.href = canvas.toDataURL(\"image\/png\");\n      link.click();\n    };\n  }\n}\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Madly Match \u2013 Daily Sanity Puzzle MadlySane.com MadlySane.com Madly Match \u2013 Daily Sanity Puzzle Match each real-life challenge with the best solution. New puzzle every day. Share your time and challenge a friend. Challenges Solutions Copy share text Download share card Share\u2026 Share on X Share on Facebook Share on LinkedIn Pro tip: Tap a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-5833","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/pages\/5833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/comments?post=5833"}],"version-history":[{"count":5,"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/pages\/5833\/revisions"}],"predecessor-version":[{"id":6142,"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/pages\/5833\/revisions\/6142"}],"wp:attachment":[{"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/media?parent=5833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}