{"id":75203,"date":"2026-03-13T00:27:22","date_gmt":"2026-03-13T00:27:22","guid":{"rendered":"https:\/\/aceworldpgs.com\/?page_id=75203"},"modified":"2026-03-31T10:07:31","modified_gmt":"2026-03-31T10:07:31","slug":"publishing-calculator","status":"publish","type":"post","link":"https:\/\/aceworldpgs.com\/tools\/publishing-calculator\/","title":{"rendered":"Publishing Calculator"},"content":{"rendered":"\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebApplication\",\n  \"name\": \"ACEworld Book Publishing Cost Calculator\",\n  \"url\": \"https:\/\/aceworldpgs.com\/tools\/publishing-calculator\/\",\n  \"description\": \"A free online publishing calculator that helps authors estimate the total cost of self-publishing a book. Calculate expenses for editing, cover design, formatting, ISBN registration, printing, and marketing to plan your publishing budget effectively.\",\n  \"applicationCategory\": \"FinanceApplication\",\n  \"operatingSystem\": \"All\",\n  \"browserRequirements\": \"Requires JavaScript\",\n  \"creator\": {\n    \"@type\": \"Organization\",\n    \"name\": \"ACEworld Publishing Services\",\n    \"url\": \"https:\/\/aceworldpgs.com\"\n  },\n  \"offers\": {\n    \"@type\": \"Offer\",\n    \"price\": \"0\",\n    \"priceCurrency\": \"USD\"\n  },\n  \"featureList\": [\n    \"Estimate total self-publishing costs\",\n    \"Calculate editing and proofreading expenses\",\n    \"Estimate cover design and formatting costs\",\n    \"Budget for ISBN registration and distribution\",\n    \"Plan book marketing and promotion expenses\"\n  ],\n  \"keywords\": [\n    \"book publishing calculator\",\n    \"self publishing cost calculator\",\n    \"book production cost estimator\",\n    \"publishing budget calculator\",\n    \"cost of publishing a book\"\n  ],\n  \"aggregateRating\": {\n    \"@type\": \"AggregateRating\",\n    \"ratingValue\": \"5.0\",\n    \"reviewCount\": \"87\"\n  }\n}\n<\/script>\n\n\n\n<div class='code-block code-block-19' style='margin: 8px 0; clear: both;'>\n<style>\n    .calculator-container {\n        max-width: 900px;\n        margin: auto;\n        background: white;\n padding: 30px;\n        border-radius: 2px;\n        box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);\n }\n    .form-group {\n        margin-bottom: 15px;\n        padding: 10px;\n border: 1px solid #eee;\n        border-radius: 4px;\n    }\n    label {\n        display: block;\n margin-bottom: 8px;\n        font-weight: bold;\n    }\n    select, input[type=\"number\"], input[type=\"text\"] {\n        width: 100%;\n padding: 10px;\n        margin-top: 5px;\n        border: 1px solid #ccc;\n        border-radius: 4px;\n        box-sizing: border-box;\n }\n \n  \/* Stable Global Badge *\/\n    .global-badge {\n        background: #eef2ff; color: black; padding: 8px 15px; border-radius: 50px;\n        font-size: 13px; font-weight: bold; display: inline-block; margin-bottom: 15px;\n        border: 1px solid #c7d2fe; text-align: center; width: 100%;\n}\n\n    .radio-group label {\n        font-weight: normal;\n        display: inline-block;\n        margin-right: 15px;\n }\n    .radio-group input[type=\"radio\"] {\n        margin-right: 5px;\n        width: auto;\n }\n    .result-box {\n        margin-top: 30px;\n        padding: 20px;\n        background-color: #F4F9FF;\n border: 1px solid #c3e6cb;\n        border-radius: 8px;\n        text-align: center;\n    }\n    .result-box h3 {\n        color: #1B004F;\n margin-top: 0;\n    }\n    .total-cost {\n        font-size: 2.0em;\n        color: #1B004F;\n font-weight: bold;\n    }\n    .breakdown-section {\n        margin-top: 20px;\n        padding: 15px;\n border-top: 1px solid #ccc;\n        background-color: white; \n        text-align: left;\n    }\n    .breakdown-section p {\n        margin: 5px 0;\n font-size: 0.9em;\n    }\n    .breakdown-section ul {\n        list-style: disc;\n        padding-left: 20px;\n }\n    \n    .hidden {\n        display: none;\n }\n\n    \/* Custom number input for copies *\/\n    #copies-custom-input {\n        margin-top: 10px;\n }\n    .error-message {\n        color: #dc3545;\n        font-size: 0.85em;\n        margin-top: 5px;\n font-weight: bold;\n    }\n    .print-button {\n        background-color: #1B004F;\n        color: white;\n padding: 10px 20px;\n        border: none;\n        border-radius: 4px;\n        cursor: pointer;\n        margin-top: 15px;\n        font-size: 1em;\n }\n    .print-button:hover {\n        background-color: #3b009f;\n }\n \n .book-size-comparison {\n    max-width: 100%;\n    margin: 30px auto;\n    text-align: center;\n  }\n\n  .book-size-comparison img {\n    width: 100%;\n    \/* Reduced max-width for better desktop viewing *\/\n    max-width: 500px; \n    height: auto;\n    border-radius: 6px;\n    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);\n    \/* Optional: ensures image stays centered if container is wider *\/\n    display: inline-block; \n  }\n\n@media print {\n\n    \/* Hide everything *\/\n    body * {\n        visibility: hidden !important;\n }\n\n    \/* Only show the result box *\/\n    #result, #result * {\n        visibility: visible !important;\n }\n\n    \/* Position result at the top-left so it prints correctly *\/\n    #result {\n        position: absolute;\n left: 0;\n        top: 0;\n        width: 100% !important;\n        margin: 0 !important;\n        padding: 20px !important;\n }\n\n    \/* Hide print button *\/\n    #printResultButton {\n        display: none !important;\n }\n \n .card { \n        background: white; \n        border-radius: 16px; \n        padding: 20px; \n        box-shadow: 0 10px 30px rgba(0,0,0,0.05); \n        width: 100%;\n        max-width: 900px; \n        margin: 0 auto;\n        overflow: hidden; \/* Ensures nothing spills out *\/\n    }\n \n @media print {\n    \/* Hides the button container and both individual buttons *\/\n    .calculator-actions, \n    #finalSubmitBtn, \n    #submitAndResetBtn,\n    #clearFormText { \n        display: none !important; \n    }\n}\n}\n\n.tooltip {\n  position: relative;\n  cursor: pointer;\n  color: #0073aa;\n  font-size: 13px;\n}\n\n.tooltip-text {\n  visibility: hidden;\n  width: 220px;\n  font-weight: normal;\n  background: #F4F9FF;\n  color: black;\n  text-align: left;\n  padding: 8px;\n  border-radius: 4px;\n  position: absolute;\n  bottom: 125%;\n  left: 50%;\n  transform: translateX(-40%);\n  font-size: 13px;\n  z-index: 10;\n}\n\n.tooltip:hover .tooltip-text {\n  visibility: visible;\n}\n\n\n\n.total-section {\n        \/* Existing styles for fixed positioning, etc. *\/\n        position: fixed;\n        bottom: 2rem;\n        left: 2rem;\n        z-index: 1000;\n        background-color: #fff;\n        padding: 1rem 2rem;\n        border-radius: 8px;\n        box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n        display: flex;\n        flex-direction: column;\n        align-items: flex-start;\n        \/* Add a transition for a smoother hide\/show effect *\/\n        transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;\n    }\n\n    .total-section p {\n        text-align: center;\n        width: 100%;\n    }\n\n    \/* New CSS to hide the total section *\/\n    .total-section.hidden {\n        opacity: 0;\n        transform: translateY(2rem); \/* Moves the element down to hide it smoothly *\/\n        pointer-events: none; \/* Disables clicks when hidden *\/\n    }\n\n    \nhtml {\n    scroll-behavior: smooth;\n}\n\n.total-section button {\n    padding: 4px 10px !important;\n    font-size: 13px !important;\n}\n\n\n.user-info-section {\n    background: #f9f9f9;\n    padding: 20px;\n    border-radius: 8px;\n    margin-bottom: 25px;\n    border: 1px solid #ddd;\n\n    display: flex;\n    flex-direction: column; \/* Mobile default *\/\n    gap: 15px;\n}\n\n.user-info-section .form-group {\n    display: flex;\n    flex-direction: column;\n    flex: 1;\n}\n\n.user-info-section input {\n    padding: 10px;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n}\n\n\/* Desktop layout *\/\n@media (min-width: 768px) {\n    .user-info-section {\n        flex-direction: row; \/* Make them inline *\/\n    }\n}\n\n@media (min-width: 768px) {\n    .user-info-section .form-group:nth-child(2) {\n        flex: 1.5;\n    }\n}\n\n.project-info-section {\n\n    background: #f9f9f9;\n    border: 1px solid #ddd;\n    display: flex;\n    flex-direction: column; \/* Mobile default *\/\n    gap: 15px;\n    margin-bottom: 25px;\n}\n\n.project-info-section .form-group {\n    display: flex;\n    flex-direction: column;\n    flex: 1;\n}\n\n\/* Desktop layout *\/\n@media (min-width: 768px) {\n    .project-info-section {\n        flex-direction: row;\n    }\n}\n\n@media (min-width: 768px) {\n    .project-info-section .form-group:first-child {\n        flex: 2;\n    }\n\n    .project-info-section .form-group:last-child {\n        flex: 1;\n    }\n}\n\n.sub-service-section {\n    background: #f9f9f9;\n    padding: 20px;\n    border-radius: 10px;\n    margin-bottom: 25px;\n    box-sizing: border-box;\n}\n\n.digital-publishing-grid {\n    display: flex;\n    flex-direction: column;  \/* stacked on mobile *\/\n    gap: 15px;               \/* space between toggle rows *\/\n}\n\n\/* Each toggle row styling *\/\n.toggle-row {\n    flex: 1 1 auto;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1rem;\n    border: 2px solid #cbd5e1;\n    border-radius: 0.5rem;\n    transition: all 0.2s ease;\n}\n\n.toggle-row:hover {\n    border-color: #3b82f6;\n}\n\n.toggle-row:has(input:checked) {\n    border-color: #3b82f6;\n    background: #eff6ff;\n}\n\n.label-area {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n}\n\n\/* Toggle switch *\/\n.toggle-switch {\n    position: relative;\n    width: 50px;\n    height: 24px;\n}\n\n.toggle-switch input {\n    display: none; \/* hide input, we only use the toggle *\/\n}\n\n.slider {\n    position: absolute;\n    cursor: pointer;\n    background-color: #d1d5db;\n    border-radius: 34px;\n    width: 100%;\n    height: 100%;\n    transition: 0.3s;\n}\n\n.slider:before {\n    content: \"\";\n    position: absolute;\n    height: 20px;\n    width: 20px;\n    left: 2px;\n    bottom: 2px;\n    background-color: white;\n    border-radius: 50%;\n    transition: 0.3s;\n}\n\n.toggle-switch input:checked + .slider {\n    background-color: #3b82f6;\n}\n\n.toggle-switch input:checked + .slider:before {\n    transform: translateX(26px);\n}\n\n\/* Desktop layout: horizontal stacking *\/\n@media (min-width: 992px) {\n    .digital-publishing-grid {\n        flex-direction: row;  \/* side by side on desktop *\/\n        gap: 30px;            \/* horizontal spacing *\/\n    }\n\n    .digital-publishing-grid .toggle-row {\n        flex: 1;              \/* equal width per toggle *\/\n    }\n}\n\n\/* Section headers *\/\nh4 {\n    font-size: 1.2rem;      \/* Slightly smaller than main headings *\/\n    font-weight: 600;       \/* Semi-bold for emphasis *\/\n    margin-bottom: 15px;    \/* Space between header and content *\/\n    color: #1B004F;         \/* Dark purple color, matches your palette *\/\n    border-bottom: 2px\n    padding-bottom: 8px;    \/* Space between text and underline *\/\n}\n\n\/* Mobile adjustment *\/\n@media (max-width: 767px) {\n    .h4 {\n        font-size: 1.1rem;\n        margin-bottom: 12px;\n    }\n}\n\n<\/style>\n\n<div class=\"card\">\n\n<!--\n<div id=\"globalCounterDisplay\" class=\"global-badge\">Price Increase from April 1! <a href=\"javascript:void(0)\" onclick=\"loadTool(event, 'info-section')\" style=\"text-decoration:none;\">Learn more!<\/a><\/div>\n-->\n\n<div style=\"text-align: right; margin-bottom: 15px;\">\n    <a href=\"https:\/\/aceworldpgs.com\/acepublishingchecklist\"  style=\"text-decoration:none; font-size:12px; font-weight:bold; color:#007bff; display:inline-flex; align-items:center; gap:5px;\">\n        <span>Download Publishing Checklist <\/span> \n        <span style=\"background:#ffd700; color:#000; padding:2px 6px; border-radius:4px; font-size:10px;\"> \u2b07\ufe0f<\/span>\n    <\/a>\n<\/div>\n\n<div id=\"calculator-form\">\n\n<div class=\"project-info-section\">\n\n    <div class=\"form-group\">\n        <label for=\"bookTitle\">Project Title<\/label>\n        <input type=\"text\" id=\"bookTitle\" name=\"bookTitle\" \n               placeholder=\"This field is optional\" \n               value=\"My Book Project\" required>\n\n        <span class=\"tooltip\">\n            \u24d8 Learn more.\n            <span class=\"tooltip-text\">\n                Kindly share the title of your book\/project. This is only needed for record purpose and you can decide to use anything of choice.\n            <\/span>\n        <\/span>\n    <\/div>\n\n    <div class=\"form-group\">\n        <label for=\"wordCount\">Word Count<\/label>\n        <input type=\"number\" id=\"wordCount\" name=\"wordCount\" \n               min=\"500\" \n               value=\"20000\" required>\n\n        <span class=\"tooltip\">\n            \u24d8 Learn more.\n            <span class=\"tooltip-text\">\n                What is the total number of words in the book? The word count is required for editing, typesetting and transcription calculations.\n            <\/span>\n        <\/span>\n    <\/div>\n<\/div>\n\n\n\n    <div style=\"text-align: left; margin-bottom: 15px;\">\n       <a href=\"#printcalc\" style=\"text-decoration:none; font-size:12px; color:var(--primary);\">Jump to print calculator \u2935\ufe0f<\/a>\n    <\/div>\n        \n<h3>Publishing Services<\/h3>\n\n<div class=\"form-section sub-service-section\">\n\n<h4>Editorial<\/h4>\n\n<div class=\"service-section\">\n\n    <!-- Transcription Service Toggle -->\n  <label class=\"toggle-row\">\n    <div class=\"label-area\">\n      <label>Manuscript Transcription<\/label>\n      <span class=\"tooltip\">\n        \u24d8\n        <span class=\"tooltip-text\">\n          Note: Manuscript transcription is the process of accurately converting handwritten manuscripts into a machine-readable, digital text format to improve accessibility, researchability, and preservation.\n        <\/span>\n      <\/span>\n    <\/div>\n    <div class=\"toggle-switch\">\n      <input type=\"checkbox\" name=\"transcriptionService\">\n      <span class=\"slider\"><\/span>\n    <\/div>\n  <\/label>\n\n  <div class=\"subsection hidden\" id=\"transcriptionDetails\">\n    <div id=\"transcriptionError\" class=\"error-message hidden\">\n      Please enter a word count of 100 or more to select manuscript language.\n    <\/div>\n    <label for=\"transcriptionType\">Select Manuscript Language<\/label>\n    <select id=\"transcriptionType\" name=\"transcriptionType\">\n      <option value=\"English\">English<\/option>\n      <option value=\"Yoruba\">Yoruba<\/option>\n      <option value=\"Other Languages\">Other Languages<\/option>\n    <\/select>\n    <br><br>\n  <\/div>\n  \n  \n  <!-- Editing Service Toggle -->\n  <label class=\"toggle-row\">\n    <div class=\"label-area\">\n      <label>Editing<\/label>\n      <span class=\"tooltip\">\n        \u24d8\n        <span class=\"tooltip-text\">\n          <strong>Hint:<\/strong><br>\n          <strong>Developmental Editing<\/strong> \u2013 Improves the book\u2019s structure, flow, and overall ideas.<br>\n          <strong>Line Editing<\/strong> \u2013 Refine sentences for clarity, style, and readability.<br>\n          <strong>Copy Editing<\/strong> \u2013 Fixes grammar, punctuation, and consistency issues.<br>\n        <\/span>\n      <\/span>\n    <\/div>\n    <div class=\"toggle-switch\">\n      <input type=\"checkbox\" name=\"editingService\">\n      <span class=\"slider\"><\/span>\n    <\/div>\n  <\/label>\n\n  <div class=\"subsection hidden\" id=\"editingDetails\">\n    <div id=\"editingError\" class=\"error-message hidden\">\n      Please enter a word count of 30 or more to select an editing option.\n    <\/div>\n    <label for=\"editingLevel\">Select Level of Editing<\/label>\n    <select id=\"editingLevel\" name=\"editingLevel\">\n      <option value=\"Developmental Editing\">Developmental Editing (\u20a610 per word)<\/option>\n      <option value=\"Line Editing\">Line Editing (\u20a66 per word)<\/option>\n      <option value=\"Copy Editing\">Copy Editing (\u20a63 per word)<\/option>\n    <\/select>\n    <br><br>\n  <\/div>\n  \n  \n<!-- Proofreading Service Toggle -->\n<label class=\"toggle-row\">\n  <div class=\"label-area\">\n    <label>Proofreading<\/label>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        <strong>Proofreading<\/strong> is the final quality check before publishing. \n        It focuses on correcting minor errors such as typos, punctuation mistakes,\n        spelling issues, and formatting inconsistencies.\n      <\/span>\n    <\/span>\n  <\/div>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" name=\"proofreadingService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n  \n<\/div>\n<\/div>\n\n<div class=\"form-section sub-service-section\">\n\n<h4>Design<\/h4>\n\n<div class=\"cover-design-section\">\n\n  <!-- Formatting Service Toggle -->\n  <label class=\"toggle-row\">\n    <div class=\"label-area\">\n      <label>Typesetting & Formatting<\/label>\n      <span class=\"tooltip\">\n        \u24d8\n        <span class=\"tooltip-text\">\n          Note: Typesetting\/Formatting is the process of arranging text and images for printing or digital display, ensuring content is legible, structured, and visually appealing. Ebook formatting is required for digital distribution and print formatting for printing. You enjoy a 25% discount on the total formatting cost if you select both.\n        <\/span>\n      <\/span>\n    <\/div>\n    <div class=\"toggle-switch\">\n      <input type=\"checkbox\" name=\"formattingService\">\n      <span class=\"slider\"><\/span>\n    <\/div>\n  <\/label>\n\n  <div class=\"subsection hidden\" id=\"formattingDetails\">\n    <div id=\"formattingError\" class=\"error-message hidden\">\n      Please enter a word count of 30 or more to select a formatting type.\n    <\/div>\n    <label for=\"formattingType\">Select Formatting Type<\/label>\n    <select id=\"formattingType\" name=\"formattingType\">\n      <option value=\"Both\">Ebook and Print Formatting (Both)<\/option>\n      <option value=\"Ebook Only\">Ebook Formatting (EPUB)<\/option>\n      <option value=\"Print Only\">Print Formatting (PDF)<\/option>\n    <\/select>\n    <br><br>\n  <\/div>\n  \n\n\n  <label class=\"cover-toggle toggle-row\">\n    <div class=\"label-area\">\n      <label>Book Cover<\/label>\n      <span class=\"tooltip\">\n        \u24d8\n        <span class=\"tooltip-text\">\n          Note: Full cover is only required for print projects. For digital distribution, front cover only will suffice. Know what size your book cover should be with our \n          <a href=\"javascript:void(0)\" onclick=\"loadTool(event, 'cover-tool')\" style=\"text-decoration:none;\">Book Cover Calculator<\/a> tool.\n        <\/span>\n      <\/span>\n    <\/div>\n    <div class=\"toggle-switch\">\n      <input type=\"checkbox\" name=\"coverDesignService\">\n      <span class=\"slider\"><\/span>\n    <\/div>\n  <\/label>\n\n  <div class=\"subsection hidden\" id=\"coverDesignDetails\">\n    <label for=\"coverDesignType\">Select Design Type<\/label>\n    <select id=\"coverDesignType\" name=\"coverDesignType\">\n      <option value=\"Full Cover (Front, Back and Spine)\">Full Cover (\u20a625000)<\/option>\n      <option value=\"Front Cover Only\">Front Cover Only (\u20a615000)<\/option>\n    <\/select>\n    <br><br>\n  <\/div>\n\n<\/div>\n\n\n<!-- Brochure Design Service Toggle -->\n<label class=\"toggle-row\">\n  <label class=\"label-area\">\n    <span>Brochure<\/span>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        Would you like us to design a promotional brochure for you. <a href=\"https:\/\/aceworldpgs.com\/acepublishingchecklist\">Download sample<\/a>. Enter the number of pages you want.\n      <\/span>\n    <\/span>\n  <\/label>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" name=\"brochureDesignService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n<!-- Hidden Subsection -->\n<div class=\"subsection hidden\" id=\"brochureDetails\">\n  <div id=\"brochureError\" class=\"error-message hidden\">\n    Please enter at least 1 page for brochure design.\n  <\/div>\n\n  <label for=\"brochurePages\">Number of Brochure Pages<\/label>\n  <input \n    type=\"number\" \n    id=\"brochurePages\" \n    name=\"brochurePages\" \n    min=\"1\" \n    placeholder=\"Enter number of pages\"\n  >\n  <br><br>\n<\/div>\n\n\n<\/div>\n    \n    \n<div class=\"form-section sub-service-section\">\n\n<h4>Legal<\/h4>\n\n<div class=\"service-section\">\n\n        <!-- ISBN Service -->\n<label class=\"toggle-row\">\n  <div class=\"label-area\">\n    <label>ISBN<\/label>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        Each of your book titles & versions requires its own ISBN.\n      <\/span>\n    <\/span>\n  <\/div>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" name=\"isbnService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n<!-- Hidden Subsection -->\n<div class=\"subsection hidden\" id=\"isbnDetails\">\n  <label for=\"isbnUnits\">How many titles do you need ISBN for?<\/label>\n  <select id=\"isbnUnits\" name=\"isbnUnits\">\n    <option value=\"1\">1 ISBN (Available)<\/option>\n    <option value=\"2\">2 ISBNs (Available)<\/option>\n    <option value=\"3\">3 ISBNs (Unavailable)<\/option>\n    <option value=\"5\">5 ISBNs (Unavailable)<\/option>\n    <option value=\"10\">10 ISBNs (Unavailable)<\/option>\n    <option value=\"15\">15 ISBNs (Unavailable)<\/option>\n    <option value=\"20\">20 ISBNs (Unavailable)<\/option>\n  <\/select>\n  <br><br>\n<\/div>\n\n        <!-- Copyright -->\n        \n        <label class=\"toggle-row\">\n            <div class=\"label-area\">\n                <label>Copyright<\/label>\n                <span class=\"tooltip\">\n                    \u24d8\n                    <span class=\"tooltip-text\">\n                        Getting the copyright certificate gives you an additional legal and formal claim over your content.\n                    <\/span>\n                <\/span>\n            <\/div>\n\n            <div class=\"toggle-switch\">\n                <input type=\"checkbox\" name=\"copyrightRegistration\" value=\"Yes\">\n                <span class=\"slider\"><\/span>\n            <\/div>\n            <\/label>\n\n\n\n<!-- ISSN Service -->\n<label class=\"toggle-row\">\n  <div class=\"label-area\">\n    <label>ISSN<\/label>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        Choose the type of ISSN you need for your publication.\n      <\/span>\n    <\/span>\n  <\/div>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" name=\"issnService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n<!-- Hidden Subsection -->\n<div class=\"subsection hidden\" id=\"issnDetails\">\n  <label for=\"issnType\">Select ISSN Type<\/label>\n  <select id=\"issnType\" name=\"issnType\">\n    <option value=\"Electronic ISSN\">Electronic ISSN (\u20a629,100)<\/option>\n    <option value=\"Print ISSN\">Print ISSN (\u20a632,100)<\/option>\n    <option value=\"Both\">Both (\u20a661,200)<\/option>\n  <\/select>\n  <br><br>\n<\/div>\n\n    <\/div>\n<\/div>\n    \n    \n\n<div class=\"form-section sub-service-section\">\n\n<h4>Publishing <span class=\"tooltip\"><a href=\"https:\/\/aceworldpgs.com\/sap\/\" target=\"_blank\" style=\"text-decoration: none;\">\u24d8<\/a><\/span><\/h4>\n\n<div class=\"digital-publishing-grid\">\n\n    <!-- E-Book Distribution -->\n    <label class=\"toggle-row\">\n        <div class=\"label-area\">\n            <label>E-Book Distribution<\/label>\n            <span class=\"tooltip\">\n                \u24d8\n                <span class=\"tooltip-text\">\n                For just \u20a615,000 - \u20a623,000, your book will be published across digital bookstores worldwide like Amazon, Kobo, Apple Books, Everand etc.\n                <\/span>\n            <\/span>\n        <\/div>\n\n        <div class=\"toggle-switch\">\n            <input type=\"checkbox\" name=\"digitalDistribution\" value=\"Yes\">\n            <span class=\"slider\"><\/span>\n        <\/div>\n        <\/label>\n    <\/div>\n\n    <!-- Amazon POD -->\n    <label class=\"toggle-row\">\n        <div class=\"label-area\">\n            <label>Amazon POD<\/label>\n            <span class=\"tooltip\">\n                \u24d8\n                <span class=\"tooltip-text\">\n                For just \u20a615,000, make your paperback\/hardback available on Amazon marketplaces as Print on Demand.\n                <\/span>\n            <\/span>\n        <\/div>\n\n        <div class=\"toggle-switch\">\n            <input type=\"checkbox\" name=\"amazonPod\" value=\"Yes\">\n            <span class=\"slider\"><\/span>\n        <\/div>\n    <\/label>\n<\/div>\n\n\n<div class=\"form-section sub-service-section\">\n\n<h4>Marketing <span class=\"tooltip\"><a href=\"https:\/\/aceworldpgs.com\/marketing\/\" target=\"_blank\" style=\"text-decoration: none;\">\u24d8<\/a><\/span><\/h4>\n\n<div class=\"service-section\">\n\n<!-- News Distribution -->\n<label class=\"toggle-row\">\n  <div class=\"label-area\">\n    <span>News Distribution<\/span>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        Share the news where the world reads!\n      <\/span>\n    <\/span>\n  <\/div>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" id=\"newsDistributionToggle\" name=\"newsDistributionService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n<!-- Hidden Subsection -->\n<div class=\"subsection hidden\" id=\"newsDistributionDetails\">\n  <label>\n    News Distribution Solution has a fully integrated service page. <a href=\"https:\/\/aceworldpgs.com\/marketing\/cds\/\" target=\"_blank\">Click here<\/a> to learn more.\n  <\/label>\n<\/div>\n\n\n<!-- Author's Website -->\n<label class=\"toggle-row\">\n  <div class=\"label-area\">\n    <span>Author's Website<\/span>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        Engage your Audience. Get a Powerful Website today!\n      <\/span>\n    <\/span>\n  <\/div>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" id=\"authorWebsiteToggle\" name=\"authorWebsiteService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n<!-- Hidden Subsection -->\n<div class=\"subsection hidden\" id=\"authorWebsiteDetails\">\n  <label>\n   Website Development Solution has a fully integrated service page. <a href=\"https:\/\/aceworldpgs.com\/wds\/\" target=\"_blank\">Click here<\/a> to learn more.\n  <\/label>\n<\/div>\n\n\n<!-- Social Media Management -->\n<label class=\"toggle-row\">\n  <div class=\"label-area\">\n    <span>Social Media Management<\/span>\n    <span class=\"tooltip\">\n      \u24d8\n      <span class=\"tooltip-text\">\n        We know how Social Media Algorithms work. Book us now!\n      <\/span>\n    <\/span>\n  <\/div>\n\n  <div class=\"toggle-switch\">\n    <input type=\"checkbox\" id=\"socialMediaToggle\" name=\"socialMediaService\">\n    <span class=\"slider\"><\/span>\n  <\/div>\n<\/label>\n\n<!-- Hidden Subsection -->\n<div class=\"subsection hidden\" id=\"socialMediaDetails\">\n  <label>\n   Social Media Solution has a fully integrated service page. <a href=\"https:\/\/aceworldpgs.com\/sms\/\" target=\"_blank\">Click here<\/a> to learn more.\n  <\/label>\n<\/div>\n\n  <\/div>\n<\/div>\n\n    \n\n\n        \n    \n<span id=\"printcalc\"><\/span>\n\n    <h3>Print Services<\/h3>\n    \n    \n<div class=\"form-section sub-service-section\">\n\n<h4>General<\/h4>\n    \n    <div class=\"form-group\">\n        <label>Number of Copies<\/label>\n        <div class=\"radio-group\">\n            <label><input type=\"radio\" name=\"copiesOption\" value=\"0\" checked> 0<\/label> \n          \n   <label><input type=\"radio\" name=\"copiesOption\" value=\"100\"> 100<\/label>\n            <label><input type=\"radio\" name=\"copiesOption\" value=\"300\"> 300<\/label>\n \n           <label><input type=\"radio\" name=\"copiesOption\" value=\"500\"> 500<\/label>\n            <label><input type=\"radio\" name=\"copiesOption\" value=\"1000\"> 1000<\/label>\n            <label><input type=\"radio\" name=\"copiesOption\" value=\"custom\"> Custom<\/label>\n        <\/div>\n        <input type=\"number\" id=\"copies-custom-input\" placeholder=\"Valid only from 50 to 1,000 copies\" class=\"hidden\" min=\"50\" max=\"1000\" value=\"50\">\n      \n   <small class=\"text-muted\">Are you printing? If yes, how many copies? This tool supports 50 to 1,000 copies.<\/small>\n    <\/div>\n    \n    <div id=\"pageCountContainer\" class=\"form-group hidden\"> \n        <label for=\"pageCount\">Number of Pages<\/label>\n        <input type=\"number\" id=\"pageCount\" name=\"pageCount\" min=\"50\" value=\"100\" required>\n        <small class=\"text-muted\">What is the total number of pages in the book? This tool supports 30 - 1,000 pages.<\/small>\n    <\/div>\n    \n\n    <div id=\"printSpecsContainer\" class=\"hidden\">\n \n<div class=\"form-group\">\n<label for=\"desiredPrintSize\">Desired Trim Size<\/label>\n<div class=\"form-group\">\n<select id=\"desiredPrintSize\" name=\"desiredPrintSize\">\n<option value=\"A5\"> 5.83\u2033 \u00d7 8.27\u2033 \u2192 A5 (International Standard Size)<\/option>\n<option value=\"US Trade\"> 5.5\u2033 \u00d7 8.5\u2033 \u2192 Digest Size (Compact \/ Novel-friendly)<\/option>\n<option value=\"B5\"> 6.9\u2033 \u00d7 9.8\u2033 \u2192 B5 (Large International \/ Academic Size)<\/option>\n<option value=\"Pocket\"> 4.5\u2033 \u00d7 7.5\u2033 \u2192 Pocket \/ Small Trade<\/option>\n<option value=\"A6\"> 4.13\u2033 \u00d7 5.83\u2033 \u2192 A6 (Pocketbook Size)<\/option>\n<option value=\"A4\"> 8.27\u2033 \u00d7 11.69\u2033 \u2192 A4 (Workbooks, textbooks, reports)<\/option>\n<option value=\"6x9\"> 6\u2033 \u00d7 9\u2033 \u2192 US Trade (Most common Amazon KDP size)<\/option>\n<\/select>\n<\/div>\n\n           <small class=\"text-muted\"> Compare Trim Sizes:<br>\n        <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/Size-Comparison.webp\"\n    alt=\"Book size comparison chart showing A6, Pocket, A5, Digest, US Trade, B5 and A4 sizes\"\n    loading=\"lazy\"\n  \/>\n<\/small><\/div>\n        \n        <\/div>\n        \n\n<h4>Interior<\/h4>\n\n        <div class=\"form-group\">\n            <label for=\"interiorColor\">Text Color<\/label>\n            <div class=\"radio-group\">\n                <label><input type=\"radio\" name=\"interiorColor\" value=\"Black and White\" checked> Black and White<\/label>\n \n \n               <label><input type=\"radio\" name=\"interiorColor\" value=\"Colored\"> Colored<\/label>\n            <\/div>\n            <small class=\"text-muted\">Do you want the pages of the book in Coloured or Black & White?<\/small>\n             <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/dcbe2b36-8318-4f54-9f2f-1722f7fa48c6-1.webp\"\n    alt=\"Interior Colour Sample\"\n    loading=\"lazy\"\n  \/>\n<\/div>\n        <\/div>\n\n        <div class=\"form-group\">\n            <label for=\"interiorPaperType\">Paper Finish<\/label>\n           \n \n <div class=\"radio-group\">\n                <label><input type=\"radio\" name=\"interiorPaperType\" value=\"Uncoated\" checked> Uncoated<\/label>\n                <label><input type=\"radio\" name=\"interiorPaperType\" value=\"Coated\"> Coated<\/label>\n            <\/div>\n            <small class=\"text-muted\">Hint: Coated paper has a smooth surface (gloss or matte), ideal for magazines and brochures. Uncoated paper is a natural, non-glare finish, better for text-heavy books and writing.<\/small>\n \n    <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_lwt2zylwt2zylwt2.webp\"\n    alt=\"Coated and Uncoated interior\"\n    loading=\"lazy\"\n  \/>\n<\/div>\n \n       <\/div>\n\n        <div class=\"form-group\">\n            <label for=\"interiorPaperColor\">Paper Color<\/label>\n            <div class=\"radio-group\">\n                <label><input type=\"radio\" name=\"interiorPaperColor\" value=\"White\" checked> White<\/label>\n                <label><input type=\"radio\" name=\"interiorPaperColor\" value=\"Cream\"> Cream<\/label>\n            <\/div>\n    \n \n        <small class=\"text-muted\">Hint: Cream papers are typically more expensve than white.<\/small>\n        \n                 <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_dq8jzrdq8jzrdq8j.webp\"\n    alt=\"Paper Color\"\n    loading=\"lazy\"\n  \/>\n<\/div>\n\n        <\/div>\n        \n\n<h4>Cover<\/h4>\n\n        <div class=\"form-group\">\n     \n            <label for=\"coverFinish\">Cover Lamination<\/label>\n            <div class=\"radio-group\">\n                <label><input type=\"radio\" name=\"coverFinish\" value=\"Matte\" checked> Matte<\/label>\n             \n \n   <label><input type=\"radio\" name=\"coverFinish\" value=\"Glossy\"> Gloss<\/label>\n            <\/div>\n            <small class=\"text-muted\">Hint: Gloss covers are shiny and vibrant with high contrast while matte covers are non-reflective and offer better readability.<\/small>\n            \n                      <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_3s3esa3s3esa3s3e.webp\"\n    alt=\"Cover Finish\"\n    loading=\"lazy\"\n  \/>\n<\/div>\n        <\/div>\n        \n        \n\n        <div class=\"form-group\">\n          \n           <label for=\"coverText\">Cover Title Style<\/label>\n         \n \n   <select id=\"coverText\" name=\"coverText\">\n                <option value=\"Normal\">Normal<\/option>\n                <option value=\"Embossing\">Embossing (Raised Text)<\/option>\n                <option value=\"Debossing\">Debossing (Sunken Text)<\/option>\n                <option value=\"Foil Stamping Embossing\">Foil Stamping Embossing<\/option>\n            <\/select>\n            \n                   <small class=\"text-muted\">Hint: Foil Stamping Embossing is \"Embossing\" with an additional lamination on the raised text.<\/small>\n            \n<!--                      <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_3s3esa3s3esa3s3e.webp\"\n    alt=\"Cover Finish\"\n    loading=\"lazy\"\n  \/>\n<\/div>\n-->\n \n <\/div>\n \n        \n<h4>Finishing<\/h4>\n\n        <div class=\"form-group\">\n            \n            <label for=\"bindingType\">Binding and Cover Type<\/label>\n            <div class=\"radio-group\">\n                <label><input type=\"radio\" name=\"bindingType\" value=\"Perfect Binding (Paperback)\" checked> Perfect Binding (Paperback)<\/label>\n                <label><input type=\"radio\" name=\"bindingType\" value=\"Case Binding (Hardback)\"> Case Binding (Hardback)<\/label>\n            <\/div>\n            \n            \n                                  <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2025\/12\/Gemini_Generated_Image_5caolg5caolg5cao-1.webp\"\n    alt=\"Binding and Cover Type\"\n    loading=\"lazy\"\n  \/>\n<\/div>\n\n        <\/div>\n      \n\n \n         <div class=\"form-group\">\n            <label for=\"nylonWrapping\">Packaging<\/label>\n            <div class=\"radio-group\">\n                <label><input type=\"radio\" name=\"nylonWrapping\" value=\"Wrapped\" checked> Wrapped<\/label>\n                <label><input type=\"radio\" name=\"nylonWrapping\" value=\"Unwrapped\"> Unwrapped<\/label>\n            <\/div>\n    \n \n        <small class=\"text-muted\">Hint: Nylon wrapping for your books at #50 per copy is to improve presentation. It's perfect for gift copies, retail purposes, etc.<\/small>\n        \n                 <div class=\"book-size-comparison\">\n  <img decoding=\"async\" \n    src=\"https:\/\/aceworldpgs.com\/wp-content\/uploads\/2026\/01\/wrapped-vs-unwrapped.webp\" alt=\"Nylon Wrapping\" loading=\"lazy\"\/>\n<\/div>\n\n        <\/div>\n \n \n\n    <\/div>\n<\/div>\n\n\n\n<!--\n<div class=\"form-group\">\n<details>\n<summary>Discount? Apply here<\/summary>\n\n        <div style=\"margin-top:15px;\">\n\n            <div class=\"form-group\">\n                <label>Discount value (flat rate)<\/label>\n                <input type=\"number\" id=\"priceDeduction\" name=\"priceDeduction\" min=\"0\" value=\"0\">\n            <\/div>\n\n            <div class=\"form-group\">\n                <label for=\"deductionReason\">Discount tag (reason)<\/label>\n                <input type=\"text\" id=\"deductionReason\" name=\"deductionReason\"\n                       placeholder=\"e.g., Distribution fee, Negotiation, etc.\">\n            <\/div>\n\n      <span class=\"tooltip\">\n  \u24d8 Learn more\n  <span class=\"tooltip-text\">\nIf we have given you any discount or deduction from earlier negotiation, please type the amount in the discount value field. And share why the discount was given. Please use the specific tag given to you.\n  <\/span>\n<\/span>\n        <\/div>\n    <\/details>\n<\/div>\n-->\n\n<div class=\"user-info-section\">\n    <div class=\"form-group\">\n        <label for=\"clientName\">Your Name<\/label>\n        <input type=\"text\" id=\"clientName\" name=\"clientName\" placeholder=\"Name\">\n    <\/div>\n    <div class=\"form-group\">\n        <label for=\"clientEmail\">Your Email <span style=\"color:red;\">*<\/span><\/label>\n        <input type=\"email\" id=\"clientEmail\" name=\"clientEmail\" placeholder=\"email@example.com\" required>\n    <\/div>\n    <div class=\"form-group\">\n        <label for=\"clientPhone\">Phone Number<\/label>\n        <input type=\"tel\" id=\"clientPhone\" name=\"clientPhone\" placeholder=\"WhatsApp Number (Optional)\">\n    <\/div>\n<\/div>\n\n\n<\/div>\n\n\n    \n\n\n<div id=\"detailedQuotation\"><\/div>\n<div id=\"result\" class=\"result-box\">\n    <h3>Quotation<\/h3>\n    <div class=\"total-cost\" id=\"totalCostDisplay\">\u20a60<\/div>\n    \n<div id=\"breakdownDisplay\" class=\"breakdown-section hidden\">    \n\n    <p style=\"text-align: center;\"><small style=\"text-align: center;\">Publishing Quotation by ACEworld Publishers Ltd, via the Publishing Toolkit.<br><i>(<a href=\"https:\/\/aceworldpgs.com\/publishing-toolkit\/\">https:\/\/aceworldpgs.com\/toolkit<\/a>)<\/i><br><i>(+2348072349777, +2348166110313)<\/i><\/small><\/p>\n    \n    \n        <h4>Cost Breakdown<\/h4>\n        \n        <p><strong>Book Details:<\/strong><\/p>\n        <ul>\n         <li \n id=\"bookTitleBreakdown\">Project: <\/li> \n          <li id=\"wordCountBreakdown\">Word Count: 0<\/li>\n          <li class=\"date-stamp\">Date: <span id=\"quoteDateDisplay\"><\/span><\/li>\n          <\/ul>\n        \n      \n        \n        <p><strong>Publishing Services:<\/strong><\/p>\n        <ul id=\"optionalServicesBreakdown\">\n            <li id=\"transcriptionCost\">Transcription: \u20a60<\/li>\n            <li id=\"editingCost\">Editing: \u20a60<\/li>\n            <li id=\"proofreadingCost\">Proofreading: \u20a60<\/li> \n            <li id=\"formattingCost\">Formatting: \u20a60<\/li> \n            <li id=\"coverDesignCost\">Book Cover: \u20a60<\/li>\n\t          <li id=\"brochureDesignCost\">Brochure Design: \u20a60<\/li>\n            <li id=\"isbnCost\">ISBNs: \u20a60<\/li>\n            <li id=\"issnCost\">ISSN: \u20a60<\/li>\n            <li id=\"copyrightRegistrationCost\">Copyright Registration: \u20a60<\/li>\n            <li id=\"digitalDistributionCost\">E-book Distribution: \u20a60<\/li>\n            <li id=\"amazonPodCost\">Amazon Print on Demand: \u20a60<\/li>\n        <\/ul>\n\n        \n\n        \n        <p><strong>Discount & Deductions:<\/strong><\/p>\n        <ul>\n            <li id=\"deductionAmountDisplay\">Deduction: - \u20a60 (already Applied)<\/li>\n            <li id=\"deductionReasonDisplay\">Reason: N\/A<\/li>\n        <\/ul>\n\n  \n  \n     <div id=\"printSpecsBreakdownContainer\" class=\"hidden\">\n            <p><strong>Print Services:<\/strong><\/p>\n            \n        <ul>\n        <li><strong>Print Total Cost:<\/strong> <span id=\"printingCost\">\u20a60<\/span><\/li>\n        <li><strong>Price Per Copy:<\/strong> <span id=\"pricePerCopy\">\u20a60<\/span><\/li>\n        <li><strong>Copies:<\/strong> <span id=\"copiesCount\">0<\/span><\/li>\n        <\/ul>\n\n          \n  \n <p><strong>Selected Print Specifications:<\/strong><\/p>\n            <ul id=\"printSpecsBreakdown\">\n                <li id=\"specTrimSize\">Trim Size: <\/li>\n                <li id=\"specInteriorColor\">Text Color: <\/li>\n                <li id=\"specInteriorPaperType\">Paper Finish: <\/li>\n                <li id=\"specInteriorPaperColor\">Paper Color: <\/li>\n                <li id=\"specCoverFinish\">Cover Lamination: <\/li>\n                <li id=\"specCoverText\">Cover Title Style: <\/li>\n                <li id=\"specNylonWrapping\">Packaging: <\/li>\n                <li id=\"specBindingType\">Binding: <\/li>\n            <\/ul>\n            \n        <\/div>\n        \n        \n       <br> <p style=\"text-align: \n center;\">This is an estimate generated by our calculator at ACEworld Publishers Limited.\nSubmit & Print Quote below for price review. Reach us via call or WhatsApp at <strong>+2348166110313, +2348072349777<\/strong>. Send email to <strong>info.myaceworld@gmail.com<\/strong>.<\/p><br>\n\n<p style=\"text-align: center;\">Get express access to the Publishing Toolkit at <i><a href=\"https:\/\/aceworldpgs.com\/publishing-toolkit\/\">https:\/\/aceworldpgs.com\/toolkit<\/a><\/i><\/p>\n\n    <\/div>\n    \n<div style=\"text-align: center; margin-top: 15px;\">\n    <span id=\"clearFormText\" style=\"color: #666; cursor: pointer; text-decoration: underline; font-size: 14px;\">\n        Clear inputs\n    <\/span>\n<\/div>\n    \n<div class=\"calculator-actions\" style=\"display: flex; justify-content: center; gap: 15px; margin-top: 20px;\">\n    <button onclick=\"trackTool('publishing_calculator')\" type=\"button\" id=\"finalSubmitBtn\">\n        Submit & Print Quote\n    <\/button>\n<\/div>\n\n<!--\n<div>\n    <button type=\"button\" id=\"submitAndResetBtn\" class=\"print-button\" style=\"background-color: black; flex: 1;\">\n        Get New Quotation\n    <\/button>\n<\/div>\n-->\n\n<\/div>\n\n         <!-- Total Fee -->\n          <div class=\"total-section hidden\">\n   <p class=\"text-xl font-bold text-gray-800 text-center w-full\"><strong>\n        Total: <\/strong><span id=\"floatingTotalValue\" class=\"text-blue-600\">N0.00<\/span>\n    <\/p>\n    <button \n        onclick=\"document.querySelector('.total-section').classList.add('hidden'); location.href='#detailedQuotation';\"\n        class=\"mt-2 px-3 py-1 text-xs bg-blue-400 text-white font-medium rounded hover:bg-blue-500 transition-colors duration-200\">\n        Details\n    <\/button>\n\n\n        \n    <\/div>\n<\/div>\n  \n<div class='code-block code-block-39' style='margin: 8px auto; text-align: center; display: block; clear: both;'>\n<style>\n\n\/* SHARE SECTION *\/\n\n.share-section{\ntext-align:center;\npadding:28px 0;\nmargin-top:30px;\nborder-top:1px solid #e5e7eb;\n}\n\n\/* COPY LINK BUTTON *\/\n\n.copy-link-btn{\ndisplay:inline-flex;\nalign-items:center;\ngap:6px;\nfont-size:14px;\nfont-weight:600;\ncolor:var(--text-main);\nbackground:#f8fafc;\npadding:6px 12px;\nborder-radius:6px;\ntext-decoration:none;\ncursor:pointer;\ntransition:all .2s ease;\nmargin-bottom:18px;\n}\n\n.copy-link-btn:hover{\nbackground:#eef2f7;\ntransform:translateY(-1px);\n}\n\n\/* SHARE BUTTON ROW *\/\n\n.share-btns{\ndisplay:flex;\njustify-content:center;\ngap:12px;\nflex-wrap:wrap;\n}\n\n\/* SHARE ICON *\/\n\n.share-icon{\nwidth:36px;\nheight:36px;\nborder-radius:50%;\ndisplay:flex;\nalign-items:center;\njustify-content:center;\ncolor:#fff;\nfont-size:14px;\nfont-weight:600;\ntext-decoration:none;\ntransition:all .2s ease;\n}\n\n\/* BRAND COLORS *\/\n\n.wa{background:#25D366;}\n.tw{background:#000;}\n.li{background:#0A66C2;}\n.fb{background:#1877F2;}\n.ml{background:#ef4444;}\n\n\/* HOVER EFFECT *\/\n\n.share-icon:hover{\ntransform:translateY(-2px) scale(1.05);\nopacity:.9;\n}\n\n\/* COPY FEEDBACK *\/\n\n.copy-feedback{\nfont-size:12px;\ncolor:#16a34a;\nmargin-top:10px;\ndisplay:none;\n}\n\n<\/style>\n\n\n<div class=\"share-section\">\n\n<a onclick=\"copyToolLink()\" class=\"copy-link-btn\" id=\"copyBtn\">\n\ud83d\udd17 Copy Page Link\n<\/a>\n\n<div class=\"share-btns\">\n<a href=\"#\" id=\"shareWA\" target=\"_blank\" class=\"share-icon wa\" title=\"Share on WhatsApp\">W<\/a>\n<a href=\"#\" id=\"shareTW\" target=\"_blank\" class=\"share-icon tw\" title=\"Share on X\">X<\/a>\n<a href=\"#\" id=\"shareLI\" target=\"_blank\" class=\"share-icon li\" title=\"Share on LinkedIn\">in<\/a>\n<a href=\"#\" id=\"shareFB\" target=\"_blank\" class=\"share-icon fb\" title=\"Share on Facebook\">f<\/a>\n<a href=\"#\" id=\"shareEmail\" target=\"_blank\" class=\"share-icon ml\" title=\"Share via Email\">M<\/a>\n<\/div>\n\n<div id=\"copyFeedback\" class=\"copy-feedback\">Link copied!<\/div>\n\n<\/div>\n\n\n<script>\n\nfunction copyToolLink(){\n\nconst url = window.location.href;\n\nnavigator.clipboard.writeText(url).then(()=>{\n\nconst f = document.getElementById(\"copyFeedback\");\n\nf.style.display=\"block\";\n\nsetTimeout(()=>{f.style.display=\"none\"},2000);\n\n}).catch(()=>{\n\nalert(\"Copy failed. Please copy the URL manually.\");\n\n});\n\n}\n\nfunction setupShareButtons(){\n\nlet pageUrl=encodeURIComponent(window.location.href)\nlet pageTitle=encodeURIComponent(document.title)\n\ndocument.getElementById(\"shareWA\").href=\n`https:\/\/wa.me\/?text=${pageTitle}%20${pageUrl}`\n\ndocument.getElementById(\"shareTW\").href=\n`https:\/\/twitter.com\/intent\/tweet?text=${pageTitle}&url=${pageUrl}`\n\ndocument.getElementById(\"shareLI\").href=\n`https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=${pageUrl}`\n\ndocument.getElementById(\"shareFB\").href=\n`https:\/\/www.facebook.com\/sharer\/sharer.php?u=${pageUrl}`\n\ndocument.getElementById(\"shareEmail\").href=\n\"mailto:?subject=\"+encodeURIComponent(document.title)+\n\"&body=\"+encodeURIComponent(\"Check out this page: \"+window.location.href)\n\n}\n\nsetupShareButtons()\n\n<\/script><\/div>\n\n\n<div class='code-block code-block-40' style='margin: 8px 0; clear: both;'>\n<style>\n\n\/* SIMILAR TOOLS *\/\n\n.similar-tools{\nmargin-top:40px;\npadding-top:20px;\nborder-top:1px solid #e5e7eb;\n}\n\n.similar-tools h3{\nfont-size:18px;\nfont-weight:700;\nmargin-bottom:16px;\n}\n\n.similar-grid{\ndisplay:grid;\ngrid-template-columns:repeat(3,1fr);\ngap:12px;\nmargin-top: 15px;\nmargin-bottom: 15px;\nmargin-left: 20px;\nmargin-right: 20px;\n}\n\n.similar-card{\ndisplay:flex;\nalign-items:center;\ngap:10px;\npadding:12px;\nborder:1px solid #e5e7eb;\nborder-radius:8px;\ntext-decoration:none;\ncolor:inherit;\nbackground:#fff;\ntransition:all .15s ease;\n}\n\n.similar-card:hover{\nborder-color:#cbd5e1;\nbackground:#f8fafc;\ntransform:translateY(-2px);\n}\n\n\/* icon *\/\n\n.similar-icon{\nwidth:32px;\nheight:32px;\nborder-radius:6px;\nbackground:#eff6ff;\ndisplay:flex;\nalign-items:center;\njustify-content:center;\nfont-size:16px;\nflex-shrink:0;\n}\n\n\/* text *\/\n\n.similar-title{\nfont-size:14px;\nfont-weight:600;\nline-height:1.2;\n}\n\n@media(max-width:700px){\n.similar-grid{\ngrid-template-columns:1fr;\n}\n}\n\n.browse-tools-btn{\n    display:inline-block;\n    padding:10px 18px;\n    border-radius:8px;\n    border:1px solid #e5e7eb;\n    background:#fff;\n    text-decoration:none;\n    font-size:16px;\n    font-weight:600;\n    color:inherit;\n    transition:all .15s ease;\n}\n\n.browse-tools-btn:hover{\n    background:#f8fafc;\n    border-color:#d1d5db;\n    transform:translateY(-1px);\n}\n\n<\/style>\n\n\n<div class=\"similar-tools\">\n\n<h2 style=\"text-align: center;\">Other tools<\/h2>\n\n<div class=\"similar-grid\">\n\n<a href=\"\/tools\/publishing-calculator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Publishing Calculator<\/div>\n<\/a>\n\n<a href=\"\/tools\/isbn-validator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">ISBN Validator<\/div>\n<\/a>\n\n<a href=\"\/tools\/bulk-isbn-validator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Bulk ISBN Validator<\/div>\n<\/a>\n\n<a href=\"\/tools\/book-cover-calculator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Book Cover Calculator<\/div>\n<\/a>\n\n<a href=\"\/tools\/book-metadata-generator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Book Metadata Generator<\/div>\n<\/a>\n\n<a href=\"\/tools\/advert-policy-checks\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Meta Ad Policy Checker<\/div>\n<\/a>\n\n<a href=\"\/tools\/barcode-qr-code-generator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Barcode & QR Code Generator<\/div>\n<\/a>\n\n<a href=\"\/tools\/book-royalty-calculator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Book Royalty Calculator<\/div>\n<\/a>\n\n<a href=\"\/tools\/book-price-calculator\/\" class=\"similar-card\">\n<div class=\"similar-icon\">#<\/div>\n<div class=\"similar-title\">Book Price Calculator<\/div>\n<\/a>\n\n<\/div>\n\n<p style=\"text-align:center;\"><a href=\"https:\/\/aceworldpgs.com\/tools\/all\/\" class=\"browse-tools-btn\">Browse All Tools \u2192<\/a>\n<\/p>\n\n<\/div><\/div>\n\n\n<script>\n\/\/ =================================================================\n\/\/ 1. DATA OBJECT (Source of Truth for Prices)\n\/\/ =================================================================\nconst publishingCalculatorData = {\n\u00a0 \/\/ Print & Volume Data\u00a0\n\u00a0 paperSizes: ['A4', 'Letter', 'A5', 'US Trade', 'B5', 'Pocket', 'A6', '6x9'],\n\u00a0 desiredPrintSize: { options: ['A5', 'US Trade', 'B5', 'Pocket', 'A6', 'A4', '6x9'] },\n\u00a0\u00a0\n\u00a0 \/\/ \ud83d\udd25 UPDATED: Print Size Multipliers relative to A5 base price\n\u00a0 printSizeMultipliers: {\u00a0\n\u00a0 \u00a0 \u00a0 'A5': 1.00,\n\u00a0 \u00a0 \u00a0 'US Trade': Number('1'),\n\u00a0 \u00a0 \u00a0 'B5': Number('1.23'),\n\u00a0 \u00a0 \u00a0 'Pocket': Number('0.90'),\n\u00a0 \u00a0 \u00a0 'A6': Number('0.80'),\n\u00a0 \u00a0 \u00a0 'A4': Number('1.80'),\n\u00a0 \u00a0 \u00a0 '6x9': Number('1.75'),\n\u00a0 },\n\n\u00a0 interiorColor: { options: ['Black and White', 'Colored'] },\n\u00a0 pagesAndCopies: { \/* ... *\/ },\n\u00a0 coverFinish: { options: ['Matte', 'Glossy'] },\n\u00a0 coverText: { \/* ... *\/ },\n\u00a0 nylonWrapping: { \/* ... *\/ },\n\u00a0 bindingType: { \/* ... *\/ },\n\u00a0 interiorPaperType: { \/* ... *\/ },\n\u00a0 interiorPaperColor: { \/* ... *\/ },\n\n\u00a0\u00a0\n\/\/ ISBN Service (Complex structure)\n\u00a0 isbnService: {\n\u00a0 \u00a0 type: 'boolean', options: ['Yes', 'No'], units: [1, 2, 3, 5, 10, 15, 20],\n\u00a0 \u00a0 pricing: {\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 1: Number('15500'), 2: Number('20500'),\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 3: Number('30500'), 5: Number('35500'),\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 10: Number('35500'), 15: Number('0'),\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 20: Number('0')\u00a0\n\u00a0 \u00a0 }\n\u00a0 },\n\n\n \/\/ ISSN Service (Simple structured like coverDesign)\nissnService: {\n  type: 'boolean',\n  options: ['Yes', 'No'],\n  pricing: {\n    'Electronic ISSN': Number('29100'),\n    'Print ISSN': Number('32100'),\n    'Both': Number('61200')\n  }\n},\n\n\n\u00a0 \/\/ Editing Service (Complex structure)\n\u00a0 editingService: {\n\u00a0 \u00a0 type: 'boolean', options: ['Yes', 'No'],\n\u00a0 \u00a0 editingLevels: {\n\u00a0 \u00a0 \u00a0 'Developmental Editing': { pricePerWord: Number('10') },\u00a0\n\u00a0 \u00a0 \u00a0 'Line Editing': { pricePerWord: Number('6') },\n\u00a0 \u00a0 \u00a0 'Copy Editing': { pricePerWord: Number('3') },\u00a0\n\u00a0 \u00a0 \u00a0 'Proofreading': { pricePerWord: Number('1.5') }\n\u00a0 \u00a0 }\n\u00a0 },\n\u00a0 \/\/ Cover Design Service (Complex structure)\n\u00a0 coverDesignService: {\n\u00a0 \u00a0 type: 'boolean', options: ['Yes', 'No'],\n\u00a0 \u00a0 designOptions: {\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 'Full Cover (Front, Back and Spine)': Number('25000'),\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 'Front Cover Only': Number('15000')\u00a0\n\u00a0 \u00a0 }\n\u00a0 },\n\n\n\u00a0 \/\/ Simple Services Prices\u00a0\n\u00a0 copyrightRegistration: { price: Number('17500') },\n\u00a0 digitalDistribution: { price: Number('23000') },\n\u00a0 amazonPod: { price: Number('15000') },\n\n\/\/ Base Pricing (unchanged)\nbasePricing: {\nA5: {\n'30-79': { 100: Number('2000'), 300: Number('1600'), 500: Number('1200'), 1000: Number('900') },\n'80-150': { 100: Number('2500'), 300: Number('2000'), 500: Number('1600'), 1000: Number('1300') },\n'151-200': { 100: Number('3000'), 300: Number('2400'), 500: Number('2000'), 1000: Number('1700') },\n'201-250': { 100: Number('3500'), 300: Number('2800'), 500: Number('2400'), 1000: Number('2100') },\n'251-300': { 100: Number('4000'), 300: Number('3200'), 500: Number('2800'), 1000: Number('2500') },\n'301-350': { 100: Number('4500'), 300: Number('3600'), 500: Number('3300'), 1000: Number('2900') },\n'351-400': { 100: Number('5000'), 300: Number('4000'), 500: Number('3700'), 1000: Number('3300') },\n'401-450': { 100: Number('5500'), 300: Number('4400'), 500: Number('4100'), 1000: Number('3700') },\n'451-500': { 100: Number('6000'), 300: Number('4800'), 500: Number('4500'), 1000: Number('4100') },\n'501-550': { 100: Number('6500'), 300: Number('5200'), 500: Number('4900'), 1000: Number('4500') },\n'551-600': { 100: Number('7000'), 300: Number('5600'), 500: Number('5300'), 1000: Number('4900') },\n'601-650': { 100: Number('7500'), 300: Number('6000'), 500: Number('5600'), 1000: Number('5300') },\n'651-700': { 100: Number('8000'), 300: Number('6400'), 500: Number('5900'), 1000: Number('5700') },\n'701-750': { 100: Number('8400'), 300: Number('6700'), 500: Number('6200'), 1000: Number('6000') },\n'751-800': { 100: Number('8800'), 300: Number('7000'), 500: Number('6500'), 1000: Number('6300') },\n'801-850': { 100: Number('9200'), 300: Number('7300'), 500: Number('6800'), 1000: Number('6600') },\n'851-900': { 100: Number('9600'), 300: Number('7600'), 500: Number('7100'), 1000: Number('6900') },\n'901-950': { 100: Number('10000'), 300: Number('7900'), 500: Number('7400'), 1000: Number('7200') },\n'951-1000': { 100: Number('10400'), 300: Number('8200'), 500: Number('7700'), 1000: Number('7500') },\n\n'1001+': { 100: Number('10800'), 300: Number('8500'), 500: Number('8000'), 1000: Number('7700') }\n  }\n},\n\n\n\/\/ Pricing Modifiers\u00a0\n\u00a0 pricingModifiers: {\n\u00a0 \u00a0 printSize6x9Multiplier: Number('') || 2,\u00a0\n\u00a0 \u00a0 coatedInterior: Number('400'),\u00a0\n\u00a0 \u00a0 glossyFinish: Number('300'),\u00a0\n\u00a0 \u00a0 caseBinding: Number('500'),\n\u00a0 \u00a0 creamPaper: Number('500'),\u00a0\n\u00a0 \u00a0 coloredInterior: Number('600'),\u00a0\n\u00a0 \u00a0 nylonWrappingpc: Number('50'),\u00a0\n\u00a0 \u00a0 embossingDebossing: Number('500'),\u00a0\n\u00a0 \u00a0 foilStampingEmbossing: Number('700')\n\u00a0 }\n};\n\/\/ =================================================================\n\/\/ 2. CORE FUNCTIONS\n\/\/ =================================================================\n\n\/\/ Helper function to calculate base price\nfunction calculateBasePrice(printSize, pageCount, copies) {\n\u00a0 let pageRange;\n\u00a0 pageCount = Number(pageCount);\n\u00a0 copies = Number(copies);\n\u00a0\u00a0\n\u00a0 if (pageCount < 30) return 0;\n\u00a0 if (pageCount >= 30 && pageCount <= 79) pageRange = '30-79';\n\u00a0 else if (pageCount >= 80 && pageCount <= 150) pageRange = '80-150';\n\u00a0 else if (pageCount >= 151 && pageCount <= 200) pageRange = '151-200';\n\u00a0 else if (pageCount >= 201 && pageCount <= 250) pageRange = '201-250';\n\u00a0 else if (pageCount >= 251 && pageCount <= 300) pageRange = '251-300';\n\u00a0 else if (pageCount >= 301 && pageCount <= 350) pageRange = '301-350';\n\u00a0 else if (pageCount >= 351 && pageCount <= 400) pageRange = '351-400';\n\u00a0 else if (pageCount >= 401 && pageCount <= 450) pageRange = '401-450';\n\u00a0 else if (pageCount >= 451 && pageCount <= 500) pageRange = '451-500';\n\u00a0 else if (pageCount >= 501 && pageCount <= 550) pageRange = '501-550';\n\u00a0 else if (pageCount >= 551 && pageCount <= 600) pageRange = '551-600';\n\u00a0 else if (pageCount >= 601 && pageCount <= 650) pageRange = '601-650';\n\u00a0 else if (pageCount >= 651 && pageCount <= 700) pageRange = '651-700';\n\u00a0 else if (pageCount >= 701 && pageCount <= 750) pageRange = '701-750';\n\u00a0 else if (pageCount >= 751 && pageCount <= 800) pageRange = '751-800';\n\u00a0 else if (pageCount >= 801 && pageCount <= 850) pageRange = '801-850';\n\u00a0 else if (pageCount >= 851 && pageCount <= 900) pageRange = '851-900';\n\u00a0 else if (pageCount >= 901 && pageCount <= 950) pageRange = '901-950';\n\u00a0 else if (pageCount >= 951 && pageCount <= 1000) pageRange = '951-1000';\n\u00a0 else if (pageCount >= 1001) pageRange = '1000+';\n\u00a0 else return 0;\n\n\n\/\/ Range Bucketing Logic\nconst a5Pricing = publishingCalculatorData.basePricing.A5[pageRange];\n\nif (!a5Pricing) return 0;\n\n\/\/ Enforce minimum input\nif (copies < 50) copies = 50;\n\n\/\/ Range Bucketing\nlet selectedTier;\n\nif (copies <= 199) {\n  selectedTier = 100;   \/\/ 50\u2013199 \u2192 100 tier\n} else if (copies <= 399) {\n  selectedTier = 300;\n} else if (copies <= 699) {\n  selectedTier = 500;\n} else {\n  selectedTier = 1000;\n}\n\nlet pricePerCopy = a5Pricing[selectedTier] || 0;\n\n\n\u00a0\u00a0\n\u00a0 \/\/ Apply multiplier based on selected print size, using A5 price as base\n\u00a0 const multiplier = publishingCalculatorData.printSizeMultipliers[printSize] || 1.0;\n\u00a0 pricePerCopy *= multiplier;\n\u00a0\u00a0\n\u00a0 return pricePerCopy;\n}\n\n\/\/ Helper function to apply all modifiers\nfunction applyPricingModifiers(basePrice, selections) {\n\u00a0 let modifiedPrice = basePrice;\n\u00a0 const modifiers = publishingCalculatorData.pricingModifiers;\n\u00a0\u00a0\n\u00a0 if (selections.interiorPaperType === 'Coated') { modifiedPrice += Number(modifiers.coatedInterior); }\n\u00a0 if (selections.coverFinish === 'Glossy') { modifiedPrice += Number(modifiers.glossyFinish); }\n\u00a0 if (selections.bindingType === 'Case Binding (Hardback)') { modifiedPrice += Number(modifiers.caseBinding); }\n\u00a0 if (selections.interiorPaperColor === 'Cream') { modifiedPrice += Number(modifiers.creamPaper); }\n\u00a0 \u00a0 if (selections.nylonWrapping === 'Wrapped') { modifiedPrice += Number(modifiers.nylonWrappingpc); }\n\u00a0 if (selections.interiorColor === 'Colored') { modifiedPrice += Number(modifiers.coloredInterior); }\n\u00a0\u00a0\n\u00a0 if (selections.coverText === 'Embossing' || selections.coverText === 'Debossing') {\n\u00a0 \u00a0 modifiedPrice += Number(modifiers.embossingDebossing);\n\u00a0 }\n\u00a0 if (selections.coverText === 'Foil Stamping Embossing') {\n\u00a0 \u00a0 modifiedPrice += Number(modifiers.foilStampingEmbossing);\n\u00a0 }\n\u00a0\u00a0\n\u00a0 return modifiedPrice;\n}\n\n\n\/\/ Main calculation function\nfunction calculateTotalInvoice(userSelections) {\n\u00a0 let totalCost = 0;\n\u00a0 const breakdown = {\u00a0\n\u00a0 \u00a0 \u00a0 printingCost: 0, \n\u00a0 \u00a0 \u00a0 meta_pricePerCopy: 0, \n      meta_copiesCount: 0,\n\u00a0 \u00a0 \u00a0 formattingCost: 0,\n\u00a0 \u00a0 \u00a0 transcriptionCost: 0,\n\u00a0 \u00a0 \u00a0 isbnCost: 0, issnCost: 0, editingCost: 0, coverDesignCost: 0,\n      brochureDesignCost: 0,\n\u00a0 \u00a0 \u00a0 copyrightRegistrationCost: 0, \/\/ Explicitly defined\n\u00a0 \u00a0 \u00a0 digitalDistributionCost: 0,\u00a0 \u00a0 \/\/ Explicitly defined\n\u00a0 \u00a0 \u00a0 amazonPodCost: 0,\n\u00a0 \u00a0 \u00a0 deductionAmount: 0, \/\/ NEW: Initialize deduction amount\n\u00a0 \u00a0 \u00a0 deductionReason: 'N\/A' \/\/ NEW: Initialize deduction reason\n\u00a0 };\n\u00a0 const copies = Number(userSelections.copies);\n\u00a0 const pageCount = Number(userSelections.pageCount); \/\/ Retrieve pageCount directly from selections\n\nbreakdown.meta_copiesCount = copies;\n  \n  if (copies > 0 && pageCount >= 30) {\n      const basePrice = calculateBasePrice(userSelections.desiredPrintSize, pageCount, copies);\n      const pricePerCopy = applyPricingModifiers(basePrice, userSelections);\n      const printingCost = pricePerCopy * copies;\n\nbreakdown.printingCost = printingCost;\n      \/\/ Use the new name here\n      breakdown.meta_pricePerCopy = pricePerCopy; \n      totalCost += printingCost;\n\n\u00a0 }\n\u00a0\u00a0\n\u00a0 \/\/ 1. Word count check for editing\/formatting\/transcription\n\u00a0 const wordCount = Number(userSelections.wordCount);\n\u00a0 const wordCountValid = wordCount >= 30;\n\n\u00a0 if (userSelections.editingService === 'Yes' && userSelections.editingLevel && wordCountValid) {\n\u00a0 \u00a0 const pricePerWord = Number(publishingCalculatorData.editingService.editingLevels[userSelections.editingLevel].pricePerWord);\n\u00a0 \u00a0 const cost = wordCount * pricePerWord;\n\u00a0 \u00a0 breakdown.editingCost = cost;\n\u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\n\n\/\/ Proofreading Service\nif (userSelections.proofreadingService === 'Yes' && wordCountValid) {\n\n    const proofreadingRate = Number('1.5') || 0;\n\n    const cost = wordCount * proofreadingRate;\n\n    breakdown.proofreadingCost = cost;\n    totalCost += cost;\n}\n\n\n\/\/ Formatting Service\n\u00a0 if (userSelections.formattingService === 'Yes' && wordCountValid) {\n\u00a0 \u00a0 const baseRate = Number('190');\n\u00a0 \u00a0 const wordsPerPage = Number('200');\n\u00a0 \u00a0 const baseFee = Math.ceil(wordCount \/ wordsPerPage) * baseRate;\u00a0\n\u00a0 \u00a0 let cost = 0;\n\u00a0 \u00a0 if (userSelections.formattingType === 'Ebook Only' || userSelections.formattingType === 'Print Only') {\n\u00a0 \u00a0 \u00a0 \u00a0 cost = baseFee;\n\u00a0 \u00a0 } else if (userSelections.formattingType === 'Both') {\n\u00a0 \u00a0 \u00a0 \u00a0 \/\/ Assuming a 25% discount for 'Both' which is 0.75 multiplier\n\u00a0 \u00a0 \u00a0 \u00a0 cost = baseFee * 2 * Number('0.75');\n\u00a0 \u00a0 }\n\u00a0 \u00a0\u00a0\n\u00a0 \u00a0 breakdown.formattingCost = cost;\n\u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\n\n\/\/ Transcription Service\nif (userSelections.transcriptionService === 'Yes' && wordCountValid) {\n\n    const wordsPerPage = Number('200');\n    const pages = Math.ceil(wordCount \/ wordsPerPage);\n\n    let baseRate = 0;\n\n    if (userSelections.transcriptionType === 'English') {\n        baseRate = Number('700');\n    } else if (userSelections.transcriptionType === 'Yoruba') {\n        baseRate = Number('1000');\n    } else if (userSelections.transcriptionType === 'Other Languages') {\n        baseRate = Number('2000');\n    }\n\n    const cost = pages * baseRate;\n\n    breakdown.transcriptionCost = cost;\n    totalCost += cost;\n}\n\n\n\/\/ Brochure Design\nif (userSelections.brochureDesignService === 'Yes' && userSelections.brochurePages > 0) {\n    const pricePerPage = Number('4500');\n    const cost = userSelections.brochurePages * pricePerPage;\n\n    breakdown.brochureDesignCost = cost;\n    totalCost += cost;\n}\n\n\u00a0\u00a0\n\u00a0 \/\/ Other services (unchanged calculation logic)\n\u00a0 if (userSelections.isbnService === 'Yes' && userSelections.isbnUnits) {\n\u00a0 \u00a0 const cost = Number(publishingCalculatorData.isbnService.pricing[userSelections.isbnUnits]);\n\u00a0 \u00a0 breakdown.isbnCost = cost;\n\u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\n\/\/ ISSN Service\nif (userSelections.issnService === 'Yes' && userSelections.issnType) {\n    const cost = Number(publishingCalculatorData.issnService.pricing[userSelections.issnType]) || 0;\n    breakdown.issnCost = cost;\n    totalCost += cost;\n}\n\n\u00a0\u00a0\n\u00a0 if (userSelections.coverDesignService === 'Yes' && userSelections.coverDesignType) {\n\u00a0 \u00a0 const cost = Number(publishingCalculatorData.coverDesignService.designOptions[userSelections.coverDesignType]);\n\u00a0 \u00a0 breakdown.coverDesignCost = cost;\n\u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\n\/\/ Addon Services\n\n\/\/News Distribution\nconst newsToggle = document.getElementById('newsDistributionToggle');\nconst newsDetails = document.getElementById('newsDistributionDetails');\n\nif (newsToggle && newsDetails) {\n  newsToggle.addEventListener('change', function () {\n\n    if (this.checked) {\n      newsDetails.classList.remove('hidden');\n    } else {\n      newsDetails.classList.add('hidden');\n    }\n\n  });\n}\n\n\/\/Author's Website\nconst webToggle = document.getElementById('authorWebsiteToggle');\nconst webDetails = document.getElementById('authorWebsiteDetails');\n\nif (webToggle && webDetails) {\n  webToggle.addEventListener('change', function () {\n\n    if (this.checked) {\n      webDetails.classList.remove('hidden');\n    } else {\n      webDetails.classList.add('hidden');\n    }\n\n  });\n}\n\n\/\/Social Media\nconst socialToggle = document.getElementById('socialMediaToggle');\nconst socialDetails = document.getElementById('socialMediaDetails');\n\nif (socialToggle && socialDetails) {\n  socialToggle.addEventListener('change', function () {\n\n    if (this.checked) {\n      socialDetails.classList.remove('hidden');\n    } else {\n      socialDetails.classList.add('hidden');\n    }\n\n  });\n}\n\n\n\n\u00a0\u00a0\n\u00a0 \/\/ === Explicit Simple Service Calculation ===\n\u00a0 if (userSelections.copyrightRegistration === 'Yes') {\n\u00a0 \u00a0 \u00a0 const cost = publishingCalculatorData.copyrightRegistration.price;\n\u00a0 \u00a0 \u00a0 breakdown.copyrightRegistrationCost = cost;\n\u00a0 \u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\u00a0\u00a0\n\u00a0 if (userSelections.digitalDistribution === 'Yes') {\n\u00a0 \u00a0 \u00a0 const cost = publishingCalculatorData.digitalDistribution.price;\n\u00a0 \u00a0 \u00a0 breakdown.digitalDistributionCost = cost;\n\u00a0 \u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\u00a0\u00a0\n\u00a0 if (userSelections.amazonPod === 'Yes') {\n\u00a0 \u00a0 \u00a0 const cost = publishingCalculatorData.amazonPod.price;\n\u00a0 \u00a0 \u00a0 breakdown.amazonPodCost = cost;\n\u00a0 \u00a0 \u00a0 totalCost += cost;\n\u00a0 }\n\u00a0 \/\/ ===========================================\n\u00a0\u00a0\n\u00a0 \/\/ ===============================================\n\u00a0 \/\/ \ud83d\udd25 FIX: Apply Price Deduction (New Logic)\n\u00a0 \/\/ ===============================================\n\u00a0 \/\/ Ensure priceDeduction is treated as a number\n\u00a0 const priceDeductionValue = parseFloat(userSelections.priceDeduction) || 0;\n\n\u00a0 if (priceDeductionValue > 0) {\n\u00a0 \u00a0 \u00a0 totalCost -= priceDeductionValue;\n\u00a0 \u00a0 \u00a0 breakdown.deductionAmount = priceDeductionValue;\n\u00a0 \u00a0 \u00a0 breakdown.deductionReason = userSelections.deductionReason;\n\u00a0 } else {\n\u00a0 \u00a0 \u00a0 breakdown.deductionAmount = 0;\n\u00a0 \u00a0 \u00a0 breakdown.deductionReason = 'N\/A';\n\u00a0 }\n\u00a0 \/\/ ===============================================\n\n\u00a0 return { totalCost, breakdown, wordCountValid };\n}\n\n\n\/\/ Other helper functions (if any)\ndocument.addEventListener('DOMContentLoaded', () => {\n    \n    \/\/ 1. ELEMENT REFERENCES\n    const form = document.getElementById('calculator-form');\n    const totalCostDisplay = document.getElementById('totalCostDisplay');\n    const breakdownDisplay = document.getElementById('breakdownDisplay');\n    const clientNameInput = document.getElementById('clientName');\n    const clientEmailInput = document.getElementById('clientEmail');\n    const clientPhoneInput = document.getElementById('clientPhone'); \/\/ NEW\n    \n    \/\/ Buttons\n    const finalSubmitBtn = document.getElementById('finalSubmitBtn'); \/\/ Green Button\n    const submitAndResetBtn = document.getElementById('submitAndResetBtn'); \/\/ Blue Button\n\n    \/\/ Conditional Display Elements\n    const editingDetails = document.getElementById('editingDetails');\n    const formattingDetails = document.getElementById('formattingDetails'); \n    const transcriptionDetails = document.getElementById('transcriptionDetails'); \n    const coverDesignDetails = document.getElementById('coverDesignDetails');\n    const isbnDetails = document.getElementById('isbnDetails');\n    const copiesCustomInput = document.getElementById('copies-custom-input');\n    const pageCountContainer = document.getElementById('pageCountContainer');\n    const printSpecsContainer = document.getElementById('printSpecsContainer');\n    const printSpecsBreakdownContainer = document.getElementById('printSpecsBreakdownContainer');\n    \n    \/\/ Error messages\n    const editingError = document.getElementById('editingError');\n    const formattingError = document.getElementById('formattingError');\n    const transcriptionError = document.getElementById('transcriptionError');\n\n    const formatter = new Intl.NumberFormat('en-NG', {\n        style: 'currency',\n        currency: 'NGN',\n        minimumFractionDigits: 0,\n        maximumFractionDigits: 0,\n    });\n\n    \/\/ Set Initial Date\n    const dateStamp = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\n    const dateDisplay = document.getElementById('quoteDateDisplay');\n    if (dateDisplay) dateDisplay.textContent = dateStamp;\n\n    \/\/ 2. CLEAR FORM LOGIC (The small text link)\n    const clearBtn = document.getElementById('clearFormText');\n    if (clearBtn) {\n        clearBtn.addEventListener('click', function() {\n            if (confirm(\"Are you sure you want to clear all inputs? This will not save your progress.\")) {\n                if (clientNameInput) clientNameInput.value = '';\n                if (clientEmailInput) clientEmailInput.value = '';\n                if (clientPhoneInput) clientPhoneInput.value = '';\n                resetCalculatorForNewProject();\n                updateUI();\n                alert(\"Form cleared.\");\n            }\n        });\n    }\n\n    \/\/ 3. CORE UTILITY FUNCTIONS\n    \nfunction getCurrentSelections() {\n    const selections = {};\n    const elements = form.querySelectorAll('input, select');\n\n    elements.forEach(element => {\n        const { name, value, type, checked } = element;\n\n        if (!name) return;\n\n        \/\/ Radio buttons: only capture checked\n        if (type === 'radio') {\n            if (checked) selections[name] = value.trim();\n        }\n        \/\/ Checkboxes: handled explicitly later\n        else if (type === 'checkbox') {\n            \/\/ We'll handle toggles explicitly below\n        }\n        \/\/ Numeric inputs\n        else if (['pageCount', 'wordCount', 'priceDeduction'].includes(name)) {\n            selections[name] = Number(value) || 0;\n        }\n        \/\/ Regular selects & text inputs\n        else {\n            selections[name] = value;\n        }\n    });\n\n    \/\/ Copies: handle custom vs preset\n    if (selections.copiesOption === 'custom') {\n        const copiesCustomInput = document.getElementById('copies-custom-input');\n        selections.copies = copiesCustomInput ? Number(copiesCustomInput.value) || 0 : 0;\n    } else {\n        selections.copies = Number(selections.copiesOption) || 0;\n    }\n\n    \/\/ --- Explicit toggle handling ---\n\n    \/\/ ISBN toggle (with dependent units)\n    const isbnEl = document.querySelector('input[name=\"isbnService\"]');\n    selections.isbnService = (isbnEl && isbnEl.checked) ? 'Yes' : 'No';\n    const unitsEl = document.getElementById('isbnUnits');\n    selections.isbnUnits = (selections.isbnService === 'Yes' && unitsEl) ? Number(unitsEl.value) || 0 : null;\n    \n    \/\/ ISSN toggle\nconst issnEl = document.querySelector('input[name=\"issnService\"]');\nselections.issnService = (issnEl && issnEl.checked) ? 'Yes' : 'No';\n\nconst issnTypeEl = document.getElementById('issnType');\nselections.issnType = (selections.issnService === 'Yes' && issnTypeEl)\n    ? issnTypeEl.value\n    : null;\n\n\n    \/\/ Proofreading toggle\n    const proofreadingEl = document.querySelector('input[name=\"proofreadingService\"]');\nselections.proofreadingService = (proofreadingEl && proofreadingEl.checked) ? 'Yes' : 'No';\n\n    \/\/ Copyright toggle\n    const copyrightEl = document.querySelector('input[name=\"copyrightRegistration\"]');\n    selections.copyrightRegistration = (copyrightEl && copyrightEl.checked) ? 'Yes' : 'No';\n\n    \/\/ Digital Distribution toggle\n    const ddEl = document.querySelector('input[name=\"digitalDistribution\"]');\n    selections.digitalDistribution = (ddEl && ddEl.checked) ? 'Yes' : 'No';\n\n    \/\/ Amazon POD toggle\n    const podEl = document.querySelector('input[name=\"amazonPod\"]');\n    selections.amazonPod = (podEl && podEl.checked) ? 'Yes' : 'No';\n\n    \/\/ Editing toggle\n    const editingEl = document.querySelector('input[name=\"editingService\"]');\n    selections.editingService = (editingEl && editingEl.checked) ? 'Yes' : 'No';\n    if (selections.editingService !== 'Yes') selections.editingLevel = null;\n\n    \/\/ Formatting toggle\n    const formattingEl = document.querySelector('input[name=\"formattingService\"]');\n    selections.formattingService = (formattingEl && formattingEl.checked) ? 'Yes' : 'No';\n    if (selections.formattingService !== 'Yes') selections.formattingType = null;\n    \n     \/\/ Transcription toggle\n    const transcriptionEl = document.querySelector('input[name=\"transcriptionService\"]');\n    selections.transcriptionService = (transcriptionEl && transcriptionEl.checked) ? 'Yes' : 'No';\n    if (selections.transcriptionService !== 'Yes') selections.transcriptionType = null;\n\n    \/\/ Cover Design toggle\n    const coverEl = document.querySelector('input[name=\"coverDesignService\"]');\n    selections.coverDesignService = (coverEl && coverEl.checked) ? 'Yes' : 'No';\n    if (selections.coverDesignService !== 'Yes') selections.coverDesignType = null;\n\n\/\/ Brochure Design toggle\nconst brochureEl = document.querySelector('input[name=\"brochureDesignService\"]');\nselections.brochureDesignService = (brochureEl && brochureEl.checked) ? 'Yes' : 'No';\n\nconst brochurePagesEl = document.getElementById('brochurePages');\nselections.brochurePages = (selections.brochureDesignService === 'Yes' && brochurePagesEl)\n    ? Number(brochurePagesEl.value) || 0\n    : 0;\n\n    return selections;\n}\n\n\n    async function saveQuotation(buttonTrigger) {\n        if (typeof jQuery === 'undefined' || typeof calculator_ajax_object === 'undefined') {\n            alert('WordPress dependencies missing.');\n            return false;\n        }\n\n        const selections = getCurrentSelections();\n        const result = calculateTotalInvoice(selections);\n        const totalCostStr = formatter.format(result.totalCost);\n\n        const quoteData = {\n            action: 'save_quote', \n            client_name: clientNameInput.value || 'Anonymous',\n            client_email: clientEmailInput.value,\n            client_phone: clientPhoneInput.value || 'Not Provided',\n            total_cost: totalCostStr,\n            book_title: selections.bookTitle || 'Untitled Project', \n            security: calculator_ajax_object.security, \n            quote_details: JSON.stringify({ \n                selections: selections, \n                breakdown: result.breakdown \n            }),\n        };\n\n        const originalText = buttonTrigger.textContent;\n        buttonTrigger.textContent = 'Saving...';\n        buttonTrigger.disabled = true;\n\n        try {\n            const response = await jQuery.post(calculator_ajax_object.ajax_url, quoteData);\n            if (response.success) {\n                buttonTrigger.textContent = originalText;\n                buttonTrigger.disabled = false;\n                return true;\n            } else {\n                alert('Error: ' + (response.data || 'Unknown error.'));\n                buttonTrigger.textContent = originalText;\n                buttonTrigger.disabled = false;\n                return false;\n            }\n        } catch (e) {\n            alert('Connection error.');\n            buttonTrigger.textContent = originalText;\n            buttonTrigger.disabled = false;\n            return false;\n        }\n    }\n\n    function updateUI() {\n        const selections = getCurrentSelections();\n        const wordCount = selections.wordCount;\n        const bookTitle = selections.bookTitle || 'My Book Project';\n        const copies = Number(selections.copies);\n        const showPrintInputs = copies > 0;\n        const isWordCountValid = wordCount >= 30;\n\tconst brochureDetails = document.getElementById('brochureDetails');\n\n        editingDetails.classList.toggle('hidden', selections.editingService !== 'Yes');\n        editingError.classList.toggle('hidden', isWordCountValid || selections.editingService !== 'Yes');\n        formattingDetails.classList.toggle('hidden', selections.formattingService !== 'Yes');\n        formattingError.classList.toggle('hidden', isWordCountValid || selections.formattingService !== 'Yes');\n        transcriptionDetails.classList.toggle('hidden', selections.transcriptionService !== 'Yes');\n        transcriptionError.classList.toggle('hidden', isWordCountValid || selections.transcriptionService !== 'Yes');\n\n\nbrochureDetails.classList.toggle('hidden', selections.brochureDesignService !== 'Yes');\n        \n        document.getElementById('editingLevel').disabled = !isWordCountValid;\n        document.getElementById('formattingType').disabled = !isWordCountValid;\n        document.getElementById('transcriptionType').disabled = !isWordCountValid;\n\n        coverDesignDetails.classList.toggle('hidden', selections.coverDesignService !== 'Yes');\n        isbnDetails.classList.toggle('hidden', selections.isbnService !== 'Yes');\n        if(copiesCustomInput) copiesCustomInput.classList.toggle('hidden', selections.copiesOption !== 'custom');\n        \n        pageCountContainer.classList.toggle('hidden', !showPrintInputs);\n        printSpecsContainer.classList.toggle('hidden', !showPrintInputs);\n        \n        let result = calculateTotalInvoice(selections);\n        \n        totalCostDisplay.textContent = formatter.format(result.totalCost);\n        \ndocument.getElementById('printingCost').textContent = formatter.format(result.breakdown.printingCost);\ndocument.getElementById('pricePerCopy').textContent = formatter.format(result.breakdown.meta_pricePerCopy);\ndocument.getElementById('copiesCount').textContent = result.breakdown.meta_copiesCount; \n\n        document.getElementById('bookTitleBreakdown').textContent = `Project: ${bookTitle}`;\n        document.getElementById('wordCountBreakdown').textContent = `Word Count: ${wordCount.toLocaleString()}`;\n        document.getElementById('proofreadingCost').textContent = `Proofreading: ${formatter.format(result.breakdown.proofreadingCost)}`;\n        document.getElementById('deductionAmountDisplay').textContent = `Deduction: - ${formatter.format(result.breakdown.deductionAmount)}`;\n        document.getElementById('deductionReasonDisplay').textContent = `Reason: ${result.breakdown.deductionReason}`;\n\n        document.getElementById('formattingCost').textContent = `Formatting: ${formatter.format(result.breakdown.formattingCost)}`;\n        document.getElementById('transcriptionCost').textContent = `Transcription: ${formatter.format(result.breakdown.transcriptionCost)}`;\n        document.getElementById('isbnCost').textContent = `ISBNs: ${formatter.format(result.breakdown.isbnCost)}`;\n        document.getElementById('issnCost').textContent = `ISSN: ${formatter.format(result.breakdown.issnCost)}`;\n        document.getElementById('editingCost').textContent = `Editing: ${formatter.format(result.breakdown.editingCost)}`;\n        document.getElementById('coverDesignCost').textContent = `Cover Design: ${formatter.format(result.breakdown.coverDesignCost)}`;\ndocument.getElementById('brochureDesignCost').textContent =\n    `Brochure Design: ${formatter.format(result.breakdown.brochureDesignCost)}`;\n        document.getElementById('copyrightRegistrationCost').textContent = `Copyright: ${formatter.format(result.breakdown.copyrightRegistrationCost)}`;\n        document.getElementById('digitalDistributionCost').textContent = `Distribution: ${formatter.format(result.breakdown.digitalDistributionCost)}`;\n        document.getElementById('amazonPodCost').textContent = `Amazon POD: ${formatter.format(result.breakdown.amazonPodCost)}`;\n\nif (selections.brochureDesignService === 'Yes' && selections.brochurePages < 1) {\n    document.getElementById('brochureError').classList.remove('hidden');\n} else {\n    document.getElementById('brochureError').classList.add('hidden');\n}\n\n        if (showPrintInputs) { \n            document.getElementById('specTrimSize').textContent = `Trim Size: ${selections.desiredPrintSize}`;\n            document.getElementById('specInteriorColor').textContent = `Text Color: ${selections.interiorColor}`;\n            document.getElementById('specInteriorPaperType').textContent = `Paper Finish: ${selections.interiorPaperType}`;\n            document.getElementById('specInteriorPaperColor').textContent = `Paper Color: ${selections.interiorPaperColor}`;\n            document.getElementById('specCoverFinish').textContent = `Cover Lamination: ${selections.coverFinish}`;\n            document.getElementById('specCoverText').textContent = `Cover Title Style: ${selections.coverText}`;\n            document.getElementById('specNylonWrapping').textContent = `Packaging: ${selections.nylonWrapping}`;\n            document.getElementById('specBindingType').textContent = `Binding: ${selections.bindingType}`;\n            printSpecsBreakdownContainer.classList.remove('hidden');\n        } else {\n            printSpecsBreakdownContainer.classList.add('hidden');\n        }\n\n        const hasCosts = result.totalCost > 0;\n        breakdownDisplay.classList.toggle('hidden', !hasCosts);\n    }\n\n    \/\/ 4. ATTACH LISTENERS\n    form.addEventListener('change', updateUI);\n    form.addEventListener('input', updateUI);\n    if(copiesCustomInput) copiesCustomInput.addEventListener('input', updateUI);\n\n    if (finalSubmitBtn) {\n        finalSubmitBtn.addEventListener('click', async () => {\n            const success = await saveQuotation(finalSubmitBtn);\n            if (success) {\n                window.print();\n                alert('Success! Your quote is saved and you can now print\/save the PDF.');\n            }\n        });\n    }\n\n    if (submitAndResetBtn) {\n        submitAndResetBtn.addEventListener('click', async () => {\n            const success = await saveQuotation(submitAndResetBtn);\n            if (success) {\n                resetCalculatorForNewProject();\n                form.scrollIntoView({ behavior: 'smooth' });\n                alert('Book saved! The form has been cleared for your next project.');\n            }\n        });\n    }\n\n    updateUI(); \n});\n\nfunction resetCalculatorForNewProject() {\n\n    \/* Reset text and number inputs *\/\n    const fields = ['bookTitle','wordCount','pageCount','priceDeduction','deductionReason','brochurePages'];\n    \n    fields.forEach(id => {\n        const el = document.getElementById(id);\n        if (!el) return;\n\n        if (el.type === \"number\") {\n            el.value = el.id === \"wordCount\" ? 20000 : \"\";\n        } else {\n            el.value = \"\";\n        }\n    });\n\n\n    \/* Uncheck ALL service toggles *\/\n    document.querySelectorAll('#calculator-form input[type=\"checkbox\"]').forEach(toggle => {\n        toggle.checked = false;\n    });\n\n\n    \/* Reset dropdowns *\/\n    document.querySelectorAll('#calculator-form select').forEach(select => {\n        select.selectedIndex = 0;\n    });\n\n\n    \/* Hide all subsections *\/\n    document.querySelectorAll('.subsection').forEach(section => {\n        section.classList.add('hidden');\n    });\n\n\n    \/* Reset breakdown display *\/\n    const breakdownIds = [\n        'editingCost',\n        'proofreadingCost',\n        'formattingCost',\n        'transcriptionCost',\n        'coverDesignCost',\n        'brochureDesignCost',\n        'isbnCost',\n        'issnCost',\n        'copyrightRegistrationCost',\n        'digitalDistributionCost',\n        'amazonPodCost'\n    ];\n\n    breakdownIds.forEach(id => {\n        const el = document.getElementById(id);\n        if (el) el.innerText = el.innerText.split(':')[0] + ': \u20a60';\n    });\n\n\n    \/* Trigger recalculation *\/\n    const form = document.getElementById('calculator-form');\n    if (form) form.dispatchEvent(new Event('input'));\n}\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n    const originalTotal = document.getElementById(\"totalCostDisplay\");\n    const floatingSection = document.querySelector(\".total-section\");\n    const floatingValue = document.getElementById(\"floatingTotalValue\");\n    const closeButton = document.getElementById(\"close-button\");\n    const resetButton = document.getElementById(\"reset-button\");\n\n    function updateFloatingTotal() {\n        if (!originalTotal) return;\n\n        const totalText = originalTotal.textContent.trim();\n\n        \/\/ Mirror the exact value\n        floatingValue.textContent = totalText;\n\n        \/\/ Extract numeric value from text (removes \u20a6, commas etc)\n        const numericValue = parseFloat(totalText.replace(\/[^\\d.]\/g, ''));\n\n        if (numericValue > 0) {\n            floatingSection.classList.remove(\"hidden\");\n        } else {\n            floatingSection.classList.add(\"hidden\");\n        }\n    }\n\n    \/\/ Watch for changes in the real total display\n    const observer = new MutationObserver(updateFloatingTotal);\n\n    if (originalTotal) {\n        observer.observe(originalTotal, {\n            childList: true,\n            subtree: true,\n            characterData: true\n        });\n    }\n\n    \/\/ Close button hides only the floating box\n    closeButton.addEventListener(\"click\", function () {\n        floatingSection.classList.add(\"hidden\");\n    });\n\n    \/\/ Reset button should trigger your calculator reset\n    resetButton.addEventListener(\"click\", function () {\n\n        \/\/ If you already have a reset function, call it here\n        if (typeof resetCalculator === \"function\") {\n            resetCalculator();\n        }\n\n        \/\/ Force hide\n        floatingSection.classList.add(\"hidden\");\n    });\n\n});\n\n\ndocument.addEventListener('DOMContentLoaded', () => {\n\n    \/\/ --- Toggle-dependent sections ---\n    const toggleSections = [\n        { name: 'isbnService', detailsId: 'isbnDetails' },\n        { name: 'issnService', detailsId: 'issnDetails' },\n        { name: 'digitalDistribution', detailsId: null }, \/\/ no dependent section\n        { name: 'amazonPod', detailsId: null },           \/\/ no dependent section\n        { name: 'editingService', detailsId: 'editingDetails' },\n        { name: 'formattingService', detailsId: 'formattingDetails' },\n        { name: 'transcriptionService', detailsId: 'transcriptionDetails' },\n        { name: 'coverDesignService', detailsId: 'coverDesignDetails' },\n\t{ name: 'brochureDesignService', detailsId: 'brochureDetails' }\n    ];\n\n    toggleSections.forEach(item => {\n        const toggle = document.querySelector(`input[name=\"${item.name}\"]`);\n        const details = item.detailsId ? document.getElementById(item.detailsId) : null;\n\n        if (!toggle) return;\n\n        \/\/ Initial state\n        if (details) {\n            if (!toggle.checked) details.classList.add('hidden');\n            else details.classList.remove('hidden');\n        }\n\n        \/\/ Listen for changes\n        toggle.addEventListener('change', () => {\n            if (details) {\n                toggle.checked ? details.classList.remove('hidden') : details.classList.add('hidden');\n            }\n        });\n    });\n\n});\n\n<\/script><\/div>\n\n\n\n\n<h2 class=\"wp-block-heading\">About the Publishing Calculator<\/h2>\n\n\n\n<p>The&nbsp;<strong>Publishing Calculator<\/strong>&nbsp;helps authors and publishers to quickly estimate the cost of publishing a book. By selecting the services you need\u2014such as editing, typesetting, cover design, ISBN registration, copyright protection, distribution, or printing\u2014the tool automatically calculates an estimated quote for your project.<\/p>\n\n\n\n<p>This makes it easier to understand how different publishing services affect your overall budget and helps you plan your publishing journey more confidently.<\/p>\n\n\n\n<p>Whether you are a&nbsp;<strong>first-time author, self-publisher, or organization preparing a book<\/strong>, the calculator provides a fast and convenient way to preview potential publishing costs and generate a formal quotation.<\/p>\n\n\n\n<p><em><strong>Note<\/strong>: Estimates generated by this tool are indicative and may vary depending on manuscript specifications and project requirements.<\/em><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Know how much it costs to publish and print your book. Choose publishing services according to your preferences and select print specifications to get instant quotation.<\/p>\n","protected":false},"author":1,"featured_media":75318,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kb_optimizer_status":1,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"normal","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[16],"tags":[17,13,12],"class_list":["post-75203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pricing-tools","tag-calculator","tag-fast","tag-free"],"acf":[],"_links":{"self":[{"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/posts\/75203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/comments?post=75203"}],"version-history":[{"count":9,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/posts\/75203\/revisions"}],"predecessor-version":[{"id":76917,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/posts\/75203\/revisions\/76917"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/media?parent=75203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/categories?post=75203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aceworldpgs.com\/tools\/wp-json\/wp\/v2\/tags?post=75203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}