.formatted-text { text-align: center; font-weight: bold; white-space: pre-wrap; line-height: 1.8; margin: 20px auto; padding: 0; color: inherit; background: transparent; } .load-more-container { text-align: center; margin: 40px auto; } .load-more-button { background: linear-gradient(135deg, #ff9800, #ff5722); color: #fff; font-size: 20px; font-weight: bold; padding: 14px 32px; border: none; border-radius: 50px; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.2); transition: all 0.3s ease; } .load-more-button:hover { transform: scale(1.07); background: linear-gradient(135deg, #e68900, #e64a19); } .hidden-section { max-height: 0; opacity: 0; overflow: hidden; transition: max-height 0.6s ease-in-out, opacity 0.6s ease-in-out; } .hidden-section.show { max-height: 5000px; opacity: 1; } تتمة البارت document.addEventListener('DOMContentLoaded', () => { const rawText = `غرق هارون ف شفايفها بحال شي واحد لقا الما من بعد عطش طويل، عبلة ما قدراتش تقاوم، جسدها ما بقاش كيسمع لعقلها لي كان غير كيغوت بـ "لا" و "كرهتو". كاع الحيوط لي بناتهم طاحو قدام التوحش ديالو، وقدام الهمسة ديال سميتو الحقيقية: هارون. ما بقاش هو "البوص" الشيطان، ولا "هارون" لي توحشها. البوسة ما طالتش بزاف حتى بعد عليها بشوية، الأنفاس ديالو كانت مجهدة، وعينيه مازالين لاصقين فوجهها الدايب. مسح شفايفها بصباعو ونطق بصوت مبحوح ومقطوع: هارون: (بإشفاق وقوة) غي سيري، لبسي شي حاجة… وما تعاوديش تعانديني. دار بضهرو كيجمع حوايجو، ولكن يديه كانو كيرعدو. هز ديك القميجة الكحلة لي كانت معنقاها قبيلة، وحطها على كتافها لي كانو عريانين. هارون: (بصوت الأمر الخفي) هادي… لحقاش عجباتك. خرج وخلاها واقفة فبلاصتها مدوخة، جسمها مرخي ما عرفات باش ترد. كلامو ما كانش غضب، كان خليط غريب بين العشق والسيطرة. بقات ف بلاصتها شوية، يدها كتلمس كتفها فاش حط القميجة، حسات بالسخونية ديال جسدو والريحة ديالو لاصقة فيها. ما بكاتش، وما تعصباتش، غير سكتت. شي إحساس جديد وغريب كيدخل لقلبها، إحساس كيمحي الكره وكيزرع بذور الإدمان… شي حاجة بحال البنج. لبسات حوايجها وتغطات فالناموسية، ما فاهمة والو من داكشي لي وقع ليها. فالجناح ديال فهد وغيثة فهد ما قدرش يكتم الضحكة ديالو وهو كيتفكر منظر غيثة بالكسوة الحمرة والعكار. كان عارفها كدير داكشي لي كيقول ليها حرفياً، وأنها بريئة ومحمقة ف نفس الوقت. كان جالس فالصالون، صونا ليه التيليفون. فهد: (لغيثة لي كانت كدير التمارين ديالها) هادي ماما، جي لهنا. قربات ليه غيثة وهي كتنهج. فهد: (رد على التيليفون) ألو ماما… لاباس الحمد لله… (شاف ف غيثة) كاين شي حفدة جايين؟ لا، مازال، راك عارفة… غيثة ضحكات بصوت عالي: كذب عليها! فهد: (كيحاول يسكتها بيديه) سكتي!… اه، اه... فهد: (من بعد ما قطع المكالمة) مالكي الحمقة؟ سمعاتك ماما. غيثة: (وهي كتقفز) لاش كتكذب عليها، قول ليها غنتزوجك ونجيب ليك شي وليدات زوينين بحالي! فهد: (مبتسم بخبث) الزواج مازال ما نوصلو ليه… دابا نمشي لداكشي ديال التحاليل لي قال الحاج، ونبقى ندوي معاه على القرآن والصلاة. غيثة: (بحماس) مزيان، حتى أنا نساعدك. نديرو مسابقة شكون يحفظ أكثر! فهد: (وهو كيشوف ف براءتها) واخة.. ديري هادشي كامل، ولكن بلا ما تلبسي ليا الأحمر عاود ثاني قدام الحاج. عقلتي على الكف؟ غيثة: (تبدلات ملامح وجهها للعتاب) أه، كنتي عارفو غيضربني… ولكن ماعليهش، عجباتني القميجة الكحلة لي دات عبلة! حتى أنا بغيت وحدة! فهد: (مستغرباً) كيفاش عرفتي عبلة دات قميجة كحلة؟ غيثة: (وهي كتشير للتلفازة لي كانت مشعولة فواحد القناة إخبارية) راه شفت فـ…`; const cleanedText = rawText .replace(/\r\n|\r|\n/g, '\n') .split('\n') .map(line => line.replace(/\s+/g, ' ').trim()) .filter(line => line.length > 0) .join('\n'); function decodeHTML(html) { const doc = new DOMParser().parseFromString(html, 'text/html'); return doc.documentElement.textContent || ''; } function normalizeNewlines(s) { return s.replace(/\r\n/g, '\n').replace(/\n{3,}/g, '\n\n').trim(); } function* splitSmart(text, chunkSize) { let pos = 0; const len = text.length; const breakChars = ['\n', '.', '؟', '!', '?', '…', '،', ',', ' ']; while (pos < len) { let endPos = Math.min(pos + chunkSize, len); if (endPos < len) { const slice = text.slice(pos, endPos); let lastBreak = -1; for (const c of breakChars) { const i = slice.lastIndexOf(c); if (i > lastBreak) lastBreak = i; } if (lastBreak > Math.floor(chunkSize * 0.25)) { endPos = pos + lastBreak + 1; } else { const lookAhead = text.slice(endPos, Math.min(len, endPos + 80)); let nextBreak = -1; for (const c of breakChars) { const j = lookAhead.indexOf(c); if (j >= 0 && (nextBreak === -1 || j < nextBreak)) nextBreak = j; } if (nextBreak >= 0) endPos = endPos + nextBreak + 1; } } if (endPos <= pos) endPos = Math.min(pos + chunkSize, len); yield text.slice(pos, endPos); pos = endPos; } } const contentElement = document.getElementById('content'); const loadMoreContainer = document.getElementById('loadMoreContainer'); const loadMoreButton = document.getElementById('loadMoreButton'); const decoded = decodeHTML(cleanedText); const normalized = normalizeNewlines(decoded); const chunkSize = window.innerWidth > 1024 ? 4000 : (window.innerWidth > 768 ? 3000 : 2000); const iterator = splitSmart(normalized, chunkSize); const first = iterator.next(); if (first.done) { contentElement.textContent = normalized; loadMoreContainer.style.display = 'none'; return; } else { contentElement.textContent = first.value; } const hiddenWrapper = document.createElement('div'); hiddenWrapper.id = 'hiddenContent'; contentElement.appendChild(hiddenWrapper); loadMoreContainer.style.display = 'block'; loadMoreButton.addEventListener('click', onLoadMore); function onLoadMore() { const next = iterator.next(); if (next.done) { loadMoreButton.textContent = 'نهاية البارت'; loadMoreButton.disabled = true; loadMoreButton.setAttribute('aria-disabled', 'true'); loadMoreButton.setAttribute('aria-expanded', 'true'); loadMoreButton.style.background = 'linear-gradient(135deg, #4caf50, #388e3c)'; loadMoreButton.style.cursor = 'default'; return; } const part = next.value; const hiddenSection = document.createElement('div'); hiddenSection.className = 'hidden-section'; const span = document.createElement('span'); span.textContent = part; hiddenSection.appendChild(span); hiddenWrapper.appendChild(hiddenSection); requestAnimationFrame(() => { hiddenSection.classList.add('show'); const h = hiddenSection.scrollHeight; hiddenSection.style.maxHeight = h + 'px'; hiddenSection.style.opacity = 1; hiddenSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); loadMoreButton.setAttribute('aria-expanded', 'true'); hiddenSection.setAttribute('tabindex', '-1'); hiddenSection.focus({ preventScroll: true }); }); } document.addEventListener('transitionend', (e) => { const t = e.target; if (t.classList && t.classList.contains('show') && e.propertyName === 'max-height') { t.style.maxHeight = 'none'; } }, true); window.addEventListener('resize', () => {}); });