(function() { //#region \0rolldown/runtime.js var __defProp = Object.defineProperty; var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res); var __exportAll = (all, no_symbols) => { let target = {}; for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" }); return target; }; //#endregion //#region src/calculator.js var AVG_TRAVEL_COST = 380; var AVG_DAILY_WAGE = 280; var ADMIN_HOURLY_RATE = 50; var EXTERNAL_TRAINER_COST = 1500; var DIGITALIZATION_RATE = .45; var TIME_EFFICIENCY_GAIN = .25; var ADMIN_AUTOMATION_RATE = .3; var MICROLEARNING_DAYS_GAINED = .3; var CONTENT_REPLACEMENT_RATES = { none: .15, collection: .3, kit: .35, both: .4 }; var LMS_BASE_INVESTMENT = 34950; var IMPLEMENTATION_COST_FACTOR = .15; function contentAnnualCost(employees, option) { const collection = (e) => e <= 250 ? 7490 : e * 29.5; const kit = (e) => e <= 250 ? 7490 : e * 31.65; switch (option) { case "none": return 0; case "collection": return collection(employees); case "kit": return kit(employees); case "both": return collection(employees) + kit(employees); } } function complianceAnnualCost(employees) { if (employees <= 250) return 4960; return employees * 16.26; } var COMPLIANCE_SAVINGS_PER_USER_YEAR = 90; var CONTENT_CREATOR_SAVED_HOURS = { none: 0, collection: 60, kit: 100, both: 140 }; var CONTENT_CREATOR_HOURLY_RATE = 65; var EXTERNAL_TRAININGS_PER_YEAR = .5; function calcTravelSavings(employees, trainingDays, presencePct, travelPct) { return employees * trainingDays * (presencePct / 100) * DIGITALIZATION_RATE * (travelPct / 100) * AVG_TRAVEL_COST; } function calcTrainerSavings(employees, content) { return employees * EXTERNAL_TRAININGS_PER_YEAR * EXTERNAL_TRAINER_COST * CONTENT_REPLACEMENT_RATES[content]; } function calcProductivityGain(employees, trainingDays, presencePct, content) { return employees * (trainingDays * (presencePct / 100) * DIGITALIZATION_RATE * TIME_EFFICIENCY_GAIN) * AVG_DAILY_WAGE + (content === "kit" || content === "both" ? employees * MICROLEARNING_DAYS_GAINED * AVG_DAILY_WAGE : 0); } function calcAdminSavings(adminHoursPerMonth) { return adminHoursPerMonth * 12 * ADMIN_AUTOMATION_RATE * ADMIN_HOURLY_RATE; } function calcContentSavings(content) { return CONTENT_CREATOR_SAVED_HOURS[content] * 12 * CONTENT_CREATOR_HOURLY_RATE; } function calcLMSCosts(employees, content) { const baseCost = LMS_BASE_INVESTMENT; const contentCost = contentAnnualCost(employees, content); const setupCost = baseCost * IMPLEMENTATION_COST_FACTOR; return baseCost + contentCost + setupCost; } /** * @param {{ employees: number, trainingDays: number, presenceShare: number, * travelShare: number, adminHours: number, * contentOption: "none"|"collection"|"kit"|"both", * complianceCollege?: boolean }} inputs * @returns {{ totalBenefits, totalCosts, netBenefit, roi, breakEvenMonths, * breakdown: { travelSavings, trainerSavings, productivityGain, adminSavings, contentSavings, complianceSavings }, * insights: { savedTravelDays, savedAdminHours, productiveDaysGained } }} */ function calculate(inputs) { const { employees, trainingDays, presenceShare, travelShare, adminHours, contentOption, complianceCollege } = inputs; const travelSavings = calcTravelSavings(employees, trainingDays, presenceShare, travelShare); const trainerSavings = calcTrainerSavings(employees, contentOption); const productivityGain = calcProductivityGain(employees, trainingDays, presenceShare, contentOption); const adminSavings = calcAdminSavings(adminHours); const contentSavings = calcContentSavings(contentOption); const complianceSavings = complianceCollege ? employees * COMPLIANCE_SAVINGS_PER_USER_YEAR : 0; const totalBenefits = travelSavings + trainerSavings + productivityGain + adminSavings + contentSavings + complianceSavings; const complianceCost = complianceCollege ? complianceAnnualCost(employees) : 0; const totalCosts = calcLMSCosts(employees, contentOption) + complianceCost; const netBenefit = totalBenefits - totalCosts; const roi = totalCosts > 0 ? Math.round(netBenefit / totalCosts * 1e3) / 10 : 0; const breakEvenMonths = totalBenefits > 0 ? Math.ceil(totalCosts / totalBenefits * 12) : 12; const savedTravelDays = Math.round(employees * trainingDays * (presenceShare / 100) * DIGITALIZATION_RATE * (travelShare / 100)); const savedAdminHours = Math.round(adminHours * 12 * ADMIN_AUTOMATION_RATE); const microBonus = contentOption === "kit" || contentOption === "both" ? employees * MICROLEARNING_DAYS_GAINED * AVG_DAILY_WAGE : 0; const productiveDaysGained = Math.round((productivityGain + microBonus) / AVG_DAILY_WAGE); return { totalBenefits: Math.round(totalBenefits), totalCosts: Math.round(totalCosts), netBenefit: Math.round(netBenefit), roi, breakEvenMonths, breakdown: { travelSavings: Math.round(travelSavings), trainerSavings: Math.round(trainerSavings), productivityGain: Math.round(productivityGain), adminSavings: Math.round(adminSavings), contentSavings: Math.round(contentSavings), complianceSavings: Math.round(complianceSavings) }, insights: { savedTravelDays, savedAdminHours, productiveDaysGained } }; } //#endregion //#region src/styles.js /** * CSS payloads for the runtime + print style injection. * * Kept in their own module so the Webflow split build (scripts/build-webflow.mjs) * can emit them as head