src/ApplicationBundle/Modules/HoneybeeWeb/Resources/views/pages/tools/roi-calculator.html.twig line 1

Open in your IDE?
  1. {% include '@Application/inc/central_header.html.twig' %}
  2. {% include '@HoneybeeWeb/inc/_web_design_system.html.twig' %}
  3. {# ─── ERP ROI CALCULATOR — interactive estimator ─── #}
  4. <style>
  5. .roi-hero { background: var(--n-cream); padding: 120px 0 40px; position: relative; overflow: hidden; }
  6. .roi-hero::before {
  7.     content:''; position:absolute; top:0; right:0; width:55%; height:100%;
  8.     background: radial-gradient(ellipse 80% 70% at 80% 40%, rgba(61,107,82,.08) 0%, transparent 65%),
  9.                 radial-gradient(ellipse 50% 60% at 95% 80%, rgba(192,125,42,.06) 0%, transparent 60%);
  10.     pointer-events:none;
  11. }
  12. .roi-hero-inner { max-width: 760px; position: relative; }
  13. .roi-hero h1 {
  14.     font-family:'Montserrat',sans-serif; font-size: clamp(34px,4.6vw,56px);
  15.     font-weight: 900; line-height: 1.06; letter-spacing: -.025em; color: var(--n-dark);
  16. }
  17. .roi-hero h1 em { font-style: normal; color: var(--n-amber); }
  18. .roi-hero p { font-size: 17px; line-height: 1.7; color: var(--n-muted); max-width: 600px; margin-top: 18px; }
  19. .roi-calc {
  20.     display: grid; grid-template-columns: 1fr 1fr; gap: 0;
  21.     background: var(--n-white); border: 1px solid var(--n-border-md);
  22.     border-radius: var(--n-radius-lg); overflow: hidden;
  23.     box-shadow: var(--n-shadow-md); margin-top: 8px;
  24. }
  25. .roi-inputs { padding: 40px; }
  26. .roi-field { margin-bottom: 18px; }
  27. .roi-field label { display: block; font-size: 13px; font-weight: 600; color: var(--n-dark); margin-bottom: 6px; }
  28. .roi-field input {
  29.     width: 100%; padding: 11px 14px; font-size: 15px; font-family: var(--n-font);
  30.     color: var(--n-dark); background: var(--n-cream);
  31.     border: 1px solid var(--n-border-md); border-radius: var(--n-radius-sm);
  32.     transition: border-color .15s, box-shadow .15s;
  33. }
  34. .roi-field input:focus { outline: none; border-color: var(--n-amber); box-shadow: 0 0 0 3px var(--n-amber-dim); }
  35. .roi-result { background: var(--n-dark); padding: 40px; color: #fff; display: flex; flex-direction: column; }
  36. .roi-result .n-label { color: var(--n-amber); }
  37. .roi-result .n-label::before { background: var(--n-amber); }
  38. .roi-bignum {
  39.     font-family:'Montserrat',sans-serif; font-size: clamp(34px,4.5vw,52px); font-weight: 900;
  40.     line-height: 1.05; letter-spacing: -.02em; color: var(--n-amber-lt); margin: 6px 0 4px;
  41. }
  42. .roi-bigsub { font-size: 13px; color: var(--n-muted-2); margin-bottom: 22px; }
  43. .roi-breakdown { list-style: none; border-top: 1px solid rgba(255,255,255,.12); padding-top: 18px; }
  44. .roi-breakdown li {
  45.     display: flex; justify-content: space-between; gap: 14px; align-items: baseline;
  46.     font-size: 13px; padding: 7px 0; border-bottom: 1px solid rgba(255,255,255,.07);
  47. }
  48. .roi-breakdown li span:first-child { color: rgba(255,255,255,.72); }
  49. .roi-breakdown li span:last-child { font-weight: 700; font-family: monospace; color: #fff; white-space: nowrap; }
  50. .roi-plan {
  51.     margin-top: 22px; padding: 16px 18px; border-radius: var(--n-radius-sm);
  52.     background: rgba(61,107,82,.18); border: 1px solid rgba(61,107,82,.4);
  53. }
  54. .roi-plan .lbl { font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: #8fc6a8; }
  55. .roi-plan .val { font-family:'Montserrat',sans-serif; font-size: 17px; font-weight: 800; color: #fff; margin-top: 3px; }
  56. .roi-disclaimer { font-size: 12px; color: var(--n-muted-2); margin-top: auto; padding-top: 18px; }
  57. .roi-cta { background: var(--n-cream-2); padding: 90px 0; text-align: center; border-top: 1px solid var(--n-border); }
  58. .roi-cta h2 { font-family:'Montserrat',sans-serif; font-size: clamp(26px,3.4vw,40px); font-weight: 900; color: var(--n-dark); margin-bottom: 14px; }
  59. .roi-cta h2 em { font-style: normal; color: var(--n-amber); }
  60. .roi-cta-actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 26px; }
  61. @media (max-width: 920px) { .roi-calc { grid-template-columns: 1fr; } }
  62. </style>
  63. {# ══ 1. HERO + CALCULATOR ════════════════════════════════════════════════════ #}
  64. <section class="roi-hero">
  65.     <div class="n-wrap">
  66.         <div class="roi-hero-inner">
  67.             <span class="n-label">Free estimator · Any business</span>
  68.             <h1>ERP <em>ROI</em> Calculator</h1>
  69.             <p>
  70.                 Estimate the time and money your team could reclaim once approvals, invoices and projects
  71.                 run on one connected system instead of scattered spreadsheets and email.
  72.             </p>
  73.         </div>
  74.     </div>
  75. </section>
  76. <section class="n-sec" style="padding-top:36px">
  77.     <div class="n-wrap">
  78.         <div class="roi-calc">
  79.             {# ── Inputs ── #}
  80.             <div class="roi-inputs">
  81.                 <span class="n-label" style="color:var(--n-amber)">Your numbers</span>
  82.                 <div class="roi-field">
  83.                     <label for="roi-emp">Employees</label>
  84.                     <input type="number" id="roi-emp" min="0" step="1" value="25">
  85.                 </div>
  86.                 <div class="roi-field">
  87.                     <label for="roi-hours">Admin hours wasted weekly (per employee)</label>
  88.                     <input type="number" id="roi-hours" min="0" step="0.5" value="5">
  89.                 </div>
  90.                 <div class="roi-field">
  91.                     <label for="roi-cost">Cost per employee (&euro;/month)</label>
  92.                     <input type="number" id="roi-cost" min="0" step="100" value="3200">
  93.                 </div>
  94.                 <div class="roi-field">
  95.                     <label for="roi-approvals">Approvals per month</label>
  96.                     <input type="number" id="roi-approvals" min="0" step="1" value="120">
  97.                 </div>
  98.                 <div class="roi-field">
  99.                     <label for="roi-invoices">Invoices per month</label>
  100.                     <input type="number" id="roi-invoices" min="0" step="1" value="200">
  101.                 </div>
  102.                 <div class="roi-field" style="margin-bottom:0">
  103.                     <label for="roi-projects">Number of projects</label>
  104.                     <input type="number" id="roi-projects" min="0" step="1" value="15">
  105.                 </div>
  106.             </div>
  107.             {# ── Result ── #}
  108.             <div class="roi-result">
  109.                 <span class="n-label">Estimated monthly savings</span>
  110.                 <div class="roi-bignum" id="roi-savings">&euro;0</div>
  111.                 <div class="roi-bigsub">Indicative recurring saving from reclaimed admin time.</div>
  112.                 <ul class="roi-breakdown">
  113.                     <li><span>Time saved per month</span><span id="roi-timesaved">0 hrs</span></li>
  114.                     <li><span>Effective hourly cost</span><span id="roi-hourly">&euro;0</span></li>
  115.                     <li><span>Annualised savings</span><span id="roi-annual">&euro;0</span></li>
  116.                 </ul>
  117.                 <div class="roi-plan">
  118.                     <div class="lbl">Suggested HoneyBee plan</div>
  119.                     <div class="val" id="roi-planname">Core Business ERP</div>
  120.                 </div>
  121.                 <div class="roi-disclaimer">Estimates only — not a quote. Based on a ~40% efficiency gain on current admin overhead.</div>
  122.             </div>
  123.         </div>
  124.     </div>
  125. </section>
  126. {# ══ 2. CLOSING CTA ══════════════════════════════════════════════════════════ #}
  127. <section class="roi-cta">
  128.     <div class="n-wrap-sm">
  129.         <h2>See the saving on <em>your</em> numbers.</h2>
  130.         <p class="n-body" style="max-width:54ch;margin:0 auto">
  131.             Book a demo and we'll walk through approvals, invoicing and project tracking on a HoneyBee
  132.             workspace shaped to your business. EUR pricing, EU data residency.
  133.         </p>
  134.         <div class="roi-cta-actions">
  135.             <a href="{{ url('honeybee_contact') }}" class="n-btn n-btn-primary">
  136.                 Book Demo <i class="fa-solid fa-arrow-right"></i>
  137.             </a>
  138.             <a href="{{ url('honeybee_pricing') }}" class="n-btn n-btn-outline">
  139.                 Explore pricing
  140.             </a>
  141.         </div>
  142.     </div>
  143. </section>
  144. <script>
  145. (function () {
  146.     var eur = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });
  147.     var ids = ['roi-emp','roi-hours','roi-cost','roi-approvals','roi-invoices','roi-projects'];
  148.     var EFFICIENCY = 0.40;   // share of wasted admin time HoneyBee realistically recovers
  149.     var WEEKS_PER_MONTH = 4.3;
  150.     var HOURS_PER_MONTH = 160;
  151.     function num(id) {
  152.         var v = parseFloat(document.getElementById(id).value);
  153.         return (isNaN(v) || v < 0) ? 0 : v;
  154.     }
  155.     function recalc() {
  156.         var employees = num('roi-emp');
  157.         var hoursWk   = num('roi-hours');
  158.         var costMo    = num('roi-cost');
  159.         var projects  = num('roi-projects');
  160.         var hourlyCost   = costMo / HOURS_PER_MONTH;                       // €/hour per employee
  161.         var wastedMonth  = employees * hoursWk * WEEKS_PER_MONTH;          // total wasted admin hrs/month
  162.         var timeSaved    = wastedMonth * EFFICIENCY;                       // hrs reclaimed/month
  163.         var savings      = timeSaved * hourlyCost;                         // €/month saved
  164.         var annual       = savings * 12;
  165.         document.getElementById('roi-timesaved').textContent = Math.round(timeSaved).toLocaleString('de-DE') + ' hrs';
  166.         document.getElementById('roi-hourly').textContent    = eur.format(Math.round(hourlyCost));
  167.         document.getElementById('roi-savings').textContent   = eur.format(Math.round(savings));
  168.         document.getElementById('roi-annual').textContent    = eur.format(Math.round(annual));
  169.         // Suggested HoneyBee plan
  170.         var plan = 'Core Business ERP';
  171.         if (projects >= 10 || employees >= 60) {
  172.             plan = 'Project ERP';
  173.         } else if (employees >= 25) {
  174.             plan = 'Business ERP Plus';
  175.         }
  176.         document.getElementById('roi-planname').textContent = plan;
  177.     }
  178.     ids.forEach(function (id) {
  179.         var el = document.getElementById(id);
  180.         el.addEventListener('input', recalc);
  181.         el.addEventListener('change', recalc);
  182.     });
  183.     recalc();
  184. })();
  185. </script>
  186. {% include '@HoneybeeWeb/footer/central_footer.html.twig' %}