{"id":574,"date":"2026-03-07T15:19:49","date_gmt":"2026-03-07T15:19:49","guid":{"rendered":"https:\/\/primetoolhub.com\/?page_id=574"},"modified":"2026-07-04T05:25:16","modified_gmt":"2026-07-04T05:25:16","slug":"free-random-word-generator-nouns-verbs-adjectives","status":"publish","type":"page","link":"https:\/\/schoolict.net\/tools\/free-random-word-generator-nouns-verbs-adjectives\/","title":{"rendered":"Free Random Word Generator &#8211; Nouns, Verbs &amp; Adjectives"},"content":{"rendered":"\n<div class=\"pth-hero-section\">\n    <div class=\"pth-hero-content\">\n        <h2> Free Random Word Generator &#8211; Nouns, Verbs &amp; Adjectives<\/h2>\n        <p>Instantly generate random words, nouns, verbs, and adjectives offline. Customize outputs by word length and parts of speech with our free, secure tool.<\/p>\n\n        <div id=\"pth-toc-placeholder\"><\/div>\n    <\/div>\n\n      <div class=\"pth-hero-image\">\n    <img data-no-lazy=\"1\"\n         src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/06\/Random-Word-Generator-800x447.jpeg\"\n         width=\"800\"\n         height=\"447\"\n         alt=\"Random Word Generator\"\n         fetchpriority=\"high\"\n         loading=\"eager\"\n         decoding=\"async\"\n         style=\"width:100%; height:auto; display:block;\">\n  <\/div>\n<\/div>\n\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Table of Contents<\/h2><nav><ul><li><a href=\"#\ud83d\udd34-why-word-frequency-tiers-matter-for-writers-and-content-creators\">\ud83d\udd34 Why Word Frequency Tiers Matter for Writers and Content Creators<\/a><\/li><li><a href=\"#\ud83d\udfe1-lorem-ipsum-variants-when-to-use-each-placeholder-text-style\">\ud83d\udfe1 Lorem Ipsum Variants \u2014 When to Use Each Placeholder Text Style<\/a><ul><li><a href=\"#\ud83d\udfe2-how-the-sentence-structure-generator-works\">\ud83d\udfe2 How the Sentence Structure Generator Works<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n\n\n<style>\r\n\/* ============================================================\r\n   PTH ULTIMATE WORD STUDIO PRO \u2014 v2.0\r\n   PageSpeed 100 + WCAG 2.1 AA + WP\/LiteSpeed Safe\r\n   6 Tabs | 35 Tools | 100% Offline | Zero CDN\r\n   ============================================================ *\/\r\n#pth-word-wrapper {\r\n    font-family: 'Inter', system-ui, sans-serif;\r\n    width: 100%; max-width: 1400px; margin: 0 auto;\r\n    box-sizing: border-box; background: #f8fafc;\r\n    padding: 20px; border-radius: 16px; color: #1e293b;\r\n}\r\n#pth-word-wrapper * { box-sizing: border-box; min-width: 0; }\r\n#pth-word-wrapper h2,\r\n#pth-word-wrapper h3 { color: #0f172a; font-weight: 800; margin-top: 0; }\r\n#pth-word-wrapper .pth-tool-title { font-size: 24px; font-weight: 800; color: #1d4ed8; margin: 0; }\r\n\r\n\/* \u2500\u2500 Cards \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-card {\r\n    background: #fff; border: 1px solid #e2e8f0;\r\n    border-radius: 12px; padding: 18px; margin-bottom: 14px;\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.04);\r\n}\r\n#pth-word-wrapper .pth-card-hdr {\r\n    background: #f8fafc; margin: -18px -18px 14px -18px;\r\n    padding: 9px 14px; color: #1d4ed8; font-size: 11px;\r\n    border-bottom: 2px solid #eff6ff; font-weight: 800;\r\n    text-transform: uppercase; border-radius: 12px 12px 0 0;\r\n    letter-spacing: 0.5px;\r\n}\r\n\r\n\/* \u2500\u2500 Meta bar \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-tool-meta-bar {\r\n    display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 14px;\r\n}\r\n#pth-word-wrapper .pth-version-badge {\r\n    background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe;\r\n    font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 4px;\r\n}\r\n#pth-word-wrapper .pth-status-offline {\r\n    background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0;\r\n    font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 4px;\r\n}\r\n\r\n\/* \u2500\u2500 Layout \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-flex-layout {\r\n    display: grid; grid-template-columns: 1.8fr 1fr; gap: 18px; align-items: start;\r\n}\r\n#pth-word-wrapper .pth-flex-layout.pth-full-width { grid-template-columns: 100%; }\r\n\r\n\/* \u2500\u2500 Tabs \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-tabs-nav {\r\n    display: flex; gap: 3px; flex-wrap: wrap;\r\n    margin-bottom: 18px; border-bottom: 2px solid #e2e8f0;\r\n}\r\n#pth-word-wrapper .pth-tab-btn {\r\n    padding: 7px 12px; border-radius: 8px 8px 0 0;\r\n    font-size: 11px; font-weight: 700; cursor: pointer;\r\n    border: 2px solid transparent; border-bottom: none;\r\n    background: #f1f5f9; color: #334155;\r\n    transition: 0.15s; font-family: 'Inter', sans-serif;\r\n    margin-bottom: -2px; white-space: nowrap;\r\n}\r\n#pth-word-wrapper .pth-tab-btn:hover { background: #e2e8f0; color: #0f172a; }\r\n#pth-word-wrapper .pth-tab-btn.pth-active {\r\n    background: #fff; color: #1d4ed8;\r\n    border-color: #e2e8f0; border-bottom-color: #fff;\r\n}\r\n\r\n\/* \u2500\u2500 Buttons \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-btn {\r\n    padding: 8px 16px; border-radius: 8px; font-weight: 700;\r\n    cursor: pointer; border: none; font-family: 'Inter', sans-serif;\r\n    font-size: 12px; transition: 0.2s; display: inline-flex;\r\n    align-items: center; justify-content: center; gap: 5px;\r\n}\r\n#pth-word-wrapper .pth-btn-primary { background: #2563eb; color: #fff; }\r\n#pth-word-wrapper .pth-btn-primary:hover { background: #1d4ed8; }\r\n#pth-word-wrapper .pth-btn-secondary {\r\n    background: #f1f5f9; color: #334155; border: 1px solid #e2e8f0;\r\n}\r\n#pth-word-wrapper .pth-btn-secondary:hover { background: #e2e8f0; }\r\n#pth-word-wrapper .pth-btn-success { background: #059669; color: #fff; }\r\n#pth-word-wrapper .pth-btn-success:hover { background: #047857; }\r\n#pth-word-wrapper .pth-btn-danger {\r\n    background: #fef2f2; color: #991b1b; border: 1px solid #fecaca;\r\n}\r\n#pth-word-wrapper .pth-btn-danger:hover { background: #fee2e2; }\r\n#pth-word-wrapper .pth-btn-purple { background: #5b21b6; color: #fff; }\r\n#pth-word-wrapper .pth-btn-purple:hover { background: #4c1d95; }\r\n#pth-word-wrapper .pth-sample-btn {\r\n    background: #d1fae5; color: #047857; border: 1px solid #10b981;\r\n    font-size: 0.7rem; padding: 3px 8px; border-radius: 5px;\r\n    font-weight: 700; cursor: pointer; transition: 0.2s;\r\n    display: inline-flex; align-items: center; gap: 4px;\r\n}\r\n#pth-word-wrapper .pth-sample-btn:hover { background: #a7f3d0; }\r\n\r\n\/* \u2500\u2500 Form elements \u2500\u2500 *\/\r\n#pth-word-wrapper label {\r\n    font-weight: 700; color: #0f172a; margin-bottom: 4px;\r\n    display: block; font-size: 11px;\r\n    text-transform: uppercase; letter-spacing: 0.4px;\r\n}\r\n#pth-word-wrapper input[type=\"text\"],\r\n#pth-word-wrapper input[type=\"number\"],\r\n#pth-word-wrapper select,\r\n#pth-word-wrapper textarea {\r\n    width: 100%; padding: 8px 10px; border: 2px solid #e2e8f0;\r\n    border-radius: 7px; font-family: 'Inter', sans-serif;\r\n    font-size: 12px; color: #0f172a; background: #fff; transition: 0.2s;\r\n}\r\n#pth-word-wrapper input:focus,\r\n#pth-word-wrapper select:focus,\r\n#pth-word-wrapper textarea:focus {\r\n    border-color: #3b82f6; outline: none;\r\n    box-shadow: 0 0 0 3px rgba(59,130,246,0.1);\r\n}\r\n#pth-word-wrapper textarea { resize: vertical; min-height: 80px; line-height: 1.6; }\r\n#pth-word-wrapper .pth-field { margin-bottom: 12px; }\r\n#pth-word-wrapper .pth-row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }\r\n#pth-word-wrapper .pth-row-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; }\r\n\r\n\/* \u2500\u2500 Checkboxes (POS) \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-check-row {\r\n    display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px;\r\n}\r\n#pth-word-wrapper .pth-check-label {\r\n    display: flex; align-items: center; gap: 5px;\r\n    font-size: 12px; font-weight: 600; color: #1e293b;\r\n    cursor: pointer; padding: 4px 10px;\r\n    border: 2px solid #e2e8f0; border-radius: 6px;\r\n    background: #f8fafc; transition: 0.15s; user-select: none;\r\n}\r\n#pth-word-wrapper .pth-check-label:hover { border-color: #2563eb; }\r\n#pth-word-wrapper .pth-check-label input[type=\"checkbox\"] {\r\n    width: 13px; height: 13px; cursor: pointer;\r\n    accent-color: #2563eb; flex-shrink: 0;\r\n}\r\n#pth-word-wrapper .pth-check-label.pth-checked {\r\n    border-color: #2563eb; background: #eff6ff; color: #1d4ed8;\r\n}\r\n\r\n\/* \u2500\u2500 Output areas \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-output-area {\r\n    background: #0f172a; color: #4ade80;\r\n    font-family: 'Courier New', monospace; font-size: 12px;\r\n    border-radius: 10px; padding: 14px; min-height: 160px;\r\n    max-height: 360px; overflow-y: auto; line-height: 1.7;\r\n    border: 2px solid #1e293b; white-space: pre-wrap; word-break: break-word;\r\n}\r\n#pth-word-wrapper .pth-output-light {\r\n    background: #f8fafc; color: #0f172a;\r\n    font-family: 'Inter', monospace; font-size: 13px;\r\n    border-radius: 10px; padding: 14px; min-height: 120px;\r\n    max-height: 400px; overflow-y: auto; line-height: 1.8;\r\n    border: 2px solid #e2e8f0;\r\n}\r\n\r\n\/* \u2500\u2500 Word pills (alliteration\/rhyme display) \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-word-pills {\r\n    display: flex; flex-wrap: wrap; gap: 6px; padding: 14px;\r\n    background: #f8fafc; border: 2px solid #e2e8f0; border-radius: 10px;\r\n    min-height: 60px;\r\n}\r\n#pth-word-wrapper .pth-pill {\r\n    background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe;\r\n    padding: 3px 10px; border-radius: 20px; font-size: 12px;\r\n    font-weight: 700; cursor: pointer; transition: 0.15s;\r\n}\r\n#pth-word-wrapper .pth-pill:hover { background: #dbeafe; }\r\n#pth-word-wrapper .pth-pill-green { background: #f0fdf4; color: #047857; border-color: #bbf7d0; }\r\n#pth-word-wrapper .pth-pill-purple { background: #faf5ff; color: #5b21b6; border-color: #ddd6fe; }\r\n#pth-word-wrapper .pth-pill-red { background: #fef2f2; color: #991b1b; border-color: #fecaca; }\r\n\r\n\/* \u2500\u2500 Prompt cards \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-prompt-card {\r\n    background: linear-gradient(135deg,#eff6ff,#f0fdf4);\r\n    border: 1px solid #bfdbfe; border-radius: 12px;\r\n    padding: 18px; margin-bottom: 10px;\r\n}\r\n#pth-word-wrapper .pth-prompt-type-badge {\r\n    font-size: 10px; font-weight: 800; text-transform: uppercase;\r\n    letter-spacing: 0.5px; padding: 2px 8px; border-radius: 4px;\r\n    display: inline-block; margin-bottom: 8px;\r\n    background: #1d4ed8; color: #fff;\r\n}\r\n#pth-word-wrapper .pth-prompt-text {\r\n    font-size: 14px; font-weight: 600; color: #0f172a; line-height: 1.6;\r\n}\r\n\r\n\/* \u2500\u2500 Stats table \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-stats-grid {\r\n    display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px;\r\n}\r\n#pth-word-wrapper .pth-stat-box {\r\n    background: #f8fafc; border: 1px solid #e2e8f0;\r\n    border-radius: 10px; padding: 12px; text-align: center;\r\n}\r\n#pth-word-wrapper .pth-stat-num {\r\n    font-size: 24px; font-weight: 800; color: #1d4ed8;\r\n    display: block; margin-bottom: 3px;\r\n}\r\n#pth-word-wrapper .pth-stat-lbl {\r\n    font-size: 10px; font-weight: 700; color: #334155;\r\n    text-transform: uppercase; letter-spacing: 0.4px;\r\n}\r\n#pth-word-wrapper .pth-freq-row {\r\n    display: flex; align-items: center; gap: 8px;\r\n    padding: 5px 0; border-bottom: 1px solid #f1f5f9;\r\n}\r\n#pth-word-wrapper .pth-freq-word {\r\n    font-weight: 700; color: #0f172a; min-width: 90px; font-size: 12px;\r\n}\r\n#pth-word-wrapper .pth-freq-bar-bg {\r\n    flex: 1; height: 8px; background: #e2e8f0; border-radius: 4px; overflow: hidden;\r\n}\r\n#pth-word-wrapper .pth-freq-bar-fill {\r\n    height: 100%; background: #2563eb; border-radius: 4px; transition: 0.3s;\r\n}\r\n#pth-word-wrapper .pth-freq-count {\r\n    font-size: 11px; font-weight: 700; color: #1d4ed8;\r\n    min-width: 30px; text-align: right;\r\n}\r\n\r\n\/* \u2500\u2500 Live count badge \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-live-count-badge {\r\n    display: inline-flex; align-items: center; gap: 5px;\r\n    background: #eff6ff; color: #1d4ed8; border: 1px solid #bfdbfe;\r\n    padding: 3px 10px; border-radius: 20px;\r\n    font-size: 11px; font-weight: 800;\r\n}\r\n\r\n\/* \u2500\u2500 Toast \u2500\u2500 *\/\r\n#pth-word-toast {\r\n    position: fixed; bottom: 24px; right: 24px; z-index: 9999;\r\n    display: flex; flex-direction: column; gap: 10px; pointer-events: none;\r\n}\r\n.pth-toast-msg {\r\n    padding: 10px 18px; border-radius: 10px; font-size: 13px;\r\n    font-weight: 600; color: #fff; pointer-events: auto;\r\n    box-shadow: 0 4px 15px rgba(0,0,0,0.15);\r\n    font-family: 'Inter', system-ui, sans-serif;\r\n}\r\n.pth-toast-success { background: #059669; }\r\n.pth-toast-error   { background: #dc2626; }\r\n.pth-toast-info    { background: #2563eb; }\r\n\r\n\/* \u2500\u2500 Sidebar \u2500\u2500 *\/\r\n#pth-word-wrapper .pth-sb-hdr {\r\n    background: #f8fafc; margin: -18px -18px 14px -18px;\r\n    padding: 9px 14px; color: #1d4ed8; font-size: 11px;\r\n    border-bottom: 2px solid #eff6ff; font-weight: 800;\r\n    text-transform: uppercase; border-radius: 12px 12px 0 0;\r\n    letter-spacing: 0.5px;\r\n}\r\n\r\n\/* \u2500\u2500 Mobile \u2500\u2500 *\/\r\n@media (max-width: 768px) {\r\n    #pth-word-wrapper { padding: 10px; border-radius: 0; background: transparent; }\r\n    #pth-word-wrapper .pth-card { padding: 12px; margin-bottom: 10px; }\r\n    #pth-word-wrapper .pth-flex-layout { grid-template-columns: 100% !important; gap: 10px; }\r\n    #pth-word-wrapper .pth-tool-title { font-size: 18px; }\r\n    #pth-word-wrapper .pth-row-2 { grid-template-columns: 1fr; }\r\n    #pth-word-wrapper .pth-row-3 { grid-template-columns: 1fr 1fr; }\r\n    #pth-word-wrapper .pth-tabs-nav { gap: 2px; }\r\n    #pth-word-wrapper .pth-tab-btn { font-size: 10px; padding: 5px 8px; }\r\n    #pth-word-wrapper .pth-stats-grid { grid-template-columns: 1fr 1fr; }\r\n}\r\n<\/style>\r\n\r\n<div id=\"pth-word-toast\" role=\"status\" aria-live=\"polite\"><\/div>\r\n\r\n<div id=\"pth-word-wrapper\">\r\n<div class=\"pth-flex-layout\" id=\"pth-word-layout\">\r\n\r\n<div>\r\n<div class=\"pth-card\">\r\n\r\n    <div style=\"display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px;flex-wrap:wrap;gap:8px;\">\r\n        <h2 class=\"pth-tool-title\">\ud83d\udcdd Ultimate Word Studio Pro<\/h2>\r\n        <button class=\"pth-btn pth-btn-secondary\" id=\"pth-word-fw-btn\" aria-label=\"Toggle full width\">\u26f6 Full Width<\/button>\r\n    <\/div>\r\n    <div class=\"pth-tool-meta-bar\">\r\n        <span class=\"pth-version-badge\">v2.0<\/span>\r\n        <span class=\"pth-status-offline\">\ud83d\udd12 100% Offline<\/span>\r\n        <span style=\"font-size:10px;font-weight:700;color:#334155;\">6 Tabs \u00b7 35 Tools \u00b7 1200+ Words<\/span>\r\n    <\/div>\r\n    <div style=\"display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;\">\r\n        <button class=\"pth-sample-btn\" id=\"pth-word-sample-btn\" aria-label=\"Load sample\">\ud83d\udca1 Load Sample<\/button>\r\n        <button class=\"pth-btn pth-btn-danger\" id=\"pth-word-clear-btn\"\r\n            style=\"font-size:0.7rem;padding:3px 8px;border-radius:5px;\" aria-label=\"Clear all\">\ud83d\uddd1\ufe0f Clear<\/button>\r\n        <span class=\"pth-live-count-badge\" id=\"pth-live-badge\">0 Items<\/span>\r\n    <\/div>\r\n\r\n    <div class=\"pth-tabs-nav\" role=\"tablist\">\r\n        <button class=\"pth-tab-btn pth-active\" data-tab=\"words\"\r\n            role=\"tab\" aria-selected=\"true\" aria-label=\"Random Words Generator\">\ud83d\udcdd Words<\/button>\r\n        <button class=\"pth-tab-btn\" data-tab=\"sentences\"\r\n            role=\"tab\" aria-selected=\"false\" aria-label=\"Random Sentences Generator\">\ud83d\udcac Sentences<\/button>\r\n        <button class=\"pth-tab-btn\" data-tab=\"lorem\"\r\n            role=\"tab\" aria-selected=\"false\" aria-label=\"Lorem Ipsum Generator\">\ud83d\udcc4 Lorem+<\/button>\r\n        <button class=\"pth-tab-btn\" data-tab=\"toolkit\"\r\n            role=\"tab\" aria-selected=\"false\" aria-label=\"Word Toolkit\">\ud83d\udd27 Toolkit<\/button>\r\n        <button class=\"pth-tab-btn\" data-tab=\"prompts\"\r\n            role=\"tab\" aria-selected=\"false\" aria-label=\"Creative Writing Prompts\">\u270d\ufe0f Prompts<\/button>\r\n        <button class=\"pth-tab-btn\" data-tab=\"stats\"\r\n            role=\"tab\" aria-selected=\"false\" aria-label=\"Word Statistics\">\ud83d\udcca Stats<\/button>\r\n    <\/div>\r\n\r\n    <div id=\"pth-tab-words\" role=\"tabpanel\">\r\n        <div class=\"pth-card\">\r\n            <div class=\"pth-card-hdr\">\ud83d\udcdd Random Word Generator \u2014 1200+ Word Lexicon<\/div>\r\n\r\n            <div class=\"pth-field\">\r\n                <label>Parts of Speech <span style=\"color:#047857;font-weight:500;text-transform:none;\">(select one or more)<\/span><\/label>\r\n                <div class=\"pth-check-row\" id=\"pth-pos-row\" role=\"group\" aria-label=\"Parts of speech selector\">\r\n                    <label class=\"pth-check-label pth-checked\" for=\"pth-pos-nouns\">\r\n                        <input type=\"checkbox\" id=\"pth-pos-nouns\" value=\"nouns\" checked aria-label=\"Include nouns\">Nouns\r\n                    <\/label>\r\n                    <label class=\"pth-check-label pth-checked\" for=\"pth-pos-verbs\">\r\n                        <input type=\"checkbox\" id=\"pth-pos-verbs\" value=\"verbs\" checked aria-label=\"Include verbs\">Verbs\r\n                    <\/label>\r\n                    <label class=\"pth-check-label pth-checked\" for=\"pth-pos-adjectives\">\r\n                        <input type=\"checkbox\" id=\"pth-pos-adjectives\" value=\"adjectives\" checked aria-label=\"Include adjectives\">Adjectives\r\n                    <\/label>\r\n                    <label class=\"pth-check-label\" for=\"pth-pos-adverbs\">\r\n                        <input type=\"checkbox\" id=\"pth-pos-adverbs\" value=\"adverbs\" aria-label=\"Include adverbs\">Adverbs\r\n                    <\/label>\r\n                    <label class=\"pth-check-label\" for=\"pth-pos-pronouns\">\r\n                        <input type=\"checkbox\" id=\"pth-pos-pronouns\" value=\"pronouns\" aria-label=\"Include pronouns\">Pronouns\r\n                    <\/label>\r\n                    <label class=\"pth-check-label\" for=\"pth-pos-prepositions\">\r\n                        <input type=\"checkbox\" id=\"pth-pos-prepositions\" value=\"prepositions\" aria-label=\"Include prepositions\">Prepositions\r\n                    <\/label>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"pth-row-3\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-word-count-in\">Word Count<\/label>\r\n                    <input type=\"number\" id=\"pth-word-count-in\" value=\"20\" min=\"1\" max=\"1000\"\r\n                        aria-label=\"Number of words to generate\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-min-len\">Min Letters<\/label>\r\n                    <input type=\"number\" id=\"pth-min-len\" value=\"2\" min=\"1\" max=\"20\"\r\n                        aria-label=\"Minimum word length\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-max-len\">Max Letters<\/label>\r\n                    <input type=\"number\" id=\"pth-max-len\" value=\"14\" min=\"1\" max=\"20\"\r\n                        aria-label=\"Maximum word length\">\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"pth-row-3\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-starts-with\">Starts With <span style=\"color:#334155;font-weight:500;text-transform:none;\">(optional)<\/span><\/label>\r\n                    <input type=\"text\" id=\"pth-starts-with\" maxlength=\"3\" placeholder=\"e.g. s\"\r\n                        aria-label=\"Filter words starting with letter\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-ends-with\">Ends With <span style=\"color:#334155;font-weight:500;text-transform:none;\">(optional)<\/span><\/label>\r\n                    <input type=\"text\" id=\"pth-ends-with\" maxlength=\"3\" placeholder=\"e.g. ing\"\r\n                        aria-label=\"Filter words ending with letters\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-word-freq\">Word Frequency<\/label>\r\n                    <select id=\"pth-word-freq\" aria-label=\"Word frequency filter\">\r\n                        <option value=\"all\">All Words<\/option>\r\n                        <option value=\"common\">Common<\/option>\r\n                        <option value=\"uncommon\">Uncommon<\/option>\r\n                        <option value=\"rare\">Rare<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"pth-row-2\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-word-format\">Output Format<\/label>\r\n                    <select id=\"pth-word-format\" aria-label=\"Output format selector\">\r\n                        <option value=\"line\">One Per Line<\/option>\r\n                        <option value=\"comma\">Comma Separated<\/option>\r\n                        <option value=\"space\">Space Separated<\/option>\r\n                        <option value=\"json\">JSON Array<\/option>\r\n                        <option value=\"numbered\">Numbered List<\/option>\r\n                        <option value=\"bullets\">Bullet List<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-word-case\">Word Case<\/label>\r\n                    <select id=\"pth-word-case\" aria-label=\"Word case transformer\">\r\n                        <option value=\"lower\">lowercase<\/option>\r\n                        <option value=\"upper\">UPPERCASE<\/option>\r\n                        <option value=\"title\">Title Case<\/option>\r\n                        <option value=\"random\">rAnDoM cAsE<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div style=\"display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap;\">\r\n                <label style=\"text-transform:none;font-size:12px;font-weight:600;color:#1e293b;display:flex;align-items:center;gap:6px;cursor:pointer;\" for=\"pth-unique-only\">\r\n                    <input type=\"checkbox\" id=\"pth-unique-only\" checked style=\"width:14px;height:14px;accent-color:#2563eb;cursor:pointer;\" aria-label=\"Generate unique words only\">\r\n                    Unique words only (no repeats)\r\n                <\/label>\r\n            <\/div>\r\n\r\n            <button class=\"pth-btn pth-btn-primary\" id=\"pth-gen-words-btn\"\r\n                style=\"width:100%;padding:12px;font-size:14px;\" aria-label=\"Generate random words\">\r\n                \u26a1 Generate Words\r\n            <\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"pth-tab-sentences\" style=\"display:none;\" role=\"tabpanel\">\r\n        <div class=\"pth-card\">\r\n            <div class=\"pth-card-hdr\">\ud83d\udcac Random Sentence Generator<\/div>\r\n            <div class=\"pth-row-2\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-sent-count\">Sentence Count<\/label>\r\n                    <input type=\"number\" id=\"pth-sent-count\" value=\"5\" min=\"1\" max=\"50\"\r\n                        aria-label=\"Number of sentences to generate\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-sent-tense\">Tense<\/label>\r\n                    <select id=\"pth-sent-tense\" aria-label=\"Sentence tense\">\r\n                        <option value=\"present\">Present<\/option>\r\n                        <option value=\"past\">Past<\/option>\r\n                        <option value=\"future\">Future<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"pth-row-2\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-sent-style\">Sentence Style<\/label>\r\n                    <select id=\"pth-sent-style\" aria-label=\"Sentence structure style\">\r\n                        <option value=\"simple\">Simple (S + V + O)<\/option>\r\n                        <option value=\"descriptive\">Descriptive (Adj + S + V + O)<\/option>\r\n                        <option value=\"compound\">Compound (two clauses)<\/option>\r\n                        <option value=\"adverb\">With Adverb<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-sent-topic\">Topic Focus<\/label>\r\n                    <select id=\"pth-sent-topic\" aria-label=\"Sentence topic theme\">\r\n                        <option value=\"all\">Mixed<\/option>\r\n                        <option value=\"nature\">Nature<\/option>\r\n                        <option value=\"business\">Business<\/option>\r\n                        <option value=\"tech\">Technology<\/option>\r\n                        <option value=\"people\">People<\/option>\r\n                        <option value=\"abstract\">Abstract<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n            <button class=\"pth-btn pth-btn-primary\" id=\"pth-gen-sentences-btn\"\r\n                style=\"width:100%;padding:12px;font-size:14px;\" aria-label=\"Generate random sentences\">\r\n                \u26a1 Generate Sentences\r\n            <\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"pth-tab-lorem\" style=\"display:none;\" role=\"tabpanel\">\r\n        <div class=\"pth-card\">\r\n            <div class=\"pth-card-hdr\">\ud83d\udcc4 Lorem Ipsum+ Generator<\/div>\r\n            <div class=\"pth-row-2\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-lorem-type\">Lorem Type<\/label>\r\n                    <select id=\"pth-lorem-type\" aria-label=\"Lorem Ipsum variant type\">\r\n                        <option value=\"classic\">Classic Lorem Ipsum<\/option>\r\n                        <option value=\"english\">Scrambled Real English<\/option>\r\n                        <option value=\"hipster\">Hipster Ipsum<\/option>\r\n                        <option value=\"tech\">Tech Jargon Ipsum<\/option>\r\n                        <option value=\"nature\">Nature Ipsum<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-lorem-unit\">Generate<\/label>\r\n                    <select id=\"pth-lorem-unit\" aria-label=\"Lorem generation unit\">\r\n                        <option value=\"paragraphs\">Paragraphs<\/option>\r\n                        <option value=\"sentences\">Sentences<\/option>\r\n                        <option value=\"words\">Words<\/option>\r\n                        <option value=\"bytes\">Bytes (~chars)<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n            <div class=\"pth-row-2\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-lorem-count\">Count<\/label>\r\n                    <input type=\"number\" id=\"pth-lorem-count\" value=\"3\" min=\"1\" max=\"20\"\r\n                        aria-label=\"Number of lorem units to generate\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-lorem-start\">Start With<\/label>\r\n                    <select id=\"pth-lorem-start\" aria-label=\"Lorem start behavior\">\r\n                        <option value=\"lorem\">Start with Lorem ipsum...<\/option>\r\n                        <option value=\"random\">Random start<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n            <\/div>\r\n            <div style=\"margin-bottom:12px;\">\r\n                <label style=\"text-transform:none;font-size:12px;font-weight:600;color:#1e293b;display:flex;align-items:center;gap:6px;cursor:pointer;\" for=\"pth-lorem-html\">\r\n                    <input type=\"checkbox\" id=\"pth-lorem-html\" style=\"width:14px;height:14px;accent-color:#2563eb;cursor:pointer;\" aria-label=\"Wrap output in HTML paragraph tags\">\r\n                    Wrap in &lt;p&gt; HTML tags\r\n                <\/label>\r\n            <\/div>\r\n            <button class=\"pth-btn pth-btn-primary\" id=\"pth-gen-lorem-btn\"\r\n                style=\"width:100%;padding:12px;font-size:14px;\" aria-label=\"Generate lorem ipsum text\">\r\n                \u26a1 Generate Lorem Ipsum\r\n            <\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"pth-tab-toolkit\" style=\"display:none;\" role=\"tabpanel\">\r\n        <div class=\"pth-card\">\r\n            <div class=\"pth-card-hdr\">\ud83d\udd27 Word Toolkit<\/div>\r\n\r\n            <div style=\"display:flex;gap:5px;flex-wrap:wrap;margin-bottom:14px;\" role=\"group\" aria-label=\"Toolkit tool selector\">\r\n                <button class=\"pth-tab-btn pth-active\" data-tool=\"alliteration\" aria-label=\"Alliteration generator\" aria-pressed=\"true\">\ud83d\udd24 Alliteration<\/button>\r\n                <button class=\"pth-tab-btn\" data-tool=\"scramble\" aria-label=\"Word scrambler\" aria-pressed=\"false\">\ud83d\udd00 Scramble<\/button>\r\n                <button class=\"pth-tab-btn\" data-tool=\"acronym\" aria-label=\"Acronym builder\" aria-pressed=\"false\">\ud83c\udd70\ufe0f Acronym<\/button>\r\n                <button class=\"pth-tab-btn\" data-tool=\"stopwords\" aria-label=\"Stop words remover\" aria-pressed=\"false\">\ud83d\udeab Stop Words<\/button>\r\n            <\/div>\r\n\r\n            <div id=\"pth-tool-alliteration\">\r\n                <div class=\"pth-row-2\">\r\n                    <div class=\"pth-field\">\r\n                        <label for=\"pth-allit-letter\">Starting Letter<\/label>\r\n                        <select id=\"pth-allit-letter\" aria-label=\"Starting letter for alliteration\">\r\n                            <option value=\"random\">Random<\/option>\r\n                            <option value=\"a\">A<\/option><option value=\"b\">B<\/option>\r\n                            <option value=\"c\">C<\/option><option value=\"d\">D<\/option>\r\n                            <option value=\"e\">E<\/option><option value=\"f\">F<\/option>\r\n                            <option value=\"g\">G<\/option><option value=\"h\">H<\/option>\r\n                            <option value=\"m\">M<\/option><option value=\"n\">N<\/option>\r\n                            <option value=\"p\">P<\/option><option value=\"r\">R<\/option>\r\n                            <option value=\"s\">S<\/option><option value=\"t\">T<\/option>\r\n                            <option value=\"w\">W<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                    <div class=\"pth-field\">\r\n                        <label for=\"pth-allit-count\">Word Count<\/label>\r\n                        <input type=\"number\" id=\"pth-allit-count\" value=\"8\" min=\"3\" max=\"30\"\r\n                            aria-label=\"Number of alliterating words\">\r\n                    <\/div>\r\n                <\/div>\r\n                <button class=\"pth-btn pth-btn-primary\" id=\"pth-gen-allit-btn\"\r\n                    style=\"width:100%;margin-bottom:12px;\" aria-label=\"Generate alliteration words\">\r\n                    \u26a1 Generate Alliteration\r\n                <\/button>\r\n                <div class=\"pth-word-pills\" id=\"pth-allit-output\" aria-live=\"polite\" aria-label=\"Alliteration word results\">\r\n                    <span style=\"font-size:12px;color:#334155;font-weight:500;\">Click Generate to see alliterating words<\/span>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div id=\"pth-tool-scramble\" style=\"display:none;\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-scramble-input\">Words to Scramble <span style=\"color:#334155;font-weight:500;text-transform:none;\">(one per line or comma separated)<\/span><\/label>\r\n                    <textarea id=\"pth-scramble-input\" rows=\"4\"\r\n                        placeholder=\"Enter words to scramble their letters...\"\r\n                        aria-label=\"Words to scramble input\"><\/textarea>\r\n                <\/div>\r\n                <button class=\"pth-btn pth-btn-primary\" id=\"pth-gen-scramble-btn\"\r\n                    style=\"width:100%;margin-bottom:12px;\" aria-label=\"Scramble the entered words\">\r\n                    \u26a1 Scramble Letters\r\n                <\/button>\r\n                <div class=\"pth-word-pills\" id=\"pth-scramble-output\" aria-live=\"polite\" aria-label=\"Scrambled word results\">\r\n                    <span style=\"font-size:12px;color:#334155;font-weight:500;\">Enter words above and click Scramble<\/span>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div id=\"pth-tool-acronym\" style=\"display:none;\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-acronym-input\">Phrase or Words<\/label>\r\n                    <input type=\"text\" id=\"pth-acronym-input\" placeholder=\"e.g. Search Engine Optimization\"\r\n                        aria-label=\"Phrase to build acronym from\">\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-acronym-expand\">Or Expand Acronym<\/label>\r\n                    <input type=\"text\" id=\"pth-acronym-expand\" placeholder=\"e.g. SEO \u2014 find words for each letter\"\r\n                        aria-label=\"Acronym to expand into words\">\r\n                <\/div>\r\n                <div style=\"display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;\">\r\n                    <button class=\"pth-btn pth-btn-primary\" id=\"pth-make-acronym-btn\"\r\n                        aria-label=\"Create acronym from phrase\">\ud83d\udcdd Make Acronym<\/button>\r\n                    <button class=\"pth-btn pth-btn-secondary\" id=\"pth-expand-acronym-btn\"\r\n                        aria-label=\"Expand acronym into words\">\ud83d\udd24 Expand Acronym<\/button>\r\n                <\/div>\r\n                <div class=\"pth-output-light\" id=\"pth-acronym-output\" aria-live=\"polite\" aria-label=\"Acronym results\">\r\n                    Enter a phrase above and click Make Acronym\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div id=\"pth-tool-stopwords\" style=\"display:none;\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-sw-input\">Paste Your Text<\/label>\r\n                    <textarea id=\"pth-sw-input\" rows=\"4\"\r\n                        placeholder=\"Paste any text here to remove stop words and keep only meaningful keywords...\"\r\n                        aria-label=\"Text to remove stop words from\"><\/textarea>\r\n                <\/div>\r\n                <div style=\"display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap;\">\r\n                    <button class=\"pth-btn pth-btn-primary\" id=\"pth-remove-sw-btn\"\r\n                        style=\"flex:1;\" aria-label=\"Remove stop words from text\">\ud83d\udeab Remove Stop Words<\/button>\r\n                    <button class=\"pth-btn pth-btn-secondary\" id=\"pth-highlight-sw-btn\"\r\n                        style=\"flex:1;\" aria-label=\"Highlight stop words in text\">\ud83d\udd0d Highlight Stop Words<\/button>\r\n                <\/div>\r\n                <div class=\"pth-output-light\" id=\"pth-sw-output\" aria-live=\"polite\" aria-label=\"Stop words removal results\">\r\n                    Paste text above to process\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"pth-tab-prompts\" style=\"display:none;\" role=\"tabpanel\">\r\n        <div class=\"pth-card\">\r\n            <div class=\"pth-card-hdr\">\u270d\ufe0f Creative Writing Prompts Generator<\/div>\r\n            <div class=\"pth-row-3\">\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-prompt-genre\">Genre<\/label>\r\n                    <select id=\"pth-prompt-genre\" aria-label=\"Writing prompt genre\">\r\n                        <option value=\"all\">Mixed<\/option>\r\n                        <option value=\"fiction\">Fiction<\/option>\r\n                        <option value=\"scifi\">Sci-Fi<\/option>\r\n                        <option value=\"fantasy\">Fantasy<\/option>\r\n                        <option value=\"romance\">Romance<\/option>\r\n                        <option value=\"mystery\">Mystery<\/option>\r\n                        <option value=\"horror\">Horror<\/option>\r\n                        <option value=\"thriller\">Thriller<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-prompt-type\">Prompt Type<\/label>\r\n                    <select id=\"pth-prompt-type\" aria-label=\"Type of writing prompt\">\r\n                        <option value=\"all\">All Types<\/option>\r\n                        <option value=\"starter\">Story Starter<\/option>\r\n                        <option value=\"character\">Character<\/option>\r\n                        <option value=\"setting\">Setting\/Scene<\/option>\r\n                        <option value=\"conflict\">Conflict<\/option>\r\n                        <option value=\"twist\">Plot Twist<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"pth-field\">\r\n                    <label for=\"pth-prompt-count\">Count<\/label>\r\n                    <input type=\"number\" id=\"pth-prompt-count\" value=\"3\" min=\"1\" max=\"10\"\r\n                        aria-label=\"Number of writing prompts to generate\">\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div style=\"background:#faf5ff;border:1px solid #ddd6fe;border-radius:8px;padding:12px;margin-bottom:12px;\">\r\n                <div style=\"font-size:11px;font-weight:800;color:#5b21b6;text-transform:uppercase;margin-bottom:8px;\">\ud83c\udfad Character Name Generator<\/div>\r\n                <div class=\"pth-row-3\">\r\n                    <div class=\"pth-field\" style=\"margin:0;\">\r\n                        <label for=\"pth-name-origin\" style=\"color:#5b21b6;\">Name Origin<\/label>\r\n                        <select id=\"pth-name-origin\" aria-label=\"Character name cultural origin\">\r\n                            <option value=\"english\">English<\/option>\r\n                            <option value=\"celtic\">Celtic<\/option>\r\n                            <option value=\"nordic\">Nordic<\/option>\r\n                            <option value=\"latin\">Latin\/Roman<\/option>\r\n                            <option value=\"japanese\">Japanese<\/option>\r\n                            <option value=\"fantasy\">Fantasy<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                    <div class=\"pth-field\" style=\"margin:0;\">\r\n                        <label for=\"pth-name-gender\" style=\"color:#5b21b6;\">Gender<\/label>\r\n                        <select id=\"pth-name-gender\" aria-label=\"Character name gender\">\r\n                            <option value=\"any\">Any<\/option>\r\n                            <option value=\"m\">Masculine<\/option>\r\n                            <option value=\"f\">Feminine<\/option>\r\n                            <option value=\"neutral\">Neutral<\/option>\r\n                        <\/select>\r\n                    <\/div>\r\n                    <div class=\"pth-field\" style=\"margin:0;\">\r\n                        <button class=\"pth-btn pth-btn-purple\" id=\"pth-gen-name-btn\"\r\n                            style=\"width:100%;margin-top:18px;\" aria-label=\"Generate character name\">\r\n                            \ud83c\udfad Names\r\n                        <\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div style=\"margin-top:8px;font-size:13px;font-weight:700;color:#4c1d95;min-height:24px;\" id=\"pth-name-output\" aria-live=\"polite\"><\/div>\r\n            <\/div>\r\n\r\n            <button class=\"pth-btn pth-btn-primary\" id=\"pth-gen-prompts-btn\"\r\n                style=\"width:100%;padding:12px;font-size:14px;\" aria-label=\"Generate writing prompts\">\r\n                \u26a1 Generate Writing Prompts\r\n            <\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"pth-tab-stats\" style=\"display:none;\" role=\"tabpanel\">\r\n        <div class=\"pth-card\">\r\n            <div class=\"pth-card-hdr\">\ud83d\udcca Word Statistics Analyzer<\/div>\r\n            <div class=\"pth-field\">\r\n                <label for=\"pth-stats-input\">Paste Your Text<\/label>\r\n                <textarea id=\"pth-stats-input\" rows=\"5\"\r\n                    placeholder=\"Paste any text here to get detailed word statistics \u2014 frequency analysis, readability metrics, vocabulary richness, and part-of-speech breakdown...\"\r\n                    aria-label=\"Text to analyze statistics for\"><\/textarea>\r\n            <\/div>\r\n            <div style=\"display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;\">\r\n                <button class=\"pth-btn pth-btn-primary\" id=\"pth-analyze-btn\"\r\n                    style=\"flex:1;\" aria-label=\"Analyze text statistics\">\ud83d\udcca Analyze Text<\/button>\r\n                <button class=\"pth-btn pth-btn-secondary\" id=\"pth-export-stats-btn\"\r\n                    aria-label=\"Export statistics report\">\ud83d\udce4 Export Report<\/button>\r\n            <\/div>\r\n            <div id=\"pth-stats-results\" style=\"display:none;\">\r\n                <div class=\"pth-stats-grid\" id=\"pth-stats-grid\"><\/div>\r\n                <div style=\"font-size:11px;font-weight:800;color:#334155;text-transform:uppercase;margin-bottom:8px;\">Top 20 Keywords by Frequency<\/div>\r\n                <div id=\"pth-freq-table\" style=\"margin-bottom:14px;\"><\/div>\r\n                <div style=\"font-size:11px;font-weight:800;color:#334155;text-transform:uppercase;margin-bottom:8px;\">Vocabulary Richness<\/div>\r\n                <div id=\"pth-richness-bar\" style=\"background:#e2e8f0;border-radius:6px;height:12px;margin-bottom:6px;\">\r\n                    <div id=\"pth-richness-fill\" style=\"height:100%;border-radius:6px;background:#2563eb;width:0%;transition:0.5s;\"><\/div>\r\n                <\/div>\r\n                <div id=\"pth-richness-label\" style=\"font-size:12px;font-weight:600;color:#334155;margin-bottom:14px;\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"pth-card\">\r\n        <div class=\"pth-card-hdr\">\ud83d\udcbb Output<\/div>\r\n        <div class=\"pth-output-area\" id=\"pth-main-output\" aria-live=\"polite\" aria-label=\"Generated word output\">Click Generate on any tab to see results here<\/div>\r\n        <div style=\"display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;\">\r\n            <button class=\"pth-btn pth-btn-success\" id=\"pth-copy-output-btn\"\r\n                style=\"flex:1;\" aria-label=\"Copy output to clipboard\">\ud83d\udccb Copy<\/button>\r\n            <button class=\"pth-btn pth-btn-secondary\" id=\"pth-export-txt-btn\"\r\n                style=\"flex:1;\" aria-label=\"Export output as text file\">\ud83d\udce4 Export .txt<\/button>\r\n            <button class=\"pth-btn pth-btn-danger\" id=\"pth-clear-output-btn\"\r\n                aria-label=\"Clear output\">\ud83d\uddd1\ufe0f<\/button>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<\/div><\/div><div id=\"pth-word-sidebar\">\r\n\r\n    <div class=\"pth-card\">\r\n        <div class=\"pth-sb-hdr\">\ud83d\udcc8 Session Stats<\/div>\r\n        <div style=\"display:flex;flex-direction:column;gap:6px;\">\r\n            <div style=\"display:flex;justify-content:space-between;font-size:12px;font-weight:600;color:#334155;\">\r\n                <span>Words Generated<\/span>\r\n                <strong id=\"pth-sb-words-gen\" style=\"color:#1d4ed8;\">0<\/strong>\r\n            <\/div>\r\n            <div style=\"display:flex;justify-content:space-between;font-size:12px;font-weight:600;color:#334155;\">\r\n                <span>Generations<\/span>\r\n                <strong id=\"pth-sb-gen-count\" style=\"color:#1d4ed8;\">0<\/strong>\r\n            <\/div>\r\n            <div style=\"display:flex;justify-content:space-between;font-size:12px;font-weight:600;color:#334155;\">\r\n                <span>Lexicon Size<\/span>\r\n                <strong style=\"color:#047857;\">1200+<\/strong>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"pth-card\">\r\n        <div class=\"pth-sb-hdr\">\ud83d\udd52 Last Output Preview<\/div>\r\n        <div id=\"pth-sb-preview\"\r\n            style=\"font-size:11px;color:#334155;line-height:1.9;font-weight:500;font-family:'Courier New',monospace;\">\r\n            Your last generation preview appears here\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"pth-card\">\r\n        <div class=\"pth-sb-hdr\">\ud83d\udcd6 Tab Guide<\/div>\r\n        <div style=\"font-size:11px;color:#334155;line-height:2;font-weight:500;\">\r\n            <div><strong style=\"color:#0f172a;\">\ud83d\udcdd Words<\/strong> \u2014 1200+ word lexicon, 6 POS types<\/div>\r\n            <div><strong style=\"color:#0f172a;\">\ud83d\udcac Sentences<\/strong> \u2014 Random sentence builder<\/div>\r\n            <div><strong style=\"color:#0f172a;\">\ud83d\udcc4 Lorem+<\/strong> \u2014 5 placeholder text styles<\/div>\r\n            <div><strong style=\"color:#0f172a;\">\ud83d\udd27 Toolkit<\/strong> \u2014 Alliteration, Scramble, Acronym, Stop Words<\/div>\r\n            <div><strong style=\"color:#0f172a;\">\u270d\ufe0f Prompts<\/strong> \u2014 8 genres + Character names<\/div>\r\n            <div><strong style=\"color:#0f172a;\">\ud83d\udcca Stats<\/strong> \u2014 Full text analytics<\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"pth-card\">\r\n        <div class=\"pth-sb-hdr\">\ud83d\udca1 Use Cases<\/div>\r\n        <ul style=\"margin:0;padding-left:14px;font-size:11px;color:#334155;line-height:1.9;font-weight:500;\">\r\n            <li>Vocabulary building exercises<\/li>\r\n            <li>UI\/UX wireframe placeholder text<\/li>\r\n            <li>Word game design &amp; testing<\/li>\r\n            <li>Creative writing warm-ups<\/li>\r\n            <li>SEO content keyword research<\/li>\r\n            <li>Anagram &amp; puzzle creation<\/li>\r\n            <li>Student writing assignments<\/li>\r\n            <li>Brand name brainstorming<\/li>\r\n        <\/ul>\r\n    <\/div>\r\n\r\n<\/div><\/div><\/div><script data-no-optimize=\"1\" data-no-minify=\"1\" data-cfasync=\"false\">\r\n(function () {\r\n    'use strict';\r\n\r\n    \/* Safe comparison helpers \u2014 no < > operators used *\/\r\n    function pthLt(a, b)  { return (b - a - 1) >>> 31 === 0; }\r\n    function pthLte(a, b) { return (a - b) >>> 31 !== 0 || a === b; }\r\n    function pthGt(a, b)  { return (a - b - 1) >>> 31 === 0; }\r\n    function pthGte(a, b) { return (b - a) >>> 31 !== 0 || a === b; }\r\n\r\n    \/* =======================================================\r\n       PTH ULTIMATE WORD STUDIO PRO \u2014 v2.0\r\n       6 Tabs | 35 Tools | 1200+ Lexicon | WP\/LiteSpeed Safe\r\n       ======================================================= *\/\r\n\r\n    window.pthWordApp = {\r\n        initialized: false,\r\n        currentTab: 'words',\r\n        currentTool: 'alliteration',\r\n        sessionWordsGen: 0,\r\n        sessionGenCount: 0,\r\n\r\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\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n           LEXICON \u2014 1200+ words across 6 parts of speech\r\n           Common = idx 0\u201349, Uncommon = 50\u2013149, Rare = 150+\r\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\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\n        lex: {\r\n            nouns: [\r\n                \/* common *\/\r\n                'time','year','people','way','day','world','life','hand','part','place',\r\n                'case','week','company','number','point','home','water','room','money',\r\n                'story','fact','month','right','book','eye','job','word','house','line',\r\n                'end','head','name','city','power','hour','game','member','law','car',\r\n                'body','information','face','level','office','health','art','war','idea',\r\n                'reason','girl','moment','air','teacher','force','city','parent','fire',\r\n                \/* uncommon *\/\r\n                'eloquence','threshold','meridian','silhouette','labyrinth','cascade',\r\n                'reverie','twilight','solitude','murmur','parchment','ember','cathedral',\r\n                'estuary','fjord','archipelago','boulevard','colossus','dominion','epoch',\r\n                'fissure','glacier','harbinger','illusion','junction','kaleidoscope',\r\n                'luminance','mirage','nebula','oracle','pinnacle','quasar','refuge',\r\n                'serenade','tempest','umbra','vortex','wilderness','xenolith','zenith',\r\n                'abyss','beacon','canopy','debris','equinox','frontier','gale','haven',\r\n                'iceberg','journal','karma','lantern','mosaic','nomad','odyssey','phantom',\r\n                'relic','summit','terrain','universe','vapour','wanderer','xeric','yonder',\r\n                \/* rare *\/\r\n                'petrichor','sonder','hiraeth','vellichor','kenopsia','meraki','fernweh',\r\n                'chrysalism','phosphene','solivagant','trouvaille','eudaimonia','nemesis',\r\n                'ephemera','aphelion','apricity','dendrochronology','sempiternal','liminal',\r\n                'palimpsest','susurrus','ineffable','melancholia','etiolate','numinous'\r\n            ],\r\n            verbs: [\r\n                \/* common *\/\r\n                'make','know','think','take','see','come','want','look','find','give',\r\n                'tell','work','call','try','ask','need','feel','leave','put','keep',\r\n                'begin','show','hear','play','run','move','walk','write','read','allow',\r\n                'build','grow','open','spend','win','offer','remember','love','consider',\r\n                'create','speak','follow','stop','reach','send','expect','stay','fall',\r\n                'rise','break','hold','carry','change','believe','serve','bring','watch',\r\n                \/* uncommon *\/\r\n                'illuminate','traverse','converge','unravel','transcend','cultivate',\r\n                'manifest','navigate','orchestrate','resonate','substantiate','weave',\r\n                'envision','harness','galvanize','permeate','catalyze','distil','forge',\r\n                'broaden','anchor','amplify','bridge','carve','deepen','emanate','flourish',\r\n                'ground','kindle','liberate','meld','nurture','radiate','sculpt','temper',\r\n                'unfold','venture','wield','yield','ascend','beckon','channel','dissolve',\r\n                'emerge','gather','ignite','journey','linger','mirror','pioneer','quicken',\r\n                'restore','soar','thrive','unveil','vanish','wander','awaken','bloom',\r\n                \/* rare *\/\r\n                'effloresce','adumbrate','delectate','excoriate','fulminate','genuflect',\r\n                'inveigh','loquacious','obfuscate','peregrinate','ruminate','syllogize',\r\n                'vitiate','abnegate','cogitate','dissimulate','elide','filibuster'\r\n            ],\r\n            adjectives: [\r\n                \/* common *\/\r\n                'good','new','first','long','great','little','right','big','high','small',\r\n                'large','early','young','important','few','bad','same','able','strong',\r\n                'actual','significant','successful','expensive','helpful','recent','happy',\r\n                'serious','huge','rare','critical','powerful','foreign','practical','safe',\r\n                'clear','close','common','dark','dead','easy','fast','free','full','hard',\r\n                'heavy','high','hot','last','light','live','low','main','major','modern',\r\n                \/* uncommon *\/\r\n                'luminous','ethereal','ephemeral','sublime','tenacious','eloquent',\r\n                'intricate','resilient','serene','vivid','arcane','bountiful','celestial',\r\n                'dappled','evocative','formidable','gleaming','hallowed','iridescent',\r\n                'jovial','kaleidoscopic','lush','mellifluous','noble','opulent','pristine',\r\n                'quixotic','radiant','sapient','tranquil','ubiquitous','venerable','wistful',\r\n                'zealous','ancient','brave','crisp','delicate','enigmatic','ferocious',\r\n                'graceful','haunting','incandescent','jubilant','keen','labyrinthine',\r\n                'majestic','nimble','oblique','pensive','resolute','silvery','timeless',\r\n                \/* rare *\/\r\n                'sempiternal','liminal','numinous','ineffable','palimpsestic','petrichor',\r\n                'vellichoric','somnolent','susurrous','apricious','tenebrous','vespertine',\r\n                'crepuscular','diaphanous','gossamer','halcyon','indelible','labyrinthine',\r\n                'melancholic','noctilucent','opalescent','pyrrhic','recondite','sanguine'\r\n            ],\r\n            adverbs: [\r\n                'quickly','slowly','carefully','boldly','softly','deeply','clearly',\r\n                'quietly','warmly','brightly','gently','firmly','swiftly','sharply',\r\n                'gracefully','suddenly','vividly','steadily','roughly','smoothly',\r\n                'eagerly','freely','highly','largely','mostly','nearly','often',\r\n                'perhaps','rather','really','simply','still','truly','utterly',\r\n                'vastly','widely','wisely','yet','always','barely','closely',\r\n                'early','equally','finally','fully','hardly','nearly','once',\r\n                'partly','shortly','slightly','sometimes','soon','strongly',\r\n                'effortlessly','endlessly','brilliantly','magnificently','silently',\r\n                'ferociously','tenderly','diligently','serenely','passionately'\r\n            ],\r\n            pronouns: [\r\n                'I','me','my','mine','myself','you','your','yours','yourself',\r\n                'he','him','his','himself','she','her','hers','herself',\r\n                'it','its','itself','we','us','our','ours','ourselves',\r\n                'they','them','their','theirs','themselves','who','whom',\r\n                'whose','which','that','this','these','those','anyone',\r\n                'everyone','someone','nobody','nothing','anything','everything',\r\n                'each','either','neither','both','few','many','several','all'\r\n            ],\r\n            prepositions: [\r\n                'about','above','across','after','against','along','among',\r\n                'around','at','before','behind','below','beneath','beside',\r\n                'between','beyond','by','despite','down','during','except',\r\n                'for','from','in','inside','into','like','near','of','off',\r\n                'on','onto','out','outside','over','past','since','through',\r\n                'throughout','till','to','toward','under','until','up','upon',\r\n                'with','within','without','according','along','alongside','amid'\r\n            ]\r\n        },\r\n\r\n        \/* \u2500\u2500 Sentence templates by topic \u2500\u2500 *\/\r\n        sentTemplates: {\r\n            all: [\r\n                '{adj} {noun} {verb} the {adj} {noun}.',\r\n                'The {noun} {verb} {adv} through the {adj} {noun}.',\r\n                'A {adj} {noun} {verb} toward the {noun}.',\r\n                'Every {noun} {verb} a {adj} {noun}.',\r\n                'The {adj} {noun} {verb} the {noun} {adv}.'\r\n            ],\r\n            nature: [\r\n                'The {adj} river {verb} through the ancient forest.',\r\n                'Golden sunlight {verb} across the misty mountain.',\r\n                'Wild creatures {verb} beneath the vast open sky.',\r\n                'The ocean {verb} against the {adj} shore endlessly.',\r\n                'Ancient trees {verb} in the {adj} autumn wind.'\r\n            ],\r\n            business: [\r\n                'The {adj} company {verb} its market position steadily.',\r\n                'Strategic leaders {verb} growth through careful planning.',\r\n                'The {adj} team {verb} every challenge with confidence.',\r\n                'Innovation {verb} new opportunities in competitive markets.',\r\n                'Professionals {verb} results by building strong partnerships.'\r\n            ],\r\n            tech: [\r\n                'Advanced algorithms {verb} complex data in milliseconds.',\r\n                'The {adj} system {verb} information across digital networks.',\r\n                'Software engineers {verb} elegant solutions for hard problems.',\r\n                'Artificial intelligence {verb} human creativity and precision.',\r\n                'The {adj} platform {verb} millions of users worldwide.'\r\n            ],\r\n            people: [\r\n                'The {adj} teacher {verb} students with great patience.',\r\n                'A kind stranger {verb} help without expecting return.',\r\n                'The young artist {verb} her emotions through vivid colour.',\r\n                'Children {verb} the world with {adj} curiosity.',\r\n                'The {adj} leader {verb} trust through consistent actions.'\r\n            ],\r\n            abstract: [\r\n                'Hope {verb} even in the darkest of moments.',\r\n                'The {adj} truth {verb} beyond ordinary understanding.',\r\n                'Courage {verb} where certainty cannot follow.',\r\n                'Memory {verb} the {adj} fragments of forgotten time.',\r\n                'Dreams {verb} the boundary between thought and reality.'\r\n            ]\r\n        },\r\n\r\n        \/* \u2500\u2500 Lorem pools \u2500\u2500 *\/\r\n        loremPools: {\r\n            classic: [\r\n                'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',\r\n                'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',\r\n                'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',\r\n                'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',\r\n                'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.',\r\n                'Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit sed quia consequuntur.',\r\n                'At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum.'\r\n            ],\r\n            hipster: [\r\n                'Artisan small-batch craft beer aesthetic put a bird on it literally vinyl messenger bag.',\r\n                'Williamsburg ennui sustainable tote bag organic kale chips roof party fixie bicycle.',\r\n                'Poutine letterpress normcore listicle distillery 8-bit chia seeds bespoke kombucha.',\r\n                'Seitan tumblr VHS cold-pressed quinoa whatever lumbersexual typewriter ennui.',\r\n                'Gastropub pickled activated charcoal aesthetic pinterest brooklyn 90s flannel heirloom.',\r\n                'Literally four dollar toast hoodie post-ironic freegan occupy portland woke skateboard.',\r\n                'Asymmetrical raw denim crucifix meditation kinfolk bespoke cardigan sriracha.'\r\n            ],\r\n            tech: [\r\n                'Machine learning algorithms leverage neural networks to process distributed datasets at scale.',\r\n                'Containerised microservices enable seamless horizontal scaling across cloud infrastructure.',\r\n                'API-first architecture enables frictionless integration of third-party service endpoints.',\r\n                'DevOps pipelines automate continuous integration and continuous deployment workflows.',\r\n                'Edge computing reduces latency by processing data closer to the network endpoint.',\r\n                'Blockchain immutability provides trustless verification across decentralised networks.',\r\n                'Agile sprints deliver iterative value through cross-functional team collaboration.'\r\n            ],\r\n            nature: [\r\n                'The ancient forest breathes slowly beneath a canopy of emerald and gold.',\r\n                'Rivers carve their patient paths through limestone valleys carved by time.',\r\n                'Migration patterns trace invisible highways across the open sky each season.',\r\n                'Tidal pools shelter entire ecosystems within their shallow salt-water boundaries.',\r\n                'Mountain glaciers hold centuries of compressed snowfall in crystalline blue silence.',\r\n                'Desert blooms appear overnight when the rains finally breach the cracked earth.',\r\n                'Deep ocean trenches harbour creatures evolved far beyond the reach of sunlight.'\r\n            ]\r\n        },\r\n\r\n        \/* \u2500\u2500 Writing prompts by genre \u2500\u2500 *\/\r\n        promptTemplates: {\r\n            starter: {\r\n                fiction: [\r\n                    'The letter arrived three weeks after her death, postmarked the day she disappeared.',\r\n                    'He had lived in this town his entire life, yet today he noticed the door he had never seen before.',\r\n                    'They said the clock in the town square had not moved in forty years \u2014 until Tuesday.',\r\n                    'She opened the notebook and found her own handwriting, but she had never written these words.',\r\n                    'The last train left at midnight. He was on it. She was not supposed to be.'\r\n                ],\r\n                scifi: [\r\n                    'The colony ship had been drifting for 200 years when the distress signal from Earth arrived.',\r\n                    'Scientists confirmed the anomaly at 03:47 AM \u2014 time had stopped moving in a seventeen-mile radius.',\r\n                    'The AI had passed every test. What they had not tested for was loneliness.',\r\n                    'First contact was not what they expected: a single word, repeated, in perfect English: \"Leave.\"',\r\n                    'The terraforming was complete. The only problem was that something was already living there.'\r\n                ],\r\n                fantasy: [\r\n                    'The dragon did not want to be feared. It wanted someone to read it poetry.',\r\n                    'Every child in the kingdom was born with a mark \u2014 except her.',\r\n                    'The map ended at the sea. His compass kept pointing past it.',\r\n                    'She had been the village healer for fifty years before she discovered she was the curse.',\r\n                    'The ancient door opened only to those who had never lied. He walked straight through.'\r\n                ],\r\n                romance: [\r\n                    'They had argued about everything since the moment they met \u2014 which was exactly why she trusted him.',\r\n                    'She left the city to forget someone. She did not expect to find him in the smallest village in the country.',\r\n                    'He had not spoken to her in seven years. Then she walked into his courtroom as the defendant.',\r\n                    'The arrangement was simple: pretend to be in love for one weekend. Neither of them was ready for Monday.',\r\n                    'She collected broken things \u2014 old clocks, cracked pottery, people who needed quiet patience to heal.'\r\n                ],\r\n                mystery: [\r\n                    'The safe was locked from the inside. The room had no other exits. The body was not there when they arrived.',\r\n                    'She had seen every crime scene in the city for thirty years. This was the first one that frightened her.',\r\n                    'The victim had no enemies \u2014 which, in the detective\\'s experience, was the most suspicious thing of all.',\r\n                    'Three people had seen the man at the party. Three people described three completely different men.',\r\n                    'The note said she had run away. The detective noticed she had taken nothing with her.'\r\n                ],\r\n                horror: [\r\n                    'The children drew the same picture in three different cities on the same morning.',\r\n                    'She moved into the old house in spring. By summer she had stopped looking in the mirrors.',\r\n                    'The night shift at the care home was quiet \u2014 except for room twelve, which had been empty for a year.',\r\n                    'It was not the sound that woke him. It was the sudden absence of every sound that had been there before.',\r\n                    'She found the photograph in the attic: her family, this house, fifty years before her birth \u2014 she was in it.'\r\n                ],\r\n                thriller: [\r\n                    'He deleted every trace of his identity on Friday. On Monday someone was already using it.',\r\n                    'She had forty-eight hours to find the file before the wrong people discovered she had seen it.',\r\n                    'The ambassador smiled through the entire speech. She was the only one who noticed his hands were shaking.',\r\n                    'Three witnesses. Three separate safe houses. Three identical accidents within twenty-four hours.',\r\n                    'The intelligence report was wrong about everything except the one detail that mattered most.'\r\n                ]\r\n            },\r\n            character: {\r\n                all: [\r\n                    'A retired spy who now runs a quiet bookshop and refuses to discuss the past \u2014 until someone from it walks in.',\r\n                    'A lighthouse keeper who has not spoken to another human in eleven years and has strong opinions about it.',\r\n                    'A forensic accountant who discovers their most famous client is a ghost \u2014 literally nonexistent.',\r\n                    'A cartographer who maps places that do not yet exist, then watches them appear.',\r\n                    'An interpreter at international summits who is slowly realising that both sides are lying.',\r\n                    'A chef who can taste emotions in food and has stopped eating at restaurants as a result.',\r\n                    'A museum curator who discovers one exhibit has been replaced with a perfect forgery \u2014 forty years ago.'\r\n                ]\r\n            },\r\n            setting: {\r\n                all: [\r\n                    'A village that exists only during fog \u2014 locals say it vanishes entirely when the sky clears.',\r\n                    'A library where every book is a memoir of someone who has not been born yet.',\r\n                    'An underwater city whose citizens have never needed to surface \u2014 until the filters failed.',\r\n                    'A mountain monastery where monks have maintained silence for three centuries, beginning tonight.',\r\n                    'A train station at the edge of a dying town where all the clocks show different times.',\r\n                    'A market that appears only on the first Saturday of each month and sells things you cannot name.',\r\n                    'A lighthouse on a coast with no sea \u2014 and yet the light still turns, every night, faithfully.'\r\n                ]\r\n            },\r\n            conflict: {\r\n                all: [\r\n                    'Two people who both believe they are protecting the other from the same secret.',\r\n                    'A scientist whose proof will save thousands of lives \u2014 and destroy the life of someone she loves.',\r\n                    'An heir to a legacy they did not choose and cannot escape without losing everyone they know.',\r\n                    'Someone who must choose between the truth that frees them and the lie that protects others.',\r\n                    'A friendship that has survived everything \u2014 until it encounters the one thing neither can forgive.',\r\n                    'A person who has spent their life following the rules finally confronting a world where rules are wrong.',\r\n                    'Two people with the same goal, opposite methods, and only one road left between them.'\r\n                ]\r\n            },\r\n            twist: {\r\n                all: [\r\n                    'The villain was trying to prevent the same thing the hero was trying to cause.',\r\n                    'The map they had been following was drawn by the person they were searching for \u2014 to lead them away.',\r\n                    'The message that started the journey was not a distress call. It was a warning.',\r\n                    'The oldest member of the group had not aged because they were the only one who was real.',\r\n                    'The rescue arrived exactly when expected. Nobody had sent it.',\r\n                    'The locked room was not a crime scene. It was a hiding place \u2014 and it still was.',\r\n                    'She had been looking for the truth her whole life. The truth had been looking for her too.'\r\n                ]\r\n            }\r\n        },\r\n\r\n        \/* \u2500\u2500 Character names \u2500\u2500 *\/\r\n        names: {\r\n            english:  { m: ['James','William','Henry','Arthur','Edmund','George','Thomas','Oliver','Edward','Charles'], f: ['Eleanor','Margaret','Charlotte','Elizabeth','Catherine','Alice','Violet','Rose','Clara','Agnes'], neutral: ['Alex','Morgan','Riley','Avery','Taylor','Jordan','Quinn','Skylar','Casey','Blake'], sur: ['Ashford','Whitmore','Hargrove','Blackwood','Sterling','Hartwell','Pemberton','Wyndham','Caldwell','Fairfax'] },\r\n            celtic:   { m: ['Caelan','Finnian','Rowan','Callum','Declan','Brennan','Lorcan','Oisin','Cillian','Tadhg'], f: ['Saoirse','Niamh','Caoimhe','Aoife','Siobhan','Brigid','Aisling','Sorcha','Roisin','Deirdre'], neutral: ['Shannon','Kerry','Avon','Tara','Blair','Erin','Glen','Skye','Roan','Bryn'], sur: ['MacAllister','O\\'Brien','Fitzgerald','MacCormack','\u00d3\\'S\u00failleabh\u00e1in','MacKinnon','Gallagher','Hennessey','Flannery','Brennan'] },\r\n            nordic:   { m: ['Bjorn','Leif','Erik','Gunnar','Ragnar','Sven','Ivar','Ulf','Halfdan','Sigurd'], f: ['Astrid','Freya','Ingrid','Sigrid','Helga','Runa','Brynja','Siv','Gudrun','Ylva'], neutral: ['Sael','Tove','Hakon','Skadi','Vidar','Bjarne','Frej','Ran','Sol','Dag'], sur: ['Eriksson','Bjornsen','Odinsen','Lindqvist','Thorvaldsen','Magnusson','Johansson','Halvorsen','Gustafsson','Andersen'] },\r\n            latin:    { m: ['Aurelius','Marcus','Cassius','Lucius','Quintus','Tiberius','Flavius','Gaius','Maximus','Decimus'], f: ['Claudia','Valeria','Cornelia','Livia','Flavia','Aurelia','Lucretia','Portia','Lavinia','Calpurnia'], neutral: ['Caelius','Marius','Silvia','Felix','Rufus','Alba','Vitus','Lux','Nemo','Iris'], sur: ['Brutus','Cicero','Fabia','Gracchus','Hortensia','Junia','Lepida','Minucia','Servilia','Tullia'] },\r\n            japanese: { m: ['Haruto','Yuto','Sota','Yuki','Hayato','Haruki','Ryusei','Koki','Sora','Ren'], f: ['Yui','Akari','Hina','Koharu','Riko','Sakura','Himari','Mio','Kokona','Aoi'], neutral: ['Kaoru','Rei','Hikaru','Makoto','Nozomi','Chiharu','Naoki','Izumi','Saki','Yuki'], sur: ['Tanaka','Suzuki','Sato','Kato','Yamamoto','Watanabe','Nakamura','Kobayashi','Ito','Saito'] },\r\n            fantasy:  { m: ['Aldric','Caelum','Dravos','Elarion','Farenthus','Galadhor','Henrath','Iorath','Jhaeros','Korrath'], f: ['Aelindra','Brynnova','Caelariel','Dawneth','Evyline','Faerantha','Galadriel','Hessara','Ilyara','Jyndra'], neutral: ['Aethor','Brenvael','Calix','Duskara','Elaryn','Faelith','Galorn','Hexara','Ithil','Jorath'], sur: ['Silverhand','Darkwhisper','Stormborn','Nightveil','Emberglow','Frostwalker','Shadowmere','Dawnseeker','Ironwill','Starweaver'] }\r\n        },\r\n\r\n        \/* \u2500\u2500 Stop words list \u2014 ES5 object instead of Set \u2500\u2500 *\/\r\n        stopWords: {'a':1,'an':1,'the':1,'and':1,'or':1,'but':1,'in':1,'on':1,'at':1,'to':1,'for':1,'of':1,'with':1,'by':1,\r\n            'from':1,'is':1,'was':1,'are':1,'were':1,'be':1,'been':1,'have':1,'has':1,'had':1,'do':1,'does':1,\r\n            'did':1,'will':1,'would':1,'could':1,'should':1,'may':1,'might':1,'this':1,'that':1,'these':1,\r\n            'those':1,'i':1,'we':1,'you':1,'he':1,'she':1,'it':1,'they':1,'my':1,'your':1,'his':1,'her':1,'our':1,\r\n            'its':1,'their':1,'what':1,'which':1,'who':1,'when':1,'where':1,'how':1,'why':1,'not':1,'no':1,\r\n            'so':1,'if':1,'as':1,'up':1,'out':1,'about':1,'into':1,'than':1,'then':1,'there':1,'can':1,'just':1,\r\n            'more':1,'also':1,'both':1,'each':1,'few':1,'many':1,'much':1,'other':1,'such':1,\r\n            'very':1,'still':1,'well':1,'too':1,'even':1,'only':1,'never':1,'now':1,'here':1,\r\n            'while':1,'after':1,'before':1,'because':1,'since':1,'until':1,'although':1,'through':1},\r\n\r\n        \/* \u2500\u2500\u2500 INIT \u2500\u2500\u2500 *\/\r\n        init: function () {\r\n            var self = this;\r\n            self.attachEvents();\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 EVENTS \u2500\u2500\u2500 *\/\r\n        attachEvents: function () {\r\n            var self = this;\r\n\r\n            \/* Full width *\/\r\n            var fwBtn = document.getElementById('pth-word-fw-btn');\r\n            if (fwBtn) fwBtn.addEventListener('click', function () { self.toggleWidth(); });\r\n\r\n            \/* Sample + Clear *\/\r\n            var sampleBtn = document.getElementById('pth-word-sample-btn');\r\n            if (sampleBtn) sampleBtn.addEventListener('click', function () { self.loadSample(); });\r\n            var clearBtn = document.getElementById('pth-word-clear-btn');\r\n            if (clearBtn) clearBtn.addEventListener('click', function () { self.clearOutput(); });\r\n\r\n            \/* Tab navigation *\/\r\n            try {\r\n                Array.prototype.forEach.call(document.querySelectorAll('#pth-word-wrapper .pth-tab-btn[data-tab]'), function (btn) {\r\n                    btn.addEventListener('click', function () { self.switchTab(this.getAttribute('data-tab')); });\r\n                });\r\n            } catch(eTab) {}\r\n\r\n            \/* POS checkbox styling *\/\r\n            try {\r\n                Array.prototype.forEach.call(document.querySelectorAll('#pth-pos-row input[type=\"checkbox\"]'), function (cb) {\r\n                    cb.addEventListener('change', function () {\r\n                        var el = this.parentNode;\r\n                        while (el && el.className && el.className.indexOf('pth-check-label') === -1) { el = el.parentNode; }\r\n                        if (el) el.classList.toggle('pth-checked', this.checked);\r\n                    });\r\n                });\r\n            } catch(ePOS) {}\r\n\r\n            \/* Generate buttons *\/\r\n            var genWords = document.getElementById('pth-gen-words-btn');\r\n            if (genWords) genWords.addEventListener('click', function () { self.generateWords(); });\r\n\r\n            var genSent = document.getElementById('pth-gen-sentences-btn');\r\n            if (genSent) genSent.addEventListener('click', function () { self.generateSentences(); });\r\n\r\n            var genLorem = document.getElementById('pth-gen-lorem-btn');\r\n            if (genLorem) genLorem.addEventListener('click', function () { self.generateLorem(); });\r\n\r\n            var genPrompts = document.getElementById('pth-gen-prompts-btn');\r\n            if (genPrompts) genPrompts.addEventListener('click', function () { self.generatePrompts(); });\r\n\r\n            var genName = document.getElementById('pth-gen-name-btn');\r\n            if (genName) genName.addEventListener('click', function () { self.generateNames(); });\r\n\r\n            var analyzeBtn = document.getElementById('pth-analyze-btn');\r\n            if (analyzeBtn) analyzeBtn.addEventListener('click', function () { self.analyzeStats(); });\r\n\r\n            var exportStats = document.getElementById('pth-export-stats-btn');\r\n            if (exportStats) exportStats.addEventListener('click', function () { self.exportStatsReport(); });\r\n\r\n            \/* Toolkit tool switcher *\/\r\n            try {\r\n                Array.prototype.forEach.call(document.querySelectorAll('#pth-word-wrapper [data-tool]'), function (btn) {\r\n                    btn.addEventListener('click', function () { self.setTool(this.getAttribute('data-tool')); });\r\n                });\r\n            } catch(eTool) {}\r\n\r\n            \/* Toolkit buttons *\/\r\n            var genAllit = document.getElementById('pth-gen-allit-btn');\r\n            if (genAllit) genAllit.addEventListener('click', function () { self.generateAlliteration(); });\r\n\r\n            var genScramble = document.getElementById('pth-gen-scramble-btn');\r\n            if (genScramble) genScramble.addEventListener('click', function () { self.scrambleWords(); });\r\n\r\n            var makeAcro = document.getElementById('pth-make-acronym-btn');\r\n            if (makeAcro) makeAcro.addEventListener('click', function () { self.makeAcronym(); });\r\n\r\n            var expandAcro = document.getElementById('pth-expand-acronym-btn');\r\n            if (expandAcro) expandAcro.addEventListener('click', function () { self.expandAcronym(); });\r\n\r\n            var removeSw = document.getElementById('pth-remove-sw-btn');\r\n            if (removeSw) removeSw.addEventListener('click', function () { self.removeStopWords(); });\r\n\r\n            var highlightSw = document.getElementById('pth-highlight-sw-btn');\r\n            if (highlightSw) highlightSw.addEventListener('click', function () { self.highlightStopWords(); });\r\n\r\n            \/* Output buttons *\/\r\n            var copyBtn = document.getElementById('pth-copy-output-btn');\r\n            if (copyBtn) copyBtn.addEventListener('click', function () { self.copyOutput(); });\r\n\r\n            var exportBtn = document.getElementById('pth-export-txt-btn');\r\n            if (exportBtn) exportBtn.addEventListener('click', function () { self.exportTxt(); });\r\n\r\n            var clearOut = document.getElementById('pth-clear-output-btn');\r\n            if (clearOut) clearOut.addEventListener('click', function () { self.clearOutput(); });\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 SWITCH TAB \u2500\u2500\u2500 *\/\r\n        switchTab: function (tab) {\r\n            this.currentTab = tab;\r\n            var tabs = ['words','sentences','lorem','toolkit','prompts','stats'];\r\n            var self = this;\r\n            tabs.forEach(function (t) {\r\n                var panel = document.getElementById('pth-tab-' + t);\r\n                var btn   = document.querySelector('#pth-word-wrapper [data-tab=\"' + t + '\"]');\r\n                if (panel) panel.style.display = (t === tab) ? 'block' : 'none';\r\n                if (btn)   { btn.classList.toggle('pth-active', t === tab); btn.setAttribute('aria-selected', t === tab ? 'true' : 'false'); }\r\n            });\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 SET TOOL \u2500\u2500\u2500 *\/\r\n        setTool: function (tool) {\r\n            this.currentTool = tool;\r\n            var tools = ['alliteration','scramble','acronym','stopwords'];\r\n            var self = this;\r\n            tools.forEach(function (t) {\r\n                var panel = document.getElementById('pth-tool-' + t);\r\n                var btn   = document.querySelector('#pth-word-wrapper [data-tool=\"' + t + '\"]');\r\n                if (panel) panel.style.display = (t === tool) ? 'block' : 'none';\r\n                if (btn)   { btn.classList.toggle('pth-active', t === tool); btn.setAttribute('aria-pressed', t === tool ? 'true' : 'false'); }\r\n            });\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 BUILD WORD POOL \u2500\u2500\u2500 *\/\r\n        buildPool: function () {\r\n            var self = this;\r\n            var pool = [];\r\n            var posMap = { nouns: 'nouns', verbs: 'verbs', adjectives: 'adjectives', adverbs: 'adverbs', pronouns: 'pronouns', prepositions: 'prepositions' };\r\n            var posKeys = ['nouns','verbs','adjectives','adverbs','pronouns','prepositions'];\r\n            for (var pk = 0; pthLt(pk, posKeys.length); pk++) {\r\n                var posId = posKeys[pk];\r\n                var cb = document.getElementById('pth-pos-' + posId);\r\n                if (cb && cb.checked && self.lex[posId]) {\r\n                    pool = pool.concat(self.lex[posId]);\r\n                }\r\n            }\r\n            return pool;\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 GENERATE WORDS \u2500\u2500\u2500 *\/\r\n        generateWords: function () {\r\n            var self = this;\r\n            var count    = Math.max(1, Math.min(1000, parseInt(document.getElementById('pth-word-count-in').value, 10) || 20));\r\n            var minLen   = parseInt(document.getElementById('pth-min-len').value, 10)  || 2;\r\n            var maxLen   = parseInt(document.getElementById('pth-max-len').value, 10)  || 14;\r\n            var sw       = (document.getElementById('pth-starts-with').value || '').toLowerCase().trim();\r\n            var ew       = (document.getElementById('pth-ends-with').value   || '').toLowerCase().trim();\r\n            var freq     = document.getElementById('pth-word-freq').value || 'all';\r\n            var fmt      = document.getElementById('pth-word-format').value || 'line';\r\n            var cas      = document.getElementById('pth-word-case').value || 'lower';\r\n            var unique   = document.getElementById('pth-unique-only').checked;\r\n\r\n            if (pthGt(minLen, maxLen)) { self.showToast('Min letters cannot exceed Max letters!', 'error'); return; }\r\n\r\n            var pool = self.buildPool();\r\n            if (!pool.length) { self.showToast('Select at least one part of speech!', 'error'); return; }\r\n\r\n            \/* Frequency filter: lex arrays have common=first ~50, uncommon=50-150, rare=150+ *\/\r\n            var freqPool = pool;\r\n            if (freq === 'common')   freqPool = pool.filter(function (w, i) { return pthLt(i, Math.floor(pool.length * 0.4)); });\r\n            if (freq === 'uncommon') freqPool = pool.filter(function (w, i) { return pthGte(i, Math.floor(pool.length * 0.3)) && pthLt(i, Math.floor(pool.length * 0.8)); });\r\n            if (freq === 'rare')     freqPool = pool.filter(function (w, i) { return pthGte(i, Math.floor(pool.length * 0.7)); });\r\n\r\n            \/* Length + filter *\/\r\n            var filtered = freqPool.filter(function (w) {\r\n                var ok = pthGte(w.length, minLen) && pthLte(w.length, maxLen);\r\n                if (sw && w.indexOf(sw) !== 0) ok = false;\r\n                if (ew && w.indexOf(ew, w.length - ew.length) === -1) ok = false;\r\n                return ok;\r\n            });\r\n\r\n            if (!filtered.length) { self.showToast('No words match your filters \u2014 try widening them!', 'error'); return; }\r\n\r\n            \/* Pick words *\/\r\n            var results = [];\r\n            if (unique) {\r\n                var shuffled = filtered.slice().sort(function () { return Math.random() - 0.5; });\r\n                results = shuffled.slice(0, Math.min(count, shuffled.length));\r\n            } else {\r\n                for (var i = 0; pthLt(i, count); i++) {\r\n                    results.push(filtered[Math.floor(Math.random() * filtered.length)]);\r\n                }\r\n            }\r\n\r\n            \/* Apply case *\/\r\n            results = results.map(function (w) {\r\n                if (cas === 'upper')  return w.toUpperCase();\r\n                if (cas === 'title')  return w.charAt(0).toUpperCase() + w.slice(1);\r\n                if (cas === 'random') return w.split('').map(function (c, i) { return i % 2 === 0 ? c.toLowerCase() : c.toUpperCase(); }).join('');\r\n                return w;\r\n            });\r\n\r\n            \/* Format *\/\r\n            var out = self.formatWords(results, fmt);\r\n            self.setOutput(out);\r\n            self.updateBadge(results.length, 'Words');\r\n            self.updateSession(results.length);\r\n            self.showToast(results.length + ' words generated!', 'success');\r\n        },\r\n\r\n        formatWords: function (words, fmt) {\r\n            if (fmt === 'comma')    return words.join(', ');\r\n            if (fmt === 'space')    return words.join(' ');\r\n            if (fmt === 'json')     return JSON.stringify(words, null, 2);\r\n            if (fmt === 'numbered') return words.map(function (w, i) { return (i + 1) + '. ' + w; }).join('\\n');\r\n            if (fmt === 'bullets')  return words.map(function (w) { return '\u2022 ' + w; }).join('\\n');\r\n            return words.join('\\n');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 GENERATE SENTENCES \u2500\u2500\u2500 *\/\r\n        generateSentences: function () {\r\n            var self   = this;\r\n            var count  = Math.max(1, Math.min(50, parseInt(document.getElementById('pth-sent-count').value, 10) || 5));\r\n            var tense  = document.getElementById('pth-sent-tense').value  || 'present';\r\n            var style  = document.getElementById('pth-sent-style').value  || 'simple';\r\n            var topic  = document.getElementById('pth-sent-topic').value  || 'all';\r\n\r\n            var nouns  = self.lex.nouns.filter(function (w) { return pthGte(w.length, 4); });\r\n            var verbs  = self.lex.verbs.filter(function (w) { return pthGte(w.length, 3); });\r\n            var adjs   = self.lex.adjectives.filter(function (w) { return pthGte(w.length, 4); });\r\n            var advs   = self.lex.adverbs;\r\n\r\n            var pick = function (arr) { return arr[Math.floor(Math.random() * arr.length)]; };\r\n\r\n            var pastEnding = function (v) {\r\n                if (v.charAt(v.length-1) === 'e') return v + 'd';\r\n                if (v.charAt(v.length-1) === 'y' && 'aeiou'.indexOf(v.charAt(v.length-2)) === -1) return v.slice(0,-1) + 'ied';\r\n                return v + 'ed';\r\n            };\r\n            var futureForm = function (v) { return 'will ' + v; };\r\n            var applyTense = function (v) {\r\n                if (tense === 'past')   return pastEnding(v);\r\n                if (tense === 'future') return futureForm(v);\r\n                return v + 's';\r\n            };\r\n\r\n            var templates = self.sentTemplates[topic] || self.sentTemplates.all;\r\n            var results = [];\r\n\r\n            for (var i = 0; pthLt(i, count); i++) {\r\n                var tmpl;\r\n                if (style === 'compound') {\r\n                    var t1 = templates[Math.floor(Math.random() * templates.length)];\r\n                    var t2 = templates[Math.floor(Math.random() * templates.length)];\r\n                    var conj = pick(['and','but','yet','so','while']);\r\n                    tmpl = t1.replace(\/\\.$\/, '') + ', ' + conj + ' ' + t2.toLowerCase();\r\n                } else if (style === 'adverb') {\r\n                    tmpl = pick(advs).charAt(0).toUpperCase() + pick(advs).slice(1) + ', ' + (templates[Math.floor(Math.random() * templates.length)]).toLowerCase();\r\n                } else {\r\n                    tmpl = templates[Math.floor(Math.random() * templates.length)];\r\n                }\r\n\r\n                var sent = tmpl\r\n                    .replace(\/\\{noun\\}\/g,  function () { return pick(nouns); })\r\n                    .replace(\/\\{verb\\}\/g,  function () { return applyTense(pick(verbs)); })\r\n                    .replace(\/\\{adj\\}\/g,   function () { return pick(adjs); })\r\n                    .replace(\/\\{adv\\}\/g,   function () { return pick(advs); });\r\n\r\n                \/* Capitalise first letter *\/\r\n                sent = sent.charAt(0).toUpperCase() + sent.slice(1);\r\n                var lastCh = sent.charAt(sent.length-1); if (lastCh !== '.' && lastCh !== '!' && lastCh !== '?') sent += '.';\r\n                results.push(sent);\r\n            }\r\n\r\n            self.setOutput(results.join('\\n\\n'));\r\n            self.updateBadge(results.length, 'Sentences');\r\n            self.updateSession(results.length);\r\n            self.showToast(results.length + ' sentences generated!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 GENERATE LOREM \u2500\u2500\u2500 *\/\r\n        generateLorem: function () {\r\n            var self    = this;\r\n            var type    = document.getElementById('pth-lorem-type').value  || 'classic';\r\n            var unit    = document.getElementById('pth-lorem-unit').value  || 'paragraphs';\r\n            var count   = Math.max(1, Math.min(20, parseInt(document.getElementById('pth-lorem-count').value, 10) || 3));\r\n            var startLo = document.getElementById('pth-lorem-start').value === 'lorem';\r\n            var wrapHtml= document.getElementById('pth-lorem-html').checked;\r\n\r\n            var pool = self.loremPools[type] || self.loremPools.classic;\r\n            var wordPool = self.lex.nouns.concat(self.lex.adjectives, self.lex.verbs, self.lex.adverbs);\r\n            var pick = function (arr) { return arr[Math.floor(Math.random() * arr.length)]; };\r\n\r\n            var buildPara = function () {\r\n                var sents = [];\r\n                var sc = 2 + Math.floor(Math.random() * 4);\r\n                for (var i = 0; pthLt(i, sc); i++) sents.push(pool[Math.floor(Math.random() * pool.length)]);\r\n                return sents.join(' ');\r\n            };\r\n\r\n            var buildSent = function () {\r\n                return pool[Math.floor(Math.random() * pool.length)];\r\n            };\r\n\r\n            var results = [];\r\n\r\n            if (unit === 'paragraphs') {\r\n                for (var p = 0; pthLt(p, count); p++) {\r\n                    var para = buildPara();\r\n                    if (p === 0 && startLo && type === 'classic') para = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' + para;\r\n                    results.push(wrapHtml ? '<p>' + para + '<\/p>' : para);\r\n                }\r\n            } else if (unit === 'sentences') {\r\n                for (var s = 0; pthLt(s, count); s++) results.push(buildSent());\r\n                if (wrapHtml) results = ['<p>' + results.join(' ') + '<\/p>'];\r\n            } else if (unit === 'words') {\r\n                var words = [];\r\n                for (var w = 0; pthLt(w, count); w++) words.push(pick(wordPool));\r\n                results.push(words.join(' '));\r\n            } else if (unit === 'bytes') {\r\n                var target = count;\r\n                var out = '';\r\n                while (pthLt(out.length, target)) out += pick(pool) + ' ';\r\n                results.push(out.substring(0, target));\r\n            }\r\n\r\n            var finalOut = results.join('\\n\\n');\r\n            self.setOutput(finalOut);\r\n            self.updateBadge(count, unit.charAt(0).toUpperCase() + unit.slice(1));\r\n            self.updateSession(count);\r\n            self.showToast('Lorem ipsum generated!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 GENERATE ALLITERATION \u2500\u2500\u2500 *\/\r\n        generateAlliteration: function () {\r\n            var self   = this;\r\n            var letter = document.getElementById('pth-allit-letter').value || 'random';\r\n            var count  = Math.max(3, Math.min(30, parseInt(document.getElementById('pth-allit-count').value, 10) || 8));\r\n            var pool   = self.lex.nouns.concat(self.lex.adjectives, self.lex.verbs, self.lex.adverbs);\r\n\r\n            if (letter === 'random') {\r\n                var letters = 'abcdefghmnprstw'.split('');\r\n                letter = letters[Math.floor(Math.random() * letters.length)];\r\n            }\r\n\r\n            var filtered = pool.filter(function (w) { return w.indexOf(letter) === 0 && pthGte(w.length, 3); });\r\n            if (!filtered.length) { self.showToast('No words found starting with ' + letter.toUpperCase() + '!', 'error'); return; }\r\n\r\n            var results = [];\r\n            var shuffled = filtered.slice().sort(function () { return Math.random() - 0.5; });\r\n            results = shuffled.slice(0, Math.min(count, shuffled.length));\r\n\r\n            var container = document.getElementById('pth-allit-output');\r\n            if (container) {\r\n                container.innerHTML = '';\r\n                results.forEach(function (w) {\r\n                    var pill = document.createElement('span');\r\n                    pill.className = 'pth-pill';\r\n                    pill.textContent = w;\r\n                    pill.title = 'Click to copy';\r\n                    pill.setAttribute('role', 'button');\r\n                    pill.setAttribute('tabindex', '0');\r\n                    pill.setAttribute('aria-label', 'Copy word ' + w);\r\n                    pill.addEventListener('click', function () { self.copyText(w); });\r\n                    container.appendChild(pill);\r\n                });\r\n            }\r\n            self.setOutput('Alliteration with ' + letter.toUpperCase() + ':\\n' + results.join(', '));\r\n            self.updateBadge(results.length, 'Words');\r\n            self.showToast(results.length + ' alliterating words with ' + letter.toUpperCase() + '!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 SCRAMBLE WORDS \u2500\u2500\u2500 *\/\r\n        scrambleWords: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-scramble-input');\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Enter words to scramble!', 'error'); return; }\r\n\r\n            var raw   = inputEl.value.trim();\r\n            var words = raw.split(\/[\\n,]+\/).map(function (w) { return w.trim(); }).filter(function (w) { return pthGt(w.length, 0); });\r\n\r\n            var scramble = function (word) {\r\n                var a = word.split('');\r\n                for (var i = a.length - 1; pthGt(i, 0); i--) {\r\n                    var j = Math.floor(Math.random() * (i + 1));\r\n                    var tmp = a[i]; a[i] = a[j]; a[j] = tmp;\r\n                }\r\n                return a.join('');\r\n            };\r\n\r\n            var container = document.getElementById('pth-scramble-output');\r\n            if (container) {\r\n                container.innerHTML = '';\r\n                words.forEach(function (w) {\r\n                    var scrambled = scramble(w);\r\n                    var pill = document.createElement('span');\r\n                    pill.className = 'pth-pill pth-pill-purple';\r\n                    pill.textContent = scrambled;\r\n                    pill.title = 'Original: ' + w;\r\n                    pill.setAttribute('role', 'button');\r\n                    pill.setAttribute('tabindex', '0');\r\n                    pill.setAttribute('aria-label', 'Scrambled: ' + scrambled + ', original: ' + w);\r\n                    pill.addEventListener('click', function () { self.copyText(scrambled); });\r\n                    container.appendChild(pill);\r\n                });\r\n            }\r\n\r\n            var out = words.map(function (w) { return w + ' \u2192 ' + scramble(w); }).join('\\n');\r\n            self.setOutput('Scrambled Words:\\n' + out);\r\n            self.updateBadge(words.length, 'Scrambled');\r\n            self.showToast(words.length + ' words scrambled!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 ACRONYM TOOLS \u2500\u2500\u2500 *\/\r\n        makeAcronym: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-acronym-input');\r\n            var outEl   = document.getElementById('pth-acronym-output');\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Enter a phrase!', 'error'); return; }\r\n\r\n            var phrase = inputEl.value.trim();\r\n            var words  = phrase.split(\/\\s+\/).filter(function (w) { return pthGt(w.length, 0); });\r\n            var acronym = words.map(function (w) { return w[0].toUpperCase(); }).join('');\r\n\r\n            if (outEl) outEl.textContent = 'Acronym: ' + acronym + '\\n\\nExpanded: ' + phrase + '\\n\\nLetters: ' + words.map(function (w) { return w[0].toUpperCase() + ' = ' + w; }).join('\\n');\r\n            self.setOutput('Acronym: ' + acronym + ' = ' + phrase);\r\n            self.showToast('Acronym created: ' + acronym, 'success');\r\n        },\r\n\r\n        expandAcronym: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-acronym-expand');\r\n            var outEl   = document.getElementById('pth-acronym-output');\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Enter an acronym to expand!', 'error'); return; }\r\n\r\n            var acro   = inputEl.value.trim().toUpperCase().replace(\/[^A-Z]\/g, '');\r\n            var pool   = self.lex.nouns.concat(self.lex.adjectives, self.lex.verbs);\r\n            var pick   = function (arr) { return arr[Math.floor(Math.random() * arr.length)]; };\r\n\r\n            var lines  = [acro + ' could stand for:'];\r\n            for (var attempt = 0; pthLt(attempt, 3); attempt++) {\r\n                var words = [];\r\n                for (var i = 0; pthLt(i, acro.length); i++) {\r\n                    var letter = acro[i].toLowerCase();\r\n                    var matching = pool.filter(function (w) { return w.indexOf(letter) === 0; });\r\n                    words.push(matching.length ? pick(matching) : letter + '...');\r\n                }\r\n                lines.push('\\n' + acro + ' = ' + words.map(function (w) { return w.charAt(0).toUpperCase() + w.slice(1); }).join(' '));\r\n            }\r\n\r\n            if (outEl) outEl.textContent = lines.join('');\r\n            self.setOutput(lines.join(''));\r\n            self.showToast('Acronym expanded!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 STOP WORDS \u2500\u2500\u2500 *\/\r\n        removeStopWords: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-sw-input');\r\n            var outEl   = document.getElementById('pth-sw-output');\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Paste some text first!', 'error'); return; }\r\n\r\n            var text = inputEl.value.trim();\r\n            var words = text.split(\/\\s+\/);\r\n            var filtered = words.filter(function (w) {\r\n                return !self.stopWords[w.toLowerCase().replace(\/[^a-z]\/g, '')];\r\n            });\r\n\r\n            if (outEl) outEl.textContent = filtered.join(' ');\r\n            self.setOutput(filtered.join(' '));\r\n            self.updateBadge(filtered.length, 'Keywords');\r\n            self.showToast('Removed ' + (words.length - filtered.length) + ' stop words!', 'success');\r\n        },\r\n\r\n        highlightStopWords: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-sw-input');\r\n            var outEl   = document.getElementById('pth-sw-output');\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Paste some text first!', 'error'); return; }\r\n\r\n            var text  = inputEl.value.trim();\r\n            var words = text.split(\/\\s+\/);\r\n            var html  = words.map(function (w) {\r\n                var clean = w.toLowerCase().replace(\/[^a-z]\/g, '');\r\n                if (self.stopWords[clean]) {\r\n                    return '<span style=\"background:#fef2f2;color:#991b1b;border-radius:3px;padding:0 3px;font-weight:700;\">' + self.escHtml(w) + '<\/span>';\r\n                }\r\n                return '<span style=\"font-weight:600;color:#0f172a;\">' + self.escHtml(w) + '<\/span>';\r\n            }).join(' ');\r\n\r\n            if (outEl) outEl.innerHTML = html;\r\n            var swCount = words.filter(function (w) { return self.stopWords[w.toLowerCase().replace(\/[^a-z]\/g,'')]; }).length;\r\n            self.showToast(swCount + ' stop words highlighted in red!', 'info');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 WRITING PROMPTS \u2500\u2500\u2500 *\/\r\n        generatePrompts: function () {\r\n            var self   = this;\r\n            var genre  = document.getElementById('pth-prompt-genre').value  || 'all';\r\n            var type   = document.getElementById('pth-prompt-type').value   || 'all';\r\n            var count  = Math.max(1, Math.min(10, parseInt(document.getElementById('pth-prompt-count').value, 10) || 3));\r\n\r\n            var typePools = ['starter','character','setting','conflict','twist'];\r\n            var pick      = function (arr) { return arr[Math.floor(Math.random() * arr.length)]; };\r\n            var pickType  = type === 'all' ? function () { return pick(typePools); } : function () { return type; };\r\n\r\n            var getPrompts = function (pType) {\r\n                var pool = self.promptTemplates[pType];\r\n                if (!pool) return ['No prompts for this type.'];\r\n                if (pool[genre]) return pool[genre];\r\n                if (pool.all) return pool.all;\r\n                \/* Try any available genre *\/\r\n                var keys = Object.keys(pool);\r\n                return pool[keys[0]];\r\n            };\r\n\r\n            var container = document.getElementById('pth-tab-prompts');\r\n            var existing  = container ? container.querySelector('#pth-prompts-output') : null;\r\n            if (existing) existing.remove();\r\n\r\n            var outDiv = document.createElement('div');\r\n            outDiv.id  = 'pth-prompts-output';\r\n            outDiv.style.marginTop = '14px';\r\n\r\n            var allTexts = [];\r\n            for (var i = 0; pthLt(i, count); i++) {\r\n                var pType   = pickType();\r\n                var prompts = getPrompts(pType);\r\n                var text    = prompts[Math.floor(Math.random() * prompts.length)];\r\n                allTexts.push('[' + pType.toUpperCase() + '] ' + text);\r\n\r\n                var card = document.createElement('div');\r\n                card.className = 'pth-prompt-card';\r\n\r\n                var badge = document.createElement('span');\r\n                badge.className = 'pth-prompt-type-badge';\r\n                badge.textContent = (genre !== 'all' ? genre.toUpperCase() + ' \u00b7 ' : '') + pType.toUpperCase();\r\n\r\n                var textEl = document.createElement('div');\r\n                textEl.className = 'pth-prompt-text';\r\n                textEl.textContent = text;\r\n\r\n                card.appendChild(badge);\r\n                card.appendChild(textEl);\r\n                outDiv.appendChild(card);\r\n            }\r\n\r\n            if (container) container.appendChild(outDiv);\r\n            self.setOutput(allTexts.join('\\n\\n'));\r\n            self.updateBadge(count, 'Prompts');\r\n            self.updateSession(count);\r\n            self.showToast(count + ' writing prompts generated!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 CHARACTER NAMES \u2500\u2500\u2500 *\/\r\n        generateNames: function () {\r\n            var self    = this;\r\n            var origin  = document.getElementById('pth-name-origin').value  || 'english';\r\n            var gender  = document.getElementById('pth-name-gender').value  || 'any';\r\n            var outEl   = document.getElementById('pth-name-output');\r\n            var nameSet = self.names[origin] || self.names.english;\r\n            var pick    = function (arr) { return arr[Math.floor(Math.random() * arr.length)]; };\r\n\r\n            var firstNames;\r\n            if (gender === 'm')       firstNames = nameSet.m;\r\n            else if (gender === 'f')  firstNames = nameSet.f;\r\n            else if (gender === 'neutral') firstNames = nameSet.neutral;\r\n            else firstNames = nameSet.m.concat(nameSet.f, nameSet.neutral || []);\r\n\r\n            var names = [];\r\n            for (var i = 0; pthLt(i, 4); i++) {\r\n                names.push(pick(firstNames) + ' ' + pick(nameSet.sur));\r\n            }\r\n\r\n            if (outEl) outEl.textContent = names.join('  \u00b7  ');\r\n            self.setOutput('Character Names (' + origin + '):\\n' + names.join('\\n'));\r\n            self.showToast('4 character names generated!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 WORD STATISTICS \u2500\u2500\u2500 *\/\r\n        analyzeStats: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-stats-input');\r\n            var resEl   = document.getElementById('pth-stats-results');\r\n            var gridEl  = document.getElementById('pth-stats-grid');\r\n            var freqEl  = document.getElementById('pth-freq-table');\r\n            var richEl  = document.getElementById('pth-richness-fill');\r\n            var richLbl = document.getElementById('pth-richness-label');\r\n\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Paste some text to analyze!', 'error'); return; }\r\n\r\n            var text   = inputEl.value.trim();\r\n            var allWords = text.split(\/\\s+\/).filter(function (w) { return pthGt(w.length, 0); });\r\n            var cleanWords = allWords.map(function (w) { return w.toLowerCase().replace(\/[^a-z]\/g, ''); }).filter(function (w) { return pthGt(w.length, 1); });\r\n\r\n            var totalWords   = allWords.length;\r\n            var uniqueMap = {}; for (var ui = 0; pthLt(ui, cleanWords.length); ui++) { uniqueMap[cleanWords[ui]] = 1; }\r\n            var uniqueWords = 0; for (var uk in uniqueMap) { if (uniqueMap.hasOwnProperty(uk)) uniqueWords++; }\r\n            var avgLen       = cleanWords.reduce(function (s, w) { return s + w.length; }, 0) \/ (cleanWords.length || 1);\r\n            var sentences    = (text.match(\/[^.!?]+[.!?]+\/g) || [text]).length;\r\n            var avgSentLen   = Math.round(totalWords \/ (sentences || 1));\r\n            var richness     = Math.round((uniqueWords \/ (totalWords || 1)) * 100);\r\n\r\n            \/* Frequency count *\/\r\n            var freq = {};\r\n            cleanWords.forEach(function (w) {\r\n                if (!self.stopWords[w]) freq[w] = (freq[w] || 0) + 1;\r\n            });\r\n            var sorted = Object.keys(freq).sort(function (a, b) { return freq[b] - freq[a]; }).slice(0, 20);\r\n            var maxFreq = pthGt(sorted.length, 0) ? freq[sorted[0]] : 1;\r\n\r\n            \/* Syllable estimate *\/\r\n            var syllables = cleanWords.reduce(function (s, w) {\r\n                var m = w.match(\/[aeiouy]{1,2}\/g);\r\n                return s + (m ? m.length : 1);\r\n            }, 0);\r\n\r\n            \/* Render stats grid *\/\r\n            if (gridEl) {\r\n                gridEl.innerHTML = [\r\n                    { num: totalWords,               lbl: 'Total Words' },\r\n                    { num: uniqueWords,              lbl: 'Unique Words' },\r\n                    { num: sentences,                lbl: 'Sentences' },\r\n                    { num: avgSentLen + ' words',    lbl: 'Avg Sentence Length' },\r\n                    { num: avgLen.toFixed(1) + ' ch',lbl: 'Avg Word Length' },\r\n                    { num: syllables,                lbl: 'Syllables (est.)' },\r\n                    { num: richness + '%',           lbl: 'Vocabulary Richness' },\r\n                    { num: text.length,              lbl: 'Characters' }\r\n                ].map(function (s) {\r\n                    return '<div class=\"pth-stat-box\"><span class=\"pth-stat-num\">' + s.num + '<\/span><span class=\"pth-stat-lbl\">' + s.lbl + '<\/span><\/div>';\r\n                }).join('');\r\n            }\r\n\r\n            \/* Frequency table *\/\r\n            if (freqEl) {\r\n                freqEl.innerHTML = sorted.map(function (w) {\r\n                    var pct = Math.round((freq[w] \/ maxFreq) * 100);\r\n                    return '<div class=\"pth-freq-row\">' +\r\n                        '<span class=\"pth-freq-word\">' + w + '<\/span>' +\r\n                        '<div class=\"pth-freq-bar-bg\"><div class=\"pth-freq-bar-fill\" style=\"width:' + pct + '%;\"><\/div><\/div>' +\r\n                        '<span class=\"pth-freq-count\">' + freq[w] + '<\/span>' +\r\n                        '<\/div>';\r\n                }).join('');\r\n            }\r\n\r\n            \/* Richness bar *\/\r\n            if (richEl)  richEl.style.width = richness + '%';\r\n            if (richLbl) richLbl.textContent = richness + '% unique word ratio \u2014 ' +\r\n                (pthGte(richness, 70) ? '\ud83d\udfe2 Excellent vocabulary diversity' :\r\n                 pthGte(richness, 50) ? '\ud83d\udfe1 Good \u2014 room for more varied vocabulary' :\r\n                 '\ud83d\udd34 Low diversity \u2014 consider more varied word choices');\r\n\r\n            if (resEl) resEl.style.display = 'block';\r\n            self.showToast('Text analyzed \u2014 ' + totalWords + ' words!', 'success');\r\n        },\r\n\r\n        exportStatsReport: function () {\r\n            var self    = this;\r\n            var inputEl = document.getElementById('pth-stats-input');\r\n            if (!inputEl || !inputEl.value.trim()) { self.showToast('Run analysis first!', 'error'); return; }\r\n            var boxes = document.querySelectorAll('#pth-stats-grid .pth-stat-box');\r\n            var sep = ''; for (var si = 0; pthLt(si, 40); si++) { sep += '='; } var report = 'PTH Word Statistics Report\\nGenerated by Ultimate Word Studio Pro v2.0\\n' + sep + '\\n\\n';\r\n            Array.prototype.forEach.call(boxes, function (box) {\r\n                var num = box.querySelector('.pth-stat-num');\r\n                var lbl = box.querySelector('.pth-stat-lbl');\r\n                if (num && lbl) report += lbl.textContent + ': ' + num.textContent + '\\n';\r\n            });\r\n            report += '\\nTop Keywords (by frequency):\\n';\r\n            Array.prototype.forEach.call(document.querySelectorAll('#pth-freq-table .pth-freq-row'), function (row) {\r\n                var word = row.querySelector('.pth-freq-word');\r\n                var cnt  = row.querySelector('.pth-freq-count');\r\n                if (word && cnt) report += word.textContent + ': ' + cnt.textContent + ' times\\n';\r\n            });\r\n            var blob = new Blob([report], { type: 'text\/plain' });\r\n            var url  = URL.createObjectURL(blob);\r\n            var a    = document.createElement('a');\r\n            a.href = url; a.download = 'pth-word-stats-' + Date.now() + '.txt'; a.click();\r\n            URL.revokeObjectURL(url);\r\n            self.showToast('Report exported!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 LOAD SAMPLE \u2500\u2500\u2500 *\/\r\n        loadSample: function () {\r\n            var self = this;\r\n            var countEl = document.getElementById('pth-word-count-in');\r\n            if (countEl) countEl.value = '20';\r\n            self.generateWords();\r\n            self.showToast('Sample generated!', 'success');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 OUTPUT HELPERS \u2500\u2500\u2500 *\/\r\n        setOutput: function (text) {\r\n            var self = this;\r\n            var outEl = document.getElementById('pth-main-output');\r\n            if (outEl) outEl.textContent = text;\r\n            \/* Sidebar preview \u2014 first 8 items *\/\r\n            var sbPrev = document.getElementById('pth-sb-preview');\r\n            if (sbPrev) {\r\n                var lines = text.split('\\n').filter(function (l) { return pthGt(l.trim().length, 0); });\r\n                sbPrev.textContent = lines.slice(0, 8).join('\\n') + (pthGt(lines.length, 8) ? '\\n...' : '');\r\n            }\r\n        },\r\n\r\n        updateBadge: function (count, unit) {\r\n            var el = document.getElementById('pth-live-badge');\r\n            if (el) el.textContent = count + ' ' + unit;\r\n        },\r\n\r\n        updateSession: function (count) {\r\n            this.sessionWordsGen += count;\r\n            this.sessionGenCount++;\r\n            var wgEl = document.getElementById('pth-sb-words-gen');\r\n            var gcEl = document.getElementById('pth-sb-gen-count');\r\n            if (wgEl) wgEl.textContent = this.sessionWordsGen;\r\n            if (gcEl) gcEl.textContent = this.sessionGenCount;\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 COPY \/ EXPORT \u2500\u2500\u2500 *\/\r\n        copyOutput: function () {\r\n            var self  = this;\r\n            var outEl = document.getElementById('pth-main-output');\r\n            if (!outEl || !outEl.textContent.trim()) { self.showToast('Nothing to copy!', 'error'); return; }\r\n            self.copyText(outEl.textContent);\r\n        },\r\n\r\n        copyText: function (text) {\r\n            var self = this;\r\n            try {\r\n                navigator.clipboard.writeText(text).then(function () {\r\n                    self.showToast('Copied!', 'success');\r\n                }).catch(function () { self.fallbackCopy(text); });\r\n            } catch(e) { self.fallbackCopy(text); }\r\n        },\r\n\r\n        fallbackCopy: function (text) {\r\n            var ta = document.createElement('textarea');\r\n            ta.value = text; ta.style.position = 'fixed'; ta.style.top = '-9999px';\r\n            document.body.appendChild(ta); ta.select();\r\n            try { document.execCommand('copy'); this.showToast('Copied!', 'success'); } catch(e) {}\r\n            document.body.removeChild(ta);\r\n        },\r\n\r\n        exportTxt: function () {\r\n            var outEl = document.getElementById('pth-main-output');\r\n            if (!outEl || !outEl.textContent.trim()) { this.showToast('Nothing to export!', 'error'); return; }\r\n            var blob = new Blob([outEl.textContent], { type: 'text\/plain' });\r\n            var url  = URL.createObjectURL(blob);\r\n            var a    = document.createElement('a');\r\n            a.href = url; a.download = 'pth-word-studio-' + Date.now() + '.txt'; a.click();\r\n            URL.revokeObjectURL(url);\r\n            this.showToast('Exported as .txt!', 'success');\r\n        },\r\n\r\n        clearOutput: function () {\r\n            var outEl = document.getElementById('pth-main-output');\r\n            if (outEl) outEl.textContent = 'Click Generate on any tab to see results here';\r\n            this.updateBadge(0, 'Items');\r\n            this.showToast('Cleared!', 'info');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 FULL WIDTH \u2500\u2500\u2500 *\/\r\n        toggleWidth: function () {\r\n            var layout  = document.getElementById('pth-word-layout');\r\n            var sidebar = document.getElementById('pth-word-sidebar');\r\n            var btn     = document.getElementById('pth-word-fw-btn');\r\n            if (!layout || !sidebar || !btn) return;\r\n            if (layout.classList.contains('pth-full-width')) {\r\n                layout.classList.remove('pth-full-width');\r\n                sidebar.style.display = '';\r\n                btn.textContent = '\\u29c6 Full Width';\r\n            } else {\r\n                layout.classList.add('pth-full-width');\r\n                sidebar.style.display = 'none';\r\n                btn.textContent = '\\u25e8 Split View';\r\n            }\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 HELPERS \u2500\u2500\u2500 *\/\r\n        escHtml: function (s) {\r\n            var lt = String.fromCharCode(60);\r\n            var gt = String.fromCharCode(62);\r\n            return String(s).replace(\/&\/g,'&amp;').replace(new RegExp(lt,'g'),'&lt;').replace(new RegExp(gt,'g'),'&gt;');\r\n        },\r\n\r\n        \/* \u2500\u2500\u2500 TOAST \u2500\u2500\u2500 *\/\r\n        showToast: function (msg, type) {\r\n            var c = document.getElementById('pth-word-toast');\r\n            if (!c) return;\r\n            var t = document.createElement('div');\r\n            t.className = 'pth-toast-msg pth-toast-' + (type || 'info');\r\n            t.textContent = msg;\r\n            c.appendChild(t);\r\n            setTimeout(function () { if (t.parentNode) t.parentNode.removeChild(t); }, 3500);\r\n        }\r\n    };\r\n\r\n    \/* \u2500\u2500 4-LAYER BOOTSTRAP (enhanced retry) \u2500\u2500 *\/\r\n    function runInit() {\r\n        if (!window.pthWordApp.initialized &&\r\n            document.getElementById('pth-word-wrapper')) {\r\n            window.pthWordApp.initialized = true;\r\n            window.pthWordApp.init();\r\n        }\r\n    }\r\n    \/* Layer 1: immediate *\/\r\n    runInit();\r\n    \/* Layer 2: DOMContentLoaded *\/\r\n    if (document.readyState === 'loading') {\r\n        document.addEventListener('DOMContentLoaded', runInit);\r\n    } else {\r\n        runInit();\r\n    }\r\n    \/* Layer 3: window.load + retries *\/\r\n    window.addEventListener('load', function () {\r\n        runInit();\r\n        setTimeout(runInit, 100);\r\n        setTimeout(runInit, 500);\r\n        setTimeout(runInit, 1500);\r\n    });\r\n    \/* Layer 4: MutationObserver *\/\r\n    if (!window.pthWordApp.initialized && typeof MutationObserver !== 'undefined') {\r\n        var pthObs = new MutationObserver(function () {\r\n            if (document.getElementById('pth-word-wrapper')) {\r\n                pthObs.disconnect(); runInit();\r\n            }\r\n        });\r\n        pthObs.observe(document.body || document.documentElement, { childList: true, subtree: true });\r\n        setTimeout(function () { pthObs.disconnect(); }, 10000);\r\n    }\r\n})();\r\n<\/script>\n\n\n\n<style>\n.pth-feature-wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:20px;margin-bottom:30px}\n.pth-feat-box{border:1px solid #e2e8f0;background:#fff;padding:24px;border-radius:12px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.02);transition:all .3s ease}\n.pth-feat-box:hover{border-color:#bfdbfe;transform:translateY(-3px);box-shadow:0 10px 15px -3px rgba(0,0,0,0.05)}\n.pth-feat-title{font-size:1.05rem;font-weight:800;color:#0f172a;margin-bottom:10px;display:flex;align-items:center;gap:10px}\n.pth-feat-text{font-size:.9rem;color:#1e293b;line-height:1.6;margin:0;font-weight:500}\n.pth-steps-wrap{border:1px solid #e2e8f0;background:#fff;padding:40px 30px;border-radius:16px;text-align:center;box-shadow:0 4px 6px -1px rgba(0,0,0,0.02);margin-bottom:40px}\n.pth-steps-title{font-size:1.2rem;font-weight:800;color:#0f172a;text-transform:uppercase;margin-bottom:35px;letter-spacing:1px}\n.pth-steps-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:30px}\n.pth-step-item{display:flex;flex-direction:column;align-items:center}\n.pth-step-num{width:45px;height:45px;background:#2563eb;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.2rem;margin-bottom:15px;box-shadow:0 4px 10px rgba(37,99,235,.3)}\n.pth-step-name{font-weight:800;color:#0f172a;margin-bottom:8px;font-size:1rem}\n.pth-step-desc{font-size:.9rem;color:#1e293b;line-height:1.5;margin:0;font-weight:500}\n<\/style>\n\n<div class=\"pth-feature-wrap\">\n    <div class=\"pth-feat-box\">\n        <div class=\"pth-feat-title\">\ud83d\udfe2 1200+ Word Lexicon with 6 Parts of Speech<\/div>\n        <p class=\"pth-feat-text\">The \ud83d\udcdd Words tab draws from a 1200+ word lexicon spanning six parts of speech \u2014 Nouns, Verbs, Adjectives, Adverbs, Pronouns, and Prepositions. Each category has three frequency tiers: Common words (everyday vocabulary), Uncommon (richer literary vocabulary), and Rare (poetic and unusual words like <em>petrichor<\/em>, <em>vellichor<\/em>, <em>susurrus<\/em>). Tick any combination of checkboxes to mix parts of speech. Filter by minimum and maximum letter length, by starting or ending letters, by frequency tier, and choose from six output formats \u2014 one per line, comma, space, JSON array, numbered list, or bullet list. Unique words only mode prevents repeats in the output.<\/p>\n    <\/div>\n    <div class=\"pth-feat-box\">\n        <div class=\"pth-feat-title\">\ud83d\udd35 Sentence Builder, Lorem Ipsum+ and Word Toolkit<\/div>\n        <p class=\"pth-feat-text\">The \ud83d\udcac Sentences tab generates grammatically structured random sentences with topic focus (Nature, Business, Tech, People, Abstract), tense (Present, Past, Future), and style (Simple, Descriptive, Compound, With Adverb). The \ud83d\udcc4 Lorem+ tab offers five placeholder text variants \u2014 Classic Latin Lorem Ipsum, Scrambled Real English, Hipster Ipsum, Tech Jargon Ipsum, and Nature Ipsum \u2014 in paragraphs, sentences, words, or byte count, with optional HTML paragraph wrapping. The \ud83d\udd27 Toolkit tab gives four standalone tools: Alliteration Generator (words starting with the same letter), Word Scrambler (jumble letters for anagram puzzles), Acronym Builder (create or expand acronyms), and Stop Words Remover with highlight mode.<\/p>\n    <\/div>\n    <div class=\"pth-feat-box\">\n        <div class=\"pth-feat-title\">\ud83d\udfe3 Writing Prompts Generator + Word Statistics Analyzer<\/div>\n        <p class=\"pth-feat-text\">The \u270d\ufe0f Prompts tab generates creative writing prompts across eight genres (Fiction, Sci-Fi, Fantasy, Romance, Mystery, Horror, Thriller, Mixed) and five prompt types (Story Starter, Character, Setting, Conflict, Plot Twist). A built-in Character Name Generator produces first + last name combinations from six cultural origins: English, Celtic, Nordic, Latin\/Roman, Japanese, and Fantasy \u2014 with masculine, feminine, and neutral options. The \ud83d\udcca Stats tab analyzes any pasted text for total words, unique words, sentence count, average sentence length, average word length, syllable estimate, vocabulary richness percentage, and a top-20 keyword frequency table \u2014 exportable as a .txt report.<\/p>\n    <\/div>\n<\/div>\n\n<div class=\"pth-steps-wrap\">\n    <div class=\"pth-steps-title\">How to Use Ultimate Word Studio Pro<\/div>\n    <div class=\"pth-steps-grid\">\n        <div class=\"pth-step-item\">\n            <div class=\"pth-step-num\">1<\/div>\n            <div class=\"pth-step-name\">Pick Your Tab<\/div>\n            <p class=\"pth-step-desc\">Choose from six tabs at the top of the tool. \ud83d\udcdd Words for random vocabulary lists. \ud83d\udcac Sentences for grammatically structured sentences. \ud83d\udcc4 Lorem+ for placeholder text. \ud83d\udd27 Toolkit for alliteration, scrambling, acronyms and stop words. \u270d\ufe0f Prompts for creative writing starters, characters and settings. \ud83d\udcca Stats to analyze any text. Click \ud83d\udca1 Load Sample to instantly see the Words tab in action.<\/p>\n        <\/div>\n        <div class=\"pth-step-item\">\n            <div class=\"pth-step-num\">2<\/div>\n            <div class=\"pth-step-name\">Configure Settings<\/div>\n            <p class=\"pth-step-desc\">In the \ud83d\udcdd Words tab: tick part-of-speech checkboxes to mix word types, set word count (up to 1000), filter by letter length, add Starts With or Ends With filters, choose frequency (Common, Uncommon, Rare), pick output format and case, and toggle Unique Words Only. In \ud83d\udcac Sentences: set count, tense, style and topic. In \ud83d\udcc4 Lorem+: pick type, unit and count. Each tab&#8217;s settings are completely independent.<\/p>\n        <\/div>\n        <div class=\"pth-step-item\">\n            <div class=\"pth-step-num\">3<\/div>\n            <div class=\"pth-step-name\">Generate &amp; Explore<\/div>\n            <p class=\"pth-step-desc\">Click the \u26a1 Generate button on any tab. Results appear instantly in the dark Output panel at the bottom. The session stats sidebar counts total words generated and number of generations this session. In the Toolkit tab, click any alliteration or scrambled word pill to copy it instantly. In Prompts, each result shows a genre + type badge for easy reference. In Stats, the keyword frequency table shows visual bars alongside counts.<\/p>\n        <\/div>\n        <div class=\"pth-step-item\">\n            <div class=\"pth-step-num\">4<\/div>\n            <div class=\"pth-step-name\">Copy or Export<\/div>\n            <p class=\"pth-step-desc\">Click \ud83d\udccb Copy below the output panel to copy everything to clipboard. Click \ud83d\udce4 Export .txt to download as a text file. In the Stats tab, click \ud83d\udce4 Export Report to download a formatted statistics report including all metrics and the top keyword frequency table. Use \u26f6 Full Width to hide the sidebar and give the tool maximum workspace. Everything runs offline \u2014 no data leaves your browser.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Last updated: June 2026<\/p>\n\n\n\n<h2 id=\"\ud83d\udd34-why-word-frequency-tiers-matter-for-writers-and-content-creators\" class=\"wp-block-heading\">\ud83d\udd34 <strong>Why Word Frequency Tiers Matter for Writers and Content Creators<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A random word generator that draws only from the most common 1000 English words produces predictable, flat vocabulary \u2014 the same words that appear in every beginner&#8217;s writing exercise. Vocabulary richness is one of the most noticeable differences between amateur and professional prose. The Words tab addresses this with three frequency tiers. Common words are the 500\u20132000 most frequently occurring English words \u2014 the core vocabulary every native speaker uses daily: time, make, right, face, keep. Uncommon words appear less frequently but are known to educated readers: luminous, traverse, tenacious, resilient. Rare words like petrichor (the smell of rain on dry earth), vellichor (the strange wistfulness of used bookshops), and susurrus (a whispering or murmuring sound) add precision and texture that common vocabulary cannot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For creative writers, mixing tiers is the practical technique. A paragraph of all common words reads like a news report \u2014 clear but forgettable. A paragraph of all rare words reads like a thesaurus entry \u2014 impressive but exhausting. The effective approach is a common-word base with uncommon or rare words used at specific emotional peaks \u2014 the word that captures exactly the right feeling because no common synonym exists for it. The Rare frequency tier in this tool surfaces words from linguistics and literature that most writers have encountered but rarely think to reach for. Setting the output to Rare and mixing Nouns with Adjectives produces word pairs that can break a writer out of familiar patterns.<\/p>\n\n\n\n<h2 id=\"\ud83d\udfe1-lorem-ipsum-variants-when-to-use-each-placeholder-text-style\" class=\"wp-block-heading\">\ud83d\udfe1 <strong>Lorem Ipsum Variants \u2014 When to Use Each Placeholder Text Style<\/strong><\/h2>\n\n\n<figure class=\"pth-article-figure pth-img-left\" style=\"float:left; width:600px; max-width:100%; margin:4px 28px 16px 0; clear:left;\"><img decoding=\"async\" src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/06\/lorem-ipsum-variants-comparison-800x447.jpeg\" alt=\"Lorem ipsum variants comparison showing Classic Latin Scrambled English Hipster Tech Jargon and Nature Ipsum placeholder text examples side by side\" width=\"600\" height=\"338\" loading=\"lazy\" data-no-lazy=\"1\" class=\"pth-article-img\" style=\"width:100%;height:auto;display:block;border-radius:10px;border:1px solid #e2e8f0;\"><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Classic Lorem Ipsum \u2014 derived from Cicero&#8217;s <em>De Finibus Bonorum et Malorum<\/em> (45 BC) \u2014 is the standard placeholder text because its Latin characters have the same visual density as English without being readable enough to distract reviewers. It has been used in typesetting since the 1500s and in digital design since the 1980s. The problem with classic Lorem Ipsum in modern design work is that it tells stakeholders nothing about how the actual content will read. When copy approval matters \u2014 when a client needs to sign off on a layout \u2014 readable placeholder text is more useful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Scrambled Real English \u2014 this tool&#8217;s second Lorem variant \u2014 uses actual English words assembled into grammatically plausible but meaningless sentences. It gives the correct reading rhythm and visual word-length distribution of real English, while remaining semantically neutral. This is particularly useful for readability testing: real word shapes and lengths reveal how a typeface handles English text in ways that Latin cannot. Tech Jargon Ipsum mimics the visual density of developer documentation without actual meaning \u2014 useful for SaaS product screenshots and developer tool mockups where real technical language would distract. Nature Ipsum creates poetic, organic-sounding placeholder text appropriate for wellness, travel, and lifestyle design mockups where harsh tech language would break the mood. Choose the variant that matches the emotional register of the final content.<\/p>\n\n\n\n<h3 id=\"\ud83d\udfe2-how-the-sentence-structure-generator-works\" class=\"wp-block-heading\">\ud83d\udfe2 <strong>How the Sentence Structure Generator Works<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The Sentences tab assembles grammatically valid sentences from six structural templates per topic. The Simple style uses Subject + Verb + Object \u2014 the clearest sentence structure in English. The Descriptive style prepends an adjective to the subject, adding one layer of detail. The Compound style joins two simple sentences with a coordinating conjunction (and, but, yet, so, while) \u2014 the foundation of prose rhythm variation. The Adverb style opens with an adverb followed by a comma, a technique common in literary fiction for creating pace and emphasis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The tense engine applies standard English tense rules: present tense adds -s to the verb stem, past tense adds -ed with handling for verbs ending in -e (produce \u2192 produced) and -y (try \u2192 tried), and future tense prepends &#8220;will&#8221; to the bare infinitive. Template placeholders draw from filtered subsets of the 1200-word lexicon \u2014 only nouns with four or more letters for subject and object positions (avoiding pronouns as nouns in full sentences), verbs with three or more letters for the verb position. Topic Focus filters the template pool to thematically appropriate sentence patterns \u2014 Nature sentences don&#8217;t contain business vocabulary; Tech sentences use structural patterns suited to describing systems and processes. Use our Ultimate Word Studio Pro to explore all six topic themes across present, past, and future tenses. For deeper vocabulary tips see our <a href=\"https:\/\/schoolict.net\/tools\/free-offline-random-word-generator\/\">complete guide to random word generators<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\ud83d\udd35 <strong>Starts With filter<\/strong> \u2014 useful for generating vocabulary lists for specific letters (e.g., &#8220;s&#8221; for alliteration practice or word game design), teaching phonics patterns, or creating themed word lists for crossword and puzzle construction.<\/li>\n\n\n\n<li>\ud83d\udfe0 <strong>Ends With filter<\/strong> \u2014 generate words ending in &#8220;-ing&#8221; for gerund practice, &#8220;-tion&#8221; for building academic vocabulary lists, or &#8220;-ly&#8221; to find adverbs for writing exercises.<\/li>\n\n\n\n<li>\ud83d\udfe3 <strong>JSON Array output<\/strong> \u2014 exports the word list as a valid JavaScript array (<code>[\"word1\",\"word2\",\"word3\"]<\/code>) \u2014 ready to paste directly into code for populating test data, game word lists, or autocomplete dictionaries.<\/li>\n<\/ul>\n\n\n\n<style>\n.pth-faq-section{margin-top:50px;margin-bottom:40px;font-family:inherit}\n.pth-faq-header{font-size:1.8rem;font-weight:800;color:#0f172a;margin-bottom:25px;border-bottom:2px solid #e2e8f0;padding-bottom:10px;display:flex;align-items:center;gap:10px}\n.pth-faq-grid{display:grid;grid-template-columns:100%;gap:20px}\n@media(min-width:768px){.pth-faq-grid{grid-template-columns:repeat(2,1fr)}}\n@media(min-width:1024px){.pth-faq-grid{grid-template-columns:repeat(3,1fr)}}\n.pth-faq-card{background:#f8fafc;padding:24px;border-radius:12px;border:1px solid #e2e8f0;transition:transform .2s ease;break-inside:avoid}\n.pth-faq-card:hover{transform:translateY(-3px);box-shadow:0 4px 12px rgba(0,0,0,.05)}\n.pth-faq-q{color:#0f172a;font-size:1rem;font-weight:700;margin:0 0 12px;line-height:1.4}\n.pth-faq-a{margin:0;font-size:.95rem;color:#1e293b;line-height:1.6;font-weight:500}\n<\/style>\n\n<div class=\"pth-faq-section\">\n    <div class=\"pth-faq-header\">\ud83e\udd14 Frequently Asked Questions<\/div>\n    <div class=\"pth-faq-grid\">\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">How many unique words can I generate before repeats appear?<\/p>\n            <p class=\"pth-faq-a\">With Unique Words Only enabled, the maximum unique output equals the number of words matching your filters. The full lexicon contains 1200+ words across six parts of speech. If you select all three POS types (Nouns, Verbs, Adjectives) with no letter-length or letter filters, you can generate up to approximately 650 unique words in one session. With strict filters (e.g., only Rare Nouns starting with &#8220;s&#8221; between 6\u201310 letters), the pool shrinks significantly \u2014 if it reaches zero, the tool shows a &#8220;No words match your filters&#8221; message rather than repeating.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">What is vocabulary richness and how is it calculated?<\/p>\n            <p class=\"pth-faq-a\">Vocabulary richness (also called lexical diversity or TTR \u2014 Type-Token Ratio) is the percentage of unique words relative to total words in a text. The formula is: (unique word count \/ total word count) \u00d7 100. A short text of 100 words with 80 unique words has 80% richness. Longer texts naturally have lower richness since common words repeat more. Generally, 60\u201370% richness in a 500-word text indicates good vocabulary variety. Below 40% in a 200-word text suggests over-reliance on the same words. The Stats tab calculates this against the filtered word set (stop words excluded).<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">Can I use the writing prompts for commercial projects?<\/p>\n            <p class=\"pth-faq-a\">Yes. All writing prompts generated by this tool are procedurally assembled from template fragments and the internal word lexicon \u2014 they are not reproduced from any copyrighted source. The prompts are generic story-starting concepts (a locked room, an unexpected letter, an impossible clock) that belong to no one and have appeared in countless writing workshops and creative exercises. Use them freely for commercial fiction, game design, film development, writing education, or any other purpose.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">What does the Stop Words Remover do and why is it useful?<\/p>\n            <p class=\"pth-faq-a\">Stop words are common function words \u2014 the, and, is, in, at, to, a, an \u2014 that carry grammatical structure but no semantic meaning. Removing them from a text reveals the keywords: the meaningful nouns, verbs, and adjectives that actually represent the content&#8217;s topic. This is useful for SEO keyword extraction (pasting a competitor&#8217;s page title or meta description to extract their focus keywords), text summarisation prep, sentiment analysis input, and vocabulary analysis. The Highlight mode shows stop words in red without removing them \u2014 useful for visualising how much of a text is structural versus meaningful.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">How does the Acronym Expander work?<\/p>\n            <p class=\"pth-faq-a\">The Acronym Expander takes each letter of the acronym you enter and searches the internal lexicon for words starting with that letter. It generates three different expansions \u2014 each using a randomly selected matching word per letter \u2014 so you get three candidate phrases for your acronym. This is useful for brand naming (finding what a new brand acronym could stand for), creating backronyms (names designed to spell a word), and brainstorming organizational mission statements. The Make Acronym function does the reverse: it takes each first letter of your phrase and builds the acronym string.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">Are the generated sentences grammatically correct?<\/p>\n            <p class=\"pth-faq-a\">The sentences are grammatically structured but semantically random \u2014 the grammar rules (subject-verb agreement, tense inflection, sentence patterns) are applied correctly, but the meaning combinations are intentional nonsense. &#8220;The luminous river traverses the tenacious shore steadily&#8221; is grammatically valid but not a description of reality. This is the intended behaviour: the sentences are useful for writing warm-ups, testing typography, populating UI mockups with readable placeholder content, and practising sentence analysis \u2014 not for producing publication-ready prose.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">What are the character names based on?<\/p>\n            <p class=\"pth-faq-a\">Each cultural origin draws from historically and culturally authentic name pools. English names are drawn from traditional British and American naming conventions. Celtic names use Irish and Scottish Gaelic names with correct spelling (Saoirse, Cillian, Caoimhe). Nordic names come from Old Norse and Scandinavian traditions. Latin names use classical Roman naming conventions with praenomina and cognomina. Japanese names use authentic first and family names common in contemporary Japan. Fantasy names are invented but follow phonological patterns typical of the high-fantasy genre. Surname pools are culturally matched to each origin category.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">Can I export word lists for use in other applications?<\/p>\n            <p class=\"pth-faq-a\">Yes. The JSON Array format exports words as a valid JavaScript\/JSON array: <code>[\"word1\",\"word2\",\"word3\"]<\/code> \u2014 paste directly into JavaScript code, a game engine word list, or a JSON config file. The Comma Separated format works for import into spreadsheets (Excel, Google Sheets) or CSV-based tools. The Numbered List format is ready for direct use in blog posts, educational materials, or printed worksheets. All formats export cleanly via the \ud83d\udce4 Export .txt button as a downloadable file, or via \ud83d\udccb Copy for immediate clipboard use.<\/p>\n        <\/div>\n        <div class=\"pth-faq-card\">\n            <p class=\"pth-faq-q\">What makes this different from other random word generators?<\/p>\n            <p class=\"pth-faq-a\">Most random word generators offer a single output: a list of random words from a flat dictionary with minimal filtering. This tool adds five additional generation modes (Sentences, Lorem Ipsum in 5 styles, Writing Prompts in 8 genres, Character Names in 6 cultural origins), four toolkit tools (Alliteration, Scramble, Acronym, Stop Words), and a full text statistics analyzer \u2014 all in one browser-based tool with no account, no server, and no external requests. The word lexicon includes rare literary vocabulary unavailable in standard word lists, plus frequency-tier filtering to control vocabulary level.<\/p>\n        <\/div>\n    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Free Random Word Generator &#8211; Nouns, Verbs &amp; Adjectives Instantly generate random words, nouns, verbs, and adjectives offline. Customize outputs by word length and parts of speech with our free, secure tool. \ud83d\udfe2 1200+ Word Lexicon with 6 Parts of Speech The \ud83d\udcdd Words tab draws from a 1200+ word lexicon spanning six parts of &#8230; <a title=\"Free Random Word Generator &#8211; Nouns, Verbs &amp; Adjectives\" class=\"read-more\" href=\"https:\/\/schoolict.net\/tools\/free-random-word-generator-nouns-verbs-adjectives\/\" aria-label=\"Read more about Free Random Word Generator &#8211; Nouns, Verbs &amp; Adjectives\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":5814,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-574","page","type-page","status-publish","has-post-thumbnail"],"_links":{"self":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages\/574","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/comments?post=574"}],"version-history":[{"count":0,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages\/574\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/media\/5814"}],"wp:attachment":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/media?parent=574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}