{"id":5998,"date":"2025-09-24T06:52:19","date_gmt":"2025-09-24T11:52:19","guid":{"rendered":"https:\/\/madlysane.com\/?page_id=5998"},"modified":"2025-09-24T06:52:19","modified_gmt":"2025-09-24T11:52:19","slug":"resourcing-menopause","status":"publish","type":"page","link":"https:\/\/madlysane.site\/en\/resourcing-menopause\/","title":{"rendered":"Resourcing Menopause"},"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>MadlySane.com \u2014 Resourcing Menopause<\/title>\n<meta name=\"description\" content=\"MadlySane.com Resourcing Menopause: knowledge, care, and community. Self-care tips, symptom tracker, and user-shared resources in one place.\">\n<style>\n  :root{\n    --bg: #f7fafc;         \/* light canvas *\/\n    --panel: #ffffff;      \/* cards\/panels *\/\n    --ink: #1f2937;        \/* primary text (gray-800) *\/\n    --muted: #475569;      \/* secondary text (slate-600) *\/\n    --line: #e5e7eb;       \/* borders *\/\n    --brand: #2563eb;      \/* MadlySane accent (blue-600) *\/\n    --brand-2: #0ea5a4;    \/* supporting teal *\/\n    --brand-3: #f59e0b;    \/* warm accent for highlights *\/\n    --ok: #10b981;         \/* success *\/\n    --warn: #f59e0b;       \/* warning *\/\n    --bad: #ef4444;        \/* error *\/\n    --radius-lg: 16px;\n    --radius-md: 12px;\n    --radius-sm: 8px;\n    --shadow: 0 8px 24px rgba(31,41,55,0.08);\n  }\n  *{box-sizing:border-box}\n  html,body{margin:0;background:var(--bg);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;line-height:1.45}\n  a{color:var(--brand);text-decoration:none}\n  a:hover{text-decoration:underline}\n  .wrap{max-width:1100px;margin:24px auto;padding:0 16px}\n  header{\n    background:linear-gradient(180deg,#ffffff, #f1f5f9);\n    border-bottom:1px solid var(--line);\n  }\n  .hero{\n    padding:28px 0 18px;\n    display:grid;grid-template-columns:1.2fr 1fr;gap:18px;align-items:center;\n  }\n  .hero h1{margin:0 0 8px;font-size:2rem;color:var(--ink)}\n  .hero p{margin:8px 0;color:var(--muted)}\n  .badge{\n    display:inline-block;background:rgba(37,99,235,0.08);color:var(--brand);\n    padding:6px 10px;border-radius:999px;font-weight:700;font-size:12px;letter-spacing:.3px\n  }\n  .hero-card{\n    background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:16px;box-shadow:var(--shadow)\n  }\n  .cta-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}\n  .btn{\n    display:inline-flex;align-items:center;gap:8px;\n    background:var(--brand);color:#fff;border:none;border-radius:10px;padding:10px 14px;\n    font-weight:700;cursor:pointer;box-shadow:0 4px 14px rgba(37,99,235,0.24)\n  }\n  .btn.secondary{background:#fff;color:var(--brand);border:1px solid var(--brand)}\n  .btn.ghost{background:transparent;color:var(--brand);border:1px dashed var(--brand)}\n  .grid{\n    display:grid;gap:16px;grid-template-columns:repeat(12,1fr)\n  }\n  .panel{\n    grid-column:span 12;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:16px\n  }\n  .panel h2{margin:0 0 6px;font-size:1.25rem}\n  .panel p.lead{margin:6px 0 14px;color:var(--muted)}\n  .tabs{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 6px}\n  .tab{padding:8px 12px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--muted);cursor:pointer;font-weight:600}\n  .tab.active{background:var(--brand);border-color:var(--brand);color:#fff}\n  .cards{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}\n  .card{border:1px solid var(--line);border-radius:12px;background:#fff;padding:12px;display:flex;flex-direction:column;gap:8px}\n  .chip{display:inline-block;padding:4px 8px;border-radius:999px;background:rgba(14,165,164,.12);color:var(--brand-2);font-weight:700;font-size:12px}\n  .muted{color:var(--muted)}\n  label{font-weight:700}\n  input,select,textarea{\n    width:100%;padding:10px;border:1px solid var(--line);border-radius:10px;background:#fff\n  }\n  textarea{min-height:88px}\n  .row{display:grid;gap:12px;grid-template-columns:1fr 1fr}\n  .row-3{display:grid;gap:12px;grid-template-columns:1fr 1fr 1fr}\n  .actions{display:flex;gap:8px;flex-wrap:wrap}\n  .table-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px}\n  table{width:100%;border-collapse:collapse;background:#fff}\n  th,td{padding:10px;border-bottom:1px solid var(--line);text-align:left}\n  th{background:#f8fafc;color:#111827;position:sticky;top:0}\n  .kpi{\n    display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:8px\n  }\n  .kpi .k{background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px}\n  .k .v{font-size:1.4rem;font-weight:800}\n  .notice{\n    background:linear-gradient(180deg,#fff, #f8fafc);\n    border:1px solid var(--line);border-radius:12px;padding:12px\n  }\n  footer{margin:32px 0 48px;color:var(--muted);font-size:14px;text-align:center}\n  .pill{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:4px 10px;background:#fff}\n  .divider{height:1px;background:var(--line);margin:10px 0}\n  .hidden{display:none !important}\n  @media (max-width:900px){\n    .hero{grid-template-columns:1fr}\n    .row,.row-3{grid-template-columns:1fr}\n    .kpi{grid-template-columns:repeat(2,1fr)}\n  }\n  @media print{\n    header,.tabs,.actions,.cta-row,.notice,footer,.pill{display:none !important}\n    body{background:#fff}\n    .panel{box-shadow:none;border:1px solid #ddd}\n  }\n<\/style>\n<\/head>\n<body>\n<header>\n  <div class=\"wrap hero\">\n    <div>\n      <span class=\"badge\">MadlySane.com \u2014 Mental Wellness<\/span>\n      <h1>Resourcing Menopause<\/h1>\n      <p class=\"muted\">Knowledge. Care. Community. A light, supportive space to navigate menopause with practical tools and shared wisdom.<\/p>\n      <div class=\"cta-row\">\n        <button class=\"btn\" data-nav=\"#selfcare\">Explore self care tips<\/button>\n        <button class=\"btn secondary\" data-nav=\"#tracker\">Open symptom tracker<\/button>\n        <button class=\"btn ghost\" data-nav=\"#resources\">Share a resource<\/button>\n      <\/div>\n      <div class=\"kpi\">\n        <div class=\"k\"><div class=\"v\" id=\"kpi-entries\">0<\/div><div class=\"muted\">Tracker entries<\/div><\/div>\n        <div class=\"k\"><div class=\"v\" id=\"kpi-resources\">0<\/div><div class=\"muted\">Community resources<\/div><\/div>\n        <div class=\"k\"><div class=\"v\" id=\"kpi-plan\">0<\/div><div class=\"muted\">My plan items<\/div><\/div>\n        <div class=\"k\"><div class=\"v\" id=\"kpi-streak\">0<\/div><div class=\"muted\">Self care streak (days)<\/div><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"hero-card\">\n      <strong>Whole person support<\/strong>\n      <p class=\"muted\" style=\"margin-top:6px\">\n        Menopause touches body, mind, and community. This hub brings it together:\n      <\/p>\n      <ul class=\"muted\" style=\"margin:8px 0 0 18px\">\n        <li>Click through <strong>self care kits<\/strong> you can add to your plan<\/li>\n        <li>A private <strong>symptom tracker<\/strong> saved to your browser<\/li>\n        <li>A <strong>community board<\/strong> to share tips and resources<\/li>\n        <li><strong>Calming tools<\/strong> for when you need them right now<\/li>\n      <\/ul>\n      <p class=\"muted\" style=\"margin-top:10px\">Nothing here requires another page \u2014 it all lives right on this screen.<\/p>\n    <\/div>\n  <\/div>\n<\/header>\n\n<main class=\"wrap\">\n  <div class=\"grid\">\n    <!-- Self-care -->\n    <section id=\"selfcare\" class=\"panel\">\n      <h2>Self care kits<\/h2>\n      <p class=\"lead\">Evidence informed tips organized by need. Click a card to see steps, then add to <strong>My Plan<\/strong>.<\/p>\n\n      <div class=\"tabs\" id=\"sc-tabs\">\n        <button class=\"tab active\" data-filter=\"all\">All<\/button>\n        <button class=\"tab\" data-filter=\"sleep\">Sleep<\/button>\n        <button class=\"tab\" data-filter=\"mood\">Mood<\/button>\n        <button class=\"tab\" data-filter=\"hot\">Hot flashes<\/button>\n        <button class=\"tab\" data-filter=\"focus\">Brain fog<\/button>\n        <button class=\"tab\" data-filter=\"pelvic\">Pelvic &#038; intimacy<\/button>\n        <button class=\"tab\" data-filter=\"lifestyle\">Lifestyle<\/button>\n      <\/div>\n\n      <div class=\"cards\" id=\"sc-cards\"><\/div>\n\n      <div class=\"divider\"><\/div>\n\n      <h3 style=\"margin:8px 0 6px\">My plan<\/h3>\n      <p class=\"muted\" style=\"margin:0 0 8px\">Your saved steps for the week. Reorder by dragging, check off when done.<\/p>\n      <div class=\"notice\">\n        <div class=\"actions\" style=\"margin-bottom:8px\">\n          <button class=\"btn\" id=\"plan-export\">Export plan (.txt)<\/button>\n          <button class=\"btn secondary\" id=\"plan-clear\">Clear plan<\/button>\n        <\/div>\n        <ul id=\"my-plan\" style=\"list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px\"><\/ul>\n      <\/div>\n    <\/section>\n\n    <!-- Symptom tracker -->\n    <section id=\"tracker\" class=\"panel\">\n      <h2>Symptom tracker<\/h2>\n      <p class=\"lead\">Log what you notice. Spot patterns. Share with your clinician if you choose. Your data stays in your browser.<\/p>\n\n      <div class=\"actions\" style=\"margin-bottom:10px\">\n        <button class=\"btn\" id=\"dl-template\">Download CSV template<\/button>\n        <button class=\"btn secondary\" id=\"export-csv\">Export my entries (CSV)<\/button>\n        <button class=\"btn ghost\" id=\"print-page\">Print<\/button>\n      <\/div>\n\n      <div class=\"row\">\n        <div>\n          <label for=\"t-date\">Date<\/label>\n          <input type=\"date\" id=\"t-date\">\n        <\/div>\n        <div>\n          <label for=\"t-sleep\">Sleep quality (0\u201310)<\/label>\n          <input type=\"number\" id=\"t-sleep\" min=\"0\" max=\"10\" placeholder=\"e.g., 6\">\n        <\/div>\n      <\/div>\n      <div class=\"row-3\" style=\"margin-top:8px\">\n        <div>\n          <label for=\"t-hot\">Hot flashes (0\u201310)<\/label>\n          <input type=\"number\" id=\"t-hot\" min=\"0\" max=\"10\" placeholder=\"e.g., 7\">\n        <\/div>\n        <div>\n          <label for=\"t-mood\">Mood low\/anxiety (0\u201310)<\/label>\n          <input type=\"number\" id=\"t-mood\" min=\"0\" max=\"10\" placeholder=\"e.g., 5\">\n        <\/div>\n        <div>\n          <label for=\"t-fog\">Brain fog (0\u201310)<\/label>\n          <input type=\"number\" id=\"t-fog\" min=\"0\" max=\"10\" placeholder=\"e.g., 4\">\n        <\/div>\n      <\/div>\n      <div class=\"row-3\" style=\"margin-top:8px\">\n        <div>\n          <label for=\"t-pain\">Body pain (0\u201310)<\/label>\n          <input type=\"number\" id=\"t-pain\" min=\"0\" max=\"10\" placeholder=\"e.g., 3\">\n        <\/div>\n        <div>\n          <label for=\"t-libido\">Libido change (\u22125 to +5)<\/label>\n          <input type=\"number\" id=\"t-libido\" min=\"-5\" max=\"5\" placeholder=\"e.g., -2\">\n        <\/div>\n        <div>\n          <label for=\"t-notes\">Notes<\/label>\n          <input type=\"text\" id=\"t-notes\" placeholder=\"Triggers, wins, cycle bleeding, etc.\">\n        <\/div>\n      <\/div>\n      <div class=\"actions\" style=\"margin-top:10px\">\n        <button class=\"btn\" id=\"add-entry\">Add entry<\/button>\n        <button class=\"btn secondary\" id=\"clear-entries\">Clear all entries<\/button>\n      <\/div>\n\n      <div class=\"row\" style=\"margin-top:12px\">\n        <div>\n          <label for=\"filter-month\">Filter by month<\/label>\n          <input type=\"month\" id=\"filter-month\">\n        <\/div>\n        <div style=\"display:flex;align-items:flex-end;gap:8px\">\n          <span class=\"pill\" id=\"summary-pill\">Averages: \u2014<\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"table-wrap\" style=\"margin-top:10px\">\n        <table id=\"tracker-table\">\n          <thead>\n            <tr>\n              <th>Date<\/th>\n              <th>Sleep<\/th>\n              <th>Hot<\/th>\n              <th>Mood\/Anx<\/th>\n              <th>Fog<\/th>\n              <th>Pain<\/th>\n              <th>Libido<\/th>\n              <th>Notes<\/th>\n              <th>Actions<\/th>\n            <\/tr>\n          <\/thead>\n          <tbody><\/tbody>\n        <\/table>\n      <\/div>\n    <\/section>\n\n    <!-- Community resources -->\n    <section id=\"resources\" class=\"panel\">\n      <h2>Community resources<\/h2>\n      <p class=\"lead\">Share what\u2019s helped you \u2014 tips, practices, recipes, reflections. No external links required.<\/p>\n\n      <div class=\"row\">\n        <div>\n          <label for=\"r-title\">Title<\/label>\n          <input id=\"r-title\" placeholder=\"e.g., Cooling bedtime routine\">\n        <\/div>\n        <div>\n          <label for=\"r-type\">Type<\/label>\n          <select id=\"r-type\">\n            <option>Tip<\/option>\n            <option>Practice<\/option>\n            <option>Recipe<\/option>\n            <option>Reflection<\/option>\n            <option>Other<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n      <div style=\"margin-top:8px\">\n        <label for=\"r-body\">What to share<\/label>\n        <textarea id=\"r-body\" placeholder=\"Write your resource. Steps, ingredients, prompts \u2014 whatever would help someone else.\"><\/textarea>\n      <\/div>\n      <div class=\"row\" style=\"margin-top:8px\">\n  <div>\n    <label>Also share to:<\/label>\n    <div style=\"display:flex;gap:10px;flex-wrap:wrap;margin-top:4px\">\n      <label><input type=\"checkbox\" id=\"share-x\"> X \/ Twitter<\/label>\n      <label><input type=\"checkbox\" id=\"share-instagram\"> Instagram<\/label>\n      <label><input type=\"checkbox\" id=\"share-facebook\"> Facebook<\/label>\n    <\/div>\n  <\/div>\n<\/div>\n\n        <div style=\"display:flex;align-items:flex-end\">\n          <div class=\"actions\">\n            <button class=\"btn\" id=\"r-add\">Post resource<\/button>\n            <button class=\"btn secondary\" id=\"r-export\">Export resources (CSV)<\/button>\n            <button class=\"btn ghost\" id=\"r-clear\">Clear all<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"row\" style=\"margin-top:12px\">\n        <div>\n          <label for=\"r-search\">Search<\/label>\n          <input id=\"r-search\" placeholder=\"Filter by keyword or tag\">\n        <\/div>\n        <div>\n          <label for=\"r-sort\">Sort<\/label>\n          <select id=\"r-sort\">\n            <option value=\"newest\">Newest first<\/option>\n            <option value=\"oldest\">Oldest first<\/option>\n            <option value=\"title\">Title A\u2192Z<\/option>\n            <option value=\"type\">Type A\u2192Z<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n\n      <div class=\"cards\" id=\"r-list\" style=\"margin-top:12px\"><\/div>\n    <\/section>\n\n    <!-- Quick tools -->\n    <section id=\"tools\" class=\"panel\">\n      <h2>Quick calming tools<\/h2>\n      <p class=\"lead\">Two minutes to reset your nervous system.<\/p>\n\n      <div class=\"row\">\n        <div class=\"card\">\n          <div><span class=\"chip\">60 second breath<\/span><\/div>\n          <p class=\"muted\">Press start and breathe with the circle. Inhale as it grows, exhale as it shrinks.<\/p>\n          <div style=\"display:flex;justify-content:center;align-items:center;min-height:160px\">\n            <div id=\"breath-ball\" style=\"width:80px;height:80px;border-radius:50%;background:radial-gradient(circle at 30% 30%, #93c5fd, #2563eb);transition:transform 4s ease\"><\/div>\n          <\/div>\n          <div class=\"actions\">\n            <button class=\"btn\" id=\"breath-start\">Start<\/button>\n            <button class=\"btn secondary\" id=\"breath-stop\">Stop<\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"card\">\n          <div><span class=\"chip\">Box breathing 4 4 4 4<\/span><\/div>\n          <p class=\"muted\">Inhale 4 \u2022 Hold 4 \u2022 Exhale 4 \u2022 Hold 4. Repeat for 3\u20135 cycles.<\/p>\n          <div class=\"notice\" id=\"box-coach\" style=\"text-align:center;font-weight:700\">Ready<\/div>\n          <div class=\"actions\">\n            <button class=\"btn\" id=\"box-start\">Start<\/button>\n            <button class=\"btn secondary\" id=\"box-stop\">Stop<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n\n    <!-- About -->\n    <section id=\"about\" class=\"panel\">\n      <h2>About this hub<\/h2>\n      <p class=\"lead\">\n        Menopause is a whole person experience. This page centers mental wellness while honoring physical changes.\n        It doesn\u2019t replace medical care. Use what helps, adapt the rest, and talk with your clinician as needed.\n      <\/p>\n      <div class=\"notice\">\n        <strong>Privacy note:<\/strong> Entries and resources are saved on your device (localStorage). Clearing your browser storage will remove them.\n      <\/div>\n    <\/section>\n  <\/div>\n\n  <footer>\u00a9 <span id=\"year\"><\/span> MadlySane.com \u2014 Resourcing Menopause<\/footer>\n<\/main>\n\n<script>\n(function(){\n  const $ = (sel, el=document) => el.querySelector(sel);\n  const $$ = (sel, el=document) => Array.from(el.querySelectorAll(sel));\n  const store = {\n    get(k, fallback){ try{ return JSON.parse(localStorage.getItem(k)) ?? fallback }catch{ return fallback } },\n    set(k, v){ localStorage.setItem(k, JSON.stringify(v)) }\n  };\n\n  \/\/ KPI\n  const kpi = {\n    entries: $('#kpi-entries'),\n    resources: $('#kpi-resources'),\n    plan: $('#kpi-plan'),\n    streak: $('#kpi-streak'),\n    refresh({entriesCount, resourcesCount, planCount, streakDays}){\n      this.entries.textContent = entriesCount;\n      this.resources.textContent = resourcesCount;\n      this.plan.textContent = planCount;\n      this.streak.textContent = streakDays;\n    }\n  };\n\n  \/\/ Smooth nav\n  $$('[data-nav]').forEach(b=>b.addEventListener('click',()=> {\n    const to = b.getAttribute('data-nav');\n    const el = $(to);\n    if(el) el.scrollIntoView({behavior:'smooth',block:'start'});\n  }));\n\n  \/\/ -----------------------------------\n  \/\/ Self-care kits\n  \/\/ -----------------------------------\n  const kits = [\n    {\n      id:'sleep-cooldown', tag:'sleep', title:'Cool the night',\n      blurb:'Lower core temp and calm the nervous system before bed.',\n      steps:[\n        '60\u201390 minutes before bed: reduce room to ~65\u201368\u00b0F (18\u201320\u00b0C).',\n        'Warm shower for 5 minutes (paradoxically helps cooling after).',\n        'Avoid caffeine after noon; dim screens and lights.',\n        'Breath: 4 7 8 for 3 rounds in bed.'\n      ]\n    },\n    {\n      id:'sleep-routine', tag:'sleep', title:'Gentle wind down',\n      blurb:'A consistent, kind routine trains the body to rest.',\n      steps:[\n        'Pick a consistent sleep and wake window.',\n        'Ten minute tidy, then lights low + soft playlist.',\n        'Journal one page: what can wait until tomorrow.',\n        'Gratitude: 3 specifics from today.'\n      ]\n    },\n    {\n      id:'hot-flash', tag:'hot', title:'Hot flash relief',\n      blurb:'Reduce intensity and shorten duration.',\n      steps:[\n        'Layered, breathable fabrics; keep a cooling cloth by bed.',\n        'Sip cool water; avoid alcohol close to sleep.',\n        'Paced breathing: inhale 4, exhale 6 for 2 minutes.',\n        'Note triggers (spicy food, stress) in your tracker.'\n      ]\n    },\n    {\n      id:'mood-anchor', tag:'mood', title:'Mood anchor',\n      blurb:'Ground anxiety and lift low mood.',\n      steps:[\n        'Morning sunlight 5\u201310 minutes if possible.',\n        'Ten minute walk or gentle yoga.',\n        'Text a friend: one check in, one small plan.',\n        'Name 3 things you can control today.'\n      ]\n    },\n    {\n      id:'fog-focus', tag:'focus', title:'Clear the fog',\n      blurb:'Support memory and attention.',\n      steps:[\n        'Single task sprints: 15 minutes focus, 5 minutes rest.',\n        'Write top 3 tasks on paper; keep it visible.',\n        'Hydrate; add protein + fiber at breakfast.',\n        'Mindful pause: 1 minute of box breathing.'\n      ]\n    },\n    {\n      id:'pelvic-care', tag:'pelvic', title:'Pelvic comfort & intimacy',\n      blurb:'Reduce discomfort and support closeness.',\n      steps:[\n        'Use a gentle, pH balanced moisturizer externally as needed.',\n        'Experiment with high quality lubricants; go slow and communicate.',\n        'Warm bath or heat pack for pelvic floor release.',\n        'Pelvic floor mindfulness: soften on exhale.'\n      ]\n    },\n    {\n      id:'lifestyle-bone', tag:'lifestyle', title:'Bones & strength',\n      blurb:'Protect bone density and energy.',\n      steps:[\n        'Weight bearing movement 3x\/week (walk, stairs, light strength).',\n        'Calcium rich foods + vitamin D per your clinician.',\n        'Balance practice: stand on one leg near support, 30s each.',\n        'Evening stretch: calves, hips, chest.'\n      ]\n    }\n  ];\n\n  const scCards = $('#sc-cards');\n  function renderKits(filter='all'){\n    scCards.innerHTML = '';\n    const list = kits.filter(k=> filter==='all' ? true : k.tag===filter);\n    list.forEach(k=>{\n      const card = document.createElement('div');\n      card.className='card';\n      card.innerHTML = `\n        <div style=\"display:flex;justify-content:space-between;gap:8px;align-items:center\">\n          <strong>${k.title}<\/strong>\n          <span class=\"chip\">${labelForTag(k.tag)}<\/span>\n        <\/div>\n        <p class=\"muted\" style=\"margin:0\">${k.blurb}<\/p>\n        <details>\n          <summary class=\"pill\" style=\"cursor:pointer\">View steps<\/summary>\n          <ol style=\"margin:10px 0 0 20px\">${k.steps.map(s=>`<li>${s}<\/li>`).join('')}<\/ol>\n        <\/details>\n        <div class=\"actions\">\n          <button class=\"btn\" data-add=\"${k.id}\">Add steps to My Plan<\/button>\n        <\/div>\n      `;\n      scCards.appendChild(card);\n    });\n  }\n  function labelForTag(t){\n    return ({\n      sleep:'Sleep', mood:'Mood', hot:'Hot flashes', focus:'Brain fog',\n      pelvic:'Pelvic & intimacy', lifestyle:'Lifestyle'\n    })[t] || t;\n  }\n  $('#sc-tabs').addEventListener('click', (e)=>{\n    const btn = e.target.closest('.tab'); if(!btn) return;\n    $$('.tab', $('#sc-tabs')).forEach(b=>b.classList.remove('active'));\n    btn.classList.add('active');\n    renderKits(btn.dataset.filter);\n  });\n\n  \/\/ My Plan\n  const planList = $('#my-plan');\n  let plan = store.get('ms_meno_plan', []);\n  function planItemEl(text, idx){\n    const li = document.createElement('li');\n    li.draggable = true;\n    li.style.cssText = 'background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px;display:flex;align-items:center;gap:8px';\n    li.innerHTML = `\n      <input type=\"checkbox\" aria-label=\"Done\">\n      <span style=\"flex:1\">${text}<\/span>\n      <button class=\"btn secondary\" data-del=\"${idx}\">Remove<\/button>\n    `;\n    \/\/ drag handle\n    li.addEventListener('dragstart', ev=>{\n      ev.dataTransfer.setData('text\/plain', idx.toString());\n      li.style.opacity = .6;\n    });\n    li.addEventListener('dragend', ()=> li.style.opacity = 1);\n    li.addEventListener('dragover', ev=> ev.preventDefault());\n    li.addEventListener('drop', ev=>{\n      ev.preventDefault();\n      const from = parseInt(ev.dataTransfer.getData('text\/plain'),10);\n      const to = idx;\n      if(isNaN(from)) return;\n      const item = plan.splice(from,1)[0];\n      plan.splice(to,0,item);\n      savePlan();\n      renderPlan();\n    });\n    return li;\n  }\n  function renderPlan(){\n    planList.innerHTML = '';\n    plan.forEach((p, idx)=> planList.appendChild(planItemEl(p.text, idx)));\n    kpi.refresh({\n      entriesCount: (store.get('ms_meno_entries', [])).length,\n      resourcesCount: (store.get('ms_meno_resources', [])).length,\n      planCount: plan.length,\n      streakDays: store.get('ms_meno_streak', 0)\n    });\n  }\n  function savePlan(){ store.set('ms_meno_plan', plan) }\n\n  scCards.addEventListener('click', (e)=>{\n    const btn = e.target.closest('[data-add]'); if(!btn) return;\n    const kit = kits.find(k=>k.id === btn.getAttribute('data-add'));\n    if(!kit) return;\n    kit.steps.forEach(s=> plan.push({text:`${kit.title}: ${s}`}));\n    savePlan(); renderPlan();\n  });\n\n  $('#plan-export').addEventListener('click', ()=>{\n    const txt = plan.map((p,i)=> `${i+1}. ${p.text}`).join('\\n');\n    downloadBlob(new Blob([txt], {type:'text\/plain'}), 'MadlySane_MyPlan.txt');\n  });\n  $('#plan-clear').addEventListener('click', ()=>{ if(confirm('Clear all items from My Plan?')){ plan = []; savePlan(); renderPlan(); }});\n\n  \/\/ initial\n  renderKits();\n  renderPlan();\n\n  \/\/ -----------------------------------\n  \/\/ Symptom tracker\n  \/\/ -----------------------------------\n  const tKeys = ['date','sleep','hot','mood','fog','pain','libido','notes'];\n  let entries = hydrateEntries(store.get('ms_meno_entries', []));\n  function hydrateEntries(arr){\n    return (arr||[]).map(e=> ({...e, date: e.date || today()})).sort((a,b)=> (a.date < b.date ? 1 : -1));\n  }\n  function today(){ const d = new Date(); return d.toISOString().slice(0,10) }\n\n  $('#t-date').value = today();\n\n  function addEntry(){\n    const e = {\n      date: $('#t-date').value || today(),\n      sleep: num($('#t-sleep').value),\n      hot: num($('#t-hot').value),\n      mood: num($('#t-mood').value),\n      fog: num($('#t-fog').value),\n      pain: num($('#t-pain').value),\n      libido: num($('#t-libido').value),\n      notes: ($('#t-notes').value||'').trim()\n    };\n    entries.unshift(e);\n    store.set('ms_meno_entries', entries);\n    \/\/ simple streak: if added today and yesterday present\n    updateStreak(e.date);\n    renderTable();\n    clearTrackerInputs();\n  }\n  function num(v){ const n = Number(v); return isNaN(n)? null : n }\n  function clearTrackerInputs(){\n    $('#t-sleep').value = ''; $('#t-hot').value=''; $('#t-mood').value='';\n    $('#t-fog').value=''; $('#t-pain').value=''; $('#t-libido').value='';\n    $('#t-notes').value='';\n    $('#t-date').value = today();\n  }\n\n  function renderTable(){\n    const month = $('#filter-month').value;\n    const tbody = $('#tracker-table tbody');\n    tbody.innerHTML = '';\n    const list = month ? entries.filter(e=> e.date.slice(0,7)===month) : entries;\n    list.forEach((e, idx)=>{\n      const tr = document.createElement('tr');\n      tr.innerHTML = `\n        <td>${e.date}<\/td>\n        <td>${disp(e.sleep)}<\/td>\n        <td>${disp(e.hot)}<\/td>\n        <td>${disp(e.mood)}<\/td>\n        <td>${disp(e.fog)}<\/td>\n        <td>${disp(e.pain)}<\/td>\n        <td>${disp(e.libido)}<\/td>\n        <td>${escapeHtml(e.notes||'')}<\/td>\n        <td>\n          <button class=\"btn secondary\" data-edit=\"${idx}\">Edit<\/button>\n          <button class=\"btn ghost\" data-del=\"${idx}\">Delete<\/button>\n        <\/td>\n      `;\n      tbody.appendChild(tr);\n    });\n    \/\/ KPI + summary\n    const avg = (k) => {\n      const nums = list.map(e=> e[k]).filter(v=> typeof v==='number');\n      if(!nums.length) return null;\n      return (nums.reduce((a,b)=>a+b,0)\/nums.length).toFixed(1);\n    };\n    $('#summary-pill').textContent = `Averages \u2014 Sleep ${avg('sleep')??'\u2014'} \u2022 Hot ${avg('hot')??'\u2014'} \u2022 Mood ${avg('mood')??'\u2014'} \u2022 Fog ${avg('fog')??'\u2014'} \u2022 Pain ${avg('pain')??'\u2014'} \u2022 Libido ${avg('libido')??'\u2014'}`;\n    kpi.refresh({\n      entriesCount: entries.length,\n      resourcesCount: (store.get('ms_meno_resources', [])).length,\n      planCount: (store.get('ms_meno_plan', [])).length,\n      streakDays: store.get('ms_meno_streak', 0)\n    });\n  }\n  function disp(v){ return (v===null || typeof v==='undefined') ? '\u2014' : v }\n  function escapeHtml(s){ return s.replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m])) }\n\n  $('#add-entry').addEventListener('click', addEntry);\n  $('#clear-entries').addEventListener('click', ()=> {\n    if(confirm('Clear all tracker entries?')){ entries = []; store.set('ms_meno_entries', entries); renderTable(); }\n  });\n  $('#filter-month').addEventListener('change', renderTable);\n  $('#print-page').addEventListener('click', ()=> window.print());\n\n  \/\/ Edit\/Delete in table\n  $('#tracker-table').addEventListener('click', (e)=>{\n    const del = e.target.closest('[data-del]');\n    const edit = e.target.closest('[data-edit]');\n    if(del){\n      const idx = parseInt(del.getAttribute('data-del'),10);\n      const month = $('#filter-month').value;\n      const list = month ? entries.filter(en=> en.date.slice(0,7)===month) : entries;\n      const target = list[idx];\n      const absolute = entries.findIndex(en=> en===target);\n      entries.splice(absolute,1);\n      store.set('ms_meno_entries', entries);\n      renderTable();\n    } else if(edit){\n      const idx = parseInt(edit.getAttribute('data-edit'),10);\n      const month = $('#filter-month').value;\n      const list = month ? entries.filter(en=> en.date.slice(0,7)===month) : entries;\n      const target = list[idx];\n      if(!target) return;\n      \/\/ Populate form\n      $('#t-date').value = target.date;\n      $('#t-sleep').value = target.sleep ?? '';\n      $('#t-hot').value = target.hot ?? '';\n      $('#t-mood').value = target.mood ?? '';\n      $('#t-fog').value = target.fog ?? '';\n      $('#t-pain').value = target.pain ?? '';\n      $('#t-libido').value = target.libido ?? '';\n      $('#t-notes').value = target.notes ?? '';\n      \/\/ Remove old\n      const absolute = entries.findIndex(en=> en===target);\n      entries.splice(absolute,1);\n      store.set('ms_meno_entries', entries);\n      renderTable();\n    }\n  });\n\n  \/\/ CSV export\/template\n  function downloadBlob(blob, filename){\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url; a.download = filename; document.body.appendChild(a); a.click();\n    setTimeout(()=>{ URL.revokeObjectURL(url); a.remove(); }, 0);\n  }\n  function toCSV(rows){\n    const escape = (v)=> {\n      if(v===null || typeof v==='undefined') return '';\n      const s = String(v).replace(\/\"\/g,'\"\"');\n      return `\"${s}\"`;\n    };\n    return rows.map(r=> r.map(escape).join(',')).join('\\n');\n  }\n  $('#export-csv').addEventListener('click', ()=>{\n    const rows = [tKeys].concat(entries.map(e=> tKeys.map(k=> e[k] ?? '')));\n    downloadBlob(new Blob([toCSV(rows)], {type:'text\/csv'}), 'MadlySane_Menopause_Tracker.csv');\n  });\n  $('#dl-template').addEventListener('click', ()=>{\n    const sample = [\n      ['date','sleep','hot','mood','fog','pain','libido','notes'],\n      [today(),'6','7','4','5','3','-1','First sample day'],\n      [today(),'7','5','3','3','2','0','Felt better with walk']\n    ];\n    downloadBlob(new Blob([toCSV(sample)], {type:'text\/csv'}), 'MadlySane_Tracker_Template.csv');\n  });\n\n  \/\/ Streak update\n  function updateStreak(dateStr){\n    const last = store.get('ms_meno_last_day', null);\n    const streak = store.get('ms_meno_streak', 0);\n    const todayStr = dateStr;\n    if(!last){ store.set('ms_meno_last_day', todayStr); store.set('ms_meno_streak', 1); return }\n    const diff = dayDiff(last, todayStr);\n    if(diff===0){ store.set('ms_meno_last_day', todayStr); store.set('ms_meno_streak', streak); }\n    else if(diff===1){ store.set('ms_meno_last_day', todayStr); store.set('ms_meno_streak', streak+1); }\n    else { store.set('ms_meno_last_day', todayStr); store.set('ms_meno_streak', 1); }\n  }\n  function dayDiff(a,b){\n    const A = new Date(a+'T00:00:00'); const B = new Date(b+'T00:00:00');\n    return Math.round((B-A)\/(1000*60*60*24));\n  }\n\n  renderTable();\n\n  \/\/ -----------------------------------\n  \/\/ Community resources\n  \/\/ -----------------------------------\n  let resources = store.get('ms_meno_resources', []);\n  function renderResources(){\n    const list = $('#r-list');\n    const q = ($('#r-search').value||'').toLowerCase();\n    const sort = $('#r-sort').value;\n    let items = [...resources];\n    if(q){\n      items = items.filter(r=>\n        r.title.toLowerCase().includes(q) ||\n        r.type.toLowerCase().includes(q) ||\n        (r.body||'').toLowerCase().includes(q) ||\n        (r.tags||'').toLowerCase().includes(q)\n      );\n    }\n    items.sort((a,b)=>{\n      if(sort==='newest') return b.ts - a.ts;\n      if(sort==='oldest') return a.ts - b.ts;\n      if(sort==='title') return a.title.localeCompare(b.title);\n      if(sort==='type') return a.type.localeCompare(b.type);\n      return 0;\n    });\n    list.innerHTML = '';\n    items.forEach((r, i)=>{\n      const card = document.createElement('div');\n      card.className='card';\n      card.innerHTML = `\n        <div style=\"display:flex;justify-content:space-between;gap:8px;align-items:center\">\n          <strong>${escapeHtml(r.title)}<\/strong>\n          <span class=\"chip\">${escapeHtml(r.type)}<\/span>\n        <\/div>\n        <p class=\"muted\" style=\"margin:0\">${escapeHtml(r.body)}<\/p>\n        <div class=\"muted\" style=\"font-size:12px\">${r.tags? 'Tags: '+escapeHtml(r.tags): ''}<\/div>\n        <div class=\"actions\">\n          <button class=\"btn secondary\" data-edit=\"${r.id}\">Edit<\/button>\n          <button class=\"btn ghost\" data-del=\"${r.id}\">Delete<\/button>\n        <\/div>\n      `;\n      list.appendChild(card);\n    });\n    kpi.refresh({\n      entriesCount: (store.get('ms_meno_entries', [])).length,\n      resourcesCount: resources.length,\n      planCount: (store.get('ms_meno_plan', [])).length,\n      streakDays: store.get('ms_meno_streak', 0)\n    });\n  }\n  function newId(){ return Math.random().toString(36).slice(2,9) }\n  $('#r-add').addEventListener('click', ()=>{\n    const title = $('#r-title').value.trim();\n    const type = $('#r-type').value.trim();\n    const body = $('#r-body').value.trim();\n    const tags = $('#r-tags').value.trim();\n    if(!title || !body){ alert('Please add a title and what you want to share.'); return; }\n    resources.unshift({id:newId(), title, type, body, tags, ts: Date.now()});\n    store.set('ms_meno_resources', resources);\n    $('#r-title').value=''; $('#r-body').value=''; $('#r-tags').value='';\n    renderResources();\n  });\n  $('#r-list').addEventListener('click', (e)=>{\n    const del = e.target.closest('[data-del]');\n    const edit = e.target.closest('[data-edit]');\n    if(del){\n      const id = del.getAttribute('data-del');\n      resources = resources.filter(r=> r.id!==id);\n      store.set('ms_meno_resources', resources);\n      renderResources();\n    } else if(edit){\n      const id = edit.getAttribute('data-edit');\n      const r = resources.find(x=> x.id===id);\n      if(!r) return;\n      const title = prompt('Edit title', r.title); if(title===null) return;\n      const body = prompt('Edit content', r.body); if(body===null) return;\n      const tags = prompt('Edit tags', r.tags||''); if(tags===null) return;\n      r.title = title.trim(); r.body = body.trim(); r.tags = tags.trim();\n      store.set('ms_meno_resources', resources);\n      renderResources();\n    }\n  });\n  $('#r-search').addEventListener('input', renderResources);\n  $('#r-sort').addEventListener('change', renderResources);\n  $('#r-export').addEventListener('click', ()=>{\n    const rows = [['title','type','body','tags','created']];\n    resources.forEach(r=> rows.push([r.title, r.type, r.body, r.tags, new Date(r.ts).toISOString()]));\n    downloadBlob(new Blob([toCSV(rows)], {type:'text\/csv'}), 'MadlySane_Menopause_Resources.csv');\n  });\n  $('#r-clear').addEventListener('click', ()=>{\n    if(confirm('Clear all community resources on this device?')){\n      resources = []; store.set('ms_meno_resources', resources); renderResources();$('#r-add').addEventListener('click', () => {\n  \/\/ --- your existing save logic ---\n  const titleVal = $('#r-title').value.trim();\n  const typeVal = $('#r-type').value;\n  const bodyVal = $('#r-body').value.trim();\n  const tagsVal = $('#r-tags').value.trim();\n\n  if (!titleVal || !bodyVal) return;\n\n  resources.push({\n    id: Date.now(),\n    title: titleVal,\n    type: typeVal,\n    body: bodyVal,\n    tags: tagsVal,\n    date: new Date().toISOString()\n  });\n\n  store.set('resources', resources);\n  renderResources();\n\n  \/\/ --- Social media share ---\n  const title = $('#r-title').value.trim();\n  const body = $('#r-body').value.trim();\n  const tags = $('#r-tags').value.trim();\n  const shareText = encodeURIComponent(`${title}\\n\\n${body}${tags ? '\\n\\nTags: ' + tags : ''}`);\n\n  \/\/ X \/ Twitter\n  if ($('#share-x').checked) {\n    window.open(`https:\/\/twitter.com\/intent\/tweet?text=${shareText}`, '_blank');\n  }\n\n  \/\/ Instagram\n  if ($('#share-instagram').checked) {\n    navigator.clipboard.writeText(`${title}\\n\\n${body}${tags ? '\\n\\nTags: ' + tags : ''}`);\n    alert('Your text has been copied. Paste it into Instagram.');\n    window.open('https:\/\/instagram.com', '_blank');\n  }\n\n  \/\/ Facebook\n  if ($('#share-facebook').checked) {\n    window.open(`https:\/\/www.facebook.com\/sharer\/sharer.php?u=&quote=${shareText}`, '_blank');\n  }\n\n  \/\/ --- clear form (your existing clear logic) ---\n  $('#r-title').value = '';\n  $('#r-body').value = '';\n  $('#r-tags').value = '';\n  $('#r-type').selectedIndex = 0;\n  $('#share-x').checked = false;\n  $('#share-instagram').checked = false;\n  $('#share-facebook').checked = false;\n});\n\n    }\n  });\n\n  renderResources();\n\n  \/\/ -----------------------------------\n  \/\/ Quick tools\n  \/\/ -----------------------------------\n  \/\/ Breath ball\n  let breathTimer = null, growing = true;\n  $('#breath-start').addEventListener('click', ()=>{\n    const ball = $('#breath-ball');\n    ball.style.transform = 'scale(1.8)';\n    growing = false;\n    if(breathTimer) clearInterval(breathTimer);\n    breathTimer = setInterval(()=>{\n      growing = !growing;\n      ball.style.transform = growing ? 'scale(1.8)' : 'scale(1)';\n    }, 4000); \/\/ 4s inhale\/exhale\n  });\n  $('#breath-stop').addEventListener('click', ()=>{ if(breathTimer) clearInterval(breathTimer); breathTimer = null; $('#breath-ball').style.transform='scale(1)'; });\n\n  \/\/ Box breathing coach\n  let boxTimer=null, boxPhase=0;\n  const phases = ['Inhale 4','Hold 4','Exhale 4','Hold 4'];\n  $('#box-start').addEventListener('click', ()=>{\n    const coach = $('#box-coach');\n    coach.textContent = 'Inhale 4';\n    boxPhase = 0;\n    if(boxTimer) clearInterval(boxTimer);\n    boxTimer = setInterval(()=>{\n      boxPhase = (boxPhase+1)%4;\n      coach.textContent = phases[boxPhase];\n    }, 4000);\n  });\n  $('#box-stop').addEventListener('click', ()=>{ if(boxTimer) clearInterval(boxTimer); boxTimer=null; $('#box-coach').textContent='Ready'; });\n\n  \/\/ Footer year\n  $('#year').textContent = new Date().getFullYear();\n\n})();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>MadlySane.com \u2014 Resourcing Menopause MadlySane.com \u2014 Mental Wellness Resourcing Menopause Knowledge. Care. Community. A light, supportive space to navigate menopause with practical tools and shared wisdom. Explore self care tips Open symptom tracker Share a resource 0 Tracker entries 0 Community resources 0 My plan items 0 Self care streak (days) Whole person support Menopause [&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-5998","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\/5998","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=5998"}],"version-history":[{"count":5,"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/pages\/5998\/revisions"}],"predecessor-version":[{"id":6146,"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/pages\/5998\/revisions\/6146"}],"wp:attachment":[{"href":"https:\/\/madlysane.site\/en\/wp-json\/wp\/v2\/media?parent=5998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}