She Put Her Mother in the Garage. By Morning, Her Perfect Life Was Begging at the Door.
She Put Her Mother in the Garage. By Morning, Her Perfect Life Was Begging at the Door.

She Put Her Mother in the Garage. By Morning, Her Perfect Life Was Begging at the Door.
Rachel was still screaming when I ended the call.
Not because I was cruel. Not because I didn’t love my daughter. But because after two years of swallowing humiliation in silence, I had finally heard the one sound that told me the truth.
Panic.
Not grief. Not worry. Not, Mom, where are you? Are you safe?
Just panic.
“Do you have any idea what you’ve done?” Rachel shrieked through the phone. “Daycare just called! The payment bounced!”
I sat at my sister Carol’s kitchen table, both hands wrapped around a mug of black coffee I hadn’t touched. Rain tapped against the window like nervous fingers. Carol stood by the sink in her robe, watching me with the face of a woman who had waited a long time for me to stop pretending I wasn’t being used.
“I canceled my autopay,” I said calmly.
There was a sharp silence.
Then Rachel laughed once, high and ugly. “Your autopay? Mom, that was our arrangement.”
“No,” I said. “That was your habit.”
“You live in my house!”
“Not anymore.”
The words landed between us like a dropped plate.
Rachel inhaled so hard I could hear it. “Where are you?”
“With Carol.”
“Oh, perfect.” Her voice turned colder. “So you’re running to Aunt Carol to make me look bad.”
I looked down at my hands. They were wrinkled, spotted, familiar. These hands had braided Rachel’s hair before school. Taken her temperature through fevers. Signed permission slips. Written checks for college textbooks. Rocked her babies when she cried in the hospital and said, “Mom, I don’t know how to do this.”
“I don’t need to make you look bad, Rachel,” I said. “You did that yourself.”
She exploded then.
“You selfish old woman! You think you can just walk out? What about Lily and Noah? What about their schedule? What about Mark’s car insurance? What about groceries? You can’t just cancel everything because you had one little tantrum!”
One little tantrum.
The garage.
The heater.
The wooden sign that said blessed hanging above the shoes I had lined up every night.
Something inside me that had bent for years finally stopped bending.
“Rachel,” I said, “you told me I lived there for free.”
“I was angry.”
“You told me to move into the garage.”
“You were being dramatic!”
“I packed one suitcase and left before sunrise. That was not drama. That was dignity.”
She was breathing hard now. In the background, I heard Mark’s voice, frantic and muffled.
“Is that your mother?”
“Tell Mark,” I said, “that the emergency credit card is canceled too.”
Another silence.
Then Rachel whispered, “You wouldn’t.”
“I already did.”
She hung up.
Carol turned from the sink and slowly started clapping.
I gave her a tired look. “Don’t.”
“I’ve been waiting two years to do that.”
My mouth trembled despite myself. “I left my basil plant there.”
Carol came around the table and hugged me from behind. That was when I cried. Not loudly. Not beautifully. I cried like an old house settling after a storm, quietly and from somewhere deep.
Because the truth was, I hadn’t just left Rachel’s house. I had left the version of myself that believed love meant being endlessly available to people who only remembered I mattered when I stopped paying.
By noon, my phone had forty-three missed calls.
Rachel.
Mark.
Rachel again.
Then church friends.
Then a number I didn’t know.
Carol took my phone, glanced at the screen, and snorted. “Your daughter has activated the sympathy machine.”
At two o’clock, the first message came from Linda Parker, a woman from Rachel’s church circle.
Margaret, honey, Rachel says you left suddenly and the family is very worried. Please call her. She’s under so much stress.
I stared at the message until the words blurred.
Under so much stress.
I typed one sentence.
Thank you for your concern. I am safe with Carol.
Then I turned the phone face down.
But Rachel was not done.
That evening, Carol and I sat in the living room eating soup when her doorbell rang. Through the lace curtains, I saw Rachel standing on the porch in a beige coat, hair perfect despite the rain, Mark behind her holding Noah, while Lily clutched a stuffed fox and looked sleepy.
Carol’s jaw tightened. “You don’t have to open that door.”
“Yes,” I said, standing. “I do.”
When I opened it, Rachel pushed forward immediately, as if she still owned every room I stood in.
“Mom,” she said loudly, eyes already wet for the neighbors. “Thank God. The children were terrified.”
Lily looked up. “Grandma, why did Mommy say you ran away?”
My heart cracked clean down the middle.
I crouched and touched her cheek. “I didn’t run away, sweetheart. I came to Aunt Carol’s.”
Rachel’s face twitched. “Can we not do this on the porch?”
Carol appeared behind me. “You can say whatever you came to say right there.”
Mark shifted Noah on his hip. He looked worse than Rachel—unshaven, pale, eyes darting away from mine.
“Margaret,” he said softly, “we need to talk like adults.”
I almost laughed.
Adults.
For two years, the adults had let a sixty-nine-year-old widow finance their home, cook their meals, raise their toddlers, and then accept public humiliation with a smile.
“All right,” I said. “Talk.”
Rachel wiped beneath one eye though no tear had fallen. “Mom, yesterday got out of hand. I said something I shouldn’t have.”
“You said I could sleep in the garage.”
“I didn’t mean permanently.”
Carol made a sound behind me.
Rachel ignored her. “You know how hard things have been. Mark’s bonus was delayed, daycare is expensive, and I’m exhausted. I need my mother.”
There it was again.
Need.
Once, it had been the magic word that could pull me from bed at midnight, empty my bank account, cancel my own plans, and make me grateful to be useful.
Now it sounded like a hook scraping bone.
“You don’t need me,” I said. “You need my money, my labor, and my silence.”
Rachel’s eyes hardened. “That is unfair.”
I stepped back into Carol’s hallway and picked up the folder from the table. When I returned, Rachel’s gaze dropped to it.
“What is that?”
“The truth.”
I opened it.
Receipts. Bank statements. Daycare confirmations. Insurance payments. Grocery charges. The emergency credit card she had told me was “just temporary.” Printed, highlighted, dated.
Two years of my life reduced to numbers Rachel had hoped no one would ever see.
Mark’s face went gray.
Rachel whispered, “Mom, don’t.”
“Don’t what?” I asked. “Embarrass you? Strange. You never worried about embarrassing me.”
Her lips parted.
“At church,” I said, “you told people I was an adjustment. At school, you called me another dependent. At your cookout, you said having me there was like losing your privacy.”
Rachel glanced toward the street.
I leaned closer. “But you never told them I paid your daycare. Your car insurance. Half your groceries. Your emergency credit card. You never told them I gave up my apartment because you cried and said you needed me.”
Lily tugged Rachel’s sleeve. “Mommy, why did Grandma pay daycare?”
Rachel snapped, “Not now, Lily.”
That sharpness hit the child like a slap. Lily shrank behind Mark’s leg.
And suddenly, I saw the whole ugly pattern widening.
It had started with me.
But it would not end with me.
I closed the folder.
“I’ll come by tomorrow at ten for the rest of my things.”
Rachel shook her head. “No.”
“No?”
“You don’t get to walk in and take whatever you want after abandoning us.”
Carol stepped forward. “Careful.”
Rachel’s face flushed. “Those things are in my house.”
“My Bible. My clothes. My husband’s photo. My documents.”
“And what about what you owe us?”
I stared at her. “What I owe you?”
“For living there. For utilities. For food. For everything.”
For a second, no one moved.
Then Mark said quietly, “Rachel.”
But she was already gone somewhere desperate and mean.
“You think a few payments make you a martyr? We gave you a home.”
The rain fell harder.
I looked at my daughter, at the woman I had loved before she had a name, and I finally understood something devastating.
Rachel did not believe she was lying. She had repeated the story so often that she had started living inside it.
Poor Rachel.
Burdened Rachel.
Saint Rachel.
Her elderly mother, eating her food, using her space, making her life harder.
And if facts did not fit that story, facts had to be punished.
“I’ll bring an officer with me,” I said.
Rachel’s expression faltered.
“You wouldn’t dare.”
“I learned from you,” I said. “Appearances matter.”
She left without another word, dragging Lily by the hand while Mark mumbled an apology he was too cowardly to finish.
The next morning, Carol drove me to Rachel’s house.
A police officer named Daniels met us in the driveway. Rachel opened the door wearing makeup that made her look fragile. She had visitors inside—Linda Parker from church, another neighbor, and Mrs. Whitcomb from preschool.
Of course she did.
A stage needed an audience.
“Mom,” Rachel said, voice trembling theatrically, “please don’t make this harder.”
Officer Daniels looked at me. “Ma’am, we’ll just retrieve your personal belongings.”
I nodded and walked in.
The house smelled like vanilla candles and unwashed dishes. Toys lay scattered across the living room. A basket of laundry sat where I had left it two days earlier. The kitchen counter was sticky.
No one had wiped it.
As I climbed the stairs, I heard Linda whisper, “This is so sad.”
Carol turned around. “It’s about to be educational.”

In the guest room, my bed had already been stripped. My suitcase sat open on the floor, half-filled with random items Rachel must have thrown in angrily. My framed photo of Thomas was missing.
My heart lurched.
“Where is my husband’s picture?” I called.
Rachel appeared in the doorway. “I don’t know.”
“Yes, you do.”
She folded her arms. “Maybe you packed it.”
I moved past her toward the closet. My clothes were there, shoved to one side. My Bible was under a stack of old magazines. My medicine bag was in the drawer.
But the photo was gone.
Then Lily appeared silently at the end of the hallway.
She held something wrapped in a pink blanket.
“Grandma,” she whispered.
Rachel spun. “Lily, go downstairs.”
But Lily didn’t move.
With shaking little hands, she held out the blanket. Inside was Thomas’s photo, the glass cracked diagonally across his smiling face.
“I’m sorry,” Lily said, tears filling her eyes. “Mommy threw it in the trash last night. I took it out.”
The hallway went dead silent.
Even Rachel seemed stunned by the sound of it said aloud.
I took the frame as if it were alive.
“You threw away my husband?”
Rachel’s mouth opened and closed. “I was angry.”
Officer Daniels looked down at his notebook.
Carol whispered, “Lord, hold my earrings.”
Something in me went very still.
I walked downstairs carrying Thomas’s photo, my folder, my Bible, and one suitcase. In the living room, Rachel’s audience stood frozen, their pity curdling into something sharper.
I placed the folder on the coffee table.
Rachel hissed, “Don’t.”
But I opened it anyway.
“I’m not here to fight,” I said, my voice steady. “I’m here to correct the story.”
Page by page, I laid out the receipts.
Daycare.
Insurance.
Groceries.
Credit card.
Transfers.
Dates.
Amounts.
Beside them, I placed one more document: the letter from my apartment complex confirming I had ended my lease the month Rachel asked me to move in because “the twins need you.”
Linda’s hand flew to her mouth.
Mrs. Whitcomb stared at Rachel.
Mark stood by the staircase with Noah in his arms, looking like a man watching the roof catch fire from inside the house.
Rachel’s voice cracked. “Mom, please.”
I looked at her, and for one terrible moment I almost stopped.
Because she was my child.
Because I remembered her at five years old, crawling into my bed during thunderstorms.
Because motherhood does not die cleanly. It keeps breathing even after betrayal.
But then Lily stepped beside me and slipped her hand into mine.
Small.
Warm.
Trusting.
And I knew the truth needed air.
“For two years,” I said, “I helped because I loved my family. But love became labor. Labor became expectation. Expectation became entitlement. And yesterday, my daughter told me to move into the garage.”
Linda gasped.
Rachel’s face twisted. “You’re humiliating me.”
“No,” I said softly. “I’m returning what belongs to you.”
Her eyes narrowed. “What does that mean?”
“The shame.”
No one spoke.
Then the doorbell rang.
Rachel flinched.
Mark closed his eyes.
And for the first time since I arrived, I noticed the unopened envelopes stacked near the entry table. Red stamps. Final notices. A certified letter half-hidden beneath preschool artwork.
Officer Daniels noticed them too.
A woman stepped onto the porch in a navy coat, holding a clipboard.
“Rachel Ellis-Harper?” she asked.
Rachel’s face drained of color.
The woman glanced at her papers. “I’m with Franklin County Child and Family Services. We received a report concerning elder financial exploitation and unsafe household conditions involving dependent children.”
The room tilted.
Rachel’s head whipped toward me. “You called them?”
I shook my head, genuinely shocked. “No.”
Carol looked equally stunned.
Then Mark spoke.
His voice was barely audible.
“I did.”
Rachel turned slowly. “What?”
Mark’s eyes were wet. Noah slept against his shoulder, innocent as a secret.
“I called yesterday,” he said. “After your mother left. After I found the folder.”
Rachel stared at him as if he had become a stranger.
He reached into his jacket and pulled out another stack of papers.
“I found copies in the printer tray months ago,” he said to me, unable to meet my eyes. “I knew. I knew you were paying more than Rachel said. I knew she was telling people you were a burden. I should have stopped it.”
My throat tightened.
Rachel whispered, “Mark.”
But he wasn’t finished.
“The credit cards aren’t temporary. There’s more debt. A lot more. Rachel opened one in Margaret’s name.”
The floor disappeared beneath me.
Carol grabbed my arm.
“What did you say?” I asked.
Mark’s face crumpled. “I found the statements. I thought maybe you knew.”
Rachel lunged toward him. “Shut up!”
Officer Daniels stepped between them.
The woman from Child and Family Services looked at me. “Mrs. Ellis, did you authorize your daughter to open credit accounts in your name?”
My fingers tightened around Lily’s hand.
Rachel was crying now, real tears at last. “Mom, I was going to pay it back. I swear. We were drowning. You don’t understand what it’s like to have everyone expecting you to be perfect.”
There it was.
The confession.
Not shouted.
Not forced.
Just spilled from the rotten center of her perfect life.
I looked at my daughter—my beautiful, broken, selfish daughter—and felt grief so deep it had no sound.
“You stole from me,” I said.
Rachel shook her head violently. “No. I borrowed.”
“You stole my money. My name. My dignity. And last night, you tried to throw away my husband.”
She covered her face.
But the twist, the thing none of us saw coming, was not Rachel’s theft.
It came from Lily.
She tugged my hand and whispered, “Grandma, Mommy said if you went away, we could use your room for the baby.”
Every adult turned.
Rachel froze.
Mark stared at her. “What baby?”
Rachel’s hand went to her stomach.
For one heartbeat, no one breathed.
Then Carol whispered, “Oh my God.”
Rachel’s face collapsed—not with guilt, but terror.
Mark stepped back. “Rachel?”
She looked at him, then at me, and something wild flashed in her eyes.
“It wasn’t supposed to happen like this.”
“What wasn’t?” Mark demanded.
Rachel’s voice dropped to a broken whisper.
“The baby isn’t yours.”
Silence detonated.
Even the rain seemed to stop.
Mark looked as if she had struck him with something heavy. “Whose is it?”
Rachel said nothing.
But Linda Parker made a small, strangled sound.
Everyone turned to her.
Her face had gone white.
And in that moment, I understood.
Not all of it. Not yet. But enough.
Linda’s husband was the church treasurer. A smiling man named Paul who always called Rachel “such a devoted daughter” while slipping his hand too low on her back at cookouts.
Rachel covered her mouth.
Linda backed away, shaking.
And suddenly the perfect suburban house, the saintly daughter, the blessed sign, the pitying church ladies, the unpaid bills, the stolen credit card, the garage—all of it cracked open at once.
Not a family crisis.
A house of lies.
I looked down at Lily, who was watching every adult collapse around her.
So I did the only thing left that still felt like love.
I knelt in front of her.
“Sweetheart,” I said gently, “none of this is your fault.”
She nodded, crying silently.
Then I stood, picked up my suitcase, and turned toward the door.
Rachel grabbed my sleeve.
“Mom,” she sobbed. “Please. Don’t leave me.”
For a moment, I saw the girl from the thunderstorm again.
But this time, I also saw the woman who had put me in the garage.
I carefully removed her hand.
“I am not leaving you,” I said. “I am leaving the place where you buried me.”
Six months later, I sat in a blue chair by a sunny window in a new apartment. Basil grew in a cracked pot on the balcony. Carol came every Wednesday for cards. My credit was repaired. Rachel was facing charges, divorce, and the first honest consequences of her life.
Mark brought Lily and Noah every Saturday.
And every Saturday, Lily placed Thomas’s cracked photograph on the little table beside my chair before climbing into my lap.
One afternoon, she touched the broken line across the glass.
“Grandma,” she asked, “why didn’t you fix it?”
I looked at Thomas’s smiling face, split by the crack but still whole behind it.
“Because,” I said, kissing her hair, “some broken things remind us we survived.”
Report this article
Select a reason for reporting:
Inaccurate information Copyright violation Spam / advertisement Offensive content Other '; footer.hidden = true; overlay.hidden = false; document.body.style.overflow = 'hidden'; } function hideSection() { if (section) section.hidden = true; } function openModal() { if (alreadyReported) { showSuccess(); return; } overlay.hidden = false; document.body.style.overflow = 'hidden'; } function closeModal() { overlay.hidden = true; document.body.style.overflow = ''; footer.hidden = false; overlay.querySelectorAll('input[name="report_reason"]').forEach(function(r) { r.checked = false; }); document.getElementById('reportMessage').value = ''; errorBox.hidden = true; submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; imageItems = []; imgGrid.innerHTML = ''; updateAttachBtn(); } btn.addEventListener('click', openModal); closeBtn.addEventListener('click', closeModal); cancelBtn.addEventListener('click', closeModal); overlay.addEventListener('click', function(e) { if (e.target === overlay) closeModal(); }); document.addEventListener('keydown', function(e) { if (!overlay.hidden && e.key === 'Escape') closeModal(); }); // --- Error helper --- function showError(msg) { errorBox.textContent = msg; errorBox.hidden = false; } // --- Submit --- submitBtn.addEventListener('click', function() { var selected = overlay.querySelector('input[name="report_reason"]:checked'); if (!selected) { showError('Please select a reason.'); return; } errorBox.hidden = true; submitBtn.disabled = true; var itemsToUpload = imageItems.filter(function(it) { return !it.uploadedUrl; }); if (itemsToUpload.length === 0) { doSubmit(selected.value); return; } submitBtn.textContent = 'Uploading…'; var done = 0, failed = 0; itemsToUpload.forEach(function(entry) { entry.statusEl.textContent = '…'; entry.statusEl.className = 'report-img-item__status'; entry.statusEl.hidden = false; resizeImage(entry.file, MAX_LONG_PX, function(resized) { uploadFile(resized, currentSlug, function(err, url) { done++; if (err) { failed++; entry.statusEl.textContent = 'Failed'; entry.statusEl.className = 'report-img-item__status err'; } else { entry.uploadedUrl = url; entry.statusEl.textContent = '✓'; entry.statusEl.className = 'report-img-item__status done'; } if (done === itemsToUpload.length) { if (failed > 0) { showError('Could not upload ' + failed + ' image(s). Remove the failed ones (red) or submit without them.' ); submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; } else { doSubmit(selected.value); } } }); }); }); }); function doSubmit(reason) { submitBtn.textContent = 'Sending…'; var uploadedUrls = imageItems .map(function(it) { return it.uploadedUrl; }) .filter(Boolean); var payload = { reason: reason, message: document.getElementById('reportMessage').value.trim(), post_slug: currentSlug, post_url: window.location.href }; if (uploadedUrls.length) payload.image_urls = uploadedUrls; fetch('/api/post-report', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify(payload) }) .then(function(r) { return r.json(); }) .then(function(data) { if (data && data.ok) { markReported(currentSlug); alreadyReported = true; bodyEl.innerHTML = '✓ Thank you for your report.'; footer.hidden = true; setTimeout(function() { closeModal(); footer.hidden = false; hideSection(); }, 2000); } else { showError((data && data.message) ? data.message : 'Something went wrong. Please try again.'); submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; } }) .catch(function() { showError('Connection failed. Please try again.'); submitBtn.disabled = false; submitBtn.textContent = 'Submit report'; }); } })();
Comments 0
Posting as Guest '; } return; } var normalizedItems = items.slice().reverse(); var html = normalizedItems.map(function(comment) { var replies = Array.isArray(comment.replies) ? comment.replies : []; var repliesHtml = replies.map(function(reply) { return '' + '' + '' + escapeHtml(initials(reply.author_name)) + '' + '' + '' + escapeHtml(reply.author_name) + '' + escapeHtml(reply.time) + '' + '
' + escapeHtml(reply.content) + '
' + '' + '' + '' + ''; }).join(''); return '' + '' + '' + escapeHtml(initials(comment.author_name)) + '' + '' + '' + escapeHtml(comment.author_name) + '' + escapeHtml(comment.time) + '' + '
May you like
' + escapeHtml(comment.content) + '
' + '' + '' + '' + '' + (repliesHtml ? '' + repliesHtml + '' : '') + ''; }).join(''); if (mode === 'prepend') { listEl.insertAdjacentHTML('afterbegin', html); return; } listEl.insertAdjacentHTML('beforeend', html); } async function loadComments(page, mode) { var query = new URLSearchParams({ post_slug: postSlug, page: String(page), per_page: String(perPage), }); var response = await fetch('/api/post-comments?' + query.toString(), { method: 'GET', headers: { 'Accept': 'application/json' } }); var data = await response.json().catch(function() { return {}; }); if (!response.ok || data.ok === false) { throw new Error((data && data.message) || 'Cannot load comments.'); } var pagination = data.pagination || {}; currentPage = Number(pagination.current_page || 1); lastPage = Number(pagination.last_page || 1); totalCountEl.textContent = String((data.post && data.post.comment_count) || pagination.total || 0); loadMoreBtn.classList.toggle('comment-box__hidden', currentPage >= lastPage); renderComments(data.comments || [], mode); } async function postComment(content, parentId, feedbackTarget, submitTarget) { var authorName = ensureName(false); if (!authorName) { var forced = ensureName(true); if (!forced) { throw new Error('Please enter your name first.'); } authorName = forced; } var payload = { post_slug: postSlug, post_url: window.location.href, author_name: authorName, content: content, }; if (parentId > 0) { payload.parent_id = parentId; } if (submitTarget) submitTarget.disabled = true; if (feedbackTarget) { feedbackTarget.textContent = 'Submitting...'; feedbackTarget.style.color = ''; } try { var response = await fetch('/api/post-comments', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify(payload) }); var data = await response.json().catch(function() { return {}; }); if (!response.ok || data.ok === false) { throw new Error((data && data.message) || 'Cannot submit comment.'); } await loadComments(1, 'replace'); return true; } finally { if (submitTarget) submitTarget.disabled = false; } } form.addEventListener('submit', async function(event) { event.preventDefault(); var content = String(contentEl.value || '').trim(); if (!content) { setFeedback('Please enter comment content.', true); return; } submitBtn.disabled = true; setFeedback('Submitting...'); try { await postComment(content, 0); contentEl.value = ''; setFeedback('Comment submitted.'); } catch (error) { setFeedback(error.message || 'Cannot submit comment.', true); } finally { submitBtn.disabled = false; } }); listEl.addEventListener('click', function(event) { var replyBtn = event.target.closest('.comment-item__reply-btn'); if (replyBtn) { var row = replyBtn.closest('.comment-item'); if (!row) return; var formEl = row.querySelector('.comment-item__reply-form'); if (!formEl) return; listEl.querySelectorAll('.comment-item__reply-form').forEach(function(f) { if (f !== formEl) f.classList.add('comment-box__hidden'); }); formEl.classList.remove('comment-box__hidden'); var input = formEl.querySelector('textarea'); if (input) input.focus(); return; } var cancelBtn = event.target.closest('.comment-item__reply-cancel'); if (cancelBtn) { var rf = cancelBtn.closest('.comment-item__reply-form'); if (!rf) return; rf.classList.add('comment-box__hidden'); var rInput = rf.querySelector('textarea'); var rFeedback = rf.querySelector('.comment-item__reply-feedback'); if (rInput) rInput.value = ''; if (rFeedback) rFeedback.textContent = ''; } }); listEl.addEventListener('submit', async function(event) { var replyForm = event.target.closest('.comment-item__reply-form'); if (!replyForm) return; event.preventDefault(); var row = replyForm.closest('.comment-item'); if (!row) return; var parentId = Number(row.getAttribute('data-comment-id') || 0); var input = replyForm.querySelector('textarea'); var submit = replyForm.querySelector('.comment-item__reply-submit'); var feedback = replyForm.querySelector('.comment-item__reply-feedback'); var replyText = String((input && input.value) || '').trim(); if (!replyText) { if (feedback) { feedback.textContent = 'Please enter reply content.'; feedback.style.color = '#dc2626'; } return; } try { await postComment(replyText, parentId, feedback, submit); // setFeedback('Reply submitted.'); } catch (error) { if (feedback) { feedback.textContent = error.message || 'Cannot submit reply.'; feedback.style.color = '#dc2626'; } } }); changeNameBtn.addEventListener('click', function() { ensureName(true); }); loadMoreBtn.addEventListener('click', async function() { if (currentPage >= lastPage) return; loadMoreBtn.disabled = true; try { await loadComments(currentPage + 1, 'prepend'); } catch (error) { setFeedback(error.message || 'Cannot load more comments.', true); } finally { loadMoreBtn.disabled = false; } }); ensureName(false); loadComments(1, 'replace').catch(function(error) { setFeedback(error.message || 'Cannot load comments.', true); }); })();