{% set page_group = "admin" %} {% include 'components/head.html' %} {# Spec 051 T7 carry-item: meta[name="csrf-token"] (hyphenated) is the exact selector WalkthroughEngine.js's csrfToken() looks for (mirrors OnboardingHub.js's data-csrf-token pattern, get-started.html:28) - the site-wide meta[name="csrf_token"] from components/head.html uses an underscore and is NOT matched by that selector, so without this the walkthrough's POST /walkthrough/:key/state calls would always send an empty CSRF token. window.ONBOARDING_WALKTHROUGH_ENABLED gates WalkthroughEngine.js's bootstrap(): flag off => it renders nothing and never installs the publish fetch-bridge (byte-identical to pre-051). #}
{% include 'components/nav-account.html' %}
{% include 'components/alerts.html' %} {# Premium Trial Banner (Spec 035) - Shows trial status with days remaining #} {% include 'premium/partials/trial-banner.html' %} {# Migration Banner - Shows when hours not configured but legacy localStorage exists #} {# Banner is controlled by JavaScript based on storeHoursLastUpdated #} {# ================================================================ SCHEDULE HEADER - Two-Tier Design (Option C) Primary bar: Brand gradient with high-value actions Secondary bar: Compact contextual controls ================================================================ #}
{# Primary Bar - Title and High-Value Actions #}

{{ page.title }}

Timesheets {% if checkAccess('uri_schedule_ai') and isSchedulingEntitled(typeNum) %} {# AI Generation Status Indicator - shown during processing #}
AI is generating schedule...
{% endif %}
{# Secondary Bar - Contextual Controls #}
{# Navigation - Date arrows and Today #} {# View Switcher #}
{# Schedule Actions #}
{# Copy Day Button - Only visible in Day view #} {# Templates Dropdown #}
{# Display Toggles #}
{# Open Shifts Toggle #} {# Overlays Dropdown #} {# Colors Dropdown #}
{# Status & Utilities #}
{# Day Brief Panel — shows daily leadership summary #} {# Keyholder Coverage Timeline Bar #} {# Schedule Calendar Container #}
{# Schedule container - Syncfusion will mount here #}
{# Overlay Legend Bar - Spec 025 T6.3 #} {# Shows the legend for the currently active overlay (only visible when overlay is active) #}
Overlay
{# Legend items will be dynamically inserted here #}
{# Quick Stats Row #}
0
Employees Scheduled
0
Shifts This Week
0
Open Shifts
0
With Overtime
$0.00
Avg Cost/Hour
{# ========== DAILY TASK ASSIGNMENTS PANEL (Spec 039, Phase 8) ========== #} {# Collapsible panel showing task assignments for today. Manager-only, BuyerKiosk scheduling only. #} {% if checkAccess('workbook_manage_tasks') and store.schedulingProvider is defined and store.schedulingProvider == 'buyerkiosk' %} {# Meta tags for DailyAssignmentView (not present on schedule page by default) #}
Task Assignments 0 groups
{% include 'workbook/partials/daily-assignment-panel.html' %}
{% endif %}
{# ========================================================================== TEMPLATE MODALS - Spec 025 T6.2 ========================================================================== #} {# Save Template Modal - Spec 025 #} {# Load Template Modal - Spec 025 T6.2 #} {# Context Menu for Shift Actions - Spec 023 T2.9.4 #} {# Publish Schedule Modal - Spec 023 Phase 4 #} {# Clear Week Modal #} {# Swap Modal - Spec 023 #} {# Reassign Modal - Spec 023 #} {# Cell Action Context Menu - Spec 022 (Quick Action Menu) #} {# Open Shift Modal - Spec 022 #} {# Open Shift EDIT Modal - Spec 022 (distinct from Create modal) #} {# Copy Day Modal - Copy shifts from current day to another day #} {# Syncfusion CSS & JS loaded via Vite bundle in components/head.html and footer.html #} {# License key is registered from window.SYNCFUSION_LICENSE set in head.html #} {# Spec 025: Schedule Templates & Overlays CSS #} {# Hover tooltip (feedback #22) #} {# Schedule Header Redesign - Two-Tier Design (Option C) #} {# Spec 026: AI Smart Scheduling CSS #} {# Store-time helpers (timezone-safe, store timezone is canonical) #} {# Role Configuration Module - must be before ScheduleCalendar #} {# Schedule Calendar Module #} {# Spec 039: Shift Dialog Task Assignment (Phase 9) - Permission gated #} {% if checkAccess('workbook_manage_tasks') and store.schedulingProvider is defined and store.schedulingProvider == 'buyerkiosk' %} {% endif %} {# Spec 025: Schedule Templates & Overlays JavaScript Modules #} {# Hover tooltip module (feedback #22) #} {# ============================================================================ Spec 026: AI Smart Scheduling Modals ============================================================================ #} {% if checkAccess('uri_schedule_ai') and isSchedulingEntitled(typeNum) %} {% include 'scheduling/partials/ai-config-modal.html' %} {% include 'scheduling/partials/ai-preview-panel.html' %} {# Ably SDK for real-time notifications (AI generation completion) #} {# Sortable.js for priority reordering #} {# ============================================================================ Spec 051: First-schedule walkthrough (M11) — loaded ONLY when the flag is on (engine additionally no-ops unless window.ONBOARDING_WALKTHROUGH_ENABLED is true, stamped in the head; gating the includes keeps the flag-off page byte-identical to pre-051). T7-review finding: these files existed but were never included by any page. ============================================================================ #} {% if isOnboardingWalkthroughEnabled() and isSchedulingEntitled(typeNum) %} {% endif %} {# AI Scheduling Module #} {% endif %} {# ========== DAILY TASK ASSIGNMENTS JS (Spec 039, Phase 8) ========== #} {% if checkAccess('workbook_manage_tasks') and store.schedulingProvider is defined and store.schedulingProvider == 'buyerkiosk' %} {% endif %} {% include 'components/footer.html' %}