{"id":346,"date":"2026-02-27T12:45:00","date_gmt":"2026-02-27T12:45:00","guid":{"rendered":"https:\/\/oualator.com\/calculate\/?p=346"},"modified":"2026-02-28T08:25:41","modified_gmt":"2026-02-28T08:25:41","slug":"wordnito","status":"publish","type":"post","link":"https:\/\/oualator.com\/calculate\/wordnito\/","title":{"rendered":"WordNito | Real-Time Word Counter, Character &amp; Text Analyzer"},"content":{"rendered":"\n<p class=\"mb-5\">Creating high-quality content requires more than just great ideas \u2014 it demands structure, clarity, and precision. Whether you&#8217;re drafting a blog post, writing an academic essay, preparing SEO content, or crafting a social media caption, knowing your exact word count and character limits is essential. That&#8217;s where <strong>WordNito<\/strong> comes in. Designed as a powerful free online word counter and real-time text analyzer, it helps you monitor word count for SEO, track keyword density, calculate reading time, and optimize overall writing quality. If there are similar words in a content, you can find them by using the   <a href=\"https:\/\/oualator.com\/calculate\/duplicate-word-finder\/\" class=\"text-blue-600 font-medium hover:text-blue-700\">Duplicate Word Finder<\/a> utility.<\/p>\n\n\n\n\n\n  <link href=\"https:\/\/cdn.jsdelivr.net\/npm\/tailwindcss@2.2.19\/dist\/tailwind.min.css\" rel=\"stylesheet\">\n  <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@fortawesome\/fontawesome-free@6.4.0\/css\/all.min.css\">\n  <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"><\/script>\n\n  <style>\n    .wp-word-counter {\n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n      line-height: 1.5;\n    }\n    .wp-word-counter * { box-sizing: border-box; }\n\n    .wp-word-counter .text-editor {\n      min-height: 300px;\n      border: 2px solid #e5e7eb;\n      border-radius: 0.5rem;\n      padding: 1rem;\n      font-family: inherit;\n      line-height: 1.6;\n      transition: all 0.3s ease;\n      resize: vertical;\n      outline: none;\n    }\n    .wp-word-counter .text-editor:focus {\n      border-color: #3b82f6;\n      box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n    }\n\n    \/* Placeholder for contenteditable *\/\n    .wp-word-counter [contenteditable=\"true\"]:empty:before {\n      content: attr(data-placeholder);\n      color: #9ca3af;\n    }\n\n    .wp-word-counter .progress-bar {\n      transition: width 0.3s ease;\n      background-color: #3b82f6;\n      height: 0.5rem;\n      border-radius: 9999px;\n    }\n\n    .wp-word-counter .stat-card {\n      transition: all 0.3s ease;\n      cursor: pointer;\n    }\n    .wp-word-counter .stat-card:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);\n    }\n\n    .wp-word-counter .chart-container {\n      position: relative;\n      height: 300px;\n      width: 100%;\n    }\n\n    .wp-word-counter .word-cloud {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 0.5rem;\n      padding: 1rem;\n      border: 1px solid #e5e7eb;\n      border-radius: 0.5rem;\n      min-height: 100px;\n    }\n\n    .wp-word-counter .word-tag {\n      padding: 0.25rem 0.5rem;\n      background-color: #3b82f6;\n      color: white;\n      border-radius: 1rem;\n      font-size: 0.875rem;\n      font-weight: 500;\n      transition: all 0.2s ease;\n      cursor: pointer;\n    }\n\n    .wp-word-counter .word-tag:hover       { background-color: #2563eb; transform: scale(1.05); }\n    .wp-word-counter .phrase-tag           { background-color: #10b981; }\n    .wp-word-counter .phrase-tag:hover     { background-color: #059669; }\n    .wp-word-counter .phrase4-tag          { background-color: #8b5cf6; }\n    .wp-word-counter .phrase4-tag:hover    { background-color: #7c3aed; }\n    .wp-word-counter .phrase5-tag          { background-color: #f59e0b; }\n    .wp-word-counter .phrase5-tag:hover    { background-color: #d97706; }\n    .wp-word-counter .phrase6-tag          { background-color: #ef4444; }\n    .wp-word-counter .phrase6-tag:hover    { background-color: #dc2626; }\n    .wp-word-counter .phrase7-tag          { background-color: #14b8a6; }\n    .wp-word-counter .phrase7-tag:hover    { background-color: #0f766e; }\n\n    .wp-word-counter .plain-text-mode {\n      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n      white-space: pre-wrap;\n      background-color: #f8f9fa;\n    }\n\n    .wp-word-counter .suggestion { animation: wp-fadeIn 0.3s ease-in; }\n    @keyframes wp-fadeIn {\n      from { opacity: 0; transform: translateY(-10px); }\n      to   { opacity: 1; transform: translateY(0); }\n    }\n\n    \/* Phrase panel tab-style header *\/\n    .wp-phrase-panel-header {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      flex-wrap: wrap;\n      gap: 0.5rem;\n      margin-bottom: 1rem;\n    }\n\n    \/* Keyword density bar (used inside phrase list + writing assistant bars) *\/\n    .kd-bar-track {\n      width: 100%;\n      background: #e5e7eb;\n      border-radius: 9999px;\n      height: 8px;\n      overflow: hidden;\n    }\n    .kd-bar-fill {\n      height: 8px;\n      border-radius: 9999px;\n      transition: width 0.4s ease;\n    }\n\n    \/* Sentence length pills *\/\n    .sentence-pill {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      padding: 4px 10px;\n      border-radius: 9999px;\n      font-size: 0.75rem;\n      font-weight: 700;\n      user-select: none;\n      cursor: pointer;\n      border: 1px solid transparent;\n      transition: transform 0.12s ease, background 0.12s ease, border-color 0.12s ease;\n    }\n    .sentence-pill:hover { transform: translateY(-1px); }\n    .sentence-pill:active { transform: translateY(0px); }\n\n    .sentence-pill-20 { background: #fffbeb; color: #92400e; border-color: #fde68a; }\n    .sentence-pill-30 { background: #fef2f2; color: #991b1b; border-color: #fecaca; }\n    .sentence-pill-active { outline: 2px solid rgba(59,130,246,0.35); }\n\n    \/* Highlights *\/\n    mark.wp-hl-term {\n      background: #fde68a;\n      padding: 2px;\n      border-radius: 4px;\n    }\n    mark.wp-sentence-hl-20 {\n      background: #fef3c7; \/* amber-100 *\/\n      padding: 2px;\n      border-radius: 4px;\n    }\n    mark.wp-sentence-hl-30 {\n      background: #fee2e2; \/* red-100 *\/\n      padding: 2px;\n      border-radius: 4px;\n    }\n\n    @media (max-width: 768px) {\n      .wp-word-counter .responsive-grid-2  { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }\n      .wp-word-counter .responsive-grid-3  { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }\n      .wp-word-counter .responsive-grid-6  { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }\n    }\n\n    .wp-word-counter input, .wp-word-counter select, .wp-word-counter button { font-family: inherit; }\n\n    .wp-word-counter .notification {\n      position: fixed;\n      top: 20px;\n      right: 20px;\n      z-index: 9999;\n      max-width: 320px;\n      padding: 1rem;\n      border-radius: 0.5rem;\n      color: white;\n      font-weight: 500;\n      box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n      transition: all 0.3s ease;\n    }\n\n    \/* Toolbar *\/\n    .wp-word-counter .toolbar {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      gap: 0.5rem;\n      padding-bottom: 1rem;\n      margin-bottom: 1rem;\n      border-bottom: 1px solid #e5e7eb;\n    }\n    .wp-word-counter .toolbar-group {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: center;\n      gap: 0.25rem;\n    }\n    .wp-word-counter .toolbar-sep {\n      width: 1px;\n      height: 24px;\n      background: #d1d5db;\n      margin: 0 0.5rem;\n    }\n  <\/style>\n  <div class=\"wp-word-counter bg-gray-50 p-4\" id=\"wpWordCounterApp\">\n\n    <!-- \u2550\u2550\u2550 Header \u2550\u2550\u2550 -->\n    <div class=\"bg-white shadow-sm border border-gray-200 rounded-lg mb-6\">\n      <div class=\"p-6\">\n        <div class=\"flex flex-col md:flex-row justify-between items-start md:items-center gap-4\">\n          <div>\n            <h2 class=\"text-3xl font-bold text-gray-900\">\n              <i class=\"fas fa-pencil-alt text-blue-600 mr-2\"><\/i>WordNito\n            <\/h2>\n            <p class=\"text-gray-600 mt-1\">Word Counter, plain text view &amp; phrase analysis (2\u20137 words)<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550 Text Editor \u2550\u2550\u2550 -->\n    <div class=\"bg-white rounded-xl shadow-lg p-6 mb-6\">\n      <div class=\"toolbar\" id=\"wpEditorToolbar\">\n\n        <!-- Formatting group -->\n        <div class=\"toolbar-group\" id=\"wpFormattingGroup\">\n          <button onclick=\"wpFormatText('bold')\"                class=\"p-2 rounded hover:bg-gray-100\" title=\"Bold\"><i class=\"fas fa-bold\"><\/i><\/button>\n          <button onclick=\"wpFormatText('italic')\"              class=\"p-2 rounded hover:bg-gray-100\" title=\"Italic\"><i class=\"fas fa-italic\"><\/i><\/button>\n          <button onclick=\"wpFormatText('underline')\"           class=\"p-2 rounded hover:bg-gray-100\" title=\"Underline\"><i class=\"fas fa-underline\"><\/i><\/button>\n          <div class=\"toolbar-sep\"><\/div>\n          <select onchange=\"wpFormatHeading(this.value)\" class=\"px-3 py-1 rounded border\" title=\"Heading\">\n            <option value=\"\">Heading<\/option>\n            <option value=\"h1\">H1<\/option><option value=\"h2\">H2<\/option>\n            <option value=\"h3\">H3<\/option><option value=\"h4\">H4<\/option>\n            <option value=\"h5\">H5<\/option><option value=\"h6\">H6<\/option>\n          <\/select>\n          <button onclick=\"wpFormatText('insertUnorderedList')\" class=\"p-2 rounded hover:bg-gray-100\" title=\"Bullet List\"><i class=\"fas fa-list-ul\"><\/i><\/button>\n          <button onclick=\"wpFormatText('insertOrderedList')\"   class=\"p-2 rounded hover:bg-gray-100\" title=\"Numbered List\"><i class=\"fas fa-list-ol\"><\/i><\/button>\n        <\/div>\n\n        <div class=\"toolbar-sep\"><\/div>\n\n        <!-- Utility group -->\n        <div class=\"toolbar-group\">\n          <button onclick=\"wpClearText()\"    class=\"p-2 rounded hover:bg-red-100 text-red-600\" title=\"Clear Text\"><i class=\"fas fa-trash\"><\/i><\/button>\n          <button onclick=\"wpCopyText()\"     class=\"p-2 rounded hover:bg-gray-100\" title=\"Copy Text\"><i class=\"fas fa-copy\"><\/i><\/button>\n          <button onclick=\"wpDownloadText()\" class=\"p-2 rounded hover:bg-gray-100\" title=\"Download\"><i class=\"fas fa-download\"><\/i><\/button>\n          <button onclick=\"wpTogglePlainTextMode()\"\n            class=\"ml-2 px-3 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors text-sm\">\n            <i class=\"fas fa-file-alt mr-2\"><\/i><span id=\"wpPlainTextToggle\">Plain Text<\/span>\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <div contenteditable=\"true\"\n           class=\"text-editor\"\n           id=\"wpTextEditor\"\n           data-placeholder=\"Start typing your content here...\"><\/div>\n\n      <!-- Word Goal Progress -->\n      <div class=\"mt-4\">\n        <div class=\"flex justify-between items-center mb-2\">\n          <label class=\"text-sm font-medium text-gray-700\">Word Goal:<\/label>\n          <input type=\"number\" id=\"wpWordGoal\" value=\"10000\" min=\"1\" max=\"100000\"\n            onchange=\"wpUpdateProgress()\"\n            class=\"w-24 px-2 py-1 border rounded text-sm\">\n        <\/div>\n        <div class=\"w-full bg-gray-200 rounded-full h-2\">\n          <div class=\"progress-bar h-2 rounded-full\" id=\"wpProgressBar\" style=\"width: 0%\"><\/div>\n        <\/div>\n        <p class=\"text-xs text-gray-500 mt-1\" id=\"wpProgressText\">0 \/ 10,000 words (0%)<\/p>\n      <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550 Statistics Grid \u2550\u2550\u2550 -->\n    <div class=\"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-4 mb-6 responsive-grid-6\">\n      <div class=\"stat-card bg-white p-4 rounded-lg shadow-lg text-center\">\n        <div class=\"text-2xl font-bold text-blue-600\"   id=\"wpWordCount\">0<\/div>\n        <div class=\"text-sm text-gray-600\">Words<\/div>\n      <\/div>\n      <div class=\"stat-card bg-white p-4 rounded-lg shadow-lg text-center\">\n        <div class=\"text-2xl font-bold text-green-600\"  id=\"wpCharCount\">0<\/div>\n        <div class=\"text-sm text-gray-600\">Characters<\/div>\n      <\/div>\n      <div class=\"stat-card bg-white p-4 rounded-lg shadow-lg text-center\">\n        <div class=\"text-2xl font-bold text-purple-600\" id=\"wpCharCountNoSpaces\">0<\/div>\n        <div class=\"text-sm text-gray-600\">Chars (no spaces)<\/div>\n      <\/div>\n      <div class=\"stat-card bg-white p-4 rounded-lg shadow-lg text-center\">\n        <div class=\"text-2xl font-bold text-orange-600\" id=\"wpSentenceCount\">0<\/div>\n        <div class=\"text-sm text-gray-600\">Sentences<\/div>\n      <\/div>\n      <div class=\"stat-card bg-white p-4 rounded-lg shadow-lg text-center\">\n        <div class=\"text-2xl font-bold text-red-600\"    id=\"wpParagraphCount\">0<\/div>\n        <div class=\"text-sm text-gray-600\">Paragraphs<\/div>\n      <\/div>\n      <div class=\"stat-card bg-white p-4 rounded-lg shadow-lg text-center\">\n        <div class=\"text-2xl font-bold text-indigo-600\" id=\"wpReadingTime\">0<\/div>\n        <div class=\"text-sm text-gray-600\">Min read<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550 Top Words \/ Phrases FIRST (moved above Writing Assistant) \u2550\u2550\u2550 -->\n    <div class=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6 responsive-grid-2\">\n\n      <!-- Phrase Frequency Panel (compact with dropdown) -->\n      <div class=\"bg-white rounded-xl shadow-lg p-6\">\n        <div class=\"wp-phrase-panel-header\">\n          <h3 class=\"text-lg font-bold text-gray-900\">\n            <i class=\"fas fa-list-alt text-blue-600 mr-2\"><\/i>\n            <span id=\"wpPhrasePanelTitle\">Top Words<\/span>\n          <\/h3>\n          <div class=\"flex items-center gap-2\">\n            <label class=\"text-sm text-gray-500 font-medium\">Phrase Length:<\/label>\n            <select id=\"wpPhraseLengthSelect\" onchange=\"wpSwitchPhrasePanel(this.value)\"\n              class=\"px-3 py-1 rounded border text-sm font-medium focus:outline-none focus:ring-2 focus:ring-blue-400\">\n              <option value=\"words\">Words<\/option>\n              <option value=\"2\">2 Words<\/option>\n              <option value=\"3\">3 Words<\/option>\n              <option value=\"4\">4 Words<\/option>\n              <option value=\"5\">5 Words<\/option>\n              <option value=\"6\">6 Words<\/option>\n              <option value=\"7\">7 Words<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <!-- Legend dots -->\n        <div class=\"flex flex-wrap gap-2 mb-3\" id=\"wpPhraseLegend\">\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-blue-500\"><\/span>Words\n          <\/span>\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-green-500\"><\/span>2-word\n          <\/span>\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-purple-500\"><\/span>3-word\n          <\/span>\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-indigo-500\"><\/span>4-word\n          <\/span>\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-yellow-500\"><\/span>5-word\n          <\/span>\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-red-500\"><\/span>6-word\n          <\/span>\n          <span class=\"flex items-center gap-1 text-xs text-gray-500\">\n            <span class=\"inline-block w-3 h-3 rounded-full bg-teal-500\"><\/span>7-word\n          <\/span>\n        <\/div>\n\n        <div id=\"wpPhraseList\" class=\"space-y-2\">\n          <div class=\"text-gray-500 text-center py-4\">No data yet<\/div>\n        <\/div>\n\n        <div class=\"mt-4 text-xs text-gray-400\">\n          <i class=\"fas fa-mouse-pointer mr-1\"><\/i>\n          Tip: Click a word\/phrase to toggle highlight in the editor (click again to remove).\n        <\/div>\n      <\/div>\n\n      <!-- Word \/ Phrase Frequency Bar Chart -->\n      <div class=\"bg-white rounded-xl shadow-lg p-6\">\n        <h2 class=\"text-xl font-bold text-gray-900 mb-4\">\n          <i class=\"fas fa-chart-bar text-orange-600 mr-2\"><\/i>Frequency Analysis\n          <select id=\"wpFrequencyChartType\" onchange=\"wpUpdateFrequencyChart()\" class=\"ml-2 text-sm px-2 py-1 rounded border\">\n            <option value=\"words\">Single Words<\/option>\n            <option value=\"phrases2\">2-Word Phrases<\/option>\n            <option value=\"phrases3\">3-Word Phrases<\/option>\n            <option value=\"phrases4\">4-Word Phrases<\/option>\n            <option value=\"phrases5\">5-Word Phrases<\/option>\n            <option value=\"phrases6\">6-Word Phrases<\/option>\n            <option value=\"phrases7\">7-Word Phrases<\/option>\n          <\/select>\n        <\/h2>\n        <div class=\"chart-container\" style=\"height: 340px;\">\n          <canvas id=\"wpFrequencyChart\"><\/canvas>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550 Analysis Section (Keyword Density chart kept, Writing Assistant moved BELOW) \u2550\u2550\u2550 -->\n    <div class=\"space-y-6 mb-6\">\n\n      <!-- Keyword Density Chart -->\n      <div class=\"bg-white rounded-xl shadow-lg p-6\">\n        <h2 class=\"text-xl font-bold text-gray-900 mb-4\">\n          <i class=\"fas fa-chart-pie text-green-600 mr-2\"><\/i>Keyword Density\n          <select id=\"wpKeywordChartType\" onchange=\"wpUpdateKeywordChart()\" class=\"ml-2 text-sm px-2 py-1 rounded border\">\n            <option value=\"words\">Single Words<\/option>\n            <option value=\"phrases2\">2-Word Phrases<\/option>\n            <option value=\"phrases3\">3-Word Phrases<\/option>\n            <option value=\"phrases4\">4-Word Phrases<\/option>\n            <option value=\"phrases5\">5-Word Phrases<\/option>\n            <option value=\"phrases6\">6-Word Phrases<\/option>\n            <option value=\"phrases7\">7-Word Phrases<\/option>\n          <\/select>\n        <\/h2>\n        <div class=\"chart-container\">\n          <canvas id=\"wpKeywordChart\"><\/canvas>\n        <\/div>\n      <\/div>\n\n      <!-- Writing Assistant (moved below Top Words) -->\n      <div class=\"bg-white rounded-xl shadow-lg p-6\">\n        <h2 class=\"text-xl font-bold text-gray-900 mb-4\">\n          <i class=\"fas fa-robot text-blue-600 mr-2\"><\/i>Writing Assistant\n        <\/h2>\n        <div id=\"wpWritingAssistant\" class=\"space-y-3\">\n          <div class=\"text-gray-500 text-center py-8\">\n            <i class=\"fas fa-lightbulb text-4xl mb-2\"><\/i>\n            <p>Start typing to get writing suggestions and analysis<\/p>\n          <\/div>\n        <\/div>\n      <\/div>\n\n    <\/div>\n\n    <!-- \u2550\u2550\u2550 Word Cloud \u2550\u2550\u2550 -->\n    <div class=\"bg-white rounded-xl shadow-lg p-6\">\n      <h2 class=\"text-xl font-bold text-gray-900 mb-4\">\n        <i class=\"fas fa-cloud text-indigo-600 mr-2\"><\/i>Enhanced Word Cloud\n        <select id=\"wpWordCloudType\" onchange=\"wpUpdateWordCloudType()\" class=\"ml-2 text-sm px-2 py-1 rounded border\">\n          <option value=\"mixed\">Mixed (Words &amp; Phrases)<\/option>\n          <option value=\"words\">Single Words Only<\/option>\n          <option value=\"phrases2\">2-Word Phrases Only<\/option>\n          <option value=\"phrases3\">3-Word Phrases Only<\/option>\n          <option value=\"phrases4\">4-Word Phrases Only<\/option>\n          <option value=\"phrases5\">5-Word Phrases Only<\/option>\n          <option value=\"phrases6\">6-Word Phrases Only<\/option>\n          <option value=\"phrases7\">7-Word Phrases Only<\/option>\n        <\/select>\n      <\/h2>\n      <div id=\"wpWordCloud\" class=\"word-cloud\">\n        <div class=\"text-gray-500 text-center w-full py-8\">\n          <i class=\"fas fa-cloud text-4xl mb-2\"><\/i>\n          <p>Word cloud will appear here as you type<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div><!-- \/.wp-word-counter -->\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       SCRIPT\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <script>\n    \/\/ \u2500\u2500 Global state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    let wpKeywordChart    = null;\n    let wpFrequencyChart  = null;\n    let wpIsPlainTextMode = false;\n\n    let wpCurrentWordData    = {};\n    let wpCurrentPhraseData2 = {};\n    let wpCurrentPhraseData3 = {};\n    let wpCurrentPhraseData4 = {};\n    let wpCurrentPhraseData5 = {};\n    let wpCurrentPhraseData6 = {};\n    let wpCurrentPhraseData7 = {};\n\n    let wpLastAnalyzedText = \"\";\n    let wpActivePhraseKey  = \"words\";   \/\/ tracks current phrase panel selection\n\n    \/\/ Highlight toggles\n    let wpActiveHighlightTerm = \"\";     \/\/ for term highlight toggling\n    let wpActiveSentenceThreshold = null; \/\/ 20 or 30\n\n    const wpFillerWords = [\n      'um','uh','like','you know','actually','basically','literally','really','very','quite',\n      'pretty','just','totally','absolutely','completely','definitely','probably','maybe',\n      'sort of','kind of','i mean','well','so','anyway','obviously','clearly'\n    ];\n\n    const wpStopWords = [\n      'the','be','to','of','and','a','in','that','have','i','it','for','not','on',\n      'with','he','as','you','do','at','this','but','his','by','from','they','we',\n      'say','her','she','or','an','will','my','one','all','would','there','their'\n    ];\n\n    \/\/ \u2500\u2500 Init \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    document.addEventListener('DOMContentLoaded', () => {\n      const editor = document.getElementById('wpTextEditor');\n      editor.addEventListener('input', wpAnalyzeText);\n      wpLoadSession();\n      wpAnalyzeText();\n    });\n\n    \/\/ \u2500\u2500 Plain Text Toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpTogglePlainTextMode() {\n      const editor       = document.getElementById('wpTextEditor');\n      const toggleLabel  = document.getElementById('wpPlainTextToggle');\n      const fmtGroup     = document.getElementById('wpFormattingGroup');\n\n      \/\/ Clear any active highlights before switching modes (keeps things predictable)\n      wpClearAllHighlights();\n\n      wpIsPlainTextMode = !wpIsPlainTextMode;\n\n      if (wpIsPlainTextMode) {\n        const plain = wpGetEditorPlainText();\n        editor.classList.add('plain-text-mode');\n        editor.textContent = plain;\n        fmtGroup.style.display = 'none';\n        toggleLabel.textContent = 'Rich Text';\n      } else {\n        const plain = editor.textContent || '';\n        editor.classList.remove('plain-text-mode');\n        editor.innerHTML = wpPlainTextToRichHTML(plain);\n        fmtGroup.style.display = 'flex';\n        toggleLabel.textContent = 'Plain Text';\n      }\n      editor.focus();\n      wpAnalyzeText();\n    }\n\n    function wpGetEditorPlainText() {\n      const editor = document.getElementById('wpTextEditor');\n      return (editor.innerText || editor.textContent || '').replace(\/\\u00A0\/g, ' ');\n    }\n\n    function wpPlainTextToRichHTML(text) {\n      const escaped = (text || '')\n        .replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;');\n      if (!escaped.trim()) return '';\n      return escaped.replace(\/\\n\/g, '<br>');\n    }\n\n    \/\/ \u2500\u2500 Core Analysis \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpAnalyzeText() {\n      const text = wpGetEditorPlainText();\n\n      if (text === wpLastAnalyzedText && text.trim() !== '') return;\n      wpLastAnalyzedText = text;\n\n      if (!text.trim()) { wpResetStats(); return; }\n\n      const words        = text.trim().split(\/\\s+\/).filter(w => w.length > 0);\n      const characters   = text.length;\n      const charsNoSp    = text.replace(\/\\s\/g, '').length;\n      const sentences    = text.split(\/[.!?]+\/).filter(s => s.trim().length > 0).length;\n      const paragraphs   = text.split(\/\\n\\s*\\n\/).filter(p => p.trim().length > 0).length;\n      const readingTime  = Math.ceil(words.length \/ 200);\n\n      document.getElementById('wpWordCount').textContent          = words.length;\n      document.getElementById('wpCharCount').textContent          = characters;\n      document.getElementById('wpCharCountNoSpaces').textContent  = charsNoSp;\n      document.getElementById('wpSentenceCount').textContent      = sentences;\n      document.getElementById('wpParagraphCount').textContent     = paragraphs;\n      document.getElementById('wpReadingTime').textContent        = readingTime;\n\n      wpUpdateProgress();\n      wpAnalyzeWordFrequency(words);\n      wpAnalyzeWritingStyle(text, words, sentences);\n      wpUpdateCharts();\n      wpUpdateWordCloud();\n    }\n\n    function wpResetStats() {\n      ['wpWordCount','wpCharCount','wpCharCountNoSpaces',\n       'wpSentenceCount','wpParagraphCount','wpReadingTime']\n        .forEach(id => document.getElementById(id).textContent = '0');\n\n      document.getElementById('wpWritingAssistant').innerHTML = `\n        <div class=\"text-gray-500 text-center py-8\">\n          <i class=\"fas fa-lightbulb text-4xl mb-2\"><\/i>\n          <p>Start typing to get writing suggestions and analysis<\/p>\n        <\/div>`;\n\n      document.getElementById('wpPhraseList').innerHTML =\n        '<div class=\"text-gray-500 text-center py-4\">No data yet<\/div>';\n\n      document.getElementById('wpWordCloud').innerHTML = `\n        <div class=\"text-gray-500 text-center w-full py-8\">\n          <i class=\"fas fa-cloud text-4xl mb-2\"><\/i>\n          <p>Word cloud will appear here as you type<\/p>\n        <\/div>`;\n\n      wpCurrentWordData = {}; wpCurrentPhraseData2 = {}; wpCurrentPhraseData3 = {};\n      wpCurrentPhraseData4 = {}; wpCurrentPhraseData5 = {}; wpCurrentPhraseData6 = {}; wpCurrentPhraseData7 = {};\n\n      if (wpKeywordChart)   { wpKeywordChart.destroy();   wpKeywordChart   = null; }\n      if (wpFrequencyChart) { wpFrequencyChart.destroy(); wpFrequencyChart = null; }\n\n      wpClearAllHighlights();\n      wpUpdateProgress();\n    }\n\n    \/\/ \u2500\u2500 Word \/ Phrase Frequency \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpAnalyzeWordFrequency(words) {\n      if (!words || !words.length) return;\n\n      const clean = words\n        .map(w => w.toLowerCase().replace(\/[^\\w\\s]\/g, ''))\n        .filter(w => w.length > 2 && !wpStopWords.includes(w));\n\n      wpCurrentWordData    = wpBuildFreq(clean);\n      wpCurrentPhraseData2 = wpBuildNgramFreq(clean, 2);\n      wpCurrentPhraseData3 = wpBuildNgramFreq(clean, 3);\n      wpCurrentPhraseData4 = wpBuildNgramFreq(clean, 4);\n      wpCurrentPhraseData5 = wpBuildNgramFreq(clean, 5);\n      wpCurrentPhraseData6 = wpBuildNgramFreq(clean, 6);\n      wpCurrentPhraseData7 = wpBuildNgramFreq(clean, 7);\n\n      \/\/ Refresh the active phrase panel\n      wpRenderPhrasePanel(wpActivePhraseKey, clean.length);\n    }\n\n    function wpBuildFreq(tokens) {\n      const freq = {};\n      tokens.forEach(t => freq[t] = (freq[t] || 0) + 1);\n      return freq;\n    }\n\n    function wpBuildNgramFreq(tokens, n) {\n      const freq = {};\n      if (tokens.length < n) return freq;\n      for (let i = 0; i <= tokens.length - n; i++) {\n        const phrase = tokens.slice(i, i + n).join(' ');\n        freq[phrase] = (freq[phrase] || 0) + 1;\n      }\n      return freq;\n    }\n\n    \/\/ \u2500\u2500 Compact Phrase Panel (Top Words) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    const wpPhraseColorMap = {\n      words:    { bar: '#3b82f6', badge: 'bg-blue-100 text-blue-700',     label: 'Top Words'       },\n      '2':      { bar: '#10b981', badge: 'bg-green-100 text-green-700',   label: '2-Word Phrases'  },\n      '3':      { bar: '#8b5cf6', badge: 'bg-purple-100 text-purple-700', label: '3-Word Phrases'  },\n      '4':      { bar: '#6366f1', badge: 'bg-indigo-100 text-indigo-700', label: '4-Word Phrases'  },\n      '5':      { bar: '#f59e0b', badge: 'bg-yellow-100 text-yellow-700', label: '5-Word Phrases'  },\n      '6':      { bar: '#ef4444', badge: 'bg-red-100 text-red-700',       label: '6-Word Phrases'  },\n      '7':      { bar: '#14b8a6', badge: 'bg-teal-100 text-teal-700',     label: '7-Word Phrases'  },\n    };\n\n    function wpSwitchPhrasePanel(value) {\n      wpActivePhraseKey = value;\n      const cleanLen = Object.values(wpCurrentWordData).reduce((a, b) => a + b, 0);\n      wpRenderPhrasePanel(value, Math.max(1, cleanLen));\n    }\n\n    function wpRenderPhrasePanel(key, total) {\n      const cfg = wpPhraseColorMap[key] || wpPhraseColorMap['words'];\n      document.getElementById('wpPhrasePanelTitle').textContent = cfg.label;\n\n      let data;\n      switch (key) {\n        case '2': data = wpCurrentPhraseData2; break;\n        case '3': data = wpCurrentPhraseData3; break;\n        case '4': data = wpCurrentPhraseData4; break;\n        case '5': data = wpCurrentPhraseData5; break;\n        case '6': data = wpCurrentPhraseData6; break;\n        case '7': data = wpCurrentPhraseData7; break;\n        default:  data = wpCurrentWordData;     break;\n      }\n\n      const sorted = Object.entries(data || {})\n        .sort(([,a],[,b]) => b - a)\n        .slice(0, 10);\n\n      const container = document.getElementById('wpPhraseList');\n\n      if (!sorted.length) {\n        container.innerHTML = '<div class=\"text-gray-500 text-center py-4\">No data yet<\/div>';\n        return;\n      }\n\n      const maxCount = sorted[0][1] || 1;\n\n      container.innerHTML = sorted.map(([phrase, count]) => {\n        const pct      = ((count \/ Math.max(1, total)) * 100).toFixed(1);\n        const barWidth = ((count \/ maxCount) * 100).toFixed(0);\n        const safe     = phrase.replace(\/'\/g, \"\\\\'\");\n        return `\n          <div class=\"group rounded-lg px-3 py-2 hover:bg-gray-50 cursor-pointer transition\"\n               onclick=\"wpToggleHighlightTerm('${safe}')\">\n            <div class=\"flex justify-between items-center mb-1\">\n              <span class=\"font-medium text-gray-800 text-sm group-hover:text-blue-600 transition\">${phrase}<\/span>\n              <div class=\"flex items-center gap-2\">\n                <span class=\"text-xs font-semibold ${cfg.badge} px-2 py-0.5 rounded-full\">${count}\u00d7<\/span>\n                <span class=\"text-xs text-gray-400\">${pct}%<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"kd-bar-track\">\n              <div class=\"kd-bar-fill\" style=\"width:${barWidth}%; background:${cfg.bar};\"><\/div>\n            <\/div>\n          <\/div>`;\n      }).join('');\n    }\n\n    \/\/ \u2500\u2500 Writing Assistant \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpAnalyzeWritingStyle(text, words, sentences) {\n      if (!words || !words.length) {\n        document.getElementById('wpWritingAssistant').innerHTML = `\n          <div class=\"text-gray-500 text-center py-8\">\n            <i class=\"fas fa-lightbulb text-4xl mb-2\"><\/i>\n            <p>Start typing to get writing suggestions and analysis<\/p>\n          <\/div>`;\n        return;\n      }\n\n      const blocks = [];\n\n      \/\/ \u2460 Sentence Length Analyzer (improvised: toggle highlights >20 \/ >30) \u2500\u2500\u2500\n      const sentenceList = wpSplitSentences(text);\n      const longSentences = sentenceList.filter(s => wpCountWords(s) > 20);\n      const veryLongSentences = sentenceList.filter(s => wpCountWords(s) > 30);\n\n      const pill20Active = wpActiveSentenceThreshold === 20 ? 'sentence-pill-active' : '';\n      const pill30Active = wpActiveSentenceThreshold === 30 ? 'sentence-pill-active' : '';\n\n      const controls = `\n        <div class=\"mt-2 flex flex-wrap items-center gap-2\">\n          <span class=\"text-xs text-gray-500 font-semibold uppercase tracking-wide mr-1\">Toggle highlight:<\/span>\n\n          <span class=\"sentence-pill sentence-pill-20 ${pill20Active}\"\n                title=\"Click to highlight all sentences over 20 words (click again to remove)\"\n                onclick=\"wpToggleSentenceHighlights(20)\">\n            <i class=\"fas fa-highlighter\"><\/i> &gt;20 words\n            <span class=\"px-2 py-0.5 rounded-full bg-white bg-opacity-60 text-xs font-bold\">${longSentences.length}<\/span>\n          <\/span>\n\n          <span class=\"sentence-pill sentence-pill-30 ${pill30Active}\"\n                title=\"Click to highlight all sentences over 30 words (click again to remove)\"\n                onclick=\"wpToggleSentenceHighlights(30)\">\n            <i class=\"fas fa-highlighter\"><\/i> &gt;30 words\n            <span class=\"px-2 py-0.5 rounded-full bg-white bg-opacity-60 text-xs font-bold\">${veryLongSentences.length}<\/span>\n          <\/span>\n\n          <span class=\"text-xs text-gray-400\">\n            ${wpIsPlainTextMode ? '(Highlighting disabled in Plain Text mode)' : 'Click again to remove'}\n          <\/span>\n        <\/div>\n      `;\n\n      if (longSentences.length > 0) {\n        const sType   = longSentences.length === 1 ? 'warning' : 'error';\n\n        const details = longSentences.map((s, i) => {\n          const wc = wpCountWords(s);\n          const tone = wc > 30 ? 'text-red-600' : 'text-yellow-600';\n          const safe = (s || '').replace(\/\"\/g, '&quot;');\n          return `<li class=\"text-xs text-gray-500 mt-1 truncate\" title=\"${safe}\">\n            Sentence ${i + 1}: <span class=\"font-semibold ${tone}\">${wc} words<\/span>\n          <\/li>`;\n        }).slice(0, 4).join('');\n\n        const moreNote = longSentences.length > 4\n          ? `<li class=\"text-xs text-gray-400 mt-1\">\u2026and ${longSentences.length - 4} more.<\/li>` : '';\n\n        blocks.push({\n          type: sType,\n          icon: 'fas fa-ruler-horizontal',\n          title: 'Sentence Length Analyzer',\n          rawHTML: `\n            <p class=\"text-sm text-gray-700\">\n              <strong>${longSentences.length}<\/strong> sentence${longSentences.length > 1 ? 's are' : ' is'} over <strong>20<\/strong> words\n              ${veryLongSentences.length ? `, and <strong>${veryLongSentences.length}<\/strong> exceed <strong>30<\/strong> words` : ''}.\n              Break them up for readability.\n            <\/p>\n            ${controls}\n            <ul class=\"mt-2 pl-2 list-disc list-inside\">${details}${moreNote}<\/ul>\n          `\n        });\n      } else {\n        blocks.push({\n          type: 'success',\n          icon: 'fas fa-ruler-horizontal',\n          title: 'Sentence Length Analyzer',\n          rawHTML: `\n            <p class=\"text-sm text-gray-700\">All sentences are within a comfortable length. Great job!<\/p>\n            ${controls}\n          `\n        });\n      }\n\n      \/\/ (Removed) Keyword Density Analyzer feature + associated UI\/logic\n\n      \/\/ \u2461 Filler Words \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n      const fillerCount = wpDetectFillerWords(text);\n      if (fillerCount > 0) {\n        blocks.push({\n          type: 'warning',\n          icon: 'fas fa-filter',\n          title: 'Filler Words Detected',\n          message: `<strong>${fillerCount}<\/strong> filler word(s) found. Remove unnecessary words for more concise writing.`\n        });\n      }\n\n      \/\/ \u2462 Long Sentence (avg) Warning \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n      const avgWPS = words.length \/ Math.max(1, sentences);\n      if (avgWPS > 25) {\n        blocks.push({\n          type: 'warning',\n          icon: 'fas fa-exclamation-triangle',\n          title: 'High Average Sentence Length',\n          message: `Average sentence length is <strong>${avgWPS.toFixed(1)}<\/strong> words. Aim for 15\u201320 words per sentence.`\n        });\n      }\n\n      \/\/ \u2463 Word Variety \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n      const uniqueWords = new Set(words.map(w => w.toLowerCase())).size;\n      const varietyPct  = ((uniqueWords \/ words.length) * 100).toFixed(1);\n      if (parseFloat(varietyPct) < 50) {\n        blocks.push({\n          type: 'info',\n          icon: 'fas fa-palette',\n          title: 'Word Variety',\n          message: `Word variety: <strong>${varietyPct}%<\/strong>. Try using more diverse vocabulary.`\n        });\n      }\n\n      wpDisplaySuggestions(blocks);\n    }\n\n    \/\/ \u2500\u2500 Display Suggestions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpDisplaySuggestions(suggestions) {\n      const container = document.getElementById('wpWritingAssistant');\n\n      if (!suggestions || !suggestions.length) {\n        container.innerHTML = `\n          <div class=\"text-center py-8\">\n            <i class=\"fas fa-check-circle text-green-500 text-4xl mb-2\"><\/i>\n            <p class=\"text-green-600 font-medium\">Great! No major issues detected.<\/p>\n          <\/div>`;\n        return;\n      }\n\n      container.innerHTML = suggestions.map(s => {\n        const border  = wpGetBorderColor(s.type);\n        const iconClr = wpGetIconColor(s.type);\n        return `\n          <div class=\"suggestion p-3 border-l-4 ${border} bg-gray-50 rounded-r\">\n            <div class=\"flex items-start\">\n              <i class=\"${s.icon} ${iconClr} mt-1 mr-3 flex-shrink-0\"><\/i>\n              <div class=\"flex-1 min-w-0\">\n                <h4 class=\"font-semibold text-gray-900 text-sm\">${s.title}<\/h4>\n                ${s.rawHTML\n                  ? s.rawHTML\n                  : `<p class=\"text-sm text-gray-600 mt-1\">${s.message}${s.extra || ''}<\/p>`\n                }\n              <\/div>\n            <\/div>\n          <\/div>`;\n      }).join('');\n    }\n\n    function wpGetBorderColor(type) {\n      return type === 'warning' ? 'border-yellow-400'\n           : type === 'error'   ? 'border-red-400'\n           : type === 'success' ? 'border-green-400'\n           :                      'border-blue-400';\n    }\n\n    function wpGetIconColor(type) {\n      return type === 'warning' ? 'text-yellow-500'\n           : type === 'error'   ? 'text-red-500'\n           : type === 'success' ? 'text-green-500'\n           :                      'text-blue-500';\n    }\n\n    \/\/ \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpDetectFillerWords(text) {\n      let count = 0;\n      const lower = (text || '').toLowerCase();\n      wpFillerWords.forEach(f => {\n        const m = lower.match(new RegExp(`\\\\b${wpEscapeRegExp(f)}\\\\b`, 'g'));\n        if (m) count += m.length;\n      });\n      return count;\n    }\n\n    function wpEscapeRegExp(s) {\n      return (s || '').replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\n    }\n\n    function wpSplitSentences(text) {\n      const t = (text || '').replace(\/\\s+\/g, ' ').trim();\n      if (!t) return [];\n      \/\/ keep punctuation when possible\n      return (t.match(\/[^.!?]+[.!?]+|[^.!?]+$\/g) || []).map(s => s.trim()).filter(Boolean);\n    }\n\n    function wpCountWords(s) {\n      return (s || '').trim().split(\/\\s+\/).filter(Boolean).length;\n    }\n\n    \/\/ \u2500\u2500 Progress \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpUpdateProgress() {\n      const wordCount = parseInt(document.getElementById('wpWordCount').textContent || '0', 10);\n      const wordGoal  = parseInt(document.getElementById('wpWordGoal').value || '10000', 10);\n      const pct       = Math.min((wordCount \/ Math.max(1, wordGoal)) * 100, 100);\n\n      document.getElementById('wpProgressBar').style.width = pct + '%';\n      document.getElementById('wpProgressText').textContent =\n        `${wordCount.toLocaleString()} \/ ${wordGoal.toLocaleString()} words (${pct.toFixed(1)}%)`;\n\n      const bar = document.getElementById('wpProgressBar');\n      bar.style.backgroundColor =\n        pct >= 100 ? '#059669' : pct >= 75 ? '#3b82f6' : pct >= 50 ? '#eab308' : '#ef4444';\n    }\n\n    \/\/ \u2500\u2500 Charts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpUpdateCharts() {\n      wpUpdateKeywordChart();\n      wpUpdateFrequencyChart();\n    }\n\n    function wpGetDataByType(type) {\n      switch (type) {\n        case 'phrases2': return { data: wpCurrentPhraseData2, label: '2-Word Phrases' };\n        case 'phrases3': return { data: wpCurrentPhraseData3, label: '3-Word Phrases' };\n        case 'phrases4': return { data: wpCurrentPhraseData4, label: '4-Word Phrases' };\n        case 'phrases5': return { data: wpCurrentPhraseData5, label: '5-Word Phrases' };\n        case 'phrases6': return { data: wpCurrentPhraseData6, label: '6-Word Phrases' };\n        case 'phrases7': return { data: wpCurrentPhraseData7, label: '7-Word Phrases' };\n        default:         return { data: wpCurrentWordData,    label: 'Words' };\n      }\n    }\n\n    function wpUpdateKeywordChart() {\n      const { data } = wpGetDataByType(\n        document.getElementById('wpKeywordChartType').value);\n\n      const sorted = Object.entries(data || {}).sort(([,a],[,b]) => b - a).slice(0, 5);\n      const canvas = document.getElementById('wpKeywordChart');\n      const ctx    = canvas.getContext('2d');\n\n      if (wpKeywordChart) wpKeywordChart.destroy();\n\n      if (!sorted.length) {\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n        ctx.fillStyle = '#374151'; ctx.font = '16px Arial';\n        ctx.textAlign = 'center';\n        ctx.fillText('No data available', canvas.width \/ 2, canvas.height \/ 2);\n        return;\n      }\n\n      wpKeywordChart = new Chart(ctx, {\n        type: 'pie',\n        data: {\n          labels: sorted.map(([item]) => item),\n          datasets: [{\n            data: sorted.map(([,count]) => count),\n            backgroundColor: ['#3B82F6','#10B981','#F59E0B','#EF4444','#8B5CF6'],\n            borderWidth: 2, borderColor: '#ffffff'\n          }]\n        },\n        options: {\n          responsive: true, maintainAspectRatio: false,\n          plugins: {\n            legend: { position: 'bottom', labels: { color: '#374151', padding: 20, font: { size: 12 } } },\n            tooltip: {\n              callbacks: {\n                label: ctx => {\n                  const total = ctx.dataset.data.reduce((a,b) => a+b, 0);\n                  const pct   = total ? ((ctx.parsed \/ total) * 100).toFixed(1) : '0.0';\n                  return `${ctx.label}: ${ctx.parsed} (${pct}%)`;\n                }\n              }\n            }\n          }\n        }\n      });\n    }\n\n    function wpUpdateFrequencyChart() {\n      const { data, label } = wpGetDataByType(\n        document.getElementById('wpFrequencyChartType').value);\n\n      const sorted = Object.entries(data || {}).sort(([,a],[,b]) => b - a).slice(0, 10);\n      const canvas = document.getElementById('wpFrequencyChart');\n      const ctx    = canvas.getContext('2d');\n\n      if (wpFrequencyChart) wpFrequencyChart.destroy();\n\n      if (!sorted.length) {\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n        ctx.fillStyle = '#374151'; ctx.font = '16px Arial';\n        ctx.textAlign = 'center';\n        ctx.fillText('No data available', canvas.width \/ 2, canvas.height \/ 2);\n        return;\n      }\n\n      wpFrequencyChart = new Chart(ctx, {\n        type: 'bar',\n        data: {\n          labels: sorted.map(([item]) => item),\n          datasets: [{\n            label: `${label} Frequency`,\n            data: sorted.map(([,count]) => count),\n            backgroundColor: '#3B82F6', borderColor: '#1D4ED8', borderWidth: 1\n          }]\n        },\n        options: {\n          responsive: true, maintainAspectRatio: false,\n          plugins: { legend: { labels: { color: '#374151' } } },\n          scales: {\n            y: { beginAtZero: true, ticks: { color: '#374151', stepSize: 1 }, grid: { color: '#e5e7eb' } },\n            x: { ticks: { color: '#374151', maxRotation: 45 }, grid: { color: '#e5e7eb' } }\n          }\n        }\n      });\n    }\n\n    \/\/ \u2500\u2500 Word Cloud \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpUpdateWordCloudType() { wpUpdateWordCloud(); }\n\n    function wpUpdateWordCloud() {\n      const cloudType = document.getElementById('wpWordCloudType').value;\n      const container = document.getElementById('wpWordCloud');\n\n      const pickTop = (obj, limit, type) =>\n        Object.entries(obj || {}).sort(([,a],[,b]) => b-a).slice(0, limit)\n          .map(([text, freq]) => ({ text, freq, type }));\n\n      let items = [];\n      if      (cloudType === 'words')    items = pickTop(wpCurrentWordData,    40, 'word');\n      else if (cloudType === 'phrases2') items = pickTop(wpCurrentPhraseData2, 30, 'phrase2');\n      else if (cloudType === 'phrases3') items = pickTop(wpCurrentPhraseData3, 30, 'phrase3');\n      else if (cloudType === 'phrases4') items = pickTop(wpCurrentPhraseData4, 30, 'phrase4');\n      else if (cloudType === 'phrases5') items = pickTop(wpCurrentPhraseData5, 30, 'phrase5');\n      else if (cloudType === 'phrases6') items = pickTop(wpCurrentPhraseData6, 30, 'phrase6');\n      else if (cloudType === 'phrases7') items = pickTop(wpCurrentPhraseData7, 30, 'phrase7');\n      else {\n        items = [\n          ...pickTop(wpCurrentWordData,    18, 'word'),\n          ...pickTop(wpCurrentPhraseData2, 10, 'phrase2'),\n          ...pickTop(wpCurrentPhraseData3,  8, 'phrase3'),\n          ...pickTop(wpCurrentPhraseData4,  6, 'phrase4'),\n          ...pickTop(wpCurrentPhraseData5,  5, 'phrase5'),\n          ...pickTop(wpCurrentPhraseData6,  4, 'phrase6'),\n          ...pickTop(wpCurrentPhraseData7,  3, 'phrase7')\n        ].sort((a,b) => b.freq - a.freq);\n      }\n\n      if (!items.length) {\n        container.innerHTML = `\n          <div class=\"text-gray-500 text-center w-full py-8\">\n            <i class=\"fas fa-cloud text-4xl mb-2\"><\/i>\n            <p>Word cloud will appear here as you type<\/p>\n          <\/div>`;\n        return;\n      }\n\n      const maxFreq = items[0].freq || 1;\n      container.innerHTML = items.map(({ text, freq, type }) => {\n        const size = Math.max(0.75, freq \/ maxFreq);\n        let cls = 'word-tag';\n        if (type === 'phrase2') cls += ' phrase-tag';\n        if (type === 'phrase3') cls += ' phrase4-tag';\n        if (type === 'phrase4') cls += ' phrase4-tag';\n        if (type === 'phrase5') cls += ' phrase5-tag';\n        if (type === 'phrase6') cls += ' phrase6-tag';\n        if (type === 'phrase7') cls += ' phrase7-tag';\n        const safe = text.replace(\/'\/g, \"\\\\'\");\n        return `<span class=\"${cls}\" style=\"font-size:${size}rem;\" title=\"${freq} occurrence(s)\"\n                      onclick=\"wpToggleHighlightTerm('${safe}')\">${text}<\/span>`;\n      }).join('');\n    }\n\n    \/\/ \u2500\u2500 Toggle Term Highlight (Top Words requirement) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpToggleHighlightTerm(searchTerm) {\n      const editor = document.getElementById('wpTextEditor');\n      const plain  = wpGetEditorPlainText();\n\n      if (!plain.toLowerCase().includes((searchTerm || '').toLowerCase())) {\n        wpShowNotification(`\"${searchTerm}\" not found in text`, 'info');\n        return;\n      }\n\n      if (wpIsPlainTextMode) {\n        wpShowNotification('Highlighting is not available in plain text mode', 'info');\n        return;\n      }\n\n      \/\/ If clicking same term again -> remove\n      if ((wpActiveHighlightTerm || '').toLowerCase() === (searchTerm || '').toLowerCase()) {\n        wpClearTermHighlights();\n        wpActiveHighlightTerm = \"\";\n        wpShowNotification(`Removed highlight`, 'info');\n        return;\n      }\n\n      \/\/ New term: clear any previous term highlights, then apply\n      wpClearTermHighlights();\n      wpActiveHighlightTerm = searchTerm;\n      wpApplyTermHighlight(searchTerm);\n\n      wpShowNotification(`Highlighted \"${searchTerm}\" (click again to remove)`, 'success');\n      editor.focus();\n    }\n\n    function wpApplyTermHighlight(term) {\n      const editor = document.getElementById('wpTextEditor');\n      const escaped = wpEscapeRegExp(term);\n      \/\/ word boundary around the whole term works for both words and phrases (spaces inside are fine)\n      const regex = new RegExp(`\\\\b(${escaped})\\\\b`, 'gi');\n\n      \/\/ NOTE: This keeps existing formatting in most typical cases, but is still a string-replace approach.\n      editor.innerHTML = editor.innerHTML.replace(regex, `<mark class=\"wp-hl-term\" data-wp-hl-term=\"1\">$1<\/mark>`);\n    }\n\n    function wpClearTermHighlights() {\n      const editor = document.getElementById('wpTextEditor');\n      const marks = editor.querySelectorAll('mark[data-wp-hl-term=\"1\"]');\n      marks.forEach(m => {\n        const t = document.createTextNode(m.textContent);\n        m.parentNode.replaceChild(t, m);\n      });\n      \/\/ merge adjacent text nodes (optional best-effort)\n      editor.normalize();\n    }\n\n    \/\/ \u2500\u2500 Sentence Highlights (Sentence Length Analyzer requirement) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpToggleSentenceHighlights(threshold) {\n      const editor = document.getElementById('wpTextEditor');\n\n      if (wpIsPlainTextMode) {\n        wpShowNotification('Sentence highlighting is not available in plain text mode', 'info');\n        return;\n      }\n\n      \/\/ toggle off if same threshold clicked\n      if (wpActiveSentenceThreshold === threshold) {\n        wpClearSentenceHighlights();\n        wpActiveSentenceThreshold = null;\n        wpAnalyzeText(); \/\/ refresh assistant UI pills active state\n        wpShowNotification('Removed sentence highlights', 'info');\n        return;\n      }\n\n      \/\/ turn on new threshold\n      wpClearSentenceHighlights();\n      wpActiveSentenceThreshold = threshold;\n\n      const text = wpGetEditorPlainText();\n      const sentences = wpSplitSentences(text);\n\n      const targets = sentences\n        .filter(s => wpCountWords(s) > threshold)\n        .sort((a,b) => b.length - a.length) \/\/ replace longer first to reduce partial overlaps\n        .slice(0, 50); \/\/ safety guard\n\n      if (!targets.length) {\n        wpShowNotification(`No sentences found over ${threshold} words`, 'info');\n        wpActiveSentenceThreshold = null;\n        wpAnalyzeText();\n        return;\n      }\n\n      const cls = threshold === 30 ? 'wp-sentence-hl-30' : 'wp-sentence-hl-20';\n\n      \/\/ best-effort string replace on HTML (works well for plain-ish editor content)\n      let html = editor.innerHTML;\n      targets.forEach(s => {\n        const esc = wpEscapeRegExp(s.trim());\n        if (!esc) return;\n        const re = new RegExp(`(${esc})`, 'g'); \/\/ case-sensitive on exact sentence text (stable)\n        html = html.replace(re, `<mark class=\"${cls}\" data-wp-sentence-hl=\"${threshold}\">$1<\/mark>`);\n      });\n      editor.innerHTML = html;\n\n      wpAnalyzeText(); \/\/ refresh assistant UI pills active state\n      wpShowNotification(`Highlighted sentences over ${threshold} words (click again to remove)`, 'success');\n      editor.focus();\n    }\n\n    function wpClearSentenceHighlights() {\n      const editor = document.getElementById('wpTextEditor');\n      const marks = editor.querySelectorAll('mark[data-wp-sentence-hl]');\n      marks.forEach(m => {\n        const t = document.createTextNode(m.textContent);\n        m.parentNode.replaceChild(t, m);\n      });\n      editor.normalize();\n    }\n\n    function wpClearAllHighlights() {\n      if (wpIsPlainTextMode) {\n        wpActiveHighlightTerm = \"\";\n        wpActiveSentenceThreshold = null;\n        return;\n      }\n      wpClearTermHighlights();\n      wpClearSentenceHighlights();\n      wpActiveHighlightTerm = \"\";\n      wpActiveSentenceThreshold = null;\n    }\n\n    \/\/ \u2500\u2500 Editor Utilities \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpFormatText(command) {\n      if (wpIsPlainTextMode) { wpShowNotification('Formatting not available in plain text mode', 'info'); return; }\n      document.execCommand(command, false, null);\n      document.getElementById('wpTextEditor').focus();\n      wpAnalyzeText();\n    }\n\n    function wpFormatHeading(tag) {\n      if (wpIsPlainTextMode) { wpShowNotification('Formatting not available in plain text mode', 'info'); return; }\n      if (tag) document.execCommand('formatBlock', false, tag);\n      document.getElementById('wpTextEditor').focus();\n      wpAnalyzeText();\n    }\n\n    function wpClearText() {\n      if (confirm('Are you sure you want to clear all text?')) {\n        wpClearAllHighlights();\n        document.getElementById('wpTextEditor').innerHTML = '';\n        wpAnalyzeText();\n      }\n    }\n\n    function wpCopyText() {\n      navigator.clipboard.writeText(wpGetEditorPlainText())\n        .then(()  => wpShowNotification('Text copied to clipboard!', 'success'))\n        .catch(()  => wpShowNotification('Failed to copy text', 'error'));\n    }\n\n    function wpDownloadText() {\n      const blob = new Blob([wpGetEditorPlainText()], { type: 'text\/plain' });\n      const url  = URL.createObjectURL(blob);\n      const a    = document.createElement('a');\n      a.href = url; a.download = 'text-analysis.txt'; a.click();\n      URL.revokeObjectURL(url);\n    }\n\n    \/\/ \u2500\u2500 Session Save \/ Load \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpSaveSession({ silent = false } = {}) {\n      const editor = document.getElementById('wpTextEditor');\n      const data = {\n        isPlainTextMode:    wpIsPlainTextMode,\n        wordGoal:           document.getElementById('wpWordGoal').value,\n        keywordChartType:   document.getElementById('wpKeywordChartType').value,\n        frequencyChartType: document.getElementById('wpFrequencyChartType').value,\n        wordCloudType:      document.getElementById('wpWordCloudType').value,\n        phraseLengthSelect: document.getElementById('wpPhraseLengthSelect').value,\n        timestamp:          new Date().toISOString(),\n        text: wpIsPlainTextMode ? (editor.textContent || '') : (editor.innerHTML || '')\n      };\n      localStorage.setItem('wpWordCounterSession', JSON.stringify(data));\n      if (!silent) wpShowNotification('Session saved successfully!', 'success');\n    }\n\n    function wpLoadSession() {\n      const saved = localStorage.getItem('wpWordCounterSession');\n      if (!saved) return;\n      try {\n        const data = JSON.parse(saved);\n        if (!data || typeof data.text !== 'string' || !data.text.trim()) return;\n\n        const editor = document.getElementById('wpTextEditor');\n        editor.innerHTML = data.text;\n\n        if (data.wordGoal)            document.getElementById('wpWordGoal').value = data.wordGoal;\n        if (data.keywordChartType)    document.getElementById('wpKeywordChartType').value = data.keywordChartType;\n        if (data.frequencyChartType)  document.getElementById('wpFrequencyChartType').value = data.frequencyChartType;\n        if (data.wordCloudType)       document.getElementById('wpWordCloudType').value = data.wordCloudType;\n\n        if (data.phraseLengthSelect) {\n          document.getElementById('wpPhraseLengthSelect').value = data.phraseLengthSelect;\n          wpActivePhraseKey = data.phraseLengthSelect;\n        }\n\n        \/\/ Ensure modes are applied cleanly (also clears any stale marks)\n        if (data.isPlainTextMode && !wpIsPlainTextMode) wpTogglePlainTextMode();\n\n        wpAnalyzeText();\n      } catch (e) { console.error('Session load error:', e); }\n    }\n\n    \/\/ Autosave every 30 s\n    setInterval(() => {\n      if (wpGetEditorPlainText().trim()) wpSaveSession({ silent: true });\n    }, 30000);\n\n    \/\/ \u2500\u2500 Notifications \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    function wpShowNotification(message, type = 'success') {\n      const bgColor = type === 'error' ? 'bg-red-500' : type === 'info' ? 'bg-blue-500' : 'bg-green-500';\n      const icon    = type === 'error' ? 'exclamation-triangle' : type === 'info' ? 'info-circle' : 'check-circle';\n      const el      = document.createElement('div');\n      el.className  = `notification ${bgColor}`;\n      el.innerHTML  = `<div class=\"flex items-center\"><i class=\"fas fa-${icon} mr-2\"><\/i><span class=\"text-sm\">${message}<\/span><\/div>`;\n      document.body.appendChild(el);\n      setTimeout(() => {\n        el.style.opacity = '0'; el.style.transform = 'translateY(-20px)';\n        setTimeout(() => { if (document.body.contains(el)) document.body.removeChild(el); }, 300);\n      }, 2500);\n    }\n  <\/script>\n\n\n\n\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <div class=\"text-gray-600\">\n\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4\">\n      <div class=\"bg-indigo-50 p-4 rounded-lg\">\n        <h3 class=\"font-medium text-indigo-700 mb-2\"><i class=\"fas fa-spell-check mr-2\"><\/i>Real-Time Word Counting<\/h3>\n        <p>Instantly track word count, character count, sentence count, and paragraph count as you type \u2014 no refresh needed.<\/p>\n      <\/div>\n      <div class=\"bg-pink-50 p-4 rounded-lg\">\n        <h3 class=\"font-medium text-pink-700 mb-2\"><i class=\"fas fa-search mr-2\"><\/i>Keyword Density Checker<\/h3>\n        <p>Monitor how frequently keywords appear in your content to maintain natural, SEO-friendly distribution without stuffing.<\/p>\n      <\/div>\n      <div class=\"bg-gray-50 p-4 rounded-lg\">\n        <h3 class=\"font-medium text-gray-700 mb-2\"><i class=\"fas fa-clock mr-2\"><\/i>Reading Time Calculator<\/h3>\n        <p>Estimate how long it takes readers to consume your content to improve engagement and structure blog posts effectively.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n      <div class=\"bg-red-50 p-4 rounded-lg\">\n        <h3 class=\"font-medium text-red-700 mb-2\"><i class=\"fas fa-ruler-horizontal mr-2\"><\/i><\/i>Sentence Length Analyzer<\/h3>\n        <p>Identify and refine long-winded sentences in real-time. WordNito flags segments over 20 or 30 words.<\/p>\n      <\/div>\n      <div class=\"bg-yellow-50 p-4 rounded-lg\">\n        <h3 class=\"font-medium text-yellow-800 mb-2\"><i class=\"fas fa-pen-nib mr-2\"><\/i>Writing Assistant<\/h3>\n        <p>Get filler word detection, readability scoring, and word variety analysis to refine your writing quality automatically.<\/p>\n      <\/div>\n      <div class=\"bg-green-50 p-4 rounded-lg\">\n        <h3 class=\"font-medium text-green-700 mb-2\"><i class=\"fas fa-shield-alt mr-2\"><\/i>100% Browser-Based Privacy<\/h3>\n        <p>All analysis runs locally in your browser. Your content is never stored, uploaded, or shared with any server.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- What is WordNito Section -->\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <h2 class=\"text-xl font-semibold text-gray-800 mb-4\">What is WordNito and How Does it Work?<\/h2>\n  <div class=\"text-gray-600\">\n    <p class=\"mb-4\">WordNito is a free online word counter and powerful real-time text analyzer designed to help writers, students, bloggers, marketers, and SEO professionals create better content with precision. Whether you are drafting a blog post, writing an academic essay, preparing a social media caption, or optimizing a web page, WordNito gives you instant insights into your text.<\/p>\n\n    <p class=\"mb-3\">At its core, WordNito functions as a <strong>character counter tool<\/strong>, <strong>word frequency tool<\/strong>, <strong>syllable counter<\/strong>, and <strong>reading time calculator<\/strong> \u2014 all in one streamlined interface. As you type or paste content into the editor, the tool instantly updates:<\/p>\n\n    <div class=\"grid grid-cols-2 md:grid-cols-3 gap-3 mb-5\">\n      <div class=\"flex items-center bg-gray-50 rounded-lg p-3\">\n        <i class=\"fas fa-check-circle text-indigo-500 mr-2\"><\/i>\n        <span class=\"text-sm font-medium text-gray-700\">Total word count<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-gray-50 rounded-lg p-3\">\n        <i class=\"fas fa-check-circle text-indigo-500 mr-2\"><\/i>\n        <span class=\"text-sm font-medium text-gray-700\">Character count (with &#038; without spaces)<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-gray-50 rounded-lg p-3\">\n        <i class=\"fas fa-check-circle text-indigo-500 mr-2\"><\/i>\n        <span class=\"text-sm font-medium text-gray-700\">Sentence &#038; paragraph count<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-gray-50 rounded-lg p-3\">\n        <i class=\"fas fa-check-circle text-indigo-500 mr-2\"><\/i>\n        <span class=\"text-sm font-medium text-gray-700\">Keyword density percentage<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-gray-50 rounded-lg p-3\">\n        <i class=\"fas fa-check-circle text-indigo-500 mr-2\"><\/i>\n        <span class=\"text-sm font-medium text-gray-700\">Estimated reading time<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-gray-50 rounded-lg p-3\">\n        <i class=\"fas fa-check-circle text-indigo-500 mr-2\"><\/i>\n        <span class=\"text-sm font-medium text-gray-700\">Writing quality metrics<\/span>\n      <\/div>\n    <\/div>\n\n    <p class=\"mb-4\">Because WordNito works in real time, there is no need to refresh or click multiple buttons. Every change you make is instantly reflected in the analytics panel. This speed and accuracy make it ideal for users who need quick feedback while writing.<\/p>\n\n    <div class=\"bg-indigo-50 border-l-4 border-indigo-500 p-4 rounded-r-lg\">\n      <p class=\"text-indigo-800 font-medium\"><i class=\"fas fa-lightbulb mr-2 text-indigo-500\"><\/i>Additionally, WordNito features an integrated <strong>Sentence Length Analyzer<\/strong> designed to boost your content\u2019s clarity and flow. By automatically highlighting sentences that exceed the 20 or 30-word threshold.<\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- Key Features Section -->\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <h2 class=\"text-xl font-semibold text-gray-800 mb-6\">Key Features of Our Online Word Counter<\/h2>\n\n  <!-- Feature 1 -->\n  <div class=\"mb-6 border border-gray-100 rounded-lg overflow-hidden\">\n    <div class=\"bg-indigo-600 px-5 py-3\">\n      <h3 class=\"text-white font-semibold text-lg\"><i class=\"fas fa-tachometer-alt mr-2\"><\/i>Real-Time Word &#038; Character Counting<\/h3>\n    <\/div>\n    <div class=\"p-5 text-gray-600\">\n      <p class=\"mb-4\">The foundation of WordNito is its highly accurate real-time word counter and character counter tool. Unlike basic counters that require manual refreshes, WordNito updates metrics instantly as you type.<\/p>\n      <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-indigo-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Accurate word detection using space and delimiter logic<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-indigo-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Counts characters with and without spaces<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-indigo-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Tracks sentences and paragraphs<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-indigo-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Identifies long and short sentence distribution<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-indigo-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Fast processing, even for long-form content<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Feature 2 -->\n  <div class=\"mb-6 border border-gray-100 rounded-lg overflow-hidden\">\n    <div class=\"bg-gray-600 px-5 py-3\">\n      <h3 class=\"text-white font-semibold text-lg\"><i class=\"fas fa-chart-bar mr-2\"><\/i>Advanced Keyword Density Analysis<\/h3>\n    <\/div>\n    <div class=\"p-5 text-gray-600\">\n      <p class=\"mb-4\">One of WordNito&#8217;s most valuable tools is its built-in keyword density checker. Keyword density refers to how frequently a keyword appears in relation to the total word count. While keywords are essential for SEO, excessive repetition can lead to keyword stuffing, which may negatively impact rankings and readability.<\/p>\n      <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-teal-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Calculates keyword frequency percentage<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-teal-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Displays top repeated words<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-teal-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Identifies overused terms<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-teal-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Helps maintain natural keyword distribution<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-teal-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Supports better content optimization<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Feature 3 -->\n  <div class=\"border border-gray-100 rounded-lg overflow-hidden\">\n    <div class=\"bg-pink-600 px-5 py-3\">\n      <h3 class=\"text-white font-semibold text-lg\"><i class=\"fas fa-user-edit mr-2\"><\/i>Estimated Reading Time &#038; Writing Assistant<\/h3>\n    <\/div>\n    <div class=\"p-5 text-gray-600\">\n      <p class=\"mb-4\">WordNito includes a built-in reading time calculator that estimates how long it will take to read your text based on average reading speeds. The Writing Assistant further helps you refine content with:<\/p>\n      <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-pink-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Filler word detection<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-pink-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Readability scoring<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-pink-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Word variety analysis<\/span>\n        <\/div>\n        <div class=\"flex items-start\">\n          <i class=\"fas fa-arrow-right text-pink-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n          <span>Suggestions for concise writing<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n\n<!-- Feature 4 -->\n<div class=\"mb-6 border border-gray-100 rounded-lg overflow-hidden\">\n  <div class=\"bg-red-500 px-5 py-3\">\n    <h3 class=\"text-white font-semibold text-lg\">\n      <i class=\"fas fa-ruler-horizontal mr-2\"><\/i>Sentence Length Analyzer\n    <\/h3>\n  <\/div>\n  <div class=\"p-5 text-gray-600\">\n    <p class=\"mb-4\">\n      WordNito scans your content and highlights long sentences that may reduce readability.\n      Currently, <strong>2 sentences are over 20 words<\/strong>, and <strong>1 sentence exceeds 30 words<\/strong>.\n      Consider breaking them into shorter sentences for better clarity and engagement.\n    <\/p>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-3 mb-4\">\n      <div class=\"flex items-start\">\n        <i class=\"fas fa-arrow-right text-red-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n        <span>Improves readability and user experience<\/span>\n      <\/div>\n      <div class=\"flex items-start\">\n        <i class=\"fas fa-arrow-right text-red-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n        <span>Reduces bounce rate on blog posts<\/span>\n      <\/div>\n      <div class=\"flex items-start\">\n        <i class=\"fas fa-arrow-right text-red-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n        <span>Helps meet SEO readability standards<\/span>\n      <\/div>\n      <div class=\"flex items-start\">\n        <i class=\"fas fa-arrow-right text-red-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n        <span>Identifies overly complex sentence structures<\/span>\n      <\/div>\n      <div class=\"flex items-start\">\n        <i class=\"fas fa-arrow-right text-red-400 mt-1 mr-2 flex-shrink-0\"><\/i>\n        <span>Enhances clarity for mobile readers<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"bg-red-50 border border-red-100 rounded-md p-4 text-sm\">\n      <p class=\"font-medium text-red-600 mb-1\">\n        Toggle Highlight:\n      <\/p>\n      <p class=\"text-gray-600\">\n        Click again to remove highlights from long sentences.\n      <\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n<\/div>\n\n<!-- Why Word Count Matters for SEO -->\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <h2 class=\"text-xl font-semibold text-gray-800 mb-4\">Why Word Count Matters for SEO?<\/h2>\n  <div class=\"text-gray-600\">\n    <p class=\"mb-5\">When it comes to search engine rankings, content length plays an important role. Studies consistently show that long-form content (1,000\u20132,000+ words) tends to rank better on Google because it:<\/p>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n      <div class=\"flex items-center bg-green-50 rounded-lg p-3\">\n        <div class=\"bg-green-100 rounded-full p-2 mr-3 flex-shrink-0\">\n          <i class=\"fas fa-layer-group text-green-600\"><\/i>\n        <\/div>\n        <span class=\"text-gray-700\">Covers topics more comprehensively<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-green-50 rounded-lg p-3\">\n        <div class=\"bg-green-100 rounded-full p-2 mr-3 flex-shrink-0\">\n          <i class=\"fas fa-hourglass-half text-green-600\"><\/i>\n        <\/div>\n        <span class=\"text-gray-700\">Increases dwell time<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-green-50 rounded-lg p-3\">\n        <div class=\"bg-green-100 rounded-full p-2 mr-3 flex-shrink-0\">\n          <i class=\"fas fa-key text-green-600\"><\/i>\n        <\/div>\n        <span class=\"text-gray-700\">Provides better keyword distribution<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-green-50 rounded-lg p-3\">\n        <div class=\"bg-green-100 rounded-full p-2 mr-3 flex-shrink-0\">\n          <i class=\"fas fa-external-link-alt text-green-600\"><\/i>\n        <\/div>\n        <span class=\"text-gray-700\">Attracts more backlinks<\/span>\n      <\/div>\n      <div class=\"flex items-center bg-green-50 rounded-lg p-3 md:col-span-2\">\n        <div class=\"bg-green-100 rounded-full p-2 mr-3 flex-shrink-0\">\n          <i class=\"fas fa-medal text-green-600\"><\/i>\n        <\/div>\n        <span class=\"text-gray-700\">Improves authority and depth<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"bg-indigo-50 rounded-lg p-5\">\n      <h3 class=\"font-semibold text-indigo-700 mb-3\"><i class=\"fas fa-tools mr-2\"><\/i>With WordNito, you can:<\/h3>\n      <div class=\"grid grid-cols-1 md:grid-cols-2 gap-2 text-gray-700\">\n        <div class=\"flex items-center\"><i class=\"fas fa-dot-circle text-indigo-400 mr-2 text-xs\"><\/i>Monitor your word count for SEO<\/div>\n        <div class=\"flex items-center\"><i class=\"fas fa-dot-circle text-indigo-400 mr-2 text-xs\"><\/i>Ensure ideal keyword density<\/div>\n        <div class=\"flex items-center\"><i class=\"fas fa-dot-circle text-indigo-400 mr-2 text-xs\"><\/i>Optimize meta description length<\/div>\n        <div class=\"flex items-center\"><i class=\"fas fa-dot-circle text-indigo-400 mr-2 text-xs\"><\/i>Maintain readability balance<\/div>\n        <div class=\"flex items-center\"><i class=\"fas fa-dot-circle text-indigo-400 mr-2 text-xs\"><\/i>Track content optimization metrics<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- Use Cases Section -->\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <h2 class=\"text-xl font-semibold text-gray-800 mb-6\">Use Cases for WordNito<\/h2>\n  <p class=\"text-gray-600 mb-5\">WordNito is designed for multiple types of users across different industries.<\/p>\n\n  <div class=\"grid grid-cols-1 md:grid-cols-3 gap-5\">\n    <!-- Academic Writing -->\n    <div class=\"rounded-lg overflow-hidden border border-gray-100 shadow-sm\">\n      <div class=\"bg-blue-600 p-4 text-center\">\n        <i class=\"fas fa-graduation-cap text-white text-3xl mb-2\"><\/i>\n        <h3 class=\"text-white font-semibold text-lg\">Academic Writing<\/h3>\n      <\/div>\n      <div class=\"p-4 text-gray-600 bg-blue-50\">\n        <p class=\"mb-3 text-sm\">Students often struggle with strict word limits for essays, dissertations, and research papers. WordNito helps by:<\/p>\n        <ul class=\"space-y-2 text-sm\">\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-blue-500 mr-2 mt-1 flex-shrink-0\"><\/i>Tracking exact word count<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-blue-500 mr-2 mt-1 flex-shrink-0\"><\/i>Monitoring character count<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-blue-500 mr-2 mt-1 flex-shrink-0\"><\/i>Checking readability<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-blue-500 mr-2 mt-1 flex-shrink-0\"><\/i>Improving writing clarity<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-blue-500 mr-2 mt-1 flex-shrink-0\"><\/i>Ensuring academic guideline compliance<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n\n    <!-- Social Media Managers -->\n    <div class=\"rounded-lg overflow-hidden border border-gray-100 shadow-sm\">\n      <div class=\"bg-pink-600 p-4 text-center\">\n        <i class=\"fas fa-hashtag text-white text-3xl mb-2\"><\/i>\n        <h3 class=\"text-white font-semibold text-lg\">Social Media Managers<\/h3>\n      <\/div>\n      <div class=\"p-4 text-gray-600 bg-pink-50\">\n        <p class=\"mb-3 text-sm\">Every platform has its own character restrictions. WordNito helps you stay within limits for:<\/p>\n        <ul class=\"space-y-2 text-sm\">\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-pink-500 mr-2 mt-1 flex-shrink-0\"><\/i>Twitter\/X character limits<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-pink-500 mr-2 mt-1 flex-shrink-0\"><\/i>LinkedIn post lengths<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-pink-500 mr-2 mt-1 flex-shrink-0\"><\/i>Instagram caption sizes<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-pink-500 mr-2 mt-1 flex-shrink-0\"><\/i>Meta description character limits<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-pink-500 mr-2 mt-1 flex-shrink-0\"><\/i>Crafting optimized ad copy<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n\n    <!-- SEO Copywriters -->\n    <div class=\"rounded-lg overflow-hidden border border-gray-100 shadow-sm\">\n      <div class=\"bg-green-600 p-4 text-center\">\n        <i class=\"fas fa-search-dollar text-white text-3xl mb-2\"><\/i>\n        <h3 class=\"text-white font-semibold text-lg\">SEO Copywriters<\/h3>\n      <\/div>\n      <div class=\"p-4 text-gray-600 bg-teal-50\">\n        <p class=\"mb-3 text-sm\">SEO professionals must balance multiple factors at once. WordNito simplifies the process of managing:<\/p>\n        <ul class=\"space-y-2 text-sm\">\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-teal-500 mr-2 mt-1 flex-shrink-0\"><\/i>Target keyword usage<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-teal-500 mr-2 mt-1 flex-shrink-0\"><\/i>Meta description length<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-teal-500 mr-2 mt-1 flex-shrink-0\"><\/i>Heading optimization<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-teal-500 mr-2 mt-1 flex-shrink-0\"><\/i>Word count for SEO targets<\/li>\n          <li class=\"flex items-start\"><i class=\"fas fa-check text-teal-500 mr-2 mt-1 flex-shrink-0\"><\/i>Content structure &#038; flow<\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- FAQ Section -->\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <h2 class=\"text-xl font-semibold text-gray-800 text-center mb-6\">Frequently Asked Questions (FAQs)<\/h2>\n  <div class=\"space-y-4\">\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">1<\/span>\n        <h3 class=\"font-medium text-gray-800\">Does WordNito save my text?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>No. WordNito does not store, save, or share your content. All analysis is performed in real time within your browser to ensure privacy and security.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">2<\/span>\n        <h3 class=\"font-medium text-gray-800\">How is the word count calculated?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>WordNito calculates word count by identifying spaces and delimiters (such as punctuation marks and line breaks) to determine individual words. Characters are counted both with and without spaces for accuracy.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">3<\/span>\n        <h3 class=\"font-medium text-gray-800\">What is the ideal word count for a blog post?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>For SEO purposes, blog posts typically perform best between <strong>1,000 and 2,000 words<\/strong>. However, the ideal length depends on competition and topic depth. WordNito helps you maintain this balance effectively.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">4<\/span>\n        <h3 class=\"font-medium text-gray-800\">How do I check keyword density with this tool?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>Simply type or paste your text into WordNito. The built-in keyword density checker automatically analyzes your content and displays keyword frequency percentages in real time.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">5<\/span>\n        <h3 class=\"font-medium text-gray-800\">Is there a limit to how much text I can paste?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>WordNito is optimized to handle long-form content efficiently. While extremely large documents may affect browser performance, typical blog posts, essays, and web content can be analyzed without issues.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">6<\/span>\n        <h3 class=\"font-medium text-gray-800\">Can WordNito help prevent keyword stuffing?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>Yes. By monitoring keyword density and word frequency, WordNito alerts you when certain words appear too frequently, helping maintain natural and reader-friendly content.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">7<\/span>\n        <h3 class=\"font-medium text-gray-800\">Does WordNito include a syllable counter?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>Yes. WordNito includes a syllable counter to help evaluate readability levels, making it easier to adjust your writing for different audiences.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"border border-gray-200 rounded-lg overflow-hidden\">\n      <div class=\"bg-gray-50 px-5 py-3 flex items-center\">\n        <span class=\"bg-green-600 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center mr-3 flex-shrink-0\">8<\/span>\n        <h3 class=\"font-medium text-gray-800\">Is WordNito completely free to use?<\/h3>\n      <\/div>\n      <div class=\"px-5 py-4 text-gray-600\">\n        <p>Yes. WordNito is a completely free online word counter with no hidden charges, making it accessible for students, bloggers, and professionals alike.<\/p>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<!-- Final Thoughts Section -->\n<div class=\"bg-white rounded-lg shadow-lg p-6 mb-8\">\n  <h2 class=\"text-xl font-semibold text-gray-800 text-center mb-4\">Final Thoughts<\/h2>\n  <div class=\"text-gray-600\">\n    <p class=\"mb-5 text-center max-w-2xl mx-auto\">WordNito is more than just a simple character counter tool. It is a comprehensive real-time text analyzer designed to improve writing clarity, SEO performance, and content optimization.<\/p>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-5\">\n      <div class=\"text-center bg-red-50 rounded-lg p-5\">\n        <i class=\"fas fa-bolt text-red-500 text-3xl mb-3\"><\/i>\n        <h3 class=\"font-semibold text-red-700 mb-2\">Speed<\/h3>\n        <p class=\"text-sm\">Instant real-time analytics update as you write \u2014 no delays, no refreshes required.<\/p>\n      <\/div>\n      <div class=\"text-center bg-blue-50 rounded-lg p-5\">\n        <i class=\"fas fa-bullseye text-blue-500 text-3xl mb-3\"><\/i>\n        <h3 class=\"font-semibold text-blue-700 mb-2\">Accuracy<\/h3>\n        <p class=\"text-sm\">Precise word, character, sentence, and keyword tracking you can rely on every time.<\/p>\n      <\/div>\n      <div class=\"text-center bg-green-50 rounded-lg p-5\">\n        <i class=\"fas fa-chart-line text-green-500 text-3xl mb-3\"><\/i>\n        <h3 class=\"font-semibold text-green-700 mb-2\">Advanced Analytics<\/h3>\n        <p class=\"text-sm\">Deep keyword density, readability scoring, and writing quality insights all in one place.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"bg-gradient-to-r from-green-600 to-gray-900 rounded-lg p-5 text-center\">\n      <p class=\"text-white font-medium text-lg\">By combining speed, accuracy, and advanced analytics, <strong>WordNito empowers users to write smarter, optimize better, and achieve their content goals efficiently.<\/strong><\/p>\n    <\/div>\n  <\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":352,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-346","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-text","infinite-scroll-item","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-33"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>WordNito | Free Online Word Counter, Character &amp; Text Analyzer<\/title>\n<meta name=\"description\" content=\"Use our wordnito word counter tool to count words, characters, sentences, and keyword density in real time. Analyze word phrases.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/oualator.com\/calculate\/wordnito\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WordNito | Free Online Word Counter, Character &amp; Text Analyzer\" \/>\n<meta property=\"og:description\" content=\"Use our wordnito word counter tool to count words, characters, sentences, and keyword density in real time. Analyze word phrases.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oualator.com\/calculate\/wordnito\/\" \/>\n<meta property=\"og:site_name\" content=\"Oualator\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-27T12:45:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-28T08:25:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/07\/wordnito.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"mikarmiaura\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"mikarmiaura\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/\"},\"author\":{\"name\":\"mikarmiaura\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/person\\\/4ea451aa69c0b6773dc729ab8e30a78a\"},\"headline\":\"WordNito | Real-Time Word Counter, Character &amp; Text Analyzer\",\"datePublished\":\"2026-02-27T12:45:00+00:00\",\"dateModified\":\"2026-02-28T08:25:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/\"},\"wordCount\":1370,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/wordnito.png\",\"articleSection\":[\"Text\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/\",\"name\":\"WordNito | Free Online Word Counter, Character & Text Analyzer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/wordnito.png\",\"datePublished\":\"2026-02-27T12:45:00+00:00\",\"dateModified\":\"2026-02-28T08:25:41+00:00\",\"description\":\"Use our wordnito word counter tool to count words, characters, sentences, and keyword density in real time. Analyze word phrases.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#primaryimage\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/wordnito.png\",\"contentUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/wordnito.png\",\"width\":1536,\"height\":1024,\"caption\":\"wordnito word counter\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wordnito\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WordNito | Real-Time Word Counter, Character &amp; Text Analyzer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#website\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/\",\"name\":\"Oualator\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#organization\",\"name\":\"Oualator\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/cropped-oualator-1.png\",\"contentUrl\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/cropped-oualator-1.png\",\"width\":500,\"height\":167,\"caption\":\"Oualator\"},\"image\":{\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/#\\\/schema\\\/person\\\/4ea451aa69c0b6773dc729ab8e30a78a\",\"name\":\"mikarmiaura\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"caption\":\"mikarmiaura\"},\"sameAs\":[\"https:\\\/\\\/oualator.com\\\/calculate\"],\"url\":\"https:\\\/\\\/oualator.com\\\/calculate\\\/author\\\/mikarmiaura\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WordNito | Free Online Word Counter, Character & Text Analyzer","description":"Use our wordnito word counter tool to count words, characters, sentences, and keyword density in real time. Analyze word phrases.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/oualator.com\/calculate\/wordnito\/","og_locale":"en_US","og_type":"article","og_title":"WordNito | Free Online Word Counter, Character & Text Analyzer","og_description":"Use our wordnito word counter tool to count words, characters, sentences, and keyword density in real time. Analyze word phrases.","og_url":"https:\/\/oualator.com\/calculate\/wordnito\/","og_site_name":"Oualator","article_published_time":"2026-02-27T12:45:00+00:00","article_modified_time":"2026-02-28T08:25:41+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/07\/wordnito.png","type":"image\/png"}],"author":"mikarmiaura","twitter_card":"summary_large_image","twitter_misc":{"Written by":"mikarmiaura","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oualator.com\/calculate\/wordnito\/#article","isPartOf":{"@id":"https:\/\/oualator.com\/calculate\/wordnito\/"},"author":{"name":"mikarmiaura","@id":"https:\/\/oualator.com\/calculate\/#\/schema\/person\/4ea451aa69c0b6773dc729ab8e30a78a"},"headline":"WordNito | Real-Time Word Counter, Character &amp; Text Analyzer","datePublished":"2026-02-27T12:45:00+00:00","dateModified":"2026-02-28T08:25:41+00:00","mainEntityOfPage":{"@id":"https:\/\/oualator.com\/calculate\/wordnito\/"},"wordCount":1370,"commentCount":0,"publisher":{"@id":"https:\/\/oualator.com\/calculate\/#organization"},"image":{"@id":"https:\/\/oualator.com\/calculate\/wordnito\/#primaryimage"},"thumbnailUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/07\/wordnito.png","articleSection":["Text"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oualator.com\/calculate\/wordnito\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oualator.com\/calculate\/wordnito\/","url":"https:\/\/oualator.com\/calculate\/wordnito\/","name":"WordNito | Free Online Word Counter, Character & Text Analyzer","isPartOf":{"@id":"https:\/\/oualator.com\/calculate\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oualator.com\/calculate\/wordnito\/#primaryimage"},"image":{"@id":"https:\/\/oualator.com\/calculate\/wordnito\/#primaryimage"},"thumbnailUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/07\/wordnito.png","datePublished":"2026-02-27T12:45:00+00:00","dateModified":"2026-02-28T08:25:41+00:00","description":"Use our wordnito word counter tool to count words, characters, sentences, and keyword density in real time. Analyze word phrases.","breadcrumb":{"@id":"https:\/\/oualator.com\/calculate\/wordnito\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oualator.com\/calculate\/wordnito\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/calculate\/wordnito\/#primaryimage","url":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/07\/wordnito.png","contentUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/07\/wordnito.png","width":1536,"height":1024,"caption":"wordnito word counter"},{"@type":"BreadcrumbList","@id":"https:\/\/oualator.com\/calculate\/wordnito\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oualator.com\/calculate\/"},{"@type":"ListItem","position":2,"name":"WordNito | Real-Time Word Counter, Character &amp; Text Analyzer"}]},{"@type":"WebSite","@id":"https:\/\/oualator.com\/calculate\/#website","url":"https:\/\/oualator.com\/calculate\/","name":"Oualator","description":"","publisher":{"@id":"https:\/\/oualator.com\/calculate\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oualator.com\/calculate\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/oualator.com\/calculate\/#organization","name":"Oualator","url":"https:\/\/oualator.com\/calculate\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/calculate\/#\/schema\/logo\/image\/","url":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/03\/cropped-oualator-1.png","contentUrl":"https:\/\/oualator.com\/calculate\/wp-content\/uploads\/2025\/03\/cropped-oualator-1.png","width":500,"height":167,"caption":"Oualator"},"image":{"@id":"https:\/\/oualator.com\/calculate\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/oualator.com\/calculate\/#\/schema\/person\/4ea451aa69c0b6773dc729ab8e30a78a","name":"mikarmiaura","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","caption":"mikarmiaura"},"sameAs":["https:\/\/oualator.com\/calculate"],"url":"https:\/\/oualator.com\/calculate\/author\/mikarmiaura\/"}]}},"_links":{"self":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts\/346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/comments?post=346"}],"version-history":[{"count":4,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts\/346\/revisions"}],"predecessor-version":[{"id":736,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/posts\/346\/revisions\/736"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/media\/352"}],"wp:attachment":[{"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/media?parent=346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/categories?post=346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oualator.com\/calculate\/wp-json\/wp\/v2\/tags?post=346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}