{"id":13499,"date":"2025-04-14T15:44:01","date_gmt":"2025-04-14T13:44:01","guid":{"rendered":"https:\/\/bakrykeys-com-316394.hostingersite.com\/?page_id=13499"},"modified":"2025-09-11T01:28:29","modified_gmt":"2025-09-10T22:28:29","slug":"bakry-notepad","status":"publish","type":"page","link":"https:\/\/bakrykeys.com\/en\/bakry-notepad\/","title":{"rendered":"\u0645\u062d\u0631\u0631 \u0646\u0635\u0648\u0635 notepad \u0623\u0648\u0646\u0644\u0627\u064a\u0646"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"13499\" class=\"elementor elementor-13499\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"wd-negative-gap elementor-element elementor-element-0563eb1 e-flex e-con-boxed e-con e-parent\" data-id=\"0563eb1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-99f195a elementor-widget elementor-widget-html\" data-id=\"99f195a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\r\n\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>\u0645\u062d\u0631\u0631 \u0628\u0643\u0631\u0649 \u0627\u0644\u0645\u062a\u0637\u0648\u0631<\/title>\r\n    <link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/bakrykeys.com\/wp-content\/uploads\/2025\/04\/my-final-logo.png\" onerror=\"this.href='https:\/\/placehold.co\/32x32\/CCCCCC\/FFFFFF?text=Icon'\">\r\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cairo:wght@400;700&amp;display=swap\" rel=\"stylesheet\">\r\n    <style>\r\n        \/* \u062a\u0637\u0628\u064a\u0642 \u062e\u0637 Cairo \u0648\u062d\u062c\u0645 \u0627\u0644\u062e\u0637 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a \u0648\u062f\u0639\u0645 \u0627\u0644\u0625\u064a\u0645\u0648\u062c\u064a *\/\r\n        body {\r\n            font-family: 'Cairo', 'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', sans-serif;\r\n            overflow-x: hidden;\r\n            display: flex; flex-direction: column; min-height: 100vh;\r\n            background-color: #1f2937; color: #d1d5db;\r\n        }\r\n        .main-content { flex-grow: 1; position: relative; } \/* Added relative for overlay *\/\r\n\r\n        \/* --- Toolbar Container --- *\/\r\n        #toolbar-container {\r\n            position: static; \/* Not sticky by default *\/\r\n            z-index: 50; background-color: #1f2937;\r\n        }\r\n        @media (min-width: 768px) { \/* Sticky only on larger screens *\/\r\n            #toolbar-container { position: sticky; top: 0; }\r\n        }\r\n\r\n        \/* --- Toolbar Styles --- *\/\r\n        #toolbar {\r\n            background-color: #374151; padding: 0.5rem;\r\n            border-radius: 0.375rem; border-bottom-left-radius: 0; border-bottom-right-radius: 0;\r\n            display: flex; flex-wrap: wrap; align-items: center; justify-content: center;\r\n            gap: 0.5rem; position: relative; border: 1px solid #4b5563;\r\n            border-bottom: none; margin-bottom: 0;\r\n        }\r\n\r\n        \/* --- Editor Styles --- *\/\r\n        #editor {\r\n            position: relative; min-height: 400px; line-height: 1.5;\r\n            white-space: pre-wrap; outline: none; border-top-left-radius: 0; border-top-right-radius: 0;\r\n            border-bottom-left-radius: 0.375rem; border-bottom-right-radius: 0.375rem;\r\n            padding: 0 2.5rem 1rem 2.5rem; background-color: #1f2937; color: #d1d5db;\r\n            border: 1px solid #4b5563; border-top: none; overflow: auto;\r\n            background-image: repeating-linear-gradient( to bottom, transparent, transparent 18px, rgba(75, 85, 99, 0.4) 18px, rgba(75, 85, 99, 0.4) 19px, transparent 19px );\r\n            background-size: 100% calc(1em * 1.5); background-attachment: local; text-align: start;\r\n        }\r\n        #editor #welcomeMessage {\r\n            color: #6b7280; font-style: italic; margin-top: 0; text-align: center;\r\n            padding-top: 2px; font-size: inherit;\r\n        }\r\n        #editor::before {\r\n            content: ''; position: absolute; top: 0; bottom: 0; width: 1px;\r\n            background-color: rgba(75, 85, 99, 0.4); height: 100%;\r\n        }\r\n        #editor[dir=\"rtl\"]::before { right: 30px; }\r\n        #editor[dir=\"ltr\"]::before { left: 30px; }\r\n\r\n        \/* --- Toolbar Elements --- *\/\r\n        \/* Default button style *\/\r\n        .toolbar-button, .toolbar-select, .toolbar-font-size-container > select, .toolbar-font-size-container > button, .toolbar-color-input-container > input {\r\n            background-color: #4b5563; \/* Default gray *\/\r\n            color: #f9fafb; border-radius: 0.375rem;\r\n            border: 1px solid #374151; cursor: pointer; transition: all 0.15s ease-in-out;\r\n            box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); font-size: 0.875rem; line-height: 1.25rem;\r\n            white-space: nowrap; flex-shrink: 0; display: inline-flex; justify-content: center;\r\n            align-items: center; padding: 0.5rem 1rem; height: 36px; vertical-align: middle;\r\n        }\r\n        \/* Select specific styles *\/\r\n        .toolbar-select, .toolbar-font-size-container > select {\r\n            padding: 0.5rem 0.5rem; \/* Adjusted padding *\/\r\n            background-image: url(\"data:image\/svg+xml,%3csvg xmlns='http:\/\/www.w3.org\/2000\/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%239ca3af' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'\/%3e%3c\/svg%3e\");\r\n            background-position: right 0.5rem center; background-repeat: no-repeat;\r\n            background-size: 1.5em 1.5em; padding-right: 2.5rem; appearance: none; color: #f9fafb;\r\n        }\r\n        \/* Style for dropdown options *\/\r\n        select#fontSizeSelect option {\r\n            background-color: #4b5563; \/* Dark background for options *\/\r\n            color: #f9fafb; \/* Light text for options *\/\r\n        }\r\n        \/* Hover effect for all buttons\/selects *\/\r\n        .toolbar-select:hover, .toolbar-button:hover, .toolbar-font-size-container > select:hover, .toolbar-font-size-container > button:hover {\r\n            background-color: #6b7280; \/* Lighter gray on hover *\/\r\n            box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1); transform: translateY(-1px);\r\n        }\r\n        \/* Active effect for buttons *\/\r\n        .toolbar-button:active, .toolbar-font-size-container > button:active {\r\n             transform: translateY(0px); box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.05);\r\n        }\r\n        \/* Disabled state *\/\r\n        .toolbar-button:disabled, .toolbar-select:disabled,\r\n        .toolbar-font-size-container > select:disabled, .toolbar-font-size-container > button:disabled,\r\n        .toolbar-color-input-container > input:disabled {\r\n             opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; background-color: #4b5563 !important;\r\n        }\r\n        \/* Active state for toggle buttons (like RTL\/LTR, Bold, etc.) - BLUE *\/\r\n        .toolbar-button.active {\r\n            background-color: #1e40af; \/* Blue-800 *\/\r\n            color: white;\r\n            border-color: #1d4ed8; \/* Blue-700 *\/\r\n        }\r\n        .toolbar-button.active:hover:not(:disabled) { \/* Prevent hover effect when disabled *\/\r\n             background-color: #1e3a8a; \/* Darker Blue on hover when active *\/\r\n        }\r\n\r\n\r\n        \/* Font Size Container *\/\r\n        .toolbar-font-size-container {\r\n            display: inline-flex; align-items: center;\r\n            background-color: #4b5563; border-radius: 0.375rem;\r\n            border: 1px solid #374151;\r\n            \/* padding removed, handled by children *\/\r\n            height: 36px; box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\r\n            overflow: hidden; \/* Keep elements contained *\/\r\n        }\r\n        .toolbar-font-size-container > select {\r\n            border: none; background: none; height: 100%;\r\n            flex-grow: 1;\r\n            padding: 0.5rem 0.5rem 0.5rem 0.25rem; \/* Adjust padding *\/\r\n            \/* Remove border radius from select as it's part of the container *\/\r\n            border-radius: 0;\r\n            \/* Align dropdown arrow correctly *\/\r\n            background-position: left 0.5rem center; \/* Changed to left *\/\r\n            padding-left: 2.5rem; \/* Add padding for the arrow *\/\r\n            padding-right: 0.5rem; \/* Reset right padding *\/\r\n        }\r\n        .toolbar-font-size-container > button { \/* Font reset button *\/\r\n            background: none; border: none; color: #9ca3af; font-size: 1.1rem;\r\n            padding: 0 0.5rem 0 0.5rem; \/* Adjust padding *\/\r\n            cursor: pointer; height: 100%;\r\n            display: inline-flex; align-items: center; flex-shrink: 0;\r\n            border-left: 1px solid #374151; \/* Add separator line *\/\r\n            border-radius: 0; \/* Remove border radius *\/\r\n        }\r\n         .toolbar-font-size-container > button:hover:not(:disabled) {\r\n             color: #f9fafb;\r\n             background-color: #6b7280; \/* Match hover effect *\/\r\n             transform: none; \/* Prevent button moving on hover *\/\r\n             box-shadow: none;\r\n         }\r\n         \/* Adjust hover for select within container *\/\r\n         .toolbar-font-size-container:hover {\r\n            background-color: #6b7280; \/* Lighter gray on hover *\/\r\n            box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1); transform: translateY(-1px);\r\n        }\r\n        .toolbar-font-size-container:hover > button {\r\n             background-color: transparent; \/* Keep button transparent on container hover *\/\r\n             border-color: #4b5563; \/* Match border color *\/\r\n        }\r\n\r\n\r\n        \/* Undo\/Redo Icon Size *\/\r\n        .large-icon { font-size: 1.25rem; font-weight: bold; }\r\n\r\n        \/* Color Input Container *\/\r\n        .toolbar-color-input-container {\r\n            display: inline-flex; align-items: center; background-color: #4b5563;\r\n            border-radius: 0.375rem; border: 1px solid #374151; padding: 0 0.25rem;\r\n            height: 36px; box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\r\n        }\r\n        .toolbar-color-input-container label {\r\n             font-size: 0.875rem; color: #d1d5db; margin-left: 0.25rem; margin-right: 0.25rem;\r\n        }\r\n        .toolbar-color-input-container input[type=\"color\"] {\r\n            padding: 0.1rem; width: 28px; height: 28px; cursor: pointer;\r\n            border: none; background: none; border-radius: 0.25rem; vertical-align: middle;\r\n        }\r\n        .color-reset-button { \/* Shared style for color reset *\/\r\n            background: none; border: none; color: #9ca3af; font-size: 1.1rem;\r\n            padding: 0 0.3rem; cursor: pointer; height: 100%;\r\n            display: inline-flex; align-items: center;\r\n        }\r\n        .color-reset-button:hover:not(:disabled) { color: #f9fafb; background-color: transparent; } \/* Keep background transparent on hover *\/\r\n\r\n        \/* Alignment Button Icons *\/\r\n        .align-icon { width: 1em; height: 1em; fill: currentColor; }\r\n\r\n        \/* Specific Button Colors *\/\r\n        \/* Upload TXT Button *\/\r\n        .upload-txt-button {\r\n            background-color: #f97316; \/* Orange-500 *\/\r\n            color: #ffffff;\r\n            border-color: #ea580c; \/* Orange-600 *\/\r\n        }\r\n        .upload-txt-button:hover:not(:disabled) {\r\n            background-color: #fb923c; \/* Orange-400 *\/\r\n            transform: translateY(-1px);\r\n        }\r\n        \/* Export TXT Button *\/\r\n        .export-txt-button { \/* Renamed class for clarity *\/\r\n            background-color: #16a34a; \/* Green-600 *\/\r\n            color: #ffffff;\r\n            border-color: #15803d; \/* Green-700 *\/\r\n        }\r\n        .export-txt-button:hover:not(:disabled) { \/* Renamed class for clarity *\/\r\n            background-color: #22c55e; \/* Green-500 *\/\r\n            transform: translateY(-1px);\r\n        }\r\n        \/* Copy Button *\/\r\n        .copy-button {\r\n            background-color: #16a34a; \/* Green-600 *\/\r\n            color: #ffffff;\r\n            border-color: #15803d; \/* Green-700 *\/\r\n        }\r\n        .copy-button:hover:not(:disabled) {\r\n            background-color: #22c55e; \/* Green-500 *\/\r\n             transform: translateY(-1px);\r\n        }\r\n        \/* Paste Button *\/\r\n        .paste-button {\r\n            background-color: #9333ea; \/* Purple-600 *\/\r\n            color: #ffffff;\r\n            border-color: #7e22ce; \/* Purple-700 *\/\r\n        }\r\n        .paste-button:hover:not(:disabled) {\r\n            background-color: #a855f7; \/* Purple-500 *\/\r\n             transform: translateY(-1px);\r\n        }\r\n        \/* Clear Selection Button *\/\r\n        .clear-selection-button {\r\n            background-color: #dc2626; \/* Red-600 *\/\r\n            color: #ffffff;\r\n            border-color: #b91c1c; \/* Red-700 *\/\r\n        }\r\n        .clear-selection-button:hover:not(:disabled) {\r\n            background-color: #ef4444; \/* Red-500 *\/\r\n            transform: translateY(-1px);\r\n        }\r\n        \/* Remove Format Button *\/\r\n        .remove-format-button {\r\n            background-color: #dc2626; \/* Red-600 *\/\r\n            color: #ffffff;\r\n            border-color: #b91c1c; \/* Red-700 *\/\r\n        }\r\n        .remove-format-button:hover:not(:disabled) {\r\n            background-color: #ef4444; \/* Red-500 *\/\r\n            transform: translateY(-1px);\r\n        }\r\n        \/* Other buttons use the default .toolbar-button style *\/\r\n\r\n\r\n        \/* --- Emoji Picker Styles --- *\/\r\n        \/* Default styles (for larger screens) *\/\r\n        #emojiPicker {\r\n            background-color: #374151; border-radius: 0.375rem; border: 1px solid #4b5563;\r\n            transition: opacity 0.2s ease-in-out, max-height 0.3s ease-in-out, visibility 0.2s, bottom 0.3s ease-in-out; \/* Added bottom transition *\/\r\n            overflow: hidden; max-height: 0; opacity: 0; visibility: hidden; padding: 0;\r\n            position: absolute; \/* Default positioning relative to toolbar *\/\r\n            top: 100%; left: 50%; transform: translateX(-50%);\r\n            width: calc(100% - 1rem); \/* Span most of the container *\/\r\n            max-width: 550px; \/* Slightly wider max-width *\/\r\n            z-index: 60; display: flex; flex-direction: column;\r\n            bottom: auto; \/* Explicitly set default bottom *\/\r\n        }\r\n        #emojiPicker.visible {\r\n            max-height: 300px; opacity: 1; visibility: visible;\r\n            padding: 0.5rem; overflow-y: auto;\r\n        }\r\n\r\n        \/* *** NEW: Mobile-specific styles for Emoji Picker *** *\/\r\n        @media (max-width: 767px) {\r\n            #emojiPicker {\r\n                position: fixed; \/* Fixed position at bottom of viewport *\/\r\n                bottom: -300px; \/* Start off-screen (adjust if max-height changes) *\/\r\n                top: auto; \/* Override absolute top *\/\r\n                left: 0; right: 0; \/* Span full width *\/\r\n                transform: none; \/* Remove horizontal centering transform *\/\r\n                width: 100%; \/* Full viewport width *\/\r\n                max-width: none; \/* Remove max-width constraint *\/\r\n                border-radius: 0.375rem 0.375rem 0 0; \/* Round top corners only *\/\r\n                border-bottom: none; \/* Remove bottom border *\/\r\n                max-height: 250px; \/* Slightly reduce max-height for mobile *\/\r\n            }\r\n            #emojiPicker.visible {\r\n                bottom: 0; \/* Slide up into view *\/\r\n                max-height: 250px; \/* Ensure max-height is set *\/\r\n            }\r\n        }\r\n\r\n        .emoji-category { margin-bottom: 0.75rem; }\r\n        .emoji-category-title {\r\n            font-weight: bold; color: #9ca3af; margin-bottom: 0.25rem;\r\n            padding-bottom: 0.25rem; border-bottom: 1px solid #4b5563; font-size: 0.875rem;\r\n        }\r\n        .emoji-list { display: flex; flex-wrap: wrap; gap: 0.25rem; }\r\n        .emoji-item {\r\n            font-size: 1.25rem; transition: background-color 0.15s; user-select: none;\r\n            cursor: pointer; padding: 0.1rem 0.25rem; border-radius: 0.25rem; display: inline-block;\r\n        }\r\n        .emoji-item:hover { background-color: #4b5563; }\r\n\r\n        \/* Status Bar *\/\r\n        #statusBar {\r\n            background-color: #374151; color: #d1d5db; padding: 0.5rem 1rem; font-size: 0.875rem;\r\n            border: 1px solid #4b5563; border-top: none; border-bottom-left-radius: 0.375rem; border-bottom-right-radius: 0.375rem;\r\n            display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem;\r\n        }\r\n        .status-info span { margin-left: 0.75rem; }\r\n        .status-export { display: flex; flex-wrap: nowrap; gap: 0.5rem; }\r\n\r\n        \/* Footer *\/\r\n        footer { text-align: center; padding: 1rem; margin-top: 1.5rem; font-size: 0.875rem; color: #9ca3af; }\r\n        footer a { color: #60a5fa; text-decoration: none; }\r\n        footer a:hover { text-decoration: underline; }\r\n\r\n        \/* Vertical Separator *\/\r\n        .toolbar-separator {\r\n            border-left: 1px solid #4b5563; height: 24px; margin: 0 0.25rem; align-self: center;\r\n        }\r\n\r\n        \/* --- Copyright Violation Overlay --- *\/\r\n        #copyrightViolationOverlay {\r\n            position: absolute;\r\n            top: 0; left: 0; right: 0; bottom: 0;\r\n            background-color: rgba(31, 41, 55, 0.95); \/* Semi-transparent dark background *\/\r\n            color: #ef4444; \/* Red text *\/\r\n            display: none; \/* Hidden by default *\/\r\n            flex-direction: column;\r\n            justify-content: center;\r\n            align-items: center;\r\n            text-align: center;\r\n            z-index: 100; \/* Above everything else *\/\r\n            padding: 2rem;\r\n            border-radius: 0.375rem; \/* Match editor rounding *\/\r\n            font-size: 1.25rem;\r\n            font-weight: bold;\r\n        }\r\n        #copyrightViolationOverlay p { margin-bottom: 1rem; }\r\n\r\n        \/* --- Styles for Delayed Loading --- *\/\r\n        #toolbar-container, #editor, #statusBar {\r\n            opacity: 0;\r\n            visibility: hidden;\r\n            transition: opacity 0.5s ease-in-out, visibility 0s linear 0.5s; \/* Delay visibility change until opacity transition ends *\/\r\n        }\r\n        #toolbar-container.visible, #editor.visible, #statusBar.visible {\r\n            opacity: 1;\r\n            visibility: visible;\r\n            transition: opacity 0.5s ease-in-out; \/* Only transition opacity when becoming visible *\/\r\n        }\r\n\r\n    <\/style>\r\n\r\n\r\n\r\n    <div class=\"main-content max-w-4xl mx-auto\">\r\n\r\n        <div id=\"toolbar-container\">\r\n            <div id=\"toolbar\">\r\n                 <button class=\"toolbar-button upload-txt-button\" onclick=\"uploadTxtFile()\" title=\"\u0631\u0641\u0639 \u0645\u0644\u0641 \u0646\u0635\u064a (TXT)\">\u0631\u0641\u0639 TXT<\/button>\r\n                 <div class=\"toolbar-separator\"><\/div>\r\n                 <button class=\"toolbar-button large-icon\" onclick=\"formatDoc('undo')\" title=\"\u062a\u0631\u0627\u062c\u0639 (Ctrl+Z)\">\u21b7<\/button>\r\n                 <button class=\"toolbar-button large-icon\" onclick=\"formatDoc('redo')\" title=\"\u0627\u0644\u062a\u0642\u062f\u0645 \u0644\u0644\u0627\u0645\u0627\u0645 (Ctrl+Y)\">\u21b6<\/button>\r\n                 <div class=\"toolbar-separator\"><\/div>\r\n                 <button id=\"rtlBtn\" class=\"toolbar-button active\" onclick=\"setTextDirection('rtl')\" title=\"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0646\u0635: \u064a\u0645\u064a\u0646-\u0625\u0644\u0649-\u064a\u0633\u0627\u0631\">RTL<\/button>\r\n                 <button id=\"ltrBtn\" class=\"toolbar-button\" onclick=\"setTextDirection('ltr')\" title=\"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0646\u0635: \u064a\u0633\u0627\u0631-\u0625\u0644\u0649-\u064a\u0645\u064a\u0646\">LTR<\/button>\r\n                 <div class=\"toolbar-separator\"><\/div>\r\n\r\n                 <div class=\"toolbar-font-size-container\" title=\"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637\">\r\n                     <button onclick=\"resetEditorFontSize()\" title=\"\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062d\u062c\u0645 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\">\u21ba<\/button>\r\n                     <select id=\"fontSizeSelect\" onchange=\"setEditorFontSize(this.value)\">\r\n                         <option value=\"10px\">10px<\/option>\r\n                         <option value=\"12px\">12px<\/option>\r\n                         <option value=\"14px\">14px<\/option>\r\n                         <option value=\"16px\" selected>16px<\/option>\r\n                         <option value=\"18px\">18px<\/option>\r\n                         <option value=\"20px\">20px<\/option>\r\n                         <option value=\"24px\">24px<\/option>\r\n                         <option value=\"28px\">28px<\/option>\r\n                         <option value=\"32px\">32px<\/option>\r\n                         <option value=\"36px\">36px<\/option>\r\n                         <option value=\"42px\">42px<\/option>\r\n                         <option value=\"48px\">48px<\/option>\r\n                         <option value=\"56px\">56px<\/option>\r\n                     <\/select>\r\n\t\t\t\t\t \r\n\t\t\t\t\t <\/div>\r\n                 <button class=\"toolbar-button\" onclick=\"formatDoc('bold')\" title=\"\u063a\u0627\u0645\u0642 (Ctrl+B)\"><b>B<\/b><\/button>\r\n                 <button class=\"toolbar-button\" onclick=\"formatDoc('italic')\" title=\"\u0645\u0627\u0626\u0644 (Ctrl+I)\"><i>I<\/i><\/button>\r\n                 <button class=\"toolbar-button\" onclick=\"formatDoc('underline')\" title=\"\u062a\u0633\u0637\u064a\u0631 (Ctrl+U)\"><u>U<\/u><\/button>\r\n                 <button class=\"toolbar-button\" onclick=\"formatDoc('strikeThrough')\" title=\"\u0646\u0635 \u064a\u062a\u0648\u0633\u0637\u0647 \u062e\u0637\"><s>S<\/s><\/button>\r\n                 <button class=\"toolbar-button remove-format-button\" onclick=\"formatDoc('removeFormat')\" title=\"\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u062a\u0646\u0633\u064a\u0642\">\u0645\u0633\u062d \u0627\u0644\u062a\u0646\u0633\u064a\u0642<\/button>\r\n                 <div class=\"toolbar-separator\"><\/div>\r\n\r\n                 <div class=\"inline-flex align-group-desktop\" role=\"group\">\r\n                     <button class=\"toolbar-button align-button\" onclick=\"changeAlignment('justifyRight')\" title=\"\u0645\u062d\u0627\u0630\u0627\u0629 \u0644\u0644\u064a\u0645\u064a\u0646\">\r\n                         <svg class=\"align-icon\" viewbox=\"0 0 24 24\"><path d=\"M3 4H21V6H3V4ZM9 9H21V11H9V9ZM3 14H21V16H3V14ZM9 19H21V21H9V19Z\"><\/path><\/svg>\r\n                     <\/button>\r\n                     <button class=\"toolbar-button align-button\" onclick=\"changeAlignment('justifyCenter')\" title=\"\u062a\u0648\u0633\u064a\u0637\">\r\n                         <svg class=\"align-icon\" viewbox=\"0 0 24 24\"><path d=\"M3 4H21V6H3V4ZM7 9H17V11H7V9ZM3 14H21V16H3V14ZM7 19H17V21H7V19Z\"><\/path><\/svg>\r\n                     <\/button>\r\n                     <button class=\"toolbar-button align-button\" onclick=\"changeAlignment('justifyLeft')\" title=\"\u0645\u062d\u0627\u0630\u0627\u0629 \u0644\u0644\u064a\u0633\u0627\u0631\">\r\n                         <svg class=\"align-icon\" viewbox=\"0 0 24 24\"><path d=\"M3 4H21V6H3V4ZM3 9H15V11H3V9ZM3 14H21V16H3V14ZM3 19H15V21H3V19Z\"><\/path><\/svg>\r\n                     <\/button>\r\n                     <button class=\"toolbar-button align-button\" onclick=\"changeAlignment('justifyFull')\" title=\"\u0636\u0628\u0637\">\r\n                         <svg class=\"align-icon\" viewbox=\"0 0 24 24\"><path d=\"M3 4H21V6H3V4ZM3 9H21V11H3V9ZM3 14H21V16H3V14ZM3 19H21V21H3V19Z\"><\/path><\/svg>\r\n                     <\/button>\r\n                 <\/div>\r\n                 <div class=\"toolbar-separator\"><\/div>\r\n\r\n                 <div class=\"toolbar-color-input-container\" title=\"\u0644\u0648\u0646 \u0627\u0644\u062e\u0637\">\r\n                     <label for=\"fontColorPicker\">\u0644\u0648\u0646:<\/label>\r\n                     <input type=\"color\" id=\"fontColorPicker\" oninput=\"changeColor('foreColor', this.value)\" value=\"#d1d5db\">\r\n                     <button class=\"color-reset-button\" onclick=\"resetColor('foreColor')\" title=\"\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\">\u21ba<\/button>\r\n                 <\/div>\r\n                 <div class=\"toolbar-color-input-container\" title=\"\u0644\u0648\u0646 \u062e\u0644\u0641\u064a\u0629 \u0627\u0644\u0646\u0635\">\r\n                     <label for=\"highlightColorPicker\">\u062e\u0644\u0641\u064a\u0629:<\/label>\r\n                     <input type=\"color\" id=\"highlightColorPicker\" oninput=\"changeColor('backColor', this.value)\" value=\"#1f2937\">\r\n                      <button class=\"color-reset-button\" onclick=\"resetColor('backColor')\" title=\"\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a\u0629\">\u21ba<\/button>\r\n                 <\/div>\r\n                  <div class=\"toolbar-separator\"><\/div>\r\n\r\n                 <button class=\"toolbar-button\" onclick=\"selectAllContent()\" title=\"\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0644 (Ctrl+A)\">\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0644<\/button>\r\n                 <button class=\"toolbar-button clear-selection-button\" onclick=\"deleteSelection()\" title=\"\u0645\u0633\u062d \u0627\u0644\u0645\u062d\u062f\u062f (Delete)\">\u0645\u0633\u062d<\/button>\r\n                 <button class=\"toolbar-button copy-button\" onclick=\"copyContent()\" title=\"\u0646\u0633\u062e (Ctrl+C)\">\u0646\u0633\u062e<\/button>\r\n                 <button class=\"toolbar-button paste-button\" onclick=\"pasteContent()\" title=\"\u0644\u0635\u0642 (Ctrl+V)\">\u0644\u0635\u0642<\/button>\r\n                 <div class=\"toolbar-separator\"><\/div>\r\n                 <button class=\"toolbar-button\" onclick=\"toggleEmojiPicker()\" title=\"\u0625\u0638\u0647\u0627\u0631\/\u0625\u062e\u0641\u0627\u0621 \u0627\u0644\u0625\u064a\u0645\u0648\u062c\u064a\">\ud83d\ude00<\/button>\r\n            <\/div>\r\n            <div id=\"emojiPicker\">\r\n                 <div class=\"text-center p-4 text-gray-400\">\u062c\u0627\u0631\u064a \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0625\u064a\u0645\u0648\u062c\u064a...<\/div>\r\n             <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"editor\" contenteditable=\"true\" spellcheck=\"true\" dir=\"rtl\">\r\n            <p id=\"welcomeMessage\">\u0645\u0631\u062d\u0628\u0627\u064b \u0628\u0643 \u0641\u064a \u0645\u062d\u0631\u0631 \u0628\u0643\u0631\u0649 \u0627\u0644\u0646\u0635\u064a \u0627\u0644\u0645\u062a\u0637\u0648\u0631! \u062a\u0637\u0648\u064a\u0631 \u0627\u0644\u0628\u0634\u0645\u0647\u0646\u062f\u0633 \u0645\u062d\u0645\u062f \u0628\u0643\u0631\u0649\u2728 \u0627\u0628\u062f\u0623 \u0628\u0627\u0644\u0643\u062a\u0627\u0628\u0629 \u0647\u0646\u0627...<\/p>\r\n        <\/div>\r\n\r\n        <div id=\"copyrightViolationOverlay\">\r\n            <p>\ud83d\udd12\u0639\u0645\u0644\u062a \u0644\u064a\u0647 \u0643\u062f\u0629 \u064a\u0627 \u0646\u062c\u0645 \ud83d\udd12<\/p>\r\n            <p>\u0644\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u064a\u0647<\/p>\r\n            <p>\u0644\u0644\u0623\u0633\u0641\u060c \u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0645\u062d\u0631\u0631 \u0641\u064a \u0647\u0630\u0647 \u0627\u0644\u062d\u0627\u0644\u0629.<\/p>\r\n            <p>\u064a\u0631\u062c\u064a \u0627\u0644\u062a\u0627\u0643\u062f \u0645\u0646 \u0633\u0644\u0627\u0645\u0629 \u062d\u0642\u0648\u0642 \u0645\u0648\u0642\u0639 bakrykeys\".<\/p>\r\n        <\/div>\r\n\r\n        <div id=\"statusBar\">\r\n             <div class=\"status-info\">\r\n                 <span id=\"charCount\">\u0627\u0644\u062d\u0631\u0648\u0641: 0<\/span>\r\n                 <span id=\"wordCount\">\u0627\u0644\u0643\u0644\u0645\u0627\u062a: 0<\/span>\r\n             <\/div>\r\n             <div class=\"status-export\">\r\n                 <button class=\"toolbar-button export-txt-button action-button\" onclick=\"exportToTxt()\" title=\"\u062a\u0635\u062f\u064a\u0631 \u0643\u0645\u0644\u0641 \u0646\u0635\u064a (TXT)\">\u062a\u0635\u062f\u064a\u0631 TXT<\/button>\r\n             <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <footer class=\"max-w-4xl mx-auto w-full text-center px-4 md:px-8\"> <p id=\"copyrightNotice\">\r\n            \u062c\u0645\u064a\u0639 \u0627\u0644\u062d\u0642\u0648\u0642 \u0645\u062d\u0641\u0648\u0638\u0629 \u00a9 \u0644\u0640 <a href=\"https:\/\/bakrykeys.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">bakrykeys<\/a>\r\n        <\/p>\r\n    <\/footer>\r\n\r\n\r\n    <script>\r\n        \/\/ --- Enhanced Protection Measures ---\r\n\r\n        \/\/ Basic string hashing function (not cryptographically secure, but sensitive to changes)\r\n        function _h(str) {\r\n            let hash = 0;\r\n            if (!str || str.length === 0) return hash;\r\n            for (let i = 0; i < str.length; i++) {\r\n                const char = str.charCodeAt(i);\r\n                hash = ((hash << 5) - hash) + char;\r\n                hash |= 0; \/\/ Convert to 32bit integer\r\n            }\r\n            return hash;\r\n        }\r\n\r\n        \/\/ Obfuscated constants (replace with actual expected values later)\r\n        const _c = {\r\n            p1: \"\u062c\u0645\u064a\u0639 \u0627\u0644\u062d\u0642\u0648\u0642 \u0645\u062d\u0641\u0648\u0638\u0629 \u00a9 \u0644\u0640 \", \/\/ cp_part1\r\n            p2: \"bakrykeys\",             \/\/ cp_part2\r\n            lnk: \"https:\/\/bakrykeys.com\/\", \/\/ cp_link\r\n            id: \"copyrightNotice\",        \/\/ cp_id\r\n            \/\/ Expected hashes - **IMPORTANT**: These need to be calculated and hardcoded *after*\r\n            \/\/ the final code for checkCopyright and the footer HTML are stable.\r\n            \/\/ Use console.log(_h(checkCopyright.toString())) and console.log(_h(document.getElementById(_c.id)?.outerHTML || ''))\r\n            \/\/ in the browser console ONCE the code is final, then copy the numbers here.\r\n            \/\/ Placeholder values are used for now. Replace them!\r\n            \/\/ NOTE: The hash values might change slightly due to removing exportToWord function.\r\n            \/\/ You should recalculate these if you intend to deploy this version.\r\n            chkHash: -1028005298, \/\/ Placeholder - Recalculate this! Example: _h(checkCopyright.toString())\r\n            ftrHash:1625839468\r\n\/\/ Placeholder - Recalculate this! Example: _h(document.getElementById('copyrightNotice').outerHTML)\r\n        };\r\n\r\n        \/\/ Flag to prevent repeated disabling\r\n        let _isDisabled = false; \/\/ isEditorDisabledByCopyright\r\n        \/\/ Interval timer for copyright check\r\n        let _chkInt = null; \/\/ copyrightCheckInterval\r\n\r\n        \/**\r\n         * Function to disable the editor and show the copyright violation message.\r\n         * Renamed for slight obfuscation.\r\n         *\/\r\n        function _haltAndBlock() {\r\n            if (_isDisabled) return;\r\n            _isDisabled = true;\r\n\r\n            console.error(\"CRITICAL: Integrity check failed! Halting execution.\");\r\n\r\n            const editor = document.getElementById('editor');\r\n            const toolbarContainer = document.getElementById('toolbar-container');\r\n            const statusBar = document.getElementById('statusBar');\r\n            const copyrightOverlay = document.getElementById('copyrightViolationOverlay');\r\n\r\n            \/\/ 1. Disable editor\r\n            if (editor) {\r\n                editor.contentEditable = false;\r\n                editor.innerHTML = '<p style=\"color: #ef4444; text-align: center; font-weight: bold;\">\u062a\u0645 \u062a\u0639\u0637\u064a\u0644 \u0627\u0644\u0645\u062d\u0631\u0631 \u0628\u0633\u0628\u0628 \u0627\u0646\u062a\u0647\u0627\u0643 \u062d\u0642\u0648\u0642 \u0627\u0644\u0646\u0634\u0631.';\r\n            }\r\n\r\n            \/\/ 2. Disable toolbar\r\n            if (toolbarContainer) {\r\n                const toolbarElements = toolbarContainer.querySelectorAll('button, select, input');\r\n                toolbarElements.forEach(el => el.disabled = true);\r\n            }\r\n\r\n            \/\/ 3. Disable status bar\r\n            if (statusBar) {\r\n                const statusBarButtons = statusBar.querySelectorAll('button');\r\n                statusBarButtons.forEach(btn => btn.disabled = true);\r\n            }\r\n\r\n            \/\/ 4. Show overlay\r\n            if (copyrightOverlay) {\r\n                copyrightOverlay.style.display = 'flex';\r\n            }\r\n\r\n            \/\/ 5. Clear interval\r\n            if (_chkInt) {\r\n                clearInterval(_chkInt);\r\n                _chkInt = null;\r\n            }\r\n        }\r\n\r\n        \/**\r\n         * Enhanced copyright and integrity check.\r\n         * @returns {boolean} True if valid, false otherwise.\r\n         *\/\r\n        function checkCopyright() { \/\/ Keep original name for interval reference, but hash is checked\r\n            if (_isDisabled) return false;\r\n\r\n            const noticeElement = document.getElementById(_c.id);\r\n            const linkElement = noticeElement ? noticeElement.querySelector(`a[href=\"${_c.lnk}\"]`) : null;\r\n\r\n            \/\/ --- Tamper Check 1: Basic Element Existence ---\r\n            if (!noticeElement || !linkElement) {\r\n                console.warn(\"Tamper Check 1 Failed: Footer elements missing.\");\r\n                _haltAndBlock();\r\n                return false;\r\n            }\r\n\r\n            \/\/ --- Tamper Check 2: Content Verification ---\r\n            const fullText = noticeElement.textContent.trim();\r\n            const expectedFullText = (_c.p1 + _c.p2).trim();\r\n            const linkText = linkElement.textContent.trim();\r\n\r\n            if (fullText !== expectedFullText || linkText !== _c.p2) {\r\n                console.warn(\"Tamper Check 2 Failed: Text content mismatch.\");\r\n                _haltAndBlock();\r\n                return false;\r\n            }\r\n            if (!noticeElement.innerHTML.includes(`href=\"${_c.lnk}\"`) || !noticeElement.innerHTML.includes(`>${_c.p2}`)) {\r\n                 console.warn(\"Tamper Check 2 Failed: Link structure mismatch.\");\r\n                 _haltAndBlock();\r\n                 return false;\r\n            }\r\n\r\n            \/\/ --- Tamper Check 3: Function Integrity (Self-Check) ---\r\n            \/\/ IMPORTANT: The hash comparison relies on the function's exact string representation.\r\n            \/\/ Even adding a comment or space inside checkCopyright will change the hash.\r\n            const currentCheckFuncHash = _h(checkCopyright.toString());\r\n            if (currentCheckFuncHash !== _c.chkHash) {\r\n                 console.warn(`Tamper Check 3 Failed: checkCopyright function modified. Expected: ${_c.chkHash}, Found: ${currentCheckFuncHash}`);\r\n                 _haltAndBlock();\r\n                 return false;\r\n            }\r\n\r\n             \/\/ --- Tamper Check 4: Footer HTML Integrity ---\r\n             const currentFooterHTML = noticeElement.outerHTML || ''; \/\/ Get the outer HTML of the P tag\r\n             const currentFooterHash = _h(currentFooterHTML);\r\n             if (currentFooterHash !== _c.ftrHash) {\r\n                  console.warn(`Tamper Check 4 Failed: Footer HTML modified. Expected: ${_c.ftrHash}, Found: ${currentFooterHash}`);\r\n                  _haltAndBlock();\r\n                  return false;\r\n             }\r\n\r\n\r\n            \/\/ If all checks pass\r\n            return true;\r\n        }\r\n\r\n\r\n        \/\/ --- Core Editor Functionality (Mostly unchanged, but check added) ---\r\n\r\n        \/\/ Get references to DOM elements\r\n        const editor = document.getElementById('editor');\r\n        const rtlBtn = document.getElementById('rtlBtn');\r\n        const ltrBtn = document.getElementById('ltrBtn');\r\n        const wordCountSpan = document.getElementById('wordCount');\r\n        const charCountSpan = document.getElementById('charCount');\r\n        const welcomeMessageElement = document.getElementById('welcomeMessage');\r\n        const emojiPicker = document.getElementById('emojiPicker');\r\n        const fontColorPicker = document.getElementById('fontColorPicker');\r\n        const highlightColorPicker = document.getElementById('highlightColorPicker');\r\n        const fontSizeSelect = document.getElementById('fontSizeSelect');\r\n        const toolbarContainer = document.getElementById('toolbar-container'); \/\/ Added reference\r\n        const statusBar = document.getElementById('statusBar'); \/\/ Added reference\r\n        \/\/ Note: Overlay ref is inside _haltAndBlock\r\n\r\n        \/\/ State variable for welcome message\r\n        let welcomeMessageActive = true;\r\n        \/\/ Store last selection range\r\n        let savedSelection = null;\r\n        \/\/ Default colors\/size\r\n        const defaultFontColor = '#d1d5db';\r\n        const defaultHighlightColor = '#1f2937';\r\n        const defaultHighlightColorResetValue = '#ffffff'; \/\/ Use white for resetting background\r\n        const defaultFontSize = '16px';\r\n\r\n        \/\/ --- Emoji Data (Categorized) ---\r\n        const emojiCategories = {\r\n            \"\u0627\u0644\u0648\u062c\u0648\u0647 \u0627\u0644\u0645\u0628\u062a\u0633\u0645\u0629 \u0648\u0627\u0644\u0639\u0648\u0627\u0637\u0641\": \"\ud83d\ude00 \ud83d\ude03 \ud83d\ude04 \ud83d\ude01 \ud83d\ude06 \ud83d\ude05 \ud83d\ude02 \ud83e\udd23 \ud83d\ude0a \ud83d\ude07 \ud83d\ude42 \ud83d\ude43 \ud83d\ude09 \ud83d\ude0c \ud83d\ude0d \ud83e\udd70 \ud83d\ude18 \ud83d\ude17 \ud83d\ude19 \ud83d\ude1a \ud83d\ude0b \ud83d\ude1b \ud83d\ude1c \ud83e\udd2a \ud83d\ude1d \ud83e\udd11 \ud83e\udd17 \ud83e\udd2d \ud83e\udd2b \ud83e\udd14 \ud83e\udd10 \ud83e\udd28 \ud83d\ude10 \ud83d\ude11 \ud83d\ude36 \ud83d\ude0f \ud83d\ude12 \ud83d\ude44 \ud83d\ude2c \ud83e\udd25 \ud83d\ude0c \ud83d\ude14 \ud83d\ude2a \ud83e\udd24 \ud83d\ude34 \ud83d\ude37 \ud83e\udd12 \ud83e\udd15 \ud83e\udd22 \ud83e\udd2e \ud83e\udd27 \ud83e\udd75 \ud83e\udd76 \ud83e\udd74 \ud83d\ude35 \ud83e\udd2f \ud83e\udd20 \ud83e\udd73 \ud83d\ude0e \ud83e\udd13 \ud83e\uddd0 \ud83d\ude15 \ud83d\ude1f \ud83d\ude41 \u2639\ufe0f \ud83d\ude2e \ud83d\ude2f \ud83d\ude32 \ud83d\ude33 \ud83e\udd7a \ud83d\ude26 \ud83d\ude27 \ud83d\ude28 \ud83d\ude30 \ud83d\ude25 \ud83d\ude22 \ud83d\ude2d \ud83d\ude31 \ud83d\ude16 \ud83d\ude23 \ud83d\ude1e \ud83d\ude13 \ud83d\ude29 \ud83d\ude2b \ud83e\udd71 \ud83d\ude24 \ud83d\ude21 \ud83d\ude20 \ud83e\udd2c \ud83d\ude08 \ud83d\udc7f \ud83d\udc80 \u2620\ufe0f \ud83d\udca9 \ud83e\udd21 \ud83d\udc79 \ud83d\udc7a \ud83d\udc7b \ud83d\udc7d \ud83d\udc7e \ud83e\udd16 \ud83d\ude3a \ud83d\ude38 \ud83d\ude39 \ud83d\ude3b \ud83d\ude3c \ud83d\ude3d \ud83d\ude40 \ud83d\ude3f \ud83d\ude3e\",\r\n            \"\u0627\u0644\u0623\u0634\u062e\u0627\u0635 \u0648\u0627\u0644\u062c\u0633\u062f\": \"\ud83d\udc4b \ud83e\udd1a \ud83d\udd90\ufe0f \u270b \ud83d\udd96 \ud83d\udc4c \ud83e\udd0c \ud83e\udd0f \u270c\ufe0f \ud83e\udd1e \ud83e\udd1f \ud83e\udd18 \ud83e\udd19 \ud83d\udc48 \ud83d\udc49 \ud83d\udc46 \ud83d\udd95 \ud83d\udc47 \u261d\ufe0f \ud83d\udc4d \ud83d\udc4e \u270a \ud83d\udc4a \ud83e\udd1b \ud83e\udd1c \ud83d\udc4f \ud83d\ude4c \ud83d\udc50 \ud83e\udd32 \ud83d\ude4f \ud83e\udd1d \ud83d\udcaa \ud83e\uddbe \ud83e\uddb5 \ud83e\uddbf \ud83e\uddb6 \ud83d\udc42 \ud83e\uddbb \ud83d\udc43 \ud83e\udde0 \ud83e\udec0 \ud83e\udec1 \ud83e\uddb7 \ud83e\uddb4 \ud83d\udc40 \ud83d\udc41\ufe0f \ud83d\udc45 \ud83d\udc44 \ud83d\udc8b \ud83e\ude78 \ud83d\udc76 \ud83d\udc67 \ud83e\uddd2 \ud83d\udc66 \ud83d\udc69 \ud83e\uddd1 \ud83d\udc68 \ud83d\udc69\u200d\ud83e\uddb1 \ud83e\uddd1\u200d\ud83e\uddb1 \ud83d\udc68\u200d\ud83e\uddb1 \ud83d\udc69\u200d\ud83e\uddb0 \ud83e\uddd1\u200d\ud83e\uddb0 \ud83d\udc68\u200d\ud83e\uddb0 \ud83d\udc71\u200d\u2640\ufe0f \ud83d\udc71 \ud83d\udc71\u200d\u2642\ufe0f \ud83d\udc69\u200d\ud83e\uddb3 \ud83e\uddd1\u200d\ud83e\uddb3 \ud83d\udc68\u200d\ud83e\uddb3 \ud83d\udc69\u200d\ud83e\uddb2 \ud83e\uddd1\u200d\ud83e\uddb2 \ud83d\udc68\u200d\ud83e\uddb2 \ud83e\uddd4\u200d\u2640\ufe0f \ud83e\uddd4 \ud83e\uddd4\u200d\u2642\ufe0f \ud83d\udc75 \ud83e\uddd3 \ud83d\udc74 \ud83d\udc72 \ud83d\udc73\u200d\u2640\ufe0f \ud83d\udc73 \ud83d\udc73\u200d\u2642\ufe0f \ud83e\uddd5 \ud83d\udc6e\u200d\u2640\ufe0f \ud83d\udc6e \ud83d\udc6e\u200d\u2642\ufe0f \ud83d\udc77\u200d\u2640\ufe0f \ud83d\udc77 \ud83d\udc77\u200d\u2642\ufe0f \ud83d\udc82\u200d\u2640\ufe0f \ud83d\udc82 \ud83d\udc82\u200d\u2642\ufe0f \ud83d\udd75\ufe0f\u200d\u2640\ufe0f \ud83d\udd75\ufe0f \ud83d\udd75\ufe0f\u200d\u2642\ufe0f \ud83d\udc69\u200d\u2695\ufe0f \ud83e\uddd1\u200d\u2695\ufe0f \ud83d\udc68\u200d\u2695\ufe0f \ud83d\udc69\u200d\ud83c\udf3e \ud83e\uddd1\u200d\ud83c\udf3e \ud83d\udc68\u200d\ud83c\udf3e \ud83d\udc69\u200d\ud83c\udf73 \ud83e\uddd1\u200d\ud83c\udf73 \ud83d\udc68\u200d\ud83c\udf73 \ud83d\udc69\u200d\ud83c\udf93 \ud83e\uddd1\u200d\ud83c\udf93 \ud83d\udc68\u200d\ud83c\udf93 \ud83d\udc69\u200d\ud83c\udfa4 \ud83e\uddd1\u200d\ud83c\udfa4 \ud83d\udc68\u200d\ud83c\udfa4 \ud83d\udc69\u200d\ud83c\udfeb \ud83e\uddd1\u200d\ud83c\udfeb \ud83d\udc68\u200d\ud83c\udfeb \ud83d\udc69\u200d\ud83c\udfed \ud83e\uddd1\u200d\ud83c\udfed \ud83d\udc68\u200d\ud83c\udfed \ud83d\udc69\u200d\ud83d\udcbb \ud83e\uddd1\u200d\ud83d\udcbb \ud83d\udc68\u200d\ud83d\udcbb \ud83d\udc69\u200d\ud83d\udcbc \ud83e\uddd1\u200d\ud83d\udcbc \ud83d\udc68\u200d\ud83d\udcbc \ud83d\udc69\u200d\ud83d\udd27 \ud83e\uddd1\u200d\ud83d\udd27 \ud83d\udc68\u200d\ud83d\udd27 \ud83d\udc69\u200d\ud83d\udd2c \ud83e\uddd1\u200d\ud83d\udd2c \ud83d\udc68\u200d\ud83d\udd2c \ud83d\udc69\u200d\ud83c\udfa8 \ud83e\uddd1\u200d\ud83c\udfa8 \ud83d\udc68\u200d\ud83c\udfa8 \ud83d\udc69\u200d\ud83d\ude92 \ud83e\uddd1\u200d\ud83d\ude92 \ud83d\udc68\u200d\ud83d\ude92 \ud83d\udc69\u200d\u2708\ufe0f \ud83e\uddd1\u200d\u2708\ufe0f \ud83d\udc68\u200d\u2708\ufe0f \ud83d\udc69\u200d\ud83d\ude80 \ud83e\uddd1\u200d\ud83d\ude80 \ud83d\udc68\u200d\ud83d\ude80 \ud83d\udc69\u200d\u2696\ufe0f \ud83e\uddd1\u200d\u2696\ufe0f \ud83d\udc68\u200d\u2696\ufe0f \ud83d\udc70\u200d\u2640\ufe0f \ud83d\udc70 \ud83d\udc70\u200d\u2642\ufe0f \ud83e\udd35\u200d\u2640\ufe0f \ud83e\udd35 \ud83e\udd35\u200d\u2642\ufe0f \ud83d\udc78 \ud83e\udd34 \ud83e\uddb8\u200d\u2640\ufe0f \ud83e\uddb8 \ud83e\uddb8\u200d\u2642\ufe0f \ud83e\uddb9\u200d\u2640\ufe0f \ud83e\uddb9 \ud83e\uddb9\u200d\u2642\ufe0f \ud83e\udd36 \ud83e\uddd1\u200d\ud83c\udf84 \ud83c\udf85 \ud83e\uddd9\u200d\u2640\ufe0f \ud83e\uddd9 \ud83e\uddd9\u200d\u2642\ufe0f \ud83e\udddd\u200d\u2640\ufe0f \ud83e\udddd \ud83e\udddd\u200d\u2642\ufe0f \ud83e\udddb\u200d\u2640\ufe0f \ud83e\udddb \ud83e\udddb\u200d\u2642\ufe0f \ud83e\udddf\u200d\u2640\ufe0f \ud83e\udddf \ud83e\udddf\u200d\u2642\ufe0f \ud83e\uddde\u200d\u2640\ufe0f \ud83e\uddde \ud83e\uddde\u200d\u2642\ufe0f \ud83e\udddc\u200d\u2640\ufe0f \ud83e\udddc \ud83e\udddc\u200d\u2642\ufe0f \ud83e\uddda\u200d\u2640\ufe0f \ud83e\uddda \ud83e\uddda\u200d\u2642\ufe0f \ud83d\udc7c \ud83e\udd30 \ud83e\udd31 \ud83d\udc69\u200d\ud83c\udf7c \ud83e\uddd1\u200d\ud83c\udf7c \ud83d\udc68\u200d\ud83c\udf7c \ud83d\ude47\u200d\u2640\ufe0f \ud83d\ude47 \ud83d\ude47\u200d\u2642\ufe0f \ud83d\udc81\u200d\u2640\ufe0f \ud83d\udc81 \ud83d\udc81\u200d\u2642\ufe0f \ud83d\ude45\u200d\u2640\ufe0f \ud83d\ude45 \ud83d\ude45\u200d\u2642\ufe0f \ud83d\ude46\u200d\u2640\ufe0f \ud83d\ude46 \ud83d\ude46\u200d\u2642\ufe0f \ud83d\ude4b\u200d\u2640\ufe0f \ud83d\ude4b \ud83d\ude4b\u200d\u2642\ufe0f \ud83e\uddcf\u200d\u2640\ufe0f \ud83e\uddcf \ud83e\uddcf\u200d\u2642\ufe0f \ud83e\udd26\u200d\u2640\ufe0f \ud83e\udd26 \ud83e\udd26\u200d\u2642\ufe0f \ud83e\udd37\u200d\u2640\ufe0f \ud83e\udd37 \ud83e\udd37\u200d\u2642\ufe0f \ud83d\ude4e\u200d\u2640\ufe0f \ud83d\ude4e \ud83d\ude4e\u200d\u2642\ufe0f \ud83d\ude4d\u200d\u2640\ufe0f \ud83d\ude4d \ud83d\ude4d\u200d\u2642\ufe0f \ud83d\udc87\u200d\u2640\ufe0f \ud83d\udc87 \ud83d\udc87\u200d\u2642\ufe0f \ud83d\udc86\u200d\u2640\ufe0f \ud83d\udc86 \ud83d\udc86\u200d\u2642\ufe0f \ud83e\uddd6\u200d\u2640\ufe0f \ud83e\uddd6 \ud83e\uddd6\u200d\u2642\ufe0f \ud83d\udc85 \ud83e\udd33 \ud83d\udc83 \ud83d\udd7a \ud83d\udc6f\u200d\u2640\ufe0f \ud83d\udc6f \ud83d\udc6f\u200d\u2642\ufe0f \ud83d\udd74\ufe0f \ud83d\udc69\u200d\ud83e\uddbd \ud83e\uddd1\u200d\ud83e\uddbd \ud83d\udc68\u200d\ud83e\uddbd \ud83d\udc69\u200d\ud83e\uddbc \ud83e\uddd1\u200d\ud83e\uddbc \ud83d\udc68\u200d\ud83e\uddbc \ud83d\udeb6\u200d\u2640\ufe0f \ud83d\udeb6 \ud83d\udeb6\u200d\u2642\ufe0f \ud83d\udc69\u200d\ud83e\uddaf \ud83e\uddd1\u200d\ud83e\uddaf \ud83d\udc68\u200d\ud83e\uddaf \ud83e\uddce\u200d\u2640\ufe0f \ud83e\uddce \ud83e\uddce\u200d\u2642\ufe0f \ud83c\udfc3\u200d\u2640\ufe0f \ud83c\udfc3 \ud83c\udfc3\u200d\u2642\ufe0f \ud83e\uddcd\u200d\u2640\ufe0f \ud83e\uddcd \ud83e\uddcd\u200d\u2642\ufe0f \ud83d\udc6d \ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1 \ud83d\udc6c \ud83d\udc6b \ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69 \ud83d\udc91 \ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68 \ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc68 \ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69 \ud83d\udc8f \ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68 \ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68 \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67 \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67 \ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66 \ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67 \ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66 \ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67 \ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67 \ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67 \ud83d\udc69\u200d\ud83d\udc66 \ud83d\udc69\u200d\ud83d\udc67 \ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66 \ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67 \ud83d\udc68\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc67 \ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66 \ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67 \ud83d\udde3\ufe0f \ud83d\udc64 \ud83d\udc65 \ud83e\udec2\",\r\n            \"\u0627\u0644\u062d\u064a\u0648\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u0637\u0628\u064a\u0639\u0629\": \"\ud83d\udc36 \ud83d\udc31 \ud83d\udc2d \ud83d\udc39 \ud83d\udc30 \ud83e\udd8a \ud83d\udc3b \ud83d\udc3c \ud83d\udc3b\u200d\u2744\ufe0f \ud83d\udc28 \ud83d\udc2f \ud83e\udd81 \ud83d\udc2e \ud83d\udc37 \ud83d\udc3d \ud83d\udc38 \ud83d\udc35 \ud83d\ude48 \ud83d\ude49 \ud83d\ude4a \ud83d\udc12 \ud83d\udc14 \ud83d\udc27 \ud83d\udc26 \ud83d\udc24 \ud83d\udc23 \ud83d\udc25 \ud83e\udd86 \ud83e\udd85 \ud83e\udd89 \ud83e\udd87 \ud83d\udc3a \ud83d\udc17 \ud83d\udc34 \ud83e\udd84 \ud83d\udc1d \ud83d\udc1b \ud83e\udd8b \ud83d\udc0c \ud83d\udc1e \ud83d\udc1c \ud83e\udd9f \ud83e\udd97 \ud83d\udd77\ufe0f \ud83d\udd78\ufe0f \ud83e\udd82 \ud83d\udc22 \ud83d\udc0d \ud83e\udd8e \ud83e\udd96 \ud83e\udd95 \ud83d\udc19 \ud83e\udd91 \ud83e\udd90 \ud83e\udd9e \ud83e\udd80 \ud83d\udc21 \ud83d\udc20 \ud83d\udc1f \ud83d\udc2c \ud83d\udc33 \ud83d\udc0b \ud83e\udd88 \ud83d\udc0a \ud83d\udc05 \ud83d\udc06 \ud83e\udd93 \ud83e\udd8d \ud83e\udda7 \ud83d\udc18 \ud83e\udd9b \ud83e\udd8f \ud83d\udc2a \ud83d\udc2b \ud83e\udd92 \ud83e\udd98 \ud83d\udc03 \ud83d\udc02 \ud83d\udc04 \ud83d\udc0e \ud83d\udc16 \ud83d\udc0f \ud83d\udc11 \ud83e\udd99 \ud83d\udc10 \ud83e\udd8c \ud83d\udc15 \ud83d\udc29 \ud83e\uddae \ud83d\udc15\u200d\ud83e\uddba \ud83d\udc08 \ud83d\udc08\u200d\u2b1b \ud83d\udc13 \ud83e\udd83 \ud83e\udda4 \ud83e\udd9a \ud83e\udd9c \ud83e\udda2 \ud83e\udda9 \ud83d\udd4a\ufe0f \ud83d\udc07 \ud83e\udd9d \ud83e\udda8 \ud83e\udda1 \ud83e\udda6 \ud83e\udda5 \ud83d\udc01 \ud83d\udc00 \ud83d\udc3f\ufe0f \ud83e\udd94 \ud83d\udc3e \ud83d\udc09 \ud83d\udc32 \ud83c\udf35 \ud83c\udf84 \ud83c\udf32 \ud83c\udf33 \ud83c\udf34 \ud83c\udf31 \ud83c\udf3f \u2618\ufe0f \ud83c\udf40 \ud83c\udf8d \ud83c\udf8b \ud83c\udf43 \ud83c\udf42 \ud83c\udf41 \ud83c\udf44 \ud83d\udc1a \ud83c\udf3e \ud83d\udc90 \ud83c\udf37 \ud83c\udf39 \ud83e\udd40 \ud83c\udf3a \ud83c\udf38 \ud83c\udf3c \ud83c\udf3b \ud83c\udf1e \ud83c\udf1d \ud83c\udf1b \ud83c\udf1c \ud83c\udf1a \ud83c\udf15 \ud83c\udf16 \ud83c\udf17 \ud83c\udf18 \ud83c\udf11 \ud83c\udf12 \ud83c\udf13 \ud83c\udf14 \ud83c\udf19 \ud83c\udf0e \ud83c\udf0d \ud83c\udf0f \ud83e\ude90 \ud83d\udcab \u2b50 \ud83c\udf1f \u2728 \u26a1 \u2604\ufe0f \ud83d\udd25 \ud83d\udca5 \ud83d\udca8 \ud83c\udf0a \ud83d\udca7 \ud83d\udca6 \u2614 \u2602\ufe0f \ud83c\udf08\",\r\n            \"\u0627\u0644\u0637\u0639\u0627\u0645 \u0648\u0627\u0644\u0634\u0631\u0627\u0628\": \"\ud83c\udf4f \ud83c\udf4e \ud83c\udf50 \ud83c\udf4a \ud83c\udf4b \ud83c\udf4c \ud83c\udf49 \ud83c\udf47 \ud83c\udf53 \ud83c\udf48 \ud83c\udf52 \ud83c\udf51 \ud83e\udd6d \ud83c\udf4d \ud83e\udd65 \ud83e\udd5d \ud83c\udf45 \ud83c\udf46 \ud83e\udd51 \ud83e\udd66 \ud83e\udd6c \ud83e\udd52 \ud83c\udf36\ufe0f \ud83c\udf3d \ud83e\udd55 \ud83e\uddc4 \ud83e\uddc5 \ud83e\udd54 \ud83c\udf60 \ud83e\udd50 \ud83e\udd6f \ud83c\udf5e \ud83e\udd56 \ud83e\udd68 \ud83e\uddc0 \ud83e\udd5a \ud83c\udf73 \ud83e\uddc8 \ud83e\udd5e \ud83e\uddc7 \ud83e\udd53 \ud83e\udd69 \ud83c\udf57 \ud83c\udf56 \ud83e\uddb4 \ud83c\udf2d \ud83c\udf54 \ud83c\udf5f \ud83c\udf55 \ud83e\udd6a \ud83e\udd59 \ud83e\uddc6 \ud83c\udf2e \ud83c\udf2f \ud83e\udd57 \ud83e\udd58 \ud83e\udd6b \ud83c\udf5d \ud83c\udf5c \ud83c\udf72 \ud83c\udf5b \ud83c\udf63 \ud83c\udf71 \ud83e\udd5f \ud83c\udf64 \ud83c\udf59 \ud83c\udf5a \ud83c\udf58 \ud83c\udf65 \ud83e\udd60 \ud83e\udd6e \ud83c\udf62 \ud83c\udf61 \ud83c\udf67 \ud83c\udf68 \ud83c\udf66 \ud83e\udd67 \ud83e\uddc1 \ud83c\udf70 \ud83c\udf82 \ud83c\udf6e \ud83c\udf6d \ud83c\udf6c \ud83c\udf6b \ud83c\udf7f \ud83c\udf69 \ud83c\udf6a \ud83c\udf30 \ud83e\udd5c \ud83c\udf6f \ud83e\udd5b \ud83c\udf7c \u2615 \ud83c\udf75 \ud83e\uddc3 \ud83e\udd64 \ud83c\udf76 \ud83c\udf7a \ud83c\udf7b \ud83e\udd42 \ud83c\udf77 \ud83e\udd43 \ud83c\udf78 \ud83c\udf79 \ud83e\uddc9 \ud83e\uddca\",\r\n            \"\u0627\u0644\u0633\u0641\u0631 \u0648\u0627\u0644\u0623\u0645\u0627\u0643\u0646\": \"\ud83d\ude97 \ud83d\ude95 \ud83d\ude99 \ud83d\ude8c \ud83d\ude8e \ud83c\udfce\ufe0f \ud83d\ude93 \ud83d\ude91 \ud83d\ude92 \ud83d\ude90 \ud83d\ude9a \ud83d\ude9b \ud83d\ude9c \ud83e\uddaf \ud83e\uddbd \ud83e\uddbc \ud83d\udef4 \ud83d\udeb2 \ud83d\udef5 \ud83c\udfcd\ufe0f \ud83d\udefa \ud83d\udea8 \ud83d\ude94 \ud83d\ude8d \ud83d\ude98 \ud83d\ude96 \ud83d\udea1 \ud83d\udea0 \ud83d\ude9f \ud83d\ude83 \ud83d\ude8b \ud83d\ude9e \ud83d\ude9d \ud83d\ude84 \ud83d\ude85 \ud83d\ude88 \ud83d\ude82 \ud83d\ude86 \ud83d\ude87 \ud83d\ude8a \ud83d\ude89 \u2708\ufe0f \ud83d\udeeb \ud83d\udeec \ud83d\udee9\ufe0f \ud83d\udcba \ud83d\udef0\ufe0f \ud83d\ude80 \ud83d\udef8 \ud83d\ude81 \ud83d\udef6 \u26f5 \ud83d\udea4 \ud83d\udee5\ufe0f \ud83d\udef3\ufe0f \u26f4\ufe0f \ud83d\udea2 \u2693 \u26fd \ud83d\udea7 \ud83d\udea6 \ud83d\udea5 \ud83d\uded1 \ud83c\udfc1 \ud83c\udf8c \ud83c\udff3\ufe0f \ud83c\udff4 \ud83c\udfc1 \ud83c\udff3\ufe0f\u200d\ud83c\udf08 \ud83c\udff3\ufe0f\u200d\u26a7\ufe0f \ud83c\udff4\u200d\u2620\ufe0f \ud83d\uddff \ud83d\uddfd \ud83d\uddfc \ud83c\udff0 \ud83c\udfef \ud83c\udfdf\ufe0f \ud83c\udfa1 \ud83c\udfa2 \ud83c\udfa0 \u26f2 \u26f1\ufe0f \ud83c\udfd6\ufe0f \ud83c\udfdd\ufe0f \ud83c\udfdc\ufe0f \ud83c\udf0b \u26f0\ufe0f \ud83c\udfd4\ufe0f \ud83d\uddfb \ud83c\udfd5\ufe0f \u26fa \ud83d\uded6 \ud83c\udfe0 \ud83c\udfe1 \ud83c\udfd8\ufe0f \ud83c\udfda\ufe0f \ud83c\udfd7\ufe0f \ud83c\udfed \ud83c\udfe2 \ud83c\udfec \ud83c\udfe3 \ud83c\udfe4 \ud83c\udfe5 \ud83c\udfe6 \ud83c\udfe8 \ud83c\udfea \ud83c\udfeb \ud83c\udfe9 \ud83d\udc92 \ud83c\udfdb\ufe0f \u26ea \ud83d\udd4c \ud83d\udd4d \ud83d\uded5 \ud83d\udd4b \u26e9\ufe0f \ud83d\udee4\ufe0f \ud83d\udee3\ufe0f \ud83d\uddfe \ud83d\uddfa\ufe0f \ud83e\udded\",\r\n            \"\u0627\u0644\u0623\u0646\u0634\u0637\u0629\": \"\u26bd \ud83c\udfc0 \ud83c\udfc8 \u26be \ud83e\udd4e \ud83c\udfbe \ud83c\udfd0 \ud83c\udfc9 \ud83e\udd4f \ud83c\udfb1 \ud83e\ude80 \ud83c\udfd3 \ud83c\udff8 \ud83c\udfd2 \ud83c\udfd1 \ud83e\udd4d \ud83c\udfcf \ud83e\udd45 \u26f3 \ud83e\ude81 \ud83c\udff9 \ud83c\udfa3 \ud83e\udd3f \ud83e\udd4a \ud83e\udd4b \ud83c\udfbd \ud83d\udef9 \ud83d\udef7 \u26f8\ufe0f \ud83e\udd4c \ud83c\udfbf \u26f7\ufe0f \ud83c\udfc2 \ud83c\udfcb\ufe0f\u200d\u2640\ufe0f \ud83c\udfcb\ufe0f \ud83c\udfcb\ufe0f\u200d\u2642\ufe0f \ud83e\udd3c\u200d\u2640\ufe0f \ud83e\udd3c \ud83e\udd3c\u200d\u2642\ufe0f \ud83e\udd38\u200d\u2640\ufe0f \ud83e\udd38 \ud83e\udd38\u200d\u2642\ufe0f \u26f9\ufe0f\u200d\u2640\ufe0f \u26f9\ufe0f \u26f9\ufe0f\u200d\u2642\ufe0f \ud83e\udd3a \ud83e\udd3e\u200d\u2640\ufe0f \ud83e\udd3e \ud83e\udd3e\u200d\u2642\ufe0f \ud83c\udfcc\ufe0f\u200d\u2640\ufe0f \ud83c\udfcc\ufe0f \ud83c\udfcc\ufe0f\u200d\u2642\ufe0f \ud83c\udfc7 \ud83e\uddd8\u200d\u2640\ufe0f \ud83e\uddd8 \ud83e\uddd8\u200d\u2642\ufe0f \ud83c\udfc4\u200d\u2640\ufe0f \ud83c\udfc4 \ud83c\udfc4\u200d\u2642\ufe0f \ud83c\udfca\u200d\u2640\ufe0f \ud83c\udfca \ud83c\udfca\u200d\u2642\ufe0f \ud83e\udd3d\u200d\u2640\ufe0f \ud83e\udd3d \ud83e\udd3d\u200d\u2642\ufe0f \ud83d\udea3\u200d\u2640\ufe0f \ud83d\udea3 \ud83d\udea3\u200d\u2642\ufe0f \ud83e\uddd7\u200d\u2640\ufe0f \ud83e\uddd7 \ud83e\uddd7\u200d\u2642\ufe0f \ud83d\udeb5\u200d\u2640\ufe0f \ud83d\udeb5 \ud83d\udeb5\u200d\u2642\ufe0f \ud83d\udeb4\u200d\u2640\ufe0f \ud83d\udeb4 \ud83d\udeb4\u200d\u2642\ufe0f \ud83c\udfc6 \ud83e\udd47 \ud83e\udd48 \ud83e\udd49 \ud83c\udfc5 \ud83c\udf96\ufe0f \ud83c\udff5\ufe0f \ud83c\udf97\ufe0f \ud83c\udfab \ud83c\udf9f\ufe0f \ud83c\udfaa \ud83e\udd39\u200d\u2640\ufe0f \ud83e\udd39 \ud83e\udd39\u200d\u2642\ufe0f \ud83c\udfad \ud83e\ude70 \ud83c\udfa8 \ud83c\udfac \ud83c\udfa4 \ud83c\udfa7 \ud83c\udfbc \ud83c\udfb9 \ud83e\udd41 \ud83c\udfb7 \ud83c\udfba \ud83c\udfb8 \ud83e\ude95 \ud83c\udfbb \ud83c\udfb2 \u265f\ufe0f \ud83c\udfaf \ud83c\udfb3 \ud83c\udfae \ud83c\udfb0 \ud83e\udde9\",\r\n            \"\u0627\u0644\u0623\u0634\u064a\u0627\u0621\": \"\u231a \ud83d\udcf1 \ud83d\udcf2 \ud83d\udcbb \u2328\ufe0f \ud83d\udda5\ufe0f \ud83d\udda8\ufe0f \ud83d\uddb1\ufe0f \ud83d\uddb2\ufe0f \ud83d\udd79\ufe0f \ud83d\udddc\ufe0f \ud83d\udcbe \ud83d\udcbf \ud83d\udcc0 \ud83d\udcfc \ud83d\udcf7 \ud83d\udcf8 \ud83d\udcf9 \ud83c\udfa5 \ud83d\udcfd\ufe0f \ud83c\udf9e\ufe0f \ud83d\udcde \u260e\ufe0f \ud83d\udcdf \ud83d\udce0 \ud83d\udcfa \ud83d\udcfb \ud83c\udf99\ufe0f \ud83c\udf9a\ufe0f \ud83c\udf9b\ufe0f \ud83e\udded \u23f1\ufe0f \u23f2\ufe0f \u23f0 \ud83d\udd70\ufe0f \u231b \u23f3 \ud83d\udce1 \ud83d\udd0b \ud83d\udd0c \ud83d\udca1 \ud83d\udd26 \ud83d\udd6f\ufe0f \ud83e\ude94 \ud83e\uddef \ud83d\udee2\ufe0f \ud83d\udcb8 \ud83d\udcb5 \ud83d\udcb4 \ud83d\udcb6 \ud83d\udcb7 \ud83d\udcb0 \ud83d\udcb3 \ud83d\udc8e \u2696\ufe0f \ud83e\ude9c \ud83e\uddf0 \ud83e\ude9b \ud83d\udd27 \ud83d\udd28 \u2692\ufe0f \ud83d\udee0\ufe0f \u26cf\ufe0f \ud83d\udd29 \u2699\ufe0f \ud83e\uddf1 \u26d3\ufe0f \ud83e\uddf2 \ud83d\udd2b \ud83d\udca3 \ud83e\udde8 \ud83e\ude93 \ud83d\udd2a \ud83d\udde1\ufe0f \ud83d\udee1\ufe0f \ud83d\udeac \u26b0\ufe0f \ud83e\udea6 \u26b1\ufe0f \ud83c\udffa \ud83d\udd2e \ud83d\udcff \ud83e\uddff \ud83d\udc88 \u2697\ufe0f \ud83d\udd2d \ud83d\udd2c \ud83d\udd73\ufe0f \ud83e\ude79 \ud83e\ude7a \ud83d\udc8a \ud83d\udc89 \ud83e\ude78 \ud83e\uddec \ud83e\udda0 \ud83e\uddeb \ud83e\uddea \ud83c\udf21\ufe0f \ud83e\uddf9 \ud83e\uddfa \ud83e\uddfb \ud83d\udebd \ud83d\udeb0 \ud83d\udebf \ud83d\udec1 \ud83d\udec0 \ud83e\uddfc \ud83e\udea5 \ud83e\ude92 \ud83e\uddf4 \ud83e\uddfd \ud83d\udd11 \ud83d\udddd\ufe0f \ud83d\udecb\ufe0f \ud83e\ude91 \ud83d\udecc \ud83d\udecf\ufe0f \ud83d\udeaa \ud83e\ude9e \ud83e\ude9f \ud83d\uddbc\ufe0f \ud83d\udecd\ufe0f \ud83d\uded2 \ud83c\udf81 \ud83c\udf88 \ud83c\udf8f \ud83c\udf80 \ud83c\udf8a \ud83c\udf89 \ud83c\udf8e \ud83c\udfee \ud83c\udf90 \ud83e\udde7 \u2709\ufe0f \ud83d\udce9 \ud83d\udce8 \ud83d\udce7 \ud83d\udc8c \ud83d\udce5 \ud83d\udce4 \ud83d\udce6 \ud83c\udff7\ufe0f \ud83d\udcea \ud83d\udceb \ud83d\udcec \ud83d\udced \ud83d\udcee \ud83d\udcef \ud83d\udcdc \ud83d\udcc3 \ud83d\udcc4 \ud83d\udcd1 \ud83d\udcca \ud83d\udcc8 \ud83d\udcc9 \ud83d\uddd2\ufe0f \ud83d\uddd3\ufe0f \ud83d\udcc6 \ud83d\udcc5 \ud83d\uddd1\ufe0f \ud83d\udcc7 \ud83d\uddc3\ufe0f \ud83d\uddf3\ufe0f \ud83d\uddc4\ufe0f \ud83d\udccb \ud83d\udcc1 \ud83d\udcc2 \ud83d\uddc2\ufe0f \ud83d\uddde\ufe0f \ud83d\udcf0 \ud83d\udcd3 \ud83d\udcd4 \ud83d\udcd2 \ud83d\udcd5 \ud83d\udcd7 \ud83d\udcd8 \ud83d\udcd9 \ud83d\udcda \ud83d\udcd6 \ud83d\udd16 \ud83e\uddf7 \ud83d\udd17 \ud83d\udcce \ud83d\udd87\ufe0f \ud83d\udcd0 \ud83d\udccf \ud83e\uddee \ud83d\udccc \ud83d\udccd \u2702\ufe0f \ud83d\udd8a\ufe0f \ud83d\udd8b\ufe0f \u2712\ufe0f \ud83d\udd8c\ufe0f \ud83d\udd8d\ufe0f \ud83d\udcdd \u270f\ufe0f\",\r\n            \"\u0627\u0644\u0631\u0645\u0648\u0632\": \"\u2764\ufe0f \ud83e\udde1 \ud83d\udc9b \ud83d\udc9a \ud83d\udc99 \ud83d\udc9c \ud83d\udda4 \ud83e\udd0d \ud83e\udd0e \ud83d\udc94 \u2763\ufe0f \ud83d\udc95 \ud83d\udc9e \ud83d\udc93 \ud83d\udc97 \ud83d\udc96 \ud83d\udc98 \ud83d\udc9d \ud83d\udc9f \u262e\ufe0f \u271d\ufe0f \u262a\ufe0f \ud83d\udd49\ufe0f \u2638\ufe0f \u2721\ufe0f \ud83d\udd2f \ud83d\udd4e \u262f\ufe0f \u2626\ufe0f \ud83d\uded0 \u26ce \u2648 \u2649 \u264a \u264b \u264c \u264d \u264e \u264f \u2650 \u2651 \u2652 \u2653 \ud83c\udd94 \u269b\ufe0f \ud83c\ude51 \u2622\ufe0f \u2623\ufe0f \ud83d\udcf4 \ud83d\udcf3 \ud83c\ude36 \ud83c\ude1a \ud83c\ude38 \ud83c\ude3a \ud83c\ude37\ufe0f \u2734\ufe0f \ud83c\udd9a \ud83d\udcae \ud83c\ude50 \u3299\ufe0f \u3297\ufe0f \ud83c\ude34 \ud83c\ude35 \ud83c\ude39 \ud83c\ude32 \ud83c\udd70\ufe0f \ud83c\udd71\ufe0f \ud83c\udd8e \ud83c\udd91 \ud83c\udd7e\ufe0f \ud83c\udd98 \u274c \u2b55 \ud83d\uded1 \u26d4 \ud83d\udcdb \ud83d\udeab \ud83d\udcaf \ud83d\udca2 \u2668\ufe0f \ud83d\udeb7 \ud83d\udeaf \ud83d\udeb3 \ud83d\udeb1 \ud83d\udd1e \ud83d\udcf5 \ud83d\udead \u2728 \u2747\ufe0f \u2733\ufe0f \u274e \u2705 \ud83d\udd30 \ud83d\udd31 \u269c\ufe0f \u303d\ufe0f \u26a0\ufe0f \ud83d\udeb8 \ud83d\udd06 \ud83d\udd05 \ud83c\ude2f \ud83d\udcb9 \ud83c\udf00 \u27bf \ud83c\udf10 \u267e\ufe0f \u24dc\ufe0f \ud83c\udfe7 \ud83c\ude02\ufe0f \ud83d\udec2 \ud83d\udec3 \ud83d\udec4 \ud83d\udec5 \u00a9\ufe0f \u00ae\ufe0f \u2122\ufe0f #\ufe0f\u20e3 *\ufe0f\u20e3 0\ufe0f\u20e3 1\ufe0f\u20e3 2\ufe0f\u20e3 3\ufe0f\u20e3 4\ufe0f\u20e3 5\ufe0f\u20e3 6\ufe0f\u20e3 7\ufe0f\u20e3 8\ufe0f\u20e3 9\ufe0f\u20e3 \ud83d\udd1f \ud83d\udd22 \ud83d\udd23 \u2b06\ufe0f \u2197\ufe0f \u27a1\ufe0f \u2198\ufe0f \u2b07\ufe0f \u2199\ufe0f \u2b05\ufe0f \u2196\ufe0f \u2195\ufe0f \u2194\ufe0f \u21a9\ufe0f \u21aa\ufe0f \u2934\ufe0f \u2935\ufe0f \ud83d\udd03 \ud83d\udd04 \ud83d\udd19 \ud83d\udd1a \ud83d\udd1b \ud83d\udd1c \ud83d\udd1d \ud83d\uded0 \u269b\ufe0f \ud83d\udd49\ufe0f \u2721\ufe0f \u2638\ufe0f \u262f\ufe0f \u271d\ufe0f \u2626\ufe0f \u262a\ufe0f \u262e\ufe0f \ud83d\udd4e \ud83d\udd2f \u2648\ufe0f \u2649\ufe0f \u264a\ufe0f \u264b\ufe0f \u264c\ufe0f \u264d\ufe0f \u264e\ufe0f \u264f\ufe0f \u2650\ufe0f \u2651\ufe0f \u2652\ufe0f \u2653\ufe0f \u26ce \ud83d\udd00 \ud83d\udd01 \ud83d\udd02 \u25b6\ufe0f \u23e9 \u23ed\ufe0f \u23ef\ufe0f \u25c0\ufe0f \u23ea \u23ee\ufe0f \ud83d\udd3c \u23eb \ud83d\udd3d \u23ec \u23f8\ufe0f \u23f9\ufe0f \u23fa\ufe0f \u23cf\ufe0f \ud83c\udfa6 \ud83d\udcf6 \ud83d\udcf3 \ud83d\udcf4 \u2640\ufe0f \u2642\ufe0f \u26a7\ufe0f \u2716\ufe0f \u2795 \u2796 \u2797 \u267e\ufe0f \u203c\ufe0f \u2049\ufe0f \u2753 \u2754 \u2755 \u2757 \u3030\ufe0f \ud83d\udcb1 \ud83d\udcb2 \u2695\ufe0f \u267b\ufe0f \u269c\ufe0f \ud83d\udd31 \ud83d\udcdb \ud83d\udd30 \u2b55 \u2705 \u2611\ufe0f \u2714\ufe0f \u274c \u274e \u27b0 \u27bf \u303d\ufe0f \u2733\ufe0f \u2734\ufe0f \u2747\ufe0f \u26ab \u26aa \ud83d\udfe4 \ud83d\udfe3 \ud83d\udd35 \ud83d\udfe2 \ud83d\udfe1 \ud83d\udfe0 \ud83d\udd34 \ud83d\udfe5 \ud83d\udfe7 \ud83d\udfe8 \ud83d\udfe9 \ud83d\udfe6 \ud83d\udfea \ud83d\udfeb \u2b1b \u2b1c \u25fc\ufe0f \u25fb\ufe0f \u25fe \u25fd \u25aa\ufe0f \u25ab\ufe0f \ud83d\udd36 \ud83d\udd37 \ud83d\udd38 \ud83d\udd39 \ud83d\udd3a \ud83d\udd3b \ud83d\udca0 \ud83d\udd18 \ud83d\udd33 \ud83d\udd32\",\r\n        };\r\n\r\n\r\n        \/**\r\n         * Executes a document command for text formatting (except font size).\r\n         * @param {string} command - The command to execute.\r\n         * @param {string|null} value - Optional value for the command.\r\n         *\/\r\n        function formatDoc(command, value = null) {\r\n            if (_isDisabled) return; \/\/ Check if editor is disabled\r\n            if (welcomeMessageActive && editor.contains(welcomeMessageElement)) return;\r\n\r\n            \/\/ Restore selection if needed\r\n            if (savedSelection) {\r\n                const sel = window.getSelection();\r\n                if (sel.rangeCount > 0) {\r\n                    try { sel.removeAllRanges(); sel.addRange(savedSelection); }\r\n                    catch (e) { console.warn(\"Error restoring selection:\", e); }\r\n                }\r\n                savedSelection = null;\r\n            }\r\n\r\n            document.execCommand(command, false, value);\r\n            editor.focus();\r\n            updateCounts();\r\n        }\r\n\r\n        \/**\r\n         * Sets the font size for the entire editor.\r\n         * @param {string} sizeValue - The font size value (e.g., '16px').\r\n         *\/\r\n        function setEditorFontSize(sizeValue) {\r\n            if (_isDisabled) return;\r\n            if (sizeValue) {\r\n                editor.style.fontSize = sizeValue;\r\n                editor.style.backgroundSize = `100% calc(1em * 1.5)`;\r\n                fontSizeSelect.value = sizeValue;\r\n            }\r\n        }\r\n\r\n        \/** Resets editor font size to default *\/\r\n        function resetEditorFontSize() {\r\n            if (_isDisabled) return;\r\n            setEditorFontSize(defaultFontSize);\r\n        }\r\n\r\n        \/**\r\n         * Changes the text alignment using execCommand.\r\n         * @param {string} alignValue - The alignment command.\r\n         *\/\r\n        function changeAlignment(alignValue) {\r\n            if (_isDisabled) return;\r\n            if (alignValue) {\r\n                formatDoc(alignValue);\r\n                document.querySelectorAll('.align-button').forEach(btn => btn.classList.remove('active'));\r\n                const activeBtn = document.querySelector(`.align-button[onclick=\"changeAlignment('${alignValue}')\"]`);\r\n                if(activeBtn) activeBtn.classList.add('active');\r\n            }\r\n        }\r\n\r\n         \/**\r\n          * Changes the text color or background color using execCommand.\r\n          * @param {string} command - 'foreColor' or 'backColor'.\r\n          * @param {string} colorValue - The hex color value.\r\n          *\/\r\n        function changeColor(command, colorValue) {\r\n            if (_isDisabled) return;\r\n            formatDoc(command, colorValue);\r\n            if (command === 'foreColor') fontColorPicker.value = colorValue;\r\n            if (command === 'backColor') highlightColorPicker.value = colorValue;\r\n        }\r\n\r\n        \/**\r\n         * Resets font or background color to default.\r\n         * @param {string} command - 'foreColor' or 'backColor'.\r\n         *\/\r\n        function resetColor(command) {\r\n            if (_isDisabled) return;\r\n            let defaultValue;\r\n            if (command === 'foreColor') {\r\n                defaultValue = defaultFontColor;\r\n                fontColorPicker.value = defaultValue;\r\n                formatDoc(command, defaultValue);\r\n            } else if (command === 'backColor') {\r\n                \/\/ For background, we need to apply a color that execCommand understands as 'remove highlight'\r\n                \/\/ Often, applying white or transparent works, but behavior can vary.\r\n                \/\/ Let's try applying the default editor background color directly if possible,\r\n                \/\/ or fall back to a standard like white.\r\n                defaultValue = defaultHighlightColorResetValue; \/\/ Use white to clear highlight\r\n                highlightColorPicker.value = defaultHighlightColor; \/\/ Reset picker visually\r\n                formatDoc('backColor', defaultValue);\r\n                \/\/ Optional: Re-apply default background if needed, but execCommand might not support it well.\r\n                \/\/ editor.style.backgroundColor = defaultHighlightColor;\r\n            }\r\n        }\r\n\r\n\r\n        \/\/ --- Save and Restore Selection ---\r\n        \/\/ Save selection when color pickers are focused or clicked\r\n        fontColorPicker.addEventListener('focus', saveCurrentSelection);\r\n        highlightColorPicker.addEventListener('focus', saveCurrentSelection);\r\n        fontColorPicker.addEventListener('click', saveCurrentSelection);\r\n        highlightColorPicker.addEventListener('click', saveCurrentSelection);\r\n\r\n        function saveCurrentSelection() {\r\n            if (_isDisabled) return;\r\n            const sel = window.getSelection();\r\n            if (sel.rangeCount > 0) {\r\n                try { savedSelection = sel.getRangeAt(0).cloneRange(); }\r\n                catch (e) { console.warn(\"Could not clone range:\", e); savedSelection = null; }\r\n            } else {\r\n                savedSelection = null;\r\n            }\r\n        }\r\n        \/\/ --- End Selection Handling ---\r\n\r\n\r\n        \/**\r\n         * Sets the text direction (RTL or LTR).\r\n         * @param {'rtl' | 'ltr'} direction - The desired text direction.\r\n         *\/\r\n        function setTextDirection(direction) {\r\n            if (_isDisabled) return;\r\n            editor.dir = direction;\r\n            if (direction === 'rtl') {\r\n                rtlBtn.classList.add('active');\r\n                ltrBtn.classList.remove('active');\r\n            } else {\r\n                ltrBtn.classList.add('active');\r\n                rtlBtn.classList.remove('active');\r\n            }\r\n            editor.focus();\r\n        }\r\n\r\n        \/**\r\n         * Updates the word and character counts.\r\n         *\/\r\n        function updateCounts() {\r\n            if (_isDisabled) { \/\/ Don't update if disabled\r\n                 wordCountSpan.innerText = `\u0627\u0644\u0643\u0644\u0645\u0627\u062a: --`;\r\n                 charCountSpan.innerText = `\u0627\u0644\u062d\u0631\u0648\u0641: --`;\r\n                 return;\r\n            }\r\n            let text = '';\r\n            if (!welcomeMessageActive || !editor.contains(welcomeMessageElement)) {\r\n                 text = editor.innerText || editor.textContent;\r\n            }\r\n            const charCount = text.trim().length;\r\n            \/\/ Improved word count to handle multiple spaces and newlines better\r\n            const words = text.trim().split(\/[\\s\\n\\r]+\/).filter(Boolean);\r\n            const wordCount = words.length;\r\n            wordCountSpan.innerText = `\u0627\u0644\u0643\u0644\u0645\u0627\u062a: ${wordCount}`;\r\n            charCountSpan.innerText = `\u0627\u0644\u062d\u0631\u0648\u0641: ${charCount}`;\r\n        }\r\n\r\n        \/\/ --- Event Listeners ---\r\n\r\n        editor.addEventListener('input', () => {\r\n             if (_isDisabled) return;\r\n             \/\/ Close emoji picker if open and user starts typing\r\n             if (emojiPicker.classList.contains('visible')) { toggleEmojiPicker(); }\r\n             \/\/ Handle removing welcome message\r\n             if (welcomeMessageActive && editor.contains(welcomeMessageElement)) {\r\n                 \/\/ Check if content is *only* the welcome message before clearing\r\n                 if (editor.innerText.trim() === welcomeMessageElement.textContent.trim()) {\r\n                     \/\/ Clear and set up for typing\r\n                     editor.innerHTML = '<p><br>'; \/\/ Start with a paragraph break\r\n                     moveCursorToStart(editor);\r\n                 } else {\r\n                     \/\/ User edited the welcome message or added content, just remove the element\r\n                     welcomeMessageElement.remove();\r\n                 }\r\n                 welcomeMessageActive = false; \/\/ Welcome message is no longer the primary content\r\n             } else if (!welcomeMessageActive && editor.innerText.trim() === '') {\r\n                 \/\/ If editor becomes empty after having content, ensure it has a paragraph tag\r\n                 editor.innerHTML = '<p><br>';\r\n                 moveCursorToStart(editor);\r\n             }\r\n             updateCounts();\r\n        });\r\n\r\n        \/\/ Close emoji picker if user clicks outside of it (e.g., back in the editor)\r\n        editor.addEventListener('click', () => {\r\n            if (_isDisabled) return;\r\n            if (emojiPicker.classList.contains('visible')) {\r\n                toggleEmojiPicker();\r\n            }\r\n        });\r\n\r\n        \/\/ Handle initial focus - remove welcome message cleanly\r\n        editor.addEventListener('focus', () => {\r\n            if (_isDisabled) { editor.blur(); return; } \/\/ Prevent focus if disabled\r\n            if (welcomeMessageActive && editor.contains(welcomeMessageElement)) {\r\n                 \/\/ If the content is still *just* the welcome message on focus\r\n                 if (editor.innerText.trim() === welcomeMessageElement.textContent.trim()) {\r\n                     editor.innerHTML = '<p><br>'; \/\/ Clear and prepare for typing\r\n                     welcomeMessageActive = false;\r\n                     updateCounts();\r\n                     moveCursorToStart(editor); \/\/ Place cursor at the start\r\n                 }\r\n            }\r\n             \/\/ Close emoji picker if open when editor gains focus\r\n             if (emojiPicker.classList.contains('visible')) {\r\n                 toggleEmojiPicker();\r\n             }\r\n        }, { once: false }); \/\/ Use once: false to allow this check every time focus happens\r\n\r\n        \/** Helper function to move cursor to the start of an element *\/\r\n        function moveCursorToStart(element) {\r\n            if (_isDisabled) return;\r\n            const range = document.createRange();\r\n            const sel = window.getSelection();\r\n            \/\/ Target the first child node if it exists, otherwise the element itself\r\n            const targetNode = element.firstChild || element;\r\n            \/\/ Set offset to 0 for text nodes or element nodes with children\r\n            let offset = 0;\r\n            if (targetNode) {\r\n                 offset = (targetNode.nodeType === Node.TEXT_NODE || targetNode.hasChildNodes()) ? 0 : (targetNode.length || 0);\r\n            }\r\n            try {\r\n                 range.setStart(targetNode || element, offset);\r\n                 range.collapse(true); \/\/ Collapse the range to the start point\r\n                 sel.removeAllRanges(); \/\/ Remove any existing selection\r\n                 sel.addRange(range); \/\/ Add the new collapsed range\r\n            } catch (e) {\r\n                 console.warn(\"Could not set cursor position:\", e);\r\n                 \/\/ Fallback: just focus the element if setting range fails\r\n                 element.focus();\r\n            }\r\n        }\r\n\r\n\r\n        \/** Populates the emoji picker with categories and emojis. *\/\r\n        function populateEmojiPicker() {\r\n            if (_isDisabled) return;\r\n            emojiPicker.innerHTML = ''; \/\/ Clear previous content or loading message\r\n            for (const category in emojiCategories) {\r\n                const categoryDiv = document.createElement('div');\r\n                categoryDiv.className = 'emoji-category';\r\n\r\n                const title = document.createElement('div');\r\n                title.className = 'emoji-category-title';\r\n                title.textContent = category;\r\n                categoryDiv.appendChild(title);\r\n\r\n                const list = document.createElement('div');\r\n                list.className = 'emoji-list';\r\n\r\n                const emojis = emojiCategories[category].split(' ');\r\n                emojis.forEach(emoji => {\r\n                    if (emoji.trim() === '') return; \/\/ Skip empty strings resulting from split\r\n                    const span = document.createElement('span');\r\n                    span.className = 'emoji-item';\r\n                    span.textContent = emoji;\r\n                    span.title = emoji; \/\/ Tooltip for the emoji\r\n                    \/\/ Use onclick for simplicity here, consider addEventListener for more complex scenarios\r\n                    span.onclick = (event) => {\r\n                        event.stopPropagation(); \/\/ Prevent click from bubbling up to editor\/body\r\n                        insertEmoji(emoji);\r\n                    };\r\n                    list.appendChild(span);\r\n                });\r\n\r\n                categoryDiv.appendChild(list);\r\n                emojiPicker.appendChild(categoryDiv);\r\n            }\r\n        }\r\n\r\n\r\n        \/** Inserts the selected emoji into the editor at the current cursor position. *\/\r\n        function insertEmoji(emoji) {\r\n             if (_isDisabled) return;\r\n\r\n             \/\/ Ensure welcome message is handled if active\r\n             if (welcomeMessageActive && editor.contains(welcomeMessageElement)) {\r\n                 if (editor.innerText.trim() === welcomeMessageElement.textContent.trim()) {\r\n                     editor.innerHTML = '<p><br>'; \/\/ Clear welcome message\r\n                     moveCursorToStart(editor); \/\/ Position cursor\r\n                     welcomeMessageActive = false;\r\n                 } else {\r\n                     \/\/ Content exists besides welcome message, just remove the welcome element\r\n                     welcomeMessageElement.remove();\r\n                     welcomeMessageActive = false;\r\n                 }\r\n             }\r\n\r\n             editor.focus(); \/\/ Ensure editor has focus\r\n\r\n             \/\/ Restore saved selection if it exists (e.g., from clicking the emoji button)\r\n             if (savedSelection) {\r\n                 const sel = window.getSelection();\r\n                 if (sel.rangeCount > 0) {\r\n                     try {\r\n                         sel.removeAllRanges();\r\n                         sel.addRange(savedSelection);\r\n                     } catch (e) {\r\n                         console.warn(\"Error restoring selection for emoji:\", e);\r\n                         \/\/ Fallback: move cursor to end if restoring fails\r\n                         moveCursorToEnd(editor);\r\n                     }\r\n                 }\r\n                 savedSelection = null; \/\/ Clear saved selection after use\r\n             } else {\r\n                 \/\/ If no selection was saved, ensure cursor is reasonably placed (e.g., end)\r\n                 \/\/ This might happen if focus was lost and regained without saving selection.\r\n                 \/\/ moveCursorToEnd(editor); \/\/ Or keep current position if focus was already there\r\n             }\r\n\r\n             \/\/ Insert the emoji using execCommand\r\n             document.execCommand('insertText', false, emoji);\r\n\r\n             \/\/ Update counts after insertion\r\n             updateCounts();\r\n\r\n             \/\/ Optional: Keep the emoji picker open or close it\r\n             \/\/ toggleEmojiPicker(); \/\/ Uncomment to close after inserting an emoji\r\n        }\r\n\r\n        \/** Helper function to move cursor to the end *\/\r\n        function moveCursorToEnd(element) {\r\n             if (_isDisabled) return;\r\n             const range = document.createRange();\r\n             const sel = window.getSelection();\r\n             range.selectNodeContents(element); \/\/ Select all content\r\n             range.collapse(false); \/\/ Collapse to the end\r\n             sel.removeAllRanges();\r\n             sel.addRange(range);\r\n        }\r\n\r\n        \/** Toggles the visibility of the emoji picker. *\/\r\n        function toggleEmojiPicker() {\r\n            if (_isDisabled) return;\r\n            const isVisible = emojiPicker.classList.toggle('visible');\r\n            if (isVisible) {\r\n                saveCurrentSelection(); \/\/ Save selection when opening picker\r\n                 \/\/ Scroll to top of picker when opened\r\n                 emojiPicker.scrollTop = 0;\r\n            } else {\r\n                \/\/ Restore focus to the editor when closing picker, unless editor is disabled\r\n                if (!_isDisabled) {\r\n                    editor.focus();\r\n                }\r\n            }\r\n        }\r\n\r\n        \/** Selects all content in the editor *\/\r\n        function selectAllContent() {\r\n            if (_isDisabled) return;\r\n            if (welcomeMessageActive && editor.contains(welcomeMessageElement)) return; \/\/ Don't select welcome message\r\n            editor.focus();\r\n            document.execCommand('selectAll', false, null);\r\n        }\r\n\r\n        \/** Deletes the currently selected content *\/\r\n        function deleteSelection() {\r\n            if (_isDisabled) return;\r\n            if (welcomeMessageActive && editor.contains(welcomeMessageElement)) return; \/\/ Don't delete welcome message\r\n\r\n            editor.focus();\r\n\r\n            \/\/ Restore selection if needed (e.g., if focus was lost)\r\n            if (savedSelection) {\r\n                const sel = window.getSelection();\r\n                 if (sel.rangeCount > 0) {\r\n                     try { sel.removeAllRanges(); sel.addRange(savedSelection); }\r\n                     catch (e) { console.warn(\"Error restoring selection for delete:\", e); }\r\n                 }\r\n                savedSelection = null;\r\n            }\r\n\r\n            const success = document.execCommand('delete', false, null);\r\n            if (success) {\r\n                updateCounts();\r\n                \/\/ If editor becomes empty after delete, ensure it has a paragraph tag\r\n                if (editor.innerText.trim() === '') {\r\n                    editor.innerHTML = '<p><br>';\r\n                    moveCursorToStart(editor);\r\n                }\r\n            } else {\r\n                console.warn(\"Delete command failed or no selection.\");\r\n            }\r\n        }\r\n\r\n        \/** Copies selected or all content to clipboard *\/\r\n        function copyContent() {\r\n             if (_isDisabled) return;\r\n             if (welcomeMessageActive && editor.contains(welcomeMessageElement)) return; \/\/ Don't copy welcome message\r\n\r\n             const selection = window.getSelection();\r\n             let textToCopy = '';\r\n\r\n             \/\/ Check if there is an active, non-collapsed selection\r\n             if (selection && selection.rangeCount > 0 && !selection.getRangeAt(0).collapsed) {\r\n                 textToCopy = selection.toString();\r\n             } else {\r\n                 \/\/ If no selection, copy all editor text content\r\n                 textToCopy = editor.innerText || editor.textContent;\r\n             }\r\n\r\n             if (!textToCopy) return; \/\/ Nothing to copy\r\n\r\n             \/\/ Use modern Clipboard API if available\r\n             if (navigator.clipboard && navigator.clipboard.writeText) {\r\n                 navigator.clipboard.writeText(textToCopy).then(() => {\r\n                     console.log(\"Copied successfully using Clipboard API!\");\r\n                     \/\/ Optionally provide user feedback (e.g., flash button color)\r\n                 }).catch(err => {\r\n                     console.error(\"Clipboard API copy failed: \", err);\r\n                     \/\/ Fallback to older method if API fails\r\n                     fallbackCopyTextToClipboard(textToCopy);\r\n                 });\r\n             } else {\r\n                 \/\/ Fallback for older browsers\r\n                 fallbackCopyTextToClipboard(textToCopy);\r\n             }\r\n             editor.focus(); \/\/ Restore focus to editor\r\n        }\r\n\r\n        \/** Pastes content from clipboard *\/\r\n        function pasteContent() {\r\n             if (_isDisabled) return;\r\n\r\n             \/\/ Handle welcome message if active\r\n             if (welcomeMessageActive && editor.contains(welcomeMessageElement)) {\r\n                 if (editor.innerText.trim() === welcomeMessageElement.textContent.trim()) {\r\n                     editor.innerHTML = '<p><br>'; \/\/ Clear welcome message\r\n                     moveCursorToStart(editor); \/\/ Position cursor\r\n                     welcomeMessageActive = false;\r\n                 } else {\r\n                     welcomeMessageElement.remove(); \/\/ Remove if other content exists\r\n                     welcomeMessageActive = false;\r\n                 }\r\n             }\r\n\r\n             editor.focus(); \/\/ Ensure editor has focus\r\n\r\n             \/\/ Use modern Clipboard API if available\r\n             if (navigator.clipboard && navigator.clipboard.readText) {\r\n                 navigator.clipboard.readText().then(text => {\r\n                     \/\/ Sanitize or process 'text' if needed before inserting\r\n                     document.execCommand('insertText', false, text);\r\n                     setTimeout(updateCounts, 100); \/\/ Update counts after paste settles\r\n                 }).catch(err => {\r\n                     console.warn(\"Clipboard API paste failed, trying execCommand:\", err);\r\n                     \/\/ Fallback to execCommand('paste') if readText fails (e.g., permissions)\r\n                     try {\r\n                         if (document.execCommand('paste')) {\r\n                             setTimeout(updateCounts, 100); \/\/ Update counts after paste settles\r\n                         } else {\r\n                             console.warn(\"execCommand paste failed.\");\r\n                             \/\/ Optionally alert user or provide instructions\r\n                         }\r\n                     } catch (execErr) {\r\n                         console.error(\"execCommand paste error:\", execErr);\r\n                         \/\/ Optionally alert user\r\n                     }\r\n                 });\r\n             } else {\r\n                 \/\/ Fallback for older browsers or environments without Clipboard API\r\n                 try {\r\n                     if (document.execCommand('paste')) {\r\n                         setTimeout(updateCounts, 100); \/\/ Update counts after paste settles\r\n                     } else {\r\n                         console.warn(\"execCommand paste failed.\");\r\n                         \/\/ Optionally alert user\r\n                     }\r\n                 } catch (err) {\r\n                     console.error(\"execCommand paste error:\", err);\r\n                     \/\/ Optionally alert user\r\n                 }\r\n             }\r\n        }\r\n\r\n        \/** Fallback copy method using a temporary textarea *\/\r\n        function fallbackCopyTextToClipboard(text) {\r\n            const textArea = document.createElement(\"textarea\");\r\n            textArea.value = text;\r\n\r\n            \/\/ Make the textarea non-editable and visually hidden\r\n            textArea.style.position = \"fixed\";\r\n            textArea.style.top = \"-9999px\";\r\n            textArea.style.left = \"-9999px\";\r\n            textArea.setAttribute(\"readonly\", \"\"); \/\/ Prevent keyboard popup on mobile\r\n\r\n            document.body.appendChild(textArea);\r\n            textArea.select(); \/\/ Select the text\r\n\r\n            try {\r\n                const successful = document.execCommand('copy');\r\n                if (successful) {\r\n                    console.log(\"Copied successfully using fallback method!\");\r\n                } else {\r\n                    console.error('Fallback copy command failed.');\r\n                }\r\n            } catch (err) {\r\n                console.error('Fallback copy error:', err);\r\n            }\r\n\r\n            document.body.removeChild(textArea); \/\/ Clean up the temporary element\r\n        }\r\n\r\n        \/** Opens file input for TXT upload *\/\r\n        function uploadTxtFile() {\r\n            \/\/ Critical action: Check copyright first\r\n            if (!checkCopyright()) return;\r\n\r\n            const fileInput = document.createElement('input');\r\n            fileInput.type = 'file';\r\n            fileInput.accept = '.txt, text\/plain'; \/\/ Accept .txt and generic text files\r\n\r\n            fileInput.onchange = event => {\r\n                if (_isDisabled) return; \/\/ Re-check in case of delay\r\n                const file = event.target.files[0];\r\n                if (file && (file.type === 'text\/plain' || file.name.endsWith('.txt'))) {\r\n                    handleTxtUploadLogic(file);\r\n                } else if (file) {\r\n                    \/\/ Use a more user-friendly notification if possible\r\n                    alert(\"\u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641 \u063a\u064a\u0631 \u0645\u062f\u0639\u0648\u0645. \u064a\u0631\u062c\u0649 \u0627\u062e\u062a\u064a\u0627\u0631 \u0645\u0644\u0641 \u0646\u0635\u064a (txt).\");\r\n                }\r\n                \/\/ Reset file input value to allow uploading the same file again\r\n                event.target.value = null;\r\n            };\r\n            fileInput.click(); \/\/ Trigger the file selection dialog\r\n        }\r\n\r\n        \/** Reads and inserts TXT file content *\/\r\n        function handleTxtUploadLogic(file) {\r\n            if (_isDisabled) return;\r\n            const reader = new FileReader();\r\n\r\n            reader.onload = (e) => {\r\n                if (_isDisabled) return; \/\/ Re-check\r\n\r\n                const textContent = e.target.result;\r\n\r\n                \/\/ Clear welcome message if present\r\n                if (welcomeMessageActive && editor.contains(welcomeMessageElement)) {\r\n                     editor.innerHTML = ''; \/\/ Clear completely\r\n                     welcomeMessageActive = false;\r\n                }\r\n\r\n                editor.focus();\r\n                \/\/ Replace entire content with the file content\r\n                \/\/ Using insertText after selectAll is generally safer than setting innerHTML\/innerText\r\n                document.execCommand('selectAll', false, null);\r\n                document.execCommand('insertText', false, textContent);\r\n\r\n                \/\/ Ensure editor isn't completely empty if file was empty\r\n                 if (editor.innerText.trim() === '') {\r\n                     editor.innerHTML = '<p><br>';\r\n                 }\r\n\r\n                 moveCursorToStart(editor); \/\/ Move cursor to the beginning\r\n                updateCounts(); \/\/ Update stats\r\n                \/\/ Reset formatting to defaults after upload\r\n                resetEditorFontSize();\r\n                resetColor('foreColor');\r\n                resetColor('backColor');\r\n                \/\/ Reset alignment? Could default to RTL or based on content?\r\n                setTextDirection('rtl'); \/\/ Default to RTL after upload\r\n                changeAlignment('justifyRight'); \/\/ Default alignment\r\n            };\r\n\r\n            reader.onerror = (err) => {\r\n                console.error(\"File reading error:\", err);\r\n                alert(\"\u062d\u062f\u062b \u062e\u0637\u0623 \u0623\u062b\u0646\u0627\u0621 \u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0646\u0635\u064a.\");\r\n            };\r\n\r\n            reader.readAsText(file, 'UTF-8'); \/\/ Read as UTF-8 to support Arabic characters\r\n        }\r\n\r\n        \/** Exports editor content as a TXT file *\/\r\n        function exportToTxt() {\r\n            \/\/ Critical action: Check copyright first\r\n            if (!checkCopyright()) return;\r\n\r\n            \/\/ Get plain text content, handling potential welcome message\r\n            let textContent = '';\r\n             if (!welcomeMessageActive || !editor.contains(welcomeMessageElement)) {\r\n                 textContent = editor.innerText || editor.textContent;\r\n             }\r\n\r\n            const filename = \"document.txt\";\r\n            \/\/ Create a Blob with UTF-8 BOM for better compatibility\r\n            const blob = new Blob(['\\ufeff', textContent], { type: 'text\/plain;charset=utf-8' });\r\n\r\n            \/\/ Use FileSaver.js logic if available, otherwise fallback\r\n            const link = document.createElement(\"a\");\r\n            if (link.download !== undefined) { \/\/ Check if browser supports download attribute\r\n                 const url = URL.createObjectURL(blob);\r\n                 link.setAttribute(\"href\", url);\r\n                 link.setAttribute(\"download\", filename);\r\n                 link.style.visibility = 'hidden';\r\n                 document.body.appendChild(link);\r\n                 link.click();\r\n                 document.body.removeChild(link);\r\n                 URL.revokeObjectURL(url); \/\/ Free up memory\r\n            } else {\r\n                 \/\/ Fallback for older browsers (might open in new tab)\r\n                 window.open(\"data:text\/plain;charset=utf-8,\" + encodeURIComponent(textContent));\r\n            }\r\n             editor.focus(); \/\/ Restore focus\r\n        }\r\n\r\n        \/\/ --- Word Export Function Removed ---\r\n\r\n        \/\/ Actions on window load\r\n        window.onload = () => {\r\n\r\n             if (!checkCopyright()) {\r\n                 console.log(\"Initial integrity check failed. Editor halted.\");\r\n                 return; \/\/ Stop further initialization\r\n             }\r\n\r\n             \/\/ Set up periodic integrity check (e.g., every 3-5 seconds)\r\n             \/\/ More frequent checks increase protection but might have minor performance impact.\r\n             _chkInt = setInterval(checkCopyright, 3500); \/\/ Check every 3.5 seconds\r\n\r\n             \/\/ --- Continue with normal initialization ONLY IF check passed ---\r\n             \/\/ Set initial direction button state\r\n             if (editor.dir === 'rtl') { rtlBtn.classList.add('active'); } else { ltrBtn.classList.add('active'); }\r\n\r\n             \/\/ Check initial content vs welcome message\r\n             const initialText = editor.innerText || editor.textContent;\r\n             const welcomeElement = document.getElementById('welcomeMessage');\r\n             const welcomeText = welcomeElement ? welcomeElement.textContent.trim() : \"\";\r\n\r\n             if (!welcomeElement || (initialText.trim() !== welcomeText && initialText.trim() !== '')) {\r\n                 \/\/ Content exists or welcome message missing\r\n                 welcomeMessageActive = false;\r\n                 if(welcomeElement) welcomeElement.remove(); \/\/ Remove if it exists but isn't the only content\r\n             } else if (initialText.trim() === welcomeText) {\r\n                 \/\/ Only welcome message exists\r\n                 welcomeMessageActive = true;\r\n                 \/\/ Ensure welcome message styling is applied (redundant if CSS does it, but safe)\r\n                 welcomeElement.style.color = '#6b7280';\r\n                 welcomeElement.style.fontStyle = 'italic';\r\n                 welcomeElement.style.textAlign = 'center';\r\n                 welcomeElement.style.paddingTop = '2px';\r\n             } else {\r\n                 \/\/ Editor is empty initially (or contains only whitespace)\r\n                 welcomeMessageActive = false;\r\n                 if(editor.innerHTML.trim() === '') {\r\n                     editor.innerHTML = '<p><br>'; \/\/ Ensure empty editor has a paragraph\r\n                 }\r\n                 if(welcomeElement) welcomeElement.remove(); \/\/ Remove welcome message if editor is otherwise empty\r\n             }\r\n\r\n             \/\/ Initial setup\r\n             updateCounts(); \/\/ Calculate initial counts\r\n             populateEmojiPicker(); \/\/ Load emojis\r\n             \/\/ Set default color picker values visually\r\n             fontColorPicker.value = defaultFontColor;\r\n             highlightColorPicker.value = defaultHighlightColor; \/\/ Visual default for picker\r\n             \/\/ Apply initial font size from select or default\r\n             setEditorFontSize(fontSizeSelect.value || defaultFontSize);\r\n             \/\/ Set initial alignment button state (assuming RTL default)\r\n             changeAlignment('justifyRight');\r\n\r\n             \/\/ --- Make Editor Visible After Load ---\r\n             if(toolbarContainer) toolbarContainer.classList.add('visible');\r\n             if(editor) editor.classList.add('visible');\r\n             if(statusBar) statusBar.classList.add('visible');\r\n\r\n             console.log(\"Editor initialized with enhanced protection and delayed appearance.\");\r\n        };\r\n\r\n    <\/script>\r\n\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u0645\u062d\u0631\u0631 \u0628\u0643\u0631\u0649 \u0627\u0644\u0645\u062a\u0637\u0648\u0631 \u0631\u0641\u0639 TXT \u21b7 \u21b6 RTL LTR \u21ba 10px12px14px16px18px20px24px28px32px36px42px48px56px B I U S \u0645\u0633\u062d \u0627\u0644\u062a\u0646\u0633\u064a\u0642 \u0644\u0648\u0646: \u21ba \u062e\u0644\u0641\u064a\u0629:<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13499","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/pages\/13499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/comments?post=13499"}],"version-history":[{"count":129,"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/pages\/13499\/revisions"}],"predecessor-version":[{"id":15112,"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/pages\/13499\/revisions\/15112"}],"wp:attachment":[{"href":"https:\/\/bakrykeys.com\/en\/wp-json\/wp\/v2\/media?parent=13499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}