{"id":2618132,"date":"2026-03-17T17:41:07","date_gmt":"2026-03-17T17:41:07","guid":{"rendered":"https:\/\/www.airriderz.com\/mississauga\/?page_id=2618132"},"modified":"2026-06-17T19:23:15","modified_gmt":"2026-06-17T19:23:15","slug":"invitation-card","status":"publish","type":"page","link":"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/","title":{"rendered":"Invitation Card"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2618132\" class=\"elementor elementor-2618132\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f58caa2 e-flex e-con-boxed e-con e-parent\" data-id=\"f58caa2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-149cc5d elementor-widget elementor-widget-html\" data-id=\"149cc5d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link\r\n    href=\"https:\/\/fonts.googleapis.com\/css2?family=Barlow+Condensed:wght@700;800;900&family=Barlow:wght@400;500;600;700&display=swap\"\r\n    rel=\"stylesheet\">\r\n\r\n<style>\r\n    .sz*,\r\n    .sz*::before,\r\n    .sz*::after {\r\n        box-sizing: border-box;\r\n        margin: 0;\r\n        padding: 0;\r\n    }\r\n\r\n    .sz {\r\n        --acc: #00ff00;\r\n        --acc2: #00cc00;\r\n        --btn: #0000ff;\r\n        --btnH: #0000cc;\r\n        --bg: #ffffff;\r\n        --f1: 'Barlow', sans-serif;\r\n        --f2: 'Barlow Condensed', sans-serif;\r\n        --txt: #1a1a1a;\r\n        --txt2: #555;\r\n        --txt3: #999;\r\n        --bdr: #d0d0d0;\r\n        --bdrF: #0000ff;\r\n        --err: #cc3300;\r\n        background: var(--bg);\r\n        color: var(--txt);\r\n        font-family: var(--f1);\r\n        font-size: 15px;\r\n        line-height: 1.5;\r\n        padding: 32px 24px 48px;\r\n    }\r\n\r\n    \/* \u2500\u2500 two-column grid \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-grid {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 48px;\r\n        max-width: 1100px;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    @media(max-width:780px) {\r\n        .sz-grid {\r\n            grid-template-columns: 1fr;\r\n        }\r\n\r\n        .sz-right {\r\n            order: -1;\r\n        }\r\n\r\n        .sz-grid {\r\n            display: block;\r\n        }\r\n\r\n        .sz-bg-thumb {\r\n            width: 90px !important;\r\n        }\r\n\r\n\r\n        .sz {\r\n            padding: 0px !important\r\n        }\r\n    }\r\n\r\n    \/* \u2500\u2500 shared label style \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-lbl {\r\n        display: block;\r\n        font-size: 15px;\r\n        font-weight: 700;\r\n        color: var(--txt);\r\n        margin-bottom: 10px;\r\n    }\r\n\r\n    .sz-lbl .req {\r\n        color: var(--err);\r\n    }\r\n\r\n    \/* \u2500\u2500 form group spacing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-grp {\r\n        margin-bottom: 28px;\r\n    }\r\n\r\n    \/* \u2500\u2500 background picker \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-bgs {\r\n        display: flex;\r\n        gap: 12px;\r\n    }\r\n\r\n    .sz-bg-opt {\r\n        position: relative;\r\n        cursor: pointer;\r\n        width: 100px;\r\n    }\r\n\r\n    .sz-bg-opt input[type=radio] {\r\n        position: absolute;\r\n        opacity: 0;\r\n        width: 0;\r\n        height: 0;\r\n    }\r\n\r\n    .sz-bg-thumb {\r\n        display: block;\r\n        width: 100px;\r\n        height: 120px;\r\n        border-radius: 4px;\r\n        border: 2px solid var(--bdr);\r\n        overflow: hidden;\r\n        transition: border-color .15s, box-shadow .15s;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .sz-bg-opt input:checked+.sz-bg-thumb {\r\n        border-color: var(--btn);\r\n        box-shadow: 0 0 0 3px rgba(0, 0, 255, .18);\r\n    }\r\n\r\n    .sz-bg-opt:hover .sz-bg-thumb {\r\n        border-color: #aaa;\r\n    }\r\n\r\n    .sz-bg-thumb canvas {\r\n        width: 100%;\r\n        height: 100%;\r\n        display: block;\r\n    }\r\n\r\n    \/* \u2500\u2500 date dropdowns \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-date-row {\r\n        display: flex;\r\n        gap: 10px;\r\n    }\r\n\r\n    .sz-date-row .sz-sel-wrap {\r\n        flex: 1;\r\n    }\r\n\r\n    \/* \u2500\u2500 time row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-time-row {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 20px;\r\n    }\r\n\r\n    @media(max-width:500px) {\r\n        .sz-time-row {\r\n            grid-template-columns: 1fr;\r\n        }\r\n    }\r\n\r\n    .sz-time-group {}\r\n\r\n    .sz-time-inner {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 6px;\r\n    }\r\n\r\n    .sz-time-colon {\r\n        font-size: 18px;\r\n        font-weight: 700;\r\n        color: var(--txt2);\r\n        line-height: 1;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    \/* \u2500\u2500 select \/ input base \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-sel,\r\n    .sz-inp {\r\n        width: 100%;\r\n        background: #fff;\r\n        border: 1px solid var(--bdr);\r\n        border-radius: 4px;\r\n        padding: 9px 12px;\r\n        color: var(--txt);\r\n        font-family: var(--f1);\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        outline: none;\r\n        appearance: none;\r\n        -webkit-appearance: none;\r\n        transition: border-color .15s, box-shadow .15s;\r\n    }\r\n\r\n    .sz-sel {\r\n        background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23888'\/%3E%3C\/svg%3E\");\r\n        background-repeat: no-repeat;\r\n        background-position: right 10px center;\r\n        background-size: 8px;\r\n        padding-right: 28px;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .sz-sel:focus,\r\n    .sz-inp:focus {\r\n        border-color: var(--bdrF);\r\n        box-shadow: 0 0 0 3px rgba(0, 0, 255, .12);\r\n    }\r\n\r\n    .sz-inp::placeholder {\r\n        color: var(--txt3);\r\n    }\r\n\r\n    .sz-sel.sz-sm {\r\n        width: auto;\r\n        min-width: 72px;\r\n    }\r\n\r\n    .sz-sel.sz-ampm {\r\n        min-width: 70px;\r\n    }\r\n\r\n    .sz-inp.err,\r\n    .sz-sel.err {\r\n        border-color: var(--err);\r\n    }\r\n\r\n    \/* character counter *\/\r\n    .sz-counter {\r\n        font-size: 12px;\r\n        color: var(--acc2);\r\n        margin-top: 5px;\r\n        font-weight: 600;\r\n    }\r\n\r\n    .sz-counter.warn {\r\n        color: var(--err);\r\n    }\r\n\r\n    \/* \u2500\u2500 RSVP section heading \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-rsvp-head {\r\n        font-size: 18px;\r\n        font-weight: 700;\r\n        color: var(--txt);\r\n        margin-bottom: 20px;\r\n        padding-top: 4px;\r\n    }\r\n\r\n    \/* \u2500\u2500 two-field row \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-2col {\r\n        display: grid;\r\n        grid-template-columns: 1fr 1fr;\r\n        gap: 16px;\r\n        margin-bottom: 20px;\r\n    }\r\n\r\n    @media(max-width:420px) {\r\n        .sz-2col {\r\n            grid-template-columns: 1fr;\r\n        }\r\n    }\r\n\r\n    .sz-field {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 6px;\r\n    }\r\n\r\n    \/* \u2500\u2500 generate button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-gen-wrap {\r\n        margin-top: 10px;\r\n        display: flex;\r\n        justify-content: flex-end;\r\n    }\r\n\r\n    .sz-gen {\r\n        padding: 12px 32px;\r\n        background: #fff;\r\n        color: var(--btn);\r\n        border: 2px solid var(--btn);\r\n        border-radius: 4px;\r\n        font-family: var(--f1);\r\n        font-size: 15px;\r\n        font-weight: 800;\r\n        letter-spacing: .1em;\r\n        text-transform: uppercase;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        transition: background .15s, color .15s, box-shadow .15s;\r\n    }\r\n\r\n    .sz-gen:hover {\r\n        background: var(--btn);\r\n        color: #fff;\r\n        box-shadow: 0 4px 18px rgba(0, 0, 255, .25);\r\n    }\r\n\r\n    .sz-gen:disabled {\r\n        opacity: .5;\r\n        cursor: default;\r\n    }\r\n\r\n    \/* messages *\/\r\n    .sz-msg {\r\n        display: none;\r\n        margin-top: 12px;\r\n        padding: 10px 14px;\r\n        border-radius: 4px;\r\n        font-size: 13px;\r\n        font-weight: 600;\r\n    }\r\n\r\n    .sz-msg-err {\r\n        background: #fff5f5;\r\n        border: 1px solid #ffcccc;\r\n        color: var(--err);\r\n    }\r\n\r\n    .sz-msg-ok {\r\n        background: #f0fff0;\r\n        border: 1px solid rgba(0, 200, 0, .4);\r\n        color: #007700;\r\n    }\r\n\r\n    \/* \u2500\u2500 RIGHT COLUMN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n    .sz-right-lbl {\r\n        font-size: 15px;\r\n        font-weight: 700;\r\n        color: var(--txt);\r\n        margin-bottom: 14px;\r\n    }\r\n\r\n    \/* small preview thumbnails  *\/\r\n    .sz-preview-thumbs {\r\n        display: none;\r\n        gap: 10px;\r\n        margin-bottom: 18px;\r\n    }\r\n\r\n    .sz-prev-thumb {\r\n        flex: 1;\r\n        border-radius: 4px;\r\n        overflow: hidden;\r\n        border: 2px solid transparent;\r\n        cursor: pointer;\r\n        transition: border-color .15s, opacity .15s;\r\n        opacity: .45;\r\n    }\r\n\r\n    .sz-prev-thumb.active {\r\n        border-color: var(--btn);\r\n        opacity: 1;\r\n    }\r\n\r\n    .sz-prev-thumb canvas {\r\n        width: 100%;\r\n        aspect-ratio: 660\/686;\r\n        display: block;\r\n    }\r\n\r\n    \/* main invitation canvas *\/\r\n    .sz-canvas-wrap {\r\n        border: 1px solid #e0e0e0;\r\n        border-radius: 6px;\r\n        overflow: hidden;\r\n        background: #f5f5f5;\r\n        position: relative;\r\n        min-height: 300px;\r\n    }\r\n\r\n    .sz-canvas-wrap canvas {\r\n        width: 100%;\r\n        display: block;\r\n    }\r\n\r\n    \/* placeholder state *\/\r\n    .sz-placeholder {\r\n        position: absolute;\r\n        inset: 0;\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 12px;\r\n        background: #f8f8f8;\r\n        transition: opacity .3s;\r\n    }\r\n\r\n    .sz-placeholder.gone {\r\n        opacity: 0;\r\n        pointer-events: none;\r\n    }\r\n\r\n    .sz-placeholder svg {\r\n        opacity: .25;\r\n    }\r\n\r\n    .sz-placeholder p {\r\n        font-size: 13px;\r\n        color: #aaa;\r\n        text-align: center;\r\n    }\r\n\r\n    \/* post-generate actions *\/\r\n    .sz-actions {\r\n        display: none;\r\n        flex-direction: column;\r\n        gap: 10px;\r\n        margin-top: 14px;\r\n    }\r\n\r\n    .sz-actions.show {\r\n        display: flex;\r\n    }\r\n\r\n    .sz-dl {\r\n        width: 100%;\r\n        padding: 12px 20px;\r\n        background: var(--btn);\r\n        color: #fff;\r\n        border: none;\r\n        border-radius: 4px;\r\n        font-family: var(--f1);\r\n        font-size: 14px;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        transition: background .15s, box-shadow .15s;\r\n    }\r\n\r\n    .sz-dl:hover {\r\n        background: var(--btnH);\r\n        box-shadow: 0 4px 16px rgba(0, 0, 255, .25);\r\n    }\r\n\r\n    .sz-email-btn {\r\n        width: 100%;\r\n        padding: 11px 20px;\r\n        background: #fff;\r\n        color: var(--txt);\r\n        border: 1px solid var(--bdr);\r\n        border-radius: 4px;\r\n        font-family: var(--f1);\r\n        font-size: 13px;\r\n        font-weight: 600;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        transition: border-color .15s;\r\n    }\r\n\r\n    .sz-email-btn:hover {\r\n        border-color: #aaa;\r\n    }\r\n\r\n\r\n    \/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n   Selected background overlay + check icon\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n\r\n.sz-bg-thumb{\r\n    position: relative !important;\r\n}\r\n\r\n.sz-bg-opt input:checked + .sz-bg-thumb::before{\r\n    content:'';\r\n    position:absolute;\r\n    inset:0;\r\n    background:rgba(0,0,0,0.15);\r\n    z-index:5;\r\n}\r\n\r\n.sz-bg-opt input:checked + .sz-bg-thumb::after{\r\n    content:'\u2713';\r\n    position:absolute;\r\n    top:6px;\r\n    right:6px;\r\n    width:24px;\r\n    height:24px;\r\n    border-radius:50%;\r\n    background:#00CC00;\r\n    color:#fff;\r\n\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n\r\n    font-size:15px;\r\n    font-weight:700;\r\n\r\n    z-index:10;\r\n\r\n    box-shadow:0 2px 6px rgba(0,0,0,.25);\r\n}\r\n\r\n\/* keep canvas below overlay *\/\r\n.sz-bg-thumb canvas{\r\n    position:relative;\r\n    z-index:1;\r\n}\r\n<\/style>\r\n\r\n<div class=\"sz\" id=\"sz-root\">\r\n    <div class=\"sz-grid\">\r\n\r\n        <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 LEFT: FORM \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\r\n        <div class=\"sz-left\">\r\n            <form id=\"szForm\" novalidate>\r\n\r\n                <!-- 1. Background -->\r\n                <div class=\"sz-grp\">\r\n                    <label class=\"sz-lbl\">Select a background: <span class=\"req\">*<\/span><\/label>\r\n                    <div class=\"sz-bgs\" id=\"szBgs\">\r\n                        <label class=\"sz-bg-opt\">\r\n                            <input type=\"radio\" name=\"sz_bg\" value=\"0\" checked id=\"szBg0\">\r\n                            <span class=\"sz-bg-thumb\"><canvas id=\"szBgC0\" width=\"100\" height=\"120\"><\/canvas><\/span>\r\n                        <\/label>\r\n                        <label class=\"sz-bg-opt\">\r\n                            <input type=\"radio\" name=\"sz_bg\" value=\"1\" id=\"szBg1\">\r\n                            <span class=\"sz-bg-thumb\"><canvas id=\"szBgC1\" width=\"100\" height=\"120\"><\/canvas><\/span>\r\n                        <\/label>\r\n                        <label class=\"sz-bg-opt\">\r\n                            <input type=\"radio\" name=\"sz_bg\" value=\"2\" id=\"szBg2\">\r\n                            <span class=\"sz-bg-thumb\"><canvas id=\"szBgC2\" width=\"100\" height=\"120\"><\/canvas><\/span>\r\n                        <\/label>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- 2. Party date -->\r\n                <div class=\"sz-grp\">\r\n                    <label class=\"sz-lbl\">When is your party? <span class=\"req\">*<\/span><\/label>\r\n                    <div class=\"sz-date-row\">\r\n                        <div class=\"sz-sel-wrap\">\r\n                            <select class=\"sz-sel\" id=\"szMM\">\r\n                                <option value=\"\">MM<\/option>\r\n                                <option value=\"1\">January<\/option>\r\n                                <option value=\"2\">February<\/option>\r\n                                <option value=\"3\">March<\/option>\r\n                                <option value=\"4\">April<\/option>\r\n                                <option value=\"5\">May<\/option>\r\n                                <option value=\"6\">June<\/option>\r\n                                <option value=\"7\">July<\/option>\r\n                                <option value=\"8\">August<\/option>\r\n                                <option value=\"9\">September<\/option>\r\n                                <option value=\"10\">October<\/option>\r\n                                <option value=\"11\">November<\/option>\r\n                                <option value=\"12\">December<\/option>\r\n                            <\/select>\r\n                        <\/div>\r\n                        <div class=\"sz-sel-wrap\">\r\n                            <select class=\"sz-sel\" id=\"szDD\">\r\n                                <option value=\"\">DD<\/option>\r\n                            <\/select>\r\n                        <\/div>\r\n                        <div class=\"sz-sel-wrap\">\r\n                            <select class=\"sz-sel\" id=\"szYY\">\r\n                                <option value=\"\">YYYY<\/option>\r\n                            <\/select>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- 3. Times -->\r\n                <div class=\"sz-grp\">\r\n                    <div class=\"sz-time-row\">\r\n                        <!-- check-in time -->\r\n                        <div class=\"sz-time-group\">\r\n                            <label class=\"sz-lbl\">Check-In Time:<span class=\"req\">*<\/span><span style=\"font-size:11px;\">\r\n                                    (15 mins. before jump time)<\/span> <\/label>\r\n                            <div class=\"sz-time-inner\">\r\n                                <select class=\"sz-sel sz-sm\" id=\"szCIH\">\r\n                                    <option value=\"\">HH<\/option>\r\n                                    <option>1<\/option>\r\n                                    <option>2<\/option>\r\n                                    <option>3<\/option>\r\n                                    <option>4<\/option>\r\n                                    <option>5<\/option>\r\n                                    <option>6<\/option>\r\n                                    <option>7<\/option>\r\n                                    <option>8<\/option>\r\n                                    <option>9<\/option>\r\n                                    <option>10<\/option>\r\n                                    <option>11<\/option>\r\n                                    <option>12<\/option>\r\n                                <\/select>\r\n                                <span class=\"sz-time-colon\">:<\/span>\r\n                                <select class=\"sz-sel sz-sm\" id=\"szCIM\">\r\n                                    <option value=\"\">MM<\/option>\r\n                                    <option>00<\/option>\r\n                                    <option>15<\/option>\r\n                                    <option>30<\/option>\r\n                                    <option>45<\/option>\r\n                                <\/select>\r\n                                <select class=\"sz-sel sz-ampm\" id=\"szCIAP\">\r\n                                    <option value=\"\">AM\/PM<\/option>\r\n                                    <option>AM<\/option>\r\n                                    <option>PM<\/option>\r\n                                <\/select>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <!-- end time -->\r\n                        <div class=\"sz-time-group\">\r\n                            <label class=\"sz-lbl\">End Time:<span class=\"req\">*<\/span><span style=\"font-size:11px;\">\r\n                                    (Scheduled room end time)<\/span> <\/label>\r\n                            <div class=\"sz-time-inner\">\r\n                                <select class=\"sz-sel sz-sm\" id=\"szETH\">\r\n                                    <option value=\"\">HH<\/option>\r\n                                    <option>1<\/option>\r\n                                    <option>2<\/option>\r\n                                    <option>3<\/option>\r\n                                    <option>4<\/option>\r\n                                    <option>5<\/option>\r\n                                    <option>6<\/option>\r\n                                    <option>7<\/option>\r\n                                    <option>8<\/option>\r\n                                    <option>9<\/option>\r\n                                    <option>10<\/option>\r\n                                    <option>11<\/option>\r\n                                    <option>12<\/option>\r\n                                <\/select>\r\n                                <span class=\"sz-time-colon\">:<\/span>\r\n                                <select class=\"sz-sel sz-sm\" id=\"szETM\">\r\n                                    <option value=\"\">MM<\/option>\r\n                                    <option>00<\/option>\r\n                                    <option>15<\/option>\r\n                                    <option>30<\/option>\r\n                                    <option>45<\/option>\r\n                                <\/select>\r\n                                <select class=\"sz-sel sz-ampm\" id=\"szETAP\">\r\n                                    <option value=\"\">AM\/PM<\/option>\r\n                                    <option>AM<\/option>\r\n                                    <option>PM<\/option>\r\n                                <\/select>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- 4. Celebration name -->\r\n                <div class=\"sz-grp\">\r\n                    <label class=\"sz-lbl\" for=\"szCel\">What are you celebrating? <span class=\"req\">*<\/span><\/label>\r\n                    <input class=\"sz-inp\" type=\"text\" id=\"szCel\" maxlength=\"72\"\r\n                        placeholder=\"Enter the name of your party\">\r\n                    <div class=\"sz-counter\" id=\"szCounter\">0 of 72 max characters<\/div>\r\n                <\/div>\r\n\r\n                <!-- 5. RSVP contact -->\r\n                <div class=\"sz-rsvp-head\">Who should people contact to RSVP?<\/div>\r\n\r\n                <div class=\"sz-2col\">\r\n                    <div class=\"sz-field\">\r\n                        <label class=\"sz-lbl\" for=\"szFN\">First Name: <span class=\"req\">*<\/span><\/label>\r\n                        <input class=\"sz-inp\" type=\"text\" id=\"szFN\" placeholder=\"\">\r\n                    <\/div>\r\n                    <div class=\"sz-field\">\r\n                        <label class=\"sz-lbl\" for=\"szLN\">Last Name: <span class=\"req\">*<\/span><\/label>\r\n                        <input class=\"sz-inp\" type=\"text\" id=\"szLN\" placeholder=\"\">\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"sz-2col\">\r\n                    <div class=\"sz-field\">\r\n                        <label class=\"sz-lbl\" for=\"szPhone\">Phone Number: <span class=\"req\">*<\/span><\/label>\r\n                        <input class=\"sz-inp\" type=\"tel\" id=\"szPhone\" placeholder=\"\">\r\n                    <\/div>\r\n                    <div class=\"sz-field\">\r\n                        <label class=\"sz-lbl\" for=\"szEmail\">Email Address: <span class=\"req\">*<\/span><\/label>\r\n                        <input class=\"sz-inp\" type=\"email\" id=\"szEmail\" placeholder=\"\">\r\n                    <\/div>\r\n                <\/div>\r\n\r\n\r\n                <div class=\"sz-grp\">\r\n                    <label class=\"sz-lbl\" for=\"szGroupID\">\r\n                       Party\/Group ID:\r\n                        <span style=\"font-size:11px;\">\r\n                            (Can be found on your e-receipt. Different from the sale ID)\r\n                        <\/span>\r\n                    <\/label>\r\n\r\n                    <input class=\"sz-inp\" type=\"text\" id=\"szGroupID\" placeholder=\"Enter Party\/Group ID\">\r\n                <\/div>\r\n\r\n                <div class=\"sz-grp\">\r\n                    <label class=\"sz-lbl\" for=\"szRSVPBy\">\r\n                        RSVP By Date: <span class=\"req\">*<\/span>\r\n                    <\/label>\r\n                    <input class=\"sz-inp\" type=\"date\" id=\"szRSVPBy\">\r\n                <\/div>\r\n\r\n                <!-- errors -->\r\n                <div id=\"szErr\" class=\"sz-msg sz-msg-err\"><\/div>\r\n                <div id=\"szOk\" class=\"sz-msg sz-msg-ok\"><\/div>\r\n\r\n                <!-- generate -->\r\n                <div class=\"sz-gen-wrap\">\r\n                    <button type=\"submit\" class=\"sz-gen\" id=\"szGenBtn\">\r\n                        GENERATE\r\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n                            stroke-width=\"3\">\r\n                            <path d=\"M5 12h14M13 6l6 6-6 6\" \/>\r\n                        <\/svg>\r\n                    <\/button>\r\n                <\/div>\r\n\r\n            <\/form>\r\n        <\/div>\r\n\r\n        <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 RIGHT: PREVIEW \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\r\n        <div class=\"sz-right\">\r\n            <div class=\"sz-right-lbl\">Sample Invitation:<\/div>\r\n\r\n            <!-- 3 pattern preview thumbnails -->\r\n            <div class=\"sz-preview-thumbs\" id=\"szPrevThumbs\">\r\n                <div class=\"sz-prev-thumb active\" data-p=\"0\"><canvas id=\"szPT0\" width=\"220\" height=\"229\"><\/canvas><\/div>\r\n                <div class=\"sz-prev-thumb\" data-p=\"1\"><canvas id=\"szPT1\" width=\"220\" height=\"229\"><\/canvas><\/div>\r\n                <div class=\"sz-prev-thumb\" data-p=\"2\"><canvas id=\"szPT2\" width=\"220\" height=\"229\"><\/canvas><\/div>\r\n\r\n            <\/div>\r\n\r\n            <!-- main canvas -->\r\n            <div class=\"sz-canvas-wrap\">\r\n                <canvas id=\"szCanvas\" width=\"660\" height=\"950\"><\/canvas>\r\n                <div class=\"sz-placeholder\" id=\"szPlaceholder\">\r\n                    <svg width=\"56\" height=\"56\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#bbb\" stroke-width=\"1.5\">\r\n                        <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" \/>\r\n                        <path d=\"M3 9h18M9 21V9\" \/>\r\n                    <\/svg>\r\n                    <p>Fill in the form and click<br><strong>GENERATE<\/strong> to see your invitation<\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- post-generate actions -->\r\n            <div class=\"sz-actions\" id=\"szActions\">\r\n                <button class=\"sz-dl\" onclick=\"szDownload()\">\r\n                    <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n                        stroke-width=\"2.5\">\r\n                        <path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\" \/>\r\n                    <\/svg>\r\n                    Download Invitation PNG\r\n                <\/button>\r\n                <button class=\"sz-email-btn\" id=\"szEmailBtn\" style=\"display:none\">\r\n                    <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n                        <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" \/>\r\n                        <polyline points=\"22,6 12,13 2,6\" \/>\r\n                    <\/svg>\r\n                    Send via Email\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n\r\n    <\/div><!-- .sz-grid -->\r\n<\/div><!-- .sz -->\r\n\r\n<script>\r\n\r\n    \/\/ Pre-load the logo\r\n    const arLogo = new Image();\r\n    arLogo.src = 'https:\/\/www.airriderz.com\/wp-content\/uploads\/logo.png';\r\n\r\n    \/\/ Pre-load the QR Code\r\n    const waiverQR = new Image();\r\n    waiverQR.src = 'http:\/\/www.airriderz.com\/mississauga\/wp-content\/uploads\/2026\/05\/Mississauga-Waiver-QR-Code.jpg';\r\n\r\n    (function () {\r\n        'use strict';\r\n\r\n        \/* \u2500\u2500 CONFIG \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n           Set SEND_URL to your PHP backend to enable email delivery.\r\n           Leave '' for download-only mode (no backend required).              *\/\r\n        var SEND_URL = '';\r\n\r\n        var PARK = {\r\n            name: 'Air Riderz Trampoline Park',\r\n            address: '3600 Ridgeway Drive, Unit 4 & 5',\r\n            city: 'Mississauga, ON L5L 0B4',\r\n            waiver: 'www.airriderz.com\/mississauga\/waiver\/',\r\n            url: 'https:\/\/www.airriderz.com\/mississauga\/'\r\n        };\r\n\r\n       \/* \u2500\u2500 BACKGROUND PATTERNS \u2500\u2500\u2500\u2500\u2500\u2500       *\/\r\n        var PATTERNS = [\r\n               \/\/ Pattern 0: blue bg, blob shapes, pink diagonal stripes\r\n            {\r\n                bg: '#0000cc',\r\n                shapes: [\r\n                    { type: 'blob', color: '#74B94C' },\r\n                    { type: 'stripes', color: '#ff66cc' }\r\n                ]\r\n            },\r\n            \/\/ Pattern 1: Light mint\/green tones\r\n            {\r\n                bg: '#e8fff0',\r\n                shapes: [\r\n                    { type: 'blob', color: '#00cc00' },\r\n                    { type: 'rect', color: '#0000ff' },\r\n                    { type: 'circle2', color: 'rgba(0,0,255,0.2)' }\r\n                ]\r\n            },\r\n            \/\/ Pattern 2: light green watercolor wash, splatter, dark blue bottom band\r\n            {\r\n                bg: '#0000cc',\r\n                shapes: [\r\n                    { type: 'splatter', color: '#74B94C' }\r\n                ]\r\n            }\r\n        ];\r\n\r\n \/* \u2500\u2500 DRAW PATTERN ON CANVAS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function drawPattern(ctx, w, h, pi) {\r\n            var p = PATTERNS[pi];\r\n\r\n            \/\/ background\r\n            ctx.fillStyle = p.bg;\r\n            ctx.fillRect(0, 0, w, h);\r\n\r\n           \/\/ --- Pattern 0: blue bg, blob shapes, pink diagonal stripes ---\r\n            if (pi === 0) {\r\n                \/\/ diagonal stripe lines (pink only)\r\n                ctx.save();\r\n                ctx.strokeStyle = '#ff66cc';\r\n                ctx.lineWidth = w * 0.045;\r\n                for (var i = -h; i < w + h; i += w * 0.13) {\r\n                    ctx.beginPath();\r\n                    ctx.moveTo(i, 0);\r\n                    ctx.lineTo(i + h, h);\r\n                    ctx.stroke();\r\n                }\r\n                ctx.restore();\r\n\r\n                \/\/ white circles\r\n                ctx.fillStyle = 'rgba(255,255,255,0.15)';\r\n                ctx.beginPath(); ctx.arc(w * 0.85, h * 0.45, w * 0.09, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.12, h * 0.6, w * 0.07, 0, Math.PI * 2); ctx.fill();\r\n                \/\/ blue accent blobs\r\n                ctx.fillStyle = 'rgba(0,100,255,0.5)';\r\n                drawWave(ctx, w * 0.5, h * 0.1, w * 0.2, h * 0.18);\r\n                drawWave(ctx, w * 0.1, h * 0.45, w * 0.16, h * 0.15);\r\n            }\r\n\r\n            \/\/ --- Pattern 1: light mint\/green tones ---\r\n            if (pi === 1) {\r\n                ctx.fillStyle = '#92b57c';\r\n                drawWave(ctx, w * 0.02, h * 0.05, w * 0.22, h * 0.28);\r\n                drawWave(ctx, w * 0.6, h * 0.6, w * 0.22, h * 0.28);\r\n\r\n                ctx.fillStyle = '#0000cc';\r\n                drawRotRect(ctx, w * 0.7, h * 0.05, w * 0.1, h * 0.08, 12);\r\n                drawRotRect(ctx, w * 0.82, h * 0.78, w * 0.1, h * 0.08, -10);\r\n                drawRotRect(ctx, w * 0.04, h * 0.6, w * 0.09, h * 0.07, 15);\r\n\r\n                ctx.fillStyle = 'rgba(0,0,204,0.2)';\r\n                ctx.beginPath(); ctx.arc(w * 0.78, h * 0.2, w * 0.1, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.2, h * 0.8, w * 0.08, 0, Math.PI * 2); ctx.fill();\r\n            }\r\n\r\n            \/\/ --- Pattern 2: light green watercolor wash, splatter, dark blue bottom band, squiggle ---\r\n            if (pi === 2) {\r\n                \/\/ light green\/white watercolor background\r\n                ctx.fillStyle = '#eaf6e4';\r\n                ctx.fillRect(0, 0, w, h);\r\n\r\n                \/\/ soft white streaks\r\n                ctx.save();\r\n                ctx.fillStyle = 'rgba(255,255,255,0.55)';\r\n                for (var s = 0; s < 14; s++) {\r\n                    ctx.save();\r\n                    ctx.translate(w * (0.05 + (s % 7) * 0.13), h * (0.05 + Math.floor(s \/ 7) * 0.45) + (s % 3) * h * 0.05);\r\n                    ctx.rotate(-0.45);\r\n                    ctx.fillRect(0, 0, w * 0.6, h * 0.012);\r\n                    ctx.restore();\r\n                }\r\n                ctx.restore();\r\n\r\n                \/\/ green dashed border curve top-right\r\n                ctx.strokeStyle = '#74B94C';\r\n                ctx.lineWidth = h * 0.012;\r\n                ctx.setLineDash([h * 0.018, h * 0.012]);\r\n                ctx.beginPath();\r\n                ctx.moveTo(w * 0.45, -h * 0.02);\r\n                ctx.quadraticCurveTo(w * 0.65, h * 0.1, w * 1.02, h * 0.07);\r\n                ctx.stroke();\r\n                ctx.setLineDash([]);\r\n\r\n                \/\/ green corner fill (top-right)\r\n                ctx.fillStyle = '#74B94C';\r\n                ctx.beginPath();\r\n                ctx.moveTo(w * 0.55, -h * 0.02);\r\n                ctx.quadraticCurveTo(w * 0.7, h * 0.06, w * 1.02, h * 0.04);\r\n                ctx.lineTo(w * 1.02, -h * 0.02);\r\n                ctx.closePath();\r\n                ctx.fill();\r\n\r\n                \/\/ splatter blobs (paint splash)\r\n                ctx.fillStyle = 'rgba(116,185,76,0.55)';\r\n                ctx.beginPath(); ctx.arc(w * 0.78, h * 0.27, w * 0.085, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.66, h * 0.32, w * 0.022, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.6, h * 0.36, w * 0.012, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.5, h * 0.27, w * 0.028, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.42, h * 0.34, w * 0.018, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.38, h * 0.38, w * 0.01, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.86, h * 0.18, w * 0.012, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.9, h * 0.32, w * 0.01, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.52, h * 0.31, w * 0.008, 0, Math.PI * 2); ctx.fill();\r\n                ctx.beginPath(); ctx.arc(w * 0.58, h * 0.41, w * 0.008, 0, Math.PI * 2); ctx.fill();\r\n\r\n                \/\/ dark blue bottom band\r\n                var bandY = h * 0.745;\r\n                ctx.fillStyle = '#0000cc';\r\n                ctx.fillRect(0, bandY, w, h - bandY);\r\n\r\n                \/\/ green squiggle on blue band\r\n                ctx.strokeStyle = '#74B94C';\r\n                ctx.lineWidth = h * 0.0065;\r\n                ctx.beginPath();\r\n                ctx.moveTo(0, bandY + h * 0.1);\r\n                ctx.bezierCurveTo(w * 0.18, bandY + h * 0.04, w * 0.22, bandY + h * 0.18, w * 0.38, bandY + h * 0.16);\r\n                ctx.bezierCurveTo(w * 0.5, bandY + h * 0.14, w * 0.4, bandY + h * 0.02, w * 0.46, bandY + h * 0.0);\r\n                ctx.bezierCurveTo(w * 0.55, bandY - h * 0.02, w * 0.6, bandY + h * 0.18, w * 0.75, bandY + h * 0.16);\r\n                ctx.bezierCurveTo(w * 0.88, bandY + h * 0.14, w * 0.92, bandY + h * 0.22, w, bandY + h * 0.2);\r\n                ctx.stroke();\r\n            }\r\n        }\r\n\r\n        function drawWave(ctx, x, y, w, h) {\r\n            ctx.beginPath();\r\n            ctx.moveTo(x, y + h * 0.5);\r\n            ctx.bezierCurveTo(x + w * 0.2, y, x + w * 0.4, y + h, x + w * 0.5, y + h * 0.5);\r\n            ctx.bezierCurveTo(x + w * 0.6, y, x + w * 0.8, y + h, x + w, y + h * 0.5);\r\n            ctx.lineTo(x + w, y + h * 1.5);\r\n            ctx.bezierCurveTo(x + w * 0.8, y + h, x + w * 0.6, y + h * 2, x + w * 0.5, y + h * 1.5);\r\n            ctx.bezierCurveTo(x + w * 0.4, y + h, x + w * 0.2, y + h * 2, x, y + h * 1.5);\r\n            ctx.closePath();\r\n            ctx.fill();\r\n        }\r\n\r\n        function drawRotRect(ctx, x, y, w, h, deg) {\r\n            ctx.save();\r\n            ctx.translate(x + w \/ 2, y + h \/ 2);\r\n            ctx.rotate(deg * Math.PI \/ 180);\r\n            ctx.fillRect(-w \/ 2, -h \/ 2, w, h);\r\n            ctx.restore();\r\n        }\r\n\r\n        function drawWaveLine(ctx, x1, y, x2, baseY, amp) {\r\n            var segs = 12;\r\n            ctx.beginPath();\r\n            ctx.moveTo(x1, baseY);\r\n            for (var i = 0; i <= segs; i++) {\r\n                var px = x1 + (x2 - x1) * i \/ segs;\r\n                var py = baseY + Math.sin(i \/ segs * Math.PI * 4) * amp * (baseY \/ 600);\r\n                i === 0 ? ctx.moveTo(px, py) : ctx.lineTo(px, py);\r\n            }\r\n            ctx.stroke();\r\n        }\r\n\r\n\r\n\r\n        \/* \u2500\u2500 DRAW THUMBNAIL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function drawThumb(canvasId, w, h, pi) {\r\n            var c = document.getElementById(canvasId);\r\n            if (!c) return;\r\n            c.width = w; c.height = h;\r\n            var ctx = c.getContext('2d');\r\n            drawPattern(ctx, w, h, pi);\r\n        }\r\n\r\n        \/* \u2500\u2500 POPULATE YEAR DROPDOWN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function populateYears() {\r\n            var sel = document.getElementById('szYY');\r\n            var yr = new Date().getFullYear();\r\n            for (var y = yr; y <= yr + 3; y++) {\r\n                var o = document.createElement('option');\r\n                o.value = y; o.textContent = y;\r\n                sel.appendChild(o);\r\n            }\r\n        }\r\n\r\n        \/* \u2500\u2500 POPULATE DAY DROPDOWN \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function populateDays(month, year) {\r\n            var sel = document.getElementById('szDD');\r\n            var cur = sel.value;\r\n            while (sel.options.length > 1) sel.remove(1);\r\n            var days = 31;\r\n            if (month && year) days = new Date(year, month, 0).getDate();\r\n            else if (month) days = new Date(2024, month, 0).getDate();\r\n            for (var d = 1; d <= days; d++) {\r\n                var o = document.createElement('option');\r\n                o.value = d; o.textContent = d < 10 ? '0' + d : d;\r\n                sel.appendChild(o);\r\n            }\r\n            if (cur) sel.value = cur;\r\n        }\r\n\r\n        \/* \u2500\u2500 HELPERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function gv(id) { var e = document.getElementById(id); return e ? e.value : ''; }\r\n        var MONTHS_SHORT = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n        var MONTHS_LONG = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n\r\n        function fmtDate(m, d, y) {\r\n            if (!m || !d || !y) return '';\r\n            return MONTHS_LONG[+m] + ' ' + (+d) + ', ' + y;\r\n        }\r\n        function fmtTime(h, m, ap) {\r\n            if (!h || !m || !ap) return '';\r\n            return h + ':' + m + ' ' + ap;\r\n        }\r\n\r\n        \/* \u2500\u2500 VALIDATE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function validate() {\r\n            var errs = [];\r\n            if (!gv('szMM') || !gv('szDD') || !gv('szYY')) errs.push('Please select a full party date.');\r\n            if (!gv('szCIH') || !gv('szCIM') || !gv('szCIAP')) errs.push('Please select a check-in time.');\r\n            if (!gv('szETH') || !gv('szETM') || !gv('szETAP')) errs.push('Please select an end time.');\r\n            if (!gv('szCel').trim()) errs.push('Please enter what you are celebrating.');\r\n            if (!gv('szFN').trim()) errs.push('First name is required.');\r\n            if (!gv('szLN').trim()) errs.push('Last name is required.');\r\n            if (!gv('szPhone').trim()) errs.push('Phone number is required.');\r\n            if (!gv('szRSVPBy')) errs.push('Please select RSVP by date.');\r\n            var em = gv('szEmail').trim();\r\n            if (!em || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(em)) errs.push('A valid email address is required.');\r\n            return errs;\r\n        }\r\n\r\n\r\n        function drawInvite(pi) {\r\n            var canvas = document.getElementById('szCanvas');\r\n            var ctx = canvas.getContext('2d');\r\n            var CW = 660, CH = 950;\r\n\r\n            \/\/ 1. Full-bleed background pattern\r\n            drawPattern(ctx, CW, CH, pi);\r\n\r\n            \/\/ 2. Inner black content panel\r\n            var PX = CW * 0.13,  \/\/ left edge of panel\r\n                PY = CH * 0.10,  \/\/ top edge of panel\r\n                PW = CW * 0.6,   \/\/ panel width\r\n                PH = CH * 0.75; \/\/ panel height\r\n            ctx.fillStyle = '#ffffff';\r\n            ctx.fillRect(PX, PY, PW, PH);\r\n\r\n            \/\/ slight border accent on left edge of panel\r\n            ctx.fillStyle = '#00ff00';\r\n            ctx.fillRect(PX, PY, 4, PH);\r\n\r\n            var TX = PX + 28; \/\/ text left margin inside panel\r\n            var TW = PW - 56; \/\/ text max width\r\n\r\n            \/\/ 3. Logo area \u2014 Air Riderz logo image\r\n            var logoY = PY + 22;\r\n            var logoH = 46;\r\n            var logoW = arLogo.naturalWidth ? (arLogo.naturalWidth \/ arLogo.naturalHeight) * logoH : 130;\r\n            if (arLogo.complete && arLogo.naturalWidth) {\r\n                ctx.drawImage(arLogo, TX, logoY, logoW, logoH);\r\n            }\r\n\r\n            \/\/ 4. \"YOU'RE INVITED\" \u2014 massive display type\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = '900 ' + Math.round(CW * 0.112) + 'px \"Barlow Condensed\",\"Barlow\",sans-serif';\r\n            ctx.textAlign = 'left';\r\n            var invY = logoY + 120;\r\n            ctx.fillText(\"YOU'RE\", TX, invY);\r\n            ctx.fillText(\"INVITED\", TX, invY + Math.round(CW * 0.116));\r\n\r\n            \/\/ 5. \"Please join us on [date] for\"\r\n            var dateStr = fmtDate(gv('szMM'), gv('szDD'), gv('szYY'));\r\n            var infoY = invY + Math.round(CW * 0.116) + 38;\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = '500 14px \"Barlow\",sans-serif';\r\n            ctx.fillText('Please join us on ' + (dateStr || '[date]') + ' for', TX, infoY);\r\n\r\n            \/\/ 6. Celebration name \u2014 bold, accent green colour\r\n            var celText = (gv('szCel') || 'WHAT WE ARE CELEBRATING').toUpperCase();\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = 'bold 18px \"Barlow Condensed\",\"Barlow\",sans-serif';\r\n            var celY = infoY + 36;\r\n            \/\/ word-wrap the celebration name\r\n            ctx.fillStyle = '#0000cc';\r\n            celY = wrapCanvasText(ctx, celText, TX, celY, TW, 22) + 28;\r\n\r\n            \/\/ 7. Time lines\r\n            var ciTime = fmtTime(gv('szCIH'), gv('szCIM'), gv('szCIAP'));\r\n            var etTime = fmtTime(gv('szETH'), gv('szETM'), gv('szETAP'));\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = '600 13px \"Barlow\",sans-serif';\r\n            if (ciTime) { ctx.fillText('Check In Time: ' + ciTime, TX, celY + 4); celY += 30; }\r\n            if (etTime) { ctx.fillText('Party End Time: ' + etTime, TX, celY + 4); celY += 30; }\r\n\r\n            celY += 22;\r\n\r\n            \/\/ 8. Park name + address\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = 'bold 14px \"Barlow\",sans-serif';\r\n            ctx.fillText(PARK.name, TX, celY);\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = '500 13px \"Barlow\",sans-serif';\r\n            ctx.fillText(PARK.address, TX, celY + 18);\r\n            ctx.fillText(PARK.city, TX, celY + 34);\r\n            celY += 58;\r\n\r\n            \/\/ Group\/Jump ID\r\n            var groupId = gv('szGroupID') || 'N\/A';\r\n\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = 'bold 13px \"Barlow\",sans-serif';\r\n            ctx.fillText('Party\/Group ID:', TX, celY);\r\n\r\n            ctx.font = '500 13px \"Barlow\",sans-serif';\r\n            ctx.fillText(groupId, TX + 115, celY);\r\n\r\n            celY += 34;\r\n\r\n            \/\/ 9. RSVP line\r\n            var fn = gv('szFN'), ln = gv('szLN'), ph = gv('szPhone'), em = gv('szEmail');\r\n            var rsvpName = ((fn + ' ' + ln).trim()) || 'Firstname Lastname';\r\n            var rsvpPhone = ph || '555-555-5555';\r\n            var rsvpEmail = em || 'name@email.com';\r\n            ctx.fillStyle = '#000000';\r\n            ctx.font = '500 13px \"Barlow\",sans-serif';\r\n            var rsvpLine1 = 'Please RSVP by contacting ' + rsvpName + ' at';\r\n            celY = wrapCanvasText(ctx, rsvpLine1, TX, celY, TW, 18) + 24;\r\n            \/\/ phone in white, email in accent\r\n            var pW = ctx.measureText(rsvpPhone).width;\r\n            ctx.fillText(rsvpPhone, TX, celY);\r\n            ctx.fillStyle = '#0000cc';\r\n            ctx.fillText(' or ' + rsvpEmail, TX + pW, celY);\r\n            celY += 25;\r\n\r\n            var rsvpBy = gv('szRSVPBy');\r\n\r\n            if (rsvpBy) {\r\n                var rsvpByDate = new Date(rsvpBy);\r\n                var formattedRSVPBy =\r\n                    rsvpByDate.toLocaleDateString('en-US', {\r\n                        year: 'numeric',\r\n                        month: 'long',\r\n                        day: 'numeric'\r\n                    });\r\n\r\n                ctx.fillStyle = '#000000';\r\n                ctx.font = '600 13px \"Barlow\",sans-serif';\r\n                ctx.fillText('Please RSVP by: ' + formattedRSVPBy, TX, celY + 18);\r\n\r\n                celY += 2;\r\n            }\r\n\r\n\r\n            \/\/ 10. CTA waiver button bar\r\ncelY += 50;\r\n           \r\nvar btnY = celY;\r\nvar btnHeight = 52;\r\nvar btnX = PX + 14;\r\nvar btnWidth = PW - 28;\r\n\r\nctx.save();\r\n\r\n\/\/ 1. Clear the area first to wipe out any ghost artifacts\r\nctx.clearRect(btnX, btnY, btnWidth, btnHeight);\r\n\r\n\/\/ 2. Draw the Button Background\r\nctx.fillStyle = '#00CC00';\r\nctx.fillRect(btnX, btnY, btnWidth, btnHeight);\r\n\r\n\/\/ Define Column Widths (80% \/ 20%)\r\nvar textColWidth = btnWidth * 0.80;\r\nvar arrowColWidth = btnWidth * 0.20;\r\n\r\n\/\/ Calculate Positions\r\nvar btnCenterY = btnY + (btnHeight \/ 2);\r\nvar textLeftPadding = btnX + 12; \r\nvar arrowCenterX = btnX + textColWidth + (arrowColWidth \/ 2);\r\n\r\n\/\/ 3. Configure & Draw Text (Left Column - 80%)\r\nctx.fillStyle = '#000000';\r\nctx.font = 'bold 10px \"Barlow Condensed\", \"Barlow\", sans-serif';\r\nctx.textAlign = 'left';\r\nctx.textBaseline = 'middle';\r\n\r\nctx.fillText('FILL OUT A WAIVER ONLINE AT:', textLeftPadding, btnCenterY - 13);\r\nctx.fillText(PARK.waiver.toUpperCase(), textLeftPadding, btnCenterY);\r\nctx.fillText('Or scan the QR code to complete your waiver online', textLeftPadding, btnCenterY + 13);\r\n\r\n\/\/ 4. Configure & Draw Arrow (Right Column - 20%)\r\nctx.font = 'bold 34px \"Barlow Condensed\", \"Barlow\", sans-serif';\r\nctx.textAlign = 'center';\r\n\r\nctx.fillText('\u2193', arrowCenterX, btnCenterY);\r\n\r\n\/\/ Clean up path state\r\nctx.beginPath();\r\n\r\nctx.restore();\r\n\r\n            \/\/ 11. Disclaimer footer with QR CODE\r\n            var FOOTER_H = 80; \/\/ increased height\r\n            var FOOTER_Y = PY + PH - FOOTER_H;\r\n            var discY = celY + 70;\r\n            ctx.fillStyle = '#000000';\r\n            ctx.fillRect(PX, discY, PW, FOOTER_H);\r\n\r\n            \/\/ QR size + position\r\n            var qrSize = 65; \/\/ slightly larger for clarity\r\n\r\n            var qrPadding = 5;\r\n            var qrX = PX + PW - qrSize - qrPadding;\r\n            var qrY = discY + 5; \/\/ more top breathing space\r\n\r\n            if (waiverQR.complete) {\r\n                ctx.drawImage(waiverQR, qrX, qrY, qrSize, qrSize);\r\n            }\r\n\r\n            \/\/ text block\r\n            ctx.fillStyle = '#ffffff';\r\n            ctx.font = '500 13px \"Barlow\",sans-serif';\r\n            ctx.textAlign = 'left';\r\n\r\n            var textX = TX;\r\n            var textY = discY + 24;\r\n            ctx.fillText(\r\n                'All jumpers must have a signed waiver on file',\r\n                textX,\r\n                textY\r\n            );\r\n\r\n             ctx.fillText(\r\n                'prior to jumping. Anyone under 18 must have a ',\r\n                textX,\r\n                textY + 18\r\n            );\r\n\r\n            ctx.fillText(\r\n                'waiver signed by their parent or legal guardian.',\r\n                textX,\r\n                textY + 36\r\n            );\r\n      }\r\n\r\n        \/* word-wrap helper for canvas *\/\r\n        function wrapCanvasText(ctx, text, x, y, maxW, lineH) {\r\n            var words = text.split(' '), line = '';\r\n            for (var n = 0; n < words.length; n++) {\r\n                var test = line + (line ? ' ' : '') + words[n];\r\n                if (ctx.measureText(test).width > maxW && n > 0) {\r\n                    ctx.fillText(line, x, y);\r\n                    line = words[n]; y += lineH;\r\n                } else line = test;\r\n            }\r\n            ctx.fillText(line, x, y);\r\n            return y;\r\n        }\r\n\r\n        \/* \u2500\u2500 INIT THUMBNAILS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function initThumbs() {\r\n            \/\/ form picker thumbs\r\n            for (var i = 0; i < 3; i++) drawThumb('szBgC' + i, 100, 120, i);\r\n            \/\/ right-column preview mini-thumbs\r\n            for (var j = 0; j < 3; j++) drawThumb('szPT' + j, 220, 229, j);\r\n        }\r\n\r\n        \/* \u2500\u2500 SYNC PICKERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        function getSelectedBg() {\r\n            var radios = document.getElementsByName('sz_bg');\r\n            for (var i = 0; i < radios.length; i++) if (radios[i].checked) return +radios[i].value;\r\n            return 0;\r\n        }\r\n\r\n        \/\/ clicking right-column preview thumb selects that bg\r\n        document.getElementById('szPrevThumbs').addEventListener('click', function (e) {\r\n            var t = e.target.closest('.sz-prev-thumb');\r\n            if (!t) return;\r\n            var p = +t.dataset.p;\r\n            document.querySelectorAll('.sz-prev-thumb').forEach(function (el) { el.classList.remove('active'); });\r\n            t.classList.add('active');\r\n            \/\/ sync left radio\r\n            var r = document.getElementById('szBg' + p);\r\n            if (r) r.checked = true;\r\n        });\r\n\r\n        \/\/ clicking left radio syncs right-column thumbs\r\n        document.getElementById('szBgs').addEventListener('change', function (e) {\r\n            var val = e.target.value;\r\n            document.querySelectorAll('.sz-prev-thumb').forEach(function (el) { el.classList.remove('active'); });\r\n            var pt = document.querySelector('.sz-prev-thumb[data-p=\"' + val + '\"]');\r\n            if (pt) pt.classList.add('active');\r\n        });\r\n\r\n        \/* \u2500\u2500 CHARACTER COUNTER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        document.getElementById('szCel').addEventListener('input', function () {\r\n            var len = this.value.length;\r\n            var counter = document.getElementById('szCounter');\r\n            counter.textContent = len + ' of 72 max characters';\r\n            counter.className = 'sz-counter' + (len > 60 ? ' warn' : '');\r\n        });\r\n\r\n        \/* \u2500\u2500 DATE DROPDOWNS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        document.getElementById('szMM').addEventListener('change', function () {\r\n            populateDays(this.value, gv('szYY'));\r\n        });\r\n        document.getElementById('szYY').addEventListener('change', function () {\r\n            populateDays(gv('szMM'), this.value);\r\n        });\r\n\r\n        \/* \u2500\u2500 FORM SUBMIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        document.getElementById('szForm').addEventListener('submit', async function (e) {\r\n            e.preventDefault();\r\n\r\n            var errEl = document.getElementById('szErr');\r\n            var okEl = document.getElementById('szOk');\r\n            var btn = document.getElementById('szGenBtn');\r\n            errEl.style.display = okEl.style.display = 'none';\r\n\r\n            var errs = validate();\r\n            if (errs.length) {\r\n                errEl.innerHTML = errs.join('<br>');\r\n                errEl.style.display = 'block';\r\n                errEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n                return;\r\n            }\r\n\r\n            \/\/ draw the invite\r\n            var pi = getSelectedBg();\r\n            drawInvite(pi);\r\n\r\n            \/\/ hide placeholder\r\n            document.getElementById('szPlaceholder').classList.add('gone');\r\n\r\n            \/\/ show download actions\r\n            document.getElementById('szActions').classList.add('show');\r\n            if (SEND_URL) document.getElementById('szEmailBtn').style.display = 'flex';\r\n\r\n            \/\/ scroll to preview on mobile\r\n            if (window.innerWidth < 820) {\r\n                document.getElementById('szCanvas').scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n            }\r\n\r\n            \/\/ send to backend if configured\r\n            if (SEND_URL) {\r\n                btn.disabled = true;\r\n                btn.innerHTML = 'Sending\u2026 <span style=\"opacity:.6\">\u21bb<\/span>';\r\n                try {\r\n                    var fd = new FormData();\r\n                    fd.append('ar_action', 'send_invite');\r\n                    fd.append('celebration', gv('szCel'));\r\n                    fd.append('party_date', gv('szYY') + '-' + String(gv('szMM')).padStart(2, '0') + '-' + String(gv('szDD')).padStart(2, '0'));\r\n                    fd.append('start_time', gv('szCIH') + ':' + gv('szCIM') + ' ' + gv('szCIAP'));\r\n                    fd.append('end_time', gv('szETH') + ':' + gv('szETM') + ' ' + gv('szETAP'));\r\n                    fd.append('first_name', gv('szFN'));\r\n                    fd.append('last_name', gv('szLN'));\r\n                    fd.append('phone', gv('szPhone'));\r\n                    fd.append('email', gv('szEmail'));\r\n                    fd.append('bg_theme', String(pi));\r\n                    fd.append('rsvp_by', gv('szRSVPBy'));\r\n                    fd.append('invite_image', document.getElementById('szCanvas').toDataURL('image\/png'));\r\n\r\n                    var res = await fetch(SEND_URL, { method: 'POST', body: fd });\r\n                    var data = await res.json();\r\n                    if (data.success) {\r\n                        okEl.textContent = '\u2713 ' + data.message;\r\n                        okEl.style.display = 'block';\r\n                    } else {\r\n                        errEl.textContent = data.message || 'Email delivery failed \u2014 please download the invitation.';\r\n                        errEl.style.display = 'block';\r\n                    }\r\n                } catch (ex) {\r\n                    errEl.textContent = 'Network error \u2014 your invitation is ready to download below.';\r\n                    errEl.style.display = 'block';\r\n                }\r\n                btn.disabled = false;\r\n                btn.innerHTML = 'GENERATE <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>';\r\n            }\r\n        });\r\n\r\n        \/* \u2500\u2500 DOWNLOAD \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        window.szDownload = function () {\r\n            var errs = validate();\r\n            if (errs.length) { drawInvite(getSelectedBg()); }\r\n            var a = document.createElement('a');\r\n            a.download = 'airriderz-invitation.png';\r\n            a.href = document.getElementById('szCanvas').toDataURL('image\/png');\r\n            a.click();\r\n        };\r\n\r\n        \/* \u2500\u2500 BOOT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n        populateYears();\r\n        populateDays('', '');\r\n        initThumbs();\r\n\r\n    }());\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Select a background: * When is your party? * MMJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember DD YYYY Check-In Time:* (15 mins. before jump time) HH123456789101112 : MM00153045 AM\/PMAMPM End Time:* (Scheduled room end time) HH123456789101112 : MM00153045 AM\/PMAMPM What are you celebrating? * 0 of 72 max characters Who should people contact to RSVP? First Name: * Last Name: * &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Invitation Card&#8221;<\/span><\/a><\/p>\n","protected":false},"author":9,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-2618132","page","type-page","status-publish","hentry","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Invitation Card<\/title>\n<meta name=\"description\" content=\"Air Riderz Trampoline Park Mississauga offer a number of programs and packages for families, fitness enthusiasts, and anyone who loves to have a blast! Invitation Card | Contact Now!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Invitation Card\" \/>\n<meta property=\"og:description\" content=\"Air Riderz Trampoline Park Mississauga offer a number of programs and packages for families, fitness enthusiasts, and anyone who loves to have a blast! Invitation Card | Contact Now!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/\" \/>\n<meta property=\"og:site_name\" content=\"Air Riderz Trampoline Park Mississauga\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/airriderzmississauga\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-17T19:23:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.airriderz.com\/mississauga\/wp-content\/uploads\/2020\/03\/logo-7.png\" \/>\n\t<meta property=\"og:image:width\" content=\"147\" \/>\n\t<meta property=\"og:image:height\" content=\"111\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@AirRiderz\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/invitation-card\\\/\",\"url\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/invitation-card\\\/\",\"name\":\"Invitation Card\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/#website\"},\"datePublished\":\"2026-03-17T17:41:07+00:00\",\"dateModified\":\"2026-06-17T19:23:15+00:00\",\"description\":\"Air Riderz Trampoline Park Mississauga offer a number of programs and packages for families, fitness enthusiasts, and anyone who loves to have a blast! Invitation Card | Contact Now!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/invitation-card\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/invitation-card\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/invitation-card\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Invitation Card\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/#website\",\"url\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/\",\"name\":\"Air Riderz Trampoline Park Mississauga\",\"description\":\"We Get Any Party JUMPIN&#039;!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/#organization\",\"name\":\"Air Riderz Trampoline Park Mississauga\",\"url\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/logo-7.png\",\"contentUrl\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/wp-content\\\/uploads\\\/2020\\\/03\\\/logo-7.png\",\"width\":147,\"height\":111,\"caption\":\"Air Riderz Trampoline Park Mississauga\"},\"image\":{\"@id\":\"https:\\\/\\\/www.airriderz.com\\\/mississauga\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/airriderzmississauga\",\"https:\\\/\\\/x.com\\\/AirRiderz\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Invitation Card","description":"Air Riderz Trampoline Park Mississauga offer a number of programs and packages for families, fitness enthusiasts, and anyone who loves to have a blast! Invitation Card | Contact Now!","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:\/\/www.airriderz.com\/mississauga\/invitation-card\/","og_locale":"en_US","og_type":"article","og_title":"Invitation Card","og_description":"Air Riderz Trampoline Park Mississauga offer a number of programs and packages for families, fitness enthusiasts, and anyone who loves to have a blast! Invitation Card | Contact Now!","og_url":"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/","og_site_name":"Air Riderz Trampoline Park Mississauga","article_publisher":"https:\/\/www.facebook.com\/airriderzmississauga","article_modified_time":"2026-06-17T19:23:15+00:00","og_image":[{"width":147,"height":111,"url":"https:\/\/www.airriderz.com\/mississauga\/wp-content\/uploads\/2020\/03\/logo-7.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@AirRiderz","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/","url":"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/","name":"Invitation Card","isPartOf":{"@id":"https:\/\/www.airriderz.com\/mississauga\/#website"},"datePublished":"2026-03-17T17:41:07+00:00","dateModified":"2026-06-17T19:23:15+00:00","description":"Air Riderz Trampoline Park Mississauga offer a number of programs and packages for families, fitness enthusiasts, and anyone who loves to have a blast! Invitation Card | Contact Now!","breadcrumb":{"@id":"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.airriderz.com\/mississauga\/invitation-card\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.airriderz.com\/mississauga\/invitation-card\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.airriderz.com\/mississauga\/"},{"@type":"ListItem","position":2,"name":"Invitation Card"}]},{"@type":"WebSite","@id":"https:\/\/www.airriderz.com\/mississauga\/#website","url":"https:\/\/www.airriderz.com\/mississauga\/","name":"Air Riderz Trampoline Park Mississauga","description":"We Get Any Party JUMPIN&#039;!","publisher":{"@id":"https:\/\/www.airriderz.com\/mississauga\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.airriderz.com\/mississauga\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.airriderz.com\/mississauga\/#organization","name":"Air Riderz Trampoline Park Mississauga","url":"https:\/\/www.airriderz.com\/mississauga\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.airriderz.com\/mississauga\/#\/schema\/logo\/image\/","url":"https:\/\/www.airriderz.com\/mississauga\/wp-content\/uploads\/2020\/03\/logo-7.png","contentUrl":"https:\/\/www.airriderz.com\/mississauga\/wp-content\/uploads\/2020\/03\/logo-7.png","width":147,"height":111,"caption":"Air Riderz Trampoline Park Mississauga"},"image":{"@id":"https:\/\/www.airriderz.com\/mississauga\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/airriderzmississauga","https:\/\/x.com\/AirRiderz"]}]}},"_links":{"self":[{"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/pages\/2618132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/comments?post=2618132"}],"version-history":[{"count":400,"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/pages\/2618132\/revisions"}],"predecessor-version":[{"id":2618741,"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/pages\/2618132\/revisions\/2618741"}],"wp:attachment":[{"href":"https:\/\/www.airriderz.com\/mississauga\/wp-json\/wp\/v2\/media?parent=2618132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}