{"id":35,"date":"2026-02-26T12:23:00","date_gmt":"2026-02-26T12:23:00","guid":{"rendered":"https:\/\/oualator.com\/measure\/?p=35"},"modified":"2026-02-27T02:20:57","modified_gmt":"2026-02-27T02:20:57","slug":"48-96-schedule-pay-calculator","status":"publish","type":"post","link":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/","title":{"rendered":"48\/96 Schedule Pay Calculator"},"content":{"rendered":"\n<div class=\"bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n  <div class=\"flex flex-col gap-3\">\n\n    <div class=\"text-gray-600 leading-relaxed\">\n      The <span class=\"font-semibold text-gray-900\">48\/96 Schedule Pay Calculator<\/span> (two consecutive 24-hour shifts on duty, then four days off) is quickly becoming a preferred model across departments in states like California, Texas, Arizona, and Colorado. It improves time off\u2014but it can make paycheck math confusing.\n    <\/div>\n\n    <div class=\"bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-100 rounded-xl p-4 sm:p-5\">\n      <div class=\"text-gray-800 font-semibold mb-1\">Why pay calculations feel \u201cdifferent\u201d on 48\/96<\/div>\n      <div class=\"text-gray-700 leading-relaxed\">\n        Firefighters often average a <span class=\"font-semibold\">56-hour work week<\/span>, and overtime is commonly governed by the\n        <span class=\"font-semibold\">FLSA 7(k) exemption<\/span> using a defined work period (often 28 days)\u2014so it\u2019s not simply hourly rate \u00d7 40 \u00d7 4.\n      <\/div>\n    <\/div>\n\n    <!-- Calculator Description Section -->\n    <div class=\"bg-gray-50 border border-gray-200 rounded-xl p-5 sm:p-6\">\n      <h2 class=\"text-gray-900 font-semibold text-lg mb-2\">\n        48\/96 Schedule Pay Calculator \u2014 Built for Public Safety Professionals\n      <\/h2>\n\n      <div class=\"text-gray-700 leading-relaxed mb-4\">\n        This <span class=\"font-semibold\">48\/96 Schedule Pay Calculator<\/span> is specifically designed for U.S.-based firefighters, paramedics, and emergency personnel working 48\/96 rotations \u2014 a shift pattern where you work 48 consecutive hours followed by 96 hours off. Because these schedules create non-standard weekly hours, irregular overtime cycles, and complex compensation structures, generic payroll estimators often fail to calculate earnings accurately.\n      <\/div>\n\n      <div class=\"text-gray-800 font-medium mb-2\">With this calculator, you can:<\/div>\n\n      <ul class=\"space-y-2 text-gray-700 leading-relaxed\">\n        <li>\u2705 Calculate gross and net pay based precisely on your real shift pattern.<\/li>\n        <li>\u2705 Apply the correct 28-day work cycle and 212-hour overtime threshold for FLSA-compliant calculations under federal law.<\/li>\n        <li>\u2705 Include specialty pays such as paramedic pay, engineer pay, HazMat, USAR, or other certifications.<\/li>\n        <li>\u2705 Factor in holiday pay, shift trades, and leave taken \u2014 all of which significantly impact total earnings.<\/li>\n        <li>\u2705 View a detailed pay breakdown by category (base, overtime, specialty, bonuses).<\/li>\n        <li>\u2705 Project monthly, quarterly, or annual income for budgeting, financial planning, loan applications, or department comparisons.<\/li>\n        <li>\u2705 Determine your true effective hourly rate, including every form of compensation \u2014 not just base salary.<\/li>\n      <\/ul>\n\n      <div class=\"mt-4 text-gray-700 leading-relaxed\">\n        This tool removes the mystery from your paycheck. Whether you&#8217;re new to the department, negotiating a contract raise, or tracking how trades, holidays, and bonuses affect your bottom line, this calculator delivers complete transparency tailored to your job and schedule.\n      <\/div>\n\n      <div class=\"mt-3 text-sm text-gray-500\">\n        Looking for other analytical tools? You can also explore tools like the <a href=\"https:\/\/oualator.com\/measure\/f-test-p-value-calculator\/\" class=\"text-blue-600 hover:underline\">F-Test P-Value Calculator<\/a>.\n      <\/div>\n    <\/div>\n\n    <!-- Jump links -->\n    <div class=\"flex flex-wrap gap-2 pt-2\">\n      <a href=\"#why-switch\" class=\"px-3 py-1.5 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200\">Why departments switch<\/a>\n      <a href=\"#pros-cons\" class=\"px-3 py-1.5 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200\">Pros &#038; cons<\/a>\n      <a href=\"#flsa\" class=\"px-3 py-1.5 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200\">FLSA 7(k) explained<\/a>\n      <a href=\"#comparison\" class=\"px-3 py-1.5 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200\">48\/96 vs 24\/48<\/a>\n      <a href=\"#incentives\" class=\"px-3 py-1.5 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200\">Specialty pay<\/a>\n      <a href=\"#faq\" class=\"px-3 py-1.5 rounded-full text-sm bg-gray-100 text-gray-700 hover:bg-gray-200\">FAQ<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/tailwindcss@2.2.19\/dist\/tailwind.min.css\" rel=\"stylesheet\">\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@3.9.1\/dist\/chart.min.js\"><\/script>\n    <style>\n        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            background-color: #f9fafb;\n            color: #374151;\n        }\n        .calculator-container {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n        .input-group {\n            margin-bottom: 15px;\n        }\n        .input-label {\n            display: block;\n            margin-bottom: 5px;\n            font-weight: 600;\n        }\n        .result-section {\n            background-color: #f3f4f6;\n            border-radius: 8px;\n            padding: 20px;\n            margin-top: 20px;\n        }\n        .result-row {\n            display: flex;\n            justify-content: space-between;\n            padding: 8px 0;\n            border-bottom: 1px solid #e5e7eb;\n        }\n        .result-row:last-child {\n            border-bottom: none;\n        }\n        .result-label {\n            font-weight: 500;\n        }\n        .result-value {\n            font-weight: 700;\n        }\n        .chart-container {\n            width: 100%;\n            max-width: 600px;\n            margin: 20px auto;\n        }\n        .tooltip {\n            position: relative;\n            display: inline-block;\n            cursor: help;\n        }\n        .tooltip .tooltiptext {\n            visibility: hidden;\n            width: 250px;\n            background-color: #374151;\n            color: white;\n            text-align: center;\n            border-radius: 6px;\n            padding: 10px;\n            position: absolute;\n            z-index: 1;\n            bottom: 125%;\n            left: 50%;\n            transform: translateX(-50%);\n            opacity: 0;\n            transition: opacity 0.3s;\n        }\n        .tooltip:hover .tooltiptext {\n            visibility: visible;\n            opacity: 1;\n        }\n        .nav-tab {\n            cursor: pointer;\n            padding: 10px 20px;\n            border-radius: 8px 8px 0 0;\n            background-color: #e5e7eb;\n        }\n        .nav-tab.active {\n            background-color: white;\n            font-weight: bold;\n        }\n        .tab-content {\n            display: none;\n            padding: 20px;\n            background-color: white;\n            border-radius: 0 8px 8px 8px;\n            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n        }\n        .tab-content.active {\n            display: block;\n        }\n        @media print {\n            body {\n                background-color: white !important;\n                color: black !important;\n            }\n            .calculator-container {\n                max-width: 100% !important;\n                padding: 0 !important;\n            }\n            .no-print {\n                display: none !important;\n            }\n            .print-break-inside-avoid {\n                break-inside: avoid;\n            }\n        }\n    <\/style>\n\n    <div class=\"calculator-container\">\n        <header class=\"text-center mb-8\">\n            <h2 class=\"text-3xl font-bold text-blue-800 mb-2\">Firefighter 48\/96 Schedule Pay Calculator<\/h2>\n            <p class=\"text-lg text-gray-600\">Find out your gross pay including base pay, overtime, holiday pay, specialty pays, and FLSA adjustments.<\/p>\n        <\/header>\n\n        <div class=\"nav-tabs mb-4 flex\">\n            <div class=\"nav-tab active\" data-tab=\"calculator\">Calculator<\/div>\n            <div class=\"nav-tab\" data-tab=\"instructions\">Instructions<\/div>\n            <div class=\"nav-tab\" data-tab=\"about\">About<\/div>\n        <\/div>\n\n        <div id=\"calculator\" class=\"tab-content active\">\n            <form id=\"payCalculatorForm\" class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n                <div class=\"bg-white p-6 rounded-lg shadow-md\">\n                    <h2 class=\"text-xl font-bold mb-4 text-blue-700\">Basic Information<\/h2>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"hourlyRate\">\n                            Hourly Base Pay Rate ($)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Your standard hourly wage before overtime or bonuses. Example: $21.50<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"hourlyRate\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.01\" min=\"0\" placeholder=\"21.50\" required>\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"otRate\">\n                            Overtime Rate Multiplier\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Default is 1.5x for hours over 40\/week under FLSA. Some departments may use 1.75x or 2.0x.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"otRate\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.25\" min=\"1\" value=\"1.5\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"weeklyHours\">\n                            Scheduled Weekly Hours\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Defaults to 56 hours\/week typical for 48\/96 shift; override if different.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"weeklyHours\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.5\" min=\"0\" value=\"56\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"payPeriod\">\n                            Pay Period\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Choose how often you&#8217;re paid for more accurate estimates.<\/span>\n                            <\/span>\n                        <\/label>\n                        <select id=\"payPeriod\" class=\"w-full p-2 border border-gray-300 rounded\">\n                            <option value=\"weekly\">Weekly<\/option>\n                            <option value=\"biweekly\" selected>Bi-weekly<\/option>\n                            <option value=\"monthly\">Monthly<\/option>\n                        <\/select>\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"payPeriodCount\">\n                            Number of Pay Periods\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">For calculating annual or custom length pay. Default is 26 for bi-weekly.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"payPeriodCount\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"1\" value=\"26\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"flsaPeriod\">\n                            FLSA Period Length (days)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Usually 28 days; needed for accurate overtime calculation.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"flsaPeriod\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"1\" value=\"28\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"flsaThreshold\">\n                            FLSA Threshold Hours\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Usually 212 hours per 28-day cycle for firefighters.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"flsaThreshold\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"1\" value=\"212\">\n                    <\/div>\n                <\/div>\n                \n                <div class=\"bg-white p-6 rounded-lg shadow-md\">\n                    <h2 class=\"text-xl font-bold mb-4 text-blue-700\">Additional Pay<\/h2>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"specialtyPay\">\n                            Monthly Specialty Pay ($)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Examples: Paramedic bonus, HazMat, Engineer, Urban Search &#038; Rescue, etc.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"specialtyPay\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.01\" min=\"0\" placeholder=\"250.00\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"holidaysWorked\">\n                            Number of Holidays Worked (per year)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">How many holidays do you work in a year?<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"holidaysWorked\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"0\" placeholder=\"10\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"holidayRate\">\n                            Holiday Pay Multiplier\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">How much extra do you get paid for working holidays? (e.g., 1.5 for time-and-a-half)<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"holidayRate\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.5\" min=\"1\" value=\"1.5\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"hoursPerHoliday\">\n                            Hours Per Holiday\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">How many hours do you work on a typical holiday?<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"hoursPerHoliday\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"0\" value=\"24\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"annualBonus\">\n                            Annual Bonuses ($)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Retention bonuses, fitness incentives, longevity bonuses, etc.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"annualBonus\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.01\" min=\"0\" placeholder=\"1000.00\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"taxRate\">\n                            Estimated Tax Rate (%)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Rough percent (e.g., 20\u201330%) to calculate take-home pay.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"taxRate\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"0\" max=\"100\" placeholder=\"25\">\n                    <\/div>\n                <\/div>\n                \n                <div class=\"bg-white p-6 rounded-lg shadow-md\">\n                    <h2 class=\"text-xl font-bold mb-4 text-blue-700\">Advanced Options<\/h2>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"shiftTrades\">\n                            Shift Trade Adjustment (hours)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Add (+) or remove (-) hours if you frequently trade shifts.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"shiftTrades\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.5\" placeholder=\"0\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"unpaidLeave\">\n                            Unpaid Leave (hours\/year)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">To deduct from total hours worked.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"unpaidLeave\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"0\" placeholder=\"0\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"differentialPay\">\n                            Differential Pay ($\/hour)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Flat rate add-on for special shifts (e.g., night shift).<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"differentialPay\" class=\"w-full p-2 border border-gray-300 rounded\" step=\"0.01\" min=\"0\" placeholder=\"0\">\n                    <\/div>\n                    \n                    <div class=\"input-group\">\n                        <label class=\"input-label\" for=\"differentialHours\">\n                            Differential Hours (per pay period)\n                            <span class=\"tooltip text-blue-500\">\u24d8\n                                <span class=\"tooltiptext\">Number of hours eligible for differential pay.<\/span>\n                            <\/span>\n                        <\/label>\n                        <input type=\"number\" id=\"differentialHours\" class=\"w-full p-2 border border-gray-300 rounded\" min=\"0\" placeholder=\"0\">\n                    <\/div>\n                <\/div>\n                \n                <div class=\"md:col-span-2 text-center mt-6\">\n                    <button type=\"button\" id=\"calculateBtn\" class=\"bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded-lg shadow-lg transition duration-200\">\n                        Calculate Pay\n                    <\/button>\n                    <button type=\"button\" id=\"resetBtn\" class=\"ml-4 bg-gray-300 hover:bg-gray-400 text-gray-800 font-bold py-3 px-6 rounded-lg shadow-lg transition duration-200\">\n                        Reset\n                    <\/button>\n                <\/div>\n            <\/form>\n            \n            <div id=\"resultsContainer\" class=\"mt-10 hidden print-break-inside-avoid\">\n                <h2 class=\"text-2xl font-bold mb-6 text-blue-800 text-center\">Pay Calculation Results<\/h2>\n                \n                <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n                    <div class=\"result-section\">\n                        <h3 class=\"text-xl font-bold mb-4 text-blue-700\">Per Pay Period<\/h3>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Total Hours:<\/span>\n                            <span id=\"totalHours\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Regular Pay:<\/span>\n                            <span id=\"regularPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Overtime Pay:<\/span>\n                            <span id=\"overtimePay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">FLSA Adjustment:<\/span>\n                            <span id=\"flsaAdjustment\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Specialty Pay:<\/span>\n                            <span id=\"specialtyPayResult\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Holiday Pay:<\/span>\n                            <span id=\"holidayPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Differential Pay:<\/span>\n                            <span id=\"differentialPayResult\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Bonus Pay:<\/span>\n                            <span id=\"bonusPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Gross Pay:<\/span>\n                            <span id=\"grossPay\" class=\"result-value text-blue-600\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Estimated Tax:<\/span>\n                            <span id=\"estimatedTax\" class=\"result-value text-red-600\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Net Pay:<\/span>\n                            <span id=\"netPay\" class=\"result-value text-green-600\">&#8212;<\/span>\n                        <\/div>\n                    <\/div>\n                    \n                    <div class=\"result-section\">\n                        <h3 class=\"text-xl font-bold mb-4 text-blue-700\">Annual Projections<\/h3>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Regular Pay:<\/span>\n                            <span id=\"annualRegularPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Overtime Pay:<\/span>\n                            <span id=\"annualOvertimePay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual FLSA Adjustment:<\/span>\n                            <span id=\"annualFlsaAdjustment\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Specialty Pay:<\/span>\n                            <span id=\"annualSpecialtyPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Holiday Pay:<\/span>\n                            <span id=\"annualHolidayPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Differential Pay:<\/span>\n                            <span id=\"annualDifferentialPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Bonus Pay:<\/span>\n                            <span id=\"annualBonusPay\" class=\"result-value\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Gross Pay:<\/span>\n                            <span id=\"annualGrossPay\" class=\"result-value text-blue-600\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Estimated Tax:<\/span>\n                            <span id=\"annualEstimatedTax\" class=\"result-value text-red-600\">&#8212;<\/span>\n                        <\/div>\n                        <div class=\"result-row\">\n                            <span class=\"result-label\">Annual Net Pay:<\/span>\n                            <span id=\"annualNetPay\" class=\"result-value text-green-600\">&#8212;<\/span>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                \n                <div class=\"chart-container mt-8 print-break-inside-avoid\">\n                    <h3 class=\"text-xl font-bold mb-4 text-blue-700 text-center\">Pay Breakdown<\/h3>\n                    <canvas id=\"payBreakdownChart\"><\/canvas>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n        <div id=\"instructions\" class=\"tab-content bg-white p-6 rounded-lg shadow-md\">\n            <h2 class=\"text-2xl font-bold mb-4 text-blue-800\">How to Use This Calculator?<\/h2>\n            \n            <div class=\"mb-6\">\n                <h3 class=\"text-xl font-bold mb-2 text-blue-700\">Step 1: Enter Basic Information<\/h3>\n                <ul class=\"list-disc pl-6 space-y-2\">\n                    <li><strong>Hourly Base Pay Rate:<\/strong> At first, add your standard hourly wage (e.g., $21.50)<\/li>\n                    <li><strong>Overtime Rate Multiplier:<\/strong> Default (In general) is 1.5\u00d7 (time and a half). Adjust if your department uses a different multiplier.<\/li>\n                    <li><strong>Scheduled Weekly Hours:<\/strong> Mostly set to 56 hours for a standard 48\/96 schedule.<\/li>\n                    <li><strong>Pay Period:<\/strong> Choose how often you receive your paycheck (weekly, bi-weekly, or monthly).<\/li>\n                    <li><strong>Number of Pay Periods:<\/strong> For calculating annual pay (defaults to 26 for bi-weekly).<\/li>\n                    <li><strong>FLSA Period Length:<\/strong> Basically 28 days for firefighters.<\/li>\n                    <li><strong>FLSA Threshold Hours:<\/strong> Typically 212 hours per 28-day cycle for firefighters.<\/li>\n                <\/ul>\n            <\/div>\n            \n            <div class=\"mb-6\">\n                <h3 class=\"text-xl font-bold mb-2 text-blue-700\">Step 2: Add Additional Pay Information<\/h3>\n                <ul class=\"list-disc pl-6 space-y-2\">\n                    <li><strong>Monthly Specialty Pay:<\/strong> If you have an additional pay for certifications or special roles (e.g., $250 for paramedic pay), please enter.<\/li>\n                    <li><strong>Holidays Worked:<\/strong> include the number of holidays you typically work per year (e.g., 10).<\/li>\n                    <li><strong>Holiday Pay Multiplier:<\/strong> How much extra you get paid for holidays (e.g., 1.5 for time-and-a-half).<\/li>\n                    <li><strong>Hours Per Holiday:<\/strong> How many hours you work on a typical holiday (e.g., 24).<\/li>\n                    <li><strong>Annual Bonuses:<\/strong> Any additional yearly bonuses you receive.<\/li>\n                    <li><strong>Estimated Tax Rate:<\/strong> Optional &#8211; enter an estimated percentage for tax withholding (e.g., 25%).<\/li>\n                <\/ul>\n            <\/div>\n            \n            <div class=\"mb-6\">\n                <h3 class=\"text-xl font-bold mb-2 text-blue-700\">Step 3: Advanced Options (Optional)<\/h3>\n                <ul class=\"list-disc pl-6 space-y-2\">\n                    <li><strong>Shift Trade Adjustment:<\/strong> Add or subtract hours if you regularly trade shifts.<\/li>\n                    <li><strong>Unpaid Leave:<\/strong> Hours of unpaid leave per year to deduct from your total.<\/li>\n                    <li><strong>Differential Pay:<\/strong> Additional hourly pay for special shifts (e.g., night differential).<\/li>\n                    <li><strong>Differential Hours:<\/strong> Number of hours eligible for differential pay per pay period.<\/li>\n                <\/ul>\n            <\/div>\n            \n            <div class=\"mb-6\">\n                <h3 class=\"text-xl font-bold mb-2 text-blue-700\">Step 4: Calculate and Review Results<\/h3>\n                <ul class=\"list-disc pl-6 space-y-2\">\n                    <li>Click the <strong>Calculate Pay<\/strong> button to generate your pay estimate.<\/li>\n                    <li>Review both your per-pay-period results and annual projections.<\/li>\n                    <li>The chart visualizes your pay breakdown by category.<\/li>\n                    <li>Use the <strong>Reset<\/strong> button to clear all fields and start over.<\/li>\n                <\/ul>\n            <\/div>\n            \n            <div class=\"bg-blue-50 p-4 rounded-lg border border-blue-200\">\n                <h3 class=\"text-lg font-bold mb-2 text-blue-700\">Example Input Values<\/h3>\n                <ul class=\"list-disc pl-6 space-y-1 text-sm\">\n                    <li><strong>Hourly Base Pay Rate:<\/strong> $21.50<\/li>\n                    <li><strong>Overtime Rate:<\/strong> 1.5\u00d7<\/li>\n                    <li><strong>Weekly Hours:<\/strong> 56<\/li>\n                    <li><strong>Pay Period:<\/strong> Bi-weekly<\/li>\n                    <li><strong>Monthly Specialty Pay:<\/strong> $250 (Paramedic)<\/li>\n                    <li><strong>Holidays Worked:<\/strong> 10 per year<\/li>\n                    <li><strong>Holiday Pay Multiplier:<\/strong> 1.5<\/li>\n                    <li><strong>Hours Per Holiday:<\/strong> 24<\/li>\n                    <li><strong>Estimated Tax Rate:<\/strong> 25%<\/li>\n                <\/ul>\n            <\/div>\n        <\/div>\n        \n        <div id=\"about\" class=\"tab-content bg-white p-6 rounded-lg shadow-md\">\n            <h2 class=\"text-2xl font-bold mb-4 text-blue-800\">About This Calculator<\/h2>\n            \n            <div class=\"mb-6\">\n                <p class=\"mb-4\">This is for U.S.-based firefighters, paramedics, and other emergency personnel who work the 48\/96 schedule (48 hours on, 96 hours off). It assists in estimating gross pay without losing sight of the fire service pay structure.<\/p>\n                \n                <p class=\"mb-4\">The 48\/96 schedule (2 days on \/ 4 days off) means that over 8 days you work 3 days, therefore you have to special considerations for overtime and FLSA calculations where the average work hours per week are 56.<\/p>\n                \n                <h3 class=\"text-xl font-bold mb-2 text-blue-700\">Calculation Methods<\/h3>\n                \n                <ul class=\"list-disc pl-6 space-y-2 mb-4\">\n                    <li><strong>Regular Pay:<\/strong> Hourly rate \u00d7 Regular hours.<\/li>\n                    <li><strong>Overtime:<\/strong> Over 40 per week calculated at your OT rate.<\/li>\n                    <li><strong>FLSA Adjustment:<\/strong> Helps align with work effort of additional overtime hours more than the FLSA threshold (FLSA = 212 hours per 28 days).<\/li>\n                    <li><strong>Specialty Pay:<\/strong> From the monthly amount, prorated to your pay period.<\/li>\n                    <li><strong>Holiday Pay:<\/strong> Paid at a rate at which you are paid for hours worked on a holiday.<\/li>\n                <\/ul>\n                \n                <h3 class=\"text-xl font-bold mb-2 text-blue-700\">Assumptions<\/h3>\n                \n                <ul class=\"list-disc pl-6 space-y-2\">\n                    <li>Standard workweek = 56 hours<\/li>\n                    <li>FLSA threshold = 212 hours\/28 days<\/li>\n                    <li>Overtime = Any hours above 212 in a 28-day cycle<\/li>\n                    <li>Pay is based on base hour for hour; specialty pays not included unless provided<\/li>\n                <\/ul>\n            <\/div>\n            \n            <div class=\"bg-yellow-50 p-4 rounded-lg border border-yellow-200\">\n                <h3 class=\"text-lg font-bold mb-2 text-yellow-700\">Important Note<\/h3>\n                <p class=\"text-sm\">This calculator uses standard formulas and the information you provide to estimate what you are likely to pay. Make sure to check your union contract (MOU) or payroll department for exact rates and FLSA cycle that apply to you for the most accurate results. Retirement contributions, health deductions, or other withholdings are not included unless entered manually.<\/p>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        \/\/ Tab Navigation\n        document.querySelectorAll('.nav-tab').forEach(tab => {\n            tab.addEventListener('click', () => {\n                document.querySelectorAll('.nav-tab').forEach(t => t.classList.remove('active'));\n                document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));\n                \n                tab.classList.add('active');\n                document.getElementById(tab.dataset.tab).classList.add('active');\n            });\n        });\n        \n        \/\/ Pay Calculator Logic\n        const calculateBtn = document.getElementById('calculateBtn');\n        const resetBtn = document.getElementById('resetBtn');\n        const resultsContainer = document.getElementById('resultsContainer');\n        let payBreakdownChart = null;\n        \n        calculateBtn.addEventListener('click', calculatePay);\n        resetBtn.addEventListener('click', resetCalculator);\n        \n        \/\/ Handle pay period change to update default pay period count\n        document.getElementById('payPeriod').addEventListener('change', function() {\n            const payPeriodSelect = document.getElementById('payPeriod');\n            const payPeriodCountInput = document.getElementById('payPeriodCount');\n            \n            switch(payPeriodSelect.value) {\n                case 'weekly':\n                    payPeriodCountInput.value = 52;\n                    break;\n                case 'biweekly':\n                    payPeriodCountInput.value = 26;\n                    break;\n                case 'monthly':\n                    payPeriodCountInput.value = 12;\n                    break;\n            }\n        });\n        \n        function calculatePay() {\n            \/\/ Get basic input values\n            const hourlyRate = parseFloat(document.getElementById('hourlyRate').value) || 0;\n            const otRate = parseFloat(document.getElementById('otRate').value) || 1.5;\n            const weeklyHours = parseFloat(document.getElementById('weeklyHours').value) || 56;\n            const payPeriod = document.getElementById('payPeriod').value;\n            const payPeriodCount = parseInt(document.getElementById('payPeriodCount').value) || 26;\n            const flsaPeriod = parseInt(document.getElementById('flsaPeriod').value) || 28;\n            const flsaThreshold = parseInt(document.getElementById('flsaThreshold').value) || 212;\n            \n            \/\/ Get additional pay values\n            const specialtyPay = parseFloat(document.getElementById('specialtyPay').value) || 0;\n            const holidaysWorked = parseInt(document.getElementById('holidaysWorked').value) || 0;\n            const holidayRate = parseFloat(document.getElementById('holidayRate').value) || 1.5;\n            const hoursPerHoliday = parseInt(document.getElementById('hoursPerHoliday').value) || 24;\n            const annualBonus = parseFloat(document.getElementById('annualBonus').value) || 0;\n            const taxRate = parseFloat(document.getElementById('taxRate').value) || 0;\n            \n            \/\/ Get advanced input values\n            const shiftTrades = parseFloat(document.getElementById('shiftTrades').value) || 0;\n            const unpaidLeave = parseFloat(document.getElementById('unpaidLeave').value) || 0;\n            const differentialPay = parseFloat(document.getElementById('differentialPay').value) || 0;\n            const differentialHours = parseFloat(document.getElementById('differentialHours').value) || 0;\n            \n            \/\/ Validate required fields\n            if (hourlyRate <= 0) {\n                alert('Please enter your hourly base pay rate.');\n                return;\n            }\n            \n            \/\/ Calculate hours per pay period based on weekly hours\n            let hoursPerPayPeriod;\n            switch(payPeriod) {\n                case 'weekly':\n                    hoursPerPayPeriod = weeklyHours;\n                    break;\n                case 'biweekly':\n                    hoursPerPayPeriod = weeklyHours * 2;\n                    break;\n                case 'monthly':\n                    hoursPerPayPeriod = (weeklyHours * 52) \/ 12;\n                    break;\n                default:\n                    hoursPerPayPeriod = weeklyHours * 2;\n            }\n            \n            \/\/ Adjust for shift trades and unpaid leave\n            const adjustedHoursPerYear = (hoursPerPayPeriod * payPeriodCount) + shiftTrades - unpaidLeave;\n            const adjustedHoursPerPayPeriod = adjustedHoursPerYear \/ payPeriodCount;\n            \n            \/\/ Calculate regular and overtime hours\n            const regularHoursPerWeek = Math.min(40, weeklyHours);\n            const otHoursPerWeek = Math.max(0, weeklyHours - 40);\n            \n            let regularHoursPerPayPeriod;\n            let otHoursPerPayPeriod;\n            \n            switch(payPeriod) {\n                case 'weekly':\n                    regularHoursPerPayPeriod = regularHoursPerWeek;\n                    otHoursPerPayPeriod = otHoursPerWeek;\n                    break;\n                case 'biweekly':\n                    regularHoursPerPayPeriod = regularHoursPerWeek * 2;\n                    otHoursPerPayPeriod = otHoursPerWeek * 2;\n                    break;\n                case 'monthly':\n                    regularHoursPerPayPeriod = (regularHoursPerWeek * 52) \/ 12;\n                    otHoursPerPayPeriod = (otHoursPerWeek * 52) \/ 12;\n                    break;\n                default:\n                    regularHoursPerPayPeriod = regularHoursPerWeek * 2;\n                    otHoursPerPayPeriod = otHoursPerWeek * 2;\n            }\n            \n            \/\/ Calculate FLSA adjustment\n            \/\/ FLSA cycle days to pay period ratio\n            let flsaCyclesPerPayPeriod;\n            switch(payPeriod) {\n                case 'weekly':\n                    flsaCyclesPerPayPeriod = 7 \/ flsaPeriod;\n                    break;\n                case 'biweekly':\n                    flsaCyclesPerPayPeriod = 14 \/ flsaPeriod;\n                    break;\n                case 'monthly':\n                    flsaCyclesPerPayPeriod = 30.44 \/ flsaPeriod; \/\/ Average days in month\n                    break;\n                default:\n                    flsaCyclesPerPayPeriod = 14 \/ flsaPeriod;\n            }\n            \n            const totalHoursPerFlsaCycle = (weeklyHours * 7) * (flsaPeriod \/ 7);\n            let flsaOvertimeHours = Math.max(0, totalHoursPerFlsaCycle - flsaThreshold);\n            const flsaOvertimeHoursPerPayPeriod = flsaOvertimeHours * flsaCyclesPerPayPeriod;\n            \n            \/\/ Calculate pay components\n            const regularPay = regularHoursPerPayPeriod * hourlyRate;\n            const overtimePay = otHoursPerPayPeriod * hourlyRate * otRate;\n            const flsaAdjustment = flsaOvertimeHoursPerPayPeriod * hourlyRate * 0.5; \/\/ Only the half-time premium\n            \n            \/\/ Calculate holiday pay\n            const holidaysPerPayPeriod = holidaysWorked \/ payPeriodCount;\n            const holidayHoursPerPayPeriod = holidaysPerPayPeriod * hoursPerHoliday;\n            const holidayPay = holidayHoursPerPayPeriod * hourlyRate * (holidayRate - 1); \/\/ Only the premium portion\n            \n            \/\/ Calculate specialty and differential pay\n            let specialtyPayPerPeriod;\n            switch(payPeriod) {\n                case 'weekly':\n                    specialtyPayPerPeriod = specialtyPay \/ 4.33; \/\/ Monthly to weekly\n                    break;\n                case 'biweekly':\n                    specialtyPayPerPeriod = specialtyPay \/ 2.17; \/\/ Monthly to bi-weekly\n                    break;\n                case 'monthly':\n                    specialtyPayPerPeriod = specialtyPay;\n                    break;\n                default:\n                    specialtyPayPerPeriod = specialtyPay \/ 2.17;\n            }\n            \n            const differentialPayAmount = differentialHours * differentialPay;\n            \n            \/\/ Calculate bonus pay per period\n            const bonusPayPerPeriod = annualBonus \/ payPeriodCount;\n            \n            \/\/ Calculate total gross pay\n            const grossPay = regularPay + overtimePay + flsaAdjustment + specialtyPayPerPeriod + holidayPay + differentialPayAmount + bonusPayPerPeriod;\n            \n            \/\/ Calculate tax and net pay\n            const taxAmount = taxRate > 0 ? (grossPay * (taxRate \/ 100)) : 0;\n            const netPay = grossPay - taxAmount;\n            \n            \/\/ Calculate annual values\n            const annualRegularPay = regularPay * payPeriodCount;\n            const annualOvertimePay = overtimePay * payPeriodCount;\n            const annualFlsaAdjustment = flsaAdjustment * payPeriodCount;\n            const annualSpecialtyPay = specialtyPay * 12; \/\/ Always calculate as monthly \u00d7 12\n            const annualHolidayPay = holidayPay * payPeriodCount;\n            const annualDifferentialPay = differentialPayAmount * payPeriodCount;\n            const annualBonusPay = annualBonus;\n            const annualGrossPay = annualRegularPay + annualOvertimePay + annualFlsaAdjustment + annualSpecialtyPay + annualHolidayPay + annualDifferentialPay + annualBonusPay;\n            const annualTaxAmount = taxRate > 0 ? (annualGrossPay * (taxRate \/ 100)) : 0;\n            const annualNetPay = annualGrossPay - annualTaxAmount;\n            \n            \/\/ Display results\n            document.getElementById('totalHours').textContent = adjustedHoursPerPayPeriod.toFixed(2) + ' hours';\n            document.getElementById('regularPay').textContent = formatCurrency(regularPay);\n            document.getElementById('overtimePay').textContent = formatCurrency(overtimePay);\n            document.getElementById('flsaAdjustment').textContent = formatCurrency(flsaAdjustment);\n            document.getElementById('specialtyPayResult').textContent = formatCurrency(specialtyPayPerPeriod);\n            document.getElementById('holidayPay').textContent = formatCurrency(holidayPay);\n            document.getElementById('differentialPayResult').textContent = formatCurrency(differentialPayAmount);\n            document.getElementById('bonusPay').textContent = formatCurrency(bonusPayPerPeriod);\n            document.getElementById('grossPay').textContent = formatCurrency(grossPay);\n            document.getElementById('estimatedTax').textContent = taxRate > 0 ? formatCurrency(taxAmount) : 'Not calculated';\n            document.getElementById('netPay').textContent = taxRate > 0 ? formatCurrency(netPay) : 'Not calculated';\n            \n            document.getElementById('annualRegularPay').textContent = formatCurrency(annualRegularPay);\n            document.getElementById('annualOvertimePay').textContent = formatCurrency(annualOvertimePay);\n            document.getElementById('annualFlsaAdjustment').textContent = formatCurrency(annualFlsaAdjustment);\n            document.getElementById('annualSpecialtyPay').textContent = formatCurrency(annualSpecialtyPay);\n            document.getElementById('annualHolidayPay').textContent = formatCurrency(annualHolidayPay);\n            document.getElementById('annualDifferentialPay').textContent = formatCurrency(annualDifferentialPay);\n            document.getElementById('annualBonusPay').textContent = formatCurrency(annualBonusPay);\n            document.getElementById('annualGrossPay').textContent = formatCurrency(annualGrossPay);\n            document.getElementById('annualEstimatedTax').textContent = taxRate > 0 ? formatCurrency(annualTaxAmount) : 'Not calculated';\n            document.getElementById('annualNetPay').textContent = taxRate > 0 ? formatCurrency(annualNetPay) : 'Not calculated';\n            \n            \/\/ Show results container\n            resultsContainer.classList.remove('hidden');\n            \n            \/\/ Create or update chart\n            createPayBreakdownChart(\n                annualRegularPay,\n                annualOvertimePay,\n                annualFlsaAdjustment,\n                annualSpecialtyPay,\n                annualHolidayPay,\n                annualDifferentialPay,\n                annualBonusPay\n            );\n            \n            \/\/ Scroll to results\n            resultsContainer.scrollIntoView({ behavior: 'smooth' });\n        }\n        \n        function createPayBreakdownChart(regularPay, overtimePay, flsaAdjustment, specialtyPay, holidayPay, differentialPay, bonusPay) {\n            const ctx = document.getElementById('payBreakdownChart').getContext('2d');\n            \n            \/\/ If chart already exists, destroy it\n            if (payBreakdownChart) {\n                payBreakdownChart.destroy();\n            }\n            \n            \/\/ Create dataset\n            const data = {\n                labels: [\n                    'Regular Pay',\n                    'Overtime Pay',\n                    'FLSA Adjustment',\n                    'Specialty Pay',\n                    'Holiday Pay',\n                    'Differential Pay',\n                    'Bonus Pay'\n                ],\n                datasets: [{\n                    label: 'Annual Pay Breakdown',\n                    data: [\n                        regularPay,\n                        overtimePay,\n                        flsaAdjustment,\n                        specialtyPay,\n                        holidayPay,\n                        differentialPay,\n                        bonusPay\n                    ],\n                    backgroundColor: [\n                        '#3B82F6', \/\/ blue-500\n                        '#EF4444', \/\/ red-500\n                        '#F59E0B', \/\/ amber-500\n                        '#10B981', \/\/ emerald-500\n                        '#8B5CF6', \/\/ violet-500\n                        '#EC4899', \/\/ pink-500\n                        '#6366F1'  \/\/ indigo-500\n                    ],\n                    borderWidth: 1\n                }]\n            };\n            \n            \/\/ Create chart\n            payBreakdownChart = new Chart(ctx, {\n                type: 'doughnut',\n                data: data,\n                options: {\n                    responsive: true,\n                    plugins: {\n                        legend: {\n                            position: 'bottom',\n                        },\n                        tooltip: {\n                            callbacks: {\n                                label: function(context) {\n                                    const label = context.label || '';\n                                    const value = context.raw;\n                                    const total = context.dataset.data.reduce((a, b) => a + b, 0);\n                                    const percentage = Math.round((value \/ total) * 100);\n                                    return `${label}: ${formatCurrency(value)} (${percentage}%)`;\n                                }\n                            }\n                        }\n                    }\n                }\n            });\n        }\n        \n        function resetCalculator() {\n            document.getElementById('payCalculatorForm').reset();\n            \n            \/\/ Default values\n            document.getElementById('otRate').value = '1.5';\n            document.getElementById('weeklyHours').value = '56';\n            document.getElementById('payPeriod').value = 'biweekly';\n            document.getElementById('payPeriodCount').value = '26';\n            document.getElementById('flsaPeriod').value = '28';\n            document.getElementById('flsaThreshold').value = '212';\n            document.getElementById('holidayRate').value = '1.5';\n            document.getElementById('hoursPerHoliday').value = '24';\n            \n            \/\/ Hide results\n            resultsContainer.classList.add('hidden');\n            \n            \/\/ Destroy chart if it exists\n            if (payBreakdownChart) {\n                payBreakdownChart.destroy();\n                payBreakdownChart = null;\n            }\n        }\n        \n        function formatCurrency(value) {\n            return new Intl.NumberFormat('en-US', {\n                style: 'currency',\n                currency: 'USD',\n                minimumFractionDigits: 2\n            }).format(value);\n        }\n    <\/script>\n\n\n\n\n<div class=\"max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-10\">\n\n\n  <!-- Key drivers -->\n  <div id=\"why-switch\" class=\"mt-8 bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n    <h2 class=\"text-xl sm:text-2xl font-bold text-gray-900 mb-2\">Why Firefighters Are Switching to the 48\/96 Schedule<\/h2>\n    <div class=\"text-gray-600 leading-relaxed mb-6\">\n      Many departments are moving from schedules like 24\/48 or 24\/72 to 48\/96 for quality-of-life improvements and operational efficiency.\n    <\/div>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n      <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900\">Fewer commutes per month<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          With 48\/96, firefighters often report to work <span class=\"font-semibold\">5\u20136 times\/month<\/span> vs. <span class=\"font-semibold\">8\u201310<\/span> on 24\/48.\n        <\/div>\n        <div class=\"mt-3 text-sm text-gray-600\">\n          Less fuel \u2022 Less driving time \u2022 Lower commute stress\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900\">Stronger work-life balance<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          The four consecutive days off support family time, travel without burning vacation, side jobs, and recovery.\n        <\/div>\n        <div class=\"mt-3 text-sm text-gray-600\">\n          48 hours on \u2022 96 hours off\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900\">Recovery rhythm &#038; retention<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Many firefighters report better reset across four days off, supporting morale, reducing burnout, and improving retention.\n        <\/div>\n        <div class=\"mt-3 text-sm text-gray-600\">\n          Often cited: recruitment + staffing stability\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Pros \/ Cons -->\n  <div id=\"pros-cons\" class=\"mt-8 grid grid-cols-1 lg:grid-cols-2 gap-6\">\n    <div class=\"bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n      <h3 class=\"text-xl font-bold text-gray-900 mb-4\">Pros of the 48\/96 Schedule<\/h3>\n\n      <div class=\"space-y-4\">\n        <div class=\"rounded-xl border border-emerald-100 bg-emerald-50 p-5\">\n          <div class=\"font-semibold text-emerald-900\">1) Fewer Commutes<\/div>\n          <div class=\"mt-1 text-emerald-900\/90 leading-relaxed\">\n            Fewer report days can reduce expenses and time lost to driving over the year.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-xl border border-emerald-100 bg-emerald-50 p-5\">\n          <div class=\"font-semibold text-emerald-900\">2) Better Work-Life Balance<\/div>\n          <div class=\"mt-1 text-emerald-900\/90 leading-relaxed\">\n            Four consecutive days off often becomes the deciding factor when comparing 48\/96 vs 24\/48.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-xl border border-emerald-100 bg-emerald-50 p-5\">\n          <div class=\"font-semibold text-emerald-900\">3) Improved Sleep &#038; Recovery Window<\/div>\n          <div class=\"mt-1 text-emerald-900\/90 leading-relaxed\">\n            The extended off-duty block can allow deeper physical and mental reset\u2014especially after busy shifts.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n      <h3 class=\"text-xl font-bold text-gray-900 mb-4\">Cons (What to Watch Closely)<\/h3>\n\n      <div class=\"space-y-4\">\n        <div class=\"rounded-xl border border-rose-100 bg-rose-50 p-5\">\n          <div class=\"font-semibold text-rose-900\">1) Fatigue during the 48-hour block<\/div>\n          <div class=\"mt-1 text-rose-900\/90 leading-relaxed\">\n            In high-call environments, two consecutive days can amplify sleep loss, decision fatigue, and cumulative stress.\n          <\/div>\n        <\/div>\n\n        <div class=\"rounded-xl border border-rose-100 bg-rose-50 p-5\">\n          <div class=\"font-semibold text-rose-900\">2) Kelly Days + FLSA overtime complexity<\/div>\n          <div class=\"mt-1 text-rose-900\/90 leading-relaxed\">\n            Many pay issues stem from misunderstanding work periods, overtime thresholds, Kelly days, trades, and holdovers.\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"mt-5 rounded-xl border border-gray-100 bg-gray-50 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900 mb-1\">Bottom line<\/div>\n        <div class=\"text-gray-700 leading-relaxed\">\n          The schedule can be great\u2014just make sure your pay calculator accounts for your department\u2019s work period rules and eligible incentive pay in the overtime \u201cregular rate.\u201d\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- FLSA 7(k) -->\n  <div id=\"flsa\" class=\"mt-8 bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n    <h3 class=\"text-xl sm:text-2xl font-bold text-gray-900 mb-2\">How the FLSA 7(k) Exemption Affects Your 48\/96 Pay<\/h3>\n    <div class=\"text-gray-600 leading-relaxed mb-6\">\n      Firefighter overtime commonly uses a defined \u201cwork period\u201d (often 28 days). Overtime typically triggers after you exceed a legal threshold in that work period\u2014rather than after 40 hours per week.\n    <\/div>\n\n    <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-4\">\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900\">What is a Work Period?<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          A recurring cycle (often 7\u201328 days) designated by your department to measure overtime eligibility.\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900\">Statutory Overtime<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Overtime required under FLSA once you exceed the threshold for the chosen work period.\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900\">Regular Rate of Pay<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Often includes base pay plus certain incentive pays\u2014this matters because OT is typically calculated from the regular rate.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Quick numbers -->\n    <div class=\"mt-6 rounded-2xl border border-indigo-100 bg-indigo-50 p-6\">\n      <h3 class=\"text-lg font-bold text-indigo-900 mb-2\">Common 28-day example (typical)<\/h3>\n\n      <div class=\"grid grid-cols-1 md:grid-cols-4 gap-4\">\n        <div class=\"rounded-xl bg-white\/70 border border-indigo-100 p-4\">\n          <div class=\"text-xs font-semibold text-indigo-700 uppercase tracking-wide\">Scheduled average<\/div>\n          <div class=\"mt-1 text-2xl font-extrabold text-gray-900\">56<\/div>\n          <div class=\"text-sm text-gray-700\">hours\/week<\/div>\n        <\/div>\n\n        <div class=\"rounded-xl bg-white\/70 border border-indigo-100 p-4\">\n          <div class=\"text-xs font-semibold text-indigo-700 uppercase tracking-wide\">28-day scheduled<\/div>\n          <div class=\"mt-1 text-2xl font-extrabold text-gray-900\">224<\/div>\n          <div class=\"text-sm text-gray-700\">hours (56\u00d74)<\/div>\n        <\/div>\n\n        <div class=\"rounded-xl bg-white\/70 border border-indigo-100 p-4\">\n          <div class=\"text-xs font-semibold text-indigo-700 uppercase tracking-wide\">OT threshold<\/div>\n          <div class=\"mt-1 text-2xl font-extrabold text-gray-900\">212<\/div>\n          <div class=\"text-sm text-gray-700\">hours \/ 28 days<\/div>\n        <\/div>\n\n        <div class=\"rounded-xl bg-white\/70 border border-indigo-100 p-4\">\n          <div class=\"text-xs font-semibold text-indigo-700 uppercase tracking-wide\">Typical OT hours<\/div>\n          <div class=\"mt-1 text-2xl font-extrabold text-gray-900\">12<\/div>\n          <div class=\"text-sm text-gray-700\">hours (224\u2212212)<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"mt-4 rounded-xl bg-white border border-indigo-100 p-4\">\n        <div class=\"text-sm font-semibold text-gray-900 mb-1\">Simple overtime math (conceptual)<\/div>\n        <div class=\"text-sm text-gray-700 leading-relaxed\">\n          If OT rate is 1.5\u00d7, then in a typical 28-day cycle you may see roughly:\n          <span class=\"font-semibold\">(Regular Rate \u00d7 1.5) \u00d7 12 OT hours<\/span>\n          \u2014but your \u201cregular rate\u201d may be higher than base pay if eligible incentives apply.\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Comparison -->\n  <div id=\"comparison\" class=\"mt-8 bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n    <h3 class=\"text-xl sm:text-2xl font-bold text-gray-900 mb-2\">48\/96 vs. 24\/48 Schedule Comparison (Simplified)<\/h3>\n    <div class=\"text-gray-600 leading-relaxed mb-6\">\n      Both schedules can average similar weekly hours, but the distribution of on-duty time and recovery days changes quality-of-life and fatigue patterns.\n    <\/div>\n\n    <!-- Div-based \u201ctable\u201d -->\n    <div class=\"overflow-hidden rounded-xl border border-gray-200\">\n      <div class=\"grid grid-cols-3 bg-gray-50 border-b border-gray-200\">\n        <div class=\"p-4 text-sm font-semibold text-gray-700\">Feature<\/div>\n        <div class=\"p-4 text-sm font-semibold text-gray-700\">48\/96<\/div>\n        <div class=\"p-4 text-sm font-semibold text-gray-700\">24\/48<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3 border-b border-gray-200\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">Commutes per Month<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">5\u20136<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">8\u201310<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3 border-b border-gray-200\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">Consecutive Hours Worked<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">48<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">24<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3 border-b border-gray-200\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">Consecutive Days Off<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">4<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">2<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3 border-b border-gray-200\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">Average Weekly Hours<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">56<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">56<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3 border-b border-gray-200\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">FLSA OT Structure<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">Same (often 212 hrs\/28 days)<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">Same (often 212 hrs\/28 days)<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3 border-b border-gray-200\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">Recovery Period<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">Longer<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">Shorter<\/div>\n      <\/div>\n\n      <div class=\"grid grid-cols-3\">\n        <div class=\"p-4 text-sm text-gray-700 font-medium\">Fatigue Risk<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">Higher during 48-hour block<\/div>\n        <div class=\"p-4 text-sm text-gray-700\">Lower per shift<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"mt-5 rounded-xl bg-gray-50 border border-gray-100 p-5\">\n      <div class=\"text-sm font-semibold text-gray-900 mb-1\">Practical takeaway<\/div>\n      <div class=\"text-gray-700 leading-relaxed\">\n        The longer recovery window is the most cited advantage of 48\/96, but high call volume can make the 48-hour duty block feel significantly more demanding.\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Incentives -->\n  <div id=\"incentives\" class=\"mt-8 bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n    <h4 class=\"text-xl sm:text-2xl font-bold text-gray-900 mb-2\">Don\u2019t Leave Money on the Table: Specialty &#038; Incentive Pay<\/h4>\n    <div class=\"text-gray-600 leading-relaxed mb-6\">\n      Many firefighters underestimate how much specialty pay can raise total compensation\u2014especially if eligible incentives are included in the \u201cregular rate\u201d used for overtime calculations.\n    <\/div>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"font-semibold text-gray-900\">Paramedic Stipend<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Often a flat monthly amount (example range: $200\u2013$800) or a percentage of base pay (e.g., 5%).\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"font-semibold text-gray-900\">HazMat Pay<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          May be fixed or tiered based on certification level.\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"font-semibold text-gray-900\">Bilingual Pay<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Can be a monthly bonus or hourly premium in multilingual communities.\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 p-5\">\n        <div class=\"font-semibold text-gray-900\">Longevity Pay<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Common step-ups after 5\/10\/15+ years; sometimes expressed as 2\u201310% of base pay.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"mt-6 rounded-2xl border border-amber-200 bg-amber-50 p-6\">\n      <div class=\"text-lg font-bold text-amber-900 mb-2\">Critical note about overtime<\/div>\n      <div class=\"text-amber-900\/90 leading-relaxed\">\n        In many cases, eligible incentive pays must be included in your <span class=\"font-semibold\">regular rate<\/span> for overtime calculations.\n        That means OT may be higher than <span class=\"font-semibold\">Base Hourly \u00d7 1.5<\/span>.\n        If incentives are excluded when they shouldn\u2019t be, underpayment can occur.\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- Annual hours \/ taxes \/ factors -->\n  <div class=\"mt-8 grid grid-cols-1 lg:grid-cols-3 gap-6\">\n    <div class=\"bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n      <h4 class=\"text-lg font-bold text-gray-900 mb-2\">Annual hours on 48\/96<\/h4>\n      <div class=\"text-gray-600 leading-relaxed mb-4\">\n        A common estimate is:\n      <\/div>\n      <div class=\"rounded-xl bg-gray-50 border border-gray-100 p-5\">\n        <div class=\"text-sm text-gray-700\">56 hours\/week \u00d7 52 weeks\/year<\/div>\n        <div class=\"mt-1 text-3xl font-extrabold text-gray-900\">2,912<\/div>\n        <div class=\"text-sm text-gray-600\">hours per year (approx.)<\/div>\n      <\/div>\n      <div class=\"mt-4 text-sm text-gray-600 leading-relaxed\">\n        Note: Not all hours qualify as overtime due to the work-period threshold structure.\n      <\/div>\n    <\/div>\n\n    <div class=\"bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n      <h4 class=\"text-lg font-bold text-gray-900 mb-2\">Shift trades &#038; taxes (general)<\/h4>\n      <div class=\"text-gray-700 leading-relaxed\">\n        Hour-for-hour trades are often neutral to gross annual pay since you\u2019re typically paid for scheduled hours. However, additional shifts beyond schedule may increase taxable wages and impact withholding.\n      <\/div>\n      <div class=\"mt-4 rounded-xl bg-gray-50 border border-gray-100 p-5\">\n        <div class=\"text-sm font-semibold text-gray-900 mb-1\">Practical tip<\/div>\n        <div class=\"text-sm text-gray-700 leading-relaxed\">\n          If you stack extra shifts, check your paystub and year-end W-2 to confirm totals match expectations.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n      <h4 class=\"text-lg font-bold text-gray-900 mb-2\">Additional factors that change pay<\/h4>\n      <div class=\"space-y-3\">\n        <div class=\"rounded-xl border border-gray-100 p-4\">\n          <div class=\"font-semibold text-gray-900\">Kelly Days<\/div>\n          <div class=\"text-sm text-gray-700 leading-relaxed mt-1\">\n            Can lower total annual hours and change overtime projections\u2014must be included in calculators.\n          <\/div>\n        <\/div>\n        <div class=\"rounded-xl border border-gray-100 p-4\">\n          <div class=\"font-semibold text-gray-900\">Holdovers<\/div>\n          <div class=\"text-sm text-gray-700 leading-relaxed mt-1\">\n            Extra time past shift end may immediately count as OT or push you over the work-period threshold.\n          <\/div>\n        <\/div>\n        <div class=\"rounded-xl border border-gray-100 p-4\">\n          <div class=\"font-semibold text-gray-900\">Vacation \/ Sick Leave<\/div>\n          <div class=\"text-sm text-gray-700 leading-relaxed mt-1\">\n            Whether leave counts toward thresholds can depend on department policy.\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- FAQ -->\n  <div id=\"faq\" class=\"mt-8 bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n    <h4 class=\"text-xl sm:text-2xl font-bold text-gray-900 mb-2\">Frequently Asked Questions (FAQ)<\/h4>\n    <div class=\"text-gray-600 leading-relaxed mb-6\">\n      Quick answers to common questions about 48\/96, overtime, and total compensation.\n    <\/div>\n\n    <div class=\"space-y-3\">\n      <details class=\"group rounded-xl border border-gray-200 bg-gray-50 p-5\">\n        <summary class=\"cursor-pointer list-none flex items-center justify-between gap-3\">\n          <div class=\"font-semibold text-gray-900\">How many hours a year do you work on a 48\/96 schedule?<\/div>\n          <div class=\"text-gray-500 group-open:rotate-180 transition-transform\">\u25bc<\/div>\n        <\/summary>\n        <div class=\"mt-3 text-gray-700 leading-relaxed\">\n          A common estimate is <span class=\"font-semibold\">2,912 hours\/year<\/span> based on a 56-hour workweek (56 \u00d7 52).\n        <\/div>\n      <\/details>\n\n      <details class=\"group rounded-xl border border-gray-200 bg-gray-50 p-5\">\n        <summary class=\"cursor-pointer list-none flex items-center justify-between gap-3\">\n          <div class=\"font-semibold text-gray-900\">Is 48\/96 better than 24\/48?<\/div>\n          <div class=\"text-gray-500 group-open:rotate-180 transition-transform\">\u25bc<\/div>\n        <\/summary>\n        <div class=\"mt-3 text-gray-700 leading-relaxed\">\n          Many prefer 48\/96 for fewer commutes and a longer recovery window, but fatigue can be higher during the 48-hour block\u2014especially in high call volume systems.\n        <\/div>\n      <\/details>\n\n      <details class=\"group rounded-xl border border-gray-200 bg-gray-50 p-5\">\n        <summary class=\"cursor-pointer list-none flex items-center justify-between gap-3\">\n          <div class=\"font-semibold text-gray-900\">Do firefighters get overtime after 40 hours?<\/div>\n          <div class=\"text-gray-500 group-open:rotate-180 transition-transform\">\u25bc<\/div>\n        <\/summary>\n        <div class=\"mt-3 text-gray-700 leading-relaxed\">\n          Not usually. Under the FLSA 7(k) structure, overtime commonly begins after exceeding a threshold within a defined work period (often 28 days), such as 212 hours.\n        <\/div>\n      <\/details>\n\n      <details class=\"group rounded-xl border border-gray-200 bg-gray-50 p-5\">\n        <summary class=\"cursor-pointer list-none flex items-center justify-between gap-3\">\n          <div class=\"font-semibold text-gray-900\">Do specialty pays count toward overtime?<\/div>\n          <div class=\"text-gray-500 group-open:rotate-180 transition-transform\">\u25bc<\/div>\n        <\/summary>\n        <div class=\"mt-3 text-gray-700 leading-relaxed\">\n          In many cases, yes\u2014eligible incentives may be included in the regular rate used for OT, which can raise your overtime rate above base \u00d7 1.5.\n        <\/div>\n      <\/details>\n\n      <details class=\"group rounded-xl border border-gray-200 bg-gray-50 p-5\">\n        <summary class=\"cursor-pointer list-none flex items-center justify-between gap-3\">\n          <div class=\"font-semibold text-gray-900\">Do shift trades change your paycheck?<\/div>\n          <div class=\"text-gray-500 group-open:rotate-180 transition-transform\">\u25bc<\/div>\n        <\/summary>\n        <div class=\"mt-3 text-gray-700 leading-relaxed\">\n          Typically no for hour-for-hour trades, but extra shifts beyond your schedule can increase taxable income and may trigger additional overtime depending on your work period totals.\n        <\/div>\n      <\/details>\n    <\/div>\n  <\/div>\n\n  <!-- Final thoughts -->\n  <div class=\"mt-8 bg-white rounded-2xl shadow-sm ring-1 ring-gray-100 p-6 sm:p-8\">\n    <h4 class=\"text-xl sm:text-2xl font-bold text-gray-900 mb-2\">Final Thoughts: Mastering Your 48\/96 Pay Structure<\/h4>\n    <div class=\"text-gray-700 leading-relaxed\">\n      The 48\/96 schedule is more than a rotation\u2014it\u2019s a compensation system shaped by federal labor rules, department policy, and incentive structures. If you\u2019re building (or choosing) a firefighter pay calculator, make sure it includes:\n    <\/div>\n\n    <div class=\"mt-5 grid grid-cols-1 md:grid-cols-2 gap-4\">\n      <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n        <div class=\"font-semibold text-gray-900\">Must-have inputs<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          28-day work periods (or your department\u2019s period), OT thresholds, Kelly days, holdovers, trades, and leave rules.\n        <\/div>\n      <\/div>\n\n      <div class=\"rounded-xl border border-gray-100 bg-gray-50 p-5\">\n        <div class=\"font-semibold text-gray-900\">Must-have pay logic<\/div>\n        <div class=\"mt-2 text-gray-700 leading-relaxed\">\n          Specialty pay percentages, eligible incentive inclusion in regular rate, and correct overtime multipliers.\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"mt-6 rounded-xl border border-blue-100 bg-blue-50 p-5\">\n      <div class=\"font-semibold text-blue-900 mb-1\">If you want, I can tailor this layout further<\/div>\n      <div class=\"text-blue-900\/90 leading-relaxed\">\n        Tell me your preferred tone (more technical vs more beginner-friendly) and whether you want a dedicated \u201cPay Calculator Inputs\u201d section with fields (UI-only) for hourly rate, incentives, Kelly days, and work period length.\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":39,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-35","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pay","infinite-scroll-item","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-33"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>48\/96 Schedule Pay Calculator &amp; Firefighter Salary Guide - Oualator<\/title>\n<meta name=\"description\" content=\"Calculate your 48\/96 firefighter pay including FLSA overtime, specialty stipends, and net take-home pay. The most accurate 56-hour work week calculator.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"48\/96 Schedule Pay Calculator &amp; Firefighter Salary Guide - Oualator\" \/>\n<meta property=\"og:description\" content=\"Calculate your 48\/96 firefighter pay including FLSA overtime, specialty stipends, and net take-home pay. The most accurate 56-hour work week calculator.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\" \/>\n<meta property=\"og:site_name\" content=\"Oualator\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-26T12:23:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-27T02:20:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png\" \/>\n\t<meta property=\"og:image:width\" content=\"958\" \/>\n\t<meta property=\"og:image:height\" content=\"639\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"NoaBilane\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"NoaBilane\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\"},\"author\":{\"name\":\"NoaBilane\",\"@id\":\"https:\/\/oualator.com\/measure\/#\/schema\/person\/d014bf241c5152c8f82adac8a3e15043\"},\"headline\":\"48\/96 Schedule Pay Calculator\",\"datePublished\":\"2026-02-26T12:23:00+00:00\",\"dateModified\":\"2026-02-27T02:20:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\"},\"wordCount\":2178,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/oualator.com\/measure\/#organization\"},\"image\":{\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png\",\"articleSection\":[\"Pay\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\",\"url\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\",\"name\":\"48\/96 Schedule Pay Calculator & Firefighter Salary Guide - Oualator\",\"isPartOf\":{\"@id\":\"https:\/\/oualator.com\/measure\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png\",\"datePublished\":\"2026-02-26T12:23:00+00:00\",\"dateModified\":\"2026-02-27T02:20:57+00:00\",\"description\":\"Calculate your 48\/96 firefighter pay including FLSA overtime, specialty stipends, and net take-home pay. The most accurate 56-hour work week calculator.\",\"breadcrumb\":{\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage\",\"url\":\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png\",\"contentUrl\":\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png\",\"width\":958,\"height\":639,\"caption\":\"48\/96 schedule pay\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/oualator.com\/measure\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"48\/96 Schedule Pay Calculator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/oualator.com\/measure\/#website\",\"url\":\"https:\/\/oualator.com\/measure\/\",\"name\":\"Oualator\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/oualator.com\/measure\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/oualator.com\/measure\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/oualator.com\/measure\/#organization\",\"name\":\"Oualator\",\"url\":\"https:\/\/oualator.com\/measure\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oualator.com\/measure\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/03\/cropped-oualator-1-1.png\",\"contentUrl\":\"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/03\/cropped-oualator-1-1.png\",\"width\":500,\"height\":167,\"caption\":\"Oualator\"},\"image\":{\"@id\":\"https:\/\/oualator.com\/measure\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/oualator.com\/measure\/#\/schema\/person\/d014bf241c5152c8f82adac8a3e15043\",\"name\":\"NoaBilane\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/oualator.com\/measure\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g\",\"caption\":\"NoaBilane\"},\"sameAs\":[\"https:\/\/oualator.com\/measure\"],\"url\":\"https:\/\/oualator.com\/measure\/author\/noabilane\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"48\/96 Schedule Pay Calculator & Firefighter Salary Guide - Oualator","description":"Calculate your 48\/96 firefighter pay including FLSA overtime, specialty stipends, and net take-home pay. The most accurate 56-hour work week calculator.","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:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/","og_locale":"en_US","og_type":"article","og_title":"48\/96 Schedule Pay Calculator & Firefighter Salary Guide - Oualator","og_description":"Calculate your 48\/96 firefighter pay including FLSA overtime, specialty stipends, and net take-home pay. The most accurate 56-hour work week calculator.","og_url":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/","og_site_name":"Oualator","article_published_time":"2026-02-26T12:23:00+00:00","article_modified_time":"2026-02-27T02:20:57+00:00","og_image":[{"width":958,"height":639,"url":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png","type":"image\/png"}],"author":"NoaBilane","twitter_card":"summary_large_image","twitter_misc":{"Written by":"NoaBilane","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#article","isPartOf":{"@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/"},"author":{"name":"NoaBilane","@id":"https:\/\/oualator.com\/measure\/#\/schema\/person\/d014bf241c5152c8f82adac8a3e15043"},"headline":"48\/96 Schedule Pay Calculator","datePublished":"2026-02-26T12:23:00+00:00","dateModified":"2026-02-27T02:20:57+00:00","mainEntityOfPage":{"@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/"},"wordCount":2178,"commentCount":1,"publisher":{"@id":"https:\/\/oualator.com\/measure\/#organization"},"image":{"@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png","articleSection":["Pay"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/","url":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/","name":"48\/96 Schedule Pay Calculator & Firefighter Salary Guide - Oualator","isPartOf":{"@id":"https:\/\/oualator.com\/measure\/#website"},"primaryImageOfPage":{"@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage"},"image":{"@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png","datePublished":"2026-02-26T12:23:00+00:00","dateModified":"2026-02-27T02:20:57+00:00","description":"Calculate your 48\/96 firefighter pay including FLSA overtime, specialty stipends, and net take-home pay. The most accurate 56-hour work week calculator.","breadcrumb":{"@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#primaryimage","url":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png","contentUrl":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/04\/schedule-pay.png","width":958,"height":639,"caption":"48\/96 schedule pay"},{"@type":"BreadcrumbList","@id":"https:\/\/oualator.com\/measure\/48-96-schedule-pay-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/oualator.com\/measure\/"},{"@type":"ListItem","position":2,"name":"48\/96 Schedule Pay Calculator"}]},{"@type":"WebSite","@id":"https:\/\/oualator.com\/measure\/#website","url":"https:\/\/oualator.com\/measure\/","name":"Oualator","description":"","publisher":{"@id":"https:\/\/oualator.com\/measure\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/oualator.com\/measure\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/oualator.com\/measure\/#organization","name":"Oualator","url":"https:\/\/oualator.com\/measure\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/measure\/#\/schema\/logo\/image\/","url":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/03\/cropped-oualator-1-1.png","contentUrl":"https:\/\/oualator.com\/measure\/wp-content\/uploads\/2025\/03\/cropped-oualator-1-1.png","width":500,"height":167,"caption":"Oualator"},"image":{"@id":"https:\/\/oualator.com\/measure\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/oualator.com\/measure\/#\/schema\/person\/d014bf241c5152c8f82adac8a3e15043","name":"NoaBilane","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/oualator.com\/measure\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70d88366569bf8d9508ed6385a52290c21d112d7f9f8e8ba174309f9cd69e484?s=96&d=mm&r=g","caption":"NoaBilane"},"sameAs":["https:\/\/oualator.com\/measure"],"url":"https:\/\/oualator.com\/measure\/author\/noabilane\/"}]}},"_links":{"self":[{"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/posts\/35","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/comments?post=35"}],"version-history":[{"count":7,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/posts\/35\/revisions"}],"predecessor-version":[{"id":159,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/posts\/35\/revisions\/159"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/media\/39"}],"wp:attachment":[{"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/media?parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/categories?post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oualator.com\/measure\/wp-json\/wp\/v2\/tags?post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}