{"id":239,"date":"2025-05-17T13:55:21","date_gmt":"2025-05-17T13:55:21","guid":{"rendered":"https:\/\/bluegoosemarketing.com\/?page_id=239"},"modified":"2025-05-26T20:39:32","modified_gmt":"2025-05-26T20:39:32","slug":"profit-playground-calculator","status":"publish","type":"page","link":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/","title":{"rendered":"ROI Planner | Blue Goose Marketing"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"239\" class=\"elementor elementor-239\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8cfdcd7 e-con-full bgm-full-bg e-flex e-con e-parent\" data-id=\"8cfdcd7\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d5d0f33 elementor-widget elementor-widget-html\" data-id=\"d5d0f33\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   BLUE GOOSE MARKETING \u2502 PROFIT PLAYGROUND (v5.12 - UX\/UI Polish & Clarity)\n   Full single-snippet for Elementor \u2014 copy\/paste ready\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n\n<link rel=\"preload\"\n      href=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.2\/dist\/chart.umd.min.js\"\n      as=\"script\" \/>\n\n<section id=\"profitPlayground\" class=\"profit-playground\">\n\n  <div class=\"pp-tool-header\">\n    <div class=\"pp-tool-header-content\">\n      <a href=\"https:\/\/bluegoosemarketing.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"pp-header-logo-link pp-tool-logo-link\">\n        <img decoding=\"async\"\n          src=\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/Blue-Goose-Marketing_Favicon.png\"\n          alt=\"Blue Goose Marketing logo\"\n          class=\"pp-tool-logo\"\n        \/>\n      <\/a>\n      <div class=\"pp-tool-titles\">\n        <h1 class=\"pp-tool-main-title\">Profit\u00a0Playground<\/h1>\n        <p class=\"pp-tool-subtitle\">Interactive Calculator<\/p>\n      <\/div>\n      <a href=\"https:\/\/bluegoosemarketing.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"pp-header-logo-link pp-powered-by-link\">\n        <img decoding=\"async\" src=\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/BlueGoose-Marketing_Words-Only_PNG.png\"\n             alt=\"Powered by Blue Goose Marketing\"\n             class=\"pp-powered-by-logo\" \/>\n      <\/a>\n    <\/div>\n  <\/div>\n\n  <div class=\"pp-columns-wrapper\">\n    <!-- ========== LEFT COLUMN \u2500 INPUTS ========== -->\n    <div class=\"pp-column pp-column-left\">\n      <!-- STEP 1: OFFER & MARKET -->\n      <div id=\"ppStep1\" class=\"pp-step pp-step-active\">\n        <header class=\"pp-header\">\n          <h2 class=\"pp-step-title\">About Your Business<\/h2>\n          <p class=\"pp-step-description\">Tell us a bit about what you offer and who you sell to.<\/p>\n        <\/header>\n\n        <div class=\"pp-input-section\">\n          <h3 class=\"pp-section-title\">What do you offer?<\/h3>\n          <div class=\"pp-selection-grid\">\n            <button data-offer=\"product\" class=\"pp-selection-button\">\n              <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:gift-outline.svg?color=%2304264d\" alt=\"Product icon\" \/>\n              <span>Product<\/span>\n            <\/button>\n            <button data-offer=\"service\" class=\"pp-selection-button\">\n              <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:handshake-outline.svg?color=%2304264d\" alt=\"Service icon\" \/>\n              <span>Service<\/span>\n            <\/button>\n            <button data-offer=\"both\" class=\"pp-selection-button\">\n              <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:swap-horizontal.svg?color=%2304264d\" alt=\"Both icon\" \/>\n              <span>Both<\/span>\n            <\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"pp-input-section\">\n          <h3 class=\"pp-section-title\">Who is your market?<\/h3>\n          <div class=\"pp-selection-grid\">\n            <button data-market=\"b2c\" class=\"pp-selection-button\">\n              <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:account-outline.svg?color=%2304264d\" alt=\"B2C icon\" \/>\n              <span>B2C \/ Consumer<\/span>\n            <\/button>\n            <button data-market=\"b2b\" class=\"pp-selection-button\">\n              <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:office-building-outline.svg?color=%2304264d\" alt=\"B2B icon\" \/>\n              <span>B2B \/ Business<\/span>\n            <\/button>\n          <\/div>\n        <\/div>\n\n        <div class=\"pp-cta-row\">\n          <button id=\"ppContinueBtn\" class=\"pp-button-primary\" disabled>Next: Your Numbers \u2192<\/button>\n        <\/div>\n      <\/div><!-- \/#ppStep1 -->\n\n      <!-- STEP 2: FINANCIALS & STRATEGY -->\n      <div id=\"ppStep2\" class=\"pp-step\">\n        <header class=\"pp-header\">\n          <h2 class=\"pp-step-title\">Enter Your Numbers<\/h2>\n          <p class=\"pp-step-description\">Input your key figures to see your potential 3-month growth.<\/p>\n        <\/header>\n\n        <div class=\"pp-cards-container\">\n          <!-- PRIMARY INPUTS CARD -->\n          <div class=\"pp-card pp-card-primary-inputs\">\n            <div class=\"pp-card-header\"><h3 class=\"pp-card-title\">Your Core Numbers<\/h3><\/div>\n            <div class=\"pp-card-body\">\n              <label class=\"pp-field\">\n                <span class=\"pp-label\" id=\"priceLabel\">Average Sell Price<\/span>\n                <input type=\"text\" id=\"priceInput\" inputmode=\"numeric\" value=\"49\" class=\"pp-numeric-input-field\"\/>\n              <\/label>\n              <label class=\"pp-field\">\n                <span class=\"pp-label\" id=\"cogsLabel\">Average Cost per Sale (COGS)<\/span>\n                <input type=\"text\" id=\"cogsInput\" inputmode=\"numeric\" value=\"15\" class=\"pp-numeric-input-field\"\/>\n              <\/label>\n              <div id=\"grossMarginHint\" class=\"pp-gross-margin-hint\">Gross margin: \u2014 %<\/div>\n\n              <label class=\"pp-field\">\n                <span class=\"pp-label\">Monthly Advertising Budget<\/span>\n                <input type=\"text\" id=\"spendInput\" inputmode=\"numeric\" value=\"2000\" class=\"pp-numeric-input-field\"\/>\n                <div class=\"pp-ad-budget-chips\">\n                  <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"2000\">$2k<\/button>\n                  <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"3000\">$3k<\/button>\n                  <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"5000\">$5k<\/button>\n                  <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"8000\">$8k<\/button>\n                  <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"12000\">$12k<\/button>\n                <\/div>\n              <\/label>\n            <\/div>\n          <\/div>\n\n          <!-- COLLAPSIBLE ADVANCED INPUTS CARD -->\n          <div class=\"pp-card pp-card-advanced-inputs\">\n            <div class=\"pp-card-header pp-collapsible-header\" id=\"advancedInputsHeader\">\n              <h3 class=\"pp-card-title\">After the 1st Order<\/h3>\n              <span class=\"pp-collapsible-arrow\">\u25bc<\/span>\n            <\/div>\n            <div class=\"pp-card-body pp-collapsible-body\" id=\"advancedInputsBody\">\n              <div class=\"pp-input-section\" style=\"margin-bottom: 0;\">\n                 <h3 class=\"pp-section-title\" style=\"margin-bottom: 16px; font-size: 1rem;\">Customer Loyalty & Retention<\/h3>\n                 <label class=\"pp-field\" style=\"margin-bottom: 20px;\">\n                    <span class=\"pp-label\">Do customers typically make repeat purchases?<\/span>\n                    <div class=\"pp-toggle-buttons\">\n                      <button type=\"button\" class=\"pp-toggle-button selected\" data-repeat-behavior=\"yes\">Yes, they do!<\/button>\n                      <button type=\"button\" class=\"pp-toggle-button\" data-repeat-behavior=\"no\">Not typically<\/button>\n                    <\/div>\n                  <\/label>\n                  <div class=\"pp-repeat-inputs-group\">\n                      <label class=\"pp-field\">\n                        <span class=\"pp-label\">Percentage of new customers who buy again (%)<\/span>\n                         <input type=\"number\" id=\"repeatCustomerPercentInput\" min=\"0\" max=\"100\" step=\"1\" value=\"25\" class=\"pp-numeric-input-field\"\/>\n                         <div class=\"pp-suggestion-chips-grid\">\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"10\">10%<\/button>\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"25\">25%<\/button>\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"40\">40%<\/button>\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"60\">60%<\/button>\n                         <\/div>\n                      <\/label>\n                      <label class=\"pp-field\">\n                        <span class=\"pp-label\">Avg. additional orders by these repeat buyers (monthly)<\/span>\n                        <input type=\"number\" id=\"repeatOrdersPerRepeaterInput\" min=\"0\" max=\"5\" step=\"0.1\" value=\"0.5\" class=\"pp-numeric-input-field\"\/>\n                        <div class=\"pp-suggestion-chips-grid\">\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"0.5\">0.5<\/button>\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"1\">1<\/button>\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"1.5\">1.5<\/button>\n                            <button type=\"button\" class=\"pp-suggestion-chip\" data-value=\"2\">2<\/button>\n                         <\/div>\n                      <\/label>\n                  <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"pp-cta-row\" id=\"ppCtaRowStep2\">\n          <button id=\"ppRevealBtn\" class=\"pp-button-primary\">See Your Projection! \u2192<\/button>\n        <\/div>\n      <\/div><!-- \/#ppStep2 -->\n    <\/div><!-- \/.pp-column-left -->\n\n    <!-- ========== RIGHT COLUMN \u2500 RESULTS \/ INITIAL PLACEHOLDER ======================= -->\n    <div class=\"pp-column pp-column-right\" id=\"ppRight\">\n\n      <div id=\"ppInitialPlaceholder\" class=\"pp-initial-placeholder-desktop\">\n        <img decoding=\"async\" src=\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/ClayMation-Profit-Playground_v1-min.png\" alt=\"Profit Playground Visual\" \/>\n        <p>Unlock Your Profit Potential!<\/p>\n      <\/div>\n\n      <div id=\"ppProjectionSnapshot\" class=\"pp-result-section pp-snapshot-card\">\n          <h2 class=\"pp-snapshot-title\">Your 3-Month Profit Snapshot<\/h2>\n          <div class=\"pp-snapshot-grid\">\n              <div class=\"pp-snapshot-item\">\n                  <span class=\"pp-snapshot-label\">Total Projected Net Profit<\/span>\n                  <strong id=\"snapshotTotalProfit\" class=\"pp-snapshot-value profit\">\u2014<\/strong>\n              <\/div>\n              <div class=\"pp-snapshot-item\">\n                  <span class=\"pp-snapshot-label\">Total Projected Revenue<\/span>\n                  <strong id=\"snapshotTotalRevenue\" class=\"pp-snapshot-value revenue\">\u2014<\/strong>\n              <\/div>\n              <div class=\"pp-snapshot-item\">\n                  <span class=\"pp-snapshot-label\">Projected ROAS<\/span>\n                  <strong id=\"snapshotRoas\" class=\"pp-snapshot-value roas\">\u2014<\/strong>\n              <\/div>\n              <div class=\"pp-snapshot-item\">\n                  <span class=\"pp-snapshot-label\">New Customers Acquired<\/span>\n                  <strong id=\"snapshotNewCustomers\" class=\"pp-snapshot-value customers\">\u2014<\/strong>\n              <\/div>\n              <div class=\"pp-snapshot-item pp-snapshot-item-adspend\">\n                  <span class=\"pp-snapshot-label\">Total Ad Spend (3 Months)<\/span>\n                  <strong id=\"snapshotTotalAdSpend\" class=\"pp-snapshot-value spend\">\u2014<\/strong>\n              <\/div>\n          <\/div>\n          <p id=\"snapshotSummary\" class=\"pp-snapshot-summary\"><\/p>\n          <!-- Ad Spend Boost Section (v5.12) -->\n          <div class=\"pp-ad-boost-section\">\n            <p class=\"pp-ad-boost-title\">Want More Growth? <span role=\"img\" aria-label=\"rocket\">\ud83d\ude80<\/span> Boost Your Ad Spend:<\/p>\n            <div class=\"pp-ad-boost-buttons\">\n                <button type=\"button\" class=\"pp-boost-button\" data-boost-type=\"fixed\" data-boost-value=\"500\">+$500<\/button>\n                <button type=\"button\" class=\"pp-boost-button\" data-boost-type=\"fixed\" data-boost-value=\"1000\">+$1k<\/button>\n                <button type=\"button\" class=\"pp-boost-button\" data-boost-type=\"percent\" data-boost-value=\"0.25\">+25%<\/button>\n                <button type=\"button\" class=\"pp-boost-button\" id=\"resetAdSpendBoost\">Reset Spend<\/button>\n            <\/div>\n            <p id=\"currentBoostedSpend\" class=\"pp-current-boosted-spend\"><\/p>\n          <\/div>\n      <\/div>\n\n      <div id=\"ppGlobalKPI\" class=\"pp-result-section\">\n        <h2 class=\"pp-section-title-results\">Key Performance Indicators<\/h2>\n        <div class=\"pp-kpi-grid pp-kpi-grid-four\">\n          <div class=\"pp-kpi-card\" id=\"breakEvenBox\" data-kpi-modal-target=\"breakEvenCACModal\">\n            <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:scale-balance.svg?color=%2304264d\" alt=\"Break-Even CAC\" class=\"pp-kpi-icon\"\/>\n            <span class=\"pp-kpi-info-hover-icon\">\u24d8<\/span>\n            <h3 class=\"pp-kpi-title\">Break-Even CAC<\/h3>\n            <p id=\"kpiBreakEven\" class=\"pp-kpi-value\">\u2014<\/p>\n            <small id=\"kpiBreakEvenDescription\" class=\"pp-kpi-description\"><\/small>\n          <\/div>\n          <div class=\"pp-kpi-card\" id=\"targetBox\" data-kpi-modal-target=\"targetCACModal\">\n            <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:target-arrow.svg?color=%2304264d\" alt=\"Target CAC\" class=\"pp-kpi-icon\"\/>\n            <span class=\"pp-kpi-info-hover-icon\">\u24d8<\/span>\n            <h3 class=\"pp-kpi-title\">Target Acquisition Cost<\/h3>\n            <p id=\"kpiTarget\" class=\"pp-kpi-value\">\u2014<\/p>\n            <small id=\"kpiTargetDescription\" class=\"pp-kpi-description\"><\/small>\n          <\/div>\n          <div class=\"pp-kpi-card\" data-kpi-modal-target=\"profitFirstSaleModal\">\n             <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:currency-usd-circle-outline.svg?color=%2304264d\" alt=\"Profit per Sale\" class=\"pp-kpi-icon\"\/>\n             <span class=\"pp-kpi-info-hover-icon\">\u24d8<\/span>\n            <h3 class=\"pp-kpi-title\">Profit \/ First Sale<\/h3>\n            <p id=\"kpiMarginSale\" class=\"pp-kpi-value pp-kpi-value-profit\">\u2014<\/p>\n            <small id=\"kpiMarginSaleDescription\" class=\"pp-kpi-description\"><\/small>\n          <\/div>\n          <div class=\"pp-kpi-card\" id=\"ltvBox\" data-kpi-modal-target=\"ltvModal\">\n            <img decoding=\"async\" src=\"https:\/\/api.iconify.design\/mdi:account-multiple-plus-outline.svg?color=%2304264d\" alt=\"Customer LTV\" class=\"pp-kpi-icon\"\/>\n            <span class=\"pp-kpi-info-hover-icon\">\u24d8<\/span>\n            <h3 class=\"pp-kpi-title\">Est. 3-Month LTV<\/h3>\n            <p id=\"kpiLtv\" class=\"pp-kpi-value pp-kpi-value-profit\">\u2014<\/p>\n            <small id=\"kpiLtvDescription\" class=\"pp-kpi-description\"><\/small>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div id=\"ppExplainerAndJourney\" class=\"pp-result-section\">\n          <h2 class=\"pp-section-title-results\">Your 3-Month Growth Journey<\/h2>\n          <div id=\"ppDynamicExplain\" class=\"pp-explainer-text\"><\/div>\n\n          <div id=\"ppJourneyContainer\" class=\"pp-journey-wrapper\">\n            <div class=\"pp-month-card\" id=\"m1Box\">\n              <div class=\"pp-month-header\">Month 1: Laying the Foundation<\/div>\n              <div class=\"pp-month-body\">\n                <div class=\"pp-month-stats-container\">\n                    <p class=\"pp-stat-line\"><span>Ad Spend<\/span>      <b id=\"m1SpendLabel\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>New Customers<\/span><b id=\"m1NewCust\">\u2014<\/b><\/p>\n                    <div class=\"pp-month-divider\"><\/div>\n                    <p class=\"pp-stat-line\"><span>Total Revenue<\/span> <b id=\"m1Revenue\" class=\"pp-value-revenue\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>Net Profit<\/span>    <b id=\"m1Profit\"  class=\"pp-value-profit\">\u2014<\/b><\/p>\n                <\/div>\n                <div class=\"pp-month-explanation-area\">\n                    <p class=\"pp-month-explain\" id=\"m1Explain\"><\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n            <img decoding=\"async\" class=\"pp-flow-arrow\" src=\"https:\/\/api.iconify.design\/mdi:arrow-down-bold.svg?color=%2304264d\" alt=\"\u2193\" \/>\n            <div class=\"pp-month-card\" id=\"m2Box\">\n              <div class=\"pp-month-header\">Month 2: Building Momentum<\/div>\n              <div class=\"pp-month-body\">\n                <div class=\"pp-month-stats-container\">\n                    <p class=\"pp-stat-line\"><span>Ad Spend<\/span>      <b id=\"m2SpendLabel\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>New Customers<\/span><b id=\"m2NewCust\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>Repeat Orders<\/span> <b id=\"m2Reorders\" class=\"pp-value-revenue-light\">\u2014<\/b><\/p>\n                    <div class=\"pp-month-divider\"><\/div>\n                    <p class=\"pp-stat-line\"><span>Total Revenue<\/span> <b id=\"m2Revenue\" class=\"pp-value-revenue\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>Net Profit<\/span>    <b id=\"m2Profit\"  class=\"pp-value-profit\">\u2014<\/b><\/p>\n                <\/div>\n                <div class=\"pp-month-explanation-area\">\n                    <p class=\"pp-month-explain\" id=\"m2Explain\"><\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n            <img decoding=\"async\" class=\"pp-flow-arrow\" src=\"https:\/\/api.iconify.design\/mdi:arrow-down-bold.svg?color=%2304264d\" alt=\"\u2193\" \/>\n            <div class=\"pp-month-card\" id=\"m3Box\">\n              <div class=\"pp-month-header\">Month 3: Reaching New Heights<\/div>\n              <div class=\"pp-month-body\">\n                <div class=\"pp-month-stats-container\">\n                    <p class=\"pp-stat-line\"><span>Ad Spend<\/span>      <b id=\"m3SpendLabel\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>New Customers<\/span><b id=\"m3NewCust\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>Repeat Orders<\/span><b id=\"m3Reorders\" class=\"pp-value-revenue-light\">\u2014<\/b><\/p>\n                    <div class=\"pp-month-divider\"><\/div>\n                    <p class=\"pp-stat-line\"><span>Total Revenue<\/span> <b id=\"m3Revenue\" class=\"pp-value-revenue\">\u2014<\/b><\/p>\n                    <p class=\"pp-stat-line\"><span>Net Profit<\/span>    <b id=\"m3Profit\"  class=\"pp-value-profit\">\u2014<\/b><\/p>\n                <\/div>\n                <div class=\"pp-month-explanation-area\">\n                    <p class=\"pp-month-explain\" id=\"m3Explain\"><\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n      <\/div>\n\n      <div id=\"ppChartContainer\" class=\"pp-result-section pp-chart-wrapper\">\n        <h2 class=\"pp-section-title-results\">Your Profit Trajectory <span role=\"img\" aria-label=\"chart increasing\">\ud83d\udcc8<\/span><\/h2>\n        <canvas id=\"ppChart\" height=\"280\"><\/canvas>\n      <\/div>\n\n      <div id=\"ppEmailBox\" class=\"pp-result-section pp-card pp-email-gate-wrapper\">\n        <div class=\"pp-card-header\"><h2 class=\"pp-card-title\">Get Your Custom Profit Plan<\/h2><\/div>\n        <div class=\"pp-card-body\">\n          <p>Enter your email and we'll send this personalized 3-month projection straight to your inbox.<\/p>\n          <form id=\"ppEmailForm\" class=\"pp-email-form\">\n            <input type=\"text\"  id=\"userName\"  name=\"userName\" placeholder=\"Your Name\"  required class=\"pp-text-input\"\/>\n            <input type=\"email\" id=\"userEmail\" name=\"userEmail\" placeholder=\"Your Email\" required class=\"pp-text-input\"\/>\n            <button type=\"submit\" class=\"pp-button-primary pp-email-button\">Email My Plan<\/button>\n          <\/form>\n          <p id=\"emailStatus\" class=\"pp-email-status\"><\/p>\n        <\/div>\n      <\/div>\n\n      <div id=\"ppFinalCtaBox\" class=\"pp-result-section pp-final-cta-wrapper\">\n        <p class=\"pp-final-cta-headline\"><strong>Ready to Make This Vision a Reality?<\/strong><\/p>\n        <p>Blue Goose Marketing builds advertising strategies that turn projections into consistent business growth. Let's discuss how we can elevate your brand.<\/p>\n        <a href=\"#contact\" data-bgm-open class=\"pp-button-primary pp-final-button\">Discuss Your Strategy<\/a>\n      <\/div>\n    <\/div><!-- \/.pp-column-right -->\n  <\/div><!-- \/.pp-columns-wrapper -->\n\n  <!-- KPI Modals -->\n  <div class=\"pp-modal-overlay\" id=\"breakEvenCACModalOverlay\">\n    <div class=\"pp-modal-content\">\n      <button class=\"pp-modal-close\" aria-label=\"Close modal\">\u00d7<\/button>\n      <h3>Break-Even Customer Acquisition Cost (CAC)<\/h3>\n      <p>This is the absolute <strong>maximum amount<\/strong> you can spend to get one new customer without losing money on their very first purchase. Think of it as your \"get your money back\" point for ad spend on that initial sale.<\/p>\n      <p>If your product sells for $100 and costs you $30 to make (your COGS), your gross profit is $70. So, your Break-Even CAC is <strong>$70<\/strong>. If you spend $70 on ads to get that customer, you've broken even on that first transaction.<\/p>\n      <p>Knowing this number is crucial because it tells you the upper limit for your ad spending per customer before things become unprofitable upfront. Of course, the goal is to spend <em>less<\/em> than this to make a profit from day one!<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"pp-modal-overlay\" id=\"targetCACModalOverlay\">\n    <div class=\"pp-modal-content\">\n      <button class=\"pp-modal-close\" aria-label=\"Close modal\">\u00d7<\/button>\n      <h3>Target Customer Acquisition Cost (CAC)<\/h3>\n      <p>This is the <strong>ideal amount<\/strong> you want to spend to get a new customer. In this calculator, we automatically set this target to be <strong>15% lower (better)<\/strong> than your Break-Even CAC. Why? Because just breaking even isn't the goal \u2013 making a profit is!<\/p>\n      <p>For example, if your Break-Even CAC is $70, aiming for a Target CAC that's 15% lower would be $70 \u00d7 0.85 = <strong>$59.50<\/strong>. This means if you can get customers for $59.50, you're not just getting your ad money back, you're also making a nice profit right from their first purchase.<\/p>\n      <div class=\"pp-modal-formula\">Target CAC = Break-Even CAC \u00d7 0.85<\/div>\n      <p>This calculator uses this Target CAC to project how many customers you can acquire with your ad budget and then estimates your potential revenue and profit.<\/p>\n    <\/div>\n  <\/div>\n    <div class=\"pp-modal-overlay\" id=\"profitFirstSaleModalOverlay\">\n    <div class=\"pp-modal-content\">\n      <button class=\"pp-modal-close\" aria-label=\"Close modal\">\u00d7<\/button>\n      <h3>Profit \/ First Sale<\/h3>\n      <p>This is the actual <strong>cash you pocket<\/strong> from a new customer's very first purchase (or set of initial purchases), after accounting for the cost of the goods\/services (COGS) and the cost to acquire that customer (your Target CAC).<\/p>\n      <div class=\"pp-modal-formula\">(Average Sell Price - Average COGS) - Target CAC = Profit \/ First Sale<\/div>\n      <p>For instance, if your product is $100, COGS is $30 (gross profit $70), and your Target CAC is $50, then your Profit \/ First Sale is $70 - $50 = <strong>$20<\/strong>. This is the profit you make immediately, even before considering if that customer buys again.<\/p>\n      <p>A healthy profit on the first sale is great because it means your ads are profitable quickly, giving you more cash to reinvest in getting even more customers.<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"pp-modal-overlay\" id=\"ltvModalOverlay\">\n    <div class=\"pp-modal-content\">\n      <button class=\"pp-modal-close\" aria-label=\"Close modal\">\u00d7<\/button>\n      <h3>Estimated 3-Month Customer Lifetime Value (LTV)<\/h3>\n      <p>Customer Lifetime Value (LTV) is a super important metric. It tells you the <strong>total amount of revenue<\/strong> you can expect from a single customer over their entire relationship with your business. In this calculator, we're looking at an <em>estimated LTV over a 3-month period<\/em>.<\/p>\n      <p>It includes the revenue from their initial purchase AND any repeat purchases they are projected to make within those first three months (if you've enabled the \"repeat purchases\" option and set those figures).<\/p>\n      <p><strong>Why is LTV important?<\/strong> If your LTV is higher than your Customer Acquisition Cost (CAC), your business is on a good track! It means each customer, over time, brings in more money than it cost to get them. A high LTV allows you to spend more confidently on ads to acquire new customers.<\/p>\n    <\/div>\n  <\/div>\n\n<\/section><!-- \/#profitPlayground -->\n\n<!-- CHART.JS -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.2\/dist\/chart.umd.min.js\"><\/script>\n\n<script>\n(() => {\n  const $ = (id) => document.getElementById(id);\n\n  \/\/ --- DOM Elements ---\n  const step1Div = $('ppStep1');\n  const step2Div = $('ppStep2');\n  const resultsDiv = $('ppRight');\n  const initialPlaceholderDiv = $('ppInitialPlaceholder');\n  const continueBtn = $('ppContinueBtn');\n  const revealBtn = $('ppRevealBtn');\n  const step2CtaRow = $('ppCtaRowStep2');\n\n  const priceLabel = $('priceLabel');\n  const cogsLabel = $('cogsLabel');\n\n  const priceInput = $('priceInput');\n  const cogsInput = $('cogsInput');\n  const spendInput = $('spendInput');\n\n  const grossMarginHintEl = $('grossMarginHint');\n  const adBudgetChipContainer = document.querySelector('.pp-ad-budget-chips');\n  const adBudgetChips = adBudgetChipContainer ? adBudgetChipContainer.querySelectorAll('.pp-suggestion-chip') : [];\n\n  const advancedInputsHeader = $('advancedInputsHeader');\n  const advancedInputsBody = $('advancedInputsBody');\n\n  const repeatBehaviorToggleButtons = document.querySelectorAll('.pp-toggle-button[data-repeat-behavior]');\n  const repeatInputsGroup = document.querySelector('.pp-repeat-inputs-group');\n  const repeatCustomerPercentInput = $('repeatCustomerPercentInput');\n  const repeatOrdersPerRepeaterInput = $('repeatOrdersPerRepeaterInput');\n\n  const repeatCustomerPercentChipsContainer = repeatCustomerPercentInput.closest('.pp-field').querySelector('.pp-suggestion-chips-grid');\n  const repeatCustomerPercentChips = repeatCustomerPercentChipsContainer ? repeatCustomerPercentChipsContainer.querySelectorAll('.pp-suggestion-chip') : [];\n  const repeatOrdersPerRepeaterChipsContainer = repeatOrdersPerRepeaterInput.closest('.pp-field').querySelector('.pp-suggestion-chips-grid');\n  const repeatOrdersPerRepeaterChips = repeatOrdersPerRepeaterChipsContainer ? repeatOrdersPerRepeaterChipsContainer.querySelectorAll('.pp-suggestion-chip') : [];\n\n  const projectionSnapshotDiv = $('ppProjectionSnapshot');\n  const globalKpiDiv = $('ppGlobalKPI');\n  const explainerAndJourneyDiv = $('ppExplainerAndJourney');\n  const chartContainer = $('ppChartContainer');\n  const emailGateDiv = $('ppEmailBox');\n  const finalCtaBox = $('ppFinalCtaBox');\n\n  const snapshotTotalProfitEl = $('snapshotTotalProfit');\n  const snapshotTotalRevenueEl = $('snapshotTotalRevenue');\n  const snapshotRoasEl = $('snapshotRoas');\n  const snapshotNewCustomersEl = $('snapshotNewCustomers');\n  const snapshotTotalAdSpendEl = $('snapshotTotalAdSpend'); \/\/ New element\n  const snapshotSummaryEl = $('snapshotSummary');\n\n  const adBoostButtons = document.querySelectorAll('.pp-boost-button:not(#resetAdSpendBoost)');\n  const resetAdSpendBoostBtn = $('resetAdSpendBoost');\n  const currentBoostedSpendEl = $('currentBoostedSpend');\n\n  const kpiBreakEvenEl = $('kpiBreakEven');\n  const kpiBreakEvenDescriptionEl = $('kpiBreakEvenDescription');\n  const kpiTargetEl = $('kpiTarget');\n  const kpiTargetDescriptionEl = $('kpiTargetDescription');\n  const kpiMarginSaleEl = $('kpiMarginSale');\n  const kpiMarginSaleDescriptionEl = $('kpiMarginSaleDescription');\n  const kpiLtvEl = $('kpiLtv');\n  const kpiLtvDescriptionEl = $('kpiLtvDescription');\n\n  const dynamicExplainEl = $('ppDynamicExplain');\n\n  const m1SpendLabelEl = $('m1SpendLabel'); const m1NewCustEl = $('m1NewCust');\n  const m1RevenueEl = $('m1Revenue');       const m1ProfitEl = $('m1Profit');\n  const m1ExplainEl = $('m1Explain');\n  const m2SpendLabelEl = $('m2SpendLabel'); const m2NewCustEl = $('m2NewCust');\n  const m2ReordersEl = $('m2Reorders');     const m2RevenueEl = $('m2Revenue');\n  const m2ProfitEl = $('m2Profit');\n  const m2ExplainEl = $('m2Explain');\n  const m3SpendLabelEl = $('m3SpendLabel'); const m3NewCustEl = $('m3NewCust');\n  const m3ReordersEl = $('m3Reorders');     const m3RevenueEl = $('m3Revenue');\n  const m3ProfitEl = $('m3Profit');\n  const m3ExplainEl = $('m3Explain');\n  const chartCanvas = $('ppChart');\n\n  \/\/ --- State Variables ---\n  let currentOffering = null;\n  let currentMarket = null;\n  let enableRepeatBehavior = true;\n  let planResultsVisible = false;\n  let chartInstance = null;\n  let initialValues = {};\n  let originalMonthlyAdSpend = 0;\n  let currentBoostedMonthlyAdSpend = 0;\n\n  \/\/ --- CSS Color Variables for JS ---\n  let colorInfoRGB, colorProfitRGB, colorDarkRGB, colorTextRGB, colorSpendRGB, colorProfitLightRGB;\n\n  function assignColorsFromCSS() {\n    const rootStyles = getComputedStyle(document.documentElement);\n    colorInfoRGB = rootStyles.getPropertyValue('--pg-color-info-rgb').trim() || '14, 165, 233';\n    colorProfitRGB = rootStyles.getPropertyValue('--pg-color-profit-rgb').trim() || '22, 163, 74';\n    colorProfitLightRGB = rootStyles.getPropertyValue('--pg-color-profit-light-rgb').trim() || '74, 222, 128'; \/\/ For monthly profit bars\n    colorDarkRGB = rootStyles.getPropertyValue('--pg-color-dark-rgb').trim() || '4, 38, 77';\n    colorTextRGB = rootStyles.getPropertyValue('--pg-color-text-rgb').trim() || '30, 58, 91';\n    colorSpendRGB = rootStyles.getPropertyValue('--pg-color-accent-rgb').trim() || '255, 200, 87';\n  }\n\n  if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', assignColorsFromCSS);\n  } else {\n      assignColorsFromCSS();\n  }\n\n  \/\/ --- Input Formatting Helpers (USD and Commas) ---\n  function getRawNumericValue(valueString) {\n      if (typeof valueString !== 'string') valueString = String(valueString);\n      return parseFloat(valueString.replace(\/\\$|,\/g, '')) || 0;\n  }\n\n  function formatToLocaleCurrency(num) {\n      if (isNaN(num) || num === null) return '';\n      return Math.round(num).toLocaleString('en-US');\n  }\n\n  const currencyFormattedInputs = [priceInput, cogsInput, spendInput];\n  currencyFormattedInputs.forEach(inputEl => {\n      if (!inputEl) return;\n      const parentField = inputEl.closest('.pp-field');\n      if (parentField) parentField.classList.add('pp-field-has-dollar-prefix');\n\n      inputEl.addEventListener('focus', (e) => {\n          e.target.value = getRawNumericValue(e.target.value) || '';\n          e.target.type = 'number'; \/\/ Easier editing with numpad, arrows\n      });\n      inputEl.addEventListener('blur', (e) => {\n          const rawValue = getRawNumericValue(e.target.value);\n          e.target.type = 'text'; \/\/ To show formatted string\n          e.target.value = rawValue > 0 ? formatToLocaleCurrency(rawValue) : (rawValue === 0 ? '0' : '');\n\n          \/\/ Trigger standard input event for other listeners\n          const inputEvent = new Event('input', { bubbles: true, cancelable: true });\n          e.target.dispatchEvent(inputEvent);\n      });\n      \/\/ Initial format\n      const initialRawValue = getRawNumericValue(inputEl.value);\n      inputEl.type = 'text';\n      inputEl.value = initialRawValue > 0 ? formatToLocaleCurrency(initialRawValue) : (initialRawValue === 0 ? '0' : '');\n  });\n\n\n  \/\/ --- Step 1 Logic ---\n  const offerButtons = document.querySelectorAll('.pp-selection-button[data-offer]');\n  const marketButtons = document.querySelectorAll('.pp-selection-button[data-market]');\n\n  offerButtons.forEach(btn => {\n    btn.addEventListener('click', () => {\n      currentOffering = btn.dataset.offer;\n      offerButtons.forEach(b => b.classList.remove('selected'));\n      btn.classList.add('selected');\n      checkStep1Ready();\n    });\n  });\n\n  marketButtons.forEach(btn => {\n    btn.addEventListener('click', () => {\n      currentMarket = btn.dataset.market;\n      marketButtons.forEach(b => b.classList.remove('selected'));\n      btn.classList.add('selected');\n      checkStep1Ready();\n    });\n  });\n\n  function checkStep1Ready() { if (currentOffering && currentMarket) continueBtn.disabled = false; }\n\n  continueBtn.addEventListener('click', () => {\n    step1Div.classList.remove('pp-step-active');\n    step2Div.classList.add('pp-step-active');\n    if (initialPlaceholderDiv) initialPlaceholderDiv.style.display = 'none';\n    adjustLabelsBasedOnOffering();\n    if (window.innerWidth < 992) {\n        step2Div.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n    displayGrossMarginHint();\n    checkEssentialInputsForStickyCTA();\n  });\n\n  function adjustLabelsBasedOnOffering() {\n    const priceUnitText = currentOffering === \"service\" ? \"Service Price\" : (currentOffering === \"both\" ? \"Price \/ Unit\" : \"Sell Price\");\n    const cogsUnitText = currentOffering === \"service\" ? \"Delivery Cost \/ Overhead\" : (currentOffering === \"both\" ? \"Fulfillment\/Delivery Cost\" : \"Cost per Sale (COGS)\");\n\n    if (priceLabel) priceLabel.textContent = `Average ${priceUnitText}`;\n    if (cogsLabel) cogsLabel.textContent = `Average ${cogsUnitText}`;\n  }\n\n  \/\/ --- Step 2 Logic (v5.12 Polish) ---\n  function displayGrossMarginHint() {\n    const price = getRawNumericValue(priceInput.value);\n    const cogs = getRawNumericValue(cogsInput.value);\n    if (grossMarginHintEl) {\n      if (!isNaN(price) && !isNaN(cogs) && price > 0 && price >= cogs) {\n        const margin = price > 0 ? ((price - cogs) \/ price) * 100 : 0;\n        grossMarginHintEl.textContent = `Gross margin: ${margin.toFixed(0)}%`;\n        grossMarginHintEl.style.visibility = 'visible';\n      } else {\n        grossMarginHintEl.textContent = `Gross margin: \u2014 %`;\n        const priceVal = priceInput.value.trim();\n        const cogsVal = cogsInput.value.trim();\n        grossMarginHintEl.style.visibility = (priceVal && priceVal !== '0') || (cogsVal && cogsVal !== '0') ? 'visible' : 'hidden';\n      }\n    }\n  }\n\n  [priceInput, cogsInput, spendInput].forEach(input => {\n    input.addEventListener('input', () => { \/\/ This 'input' is dispatched after blur formatting\n      if (input === priceInput || input === cogsInput) {\n        displayGrossMarginHint();\n      }\n      if (input === spendInput) {\n        originalMonthlyAdSpend = getRawNumericValue(spendInput.value);\n        currentBoostedMonthlyAdSpend = originalMonthlyAdSpend;\n        if(currentBoostedSpendEl) currentBoostedSpendEl.textContent = '';\n      }\n      checkEssentialInputsForStickyCTA();\n      if (planResultsVisible) calculateAndDisplayPlan(currentBoostedMonthlyAdSpend || getRawNumericValue(spendInput.value));\n    });\n  });\n\n\n  adBudgetChips.forEach(chip => {\n    chip.addEventListener('click', () => {\n      const chipValue = chip.dataset.value;\n      spendInput.value = chipValue; \/\/ Set raw value\n      spendInput.dispatchEvent(new Event('blur', { bubbles: true })); \/\/ Trigger blur to format and then input\n      adBudgetChips.forEach(c => c.classList.remove('selected'));\n      chip.classList.add('selected');\n    });\n  });\n\n  spendInput.addEventListener('input', () => { \/\/ This 'input' is dispatched after blur formatting\n    const customValue = getRawNumericValue(spendInput.value);\n    let chipSelected = false;\n    adBudgetChips.forEach(c => {\n        if (parseInt(c.dataset.value) === customValue) {\n            c.classList.add('selected');\n            chipSelected = true;\n        } else {\n            c.classList.remove('selected');\n        }\n    });\n    if (!chipSelected) {\n         adBudgetChips.forEach(c => c.classList.remove('selected'));\n    }\n  });\n\n  function setupAdvancedChips(inputElement, chipsArray) {\n    chipsArray.forEach(chip => {\n        chip.addEventListener('click', () => {\n            inputElement.value = chip.dataset.value;\n            chipsArray.forEach(c => c.classList.remove('selected'));\n            chip.classList.add('selected');\n            inputElement.dispatchEvent(new Event('input', { bubbles: true }));\n        });\n    });\n    inputElement.addEventListener('input', () => {\n        const customValue = inputElement.value;\n        let chipSelected = false;\n        chipsArray.forEach(c => {\n            if (c.dataset.value === customValue) {\n                c.classList.add('selected');\n                chipSelected = true;\n            } else {\n                c.classList.remove('selected');\n            }\n        });\n        if (!chipSelected) {\n            chipsArray.forEach(c => c.classList.remove('selected'));\n        }\n    });\n  }\n  if (repeatCustomerPercentChips.length > 0) {\n    setupAdvancedChips(repeatCustomerPercentInput, repeatCustomerPercentChips);\n  }\n  if (repeatOrdersPerRepeaterChips.length > 0) {\n    setupAdvancedChips(repeatOrdersPerRepeaterInput, repeatOrdersPerRepeaterChips);\n  }\n\n  if (advancedInputsHeader && advancedInputsBody) {\n    advancedInputsHeader.addEventListener('click', () => {\n      const isVisible = advancedInputsBody.classList.toggle('pp-collapsible-body-visible');\n      const arrow = advancedInputsHeader.querySelector('.pp-collapsible-arrow');\n      if (arrow) {\n        arrow.textContent = isVisible ? '\u25b2' : '\u25bc';\n      }\n    });\n  }\n\n  const essentialInputsForSticky = [priceInput, cogsInput, spendInput];\n  function storeInitialValues() {\n      essentialInputsForSticky.forEach(input => {\n          initialValues[input.id] = input.value; \/\/ Store the initially formatted value\n      });\n      initialValues['repeatCustomerPercentInput'] = repeatCustomerPercentInput.value;\n      initialValues['repeatOrdersPerRepeaterInput'] = repeatOrdersPerRepeaterInput.value;\n      originalMonthlyAdSpend = getRawNumericValue(spendInput.value);\n      currentBoostedMonthlyAdSpend = originalMonthlyAdSpend;\n  }\n\n  function checkEssentialInputsForStickyCTA() {\n    let edited = false;\n    for (const input of essentialInputsForSticky) {\n        if (input.value.trim() !== '' && input.value !== initialValues[input.id]) {\n            edited = true;\n            break;\n        }\n        if (initialValues[input.id] === '' && input.value.trim() !== '') { \/\/ Started empty, now has value\n             edited = true;\n             break;\n        }\n    }\n    if (step2CtaRow) {\n      if (edited) {\n        step2CtaRow.classList.add('pp-cta-sticky');\n      } else {\n        \/\/ Check if all are back to initial\n        let allReverted = true;\n        for (const input of essentialInputsForSticky) {\n            if(input.value !== initialValues[input.id]) {\n                allReverted = false;\n                break;\n            }\n        }\n        if(allReverted) step2CtaRow.classList.remove('pp-cta-sticky');\n      }\n    }\n  }\n\n  repeatBehaviorToggleButtons.forEach(btn => {\n    btn.addEventListener('click', () => {\n      repeatBehaviorToggleButtons.forEach(b => b.classList.remove('selected'));\n      btn.classList.add('selected');\n      enableRepeatBehavior = btn.dataset.repeatBehavior === 'yes';\n      if(repeatInputsGroup) repeatInputsGroup.style.display = enableRepeatBehavior ? 'grid' : 'none';\n      if (planResultsVisible) calculateAndDisplayPlan(currentBoostedMonthlyAdSpend || getRawNumericValue(spendInput.value));\n    });\n  });\n  if(repeatInputsGroup) {\n    repeatInputsGroup.style.display = enableRepeatBehavior ? 'grid' : 'none';\n  }\n\n  \/\/ For repeatCustomerPercentInput and repeatOrdersPerRepeaterInput, if results are visible, recalculate.\n  [repeatCustomerPercentInput, repeatOrdersPerRepeaterInput].forEach(el => {\n    el.addEventListener('input', () => {\n      if (planResultsVisible) calculateAndDisplayPlan(currentBoostedMonthlyAdSpend || getRawNumericValue(spendInput.value));\n    });\n  });\n\n\n  revealBtn.addEventListener('click', () => {\n    resultsDiv.classList.add('pp-column-active');\n    if (initialPlaceholderDiv) initialPlaceholderDiv.style.display = 'none';\n    originalMonthlyAdSpend = getRawNumericValue(spendInput.value);\n    currentBoostedMonthlyAdSpend = originalMonthlyAdSpend;\n    if(currentBoostedSpendEl) currentBoostedSpendEl.textContent = '';\n\n    [projectionSnapshotDiv, globalKpiDiv, explainerAndJourneyDiv, chartContainer, emailGateDiv, finalCtaBox].forEach(section => {\n        if(section) section.classList.add('pp-active-gate');\n    });\n    planResultsVisible = true;\n    calculateAndDisplayPlan(currentBoostedMonthlyAdSpend);\n\n    const offset = 80;\n    const elementPosition = resultsDiv.getBoundingClientRect().top;\n    const offsetPosition = elementPosition + window.pageYOffset - offset;\n    window.scrollTo({ top: offsetPosition, behavior: 'smooth' });\n  });\n\n  \/\/ Ad Spend Boost Logic\n  adBoostButtons.forEach(button => {\n    button.addEventListener('click', () => {\n        const type = button.dataset.boostType;\n        const value = parseFloat(button.dataset.boostValue);\n        let newSpend = currentBoostedMonthlyAdSpend; \/\/ Use the numeric tracked value\n\n        if (type === 'fixed') {\n            newSpend += value;\n        } else if (type === 'percent') {\n            newSpend *= (1 + value);\n        }\n        currentBoostedMonthlyAdSpend = Math.max(0, Math.round(newSpend));\n        if(currentBoostedSpendEl) currentBoostedSpendEl.textContent = `Simulating with $${currentBoostedMonthlyAdSpend.toLocaleString()} ad spend.`;\n        calculateAndDisplayPlan(currentBoostedMonthlyAdSpend);\n    });\n  });\n\n  if(resetAdSpendBoostBtn) {\n    resetAdSpendBoostBtn.addEventListener('click', () => {\n        currentBoostedMonthlyAdSpend = originalMonthlyAdSpend;\n        if(currentBoostedSpendEl) currentBoostedSpendEl.textContent = '';\n        calculateAndDisplayPlan(currentBoostedMonthlyAdSpend);\n    });\n  }\n\n  \/\/ --- Calculation Engine & Display ---\n  function calculateAndDisplayPlan(currentAdSpendForCalc) {\n    if (!colorInfoRGB) assignColorsFromCSS(); \/\/ Ensure colors are loaded\n\n    const price = getRawNumericValue(priceInput.value);\n    const cogs = getRawNumericValue(cogsInput.value);\n    \/\/ currentAdSpendForCalc is already numeric from boost logic or parsed from spendInput\n\n    const ordersPerCustMonth1 = 1;\n\n    const grossProfitPerUnit = price - cogs;\n    const breakEvenCAC = grossProfitPerUnit * ordersPerCustMonth1;\n    const targetCAC = breakEvenCAC * 0.85;\n\n    let derivedTargetProfitMarginPercent = 0;\n    if (price > 0 && (price * ordersPerCustMonth1) > 0) {\n      derivedTargetProfitMarginPercent = (( (price * ordersPerCustMonth1) - cogs - targetCAC) \/ (price * ordersPerCustMonth1)) * 100;\n    }\n    const displayableDerivedTargetProfitMarginPercent = Math.max(0, derivedTargetProfitMarginPercent);\n\n    const profitFromFirstSale = (price * ordersPerCustMonth1) - cogs - targetCAC;\n    const effectiveProjectedCAC = targetCAC > 0 ? targetCAC : (breakEvenCAC > 0 ? breakEvenCAC : Math.max(1, price > 0 ? price \/ 2 : 1));\n\n    const percentOfCustomersRepeating = enableRepeatBehavior ? (parseFloat(repeatCustomerPercentInput.value) || 0) \/ 100 : 0;\n    const avgAdditionalOrdersByRepeater = enableRepeatBehavior ? (parseFloat(repeatOrdersPerRepeaterInput.value) || 0) : 0;\n    const effectiveMonthlyRepeatOrderRatePerNewCustomer = percentOfCustomersRepeating * avgAdditionalOrdersByRepeater;\n\n    let totalProjectedRevenue3Mo = 0;\n    let totalNewCustomers3Mo = 0;\n    const totalAdSpend3Mo = currentAdSpendForCalc * 3;\n\n    const calculateMonthlyMetricsInternal = (monthIndex, cumulativeNewCustomersPrevMonths) => {\n      const newCustomersThisMonth = currentAdSpendForCalc > 0 && effectiveProjectedCAC > 0 ? currentAdSpendForCalc \/ effectiveProjectedCAC : 0;\n\n      let repeatOrdersThisMonth = 0;\n      if (monthIndex > 0 && cumulativeNewCustomersPrevMonths > 0) {\n          repeatOrdersThisMonth = cumulativeNewCustomersPrevMonths * effectiveMonthlyRepeatOrderRatePerNewCustomer;\n      }\n\n      const revenueFromNewCustomers = newCustomersThisMonth * price * ordersPerCustMonth1;\n      const revenueFromRepeatOrders = repeatOrdersThisMonth * price;\n      const totalRevenue = revenueFromNewCustomers + revenueFromRepeatOrders;\n\n      const cogsForNewCustomers = newCustomersThisMonth * cogs * ordersPerCustMonth1;\n      const cogsForRepeatOrders = repeatOrdersThisMonth * cogs;\n      const totalCOGS = cogsForNewCustomers + cogsForRepeatOrders;\n\n      const totalCosts = currentAdSpendForCalc + totalCOGS;\n      const profit = totalRevenue - totalCosts;\n      return { newCustomersThisMonth, repeatOrdersThisMonth, totalRevenue, profit, adSpendThisMonth: currentAdSpendForCalc };\n    };\n\n    totalProjectedRevenue3Mo = 0;\n    totalNewCustomers3Mo = 0;\n\n    const monthMetrics = [];\n    let cumulativeNewCustomersSoFar = 0;\n    for (let i = 0; i < 3; i++) {\n        const currentMonthData = calculateMonthlyMetricsInternal(i, cumulativeNewCustomersSoFar);\n        monthMetrics.push(currentMonthData);\n        cumulativeNewCustomersSoFar += currentMonthData.newCustomersThisMonth;\n        totalNewCustomers3Mo += currentMonthData.newCustomersThisMonth;\n        totalProjectedRevenue3Mo += currentMonthData.totalRevenue;\n    }\n\n    const month1Metrics = monthMetrics[0];\n    const month2Metrics = monthMetrics[1];\n    const month3Metrics = monthMetrics[2];\n\n    const cumulativeProfitMonth3 = month1Metrics.profit + month2Metrics.profit + month3Metrics.profit;\n    const cumulativeProfitMonth2 = month1Metrics.profit + month2Metrics.profit;\n\n    const ltv3Month = totalNewCustomers3Mo > 0 ? totalProjectedRevenue3Mo \/ totalNewCustomers3Mo : 0;\n    const roas3Month = totalAdSpend3Mo > 0 ? totalProjectedRevenue3Mo \/ totalAdSpend3Mo : 0;\n\n    const formatLargeCurrency = (val) => `$${Math.round(val).toLocaleString()}`;\n    const formatCurrencyNoDecimal = (val) => `$${Math.round(val).toLocaleString()}`;\n\n    if (snapshotTotalProfitEl) snapshotTotalProfitEl.textContent = formatLargeCurrency(cumulativeProfitMonth3);\n    if (snapshotTotalRevenueEl) snapshotTotalRevenueEl.textContent = formatLargeCurrency(totalProjectedRevenue3Mo);\n    if (snapshotRoasEl) snapshotRoasEl.textContent = `${roas3Month.toFixed(2)}x`;\n    if (snapshotNewCustomersEl) snapshotNewCustomersEl.textContent = Math.round(totalNewCustomers3Mo).toLocaleString();\n    if (snapshotTotalAdSpendEl) snapshotTotalAdSpendEl.textContent = formatLargeCurrency(totalAdSpend3Mo);\n\n\n    if (dynamicExplainEl) {\n        dynamicExplainEl.innerHTML = `\n            <p>Paid ads are an ATM\u2014if you know the PIN.<\/p>\n            <p>Drop in <strong>${formatCurrencyNoDecimal(currentAdSpendForCalc)}<\/strong> every month. If a customer costs \u2264 <strong>${formatCurrencyNoDecimal(breakEvenCAC)}<\/strong>, your cash comes back the same day.<\/p>\n            <p>Snag them for <strong>${formatCurrencyNoDecimal(targetCAC)}<\/strong> or less and you keep <strong>${displayableDerivedTargetProfitMarginPercent.toFixed(0)}%<\/strong> profit on Day 1.<\/p>\n            <p>Now watch how those tiny wins compound over the next 90 days\u2026<\/p>\n        `;\n    }\n    if (snapshotSummaryEl) {\n        snapshotSummaryEl.textContent = `Scoreboard after 90 days: ${formatCurrencyNoDecimal(totalAdSpend3Mo)} in \u2192 ${formatCurrencyNoDecimal(totalProjectedRevenue3Mo)} out \u2192 ${formatCurrencyNoDecimal(cumulativeProfitMonth3)} kept. That\u2019s ${roas3Month.toFixed(1)}\u00d7 on every dollar you fed the machine.`;\n    }\n\n    if (kpiBreakEvenEl) kpiBreakEvenEl.textContent = formatLargeCurrency(breakEvenCAC);\n    if (kpiTargetEl) kpiTargetEl.textContent = formatLargeCurrency(targetCAC);\n    if (kpiMarginSaleEl) kpiMarginSaleEl.textContent = formatLargeCurrency(profitFromFirstSale);\n    if (kpiLtvEl) kpiLtvEl.textContent = formatLargeCurrency(ltv3Month);\n\n    if (kpiBreakEvenDescriptionEl) kpiBreakEvenDescriptionEl.textContent = \"Spend this \u2192 don\u2019t lose a penny on Day 1.\";\n    if (kpiTargetDescriptionEl) kpiTargetDescriptionEl.innerHTML = `Aim for this cost (15% below break-even) \u2192 pocket ~<strong>${displayableDerivedTargetProfitMarginPercent.toFixed(0)}%<\/strong> profit upfront.`;\n    if (kpiMarginSaleDescriptionEl) kpiMarginSaleDescriptionEl.textContent = \"Cash collected before repeat buys.\";\n    if (kpiLtvDescriptionEl) kpiLtvDescriptionEl.textContent = \"What one buyer\u2019s worth after 90 days.\";\n\n    const breakEvenBoxEl = $('breakEvenBox');\n    const targetBoxEl = $('targetBox');\n    if (breakEvenBoxEl) {\n        breakEvenBoxEl.classList.toggle('good', effectiveProjectedCAC <= breakEvenCAC && breakEvenCAC > 0);\n        breakEvenBoxEl.classList.toggle('danger', effectiveProjectedCAC > breakEvenCAC || breakEvenCAC <= 0);\n    }\n    if (targetBoxEl) {\n        targetBoxEl.classList.toggle('good', effectiveProjectedCAC <= targetCAC && targetCAC > 0);\n        targetBoxEl.classList.toggle('danger', effectiveProjectedCAC > targetCAC || targetCAC <=0);\n    }\n\n    const formatNumDisplay = (num) => Math.max(0, Math.round(num)).toLocaleString();\n    const formatCurrencyDisplay = (num) => `$${Math.round(num).toLocaleString()}`;\n\n    if(m1SpendLabelEl) m1SpendLabelEl.textContent = formatCurrencyDisplay(month1Metrics.adSpendThisMonth);\n    if(m1NewCustEl) m1NewCustEl.textContent    = formatNumDisplay(month1Metrics.newCustomersThisMonth);\n    if(m1RevenueEl) m1RevenueEl.textContent    = formatCurrencyDisplay(month1Metrics.totalRevenue);\n    if(m1ProfitEl) m1ProfitEl.textContent     = formatCurrencyDisplay(month1Metrics.profit);\n    if(m1ExplainEl) m1ExplainEl.textContent = \"We shotgun test hooks, angles, audiences. Break-even is victory\u2014because the data now pays for itself.\";\n\n    if(m2SpendLabelEl) m2SpendLabelEl.textContent = formatCurrencyDisplay(month2Metrics.adSpendThisMonth);\n    if(m2NewCustEl) m2NewCustEl.textContent    = formatNumDisplay(month2Metrics.newCustomersThisMonth);\n    if(m2ReordersEl) m2ReordersEl.textContent   = formatNumDisplay(month2Metrics.repeatOrdersThisMonth);\n    if(m2RevenueEl) m2RevenueEl.textContent    = formatCurrencyDisplay(month2Metrics.totalRevenue);\n    if(m2ProfitEl) m2ProfitEl.textContent     = formatCurrencyDisplay(month2Metrics.profit);\n    if(m2ExplainEl) m2ExplainEl.textContent = \"We kill losers, double-down on champs. CAC drops, first re-orders hit. Revenue starts outrunning spend.\";\n\n    if(m3SpendLabelEl) m3SpendLabelEl.textContent = formatCurrencyDisplay(month3Metrics.adSpendThisMonth);\n    if(m3NewCustEl) m3NewCustEl.textContent    = formatNumDisplay(month3Metrics.newCustomersThisMonth);\n    if(m3ReordersEl) m3ReordersEl.textContent   = formatNumDisplay(month3Metrics.repeatOrdersThisMonth);\n    if(m3RevenueEl) m3RevenueEl.textContent    = formatCurrencyDisplay(month3Metrics.totalRevenue);\n    if(m3ProfitEl) m3ProfitEl.textContent     = formatCurrencyDisplay(month3Metrics.profit);\n    if(m3ExplainEl) m3ExplainEl.textContent = \"Ads are dialed, repeat buyers stack. Every extra dollar spits out multiples. Time to scale the faucet wide-open.\";\n\n    if (chartInstance) chartInstance.destroy();\n    chartInstance = new Chart(chartCanvas, {\n      type: 'bar',\n      data: {\n        labels: ['Month 1', 'Month 2', 'Month 3'],\n        datasets: [\n          {\n            label: 'Monthly Ad Spend',\n            data: [month1Metrics.adSpendThisMonth, month2Metrics.adSpendThisMonth, month3Metrics.adSpendThisMonth].map(v => Math.max(0, v)),\n            backgroundColor: `rgba(${colorSpendRGB}, 0.5)`,\n            borderColor: `rgb(${colorSpendRGB})`,\n            borderWidth: 1,\n            order: 3\n          },\n          {\n            label: 'Monthly Revenue',\n            data: [month1Metrics.totalRevenue, month2Metrics.totalRevenue, month3Metrics.totalRevenue].map(v => Math.max(0, v)),\n            backgroundColor: `rgba(${colorInfoRGB}, 0.65)`,\n            borderColor: `rgb(${colorInfoRGB})`,\n            borderWidth: 1, order: 2\n          },\n          {\n            label: 'Monthly Net Profit',\n            data: [month1Metrics.profit, month2Metrics.profit, month3Metrics.profit].map(v => Math.max(0, v)),\n            backgroundColor: `rgba(${colorProfitLightRGB}, 0.75)`, \/\/ Use lighter profit for bars\n            borderColor: `rgb(${colorProfitLightRGB})`,\n            borderWidth: 1, order: 1\n          },\n          {\n            type: 'line', label: 'Cumulative Net Profit',\n            data: [month1Metrics.profit, cumulativeProfitMonth2, cumulativeProfitMonth3].map(v => Math.round(v)),\n            borderColor: `rgb(${colorProfitRGB})`, \/\/ Darker\/solid profit for line\n            borderWidth: 3, fill: false, tension: 0.3,\n            pointRadius: 5, pointBackgroundColor: `rgb(${colorProfitRGB})`, order: 0,\n            pointBorderColor: '#fff', pointBorderWidth: 2, pointHoverRadius: 7\n          }\n        ]\n      },\n      options: {\n        responsive: true, maintainAspectRatio: false,\n        plugins: {\n          legend: { display: true, position: 'bottom', labels: { usePointStyle: true, pointStyle: 'rectRounded', font: { family: 'Inter, sans-serif', size: 13 }, color: `rgb(${colorTextRGB})`, boxWidth: 12, padding: 25 }},\n          tooltip: {\n            backgroundColor: `rgb(${colorDarkRGB})`, titleFont: { family: 'Inter, sans-serif', size: 14, weight: 'bold' }, bodyFont: { family: 'Inter, sans-serif', size: 13 },\n            callbacks: { label: context => `${context.dataset.label || ''}: $${Math.round(context.parsed.y).toLocaleString()}` },\n            padding: 10, boxPadding: 4, cornerRadius: 6\n          }\n        },\n        scales: {\n          x: { stacked: false, grid: { display: false }, ticks: { font: { family: 'Inter, sans-serif', size: 12 }, color: `rgb(${colorTextRGB})` }},\n          y: { stacked: false, beginAtZero: true, grid: { color: `rgba(${colorDarkRGB}, 0.08)` }, ticks: { callback: value => '$' + value.toLocaleString(), font: { family: 'Inter, sans-serif', size: 12 }, color: `rgb(${colorTextRGB})`, padding: 8 }}\n        },\n        animation: { duration: 750, easing: 'easeInOutQuart' }\n      }\n    });\n  }\n\n  \/\/ --- KPI Modal Logic ---\n  const kpiCardElements = document.querySelectorAll('.pp-kpi-card[data-kpi-modal-target]');\n  const modalOverlayElements = document.querySelectorAll('.pp-modal-overlay');\n\n  kpiCardElements.forEach(card => {\n    card.addEventListener('click', () => {\n      const modalId = card.dataset.kpiModalTarget;\n      if (!modalId) return;\n\n      const targetModalOverlay = $(modalId + 'Overlay');\n      if (targetModalOverlay) {\n        targetModalOverlay.style.display = 'flex';\n        document.body.style.overflow = 'hidden';\n      }\n    });\n  });\n\n  modalOverlayElements.forEach(overlay => {\n    overlay.addEventListener('click', (event) => {\n      if (event.target === overlay) {\n        overlay.style.display = 'none';\n        document.body.style.overflow = '';\n      }\n    });\n\n    const closeButton = overlay.querySelector('.pp-modal-close');\n    if (closeButton) {\n      closeButton.addEventListener('click', () => {\n        overlay.style.display = 'none';\n        document.body.style.overflow = '';\n      });\n    }\n  });\n\n  \/\/ --- Initial setup ---\n  if(repeatInputsGroup) repeatInputsGroup.style.display = enableRepeatBehavior ? 'grid' : 'none';\n  if(advancedInputsBody) advancedInputsBody.classList.remove('pp-collapsible-body-visible');\n  const initialArrow = advancedInputsHeader ? advancedInputsHeader.querySelector('.pp-collapsible-arrow') : null;\n  if(initialArrow) initialArrow.textContent = '\u25bc';\n\n  resultsDiv.classList.remove('pp-column-active');\n  if (initialPlaceholderDiv) initialPlaceholderDiv.style.display = 'flex';\n\n  [projectionSnapshotDiv, globalKpiDiv, explainerAndJourneyDiv, chartContainer, emailGateDiv, finalCtaBox].forEach(section => {\n    if(section) section.classList.remove('pp-active-gate');\n  });\n  storeInitialValues(); \/\/ Store initial values (after potential formatting)\n  displayGrossMarginHint();\n  checkEssentialInputsForStickyCTA();\n\n})();\n<\/script>\n\n<!-- ========== FIREBASE EMAIL-SAVE ========== -->\n<script type=\"module\">\n\/\/ Firebase script\nimport { initializeApp, getApps, getApp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.12.0\/firebase-app.js\";\nimport { getFirestore, collection, addDoc, serverTimestamp } from \"https:\/\/www.gstatic.com\/firebasejs\/10.12.0\/firebase-firestore.js\";\n\nlet firebaseApp, db, colRef;\n\n\/\/ Helper to get raw numeric value from formatted string\nfunction getFbRawNumericValue(valueString) {\n    if (typeof valueString !== 'string') valueString = String(valueString);\n    return parseFloat(valueString.replace(\/\\$|,\/g, '')) || 0;\n}\n\ntry {\n  if (!getApps().length) {\n    const firebaseConfig = {\n      apiKey: \"YOUR_API_KEY\", \/\/ Replace with your actual Firebase config\n      authDomain: \"YOUR_AUTH_DOMAIN\", \/\/ Replace\n      projectId: \"YOUR_PROJECT_ID\" \/\/ Replace\n    };\n    if (firebaseConfig.apiKey && firebaseConfig.apiKey !== \"YOUR_API_KEY\" && firebaseConfig.projectId && firebaseConfig.projectId !== \"YOUR_PROJECT_ID\") {\n        firebaseApp = initializeApp(firebaseConfig);\n        db = getFirestore(firebaseApp);\n        colRef = collection(db, \"ROIPlans_V5_WorldClass\"); \/\/ Consider changing collection name if schema changed slightly\n    } else {\n        console.warn(\"Firebase configuration appears to be placeholder values. Email saving will be disabled.\");\n    }\n  } else {\n    firebaseApp = getApp();\n    db = getFirestore(firebaseApp);\n    colRef = collection(db, \"ROIPlans_V5_WorldClass\");\n  }\n} catch (error) {\n  console.warn(\"Firebase initialization failed. Email saving will be disabled.\", error);\n}\n\nconst ppEmailForm = document.getElementById('ppEmailForm');\nconst userNameInput = document.getElementById('userName');\nconst userEmailInput = document.getElementById('userEmail');\nconst emailStatusEl = document.getElementById('emailStatus');\n\nif (ppEmailForm) {\n  ppEmailForm.addEventListener('submit', async (e) => {\n    e.preventDefault();\n    const name = userNameInput.value.trim();\n    const email = userEmailInput.value.trim();\n\n    if (!name || !email) {\n      emailStatusEl.textContent = \"Please enter your name & email.\";\n      emailStatusEl.style.color = 'var(--pg-color-error)';\n      return;\n    }\n\n    if (!db || !colRef) {\n      emailStatusEl.textContent = \"\u274c Email service is currently unavailable. Please try again later.\";\n      emailStatusEl.style.color = 'var(--pg-color-error)';\n      console.warn(\"Attempted to send email but Firebase is not configured\/initialized or config is placeholder.\");\n      return;\n    }\n\n    emailStatusEl.textContent = \"Sending\u2026\";\n    emailStatusEl.style.color = 'inherit';\n\n    try {\n      await addDoc(colRef, {\n        name: name,\n        email: email,\n        createdAt: serverTimestamp(),\n        planInputs: {\n            offering: document.querySelector('.pp-selection-button[data-offer].selected')?.dataset.offer,\n            market: document.querySelector('.pp-selection-button[data-market].selected')?.dataset.market,\n            price: getFbRawNumericValue(document.getElementById('priceInput').value),\n            cogs: getFbRawNumericValue(document.getElementById('cogsInput').value),\n            ordersPerCustMonth1: 1, \/\/ This is a fixed assumption in calculator\n            monthlyAdSpend: getFbRawNumericValue(document.getElementById('spendInput').value),\n            enableRepeatBehavior: document.querySelector('.pp-toggle-button[data-repeat-behavior].selected')?.dataset.repeatBehavior === 'yes',\n            repeatCustomerPercent: parseFloat(document.getElementById('repeatCustomerPercentInput').value) || 0,\n            avgAdditionalOrdersByRepeater: parseFloat(document.getElementById('repeatOrdersPerRepeaterInput').value) || 0\n        },\n        planSummary: { \/\/ Store raw numbers if possible, or ensure consistency\n            totalProfit3Mo: document.getElementById('snapshotTotalProfit')?.textContent, \/\/ These are already formatted strings like \"$12,345\"\n            totalRevenue3Mo: document.getElementById('snapshotTotalRevenue')?.textContent,\n            roas3Mo: document.getElementById('snapshotRoas')?.textContent, \/\/ e.g., \"2.50x\"\n            newCustomers3Mo: document.getElementById('snapshotNewCustomers')?.textContent, \/\/ e.g., \"123\"\n            ltv3Mo: document.getElementById('kpiLtv')?.textContent,\n        }\n      });\n      emailStatusEl.textContent = \"\u2705 Success! Your Profit Plan is on its way.\";\n      emailStatusEl.style.color = 'var(--pg-color-profit)';\n      ppEmailForm.reset();\n       \/\/ Also reset formatted input fields to their defaults if desired, or leave as is.\n       \/\/ For now, form.reset() will clear them.\n    } catch (err) {\n      console.error(\"Firebase save error:\", err);\n      emailStatusEl.textContent = \"\u274c Oops! Error sending plan. Please try again.\";\n      emailStatusEl.style.color = 'var(--pg-color-error)';\n    }\n  });\n} else {\n    console.warn(\"Email form (ppEmailForm) not found. Email functionality will be disabled.\");\n}\n<\/script>\n\n\n<style>\n    :root {\n      --pg-color-dark:         #04264d;\n      --pg-color-dark-rgb:     4, 38, 77;\n      --pg-color-accent:       #ffc857;\n      --pg-color-accent-rgb:   255, 200, 87;\n      --pg-color-background:   #f0f5fe;\n      --pg-color-text:         #1e3a5b;\n      --pg-color-text-rgb:     30, 58, 91;\n      --pg-color-info:         #0ea5e9;\n      --pg-color-info-rgb:     14, 165, 233;\n      --pg-color-info-soft-bg: rgba(var(--pg-color-info-rgb), 0.07);\n      --pg-color-light-gray:   #e2e8f0;\n      --pg-color-medium-gray:  #cbd5e1;\n      --pg-color-border:       rgba(var(--pg-color-dark-rgb), 0.08);\n      --pg-color-shadow-light: rgba(var(--pg-color-dark-rgb), 0.05);\n      --pg-color-profit:       #16a34a;\n      --pg-color-profit-rgb:   22, 163, 74;\n      --pg-color-profit-light: #4ade80; \/* Lighter green for monthly profit bars *\/\n      --pg-color-profit-light-rgb: 74, 222, 128;\n      --pg-color-error:        #ef4444;\n      --pg-color-spend-snapshot: #e6a100; \/* Distinct gold\/yellow for spend display on snapshot *\/\n      --pg-font-primary:       'Inter', sans-serif;\n      --pg-border-radius-xl:   18px;\n      --pg-border-radius-lg:   14px;\n      --pg-border-radius-md:   10px;\n      --pg-border-radius-sm:   8px;\n    }\n\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n    .profit-playground {\n      font-family: var(--pg-font-primary); color: var(--pg-color-text);\n      background-color: var(--pg-color-background); max-width: 1320px;\n      margin: 40px auto; border-radius: var(--pg-border-radius-xl);\n      box-shadow: 0 10px 30px rgba(var(--pg-color-dark-rgb), 0.07), 0 4px 12px var(--pg-color-shadow-light);\n      display: flex;\n      flex-direction: column;\n      overflow: hidden;\n    }\n\n    \/* Branded Tool Header *\/\n    .pp-tool-header {\n      background: var(--pg-color-dark); color: #fff;\n      padding: 16px 24px; display: flex;\n      justify-content: center; border-bottom: 4px solid var(--pg-color-accent);\n      width: 100%;\n    }\n    .pp-tool-header-content {\n        display: flex; align-items: center;\n        width: 100%; max-width: 1280px;\n    }\n    .pp-header-logo-link {\n        display: inline-flex;\n        align-items: center;\n        border: none;\n        text-decoration: none;\n    }\n    .pp-tool-logo {\n      height: 30px; width: 30px;\n      margin-right: 12px; flex-shrink: 0;\n    }\n    .pp-tool-titles {\n        display: flex; flex-direction: column;\n        align-items: flex-start; margin-right: auto;\n    }\n    .pp-tool-main-title {\n      font-size: 1.3rem; font-weight: 600;\n      line-height: 1.2; margin: 0 0 2px 0;\n      color: #fff;\n    }\n    .pp-tool-subtitle {\n      font-size: 0.75rem; opacity: 0.75;\n      line-height: 1.3; margin: 0;\n      color: #dde8f5;\n    }\n    .pp-powered-by-logo {\n      display: block;\n      height: auto;\n      width: 120px;\n      max-height: 36px;\n      margin-left: 16px;\n      align-self: center;\n      opacity: 0.9;\n      transition: opacity 0.2s ease;\n      object-fit: contain;\n    }\n    .pp-powered-by-logo:hover {\n      opacity: 1;\n    }\n\n    \/* Columns Wrapper *\/\n    .pp-columns-wrapper { display: flex; flex-grow: 1; }\n    .pp-column { padding: 32px 28px; box-sizing: border-box; }\n    .pp-column-left {\n      flex-basis: 40%; max-width: 520px;\n      min-width: 360px; flex-shrink: 0;\n      background-color: #fff;\n      position: relative; \n      padding-bottom: 100px; \n    }\n    .pp-column-right {\n      flex-grow: 1; min-width: 0;\n    }\n    .pp-column-right.pp-column-active {\n      opacity: 1; visibility: visible; transform: translateY(0);\n      transition: opacity 0.5s ease-out 0.1s, visibility 0s linear 0s, transform 0.5s ease-out 0.1s;\n    }\n\n    \/* Initial Placeholder Styles *\/\n    .pp-initial-placeholder-desktop {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      height: 100%;\n      text-align: center;\n      padding: 40px;\n      opacity: 0;\n      animation: pp-placeholder-fade-in 0.8s 0.2s ease-out forwards, pp-subtle-float 6s ease-in-out infinite;\n    }\n    .pp-initial-placeholder-desktop img {\n      max-width: 80%;\n      max-height: 350px;\n      margin-bottom: 20px;\n      opacity: 0.85;\n      border-radius: var(--pg-border-radius-lg);\n    }\n    .pp-initial-placeholder-desktop p {\n      font-size: 1.2rem;\n      font-weight: 500;\n      color: var(--pg-color-text);\n      opacity: 0.7;\n    }\n    .pp-column-right.pp-column-active .pp-initial-placeholder-desktop {\n      display: none !important;\n    }\n    @keyframes pp-placeholder-fade-in { to { opacity: 1; } }\n    @keyframes pp-subtle-float {\n      0%, 100% { transform: translateY(0); }\n      50% { transform: translateY(-8px); }\n    }\n\n    \/* Steps *\/\n    .pp-step { display: none; opacity: 0; animation: pp-step-fade-in 0.5s forwards; }\n    .pp-step.pp-step-active { display: block; }\n    @keyframes pp-step-fade-in { to { opacity: 1; } }\n\n    \/* Step Headers *\/\n    .pp-header {\n      margin-bottom: 24px; padding-bottom: 16px;\n      border-bottom: 1px solid var(--pg-color-border);\n    }\n    .pp-step-title {\n      font-size: 1.9rem; letter-spacing: -0.3px;\n      color: var(--pg-color-dark); line-height: 1.25;\n      margin-bottom: 10px; position: relative;\n    }\n    #ppStep1 .pp-step-title::after {\n      content: ''; position: absolute;\n      left: 0; bottom: -2px;\n      width: 50px; height: 3px;\n      background-color: var(--pg-color-accent);\n      border-radius: 2px;\n    }\n    .pp-step-description {\n      font-size: 1rem; line-height: 1.6;\n      color: var(--pg-color-text); opacity: 0.9;\n      font-weight: 500; max-width: 100%;\n    }\n    .pp-step-description strong { font-weight: 600; color: var(--pg-color-dark); }\n\n    \/* Input Sections & Titles *\/\n    .pp-input-section { margin-bottom: 32px; }\n    .pp-section-title {\n      font-size: 1.1rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.4px;\n      color: rgba(var(--pg-color-dark-rgb),0.65); border-bottom: 1px dashed rgba(var(--pg-color-dark-rgb), 0.15);\n      padding-bottom: 8px; margin-bottom: 18px;\n    }\n\n    \/* Selection Grids (Offer\/Market) *\/\n    .pp-selection-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 16px; }\n    .pp-selection-button {\n      display: flex; flex-direction: column; align-items: center; justify-content: center;\n      gap: 8px; padding: 16px 12px; background-color: #fff;\n      border: 2px solid var(--pg-color-light-gray); border-radius: var(--pg-border-radius-md);\n      font-size: 0.95rem; font-weight: 600; color: var(--pg-color-text);\n      text-align: center; cursor: pointer; transition: all 0.2s ease-out; min-height: 130px;\n      opacity: 1;\n    }\n    .pp-selection-button img { width: 40px; height: 40px; margin-bottom: 4px; }\n\n    .pp-selection-button:hover {\n      border-color: var(--pg-color-accent);\n      transform: translateY(-3px);\n      box-shadow: 0 4px 12px rgba(var(--pg-color-accent-rgb), 0.2);\n      background-color: rgba(var(--pg-color-accent-rgb), 0.02);\n      color: var(--pg-color-dark);\n      opacity: 1;\n    }\n    .pp-selection-button.selected {\n      border-color: var(--pg-color-accent);\n      box-shadow: 0 0 0 3px rgba(var(--pg-color-accent-rgb), 0.4);\n      background-color: rgba(var(--pg-color-accent-rgb), 0.05);\n      color: var(--pg-color-dark) !important;\n      opacity: 1;\n    }\n\n    \/* Primary Buttons *\/\n    .pp-button-primary {\n      display: inline-block; padding: 16px 36px; border-radius: 50px;\n      background: var(--pg-color-accent); color: var(--pg-color-dark) !important;\n      font-family: var(--pg-font-primary); font-size: 1.05rem; font-weight: 700;\n      text-decoration: none; letter-spacing: 0.3px; border: none; cursor: pointer;\n      transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.25s ease-out;\n      box-shadow: 0 5px 15px rgba(var(--pg-color-accent-rgb), 0.25);\n    }\n    .pp-button-primary:hover:not(:disabled) { transform: translateY(-5px) scale(1.03); box-shadow: 0 10px 25px rgba(var(--pg-color-accent-rgb), 0.35), 0 6px 12px rgba(var(--pg-color-dark-rgb), 0.1); }\n    .pp-button-primary:disabled { opacity: 0.5; cursor: not-allowed; box-shadow: none; transform: none; background: var(--pg-color-medium-gray); color: rgba(var(--pg-color-dark-rgb), 0.5) !important; }\n\n    .pp-cta-row {\n        margin-top: 36px;\n        text-align: center;\n        position: static; \n        padding: 0;\n        background-color: transparent; \n        box-shadow: none; \n        border-top: none;\n        z-index: auto;\n    }\n    .pp-cta-sticky {\n        background-color: var(--pg-color-background); \n        padding: 16px 16px; \n        padding-bottom: calc(16px + env(safe-area-inset-bottom)); \n        box-shadow: 0 -2px 10px rgba(var(--pg-color-dark-rgb), 0.08); \n        border-top: 1px solid var(--pg-color-border); \n        margin-top: 36px; \n    }\n\n\n    \/* Cards for Input Groups & Results *\/\n    .pp-cards-container { display: grid; gap: 28px; }\n    .pp-card,\n    .pp-snapshot-card,\n    .pp-chart-wrapper,\n    .pp-final-cta-wrapper,\n    .pp-explainer-text,\n    .pp-kpi-card,\n    .pp-month-card {\n      box-shadow: 0 3px 8px var(--pg-color-shadow-light) !important;\n    }\n    .pp-card { background-color: #fff; border: 1px solid var(--pg-color-border); border-radius: var(--pg-border-radius-lg); }\n    .pp-card-header {\n        padding: 16px 20px;\n        background-color: rgba(var(--pg-color-dark-rgb), 0.025);\n        border-bottom: 1px solid var(--pg-color-border);\n        border-radius: var(--pg-border-radius-lg) var(--pg-border-radius-lg) 0 0;\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n    }\n    .pp-card-title { font-size: 1.1rem; font-weight: 600; color: var(--pg-color-dark); margin: 0; }\n    .pp-card-body { padding: 28px 20px; display: grid; gap: 24px; }\n\n    .pp-collapsible-header { cursor: pointer; }\n    .pp-collapsible-arrow { font-size: 0.8em; transition: transform 0.3s ease; }\n    .pp-collapsible-body {\n        display: grid;\n        gap: 24px;\n        max-height: 0;\n        overflow: hidden;\n        padding-top: 0 !important;\n        padding-bottom: 0 !important;\n        opacity: 0;\n        transition: max-height 0.4s ease-out, padding-top 0.4s ease-out, padding-bottom 0.4s ease-out, opacity 0.3s ease-out 0.1s;\n        border-top: 1px solid var(--pg-color-border);\n        margin-top: -1px;\n    }\n    .pp-collapsible-body-visible {\n        max-height: 1000px;\n        padding-top: 28px !important;\n        padding-bottom: 28px !important;\n        opacity: 1;\n        transition: max-height 0.5s ease-in, padding-top 0.5s ease-in, padding-bottom 0.5s ease-in, opacity 0.3s ease-in;\n    }\n\n    \/* Form Fields & Labels *\/\n    .pp-field { display: flex; flex-direction: column; gap: 6px; }\n    .pp-label { font-size: 0.9rem; font-weight: 500; color: var(--pg-color-text); line-height: 1.45; }\n\n    \/* Text Input (used in email form) *\/\n    .pp-text-input {\n        width: 100%; padding: 14px 16px; font-family: var(--pg-font-primary);\n        font-size: 0.95rem; color: var(--pg-color-text); background-color: #fff;\n        border: 1px solid var(--pg-color-medium-gray); border-radius: var(--pg-border-radius-sm);\n        transition: border-color 0.2s, box-shadow 0.2s;\n    }\n    .pp-text-input:focus { outline: none; border-color: var(--pg-color-accent); box-shadow: 0 0 0 3px rgba(var(--pg-color-accent-rgb), 0.3); }\n\n    \/* Numeric Input UX with Dollar Prefix and Comma Formatting *\/\n    .pp-numeric-input-field {\n        width: 100%; padding: 12px;\n        font-size: 1rem; border: 1px solid var(--pg-color-medium-gray);\n        border-radius: var(--pg-border-radius-sm); text-align: left;\n        color: var(--pg-color-dark); transition: border-color 0.2s, box-shadow 0.2s;\n    }\n    .pp-numeric-input-field:focus {\n        outline: none; border-color: var(--pg-color-accent);\n        box-shadow: 0 0 0 3px rgba(var(--pg-color-accent-rgb), 0.3);\n    }\n    \/* Dollar Prefix for specific input fields *\/\n    .pp-field.pp-field-has-dollar-prefix {\n        position: relative; \/* For ::before positioning *\/\n    }\n    .pp-field.pp-field-has-dollar-prefix::before {\n        content: \"$\";\n        position: absolute;\n        left: 13px; \/* Aligns with input's left padding *\/\n        \/* Vertically align with input text. (label height + gap + input top padding + half font height for centering) *\/\n        top: calc( (0.9rem * 1.45) \/* label height *\/ + 6px \/* gap *\/ + 12px \/* input top padding *\/ + (1rem * 0.15) \/* small adjustment for baseline *\/ );\n        font-size: 1rem; \/* Match input font size *\/\n        line-height: 1; \/* Crucial for precise vertical alignment of the symbol *\/\n        color: var(--pg-color-text);\n        opacity: 0.6;\n        pointer-events: none; \/* So it doesn't interfere with input click *\/\n        z-index: 1; \/* Above input border, below text if text overlaps *\/\n    }\n    .pp-field.pp-field-has-dollar-prefix .pp-numeric-input-field {\n        padding-left: 28px !important; \/* Increased padding to make space for the \"$\" *\/\n    }\n\n\n    .pp-gross-margin-hint {\n        font-size: 0.85rem;\n        color: var(--pg-color-text);\n        opacity: 0.8;\n        padding-top: 4px;\n        text-align: left;\n        font-style: italic;\n        visibility: hidden;\n        height: 1.5em;\n    }\n\n    .pp-ad-budget-chips {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 8px;\n        margin-top: 10px;\n    }\n    .pp-suggestion-chip {\n        font-family: var(--pg-font-primary);\n        font-size: 0.85rem;\n        font-weight: 600;\n        padding: 8px 12px;\n        border: 1px solid var(--pg-color-medium-gray);\n        border-radius: var(--pg-border-radius-sm);\n        background-color: #fff !important;\n        color: var(--pg-color-text) !important;\n        cursor: pointer;\n        transition: all 0.2s ease-out;\n        flex-grow: 1;\n        text-align: center;\n        opacity: 1 !important;\n    }\n    .pp-suggestion-chip:hover {\n        border-color: var(--pg-color-accent) !important;\n        background-color: rgba(var(--pg-color-accent-rgb), 0.05) !important;\n        color: var(--pg-color-dark) !important;\n    }\n    .pp-suggestion-chip.selected {\n        border-color: var(--pg-color-accent) !important;\n        background-color: rgba(var(--pg-color-accent-rgb), 0.15) !important;\n        color: var(--pg-color-dark) !important;\n        box-shadow: 0 0 0 2px rgba(var(--pg-color-accent-rgb), 0.3);\n    }\n    .pp-suggestion-chips-grid {\n        display: flex;\n        flex-wrap: wrap;\n        gap: 8px;\n        margin-top: 10px;\n    }\n\n    \/* Toggle Buttons & Repeat Inputs Group *\/\n    .pp-toggle-buttons { display: flex; gap: 12px; }\n    .pp-toggle-button {\n      flex: 1; padding: 12px 14px; font-size: 0.95rem; font-weight: 600;\n      background-color: #fff; border: 2px solid var(--pg-color-light-gray);\n      border-radius: var(--pg-border-radius-sm); color: var(--pg-color-text);\n      cursor: pointer; transition: all 0.2s ease-out; opacity: 1;\n    }\n    .pp-toggle-button:hover {\n      border-color: var(--pg-color-accent);\n      background-color: rgba(var(--pg-color-accent-rgb), 0.02);\n      color: var(--pg-color-dark); opacity: 1;\n    }\n    .pp-toggle-button.selected {\n      border-color: var(--pg-color-accent);\n      background-color: rgba(var(--pg-color-accent-rgb), 0.1);\n      color: var(--pg-color-dark) !important;\n      box-shadow: 0 0 0 2px rgba(var(--pg-color-accent-rgb), 0.3);\n      opacity: 1;\n    }\n    .pp-repeat-inputs-group { display: grid; gap: 24px; }\n\n    \/* --- Right Column: Result Sections --- *\/\n    .pp-result-section { margin-bottom: 28px; opacity: 0; visibility: hidden; }\n    .pp-column-right:not(.pp-column-active) .pp-result-section { display: none; }\n    .pp-column-right.pp-column-active .pp-result-section { display: block; }\n    .pp-column-right.pp-column-active #ppProjectionSnapshot.pp-result-section { display: block; }\n\n    .pp-section-title-results {\n        font-size: 1.5rem; font-weight: 700; color: var(--pg-color-dark);\n        margin-bottom: 20px; padding-bottom: 12px;\n        border-bottom: 1px solid var(--pg-color-border); text-align: left;\n    }\n    .pp-snapshot-card {\n        background: linear-gradient(145deg, var(--pg-color-dark) 0%, #0b305f 100%);\n        color: #fff; padding: 28px 24px; border-radius: var(--pg-border-radius-lg);\n    }\n    .pp-snapshot-title { font-size: 1.65rem; font-weight: 700; margin-bottom: 24px; text-align: center; color: var(--pg-color-accent); letter-spacing: 0.5px; }\n    .pp-snapshot-grid {\n        display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n        gap: 20px 16px; margin-bottom: 20px;\n    }\n     @media (min-width: 769px) and (max-width: 991px) { \/* For 5 items, 3 then 2 looks good on tablet *\/\n        .pp-snapshot-grid { grid-template-columns: repeat(3, 1fr); }\n        .pp-snapshot-item-adspend { grid-column: span 1 \/ span 1; } \/* Let it flow naturally *\/\n    }\n    @media (min-width: 992px) { \/* Desktop: 3 items, then 2 items below if needed, or keep flexible *\/\n        .pp-snapshot-grid { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }\n         \/* If strictly 5 items, this could be repeat(5,1fr) or make the 5th span cols *\/\n    }\n\n    .pp-snapshot-item { text-align: center; padding: 8px 0; }\n    .pp-snapshot-label { display: block; font-size: 0.9rem; opacity: 0.85; margin-bottom: 4px; line-height: 1.3; }\n    .pp-snapshot-value { display: block; font-size: 2.25rem; font-weight: 700; line-height: 1.15; }\n    .pp-snapshot-value.profit { color: var(--pg-color-profit); }\n    .pp-snapshot-value.revenue { color: var(--pg-color-info); }\n    .pp-snapshot-value.roas { color: var(--pg-color-accent); }\n    .pp-snapshot-value.customers { color: #f0f5fe; }\n    .pp-snapshot-value.spend { color: var(--pg-color-spend-snapshot); }\n    .pp-snapshot-summary { font-size: 0.95rem; text-align: center; opacity: 0.9; line-height: 1.6; margin-top: 16px; max-width: 580px; margin-left: auto; margin-right: auto;}\n\n    \/* Ad Boost Section *\/\n    .pp-ad-boost-section {\n        margin-top: 28px;\n        padding-top: 24px;\n        border-top: 1px solid rgba(255,255,255,0.2);\n        text-align: center;\n    }\n    .pp-ad-boost-title {\n        font-size: 1rem; \/* Slightly larger *\/\n        font-weight: 600;\n        opacity: 0.9;\n        margin-bottom: 18px;\n    }\n    .pp-ad-boost-buttons {\n        display: flex;\n        justify-content: center;\n        gap: 10px;\n        flex-wrap: wrap;\n    }\n    .pp-boost-button {\n        background-color: rgba(var(--pg-color-accent-rgb), 0.2);\n        color: var(--pg-color-accent);\n        border: 1px solid var(--pg-color-accent);\n        padding: 10px 18px; \/* Slightly larger *\/\n        border-radius: var(--pg-border-radius-sm);\n        font-size: 0.9rem; \/* Slightly larger *\/\n        font-weight: 600;\n        cursor: pointer;\n        transition: all 0.2s ease;\n    }\n    .pp-boost-button:hover {\n        background-color: rgba(var(--pg-color-accent-rgb), 0.35);\n        transform: translateY(-2px);\n    }\n    #resetAdSpendBoost {\n        background-color: rgba(255,255,255,0.1);\n        color: #fff;\n        border-color: rgba(255,255,255,0.3);\n    }\n    #resetAdSpendBoost:hover {\n        background-color: rgba(255,255,255,0.2);\n    }\n    .pp-current-boosted-spend {\n        font-size: 0.85rem;\n        opacity: 0.75;\n        margin-top: 14px;\n        min-height: 1.2em;\n        font-style: italic;\n    }\n\n    .pp-kpi-grid { display: grid; gap: 20px; }\n    .pp-kpi-grid-four { grid-template-columns: repeat(2, 1fr); }\n\n    .pp-kpi-card {\n      background-color: #fff;\n      padding: 14px 56px 24px 24px;\n      border-radius: var(--pg-border-radius-md);\n      border: 1px solid var(--pg-color-border);\n      text-align: left;\n      display: flex;\n      flex-direction: column;\n      justify-content: flex-start;\n      transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n      position: relative;\n      cursor: pointer;\n    }\n    .pp-kpi-card:hover {\n        transform: translateY(-4px) scale(1.02);\n        box-shadow: 0 6px 20px rgba(var(--pg-color-dark-rgb), 0.1) !important;\n    }\n    .pp-kpi-card:hover .pp-kpi-info-hover-icon {\n        opacity: 1;\n        transform: scale(1.1);\n    }\n\n    .pp-kpi-icon {\n      position: absolute;\n      top: 14px;\n      right: 16px;\n      width: 32px; height: 32px;\n      margin-bottom: 0;\n      opacity: 0.4;\n    }\n    .pp-kpi-info-hover-icon {\n        position: absolute;\n        bottom: 10px;\n        right: 10px;\n        font-size: 14px;\n        font-style: normal;\n        font-weight: bold;\n        color: var(--pg-color-info);\n        background-color: rgba(var(--pg-color-info-rgb), 0.1);\n        border-radius: 50%;\n        width: 22px;\n        height: 22px;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        line-height: 1;\n        opacity: 0;\n        transition: opacity 0.2s ease, transform 0.2s ease;\n        pointer-events: none;\n    }\n\n    .pp-kpi-title {\n      font-size: 0.9rem; font-weight: 600; color: var(--pg-color-dark); margin-bottom: 6px;\n      padding-left: 0;\n    }\n    .pp-kpi-value {\n      font-size: 2rem;\n      font-weight: 700; color: var(--pg-color-dark); margin-bottom: 6px; line-height: 1.1;\n      padding-left: 0;\n    }\n    .pp-kpi-value-profit { color: var(--pg-color-profit); }\n    .pp-kpi-description {\n      font-size: 0.8rem; color: var(--pg-color-text); line-height: 1.45; margin-top: auto;\n      padding-left: 0;\n    }\n    .pp-kpi-description strong { font-weight: 600; }\n\n    .pp-explainer-text {\n      font-size: 1.05rem;\n      line-height: 1.8;\n      background-color: #fff;\n      border: 1px solid var(--pg-color-border); border-left: 5px solid var(--pg-color-info);\n      padding: 24px; border-radius: var(--pg-border-radius-md);\n      max-width: 780px;\n      margin-left: auto;\n      margin-right: auto;\n    }\n    .pp-explainer-text p {\n      margin-bottom: 12px;\n    }\n    .pp-explainer-text p:last-child {\n      margin-bottom: 0;\n    }\n    .pp-explainer-text strong {\n      font-weight: 600; color: var(--pg-color-dark);\n    }\n    .pp-explainer-text .pp-value-text-dark { color: var(--pg-color-dark); }\n\n    .pp-journey-wrapper { display: flex; flex-direction: column; gap: 20px; margin-top: 30px;}\n    .pp-month-card {\n      background-color: #fff; border-radius: var(--pg-border-radius-md);\n      border: 1px solid var(--pg-color-border);\n    }\n    .pp-month-header { font-size: 1.05rem; padding: 14px 18px; font-weight: 700; background-color: rgba(var(--pg-color-dark-rgb), 0.025); border-bottom: 1px solid var(--pg-color-border); border-radius: var(--pg-border-radius-md) var(--pg-border-radius-md) 0 0;}\n\n    @media (min-width: 769px) {\n      .pp-month-body {\n        padding: 20px 18px; display: grid;\n        grid-template-columns: 0.9fr 1.1fr;\n        gap: 16px 20px; align-items: stretch;\n      }\n      .pp-month-explanation-area {\n          background-color: var(--pg-color-info-soft-bg);\n          padding: 18px;\n          border-radius: var(--pg-border-radius-sm);\n          border: 1px solid rgba(var(--pg-color-info-rgb), 0.35);\n          border-left: 4px solid var(--pg-color-info);\n          min-height: 100%;\n          display: flex;\n          flex-direction: column;\n          justify-content: center;\n      }\n      .pp-month-explain {\n          font-size: 0.95rem;\n          line-height: 1.6;\n          color: var(--pg-color-text); opacity: 0.9;\n      }\n    }\n    .pp-month-stats-container { display: grid; gap: 10px; }\n    .pp-stat-line { display: flex; justify-content: space-between; align-items: center; font-size: 0.9rem; padding: 4px 0;}\n    .pp-stat-line span { color: var(--pg-color-text); opacity: 0.8; }\n    .pp-stat-line b { font-weight: 600; color: var(--pg-color-dark); }\n    .pp-month-divider { height: 1px; background-color: rgba(var(--pg-color-dark-rgb), 0.06); margin: 6px 0; }\n    .pp-value-revenue { color: var(--pg-color-info) !important; }\n    .pp-value-revenue-light { color: var(--pg-color-info) !important; opacity: 0.85; font-weight: 500; }\n    .pp-value-profit { color: var(--pg-color-profit) !important; }\n    .pp-flow-arrow { width: 24px; height: 24px; margin: 10px auto; opacity: 0.5; }\n\n    @media (max-width: 768px) {\n      .pp-month-body {\n        grid-template-columns: 1fr;\n        gap: 16px;\n        padding: 20px 18px;\n        align-items: start;\n      }\n      .pp-month-explanation-area {\n          background-color: var(--pg-color-info-soft-bg);\n          padding: 14px;\n          border-radius: var(--pg-border-radius-sm);\n          border: 1px solid rgba(var(--pg-color-info-rgb), 0.2);\n          border-left: none;\n          min-height: auto;\n          justify-content: flex-start;\n          margin-top: 10px; \/* Add some space from stats *\/\n      }\n      .pp-month-explain {\n          font-size: 0.88rem;\n          line-height: 1.55;\n          color: var(--pg-color-text); opacity: 0.9;\n      }\n    }\n\n    .pp-chart-wrapper {\n        background-color: #fff; padding: 28px 24px; border-radius: var(--pg-border-radius-lg);\n        border: 1px solid var(--pg-color-border);\n    }\n    #ppChart { max-height: 380px; width: 100% !important; }\n\n    .pp-email-gate-wrapper .pp-card-title { font-size: 1.2rem; }\n    .pp-email-gate-wrapper .pp-card-body p { font-size: 0.95rem; line-height: 1.6; margin-bottom: 18px;}\n    .pp-email-form { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 10px; }\n    .pp-email-form .pp-text-input { flex: 1 1 180px; margin-bottom: 4px; }\n    .pp-email-button { flex-shrink: 0; }\n    .pp-email-status { font-size: 0.9rem; font-weight: 500; min-height: 1.2em; margin-top: 10px; }\n\n    .pp-final-cta-wrapper {\n      padding: 32px 28px;\n      border-radius: var(--pg-border-radius-lg);\n      background: #fff; border: 1px solid var(--pg-color-border);\n    }\n    .pp-final-cta-headline { font-size: 1.4rem; color: var(--pg-color-dark); margin-bottom: 14px; font-weight: 700; }\n    .pp-final-cta-wrapper p { font-size: 1.05rem; margin-bottom: 18px; line-height: 1.65; }\n    .pp-final-button { font-size: 1.1rem; padding: 16px 36px; }\n\n    \/* Result Section Animations *\/\n    .pp-result-section.pp-active-gate {\n        visibility: visible; opacity: 0;\n    }\n    #ppProjectionSnapshot.pp-active-gate{ animation: pp-result-fade-in 0.6s 0.1s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; }\n    #ppGlobalKPI.pp-active-gate        { animation: pp-result-fade-in 0.6s 0.25s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; }\n    #ppExplainerAndJourney.pp-active-gate{ animation: pp-result-fade-in 0.6s 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; }\n    #ppChartContainer.pp-active-gate   { animation: pp-result-fade-in 0.6s 0.55s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; }\n    #ppEmailBox.pp-active-gate         { animation: pp-result-fade-in 0.6s 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; }\n    #ppFinalCtaBox.pp-active-gate      { animation: pp-result-fade-in 0.6s 0.85s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; }\n\n    @keyframes pp-result-fade-in {\n      from { opacity: 0; transform: translateY(25px); }\n      to   { opacity: 1; transform: translateY(0); }\n    }\n\n    \/* KPI Modal Styles *\/\n    .pp-modal-overlay {\n        display: none;\n        position: fixed;\n        top: 0; left: 0; width: 100%; height: 100%;\n        background-color: rgba(0, 0, 0, 0.65);\n        z-index: 2000;\n        justify-content: center;\n        align-items: center;\n        padding: 20px;\n        backdrop-filter: blur(4px);\n    }\n    .pp-modal-content {\n        background-color: #fff;\n        padding: 28px 32px;\n        border-radius: var(--pg-border-radius-lg);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.25);\n        max-width: 600px;\n        width: 100%;\n        position: relative;\n        animation: pp-modal-appear 0.3s ease-out;\n        max-height: 80vh;\n        overflow-y: auto;\n    }\n    .pp-modal-content h3 {\n        font-size: 1.4rem;\n        color: var(--pg-color-dark);\n        margin-top: 0;\n        margin-bottom: 20px;\n    }\n    .pp-modal-content p {\n        font-size: 0.95rem;\n        line-height: 1.7;\n        color: var(--pg-color-text);\n        margin-bottom: 16px;\n    }\n    .pp-modal-content p strong { font-weight: 600; color: var(--pg-color-dark); }\n    .pp-modal-content p em { font-style: italic; }\n    .pp-modal-content p:last-child {\n        margin-bottom: 0;\n    }\n    .pp-modal-formula {\n        background-color: var(--pg-color-background);\n        border: 1px solid var(--pg-color-border);\n        border-left: 3px solid var(--pg-color-info);\n        padding: 12px 16px;\n        margin: 16px 0;\n        border-radius: var(--pg-border-radius-sm);\n        font-family: 'Courier New', Courier, monospace;\n        font-size: 0.9rem;\n        color: var(--pg-color-dark);\n        white-space: pre-wrap;\n    }\n    .pp-modal-close {\n        position: absolute;\n        top: 12px;\n        right: 16px;\n        font-size: 2rem;\n        font-weight: bold;\n        color: var(--pg-color-medium-gray);\n        background: none;\n        border: none;\n        cursor: pointer;\n        line-height: 1;\n        padding: 0;\n    }\n    .pp-modal-close:hover {\n        color: var(--pg-color-dark);\n    }\n    @keyframes pp-modal-appear {\n        from { opacity: 0; transform: translateY(-20px) scale(0.95); }\n        to { opacity: 1; transform: translateY(0) scale(1); }\n    }\n\n    \/* Responsive Adjustments *\/\n    @media (max-width: 991px) {\n      .profit-playground { flex-direction: column; margin: 20px auto; }\n      .pp-columns-wrapper { flex-direction: column; }\n      .pp-column-left, .pp-column-right {\n        width: 100%; max-width: 100%; min-width: 100%; flex-basis: auto; border-right: none;\n      }\n      .pp-column-left { border-bottom: 1px solid var(--pg-color-border); padding-bottom: 100px; } \n      .pp-column-right { padding-top: 28px; }\n      .pp-step-title { font-size: 1.8rem; } .pp-step-description { font-size: 1rem; }\n      \/* Snapshot grid for tablets already handled above (3-col) *\/\n      .pp-kpi-grid-four { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }\n      .pp-initial-placeholder-desktop { display: none !important; }\n    }\n\n    @media (max-width: 768px) {\n      .pp-selection-grid { grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); }\n      .pp-snapshot-grid { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 16px; } \/* More flexible for mobile *\/\n      .pp-snapshot-value { font-size: 2rem; }\n      .pp-kpi-grid-four { grid-template-columns: 1fr; }\n      .pp-kpi-card {\n        padding: 14px 20px;\n        padding-right: 50px;\n      }\n      .pp-kpi-icon {\n        top: 14px;\n        right: 16px;\n      }\n      .pp-kpi-info-hover-icon {\n        bottom: 8px;\n        right: 8px;\n        width: 20px;\n        height: 20px;\n        font-size: 12px;\n      }\n      .pp-kpi-title, .pp-kpi-value, .pp-kpi-description {\n          padding-left: 0;\n      }\n      .pp-email-form .pp-text-input {\n          flex-basis: 100%; \/* Stack name\/email inputs *\/\n      }\n      .pp-email-button {\n          width: 100%;\n          margin-top: 8px;\n      }\n    }\n\n    @media (max-width: 600px) {\n      .pp-tool-header-content {\n        flex-wrap: nowrap !important; justify-content: flex-start !important;\n      }\n      .pp-tool-logo {\n        height: 26px; width: 26px; margin-right: 10px;\n      }\n      .pp-tool-titles {\n        flex-direction: column; align-items: flex-start;\n        margin-right: auto;\n      }\n      .pp-tool-main-title  { font-size: 1.05rem; line-height: 1.2; }\n      .pp-tool-subtitle    { font-size: 0.7rem;  line-height: 1.2; color: #dde8f5; opacity: 0.85; }\n\n      .pp-powered-by-logo {\n        height: 16px; \/* Scaled down *\/\n        width: auto; \/* Maintain aspect ratio *\/\n        max-width: 90px; \/* Limit width *\/\n        margin-left: 10px;\n      }\n\n      .pp-explainer-text {\n        font-size: 1rem;\n        line-height: 1.9;\n        padding: 28px 20px;\n      }\n      .pp-explainer-text p {\n          margin-bottom: 10px;\n      }\n      .pp-explainer-text p:last-child {\n          margin-bottom: 0;\n      }\n\n      .pp-suggestion-chips-grid { \n          display: grid;\n          grid-template-columns: 1fr 1fr;\n          gap: 8px;\n      }\n      .pp-suggestion-chips-grid .pp-suggestion-chip {\n          flex-grow: 0;\n      }\n\n      .pp-column { padding: 24px 16px; }\n      .pp-step-title { font-size: 1.6rem; } .pp-step-description { font-size: 0.95rem; }\n      .pp-section-title { font-size: 1.05rem; }\n\n      .pp-button-primary { padding: 14px 28px; font-size: 1rem; }\n      .pp-snapshot-value { font-size: 1.8rem; }\n      .pp-kpi-value { font-size: 1.7rem; }\n      .pp-section-title-results { font-size: 1.4rem; }\n      .pp-chart-wrapper { padding: 20px 15px; }\n\n      .pp-ad-boost-buttons {\n        display: grid;\n        grid-template-columns: repeat(2, 1fr); \/* 2x2 grid for 4 buttons *\/\n        flex-wrap: nowrap;\n        justify-content: normal;\n      }\n      .pp-ad-boost-buttons .pp-boost-button {\n        width: 100%; \/* Make buttons fill grid cells *\/\n      }\n       .pp-snapshot-grid { grid-template-columns: 1fr; } \/* Stack snapshot items on small mobile *\/\n    }\n\n    @media (max-width: 380px) {\n      .pp-powered-by-logo {\n        height: 14px;\n        margin-left: 8px;\n      }\n      .pp-ad-boost-buttons {\n        grid-template-columns: 1fr; \/* Stack boost buttons if very narrow *\/\n      }\n    }\n    <\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-242be0e e-flex e-con-boxed e-con e-child\" data-id=\"242be0e\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-74872f7 elementor-widget elementor-widget-image\" data-id=\"74872f7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/bluegoosemarketing.com\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"698\" src=\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/BlueGoose-Marketing_PNG_Large-1024x894.png\" class=\"attachment-large size-large wp-image-9\" alt=\"Blue Goose Marketing, LLC\" srcset=\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/BlueGoose-Marketing_PNG_Large-1024x894.png 1024w, https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/BlueGoose-Marketing_PNG_Large-300x262.png 300w, https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/BlueGoose-Marketing_PNG_Large-768x671.png 768w, https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/BlueGoose-Marketing_PNG_Large-1536x1342.png 1536w, https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/04\/BlueGoose-Marketing_PNG_Large.png 2000w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Profit\u00a0Playground Interactive Calculator About Your Business Tell us a bit about what you offer and who you sell to. What do you offer? Product Service Both Who is your market? B2C \/ Consumer B2B \/ Business Next: Your Numbers \u2192 Enter Your Numbers Input your key figures to see your potential 3-month growth. Your Core [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":580,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-239","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Profit Playground Calculator | Blue Goose Marketing<\/title>\n<meta name=\"description\" content=\"Type in your price, cost, and ad budget. Profit Playground shows your possible sales, profit, and ROAS for the next 3 months. Fast and free.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Profit Playground | Free Calculator Tool\" \/>\n<meta property=\"og:description\" content=\"Type in your price, cost, and ad budget. Profit Playground shows your possible sales, profit, and ROAS for the next 3 months. Fast and free.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Blue Goose Marketing\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-26T20:39:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/\",\"url\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/\",\"name\":\"Profit Playground Calculator | Blue Goose Marketing\",\"isPartOf\":{\"@id\":\"https:\/\/bluegoosemarketing.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg\",\"datePublished\":\"2025-05-17T13:55:21+00:00\",\"dateModified\":\"2025-05-26T20:39:32+00:00\",\"description\":\"Type in your price, cost, and ad budget. Profit Playground shows your possible sales, profit, and ROAS for the next 3 months. Fast and free.\",\"breadcrumb\":{\"@id\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#primaryimage\",\"url\":\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg\",\"contentUrl\":\"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bluegoosemarketing.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ROI Planner | Blue Goose Marketing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bluegoosemarketing.com\/#website\",\"url\":\"https:\/\/bluegoosemarketing.com\/\",\"name\":\"Blue Goose Marketing\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bluegoosemarketing.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Profit Playground Calculator | Blue Goose Marketing","description":"Type in your price, cost, and ad budget. Profit Playground shows your possible sales, profit, and ROAS for the next 3 months. Fast and free.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/","og_locale":"en_US","og_type":"article","og_title":"The Profit Playground | Free Calculator Tool","og_description":"Type in your price, cost, and ad budget. Profit Playground shows your possible sales, profit, and ROAS for the next 3 months. Fast and free.","og_url":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/","og_site_name":"Blue Goose Marketing","article_modified_time":"2025-05-26T20:39:32+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/","url":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/","name":"Profit Playground Calculator | Blue Goose Marketing","isPartOf":{"@id":"https:\/\/bluegoosemarketing.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#primaryimage"},"image":{"@id":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg","datePublished":"2025-05-17T13:55:21+00:00","dateModified":"2025-05-26T20:39:32+00:00","description":"Type in your price, cost, and ad budget. Profit Playground shows your possible sales, profit, and ROAS for the next 3 months. Fast and free.","breadcrumb":{"@id":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#primaryimage","url":"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg","contentUrl":"https:\/\/bluegoosemarketing.com\/wp-content\/uploads\/2025\/05\/Blue-Goose-Marketing_The-Profit-Playground_Cover-photo_v1.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/bluegoosemarketing.com\/index.php\/profit-playground-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bluegoosemarketing.com\/"},{"@type":"ListItem","position":2,"name":"ROI Planner | Blue Goose Marketing"}]},{"@type":"WebSite","@id":"https:\/\/bluegoosemarketing.com\/#website","url":"https:\/\/bluegoosemarketing.com\/","name":"Blue Goose Marketing","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bluegoosemarketing.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/pages\/239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/comments?post=239"}],"version-history":[{"count":301,"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/pages\/239\/revisions"}],"predecessor-version":[{"id":584,"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/pages\/239\/revisions\/584"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/media\/580"}],"wp:attachment":[{"href":"https:\/\/bluegoosemarketing.com\/index.php\/wp-json\/wp\/v2\/media?parent=239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}