<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1, viewport-fit=cover'>
    <title>Clocker | Enter PIN</title>

    <link rel='icon' type='image/png' href='/favicon-96x96.png' sizes='96x96'>
<link rel='icon' type='image/svg+xml' href='/favicon.svg'>
<link rel='shortcut icon' href='/favicon.ico'>
<link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png'>
<link rel='manifest' href='/site.webmanifest'>

        <meta name='theme-color' content='#2754a1'>
    <meta name='apple-mobile-web-app-capable' content='yes'>
    <meta name='mobile-web-app-capable' content='yes'>
    <meta name='apple-mobile-web-app-status-bar-style' content='default'>
    <meta name='apple-mobile-web-app-title' content='DreamJob Clocker'>

    <link rel='stylesheet' href='/assets/front/styles/front-_0erkcr.css'>
    
    <script type='application/json' id='observability-browser-config'>{"enabled":true,"dsn":"https:\/\/3384345225e0f2a9784a33df03916fb8@o1432060.ingest.us.sentry.io\/4511553197506560","environment":"develop","release":"dreamjob-backend@78f4324","route":"clocker_homepage","locale":"en","surface":"front_public","tracesSampleRate":1,"replaysSessionSampleRate":1,"replaysOnErrorSampleRate":1,"tracePropagationTargets":["\/^\\\/\/"]}</script>
    
<script type="importmap" data-turbo-track="reload">
{
    "imports": {
        "observability": "/assets/observability/browser-ZpiqkcZ.js",
        "@sentry/browser": "/assets/vendor/@sentry/browser/browser.index-1wg9g91.js",
        "/assets/observability/url.js": "/assets/observability/url-SsopLzC.js",
        "@sentry-internal/feedback": "/assets/vendor/@sentry-internal/feedback/feedback.index-H_lyqjT.js",
        "@sentry/core": "/assets/vendor/@sentry/core/core.index-hECt-sd.js",
        "@sentry-internal/replay": "/assets/vendor/@sentry-internal/replay/replay.index-PyE4-oO.js",
        "@sentry-internal/replay-canvas": "/assets/vendor/@sentry-internal/replay-canvas/replay-canvas.index-eANLRMt.js",
        "app": "/assets/back/back-kCOCMT9.js",
        "/assets/back/bootstrap.js": "/assets/back/bootstrap-bGbwc7W.js",
        "/assets/@symfony/stimulus-bundle/controllers.js": "/assets/@symfony/stimulus-bundle/controllers-Lb7Vjil.js",
        "/assets/@symfony/ux-autocomplete/controller.js": "/assets/@symfony/ux-autocomplete/controller-FEEd2HP.js",
        "/assets/@symfony/ux-chartjs/controller.js": "/assets/@symfony/ux-chartjs/controller-Gcnh5ai.js",
        "/assets/@symfony/ux-live-component/live_controller.js": "/assets/@symfony/ux-live-component/live_controller-L12cPdP.js",
        "/assets/@symfony/ux-live-component/live.min.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/@symfony/ux-live-component/live.min-WRZuO3t.css'}))",
        "/assets/back/controllers/paystub-history_controller.js": "/assets/back/controllers/paystub-history_controller-NA_GGJm.js",
        "/assets/back/controllers/job_external_toggle_controller.js": "/assets/back/controllers/job_external_toggle_controller-B_NhTKJ.js",
        "/assets/back/controllers/job_open_position_filter_controller.js": "/assets/back/controllers/job_open_position_filter_controller-jpEjuw4.js",
        "/assets/back/controllers/job_ai_description_controller.js": "/assets/back/controllers/job_ai_description_controller-AWu4hh0.js",
        "/assets/back/controllers/job_application_search_controller.js": "/assets/back/controllers/job_application_search_controller-b56pwC8.js",
        "/assets/back/controllers/rich_text_editor_controller.js": "/assets/back/controllers/rich_text_editor_controller-f7vwTRk.js",
        "/assets/back/js/quill.js": "/assets/back/js/quill-Mzr-H-2.js",
        "/assets/front/controllers/mobile_nav_controller.js": "/assets/front/controllers/mobile_nav_controller-LxNablO.js",
        "/assets/front/controllers/jobs_modal_controller.js": "/assets/front/controllers/jobs_modal_controller-Hf83HON.js",
        "/assets/front/controllers/toast_controller.js": "/assets/front/controllers/toast_controller-5vkfrCH.js",
        "/assets/back/controllers/confirm_modal_controller.js": "/assets/back/controllers/confirm_modal_controller-gAv9shH.js",
        "/assets/back/controllers/preferred_payment_method_number_controller.js": "/assets/back/controllers/preferred_payment_method_number_controller-lPkg5EF.js",
        "/assets/back/controllers/preferred_paystub_type_controller.js": "/assets/back/controllers/preferred_paystub_type_controller-Wu121LF.js",
        "/assets/vendor/tom-select/tom-select.index.js": "/assets/vendor/tom-select/tom-select.index-Gl5DD8U.js",
        "/assets/back/controllers/paystub-company_controller.js": "/assets/back/controllers/paystub-company_controller-OEFIkSi.js",
        "/assets/back/controllers/dashboard-active-users-company-chart_controller.js": "/assets/back/controllers/dashboard-active-users-company-chart_controller-ha5ojkU.js",
        "/assets/back/controllers/timesheet_controller.js": "/assets/back/controllers/timesheet_controller-M96cn2E.js",
        "/assets/back/controllers/schedule_controller.js": "/assets/back/controllers/schedule_controller-sZd_M8V.js",
        "/assets/back/controllers/work_history_dates_controller.js": "/assets/back/controllers/work_history_dates_controller-8mPNpC4.js",
        "/assets/back/controllers/click_guard_controller.js": "/assets/back/controllers/click_guard_controller-qnrT3C1.js",
        "/assets/back/controllers/w4_active_controller.js": "/assets/back/controllers/w4_active_controller-DNaEq01.js",
        "/assets/back/controllers/preferred_payment_method_controller.js": "/assets/back/controllers/preferred_payment_method_controller-yXq81TZ.js",
        "/assets/back/controllers/w4_inputs_filing_controller.js": "/assets/back/controllers/w4_inputs_filing_controller-f0Kew0z.js",
        "/assets/back/controllers/w4_inputs_other_controller.js": "/assets/back/controllers/w4_inputs_other_controller-HC_Tdm6.js",
        "/assets/back/controllers/timesheet_workshift_controller.js": "/assets/back/controllers/timesheet_workshift_controller-w7Wwj81.js",
        "/assets/back/controllers/w4_inputs_dependents_controller.js": "/assets/back/controllers/w4_inputs_dependents_controller-4b7nnZo.js",
        "/assets/back/controllers/date-range-filter_controller.js": "/assets/back/controllers/date-range-filter_controller-yYphMIK.js",
        "/assets/back/controllers/work_shift_bulk_lunch_controller.js": "/assets/back/controllers/work_shift_bulk_lunch_controller-FOG96fo.js",
        "/assets/back/controllers/hour_rate_controller.js": "/assets/back/controllers/hour_rate_controller-yqV4rby.js",
        "/assets/back/controllers/timesheet-commit_controller.js": "/assets/back/controllers/timesheet-commit_controller-H6FTZSj.js",
        "/assets/back/controllers/preferred_state_tax_rate_controller.js": "/assets/back/controllers/preferred_state_tax_rate_controller-hSqYg3r.js",
        "/assets/back/controllers/paystub_date_controller.js": "/assets/back/controllers/paystub_date_controller-J0YG4ze.js",
        "/assets/back/controllers/w4_inputs_deductions_controller.js": "/assets/back/controllers/w4_inputs_deductions_controller-KNMoV2J.js",
        "/assets/back/controllers/w4_inputs_multiple_controller.js": "/assets/back/controllers/w4_inputs_multiple_controller-1QZBD1I.js",
        "/assets/back/controllers/project_work_day_controller.js": "/assets/back/controllers/project_work_day_controller-YdiZw-e.js",
        "/assets/back/controllers/userdata_controller.js": "/assets/back/controllers/userdata_controller-WqYlnPv.js",
        "/assets/back/controllers/debounce-form_controller.js": "/assets/back/controllers/debounce-form_controller-MLvk-AX.js",
        "/assets/back/controllers/w4_inputs_extra_controller.js": "/assets/back/controllers/w4_inputs_extra_controller-qZeYEkl.js",
        "/assets/back/controllers/hello_controller.js": "/assets/back/controllers/hello_controller-CLb3tKJ.js",
        "/assets/back/controllers/clock_controller.js": "/assets/back/controllers/clock_controller-N0EKrvz.js",
        "/assets/back/controllers/project_controller.js": "/assets/back/controllers/project_controller-HI50WBf.js",
        "/assets/back/controllers/taxing_state_controller.js": "/assets/back/controllers/taxing_state_controller-QHd-lQG.js",
        "/assets/front/controllers/pay_stubs_modal_controller.js": "/assets/front/controllers/pay_stubs_modal_controller-u6QdAmb.js",
        "/assets/observability/fetch.js": "/assets/observability/fetch-az6a84w.js",
        "/assets/front/controllers/company_hours_table_controller.js": "/assets/front/controllers/company_hours_table_controller-G6LmQlD.js",
        "/assets/front/controllers/course_video_progress_controller.js": "/assets/front/controllers/course_video_progress_controller-1ghutTT.js",
        "/assets/front/controllers/company_project_employees_controller.js": "/assets/front/controllers/company_project_employees_controller-4E98nQ-.js",
        "/assets/front/controllers/account_skill_picker_controller.js": "/assets/front/controllers/account_skill_picker_controller-8jng6Fy.js",
        "/assets/front/controllers/multi_select_controller.js": "/assets/front/controllers/multi_select_controller-8Jn1IX_.js",
        "/assets/front/controllers/carousel_controller.js": "/assets/front/controllers/carousel_controller-AQ4LKZO.js",
        "/assets/front/controllers/job_application_controller.js": "/assets/front/controllers/job_application_controller-SfmLkVA.js",
        "/assets/front/controllers/company_dashboard_chart_controller.js": "/assets/front/controllers/company_dashboard_chart_controller--SGEqph.js",
        "/assets/front/controllers/account_image_upload_controller.js": "/assets/front/controllers/account_image_upload_controller-bJryuiJ.js",
        "/assets/front/controllers/company_live_hours_controller.js": "/assets/front/controllers/company_live_hours_controller-pQOue6W.js",
        "/assets/front/controllers/company_time_sheets_modal_controller.js": "/assets/front/controllers/company_time_sheets_modal_controller-LmMHakT.js",
        "/assets/front/controllers/company_invoices_modal_controller.js": "/assets/front/controllers/company_invoices_modal_controller-eFnv7jM.js",
        "/assets/front/controllers/work_shift_change_request_controller.js": "/assets/front/controllers/work_shift_change_request_controller-Xc0rFEf.js",
        "/assets/front/controllers/account_language_picker_controller.js": "/assets/front/controllers/account_language_picker_controller-Q1OjaNn.js",
        "/assets/front/controllers/job_share_controller.js": "/assets/front/controllers/job_share_controller-ArHfUvk.js",
        "/assets/front/controllers/notifications_controller.js": "/assets/front/controllers/notifications_controller-YGn8UKm.js",
        "/assets/back/fontawesome/css/all.min.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/back/fontawesome/css/all.min-BHhHGPi.css'}))",
        "/assets/back/fontawesome/js/all.min.js": "/assets/back/fontawesome/js/all.min-QeT36SU.js",
        "/assets/back/js/util/swal.js": "/assets/back/js/util/swal-ha7ilY7.js",
        "/assets/back/js/custom.js": "/assets/back/js/custom-zQpCzWL.js",
        "/assets/back/js/util/api.js": "/assets/back/js/util/api-eY4XCtp.js",
        "back": "/assets/back/back-kCOCMT9.js",
        "front": "/assets/front/front-C1TA2ST.js",
        "/assets/front/bootstrap.js": "/assets/front/bootstrap--LaebMT.js",
        "@hotwired/stimulus": "/assets/vendor/@hotwired/stimulus/stimulus.index-ryewcoo.js",
        "@symfony/stimulus-bundle": "/assets/@symfony/stimulus-bundle/loader-IOzBDLu.js",
        "@symfony/ux-live-component": "/assets/@symfony/ux-live-component/live_controller-L12cPdP.js",
        "tom-select/dist/js/tom-select.complete.min": "/assets/vendor/tom-select/dist/js/tom-select.complete.min-_CFAMFB.js",
        "tom-select": "/assets/vendor/tom-select/tom-select.index-Gl5DD8U.js",
        "air-datepicker": "/assets/vendor/air-datepicker/air-datepicker.index-OZbk34E.js",
        "chart.js": "/assets/vendor/chart.js/chart.js.index-VGjA5ML.js",
        "chart.js/auto": "/assets/vendor/chart.js/auto-5sWbPp3.js",
        "jquery": "/assets/vendor/jquery/jquery.index-Mgzl231.js",
        "simple-datatables": "/assets/vendor/simple-datatables/simple-datatables.index-wGP4-QU.js",
        "simple-datatables/dist/style.min.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/simple-datatables/dist/style.min-8kJFb5x.css'}))",
        "byline": "/assets/vendor/byline/byline.index-gX1cnxE.js",
        "underscore.string": "/assets/vendor/underscore.string/underscore.string.index-Gtus3fP.js",
        "through2": "/assets/vendor/through2/through2.index-90O0Nen.js",
        "readable-stream/transform": "/assets/vendor/readable-stream/transform-scQEGI8.js",
        "xtend": "/assets/vendor/xtend/xtend.index-fFgWpsy.js",
        "core-util-is": "/assets/vendor/core-util-is/core-util-is.index-tX_Fd_I.js",
        "inherits": "/assets/vendor/inherits/inherits.index-oNkFO9F.js",
        "isarray": "/assets/vendor/isarray/isarray.index-0m5wHiQ.js",
        "string_decoder": "/assets/vendor/string_decoder/string_decoder.index-IjGZIxa.js",
        "alpinejs": "/assets/vendor/alpinejs/alpinejs.index-CHrt03f.js",
        "@symfony/stimulus-bridge": "/assets/vendor/@symfony/stimulus-bridge/stimulus-bridge.index-Pxc8eCp.js",
        "@alpinejs/collapse": "/assets/vendor/@alpinejs/collapse/collapse.index-n0B0PIk.js",
        "@alpinejs/persist": "/assets/vendor/@alpinejs/persist/persist.index-HHuMAxr.js",
        "@alpinejs/ui": "/assets/vendor/@alpinejs/ui/ui.index-Uc2R4Pf.js",
        "@alpinejs/focus": "/assets/vendor/@alpinejs/focus/focus.index--NCnk3f.js",
        "@tailwindcss/forms": "/assets/vendor/@tailwindcss/forms/forms.index-UeCcbW2.js",
        "mini-svg-data-uri": "/assets/vendor/mini-svg-data-uri/mini-svg-data-uri.index-8tqEvGH.js",
        "tailwindcss/plugin": "/assets/vendor/tailwindcss/plugin-XtYXJ7P.js",
        "tailwindcss/defaultTheme": "/assets/vendor/tailwindcss/defaultTheme-Huhzvw5.js",
        "tailwindcss/colors": "/assets/vendor/tailwindcss/colors-y1aSNv0.js",
        "picocolors": "/assets/vendor/picocolors/picocolors.index-niBP467.js",
        "tom-select/dist/css/tom-select.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/tom-select/dist/css/tom-select-WZKDbwL.css'}))",
        "tom-select/dist/css/tom-select.bootstrap5.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/tom-select/dist/css/tom-select.bootstrap5-PmntfHB.css'}))",
        "tom-select/dist/css/tom-select.default.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/tom-select/dist/css/tom-select.default-EUMPfwl.css'}))",
        "sweetalert2": "/assets/vendor/sweetalert2/sweetalert2.index-YnXYxwh.js",
        "file-upload-with-preview": "/assets/vendor/file-upload-with-preview/file-upload-with-preview.index-A1bLptX.js",
        "file-upload-with-preview/dist/style.min.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/file-upload-with-preview/dist/style.min-5mWeoP4.css'}))",
        "perfect-scrollbar": "/assets/vendor/perfect-scrollbar/perfect-scrollbar.index-cSnVEM6.js",
        "perfect-scrollbar/css/perfect-scrollbar.min.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/perfect-scrollbar/css/perfect-scrollbar.min-4ug8RRA.css'}))",
        "tom-select/dist/css/tom-select.bootstrap4.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/tom-select/dist/css/tom-select.bootstrap4--gGdn36.css'}))",
        "@hotwired/turbo": "/assets/vendor/@hotwired/turbo/turbo.index-5nPu7kj.js",
        "@sentry-internal/browser-utils": "/assets/vendor/@sentry-internal/browser-utils/browser-utils.index-BBOTxz4.js",
        "@glidejs/glide": "/assets/vendor/@glidejs/glide/glide.index-TlI7qAc.js",
        "@glidejs/glide/dist/css/glide.core.min.css": "data:application/javascript,document.head.appendChild(Object.assign(document.createElement('link'),{rel:'stylesheet',href:'/assets/vendor/@glidejs/glide/dist/css/glide.core.min-YCvavn9.css'}))"
    }
}
</script><script data-turbo-track="reload">
if (!HTMLScriptElement.supports || !HTMLScriptElement.supports('importmap')) (function () {
    const script = document.createElement('script');
    script.src = 'https://ga.jspm.io/npm:es-module-shims@1.10.0/dist/es-module-shims.js';
    if (document.currentScript?.nonce) script.nonce = document.currentScript.nonce;
    script.setAttribute('crossorigin', 'anonymous');
    script.setAttribute('integrity', 'sha384-ie1x72Xck445i0j4SlNJ5W5iGeL3Dpa0zD48MZopgWsjNB/lt60SuG1iduZGNnJn');
    script.setAttribute('data-turbo-track', 'reload');
    document.head.appendChild(script);
})();
</script>
<link rel="modulepreload" href="/assets/observability/browser-ZpiqkcZ.js">
<link rel="modulepreload" href="/assets/vendor/@sentry/browser/browser.index-1wg9g91.js">
<link rel="modulepreload" href="/assets/observability/url-SsopLzC.js">
<link rel="modulepreload" href="/assets/vendor/@sentry-internal/feedback/feedback.index-H_lyqjT.js">
<link rel="modulepreload" href="/assets/vendor/@sentry/core/core.index-hECt-sd.js">
<link rel="modulepreload" href="/assets/vendor/@sentry-internal/replay/replay.index-PyE4-oO.js">
<link rel="modulepreload" href="/assets/vendor/@sentry-internal/replay-canvas/replay-canvas.index-eANLRMt.js">
<script type="module" data-turbo-track="reload">import 'observability';</script></head>
<body class='clocker-body min-h-[100svh] bg-[radial-gradient(circle_at_top,_rgba(9,105,195,0.12),_transparent_38%),linear-gradient(180deg,_#fff8ec_0%,_#ffffff_35%,_#e6f0f9_100%)] text-landing-text antialiased'>
    <section class="flex min-h-[100svh] items-center justify-center px-4 py-8">
        <div class="w-full max-w-xl rounded-2xl border border-landing-border bg-white/95 p-6 shadow-[0_20px_60px_rgba(0,39,69,0.10)] backdrop-blur md:p-8">
            <div class="mb-6 text-center">
                <img class="mx-auto mb-4 h-14 w-auto" src="/assets/logos/logo-ysoJAvp.webp" alt="DreamJob Staffing"/>
                <h1 class="text-2xl font-semibold text-landing-dark">DreamJob Clocker</h1>
                <p class="mt-2 text-landing-copy">Enter your site PIN to continue</p>
            </div>

            
            
            <form name="clocker_pin" method="post" class="space-y-4" autocomplete="off">
            <div>
                <label class="mb-1 block text-sm font-medium text-landing-dark required" for="clocker_pin_pin">PIN</label>
                <input type="password" id="clocker_pin_pin" name="clocker_pin[pin]" required="required" autocomplete="off" inputmode="numeric" pattern="[0-9]*" placeholder="Enter PIN" id="pin" maxlength="4" minlength="4" class="w-full rounded-lg border border-landing-border px-3 py-2 text-center text-2xl tracking-widest focus:border-landing-main focus:outline-none focus:ring-2 focus:ring-landing-main/40" />
                
            </div>

            <div class="grid select-none grid-cols-3 gap-3" id="pinpad">
                                    <button type="button" data-digit="1"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">1</button>
                                    <button type="button" data-digit="2"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">2</button>
                                    <button type="button" data-digit="3"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">3</button>
                                    <button type="button" data-digit="4"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">4</button>
                                    <button type="button" data-digit="5"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">5</button>
                                    <button type="button" data-digit="6"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">6</button>
                                    <button type="button" data-digit="7"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">7</button>
                                    <button type="button" data-digit="8"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">8</button>
                                    <button type="button" data-digit="9"
                            class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">9</button>
                                <button type="button" data-action="clear"
                        class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">⌫
                </button>
                <button type="button" data-digit="0"
                        class="rounded-xl border border-landing-border bg-white py-4 text-xl font-semibold text-landing-dark shadow-sm transition hover:border-landing-main hover:text-landing-main">0
                </button>
                <button type="submit"
                        class="rounded-xl bg-landing-main py-4 text-xl font-semibold text-white shadow-sm transition hover:bg-landing-dark">OK
                </button>
            </div>

            <button type="submit"
                    class="w-full rounded-xl bg-landing-main px-4 py-3 font-semibold text-white shadow-sm transition hover:bg-landing-dark">
                Continue
            </button>
            <input type="hidden" id="clocker_pin__token" name="clocker_pin[_token]" data-controller="csrf-protection" class=" mt-1 w-full form-input" value="csrf-token" /></form>
        </div>
    </section>

<script>
  (function () {
    function tick() {
      var label = new Date().toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'});
      document.querySelectorAll('[data-clock]').forEach(function (el) {
        el.textContent = label;
      });
    }

    tick();
    setInterval(tick, 1000);

    // Require N consecutive clicks before a kiosk nav link actually navigates.
    document.querySelectorAll('[data-click-guard]').forEach(function (el) {
      var required = parseInt(el.getAttribute('data-click-guard'), 10) || 5;
      var count = 0;
      el.addEventListener('click', function (event) {
        count += 1;
        if (count < required) {
          event.preventDefault();
        } else {
          count = 0;
        }
      });
    });

    if ('serviceWorker' in navigator) {
      window.addEventListener('load', function () {
        navigator.serviceWorker.register('/service-worker.js').catch(function (err) {
          console.warn('ServiceWorker registration failed:', err);
        });
      });
    }
  })();
</script>
    <script>
      window.addEventListener('load', function () {
        const pad = document.getElementById('pinpad');
        const pin = document.getElementById('pin') || document.getElementById('clocker_pin_pin');
        if (pad && pin) {
          pad.addEventListener('click', function (e) {
            const btn = e.target.closest('button');
            if (!btn) return;
            const dig = btn.getAttribute('data-digit');
            const act = btn.getAttribute('data-action');
            if (dig) {
              if (pin.value.length < 4) {
                pin.value += dig;
              }
            }
            if (act === 'clear') {
              pin.value = pin.value.slice(0, -1);
            }
          });
        }
      });
    </script>
    </body>
</html>
