{"title":"Month","description":"","products":[{"product_id":"one-day-subscription","title":"VIP Max Whale Play Day Pass","description":"\u003c!--\n==========================================================\n  JOLEE PICKS — DAY PASS PRODUCT PAGE ($30)\n  v2 — Paste this into Shopify Product Description (HTML mode)\n\n  CHANGES FROM v1:\n  - Dashboard data fetch: same bug as the other pages.\n    Apps Script returns the pick text as `bet` (not `matchup`)\n    and dates as ISO timestamps. Fixed both in loadData() +\n    added normalizeDate() helper.\n  - Year-package upsell link updated from $715 → $400 to\n    match the year-package page.\n==========================================================\n--\u003e\n\n\u003c!-- Google Fonts --\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800;900\u0026amp;family=Open+Sans:wght@400;500;600;700\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n  \/* ===== PRODUCT DESCRIPTION ===== *\/\n  .jp-product {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    color: #1a1a1a;\n    line-height: 1.7;\n    max-width: 800px;\n    margin: 0 auto;\n  }\n  .jp-product-hero {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    border-radius: 12px;\n    padding: 30px;\n    text-align: center;\n    margin-bottom: 25px;\n    border: 2px solid #D4A574;\n  }\n  .jp-product-hero-badge {\n    display: inline-block;\n    background: #D4A574;\n    color: #1a1a1a;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    font-weight: 800;\n    padding: 5px 14px;\n    border-radius: 20px;\n    letter-spacing: 1.5px;\n    text-transform: uppercase;\n    margin-bottom: 15px;\n  }\n  .jp-product-hero h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.4rem, 4vw, 1.8rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-product-hero p {\n    font-size: 1rem;\n    color: #b0b0b0;\n    margin: 0 auto;\n    max-width: 520px;\n  }\n  .jp-product-hero .jp-highlight {\n    color: #E8C9A0;\n    font-weight: 700;\n  }\n  .jp-product-hero .jp-whale-emoji {\n    font-size: 2.5rem;\n    display: block;\n    margin-bottom: 10px;\n  }\n  .jp-product-includes {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-include-item {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 18px;\n    text-align: center;\n    transition: all 0.2s ease;\n  }\n  .jp-include-item:hover {\n    border-color: #D4A574;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n  }\n  .jp-include-item.jp-whale-item {\n    border: 2px solid #D4A574;\n    background: #fdf9f5;\n  }\n  .jp-include-icon {\n    font-size: 1.5rem;\n    margin-bottom: 8px;\n  }\n  .jp-include-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.8rem;\n    font-weight: 700;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-include-desc {\n    font-size: 0.85rem;\n    color: #777;\n    margin-top: 4px;\n  }\n  .jp-product-note {\n    background: #fff9f0;\n    border-left: 4px solid #D4A574;\n    padding: 15px 20px;\n    border-radius: 0 8px 8px 0;\n    margin-bottom: 25px;\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-product-note strong {\n    color: #1a1a1a;\n  }\n  .jp-upsell {\n    background: linear-gradient(135deg, #f8f7f5 0%, #f0ede8 100%);\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 18px 20px;\n    margin-bottom: 25px;\n    text-align: center;\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-upsell strong { color: #1a1a1a; }\n  .jp-upsell a {\n    color: #D4A574;\n    font-weight: 700;\n    text-decoration: underline;\n  }\n  .jp-email-note {\n    background: #f0f0f0;\n    border-radius: 8px;\n    padding: 15px 20px;\n    margin-top: 25px;\n    font-size: 0.8rem;\n    color: #666;\n    line-height: 1.8;\n  }\n  .jp-email-note strong {\n    color: #1a1a1a;\n    display: block;\n    margin-bottom: 5px;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n\n  \/* ===== HOW IT WORKS ===== *\/\n  .jp-how-it-works {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    padding: 50px 20px;\n    color: white;\n    border-radius: 12px;\n    margin: 30px 0;\n  }\n  .jp-how-it-works-container { max-width: 800px; margin: 0 auto; }\n  .jp-how-it-works-title {\n    text-align: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.5rem, 4vw, 2rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-how-it-works-subtitle {\n    text-align: center;\n    font-size: 1rem;\n    color: #D4A574;\n    margin: 0 0 40px 0;\n    font-weight: 500;\n  }\n  .jp-steps-container {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 25px;\n    position: relative;\n  }\n  .jp-steps-container::before {\n    content: '';\n    position: absolute;\n    top: 45px;\n    left: 15%;\n    right: 15%;\n    height: 3px;\n    background: linear-gradient(90deg, #D4A574 0%, #E8C9A0 50%, #D4A574 100%);\n    z-index: 0;\n  }\n  .jp-step { text-align: center; position: relative; z-index: 1; }\n  .jp-step-number {\n    width: 90px;\n    height: 90px;\n    margin: 0 auto 20px;\n    background: linear-gradient(135deg, #D4A574 0%, #E8C9A0 100%);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 2.2rem;\n    font-weight: 900;\n    color: #1a1a1a;\n    box-shadow: 0 8px 25px rgba(212, 165, 116, 0.3);\n    position: relative;\n  }\n  .jp-step-icon {\n    position: absolute;\n    bottom: -5px;\n    right: -5px;\n    width: 35px;\n    height: 35px;\n    background: #1a1a1a;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 1.1rem;\n    border: 3px solid #D4A574;\n  }\n  .jp-step-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.1rem;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 10px;\n    color: white;\n  }\n  .jp-step-description {\n    font-size: 0.9rem;\n    line-height: 1.6;\n    color: #b0b0b0;\n    max-width: 250px;\n    margin: 0 auto;\n  }\n  .jp-step-highlight { color: #D4A574; font-weight: 600; }\n  .jp-hiw-guarantee {\n    text-align: center;\n    margin-top: 35px;\n    font-size: 0.85rem;\n    color: #888;\n  }\n\n  \/* ===== DASHBOARD — MAX BET FOCUS ===== *\/\n  .jp-dash {\n    font-family: 'Open Sans', sans-serif;\n    color: #1a1a1a;\n    line-height: 1.6;\n    margin-top: 30px;\n  }\n  .jp-dash * { box-sizing: border-box; }\n  .jp-dash-header { text-align: center; margin-bottom: 25px; }\n  .jp-dash-header h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 4vw, 1.8rem);\n    font-weight: 900;\n    color: #1a1a1a;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    margin: 0 0 8px 0;\n  }\n  .jp-dash-header p { font-size: 0.9rem; color: #777; margin: 0; }\n  .jp-dash-verified {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    background: #f8f7f5;\n    border: 2px solid #D4A574;\n    padding: 8px 20px;\n    border-radius: 50px;\n    margin-top: 15px;\n    font-size: 0.8rem;\n    color: #B8956A;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-verified svg { width: 16px; height: 16px; color: #28a745; }\n\n  \/* Max Bet Hero Card *\/\n  .jp-maxbet-hero {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    border: 2px solid #D4A574;\n    border-radius: 12px;\n    padding: 30px;\n    text-align: center;\n    margin-bottom: 25px;\n  }\n  .jp-maxbet-hero-badge {\n    display: inline-block;\n    background: #D4A574;\n    color: #1a1a1a;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    font-weight: 800;\n    padding: 4px 12px;\n    border-radius: 20px;\n    letter-spacing: 1.5px;\n    text-transform: uppercase;\n    margin-bottom: 15px;\n  }\n  .jp-maxbet-hero-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 3.5vw, 1.6rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 5px;\n    color: white;\n  }\n  .jp-maxbet-hero .jp-hl { color: #E8C9A0; }\n  .jp-maxbet-hero-sub { font-size: 0.9rem; color: #b0b0b0; }\n\n  \/* Max Bet Stats Grid *\/\n  .jp-maxbet-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));\n    gap: 12px;\n    margin-bottom: 25px;\n  }\n  .jp-maxbet-card {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 18px;\n    text-align: center;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n    transition: all 0.3s ease;\n  }\n  .jp-maxbet-card:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n    border-color: #D4A574;\n  }\n  .jp-maxbet-card.jp-featured {\n    background: linear-gradient(135deg, #E8C9A0 0%, #D4A574 100%);\n    border: none;\n    color: #1a1a1a;\n  }\n  .jp-maxbet-card .jp-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 6px;\n  }\n  .jp-maxbet-card.jp-featured .jp-label { color: #1a1a1a; opacity: 0.7; }\n  .jp-maxbet-card .jp-val {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.6rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    line-height: 1;\n  }\n  .jp-maxbet-card .jp-val.jp-positive { color: #28a745; }\n  .jp-maxbet-card .jp-val.jp-negative { color: #dc3545; }\n  .jp-maxbet-card .jp-sub { font-size: 0.7rem; color: #999; margin-top: 5px; }\n  .jp-maxbet-card.jp-featured .jp-sub { color: #1a1a1a; opacity: 0.7; }\n\n  \/* Last 10 W\/L Streak *\/\n  .jp-maxbet-streak {\n    background: #f8f7f5;\n    border-radius: 10px;\n    padding: 20px;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  .jp-maxbet-streak-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 12px;\n  }\n  .jp-maxbet-streak-display {\n    display: flex;\n    justify-content: center;\n    gap: 6px;\n    flex-wrap: wrap;\n  }\n  .jp-maxbet-streak-item {\n    width: 40px;\n    height: 40px;\n    border-radius: 6px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-weight: 800;\n    font-size: 0.8rem;\n  }\n  .jp-maxbet-streak-item.jp-win { background: #28a745; color: white; }\n  .jp-maxbet-streak-item.jp-loss { background: #dc3545; color: white; }\n  .jp-maxbet-streak-item.jp-push { background: #ffc107; color: #1a1a1a; }\n  .jp-maxbet-streak-profit {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.85rem;\n    font-weight: 700;\n    margin-top: 10px;\n    color: #555;\n  }\n  .jp-maxbet-streak-profit .jp-positive { color: #28a745; }\n  .jp-maxbet-streak-profit .jp-negative { color: #dc3545; }\n\n  \/* Last 10 Max Bets Table *\/\n  .jp-maxbet-table-section {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    overflow: hidden;\n    margin-bottom: 25px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-maxbet-table-header {\n    padding: 18px 22px;\n    border-bottom: 1px solid #e5e5e5;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.9rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-maxbet-table-wrapper { overflow-x: auto; }\n  .jp-maxbet-table {\n    width: 100%;\n    border-collapse: collapse;\n    min-width: 500px;\n  }\n  .jp-maxbet-table th {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 1.5px;\n    font-weight: 700;\n    padding: 12px 16px;\n    text-align: left;\n    background: #f8f7f5;\n    border-bottom: 1px solid #e5e5e5;\n  }\n  .jp-maxbet-table td {\n    padding: 14px 16px;\n    border-bottom: 1px solid #f0f0f0;\n    font-size: 0.9rem;\n    vertical-align: middle;\n  }\n  .jp-maxbet-table tbody tr:hover { background: #fdf9f5; }\n  .jp-maxbet-table tbody tr:last-child td { border-bottom: none; }\n  .jp-maxbet-table .jp-pick-name { font-weight: 700; color: #1a1a1a; }\n  .jp-maxbet-table .jp-pick-sport { font-size: 0.75rem; color: #999; margin-top: 2px; }\n  .jp-maxbet-table .jp-pick-odds { font-family: 'Montserrat', sans-serif; font-weight: 700; }\n  .jp-maxbet-table .jp-pick-odds.jp-pos { color: #28a745; }\n  .jp-maxbet-table .jp-pick-odds.jp-neg { color: #4a4a4a; }\n  .jp-maxbet-table .jp-pick-units {\n    font-weight: 700;\n    color: #D4A574;\n    font-family: 'Montserrat', sans-serif;\n  }\n  .jp-maxbet-table .jp-result-badge {\n    display: inline-block;\n    padding: 4px 10px;\n    border-radius: 4px;\n    font-family: 'Montserrat', sans-serif;\n    font-weight: 700;\n    font-size: 0.65rem;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n  }\n  .jp-maxbet-table .jp-result-badge.jp-win { background: #d4edda; color: #28a745; }\n  .jp-maxbet-table .jp-result-badge.jp-loss { background: #f8d7da; color: #dc3545; }\n  .jp-maxbet-table .jp-result-badge.jp-push { background: #fff3cd; color: #856404; }\n  .jp-maxbet-table .jp-profit { font-family: 'Montserrat', sans-serif; font-weight: 700; }\n  .jp-maxbet-table .jp-profit.jp-positive { color: #28a745; }\n  .jp-maxbet-table .jp-profit.jp-negative { color: #dc3545; }\n\n  \/* Footer *\/\n  .jp-dash-footer {\n    text-align: center;\n    padding: 20px;\n    color: #999;\n    font-size: 0.8rem;\n    border-top: 1px solid #e5e5e5;\n    margin-top: 10px;\n  }\n  .jp-dash-footer a { color: #B8956A; text-decoration: none; font-weight: 600; }\n  .jp-dash-footer a:hover { text-decoration: underline; }\n  .jp-dash-last-updated { font-size: 0.7rem; color: #bbb; margin-top: 5px; }\n\n  \/* ===== RESPONSIVE ===== *\/\n  @media (max-width: 768px) {\n    .jp-steps-container { grid-template-columns: 1fr; gap: 30px; }\n    .jp-steps-container::before { display: none; }\n    .jp-step-number { width: 70px; height: 70px; font-size: 1.8rem; }\n    .jp-step-icon { width: 30px; height: 30px; font-size: 0.9rem; }\n    .jp-product-includes { grid-template-columns: 1fr 1fr; }\n    .jp-maxbet-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }\n    .jp-maxbet-card .jp-val { font-size: 1.3rem; }\n    .jp-maxbet-streak-item { width: 34px; height: 34px; font-size: 0.7rem; }\n    .jp-maxbet-table { min-width: 420px; }\n  }\n\u003c\/style\u003e\n\n\n\u003c!-- ===== SECTION 1: PRODUCT DESCRIPTION ===== --\u003e\n\n\u003cdiv class=\"jp-product\"\u003e\n\n  \u003cdiv class=\"jp-product-hero\"\u003e\n    \u003cspan class=\"jp-whale-emoji\"\u003e🐋\u003c\/span\u003e\n    \u003cdiv class=\"jp-product-hero-badge\"\u003eToday Only\u003c\/div\u003e\n    \u003ch2\u003eMax Bet Day Pass\u003c\/h2\u003e\n    \u003cp\u003eGet \u003cspan class=\"jp-highlight\"\u003etoday's full card\u003c\/span\u003e including our whale play — our highest-conviction max bet of the day, backed by 100,000 AI game simulations.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-product-includes\"\u003e\n    \u003cdiv class=\"jp-include-item jp-whale-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e🐋\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eWhale Play\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eToday's max bet — our best pick\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e📋\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eFull Card\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eEvery pick we make today\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e🤖\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eAI-Powered\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003e100,000 simulations per game\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e✅\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eVerified\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eTracked on Action Network\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-product-note\"\u003e\n    \u003cstrong\u003e🐋 Why the whale play matters:\u003c\/strong\u003e Our max bets hit at a 59% rate all-time with +316 units of profit. When we go big, we mean it — these are the plays our AI model is most confident in.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-upsell\"\u003e\n    \u003cstrong\u003e💡 Want more than one day?\u003c\/strong\u003e Save with our \u003ca href=\"\/collections\/month\/products\/1-week-package-7-days\"\u003eweekly ($50)\u003c\/a\u003e, \u003ca href=\"\/collections\/month\"\u003emonthly ($125)\u003c\/a\u003e, or \u003ca href=\"\/collections\/month\"\u003e2026 package ($400)\u003c\/a\u003e.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-email-note\"\u003e\n    \u003cstrong\u003e📬 Important — Read Before Purchasing\u003c\/strong\u003e\n    Make sure the email you sign up with is the email you want picks sent to. Picks are emailed daily at least 1 hour before the first game. Check spam\/junk if you don't see them. Follow us on Instagram \u003ca href=\"https:\/\/www.instagram.com\/jolee.picks\/\" style=\"color:#D4A574;\"\u003e@jolee.picks\u003c\/a\u003e for release notifications.\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- ===== SECTION 2: HOW IT WORKS ===== --\u003e\n\n\u003cdiv class=\"jp-how-it-works\"\u003e\n  \u003cdiv class=\"jp-how-it-works-container\"\u003e\n    \u003ch2 class=\"jp-how-it-works-title\"\u003eHow It Works\u003c\/h2\u003e\n    \u003cp class=\"jp-how-it-works-subtitle\"\u003eStart winning in 3 simple steps\u003c\/p\u003e\n    \n    \u003cdiv class=\"jp-steps-container\"\u003e\n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          1\n          \u003cdiv class=\"jp-step-icon\"\u003e📱\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eSubscribe\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Grab today's day pass for \u003cspan class=\"jp-step-highlight\"\u003e$30\u003c\/span\u003e and get instant access to the full card including the whale play.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          2\n          \u003cdiv class=\"jp-step-icon\"\u003e🔔\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eGet Picks\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Receive today's picks \u003cspan class=\"jp-step-highlight\"\u003estraight to your inbox\u003c\/span\u003e with our whale play and full analysis before game time.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          3\n          \u003cdiv class=\"jp-step-icon\"\u003e💰\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eWin\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Place your bets on \u003cspan class=\"jp-step-highlight\"\u003eDraftKings, FanDuel, BetMGM\u003c\/span\u003e or your favorite sportsbook.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \n    \u003cp class=\"jp-hiw-guarantee\"\u003e\n      ✅ 59% max bet win rate • 4,900+ winning picks • Verified on Action Network\n    \u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- ===== SECTION 3: LIVE DASHBOARD — MAX BET FOCUS ===== --\u003e\n\n\u003cdiv class=\"jp-dash\" id=\"jp-daypass-dashboard\"\u003e\n\n  \u003cdiv class=\"jp-dash-header\"\u003e\n    \u003ch2\u003e🐋 Max Bet Track Record\u003c\/h2\u003e\n    \u003cp\u003eSee why our whale plays are worth every penny\u003c\/p\u003e\n    \u003cdiv class=\"jp-dash-verified\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\u003e\n        \u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\n        \u003cpath d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"\u003e\u003c\/path\u003e\n      \u003c\/svg\u003e\n      Tracked on Action Network\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Max Bet Headline --\u003e\n  \u003cdiv class=\"jp-maxbet-hero\"\u003e\n    \u003cdiv class=\"jp-maxbet-hero-badge\"\u003e⭐ Top Performer\u003c\/div\u003e\n    \u003cdiv class=\"jp-maxbet-hero-title\"\u003eMax Bet Record: \u003cspan class=\"jp-hl\" id=\"jpDayMaxRecord\"\u003eLoading...\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"jp-maxbet-hero-sub\" id=\"jpDayMaxProfit\"\u003eLoading profit data...\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Max Bet Stats Grid --\u003e\n  \u003cdiv class=\"jp-maxbet-grid\" id=\"jpDayMaxGrid\"\u003e\u003c\/div\u003e\n\n  \u003c!-- Last 10 Max Bets W\/L Streak --\u003e\n  \u003cdiv class=\"jp-maxbet-streak\"\u003e\n    \u003cdiv class=\"jp-maxbet-streak-label\"\u003eLast 10 Max Bets\u003c\/div\u003e\n    \u003cdiv class=\"jp-maxbet-streak-display\" id=\"jpDayMaxStreak\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"jp-maxbet-streak-profit\" id=\"jpDayMaxStreakProfit\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Last 10 Max Bets Table --\u003e\n  \u003cdiv class=\"jp-maxbet-table-section\"\u003e\n    \u003cdiv class=\"jp-maxbet-table-header\"\u003e🎯 Last 10 Whale Plays\u003c\/div\u003e\n    \u003cdiv class=\"jp-maxbet-table-wrapper\"\u003e\n      \u003ctable class=\"jp-maxbet-table\"\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth\u003eDate\u003c\/th\u003e\n            \u003cth\u003ePick\u003c\/th\u003e\n            \u003cth\u003eOdds\u003c\/th\u003e\n            \u003cth\u003eUnits\u003c\/th\u003e\n            \u003cth\u003eResult\u003c\/th\u003e\n            \u003cth\u003eProfit\u003c\/th\u003e\n          \u003c\/tr\u003e\n        \u003c\/thead\u003e\n        \u003ctbody id=\"jpDayMaxTable\"\u003e\n          \u003ctr\u003e\u003ctd colspan=\"6\" style=\"text-align:center;padding:30px;\"\u003eLoading max bets...\u003c\/td\u003e\u003c\/tr\u003e\n        \u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Footer --\u003e\n  \u003cdiv class=\"jp-dash-footer\"\u003e\n    \u003cp\u003eAll picks independently tracked on \u003ca href=\"https:\/\/myaction.app\/qwerty123456\" target=\"_blank\"\u003eAction Network\u003c\/a\u003e\u003c\/p\u003e\n    \u003cp class=\"jp-dash-last-updated\"\u003eLast updated: \u003cspan id=\"jpDayUpdated\"\u003eLoading...\u003c\/span\u003e\u003c\/p\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003cscript\u003e\n(function() {\n  const GOOGLE_APPS_SCRIPT_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbwKPPdmwX_FkGiUFz-70D7k_dcV-_T99w1vC62jnnNicli4FM85vfmYya9PYXX05GCp\/exec';\n\n  function formatNumber(num) {\n    return num.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \",\");\n  }\n\n  \/\/ PATCH: Apps Script returns dates as ISO timestamps like \"2026-05-09T00:00:00.000Z\".\n  \/\/ Strip down to YYYY-MM-DD so downstream split('-') logic stays correct.\n  function normalizeDate(d) {\n    if (d == null) return '';\n    const s = String(d).trim();\n    if (!s) return '';\n    if (\/^\\d{4}-\\d{2}-\\d{2}\/.test(s)) return s.slice(0, 10);\n    const dt = new Date(s);\n    if (isNaN(dt)) return s;\n    const y = dt.getUTCFullYear();\n    const m = String(dt.getUTCMonth() + 1).padStart(2, '0');\n    const day = String(dt.getUTCDate()).padStart(2, '0');\n    return `${y}-${m}-${day}`;\n  }\n\n  function parseDate(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) {\n      return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\n    }\n    return new Date(dateStr);\n  }\n\n  function formatDate(dateStr) {\n    try {\n      const parts = dateStr.split('-');\n      if (parts.length === 3) {\n        const date = new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\n        return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n      }\n      return new Date(dateStr).toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n    } catch { return dateStr; }\n  }\n\n  async function loadData() {\n    let allData = [];\n    try {\n      const response = await fetch(GOOGLE_APPS_SCRIPT_URL);\n      if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\n      const jsonData = await response.json();\n      \/\/ PATCH: read row.bet (current schema) with fallback to row.matchup (old schema).\n      \/\/ Normalize the date so ISO timestamps work with split('-') downstream.\n      allData = jsonData.map(row =\u003e ({\n        date: normalizeDate(row.date),\n        sport: (row.sport || '').toUpperCase(),\n        matchup: row.bet || row.matchup || '',\n        type: row.type || '',\n        odds: parseFloat(row.odds) || 0,\n        units: parseFloat(row.units) || 1,\n        result: (row.result || 'pending').toString().toLowerCase(),\n        profit: parseFloat(row.profit) || 0\n      })).filter(row =\u003e row.date \u0026\u0026 row.matchup);\n      console.log(`Loaded ${allData.length} picks from Google Sheets`);\n    } catch (error) {\n      console.error('Error loading data:', error);\n      document.getElementById('jpDayMaxTable').innerHTML = '\u003ctr\u003e\u003ctd colspan=\"6\" style=\"text-align:center;padding:30px;color:#dc3545;\"\u003eError loading data. Please refresh.\u003c\/td\u003e\u003c\/tr\u003e';\n      return;\n    }\n\n    \/\/ Sort newest first\n    allData.sort((a, b) =\u003e parseDate(b.date) - parseDate(a.date));\n\n    \/\/ Filter max bets (3+ units)\n    const settled = allData.filter(p =\u003e ['win', 'loss', 'push'].includes(p.result));\n    const maxBets = settled.filter(p =\u003e p.units \u003e= 3);\n\n    const wins = maxBets.filter(p =\u003e p.result === 'win').length;\n    const losses = maxBets.filter(p =\u003e p.result === 'loss').length;\n    const pushes = maxBets.filter(p =\u003e p.result === 'push').length;\n    const totalProfit = maxBets.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const totalWagered = maxBets.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const winPct = (wins + losses) \u003e 0 ? ((wins \/ (wins + losses)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    const record = `${formatNumber(wins)}-${formatNumber(losses)}${pushes \u003e 0 ? `-${pushes}` : ''}`;\n\n    \/\/ Max Bet Headline\n    document.getElementById('jpDayMaxRecord').textContent = `${record} (${winPct.toFixed(1)}%)`;\n    const profitSign = totalProfit \u003e= 0 ? '+' : '';\n    const roiSign = roi \u003e= 0 ? '+' : '';\n    document.getElementById('jpDayMaxProfit').textContent = `${profitSign}${formatNumber(totalProfit.toFixed(2))} units | ${roiSign}${roi.toFixed(1)}% ROI`;\n\n    \/\/ Last 10 max bets\n    const last10 = maxBets.slice(0, 10);\n    const l10wins = last10.filter(p =\u003e p.result === 'win').length;\n    const l10losses = last10.filter(p =\u003e p.result === 'loss').length;\n    const l10profit = last10.reduce((sum, p) =\u003e sum + p.profit, 0);\n\n    \/\/ Stats grid\n    const l10profitClass = l10profit \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const l10profitSign = l10profit \u003e= 0 ? '+' : '';\n    const profitClass = totalProfit \u003e= 0 ? 'jp-positive' : 'jp-negative';\n\n    document.getElementById('jpDayMaxGrid').innerHTML = `\n      \u003cdiv class=\"jp-maxbet-card jp-featured\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eAll-Time Record\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${record}\u003c\/div\u003e\n        \u003cdiv class=\"jp-sub\"\u003e${formatNumber(maxBets.length)} max bets\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-maxbet-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eWin Rate\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${winPct.toFixed(1)}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-maxbet-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eTotal Profit\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${profitClass}\"\u003e${profitSign}${formatNumber(Math.round(totalProfit))}u\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-maxbet-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eLast 10\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${l10profitClass}\"\u003e${l10wins}-${l10losses}\u003c\/div\u003e\n        \u003cdiv class=\"jp-sub\"\u003e${l10profitSign}${l10profit.toFixed(2)}u\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n\n    \/\/ Last 10 streak visual\n    document.getElementById('jpDayMaxStreak').innerHTML = last10.map(pick =\u003e `\n      \u003cdiv class=\"jp-maxbet-streak-item jp-${pick.result}\" title=\"${pick.matchup} — ${pick.result.toUpperCase()} (${pick.profit \u003e= 0 ? '+' : ''}${pick.profit.toFixed(2)}u)\"\u003e\n        ${pick.result === 'win' ? 'W' : pick.result === 'loss' ? 'L' : 'P'}\n      \u003c\/div\u003e\n    `).join('');\n\n    const streakProfitClass = l10profit \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    document.getElementById('jpDayMaxStreakProfit').innerHTML = `${l10wins}-${l10losses} record | \u003cspan class=\"${streakProfitClass}\"\u003e${l10profitSign}${l10profit.toFixed(2)} units\u003c\/span\u003e`;\n\n    \/\/ Last 10 table\n    const sportIcons = { 'NFL': '🏈', 'NBA': '🏀', 'MLB': '⚾', 'NHL': '🏒', 'NCAAF': '🏈', 'NCAAB': '🏀', 'UFC': '🥊', 'SOCCER': '⚽' };\n\n    document.getElementById('jpDayMaxTable').innerHTML = last10.map(pick =\u003e {\n      const icon = sportIcons[pick.sport] || '🎯';\n      const oddsDisplay = pick.odds \u003e= 0 ? `+${pick.odds}` : pick.odds;\n      const oddsClass = pick.odds \u003e= 0 ? 'jp-pos' : 'jp-neg';\n      const profitDisplay = pick.profit \u003e= 0 ? `+${pick.profit.toFixed(2)}u` : `${pick.profit.toFixed(2)}u`;\n      const profitColorClass = pick.profit \u003e= 0 ? 'jp-positive' : 'jp-negative';\n      return `\n        \u003ctr\u003e\n          \u003ctd\u003e${formatDate(pick.date)}\u003c\/td\u003e\n          \u003ctd\u003e\n            \u003cdiv class=\"jp-pick-name\"\u003e${pick.matchup}\u003c\/div\u003e\n            \u003cdiv class=\"jp-pick-sport\"\u003e${icon} ${pick.sport} • ${pick.type}\u003c\/div\u003e\n          \u003c\/td\u003e\n          \u003ctd\u003e\u003cspan class=\"jp-pick-odds ${oddsClass}\"\u003e${oddsDisplay}\u003c\/span\u003e\u003c\/td\u003e\n          \u003ctd\u003e\u003cspan class=\"jp-pick-units\"\u003e${pick.units}u\u003c\/span\u003e\u003c\/td\u003e\n          \u003ctd\u003e\u003cspan class=\"jp-result-badge jp-${pick.result}\"\u003e${pick.result}\u003c\/span\u003e\u003c\/td\u003e\n          \u003ctd\u003e\u003cspan class=\"jp-profit ${profitColorClass}\"\u003e${profitDisplay}\u003c\/span\u003e\u003c\/td\u003e\n        \u003c\/tr\u003e\n      `;\n    }).join('');\n\n    \/\/ Updated timestamp\n    document.getElementById('jpDayUpdated').textContent = new Date().toLocaleDateString('en-US', {\n      month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit'\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', loadData);\n  } else {\n    loadData();\n  }\n})();\n\u003c\/script\u003e","brand":"Jolee Picks","offers":[{"title":"Default Title","offer_id":14007767826477,"sku":"","price":30.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0013\/1946\/9101\/files\/IMG-6130.png?v=1735583670"},{"product_id":"1-week-package-7-days","title":"VIP One Week Package","description":"\u003c!--\n==========================================================\n  JOLEE PICKS — WEEK PACKAGE PRODUCT PAGE ($50)\n  v2 — Paste this into Shopify Product Description (HTML mode)\n\n  CHANGES FROM v1:\n  - Dashboard data fetch: same bug as the other pages.\n    Apps Script returns the pick text as `bet` (not `matchup`)\n    and dates as ISO timestamps. Fixed both in loadData() +\n    added normalizeDate() helper.\n==========================================================\n--\u003e\n\n\u003c!-- Google Fonts --\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800;900\u0026amp;family=Open+Sans:wght@400;500;600;700\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n  \/* ===== PRODUCT DESCRIPTION ===== *\/\n  .jp-product {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    color: #1a1a1a;\n    line-height: 1.7;\n    max-width: 800px;\n    margin: 0 auto;\n  }\n  .jp-product-hero {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    border-radius: 12px;\n    padding: 30px;\n    text-align: center;\n    margin-bottom: 25px;\n  }\n  .jp-product-hero-badge {\n    display: inline-block;\n    background: #D4A574;\n    color: #1a1a1a;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    font-weight: 800;\n    padding: 5px 14px;\n    border-radius: 20px;\n    letter-spacing: 1.5px;\n    text-transform: uppercase;\n    margin-bottom: 15px;\n  }\n  .jp-product-hero h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.4rem, 4vw, 1.8rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-product-hero p {\n    font-size: 1rem;\n    color: #b0b0b0;\n    margin: 0;\n    max-width: 500px;\n    margin: 0 auto;\n  }\n  .jp-product-hero .jp-highlight {\n    color: #E8C9A0;\n    font-weight: 700;\n  }\n  .jp-product-includes {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-include-item {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 18px;\n    text-align: center;\n    transition: all 0.2s ease;\n  }\n  .jp-include-item:hover {\n    border-color: #D4A574;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n  }\n  .jp-include-icon {\n    font-size: 1.5rem;\n    margin-bottom: 8px;\n  }\n  .jp-include-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.8rem;\n    font-weight: 700;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-include-desc {\n    font-size: 0.85rem;\n    color: #777;\n    margin-top: 4px;\n  }\n  .jp-product-note {\n    background: #fff9f0;\n    border-left: 4px solid #D4A574;\n    padding: 15px 20px;\n    border-radius: 0 8px 8px 0;\n    margin-bottom: 25px;\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-product-note strong {\n    color: #1a1a1a;\n  }\n  .jp-email-note {\n    background: #f0f0f0;\n    border-radius: 8px;\n    padding: 15px 20px;\n    margin-top: 25px;\n    font-size: 0.8rem;\n    color: #666;\n    line-height: 1.8;\n  }\n  .jp-email-note strong {\n    color: #1a1a1a;\n    display: block;\n    margin-bottom: 5px;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n\n  \/* ===== HOW IT WORKS ===== *\/\n  .jp-how-it-works {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    padding: 50px 20px;\n    color: white;\n    border-radius: 12px;\n    margin: 30px 0;\n  }\n  .jp-how-it-works-container {\n    max-width: 800px;\n    margin: 0 auto;\n  }\n  .jp-how-it-works-title {\n    text-align: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.5rem, 4vw, 2rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-how-it-works-subtitle {\n    text-align: center;\n    font-size: 1rem;\n    color: #D4A574;\n    margin: 0 0 40px 0;\n    font-weight: 500;\n  }\n  .jp-steps-container {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 25px;\n    position: relative;\n  }\n  .jp-steps-container::before {\n    content: '';\n    position: absolute;\n    top: 45px;\n    left: 15%;\n    right: 15%;\n    height: 3px;\n    background: linear-gradient(90deg, #D4A574 0%, #E8C9A0 50%, #D4A574 100%);\n    z-index: 0;\n  }\n  .jp-step {\n    text-align: center;\n    position: relative;\n    z-index: 1;\n  }\n  .jp-step-number {\n    width: 90px;\n    height: 90px;\n    margin: 0 auto 20px;\n    background: linear-gradient(135deg, #D4A574 0%, #E8C9A0 100%);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 2.2rem;\n    font-weight: 900;\n    color: #1a1a1a;\n    box-shadow: 0 8px 25px rgba(212, 165, 116, 0.3);\n    position: relative;\n  }\n  .jp-step-icon {\n    position: absolute;\n    bottom: -5px;\n    right: -5px;\n    width: 35px;\n    height: 35px;\n    background: #1a1a1a;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 1.1rem;\n    border: 3px solid #D4A574;\n  }\n  .jp-step-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.1rem;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 10px;\n    color: white;\n  }\n  .jp-step-description {\n    font-size: 0.9rem;\n    line-height: 1.6;\n    color: #b0b0b0;\n    max-width: 250px;\n    margin: 0 auto;\n  }\n  .jp-step-highlight {\n    color: #D4A574;\n    font-weight: 600;\n  }\n  .jp-hiw-guarantee {\n    text-align: center;\n    margin-top: 35px;\n    font-size: 0.85rem;\n    color: #888;\n  }\n\n  \/* ===== TRIMMED DASHBOARD ===== *\/\n  .jp-dash {\n    font-family: 'Open Sans', sans-serif;\n    color: #1a1a1a;\n    line-height: 1.6;\n    margin-top: 30px;\n  }\n  .jp-dash * { box-sizing: border-box; }\n  .jp-dash-header {\n    text-align: center;\n    margin-bottom: 25px;\n  }\n  .jp-dash-header h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 4vw, 1.8rem);\n    font-weight: 900;\n    color: #1a1a1a;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    margin: 0 0 8px 0;\n  }\n  .jp-dash-header p {\n    font-size: 0.9rem;\n    color: #777;\n    margin: 0;\n  }\n  .jp-dash-verified {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    background: #f8f7f5;\n    border: 2px solid #D4A574;\n    padding: 8px 20px;\n    border-radius: 50px;\n    margin-top: 15px;\n    font-size: 0.8rem;\n    color: #B8956A;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-verified svg {\n    width: 16px;\n    height: 16px;\n    color: #28a745;\n  }\n\n  \/* Headline Stats *\/\n  .jp-dash-headline {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    padding: 25px;\n    border-radius: 12px;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  .jp-dash-headline .jp-main-record {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 3.5vw, 1.8rem);\n    font-weight: 800;\n    margin-bottom: 5px;\n  }\n  .jp-dash-headline .jp-hl { color: #E8C9A0; }\n  .jp-dash-headline .jp-sub {\n    font-size: 0.9rem;\n    opacity: 0.9;\n  }\n\n  \/* Stats Grid *\/\n  .jp-dash-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-dash-card {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 20px;\n    text-align: center;\n    transition: all 0.3s ease;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-card:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n    border-color: #D4A574;\n  }\n  .jp-dash-card.jp-featured {\n    background: linear-gradient(135deg, #E8C9A0 0%, #D4A574 100%);\n    border: none;\n    color: #1a1a1a;\n  }\n  .jp-dash-card .jp-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 8px;\n  }\n  .jp-dash-card.jp-featured .jp-label { color: #1a1a1a; opacity: 0.7; }\n  .jp-dash-card .jp-val {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.8rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    line-height: 1;\n  }\n  .jp-dash-card .jp-val.jp-positive { color: #28a745; }\n  .jp-dash-card .jp-val.jp-negative { color: #dc3545; }\n  .jp-dash-card .jp-sub { font-size: 0.75rem; color: #999; margin-top: 6px; }\n  .jp-dash-card.jp-featured .jp-sub { color: #1a1a1a; opacity: 0.7; }\n\n  \/* Streak *\/\n  .jp-dash-streak {\n    background: #f8f7f5;\n    border-radius: 10px;\n    padding: 20px;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  .jp-dash-streak-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 12px;\n  }\n  .jp-dash-streak-display {\n    display: flex;\n    justify-content: center;\n    gap: 5px;\n    flex-wrap: wrap;\n  }\n  .jp-dash-streak-item {\n    width: 32px;\n    height: 32px;\n    border-radius: 5px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-weight: 800;\n    font-size: 0.7rem;\n  }\n  .jp-dash-streak-item.jp-win { background: #28a745; color: white; }\n  .jp-dash-streak-item.jp-loss { background: #dc3545; color: white; }\n  .jp-dash-streak-item.jp-push { background: #ffc107; color: #1a1a1a; }\n\n  \/* Period Cards *\/\n  .jp-dash-periods {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    gap: 20px;\n    margin-bottom: 25px;\n  }\n  .jp-dash-period {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 22px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-period-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 15px;\n  }\n  .jp-dash-period-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    color: #D4A574;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n  }\n  .jp-dash-period-dates {\n    font-size: 0.7rem;\n    color: #999;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-period-stats {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    margin-bottom: 12px;\n  }\n  .jp-dash-period-profit {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.8rem;\n    font-weight: 800;\n  }\n  .jp-dash-period-profit.jp-positive { color: #28a745; }\n  .jp-dash-period-profit.jp-negative { color: #dc3545; }\n  .jp-dash-period-profit .jp-unit-label {\n    font-size: 0.8rem;\n    color: #888;\n    font-weight: 400;\n  }\n  .jp-dash-period-record {\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-dash-period-record .jp-hl {\n    color: #D4A574;\n    font-weight: 700;\n  }\n  .jp-dash-period-bar-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    color: #999;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 8px;\n  }\n  .jp-dash-bar-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 6px;\n  }\n  .jp-dash-bar-label {\n    font-size: 0.75rem;\n    color: #777;\n    min-width: 55px;\n    font-weight: 600;\n  }\n  .jp-dash-bar-label.jp-current {\n    color: #D4A574;\n    font-weight: 700;\n  }\n  .jp-dash-bar-track {\n    flex: 1;\n    height: 14px;\n    background: #f0f0f0;\n    border-radius: 3px;\n    overflow: hidden;\n  }\n  .jp-dash-bar-fill {\n    height: 100%;\n    border-radius: 3px;\n    min-width: 2px;\n  }\n  .jp-dash-bar-fill.jp-green { background: linear-gradient(to right, #1e7e34, #28a745); }\n  .jp-dash-bar-fill.jp-red { background: linear-gradient(to right, #a71d2a, #dc3545); }\n  .jp-dash-bar-fill.jp-gold { background: linear-gradient(to right, #8B7355, #D4A574); }\n  .jp-dash-bar-value {\n    font-size: 0.75rem;\n    font-weight: 700;\n    min-width: 50px;\n    text-align: right;\n  }\n  .jp-dash-bar-value.jp-positive { color: #28a745; }\n  .jp-dash-bar-value.jp-negative { color: #dc3545; }\n  .jp-dash-bar-value.jp-gold-text { color: #D4A574; }\n\n  \/* Chart *\/\n  .jp-dash-chart-section {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 22px;\n    margin-bottom: 25px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-chart-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 15px;\n    flex-wrap: wrap;\n    gap: 10px;\n  }\n  .jp-dash-chart-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-dash-chart-filters {\n    display: flex;\n    gap: 6px;\n  }\n  .jp-dash-filter-btn {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    color: #4a4a4a;\n    padding: 6px 14px;\n    border-radius: 6px;\n    font-family: 'Open Sans', sans-serif;\n    font-size: 0.75rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.2s ease;\n  }\n  .jp-dash-filter-btn:hover { border-color: #D4A574; color: #B8956A; }\n  .jp-dash-filter-btn.jp-active { background: #D4A574; border-color: #D4A574; color: #1a1a1a; }\n  .jp-dash-chart-container { height: 240px; margin-top: 10px; }\n  .jp-dash-chart-stats {\n    display: flex;\n    justify-content: center;\n    gap: 25px;\n    margin-top: 12px;\n    padding-top: 12px;\n    border-top: 1px solid #e5e5e5;\n    flex-wrap: wrap;\n  }\n  .jp-dash-chart-stat { text-align: center; }\n  .jp-dash-chart-stat-label { font-size: 0.65rem; color: #777; text-transform: uppercase; letter-spacing: 1px; }\n  .jp-dash-chart-stat-value { font-family: 'Montserrat', sans-serif; font-size: 1rem; font-weight: 700; color: #1a1a1a; }\n  .jp-dash-chart-stat-value.jp-positive { color: #28a745; }\n  .jp-dash-chart-stat-value.jp-negative { color: #dc3545; }\n\n  \/* Footer *\/\n  .jp-dash-footer {\n    text-align: center;\n    padding: 20px;\n    color: #999;\n    font-size: 0.8rem;\n    border-top: 1px solid #e5e5e5;\n    margin-top: 10px;\n  }\n  .jp-dash-footer a { color: #B8956A; text-decoration: none; font-weight: 600; }\n  .jp-dash-footer a:hover { text-decoration: underline; }\n  .jp-dash-last-updated { font-size: 0.7rem; color: #bbb; margin-top: 5px; }\n\n  \/* ===== RESPONSIVE ===== *\/\n  @media (max-width: 768px) {\n    .jp-steps-container { grid-template-columns: 1fr; gap: 30px; }\n    .jp-steps-container::before { display: none; }\n    .jp-step-number { width: 70px; height: 70px; font-size: 1.8rem; }\n    .jp-step-icon { width: 30px; height: 30px; font-size: 0.9rem; }\n    .jp-product-includes { grid-template-columns: 1fr 1fr; }\n    .jp-dash-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }\n    .jp-dash-card .jp-val { font-size: 1.4rem; }\n    .jp-dash-periods { grid-template-columns: 1fr; }\n    .jp-dash-chart-header { flex-direction: column; align-items: flex-start; }\n    .jp-dash-chart-filters { width: 100%; overflow-x: auto; }\n    .jp-dash-chart-stats { gap: 15px; }\n    .jp-dash-period-profit { font-size: 1.4rem; }\n  }\n\u003c\/style\u003e\n\n\n\u003c!-- ===== SECTION 1: PRODUCT DESCRIPTION ===== --\u003e\n\n\u003cdiv class=\"jp-product\"\u003e\n\n  \u003cdiv class=\"jp-product-hero\"\u003e\n    \u003cdiv class=\"jp-product-hero-badge\"\u003eMost Popular\u003c\/div\u003e\n    \u003ch2\u003e7 Days of VIP Picks\u003c\/h2\u003e\n    \u003cp\u003eGet \u003cspan class=\"jp-highlight\"\u003eevery pick we make for a full week\u003c\/span\u003e — including our whale plays, strong plays, and standard plays delivered straight to your inbox daily.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-product-includes\"\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e🐋\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eMax Bets\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eOur highest-conviction whale plays\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e🤖\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eAI-Powered\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003e100,000 game simulations per pick\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e📧\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eDaily Emails\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003ePicks sent 1+ hour before game time\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e✅\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eVerified\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eEvery pick tracked on Action Network\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-product-note\"\u003e\n    \u003cstrong\u003e💡 Why one week?\u003c\/strong\u003e A week gives you a real taste of what we do — see the daily process, experience the max bets, and watch the results come in. We recommend the monthly package due to the natural variance of sports betting, but a week is a great way to get started.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-email-note\"\u003e\n    \u003cstrong\u003e📬 Important — Read Before Purchasing\u003c\/strong\u003e\n    Make sure the email you sign up with is the email you want picks sent to. Picks are emailed daily at least 1 hour before the first game. Check spam\/junk if you don't see them. Follow us on Instagram \u003ca href=\"https:\/\/www.instagram.com\/jolee.picks\/\" style=\"color:#D4A574;\"\u003e@jolee.picks\u003c\/a\u003e for release notifications.\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- ===== SECTION 2: HOW IT WORKS ===== --\u003e\n\n\u003cdiv class=\"jp-how-it-works\"\u003e\n  \u003cdiv class=\"jp-how-it-works-container\"\u003e\n    \u003ch2 class=\"jp-how-it-works-title\"\u003eHow It Works\u003c\/h2\u003e\n    \u003cp class=\"jp-how-it-works-subtitle\"\u003eStart winning in 3 simple steps\u003c\/p\u003e\n    \n    \u003cdiv class=\"jp-steps-container\"\u003e\n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          1\n          \u003cdiv class=\"jp-step-icon\"\u003e📱\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eSubscribe\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Choose a plan that fits your style — \u003cspan class=\"jp-step-highlight\"\u003eday pass, weekly, monthly, or yearly\u003c\/span\u003e. Get instant access to all our picks.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          2\n          \u003cdiv class=\"jp-step-icon\"\u003e🔔\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eGet Picks\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Receive daily picks \u003cspan class=\"jp-step-highlight\"\u003estraight to your inbox\u003c\/span\u003e. We send alerts before games with our best bets and max plays.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          3\n          \u003cdiv class=\"jp-step-icon\"\u003e💰\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eWin\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Place your bets on \u003cspan class=\"jp-step-highlight\"\u003eDraftKings, FanDuel, BetMGM\u003c\/span\u003e or your favorite sportsbook. Track results in real-time.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \n    \u003cp class=\"jp-hiw-guarantee\"\u003e\n      ✅ 59% max bet win rate • 4,900+ winning picks • Verified on Action Network\n    \u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- ===== SECTION 3: LIVE DASHBOARD (Trimmed) ===== --\u003e\n\n\u003cdiv class=\"jp-dash\" id=\"jp-week-dashboard\"\u003e\n  \n  \u003cdiv class=\"jp-dash-header\"\u003e\n    \u003ch2\u003e📊 Live Performance Dashboard\u003c\/h2\u003e\n    \u003cp\u003eUpdated automatically from our verified track record\u003c\/p\u003e\n    \u003cdiv class=\"jp-dash-verified\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\u003e\n        \u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\n        \u003cpath d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"\u003e\u003c\/path\u003e\n      \u003c\/svg\u003e\n      Tracked on Action Network\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- All-Time Headline --\u003e\n  \u003cdiv class=\"jp-dash-headline\"\u003e\n    \u003cdiv class=\"jp-main-record\"\u003eAll Time: \u003cspan class=\"jp-hl\" id=\"jpWeekAllTime\"\u003eLoading...\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"jp-sub\" id=\"jpWeekAllTimeProfit\"\u003eLoading profit data...\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Quick Stats Grid --\u003e\n  \u003cdiv class=\"jp-dash-grid\" id=\"jpWeekStatsGrid\"\u003e\u003c\/div\u003e\n\n  \u003c!-- Last 20 Streak --\u003e\n  \u003cdiv class=\"jp-dash-streak\"\u003e\n    \u003cdiv class=\"jp-dash-streak-label\"\u003eLast 20 Picks\u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-streak-display\" id=\"jpWeekStreak\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Last 30 Days + Last 7 Days Side by Side --\u003e\n  \u003cdiv class=\"jp-dash-periods\"\u003e\n    \u003cdiv class=\"jp-dash-period\" id=\"jpWeek30Day\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-period\" id=\"jpWeek7Day\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Profit Chart --\u003e\n  \u003cdiv class=\"jp-dash-chart-section\"\u003e\n    \u003cdiv class=\"jp-dash-chart-header\"\u003e\n      \u003cdiv class=\"jp-dash-chart-title\"\u003e📈 Profit Over Time\u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-filters\"\u003e\n        \u003cbutton class=\"jp-dash-filter-btn jp-active\" data-filter=\"30\"\u003eLast 30 Days\u003c\/button\u003e\n        \u003cbutton class=\"jp-dash-filter-btn\" data-filter=\"7\"\u003eLast 7 Days\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-chart-container\"\u003e\n      \u003ccanvas id=\"jpWeekChart\"\u003e\u003c\/canvas\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-chart-stats\" id=\"jpWeekChartStats\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Footer --\u003e\n  \u003cdiv class=\"jp-dash-footer\"\u003e\n    \u003cp\u003eAll picks independently tracked on \u003ca href=\"https:\/\/myaction.app\/qwerty123456\" target=\"_blank\"\u003eAction Network\u003c\/a\u003e\u003c\/p\u003e\n    \u003cp class=\"jp-dash-last-updated\"\u003eLast updated: \u003cspan id=\"jpWeekUpdated\"\u003eLoading...\u003c\/span\u003e\u003c\/p\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- Chart.js --\u003e\n\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e\n\n\u003cscript\u003e\n(function() {\n  const GOOGLE_APPS_SCRIPT_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbwKPPdmwX_FkGiUFz-70D7k_dcV-_T99w1vC62jnnNicli4FM85vfmYya9PYXX05GCp\/exec';\n\n  let allData = [];\n  let profitChart = null;\n\n  function formatNumber(num) {\n    return num.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \",\");\n  }\n\n  \/\/ PATCH: Apps Script returns dates as ISO timestamps like \"2026-05-09T00:00:00.000Z\".\n  \/\/ Strip down to YYYY-MM-DD so downstream split('-') logic stays correct.\n  function normalizeDate(d) {\n    if (d == null) return '';\n    const s = String(d).trim();\n    if (!s) return '';\n    if (\/^\\d{4}-\\d{2}-\\d{2}\/.test(s)) return s.slice(0, 10);\n    const dt = new Date(s);\n    if (isNaN(dt)) return s;\n    const y = dt.getUTCFullYear();\n    const m = String(dt.getUTCMonth() + 1).padStart(2, '0');\n    const day = String(dt.getUTCDate()).padStart(2, '0');\n    return `${y}-${m}-${day}`;\n  }\n\n  function parseDate(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) {\n      return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\n    }\n    return new Date(dateStr);\n  }\n\n  function calculateStats(data) {\n    const settled = data.filter(p =\u003e ['win', 'loss', 'push'].includes(p.result));\n    const wins = settled.filter(p =\u003e p.result === 'win').length;\n    const losses = settled.filter(p =\u003e p.result === 'loss').length;\n    const pushes = settled.filter(p =\u003e p.result === 'push').length;\n    const totalPicks = settled.length;\n    const totalWagered = settled.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const totalProfit = settled.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const winPct = totalPicks \u003e 0 ? ((wins \/ (totalPicks - pushes)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    return { wins, losses, pushes, record: `${formatNumber(wins)}-${formatNumber(losses)}${pushes \u003e 0 ? `-${pushes}` : ''}`, winRate: winPct.toFixed(1), totalProfit: totalProfit.toFixed(2), roi: roi.toFixed(2), totalPicks };\n  }\n\n  function calculatePeriodStats(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    const wins = filtered.filter(p =\u003e p.result === 'win').length;\n    const losses = filtered.filter(p =\u003e p.result === 'loss').length;\n    const pushes = filtered.filter(p =\u003e p.result === 'push').length;\n    const totalProfit = filtered.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const totalWagered = filtered.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const winPct = (wins + losses) \u003e 0 ? ((wins \/ (wins + losses)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    return { wins, losses, pushes, record: `${wins}-${losses}${pushes \u003e 0 ? `-${pushes}` : ''}`, winPct: winPct.toFixed(1), profit: totalProfit.toFixed(2), roi: roi.toFixed(1), filtered };\n  }\n\n  function getDailyBreakdown(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    \n    const daily = {};\n    filtered.forEach(p =\u003e {\n      if (!daily[p.date]) daily[p.date] = { profit: 0, date: p.date };\n      daily[p.date].profit += p.profit;\n    });\n    \n    return Object.values(daily).sort((a, b) =\u003e parseDate(a.date) - parseDate(b.date));\n  }\n\n  function getWeeklyBreakdown(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    \n    const weeks = [];\n    let currentWeek = { start: null, end: null, profit: 0 };\n    \n    const sorted = [...filtered].sort((a, b) =\u003e parseDate(a.date) - parseDate(b.date));\n    \n    sorted.forEach(p =\u003e {\n      const d = parseDate(p.date);\n      const weekStart = new Date(d);\n      weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n      const weekKey = weekStart.toISOString().split('T')[0];\n      \n      if (!currentWeek.key) {\n        currentWeek = { key: weekKey, start: p.date, end: p.date, profit: p.profit };\n      } else if (currentWeek.key === weekKey) {\n        currentWeek.end = p.date;\n        currentWeek.profit += p.profit;\n      } else {\n        weeks.push({ ...currentWeek });\n        currentWeek = { key: weekKey, start: p.date, end: p.date, profit: p.profit };\n      }\n    });\n    if (currentWeek.key) weeks.push({ ...currentWeek });\n    \n    return weeks;\n  }\n\n  function formatDateShort(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) {\n      return `${parseInt(parts[1])}\/${parseInt(parts[2])}`;\n    }\n    return dateStr;\n  }\n\n  function renderPeriodCard(el, title, dateRange, stats, breakdown, isCurrent) {\n    const profitVal = parseFloat(stats.profit);\n    const profitClass = profitVal \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const profitSign = profitVal \u003e= 0 ? '+' : '';\n    \n    const maxVal = Math.max(...breakdown.map(b =\u003e Math.abs(b.profit)), 1);\n    \n    const barsHtml = breakdown.map((b, idx) =\u003e {\n      const isLast = idx === breakdown.length - 1 \u0026\u0026 isCurrent;\n      const barPct = Math.max((Math.abs(b.profit) \/ maxVal) * 100, 2);\n      const barClass = b.profit \u003e= 0 ? (isLast ? 'jp-gold' : 'jp-green') : 'jp-red';\n      const valClass = b.profit \u003e= 0 ? (isLast ? 'jp-gold-text' : 'jp-positive') : 'jp-negative';\n      const labelClass = isLast ? 'jp-dash-bar-label jp-current' : 'jp-dash-bar-label';\n      const sign = b.profit \u003e= 0 ? '+' : '';\n      const label = b.label || formatDateShort(b.start || b.date);\n      return `\n        \u003cdiv class=\"jp-dash-bar-row\"\u003e\n          \u003cdiv class=\"${labelClass}\"\u003e${label}\u003c\/div\u003e\n          \u003cdiv class=\"jp-dash-bar-track\"\u003e\n            \u003cdiv class=\"jp-dash-bar-fill ${barClass}\" style=\"width: ${barPct}%;\"\u003e\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"jp-dash-bar-value ${valClass}\"\u003e${sign}${b.profit.toFixed(2)}u\u003c\/div\u003e\n        \u003c\/div\u003e\n      `;\n    }).join('');\n    \n    const barTypeLabel = breakdown.length \u003e 10 ? 'DAILY BREAKDOWN' : (breakdown[0] \u0026\u0026 breakdown[0].start ? 'WEEKLY BREAKDOWN' : 'DAILY BREAKDOWN');\n    \n    el.innerHTML = `\n      \u003cdiv class=\"jp-dash-period-header\"\u003e\n        \u003cdiv class=\"jp-dash-period-title\"\u003e${title}\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-period-dates\"\u003e${dateRange}\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-period-stats\"\u003e\n        \u003cdiv class=\"jp-dash-period-profit ${profitClass}\"\u003e${profitSign}${stats.profit} \u003cspan class=\"jp-unit-label\"\u003eunits\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-period-record\"\u003e${stats.record} (\u003cspan class=\"jp-hl\"\u003e${stats.winPct}%\u003c\/span\u003e)\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-period-bar-label\"\u003e${barTypeLabel}\u003c\/div\u003e\n      ${barsHtml}\n    `;\n  }\n\n  function renderChart(data, filter) {\n    const days = parseInt(filter);\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const settled = data.filter(p =\u003e p.result !== 'pending').slice().reverse();\n    const filtered = settled.filter(p =\u003e parseDate(p.date) \u003e= cutoff);\n    \n    const ctx = document.getElementById('jpWeekChart').getContext('2d');\n    if (profitChart) profitChart.destroy();\n    \n    const periodStats = calculatePeriodStats(data, days);\n    const profitClass = parseFloat(periodStats.profit) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const roiClass = parseFloat(periodStats.roi) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const profitSign = parseFloat(periodStats.profit) \u003e= 0 ? '+' : '';\n    const roiSign = parseFloat(periodStats.roi) \u003e= 0 ? '+' : '';\n    \n    document.getElementById('jpWeekChartStats').innerHTML = `\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eRecord\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value\"\u003e${periodStats.record}\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eWin %\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value\"\u003e${periodStats.winPct}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eUnits\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value ${profitClass}\"\u003e${profitSign}${periodStats.profit}u\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eROI\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value ${roiClass}\"\u003e${roiSign}${periodStats.roi}%\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n    \n    let cumulative = 0;\n    const chartData = [];\n    const labels = [];\n    filtered.forEach(pick =\u003e {\n      cumulative += pick.profit;\n      labels.push(formatDateShort(pick.date));\n      chartData.push(parseFloat(cumulative.toFixed(2)));\n    });\n\n    const gradient = ctx.createLinearGradient(0, 0, 0, 240);\n    gradient.addColorStop(0, 'rgba(212, 165, 116, 0.4)');\n    gradient.addColorStop(1, 'rgba(212, 165, 116, 0.05)');\n    \n    profitChart = new Chart(ctx, {\n      type: 'line',\n      data: {\n        labels: labels,\n        datasets: [{\n          label: 'Cumulative Profit (Units)',\n          data: chartData,\n          borderColor: '#D4A574',\n          backgroundColor: gradient,\n          borderWidth: 3,\n          fill: true,\n          tension: 0,\n          pointRadius: 0,\n          pointHoverRadius: 6,\n          pointHoverBackgroundColor: '#D4A574',\n          pointHoverBorderColor: '#fff',\n          pointHoverBorderWidth: 2\n        }]\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        interaction: { intersect: false, mode: 'index' },\n        plugins: {\n          legend: { display: false },\n          tooltip: {\n            backgroundColor: '#1a1a1a',\n            titleColor: '#999',\n            bodyColor: '#fff',\n            bodyFont: { size: 14, weight: 'bold' },\n            padding: 12,\n            displayColors: false,\n            callbacks: {\n              label: function(context) {\n                const value = context.parsed.y;\n                return `${value \u003e= 0 ? '+' : ''}${formatNumber(value.toFixed(2))} units`;\n              }\n            }\n          }\n        },\n        scales: {\n          x: { grid: { color: 'rgba(0,0,0,0.05)', drawBorder: false }, ticks: { color: '#999', maxTicksLimit: 8, font: { size: 11 } } },\n          y: { grid: { color: 'rgba(0,0,0,0.05)', drawBorder: false }, ticks: { color: '#999', font: { size: 11 }, callback: function(v) { return (v \u003e= 0 ? '+' : '') + v + 'u'; } } }\n        }\n      }\n    });\n  }\n\n  async function loadData() {\n    try {\n      const response = await fetch(GOOGLE_APPS_SCRIPT_URL);\n      if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\n      const jsonData = await response.json();\n      \/\/ PATCH: read row.bet (current schema) with fallback to row.matchup (old schema).\n      \/\/ Normalize the date so ISO timestamps work with split('-') downstream.\n      allData = jsonData.map(row =\u003e ({\n        date: normalizeDate(row.date),\n        sport: (row.sport || '').toUpperCase(),\n        matchup: row.bet || row.matchup || '',\n        type: row.type || '',\n        odds: parseFloat(row.odds) || 0,\n        units: parseFloat(row.units) || 1,\n        result: (row.result || 'pending').toString().toLowerCase(),\n        profit: parseFloat(row.profit) || 0\n      })).filter(row =\u003e row.date \u0026\u0026 row.matchup);\n      console.log(`Loaded ${allData.length} picks from Google Sheets`);\n    } catch (error) {\n      console.error('Error loading data:', error);\n      return;\n    }\n\n    allData.sort((a, b) =\u003e parseDate(b.date) - parseDate(a.date));\n\n    const stats = calculateStats(allData);\n    document.getElementById('jpWeekAllTime').textContent = `${stats.record} (${stats.winRate}%)`;\n    const profitSign = parseFloat(stats.totalProfit) \u003e= 0 ? '+' : '';\n    const roiSign = parseFloat(stats.roi) \u003e= 0 ? '+' : '';\n    document.getElementById('jpWeekAllTimeProfit').textContent = `${profitSign}${formatNumber(parseFloat(stats.totalProfit).toFixed(2))} units | ${roiSign}${stats.roi}% ROI`;\n\n    const profitClass = parseFloat(stats.totalProfit) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const roiClass = parseFloat(stats.roi) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    document.getElementById('jpWeekStatsGrid').innerHTML = `\n      \u003cdiv class=\"jp-dash-card jp-featured\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eRecord\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${stats.record}\u003c\/div\u003e\n        \u003cdiv class=\"jp-sub\"\u003e${formatNumber(stats.totalPicks)} settled picks\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eWin Rate\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${stats.winRate}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eROI\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${roiClass}\"\u003e${roiSign}${stats.roi}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eTotal Profit\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${profitClass}\"\u003e${profitSign}${formatNumber(Math.round(parseFloat(stats.totalProfit)))}u\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n\n    const last20 = allData.filter(p =\u003e p.result !== 'pending').slice(0, 20);\n    document.getElementById('jpWeekStreak').innerHTML = last20.map(pick =\u003e `\n      \u003cdiv class=\"jp-dash-streak-item jp-${pick.result}\" title=\"${pick.matchup} - ${pick.result.toUpperCase()}\"\u003e\n        ${pick.result === 'win' ? 'W' : pick.result === 'loss' ? 'L' : 'P'}\n      \u003c\/div\u003e\n    `).join('');\n\n    const stats30 = calculatePeriodStats(allData, 30);\n    const weekly30 = getWeeklyBreakdown(allData, 30);\n    const weeklyBars = weekly30.map(w =\u003e ({\n      label: `${formatDateShort(w.start)} – ${formatDateShort(w.end)}`,\n      profit: w.profit,\n      start: w.start\n    }));\n    \n    const now = new Date();\n    const thirtyAgo = new Date();\n    thirtyAgo.setDate(thirtyAgo.getDate() - 30);\n    const dateRange30 = `${thirtyAgo.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${now.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`;\n    \n    renderPeriodCard(\n      document.getElementById('jpWeek30Day'),\n      'Last 30 Days',\n      dateRange30,\n      stats30,\n      weeklyBars,\n      true\n    );\n\n    const stats7 = calculatePeriodStats(allData, 7);\n    const daily7 = getDailyBreakdown(allData, 7);\n    const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n    const dailyBars = daily7.map(d =\u003e ({\n      label: dayNames[parseDate(d.date).getDay()],\n      profit: d.profit,\n      date: d.date\n    }));\n    \n    const sevenAgo = new Date();\n    sevenAgo.setDate(sevenAgo.getDate() - 7);\n    const dateRange7 = `${sevenAgo.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${now.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`;\n    \n    renderPeriodCard(\n      document.getElementById('jpWeek7Day'),\n      'Last 7 Days',\n      dateRange7,\n      stats7,\n      dailyBars,\n      true\n    );\n\n    renderChart(allData, '30');\n\n    document.querySelectorAll('.jp-dash-filter-btn').forEach(btn =\u003e {\n      btn.addEventListener('click', function() {\n        document.querySelectorAll('.jp-dash-filter-btn').forEach(b =\u003e b.classList.remove('jp-active'));\n        this.classList.add('jp-active');\n        renderChart(allData, this.dataset.filter);\n      });\n    });\n\n    document.getElementById('jpWeekUpdated').textContent = new Date().toLocaleDateString('en-US', {\n      month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit'\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', loadData);\n  } else {\n    loadData();\n  }\n})();\n\u003c\/script\u003e","brand":"Jolee Picks","offers":[{"title":"Default Title","offer_id":14008372920365,"sku":"","price":50.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0013\/1946\/9101\/files\/F40B0F29-32A8-4D82-9207-45C5E6FB9F61.png?v=1735585129"},{"product_id":"1-month-package-30-days","title":"VIP One Month Package","description":"\u003c!--\n==========================================================\n  JOLEE PICKS — MONTH PACKAGE PRODUCT PAGE ($125)\n  v2 — Paste this into Shopify Product Description (HTML mode)\n\n  CHANGES FROM v1:\n  - Dashboard data fetch: same bug as the results dashboard\n    and year package. Apps Script returns the pick text as\n    `bet` (not `matchup`), and dates as ISO timestamps.\n    Fixed both in loadData() + added normalizeDate().\n  - Year-package upsell line updated from $715 → $400 to\n    match the new year-package pricing.\n==========================================================\n--\u003e\n\n\u003c!-- Google Fonts --\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800;900\u0026amp;family=Open+Sans:wght@400;500;600;700\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n  \/* ===== PRODUCT DESCRIPTION ===== *\/\n  .jp-product {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    color: #1a1a1a;\n    line-height: 1.7;\n    max-width: 800px;\n    margin: 0 auto;\n  }\n  .jp-product-hero {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    border-radius: 12px;\n    padding: 30px;\n    text-align: center;\n    margin-bottom: 25px;\n  }\n  .jp-product-hero-badge {\n    display: inline-block;\n    background: #D4A574;\n    color: #1a1a1a;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    font-weight: 800;\n    padding: 5px 14px;\n    border-radius: 20px;\n    letter-spacing: 1.5px;\n    text-transform: uppercase;\n    margin-bottom: 15px;\n  }\n  .jp-product-hero h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.4rem, 4vw, 1.8rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-product-hero p {\n    font-size: 1rem;\n    color: #b0b0b0;\n    margin: 0;\n    max-width: 500px;\n    margin: 0 auto;\n  }\n  .jp-product-hero .jp-highlight {\n    color: #E8C9A0;\n    font-weight: 700;\n  }\n  .jp-product-includes {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-include-item {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 18px;\n    text-align: center;\n    transition: all 0.2s ease;\n  }\n  .jp-include-item:hover {\n    border-color: #D4A574;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n  }\n  .jp-include-icon {\n    font-size: 1.5rem;\n    margin-bottom: 8px;\n  }\n  .jp-include-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.8rem;\n    font-weight: 700;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-include-desc {\n    font-size: 0.85rem;\n    color: #777;\n    margin-top: 4px;\n  }\n  .jp-product-note {\n    background: #fff9f0;\n    border-left: 4px solid #D4A574;\n    padding: 15px 20px;\n    border-radius: 0 8px 8px 0;\n    margin-bottom: 25px;\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-product-note strong {\n    color: #1a1a1a;\n  }\n  .jp-email-note {\n    background: #f0f0f0;\n    border-radius: 8px;\n    padding: 15px 20px;\n    margin-top: 25px;\n    font-size: 0.8rem;\n    color: #666;\n    line-height: 1.8;\n  }\n  .jp-email-note strong {\n    color: #1a1a1a;\n    display: block;\n    margin-bottom: 5px;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n\n  \/* ===== HOW IT WORKS ===== *\/\n  .jp-how-it-works {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    padding: 50px 20px;\n    color: white;\n    border-radius: 12px;\n    margin: 30px 0;\n  }\n  .jp-how-it-works-container {\n    max-width: 800px;\n    margin: 0 auto;\n  }\n  .jp-how-it-works-title {\n    text-align: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.5rem, 4vw, 2rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-how-it-works-subtitle {\n    text-align: center;\n    font-size: 1rem;\n    color: #D4A574;\n    margin: 0 0 40px 0;\n    font-weight: 500;\n  }\n  .jp-steps-container {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 25px;\n    position: relative;\n  }\n  .jp-steps-container::before {\n    content: '';\n    position: absolute;\n    top: 45px;\n    left: 15%;\n    right: 15%;\n    height: 3px;\n    background: linear-gradient(90deg, #D4A574 0%, #E8C9A0 50%, #D4A574 100%);\n    z-index: 0;\n  }\n  .jp-step {\n    text-align: center;\n    position: relative;\n    z-index: 1;\n  }\n  .jp-step-number {\n    width: 90px;\n    height: 90px;\n    margin: 0 auto 20px;\n    background: linear-gradient(135deg, #D4A574 0%, #E8C9A0 100%);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 2.2rem;\n    font-weight: 900;\n    color: #1a1a1a;\n    box-shadow: 0 8px 25px rgba(212, 165, 116, 0.3);\n    position: relative;\n  }\n  .jp-step-icon {\n    position: absolute;\n    bottom: -5px;\n    right: -5px;\n    width: 35px;\n    height: 35px;\n    background: #1a1a1a;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 1.1rem;\n    border: 3px solid #D4A574;\n  }\n  .jp-step-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.1rem;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 10px;\n    color: white;\n  }\n  .jp-step-description {\n    font-size: 0.9rem;\n    line-height: 1.6;\n    color: #b0b0b0;\n    max-width: 250px;\n    margin: 0 auto;\n  }\n  .jp-step-highlight {\n    color: #D4A574;\n    font-weight: 600;\n  }\n  .jp-hiw-guarantee {\n    text-align: center;\n    margin-top: 35px;\n    font-size: 0.85rem;\n    color: #888;\n  }\n\n  \/* ===== TRIMMED DASHBOARD ===== *\/\n  .jp-dash {\n    font-family: 'Open Sans', sans-serif;\n    color: #1a1a1a;\n    line-height: 1.6;\n    margin-top: 30px;\n  }\n  .jp-dash * { box-sizing: border-box; }\n  .jp-dash-header {\n    text-align: center;\n    margin-bottom: 25px;\n  }\n  .jp-dash-header h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 4vw, 1.8rem);\n    font-weight: 900;\n    color: #1a1a1a;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    margin: 0 0 8px 0;\n  }\n  .jp-dash-header p {\n    font-size: 0.9rem;\n    color: #777;\n    margin: 0;\n  }\n  .jp-dash-verified {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    background: #f8f7f5;\n    border: 2px solid #D4A574;\n    padding: 8px 20px;\n    border-radius: 50px;\n    margin-top: 15px;\n    font-size: 0.8rem;\n    color: #B8956A;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-verified svg {\n    width: 16px;\n    height: 16px;\n    color: #28a745;\n  }\n\n  \/* Headline Stats *\/\n  .jp-dash-headline {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    padding: 25px;\n    border-radius: 12px;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  .jp-dash-headline .jp-main-record {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 3.5vw, 1.8rem);\n    font-weight: 800;\n    margin-bottom: 5px;\n  }\n  .jp-dash-headline .jp-hl { color: #E8C9A0; }\n  .jp-dash-headline .jp-sub {\n    font-size: 0.9rem;\n    opacity: 0.9;\n  }\n\n  \/* Stats Grid *\/\n  .jp-dash-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-dash-card {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 20px;\n    text-align: center;\n    transition: all 0.3s ease;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-card:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n    border-color: #D4A574;\n  }\n  .jp-dash-card.jp-featured {\n    background: linear-gradient(135deg, #E8C9A0 0%, #D4A574 100%);\n    border: none;\n    color: #1a1a1a;\n  }\n  .jp-dash-card .jp-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 8px;\n  }\n  .jp-dash-card.jp-featured .jp-label { color: #1a1a1a; opacity: 0.7; }\n  .jp-dash-card .jp-val {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.8rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    line-height: 1;\n  }\n  .jp-dash-card .jp-val.jp-positive { color: #28a745; }\n  .jp-dash-card .jp-val.jp-negative { color: #dc3545; }\n  .jp-dash-card .jp-sub { font-size: 0.75rem; color: #999; margin-top: 6px; }\n  .jp-dash-card.jp-featured .jp-sub { color: #1a1a1a; opacity: 0.7; }\n\n  \/* Streak *\/\n  .jp-dash-streak {\n    background: #f8f7f5;\n    border-radius: 10px;\n    padding: 20px;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  .jp-dash-streak-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 12px;\n  }\n  .jp-dash-streak-display {\n    display: flex;\n    justify-content: center;\n    gap: 5px;\n    flex-wrap: wrap;\n  }\n  .jp-dash-streak-item {\n    width: 32px;\n    height: 32px;\n    border-radius: 5px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-weight: 800;\n    font-size: 0.7rem;\n  }\n  .jp-dash-streak-item.jp-win { background: #28a745; color: white; }\n  .jp-dash-streak-item.jp-loss { background: #dc3545; color: white; }\n  .jp-dash-streak-item.jp-push { background: #ffc107; color: #1a1a1a; }\n\n  \/* Period Cards *\/\n  .jp-dash-periods {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    gap: 20px;\n    margin-bottom: 25px;\n  }\n  .jp-dash-period {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 22px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-period-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 15px;\n  }\n  .jp-dash-period-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    color: #D4A574;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n  }\n  .jp-dash-period-dates {\n    font-size: 0.7rem;\n    color: #999;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-period-stats {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    margin-bottom: 12px;\n  }\n  .jp-dash-period-profit {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.8rem;\n    font-weight: 800;\n  }\n  .jp-dash-period-profit.jp-positive { color: #28a745; }\n  .jp-dash-period-profit.jp-negative { color: #dc3545; }\n  .jp-dash-period-profit .jp-unit-label {\n    font-size: 0.8rem;\n    color: #888;\n    font-weight: 400;\n  }\n  .jp-dash-period-record {\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-dash-period-record .jp-hl {\n    color: #D4A574;\n    font-weight: 700;\n  }\n  .jp-dash-period-bar-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    color: #999;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 8px;\n  }\n  .jp-dash-bar-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 6px;\n  }\n  .jp-dash-bar-label {\n    font-size: 0.75rem;\n    color: #777;\n    min-width: 55px;\n    font-weight: 600;\n  }\n  .jp-dash-bar-label.jp-current {\n    color: #D4A574;\n    font-weight: 700;\n  }\n  .jp-dash-bar-track {\n    flex: 1;\n    height: 14px;\n    background: #f0f0f0;\n    border-radius: 3px;\n    overflow: hidden;\n  }\n  .jp-dash-bar-fill {\n    height: 100%;\n    border-radius: 3px;\n    min-width: 2px;\n  }\n  .jp-dash-bar-fill.jp-green { background: linear-gradient(to right, #1e7e34, #28a745); }\n  .jp-dash-bar-fill.jp-red { background: linear-gradient(to right, #a71d2a, #dc3545); }\n  .jp-dash-bar-fill.jp-gold { background: linear-gradient(to right, #8B7355, #D4A574); }\n  .jp-dash-bar-value {\n    font-size: 0.75rem;\n    font-weight: 700;\n    min-width: 50px;\n    text-align: right;\n  }\n  .jp-dash-bar-value.jp-positive { color: #28a745; }\n  .jp-dash-bar-value.jp-negative { color: #dc3545; }\n  .jp-dash-bar-value.jp-gold-text { color: #D4A574; }\n\n  \/* Chart *\/\n  .jp-dash-chart-section {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 22px;\n    margin-bottom: 25px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-chart-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 15px;\n    flex-wrap: wrap;\n    gap: 10px;\n  }\n  .jp-dash-chart-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-dash-chart-filters {\n    display: flex;\n    gap: 6px;\n  }\n  .jp-dash-filter-btn {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    color: #4a4a4a;\n    padding: 6px 14px;\n    border-radius: 6px;\n    font-family: 'Open Sans', sans-serif;\n    font-size: 0.75rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.2s ease;\n  }\n  .jp-dash-filter-btn:hover { border-color: #D4A574; color: #B8956A; }\n  .jp-dash-filter-btn.jp-active { background: #D4A574; border-color: #D4A574; color: #1a1a1a; }\n  .jp-dash-chart-container { height: 240px; margin-top: 10px; }\n  .jp-dash-chart-stats {\n    display: flex;\n    justify-content: center;\n    gap: 25px;\n    margin-top: 12px;\n    padding-top: 12px;\n    border-top: 1px solid #e5e5e5;\n    flex-wrap: wrap;\n  }\n  .jp-dash-chart-stat { text-align: center; }\n  .jp-dash-chart-stat-label { font-size: 0.65rem; color: #777; text-transform: uppercase; letter-spacing: 1px; }\n  .jp-dash-chart-stat-value { font-family: 'Montserrat', sans-serif; font-size: 1rem; font-weight: 700; color: #1a1a1a; }\n  .jp-dash-chart-stat-value.jp-positive { color: #28a745; }\n  .jp-dash-chart-stat-value.jp-negative { color: #dc3545; }\n\n  \/* Footer *\/\n  .jp-dash-footer {\n    text-align: center;\n    padding: 20px;\n    color: #999;\n    font-size: 0.8rem;\n    border-top: 1px solid #e5e5e5;\n    margin-top: 10px;\n  }\n  .jp-dash-footer a { color: #B8956A; text-decoration: none; font-weight: 600; }\n  .jp-dash-footer a:hover { text-decoration: underline; }\n  .jp-dash-last-updated { font-size: 0.7rem; color: #bbb; margin-top: 5px; }\n\n  \/* ===== RESPONSIVE ===== *\/\n  @media (max-width: 768px) {\n    .jp-steps-container { grid-template-columns: 1fr; gap: 30px; }\n    .jp-steps-container::before { display: none; }\n    .jp-step-number { width: 70px; height: 70px; font-size: 1.8rem; }\n    .jp-step-icon { width: 30px; height: 30px; font-size: 0.9rem; }\n    .jp-product-includes { grid-template-columns: 1fr 1fr; }\n    .jp-dash-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }\n    .jp-dash-card .jp-val { font-size: 1.4rem; }\n    .jp-dash-periods { grid-template-columns: 1fr; }\n    .jp-dash-chart-header { flex-direction: column; align-items: flex-start; }\n    .jp-dash-chart-filters { width: 100%; overflow-x: auto; }\n    .jp-dash-chart-stats { gap: 15px; }\n    .jp-dash-period-profit { font-size: 1.4rem; }\n  }\n\u003c\/style\u003e\n\n\n\u003c!-- ===== SECTION 1: PRODUCT DESCRIPTION ===== --\u003e\n\n\u003cdiv class=\"jp-product\"\u003e\n\n  \u003cdiv class=\"jp-product-hero\"\u003e\n    \u003cdiv class=\"jp-product-hero-badge\"\u003eBest Value\u003c\/div\u003e\n    \u003ch2\u003e30 Days of VIP Picks\u003c\/h2\u003e\n    \u003cp\u003eGet \u003cspan class=\"jp-highlight\"\u003ea full month of every pick we make\u003c\/span\u003e — whale plays, strong plays, and standard plays delivered daily. Enough time to see the system work through natural variance and stack profit.\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-product-includes\"\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e🐋\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eMax Bets\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eOur highest-conviction whale plays\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e🤖\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eAI-Powered\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003e100,000 game simulations per pick\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e📅\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003e30 Days Access\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eFull month of daily picks\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-include-item\"\u003e\n      \u003cdiv class=\"jp-include-icon\"\u003e✅\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-title\"\u003eVerified\u003c\/div\u003e\n      \u003cdiv class=\"jp-include-desc\"\u003eEvery pick tracked on Action Network\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-product-note\"\u003e\n    \u003cstrong\u003e💡 Why one month?\u003c\/strong\u003e Sports betting has natural variance — even the best systems have cold streaks. A full month gives you enough runway to let our 56%+ win rate and positive ROI compound. Our best months have produced 25+ units of profit. This is the sweet spot for serious bettors.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-upsell\" style=\"background: linear-gradient(135deg, #f8f7f5 0%, #f0ede8 100%); border: 1px solid #e5e5e5; border-radius: 10px; padding: 18px 20px; margin-bottom: 25px; text-align: center; font-size: 0.9rem; color: #555;\"\u003e\n    \u003cstrong style=\"color: #1a1a1a;\"\u003e🏆 Want the full year?\u003c\/strong\u003e Lock in the \u003ca href=\"\/collections\/month\" style=\"color: #D4A574; font-weight: 700; text-decoration: underline;\"\u003e2026 Package for $400\u003c\/a\u003e — save over $1,100 vs monthly and never miss a pick all year.\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"jp-email-note\"\u003e\n    \u003cstrong\u003e📬 Important — Read Before Purchasing\u003c\/strong\u003e\n    Make sure the email you sign up with is the email you want picks sent to. Picks are emailed daily at least 1 hour before the first game. Check spam\/junk if you don't see them. Follow us on Instagram \u003ca href=\"https:\/\/www.instagram.com\/jolee.picks\/\" style=\"color:#D4A574;\"\u003e@jolee.picks\u003c\/a\u003e for release notifications.\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- ===== SECTION 2: HOW IT WORKS ===== --\u003e\n\n\u003cdiv class=\"jp-how-it-works\"\u003e\n  \u003cdiv class=\"jp-how-it-works-container\"\u003e\n    \u003ch2 class=\"jp-how-it-works-title\"\u003eHow It Works\u003c\/h2\u003e\n    \u003cp class=\"jp-how-it-works-subtitle\"\u003eStart winning in 3 simple steps\u003c\/p\u003e\n    \n    \u003cdiv class=\"jp-steps-container\"\u003e\n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          1\n          \u003cdiv class=\"jp-step-icon\"\u003e📱\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eSubscribe\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Choose a plan that fits your style — \u003cspan class=\"jp-step-highlight\"\u003eday pass, weekly, monthly, or yearly\u003c\/span\u003e. Get instant access to all our picks.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          2\n          \u003cdiv class=\"jp-step-icon\"\u003e🔔\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eGet Picks\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Receive daily picks \u003cspan class=\"jp-step-highlight\"\u003estraight to your inbox\u003c\/span\u003e. We send alerts before games with our best bets and max plays.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n      \n      \u003cdiv class=\"jp-step\"\u003e\n        \u003cdiv class=\"jp-step-number\"\u003e\n          3\n          \u003cdiv class=\"jp-step-icon\"\u003e💰\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003ch3 class=\"jp-step-title\"\u003eWin\u003c\/h3\u003e\n        \u003cp class=\"jp-step-description\"\u003e\n          Place your bets on \u003cspan class=\"jp-step-highlight\"\u003eDraftKings, FanDuel, BetMGM\u003c\/span\u003e or your favorite sportsbook. Track results in real-time.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \n    \u003cp class=\"jp-hiw-guarantee\"\u003e\n      ✅ 59% max bet win rate • 4,900+ winning picks • Verified on Action Network\n    \u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- ===== SECTION 3: LIVE DASHBOARD (Trimmed) ===== --\u003e\n\n\u003cdiv class=\"jp-dash\" id=\"jp-month-dashboard\"\u003e\n  \n  \u003cdiv class=\"jp-dash-header\"\u003e\n    \u003ch2\u003e📊 Live Performance Dashboard\u003c\/h2\u003e\n    \u003cp\u003eUpdated automatically from our verified track record\u003c\/p\u003e\n    \u003cdiv class=\"jp-dash-verified\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"\u003e\n        \u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\n        \u003cpath d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"\u003e\u003c\/path\u003e\n      \u003c\/svg\u003e\n      Tracked on Action Network\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- All-Time Headline --\u003e\n  \u003cdiv class=\"jp-dash-headline\"\u003e\n    \u003cdiv class=\"jp-main-record\"\u003eAll Time: \u003cspan class=\"jp-hl\" id=\"jpMonthAllTime\"\u003eLoading...\u003c\/span\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"jp-sub\" id=\"jpMonthAllTimeProfit\"\u003eLoading profit data...\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Quick Stats Grid --\u003e\n  \u003cdiv class=\"jp-dash-grid\" id=\"jpMonthStatsGrid\"\u003e\u003c\/div\u003e\n\n  \u003c!-- Last 20 Streak --\u003e\n  \u003cdiv class=\"jp-dash-streak\"\u003e\n    \u003cdiv class=\"jp-dash-streak-label\"\u003eLast 20 Picks\u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-streak-display\" id=\"jpMonthStreak\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Last 30 Days + Last 7 Days Side by Side --\u003e\n  \u003cdiv class=\"jp-dash-periods\"\u003e\n    \u003cdiv class=\"jp-dash-period\" id=\"jpMonth30Day\"\u003e\u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-period\" id=\"jpMonth7Day\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Profit Chart --\u003e\n  \u003cdiv class=\"jp-dash-chart-section\"\u003e\n    \u003cdiv class=\"jp-dash-chart-header\"\u003e\n      \u003cdiv class=\"jp-dash-chart-title\"\u003e📈 Profit Over Time\u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-filters\"\u003e\n        \u003cbutton class=\"jp-dash-filter-btn jp-active\" data-filter=\"30\"\u003eLast 30 Days\u003c\/button\u003e\n        \u003cbutton class=\"jp-dash-filter-btn\" data-filter=\"7\"\u003eLast 7 Days\u003c\/button\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-chart-container\"\u003e\n      \u003ccanvas id=\"jpMonthChart\"\u003e\u003c\/canvas\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jp-dash-chart-stats\" id=\"jpMonthChartStats\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- Footer --\u003e\n  \u003cdiv class=\"jp-dash-footer\"\u003e\n    \u003cp\u003eAll picks independently tracked on \u003ca href=\"https:\/\/myaction.app\/qwerty123456\" target=\"_blank\"\u003eAction Network\u003c\/a\u003e\u003c\/p\u003e\n    \u003cp class=\"jp-dash-last-updated\"\u003eLast updated: \u003cspan id=\"jpMonthUpdated\"\u003eLoading...\u003c\/span\u003e\u003c\/p\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003c!-- Chart.js --\u003e\n\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e\n\n\u003cscript\u003e\n(function() {\n  const GOOGLE_APPS_SCRIPT_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbwKPPdmwX_FkGiUFz-70D7k_dcV-_T99w1vC62jnnNicli4FM85vfmYya9PYXX05GCp\/exec';\n\n  let allData = [];\n  let profitChart = null;\n\n  function formatNumber(num) {\n    return num.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \",\");\n  }\n\n  \/\/ PATCH: Apps Script returns dates as ISO timestamps like \"2026-05-09T00:00:00.000Z\".\n  \/\/ Strip down to YYYY-MM-DD so downstream split('-') logic stays correct.\n  function normalizeDate(d) {\n    if (d == null) return '';\n    const s = String(d).trim();\n    if (!s) return '';\n    if (\/^\\d{4}-\\d{2}-\\d{2}\/.test(s)) return s.slice(0, 10);\n    const dt = new Date(s);\n    if (isNaN(dt)) return s;\n    const y = dt.getUTCFullYear();\n    const m = String(dt.getUTCMonth() + 1).padStart(2, '0');\n    const day = String(dt.getUTCDate()).padStart(2, '0');\n    return `${y}-${m}-${day}`;\n  }\n\n  function parseDate(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) {\n      return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\n    }\n    return new Date(dateStr);\n  }\n\n  function calculateStats(data) {\n    const settled = data.filter(p =\u003e ['win', 'loss', 'push'].includes(p.result));\n    const wins = settled.filter(p =\u003e p.result === 'win').length;\n    const losses = settled.filter(p =\u003e p.result === 'loss').length;\n    const pushes = settled.filter(p =\u003e p.result === 'push').length;\n    const totalPicks = settled.length;\n    const totalWagered = settled.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const totalProfit = settled.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const winPct = totalPicks \u003e 0 ? ((wins \/ (totalPicks - pushes)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    return { wins, losses, pushes, record: `${formatNumber(wins)}-${formatNumber(losses)}${pushes \u003e 0 ? `-${pushes}` : ''}`, winRate: winPct.toFixed(1), totalProfit: totalProfit.toFixed(2), roi: roi.toFixed(2), totalPicks };\n  }\n\n  function calculatePeriodStats(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    const wins = filtered.filter(p =\u003e p.result === 'win').length;\n    const losses = filtered.filter(p =\u003e p.result === 'loss').length;\n    const pushes = filtered.filter(p =\u003e p.result === 'push').length;\n    const totalProfit = filtered.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const totalWagered = filtered.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const winPct = (wins + losses) \u003e 0 ? ((wins \/ (wins + losses)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    return { wins, losses, pushes, record: `${wins}-${losses}${pushes \u003e 0 ? `-${pushes}` : ''}`, winPct: winPct.toFixed(1), profit: totalProfit.toFixed(2), roi: roi.toFixed(1), filtered };\n  }\n\n  function getDailyBreakdown(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    \n    const daily = {};\n    filtered.forEach(p =\u003e {\n      if (!daily[p.date]) daily[p.date] = { profit: 0, date: p.date };\n      daily[p.date].profit += p.profit;\n    });\n    \n    return Object.values(daily).sort((a, b) =\u003e parseDate(a.date) - parseDate(b.date));\n  }\n\n  function getWeeklyBreakdown(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    \n    const weeks = [];\n    let currentWeek = { start: null, end: null, profit: 0 };\n    \n    const sorted = [...filtered].sort((a, b) =\u003e parseDate(a.date) - parseDate(b.date));\n    \n    sorted.forEach(p =\u003e {\n      const d = parseDate(p.date);\n      const weekStart = new Date(d);\n      weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n      const weekKey = weekStart.toISOString().split('T')[0];\n      \n      if (!currentWeek.key) {\n        currentWeek = { key: weekKey, start: p.date, end: p.date, profit: p.profit };\n      } else if (currentWeek.key === weekKey) {\n        currentWeek.end = p.date;\n        currentWeek.profit += p.profit;\n      } else {\n        weeks.push({ ...currentWeek });\n        currentWeek = { key: weekKey, start: p.date, end: p.date, profit: p.profit };\n      }\n    });\n    if (currentWeek.key) weeks.push({ ...currentWeek });\n    \n    return weeks;\n  }\n\n  function formatDateShort(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) {\n      return `${parseInt(parts[1])}\/${parseInt(parts[2])}`;\n    }\n    return dateStr;\n  }\n\n  function renderPeriodCard(el, title, dateRange, stats, breakdown, isCurrent) {\n    const profitVal = parseFloat(stats.profit);\n    const profitClass = profitVal \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const profitSign = profitVal \u003e= 0 ? '+' : '';\n    \n    const maxVal = Math.max(...breakdown.map(b =\u003e Math.abs(b.profit)), 1);\n    \n    const barsHtml = breakdown.map((b, idx) =\u003e {\n      const isLast = idx === breakdown.length - 1 \u0026\u0026 isCurrent;\n      const barPct = Math.max((Math.abs(b.profit) \/ maxVal) * 100, 2);\n      const barClass = b.profit \u003e= 0 ? (isLast ? 'jp-gold' : 'jp-green') : 'jp-red';\n      const valClass = b.profit \u003e= 0 ? (isLast ? 'jp-gold-text' : 'jp-positive') : 'jp-negative';\n      const labelClass = isLast ? 'jp-dash-bar-label jp-current' : 'jp-dash-bar-label';\n      const sign = b.profit \u003e= 0 ? '+' : '';\n      const label = b.label || formatDateShort(b.start || b.date);\n      return `\n        \u003cdiv class=\"jp-dash-bar-row\"\u003e\n          \u003cdiv class=\"${labelClass}\"\u003e${label}\u003c\/div\u003e\n          \u003cdiv class=\"jp-dash-bar-track\"\u003e\n            \u003cdiv class=\"jp-dash-bar-fill ${barClass}\" style=\"width: ${barPct}%;\"\u003e\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"jp-dash-bar-value ${valClass}\"\u003e${sign}${b.profit.toFixed(2)}u\u003c\/div\u003e\n        \u003c\/div\u003e\n      `;\n    }).join('');\n    \n    const barTypeLabel = breakdown.length \u003e 10 ? 'DAILY BREAKDOWN' : (breakdown[0] \u0026\u0026 breakdown[0].start ? 'WEEKLY BREAKDOWN' : 'DAILY BREAKDOWN');\n    \n    el.innerHTML = `\n      \u003cdiv class=\"jp-dash-period-header\"\u003e\n        \u003cdiv class=\"jp-dash-period-title\"\u003e${title}\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-period-dates\"\u003e${dateRange}\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-period-stats\"\u003e\n        \u003cdiv class=\"jp-dash-period-profit ${profitClass}\"\u003e${profitSign}${stats.profit} \u003cspan class=\"jp-unit-label\"\u003eunits\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-period-record\"\u003e${stats.record} (\u003cspan class=\"jp-hl\"\u003e${stats.winPct}%\u003c\/span\u003e)\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-period-bar-label\"\u003e${barTypeLabel}\u003c\/div\u003e\n      ${barsHtml}\n    `;\n  }\n\n  function renderChart(data, filter) {\n    const days = parseInt(filter);\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const settled = data.filter(p =\u003e p.result !== 'pending').slice().reverse();\n    const filtered = settled.filter(p =\u003e parseDate(p.date) \u003e= cutoff);\n    \n    const ctx = document.getElementById('jpMonthChart').getContext('2d');\n    if (profitChart) profitChart.destroy();\n    \n    const periodStats = calculatePeriodStats(data, days);\n    const profitClass = parseFloat(periodStats.profit) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const roiClass = parseFloat(periodStats.roi) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const profitSign = parseFloat(periodStats.profit) \u003e= 0 ? '+' : '';\n    const roiSign = parseFloat(periodStats.roi) \u003e= 0 ? '+' : '';\n    \n    document.getElementById('jpMonthChartStats').innerHTML = `\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eRecord\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value\"\u003e${periodStats.record}\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eWin %\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value\"\u003e${periodStats.winPct}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eUnits\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value ${profitClass}\"\u003e${profitSign}${periodStats.profit}u\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eROI\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value ${roiClass}\"\u003e${roiSign}${periodStats.roi}%\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n    \n    let cumulative = 0;\n    const chartData = [];\n    const labels = [];\n    filtered.forEach(pick =\u003e {\n      cumulative += pick.profit;\n      labels.push(formatDateShort(pick.date));\n      chartData.push(parseFloat(cumulative.toFixed(2)));\n    });\n\n    const gradient = ctx.createLinearGradient(0, 0, 0, 240);\n    gradient.addColorStop(0, 'rgba(212, 165, 116, 0.4)');\n    gradient.addColorStop(1, 'rgba(212, 165, 116, 0.05)');\n    \n    profitChart = new Chart(ctx, {\n      type: 'line',\n      data: {\n        labels: labels,\n        datasets: [{\n          label: 'Cumulative Profit (Units)',\n          data: chartData,\n          borderColor: '#D4A574',\n          backgroundColor: gradient,\n          borderWidth: 3,\n          fill: true,\n          tension: 0,\n          pointRadius: 0,\n          pointHoverRadius: 6,\n          pointHoverBackgroundColor: '#D4A574',\n          pointHoverBorderColor: '#fff',\n          pointHoverBorderWidth: 2\n        }]\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        interaction: { intersect: false, mode: 'index' },\n        plugins: {\n          legend: { display: false },\n          tooltip: {\n            backgroundColor: '#1a1a1a',\n            titleColor: '#999',\n            bodyColor: '#fff',\n            bodyFont: { size: 14, weight: 'bold' },\n            padding: 12,\n            displayColors: false,\n            callbacks: {\n              label: function(context) {\n                const value = context.parsed.y;\n                return `${value \u003e= 0 ? '+' : ''}${formatNumber(value.toFixed(2))} units`;\n              }\n            }\n          }\n        },\n        scales: {\n          x: { grid: { color: 'rgba(0,0,0,0.05)', drawBorder: false }, ticks: { color: '#999', maxTicksLimit: 8, font: { size: 11 } } },\n          y: { grid: { color: 'rgba(0,0,0,0.05)', drawBorder: false }, ticks: { color: '#999', font: { size: 11 }, callback: function(v) { return (v \u003e= 0 ? '+' : '') + v + 'u'; } } }\n        }\n      }\n    });\n  }\n\n  async function loadData() {\n    try {\n      const response = await fetch(GOOGLE_APPS_SCRIPT_URL);\n      if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\n      const jsonData = await response.json();\n      \/\/ PATCH: read row.bet (current schema) with fallback to row.matchup (old schema).\n      \/\/ Normalize the date so ISO timestamps work with split('-') downstream.\n      allData = jsonData.map(row =\u003e ({\n        date: normalizeDate(row.date),\n        sport: (row.sport || '').toUpperCase(),\n        matchup: row.bet || row.matchup || '',\n        type: row.type || '',\n        odds: parseFloat(row.odds) || 0,\n        units: parseFloat(row.units) || 1,\n        result: (row.result || 'pending').toString().toLowerCase(),\n        profit: parseFloat(row.profit) || 0\n      })).filter(row =\u003e row.date \u0026\u0026 row.matchup);\n      console.log(`Loaded ${allData.length} picks from Google Sheets`);\n    } catch (error) {\n      console.error('Error loading data:', error);\n      return;\n    }\n\n    allData.sort((a, b) =\u003e parseDate(b.date) - parseDate(a.date));\n\n    const stats = calculateStats(allData);\n    document.getElementById('jpMonthAllTime').textContent = `${stats.record} (${stats.winRate}%)`;\n    const profitSign = parseFloat(stats.totalProfit) \u003e= 0 ? '+' : '';\n    const roiSign = parseFloat(stats.roi) \u003e= 0 ? '+' : '';\n    document.getElementById('jpMonthAllTimeProfit').textContent = `${profitSign}${formatNumber(parseFloat(stats.totalProfit).toFixed(2))} units | ${roiSign}${stats.roi}% ROI`;\n\n    const profitClass = parseFloat(stats.totalProfit) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const roiClass = parseFloat(stats.roi) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    document.getElementById('jpMonthStatsGrid').innerHTML = `\n      \u003cdiv class=\"jp-dash-card jp-featured\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eRecord\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${stats.record}\u003c\/div\u003e\n        \u003cdiv class=\"jp-sub\"\u003e${formatNumber(stats.totalPicks)} settled picks\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eWin Rate\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${stats.winRate}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eROI\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${roiClass}\"\u003e${roiSign}${stats.roi}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eTotal Profit\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${profitClass}\"\u003e${profitSign}${formatNumber(Math.round(parseFloat(stats.totalProfit)))}u\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n\n    const last20 = allData.filter(p =\u003e p.result !== 'pending').slice(0, 20);\n    document.getElementById('jpMonthStreak').innerHTML = last20.map(pick =\u003e `\n      \u003cdiv class=\"jp-dash-streak-item jp-${pick.result}\" title=\"${pick.matchup} - ${pick.result.toUpperCase()}\"\u003e\n        ${pick.result === 'win' ? 'W' : pick.result === 'loss' ? 'L' : 'P'}\n      \u003c\/div\u003e\n    `).join('');\n\n    const stats30 = calculatePeriodStats(allData, 30);\n    const weekly30 = getWeeklyBreakdown(allData, 30);\n    const weeklyBars = weekly30.map(w =\u003e ({\n      label: `${formatDateShort(w.start)} – ${formatDateShort(w.end)}`,\n      profit: w.profit,\n      start: w.start\n    }));\n    \n    const now = new Date();\n    const thirtyAgo = new Date();\n    thirtyAgo.setDate(thirtyAgo.getDate() - 30);\n    const dateRange30 = `${thirtyAgo.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${now.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`;\n    \n    renderPeriodCard(\n      document.getElementById('jpMonth30Day'),\n      'Last 30 Days',\n      dateRange30,\n      stats30,\n      weeklyBars,\n      true\n    );\n\n    const stats7 = calculatePeriodStats(allData, 7);\n    const daily7 = getDailyBreakdown(allData, 7);\n    const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n    const dailyBars = daily7.map(d =\u003e ({\n      label: dayNames[parseDate(d.date).getDay()],\n      profit: d.profit,\n      date: d.date\n    }));\n    \n    const sevenAgo = new Date();\n    sevenAgo.setDate(sevenAgo.getDate() - 7);\n    const dateRange7 = `${sevenAgo.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${now.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`;\n    \n    renderPeriodCard(\n      document.getElementById('jpMonth7Day'),\n      'Last 7 Days',\n      dateRange7,\n      stats7,\n      dailyBars,\n      true\n    );\n\n    renderChart(allData, '30');\n\n    document.querySelectorAll('.jp-dash-filter-btn').forEach(btn =\u003e {\n      btn.addEventListener('click', function() {\n        document.querySelectorAll('.jp-dash-filter-btn').forEach(b =\u003e b.classList.remove('jp-active'));\n        this.classList.add('jp-active');\n        renderChart(allData, this.dataset.filter);\n      });\n    });\n\n    document.getElementById('jpMonthUpdated').textContent = new Date().toLocaleDateString('en-US', {\n      month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit'\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', loadData);\n  } else {\n    loadData();\n  }\n})();\n\u003c\/script\u003e","brand":"Jolee Picks","offers":[{"title":"Default Title","offer_id":14008378982445,"sku":"","price":125.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0013\/1946\/9101\/files\/9CBFCD15-6E71-4D0F-9EA6-D5D6D07F17AE.png?v=1735588095"},{"product_id":"vip-2024-year-package","title":"VIP 2026 Year Package","description":"\u003c!--\n==========================================================\n  JOLEE PICKS — 2026 YEAR PACKAGE PRODUCT PAGE ($400)\n  v2 — Paste this into Shopify Product Description (HTML mode)\n\n  CHANGES FROM v1:\n  - Price changed from $715 → $400\n  - Savings line updated ($500 saved vs $185, ~$52\/mo vs ~$60\/mo)\n  - \"Save over $785\" comparison card updated to reflect $400\n  - Dashboard data fetch: same bug as the results dashboard.\n    Apps Script returns the pick text as `bet` (not `matchup`),\n    and dates as ISO timestamps. Fixed both in loadData().\n==========================================================\n--\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c!-- Google Fonts --\u003e\n\u003cp\u003e\u003clink href=\"https:\/\/fonts.googleapis.com\" rel=\"preconnect\"\u003e \u003clink crossorigin=\"\" href=\"https:\/\/fonts.gstatic.com\" rel=\"preconnect\"\u003e \u003clink rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800;900\u0026amp;family=Open+Sans:wght@400;500;600;700\u0026amp;display=swap\"\u003e\u003c\/p\u003e\n\u003cstyle\u003e\n  \/* ===== PRODUCT DESCRIPTION ===== *\/\n  .jp-product {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    color: #1a1a1a;\n    line-height: 1.7;\n    max-width: 800px;\n    margin: 0 auto;\n  }\n  .jp-product-hero {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    border-radius: 12px;\n    padding: 30px;\n    text-align: center;\n    margin-bottom: 25px;\n    border: 2px solid #D4A574;\n    position: relative;\n    overflow: hidden;\n  }\n  .jp-product-hero::before {\n    content: '';\n    position: absolute;\n    top: -50%;\n    left: -50%;\n    width: 200%;\n    height: 200%;\n    background: radial-gradient(circle at 30% 30%, rgba(212,165,116,0.08) 0%, transparent 50%);\n    pointer-events: none;\n  }\n  .jp-product-hero-badge {\n    display: inline-block;\n    background: linear-gradient(135deg, #D4A574 0%, #E8C9A0 100%);\n    color: #1a1a1a;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    font-weight: 800;\n    padding: 5px 14px;\n    border-radius: 20px;\n    letter-spacing: 1.5px;\n    text-transform: uppercase;\n    margin-bottom: 15px;\n    position: relative;\n  }\n  .jp-product-hero h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.4rem, 4vw, 1.8rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin: 0 0 10px 0;\n    color: white;\n    position: relative;\n  }\n  .jp-product-hero p {\n    font-size: 1rem;\n    color: #b0b0b0;\n    margin: 0 auto;\n    max-width: 540px;\n    position: relative;\n  }\n  .jp-product-hero .jp-highlight { color: #E8C9A0; font-weight: 700; }\n  .jp-product-hero .jp-price-line {\n    margin-top: 18px;\n    font-family: 'Montserrat', sans-serif;\n    position: relative;\n  }\n  .jp-product-hero .jp-price-old {\n    font-size: 1.1rem;\n    color: #777;\n    text-decoration: line-through;\n    margin-right: 10px;\n  }\n  .jp-product-hero .jp-price-new {\n    font-size: 1.6rem;\n    font-weight: 900;\n    color: #E8C9A0;\n  }\n  .jp-product-hero .jp-price-savings {\n    display: block;\n    font-size: 0.8rem;\n    color: #28a745;\n    margin-top: 5px;\n    font-weight: 600;\n  }\n  .jp-product-includes {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-include-item {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 18px;\n    text-align: center;\n    transition: all 0.2s ease;\n  }\n  .jp-include-item:hover {\n    border-color: #D4A574;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.08);\n  }\n  .jp-include-item.jp-premium {\n    border: 2px solid #D4A574;\n    background: #fdf9f5;\n  }\n  .jp-include-icon { font-size: 1.5rem; margin-bottom: 8px; }\n  .jp-include-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.8rem;\n    font-weight: 700;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-include-desc { font-size: 0.85rem; color: #777; margin-top: 4px; }\n  .jp-product-note {\n    background: #fff9f0;\n    border-left: 4px solid #D4A574;\n    padding: 15px 20px;\n    border-radius: 0 8px 8px 0;\n    margin-bottom: 25px;\n    font-size: 0.9rem;\n    color: #555;\n  }\n  .jp-product-note strong { color: #1a1a1a; }\n  .jp-savings-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n    gap: 12px;\n    margin-bottom: 25px;\n  }\n  .jp-savings-card {\n    background: #f8f7f5;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 15px;\n    text-align: center;\n  }\n  .jp-savings-card.jp-active-plan {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    border: 2px solid #D4A574;\n    color: white;\n  }\n  .jp-savings-card .jp-sav-plan {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    text-transform: uppercase;\n    letter-spacing: 1.5px;\n    font-weight: 700;\n    color: #777;\n    margin-bottom: 4px;\n  }\n  .jp-savings-card.jp-active-plan .jp-sav-plan { color: #D4A574; }\n  .jp-savings-card .jp-sav-price {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.3rem;\n    font-weight: 800;\n    color: #1a1a1a;\n  }\n  .jp-savings-card.jp-active-plan .jp-sav-price { color: #E8C9A0; }\n  .jp-savings-card .jp-sav-per {\n    font-size: 0.75rem;\n    color: #999;\n  }\n  .jp-savings-card.jp-active-plan .jp-sav-per { color: #28a745; }\n  .jp-email-note {\n    background: #f0f0f0;\n    border-radius: 8px;\n    padding: 15px 20px;\n    margin-top: 25px;\n    font-size: 0.8rem;\n    color: #666;\n    line-height: 1.8;\n  }\n  .jp-email-note strong {\n    color: #1a1a1a;\n    display: block;\n    margin-bottom: 5px;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n\n  \/* ===== HOW IT WORKS ===== *\/\n  .jp-how-it-works {\n    font-family: 'Open Sans', -apple-system, BlinkMacSystemFont, sans-serif;\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    padding: 50px 20px;\n    color: white;\n    border-radius: 12px;\n    margin: 30px 0;\n  }\n  .jp-how-it-works-container { max-width: 800px; margin: 0 auto; }\n  .jp-how-it-works-title {\n    text-align: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.5rem, 4vw, 2rem);\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    margin: 0 0 10px 0;\n    color: white;\n  }\n  .jp-how-it-works-subtitle {\n    text-align: center;\n    font-size: 1rem;\n    color: #D4A574;\n    margin: 0 0 40px 0;\n    font-weight: 500;\n  }\n  .jp-steps-container {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 25px;\n    position: relative;\n  }\n  .jp-steps-container::before {\n    content: '';\n    position: absolute;\n    top: 45px;\n    left: 15%;\n    right: 15%;\n    height: 3px;\n    background: linear-gradient(90deg, #D4A574 0%, #E8C9A0 50%, #D4A574 100%);\n    z-index: 0;\n  }\n  .jp-step { text-align: center; position: relative; z-index: 1; }\n  .jp-step-number {\n    width: 90px;\n    height: 90px;\n    margin: 0 auto 20px;\n    background: linear-gradient(135deg, #D4A574 0%, #E8C9A0 100%);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: 'Montserrat', sans-serif;\n    font-size: 2.2rem;\n    font-weight: 900;\n    color: #1a1a1a;\n    box-shadow: 0 8px 25px rgba(212, 165, 116, 0.3);\n    position: relative;\n  }\n  .jp-step-icon {\n    position: absolute;\n    bottom: -5px;\n    right: -5px;\n    width: 35px;\n    height: 35px;\n    background: #1a1a1a;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 1.1rem;\n    border: 3px solid #D4A574;\n  }\n  .jp-step-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.1rem;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 10px;\n    color: white;\n  }\n  .jp-step-description {\n    font-size: 0.9rem;\n    line-height: 1.6;\n    color: #b0b0b0;\n    max-width: 250px;\n    margin: 0 auto;\n  }\n  .jp-step-highlight { color: #D4A574; font-weight: 600; }\n  .jp-hiw-guarantee {\n    text-align: center;\n    margin-top: 35px;\n    font-size: 0.85rem;\n    color: #888;\n  }\n\n  \/* ===== DASHBOARD — YEAR PACKAGE ===== *\/\n  .jp-dash {\n    font-family: 'Open Sans', sans-serif;\n    color: #1a1a1a;\n    line-height: 1.6;\n    margin-top: 30px;\n  }\n  .jp-dash * { box-sizing: border-box; }\n  .jp-dash-header { text-align: center; margin-bottom: 25px; }\n  .jp-dash-header h2 {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 4vw, 1.8rem);\n    font-weight: 900;\n    color: #1a1a1a;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    margin: 0 0 8px 0;\n  }\n  .jp-dash-header p { font-size: 0.9rem; color: #777; margin: 0; }\n  .jp-dash-verified {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    background: #f8f7f5;\n    border: 2px solid #D4A574;\n    padding: 8px 20px;\n    border-radius: 50px;\n    margin-top: 15px;\n    font-size: 0.8rem;\n    color: #B8956A;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-verified svg { width: 16px; height: 16px; color: #28a745; }\n\n  \/* All-Time Headline *\/\n  .jp-dash-headline {\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n    padding: 25px;\n    border-radius: 12px;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  .jp-dash-headline .jp-main-record {\n    font-family: 'Montserrat', sans-serif;\n    font-size: clamp(1.3rem, 3.5vw, 1.8rem);\n    font-weight: 800;\n    margin-bottom: 5px;\n  }\n  .jp-dash-headline .jp-hl { color: #E8C9A0; }\n  .jp-dash-headline .jp-sub { font-size: 0.9rem; opacity: 0.9; }\n\n  \/* Stats Grid *\/\n  .jp-dash-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n    gap: 15px;\n    margin-bottom: 25px;\n  }\n  .jp-dash-card {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 10px;\n    padding: 20px;\n    text-align: center;\n    transition: all 0.3s ease;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-card:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n    border-color: #D4A574;\n  }\n  .jp-dash-card.jp-featured {\n    background: linear-gradient(135deg, #E8C9A0 0%, #D4A574 100%);\n    border: none;\n    color: #1a1a1a;\n  }\n  .jp-dash-card .jp-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.7rem;\n    color: #777;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    margin-bottom: 8px;\n  }\n  .jp-dash-card.jp-featured .jp-label { color: #1a1a1a; opacity: 0.7; }\n  .jp-dash-card .jp-val {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.8rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    line-height: 1;\n  }\n  .jp-dash-card .jp-val.jp-positive { color: #28a745; }\n  .jp-dash-card .jp-val.jp-negative { color: #dc3545; }\n  .jp-dash-card .jp-sub { font-size: 0.75rem; color: #999; margin-top: 6px; }\n  .jp-dash-card.jp-featured .jp-sub { color: #1a1a1a; opacity: 0.7; }\n\n  \/* Last 30 Days Card *\/\n  .jp-dash-period {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 22px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n    margin-bottom: 25px;\n  }\n  .jp-dash-period-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 15px;\n  }\n  .jp-dash-period-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    color: #D4A574;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n  }\n  .jp-dash-period-dates {\n    font-size: 0.7rem;\n    color: #999;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n  }\n  .jp-dash-period-stats {\n    display: flex;\n    justify-content: space-between;\n    align-items: baseline;\n    margin-bottom: 12px;\n  }\n  .jp-dash-period-profit {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.8rem;\n    font-weight: 800;\n  }\n  .jp-dash-period-profit.jp-positive { color: #28a745; }\n  .jp-dash-period-profit.jp-negative { color: #dc3545; }\n  .jp-dash-period-profit .jp-unit-label { font-size: 0.8rem; color: #888; font-weight: 400; }\n  .jp-dash-period-record { font-size: 0.9rem; color: #555; }\n  .jp-dash-period-record .jp-hl { color: #D4A574; font-weight: 700; }\n  .jp-dash-period-bar-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    color: #999;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    margin-bottom: 8px;\n  }\n  .jp-dash-bar-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 6px;\n  }\n  .jp-dash-bar-label {\n    font-size: 0.75rem;\n    color: #777;\n    min-width: 55px;\n    font-weight: 600;\n  }\n  .jp-dash-bar-label.jp-current { color: #D4A574; font-weight: 700; }\n  .jp-dash-bar-track {\n    flex: 1;\n    height: 14px;\n    background: #f0f0f0;\n    border-radius: 3px;\n    overflow: hidden;\n  }\n  .jp-dash-bar-fill {\n    height: 100%;\n    border-radius: 3px;\n    min-width: 2px;\n  }\n  .jp-dash-bar-fill.jp-green { background: linear-gradient(to right, #1e7e34, #28a745); }\n  .jp-dash-bar-fill.jp-red { background: linear-gradient(to right, #a71d2a, #dc3545); }\n  .jp-dash-bar-fill.jp-gold { background: linear-gradient(to right, #8B7355, #D4A574); }\n  .jp-dash-bar-value {\n    font-size: 0.75rem;\n    font-weight: 700;\n    min-width: 50px;\n    text-align: right;\n  }\n  .jp-dash-bar-value.jp-positive { color: #28a745; }\n  .jp-dash-bar-value.jp-negative { color: #dc3545; }\n  .jp-dash-bar-value.jp-gold-text { color: #D4A574; }\n\n  \/* Yearly Results Section *\/\n  .jp-yearly-section {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    overflow: hidden;\n    margin-bottom: 25px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-yearly-header {\n    padding: 18px 22px;\n    border-bottom: 1px solid #e5e5e5;\n  }\n  .jp-yearly-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.9rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-yearly-subtitle {\n    font-size: 0.8rem;\n    color: #777;\n    margin-top: 3px;\n  }\n  .jp-yearly-body { padding: 22px; }\n  .jp-yearly-row {\n    display: grid;\n    grid-template-columns: 70px 1fr 80px 80px;\n    align-items: center;\n    gap: 12px;\n    padding: 14px 0;\n    border-bottom: 1px solid #f0f0f0;\n  }\n  .jp-yearly-row:last-child { border-bottom: none; }\n  .jp-yearly-row.jp-year-current {\n    background: #fdf9f5;\n    margin: 0 -22px;\n    padding: 14px 22px;\n    border-radius: 8px;\n    border: 1px solid #D4A574;\n    border-bottom: 1px solid #D4A574;\n  }\n  .jp-yearly-year {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1rem;\n    font-weight: 800;\n    color: #1a1a1a;\n  }\n  .jp-yearly-row.jp-year-current .jp-yearly-year { color: #D4A574; }\n  .jp-yearly-bar-container { position: relative; }\n  .jp-yearly-bar-track {\n    height: 24px;\n    background: #f0f0f0;\n    border-radius: 4px;\n    overflow: hidden;\n    position: relative;\n  }\n  .jp-yearly-bar-fill {\n    height: 100%;\n    border-radius: 4px;\n    min-width: 2px;\n    display: flex;\n    align-items: center;\n    padding-left: 8px;\n  }\n  .jp-yearly-bar-fill.jp-green { background: linear-gradient(to right, #1e7e34, #28a745); }\n  .jp-yearly-bar-fill.jp-red { background: linear-gradient(to right, #a71d2a, #dc3545); }\n  .jp-yearly-bar-fill.jp-gold { background: linear-gradient(to right, #8B7355, #D4A574); }\n  .jp-yearly-bar-inner-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.65rem;\n    font-weight: 700;\n    color: white;\n    white-space: nowrap;\n  }\n  .jp-yearly-record {\n    font-size: 0.8rem;\n    color: #555;\n    text-align: center;\n    font-weight: 600;\n  }\n  .jp-yearly-profit {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.95rem;\n    font-weight: 800;\n    text-align: right;\n  }\n  .jp-yearly-profit.jp-positive { color: #28a745; }\n  .jp-yearly-profit.jp-negative { color: #dc3545; }\n  .jp-yearly-profit.jp-gold-text { color: #D4A574; }\n  .jp-yearly-total {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 18px 22px;\n    background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);\n    color: white;\n  }\n  .jp-yearly-total-label {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 0.75rem;\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    font-weight: 700;\n    color: #b0b0b0;\n  }\n  .jp-yearly-total-value {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1.4rem;\n    font-weight: 900;\n    color: #E8C9A0;\n  }\n\n  \/* Profit Chart *\/\n  .jp-dash-chart-section {\n    background: #fff;\n    border: 1px solid #e5e5e5;\n    border-radius: 12px;\n    padding: 22px;\n    margin-bottom: 25px;\n    box-shadow: 0 2px 8px rgba(0,0,0,0.06);\n  }\n  .jp-dash-chart-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 15px;\n    flex-wrap: wrap;\n    gap: 10px;\n  }\n  .jp-dash-chart-title {\n    font-family: 'Montserrat', sans-serif;\n    font-size: 1rem;\n    font-weight: 800;\n    color: #1a1a1a;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n  }\n  .jp-dash-chart-container { height: 240px; margin-top: 10px; }\n  .jp-dash-chart-stats {\n    display: flex;\n    justify-content: center;\n    gap: 25px;\n    margin-top: 12px;\n    padding-top: 12px;\n    border-top: 1px solid #e5e5e5;\n    flex-wrap: wrap;\n  }\n  .jp-dash-chart-stat { text-align: center; }\n  .jp-dash-chart-stat-label { font-size: 0.65rem; color: #777; text-transform: uppercase; letter-spacing: 1px; }\n  .jp-dash-chart-stat-value { font-family: 'Montserrat', sans-serif; font-size: 1rem; font-weight: 700; color: #1a1a1a; }\n  .jp-dash-chart-stat-value.jp-positive { color: #28a745; }\n  .jp-dash-chart-stat-value.jp-negative { color: #dc3545; }\n\n  \/* Footer *\/\n  .jp-dash-footer {\n    text-align: center;\n    padding: 20px;\n    color: #999;\n    font-size: 0.8rem;\n    border-top: 1px solid #e5e5e5;\n    margin-top: 10px;\n  }\n  .jp-dash-footer a { color: #B8956A; text-decoration: none; font-weight: 600; }\n  .jp-dash-footer a:hover { text-decoration: underline; }\n  .jp-dash-last-updated { font-size: 0.7rem; color: #bbb; margin-top: 5px; }\n\n  \/* ===== RESPONSIVE ===== *\/\n  @media (max-width: 768px) {\n    .jp-steps-container { grid-template-columns: 1fr; gap: 30px; }\n    .jp-steps-container::before { display: none; }\n    .jp-step-number { width: 70px; height: 70px; font-size: 1.8rem; }\n    .jp-step-icon { width: 30px; height: 30px; font-size: 0.9rem; }\n    .jp-product-includes { grid-template-columns: 1fr 1fr; }\n    .jp-savings-grid { grid-template-columns: 1fr 1fr; }\n    .jp-dash-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }\n    .jp-dash-card .jp-val { font-size: 1.4rem; }\n    .jp-dash-period-profit { font-size: 1.4rem; }\n    .jp-yearly-row { grid-template-columns: 50px 1fr 60px 65px; gap: 8px; }\n    .jp-yearly-year { font-size: 0.85rem; }\n    .jp-yearly-record { font-size: 0.7rem; }\n    .jp-yearly-profit { font-size: 0.85rem; }\n    .jp-yearly-bar-track { height: 20px; }\n    .jp-dash-chart-stats { gap: 15px; }\n  }\n\u003c\/style\u003e\n\u003c!-- ===== SECTION 1: PRODUCT DESCRIPTION ===== --\u003e\n\u003cdiv class=\"jp-product\"\u003e\n\u003cdiv class=\"jp-product-hero\"\u003e\n\u003cdiv class=\"jp-product-hero-badge\"\u003e🏆 All-Access 2026\u003c\/div\u003e\n\u003ch2\u003eThe Rest of 2026 — Every Pick, Every Day\u003c\/h2\u003e\n\u003cp\u003eLock in \u003cspan class=\"jp-highlight\"\u003eevery pick we make for the rest of 2026\u003c\/span\u003e — whale plays, strong plays, standard plays, every sport, every day. The ultimate package for serious bettors.\u003c\/p\u003e\n\u003cdiv class=\"jp-price-line\"\u003e\n\u003cspan class=\"jp-price-old\"\u003e$900\u003c\/span\u003e \u003cspan class=\"jp-price-new\"\u003e$400\u003c\/span\u003e \u003cspan class=\"jp-price-savings\"\u003eSave $500 — that's about $52\/month\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-product-includes\"\u003e\n\u003cdiv class=\"jp-include-item jp-premium\"\u003e\n\u003cdiv class=\"jp-include-icon\"\u003e🏆\u003c\/div\u003e\n\u003cdiv class=\"jp-include-title\"\u003eAll of 2026\u003c\/div\u003e\n\u003cdiv class=\"jp-include-desc\"\u003eEvery remaining day this year\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-include-item\"\u003e\n\u003cdiv class=\"jp-include-icon\"\u003e🐋\u003c\/div\u003e\n\u003cdiv class=\"jp-include-title\"\u003eEvery Max Bet\u003c\/div\u003e\n\u003cdiv class=\"jp-include-desc\"\u003e59% win rate on whale plays\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-include-item\"\u003e\n\u003cdiv class=\"jp-include-icon\"\u003e🤖\u003c\/div\u003e\n\u003cdiv class=\"jp-include-title\"\u003eAI-Powered\u003c\/div\u003e\n\u003cdiv class=\"jp-include-desc\"\u003e100,000 simulations per game\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-include-item\"\u003e\n\u003cdiv class=\"jp-include-icon\"\u003e✅\u003c\/div\u003e\n\u003cdiv class=\"jp-include-title\"\u003eVerified\u003c\/div\u003e\n\u003cdiv class=\"jp-include-desc\"\u003eTracked on Action Network\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-savings-grid\"\u003e\n\u003cdiv class=\"jp-savings-card\"\u003e\n\u003cdiv class=\"jp-sav-plan\"\u003eMonthly\u003c\/div\u003e\n\u003cdiv class=\"jp-sav-price\"\u003e$125\/mo\u003c\/div\u003e\n\u003cdiv class=\"jp-sav-per\"\u003e$1,500\/year\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-savings-card\"\u003e\n\u003cdiv class=\"jp-sav-plan\"\u003eWeekly\u003c\/div\u003e\n\u003cdiv class=\"jp-sav-price\"\u003e$50\/wk\u003c\/div\u003e\n\u003cdiv class=\"jp-sav-per\"\u003e$2,600\/year\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-savings-card jp-active-plan\"\u003e\n\u003cdiv class=\"jp-sav-plan\"\u003e2026 Package\u003c\/div\u003e\n\u003cdiv class=\"jp-sav-price\"\u003e$400\u003c\/div\u003e\n\u003cdiv class=\"jp-sav-per\"\u003eSave over $1,100 vs monthly\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-product-note\"\u003e\n\u003cstrong\u003e🏆 Why the full year?\u003c\/strong\u003e Five profitable years running. No more worrying about renewals, no more missing picks. Lock it in once and get every single play we make — NFL, NBA, NCAAB, MLB, NHL, and more. This is how our most successful subscribers roll.\u003c\/div\u003e\n\u003cdiv class=\"jp-email-note\"\u003e\n\u003cstrong\u003e📬 Important — Read Before Purchasing\u003c\/strong\u003e Make sure the email you sign up with is the email you want picks sent to. Picks are emailed daily at least 1 hour before the first game. Check spam\/junk if you don't see them. Follow us on Instagram \u003ca style=\"color: #d4a574;\" href=\"https:\/\/www.instagram.com\/jolee.picks\/\"\u003e@jolee.picks\u003c\/a\u003e for release notifications.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ===== SECTION 2: HOW IT WORKS ===== --\u003e\n\u003cdiv class=\"jp-how-it-works\"\u003e\n\u003cdiv class=\"jp-how-it-works-container\"\u003e\n\u003ch2 class=\"jp-how-it-works-title\"\u003eHow It Works\u003c\/h2\u003e\n\u003cp class=\"jp-how-it-works-subtitle\"\u003eStart winning in 3 simple steps\u003c\/p\u003e\n\u003cdiv class=\"jp-steps-container\"\u003e\n\u003cdiv class=\"jp-step\"\u003e\n\u003cdiv class=\"jp-step-number\"\u003e1\n\u003cdiv class=\"jp-step-icon\"\u003e📱\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 class=\"jp-step-title\"\u003eSubscribe\u003c\/h3\u003e\n\u003cp class=\"jp-step-description\"\u003eLock in the \u003cspan class=\"jp-step-highlight\"\u003e2026 package\u003c\/span\u003e and get instant all-access to every pick we make for the rest of the year.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-step\"\u003e\n\u003cdiv class=\"jp-step-number\"\u003e2\n\u003cdiv class=\"jp-step-icon\"\u003e🔔\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 class=\"jp-step-title\"\u003eGet Picks\u003c\/h3\u003e\n\u003cp class=\"jp-step-description\"\u003eReceive daily picks \u003cspan class=\"jp-step-highlight\"\u003estraight to your inbox\u003c\/span\u003e. Whale plays, strong plays, every sport — all year long.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-step\"\u003e\n\u003cdiv class=\"jp-step-number\"\u003e3\n\u003cdiv class=\"jp-step-icon\"\u003e💰\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 class=\"jp-step-title\"\u003eWin\u003c\/h3\u003e\n\u003cp class=\"jp-step-description\"\u003ePlace your bets on \u003cspan class=\"jp-step-highlight\"\u003eDraftKings, FanDuel, BetMGM\u003c\/span\u003e or your favorite sportsbook. Track results in real-time.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp class=\"jp-hiw-guarantee\"\u003e✅ 5 profitable years running • 59% max bet win rate • Verified on Action Network\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ===== SECTION 3: LIVE DASHBOARD — YEAR PACKAGE ===== --\u003e\n\u003cdiv id=\"jp-year-dashboard\" class=\"jp-dash\"\u003e\n\u003cdiv class=\"jp-dash-header\"\u003e\n\u003ch2\u003e📊 Live Performance Dashboard\u003c\/h2\u003e\n\u003cp\u003eFive years of verified, profitable results\u003c\/p\u003e\n\u003cdiv class=\"jp-dash-verified\"\u003e\n\u003csvg stroke-width=\"2.5\" stroke=\"currentColor\" fill=\"none\" viewbox=\"0 0 24 24\"\u003e\n        \u003cpath d=\"M9 12l2 2 4-4\"\u003e\u003c\/path\u003e\n        \u003cpath d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"\u003e\u003c\/path\u003e\n      \u003c\/svg\u003e Tracked on Action Network\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- All-Time Headline --\u003e\n\u003cdiv class=\"jp-dash-headline\"\u003e\n\u003cdiv class=\"jp-main-record\"\u003eAll Time: \u003cspan id=\"jpYearAllTime\" class=\"jp-hl\"\u003eLoading...\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"jpYearAllTimeProfit\" class=\"jp-sub\"\u003eLoading profit data...\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Quick Stats Grid --\u003e\n\u003cdiv id=\"jpYearStatsGrid\" class=\"jp-dash-grid\"\u003e\u003c\/div\u003e\n\u003c!-- Last 30 Days --\u003e\n\u003cdiv id=\"jpYear30Day\" class=\"jp-dash-period\"\u003e\u003c\/div\u003e\n\u003c!-- Yearly Results --\u003e\n\u003cdiv class=\"jp-yearly-section\"\u003e\n\u003cdiv class=\"jp-yearly-header\"\u003e\n\u003cdiv class=\"jp-yearly-title\"\u003e📅 Year-by-Year Results\u003c\/div\u003e\n\u003cdiv class=\"jp-yearly-subtitle\"\u003eEvery year since we started — all verified on Action Network\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"jpYearlyBody\" class=\"jp-yearly-body\"\u003e\n\u003cdiv style=\"text-align: center; padding: 30px; color: #999;\"\u003eLoading yearly data...\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-yearly-total\"\u003e\n\u003cdiv class=\"jp-yearly-total-label\"\u003eAll-Time Total\u003c\/div\u003e\n\u003cdiv id=\"jpYearlyTotal\" class=\"jp-yearly-total-value\"\u003eLoading...\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Profit Chart (Last 30 days) --\u003e\n\u003cdiv class=\"jp-dash-chart-section\"\u003e\n\u003cdiv class=\"jp-dash-chart-header\"\u003e\n\u003cdiv class=\"jp-dash-chart-title\"\u003e📈 Last 30 Days — Profit Over Time\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jp-dash-chart-container\"\u003e\u003ccanvas id=\"jpYearChart\"\u003e\u003c\/canvas\u003e\u003c\/div\u003e\n\u003cdiv id=\"jpYearChartStats\" class=\"jp-dash-chart-stats\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ===== NO REFUND NOTICE ===== --\u003e\n\u003cdiv style=\"background: #f5f0f0; border-left: 4px solid #dc3545;\" class=\"jp-product-note\"\u003e\n\u003cstrong\u003e⚠️ No Refunds — All Sales Final\u003c\/strong\u003e By completing your purchase, you acknowledge and agree that all sales are final and non-refundable. Jolee Picks delivers digital sports information services that are consumed immediately upon delivery and cannot be returned. No refunds, credits, or chargebacks will be issued for any reason, including dissatisfaction with picks, gambling losses, unused subscription time, or early cancellation. Initiating a chargeback or payment dispute constitutes a breach of our \u003ca style=\"color: #dc3545; font-weight: 600;\" href=\"https:\/\/www.joleepicks.com\/pages\/terms-and-conditions\"\u003eTerms and Conditions\u003c\/a\u003e and may result in immediate termination of your subscription and pursuit of all fees and costs incurred. By purchasing, you confirm you have read and agree to our full Terms and Conditions.\u003c\/div\u003e\n\u003c!-- Footer --\u003e\n\u003cdiv class=\"jp-dash-footer\"\u003e\n\u003cp\u003eAll picks independently tracked on \u003ca href=\"https:\/\/myaction.app\/qwerty123456\" target=\"_blank\"\u003eAction Network\u003c\/a\u003e\u003c\/p\u003e\n\u003cp class=\"jp-dash-last-updated\"\u003eLast updated: \u003cspan id=\"jpYearUpdated\"\u003eLoading...\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Chart.js --\u003e\n\u003cp\u003e\u003cscript src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"\u003e\u003c\/script\u003e \u003cscript\u003e\n(function() {\n  const GOOGLE_APPS_SCRIPT_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbwKPPdmwX_FkGiUFz-70D7k_dcV-_T99w1vC62jnnNicli4FM85vfmYya9PYXX05GCp\/exec';\n\n  let allData = [];\n  let profitChart = null;\n\n  function formatNumber(num) {\n    return num.toString().replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, \",\");\n  }\n\n  \/\/ PATCH: Apps Script returns dates as ISO timestamps like \"2026-05-09T00:00:00.000Z\".\n  \/\/ Strip down to YYYY-MM-DD so downstream split('-') logic stays correct.\n  function normalizeDate(d) {\n    if (d == null) return '';\n    const s = String(d).trim();\n    if (!s) return '';\n    if (\/^\\d{4}-\\d{2}-\\d{2}\/.test(s)) return s.slice(0, 10);\n    const dt = new Date(s);\n    if (isNaN(dt)) return s;\n    const y = dt.getUTCFullYear();\n    const m = String(dt.getUTCMonth() + 1).padStart(2, '0');\n    const day = String(dt.getUTCDate()).padStart(2, '0');\n    return `${y}-${m}-${day}`;\n  }\n\n  function parseDate(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]));\n    return new Date(dateStr);\n  }\n\n  function formatDateShort(dateStr) {\n    const parts = dateStr.split('-');\n    if (parts.length === 3) return `${parseInt(parts[1])}\/${parseInt(parts[2])}`;\n    return dateStr;\n  }\n\n  function calculateStats(data) {\n    const settled = data.filter(p =\u003e ['win', 'loss', 'push'].includes(p.result));\n    const wins = settled.filter(p =\u003e p.result === 'win').length;\n    const losses = settled.filter(p =\u003e p.result === 'loss').length;\n    const pushes = settled.filter(p =\u003e p.result === 'push').length;\n    const totalPicks = settled.length;\n    const totalWagered = settled.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const totalProfit = settled.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const winPct = totalPicks \u003e 0 ? ((wins \/ (totalPicks - pushes)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    return { wins, losses, pushes, record: `${formatNumber(wins)}-${formatNumber(losses)}${pushes \u003e 0 ? `-${pushes}` : ''}`, winRate: winPct.toFixed(1), totalProfit: totalProfit.toFixed(2), roi: roi.toFixed(2), totalPicks };\n  }\n\n  function calculatePeriodStats(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    const wins = filtered.filter(p =\u003e p.result === 'win').length;\n    const losses = filtered.filter(p =\u003e p.result === 'loss').length;\n    const pushes = filtered.filter(p =\u003e p.result === 'push').length;\n    const totalProfit = filtered.reduce((sum, p) =\u003e sum + p.profit, 0);\n    const totalWagered = filtered.reduce((sum, p) =\u003e sum + Math.abs(p.units), 0);\n    const winPct = (wins + losses) \u003e 0 ? ((wins \/ (wins + losses)) * 100) : 0;\n    const roi = totalWagered \u003e 0 ? ((totalProfit \/ totalWagered) * 100) : 0;\n    return { wins, losses, pushes, record: `${wins}-${losses}${pushes \u003e 0 ? `-${pushes}` : ''}`, winPct: winPct.toFixed(1), profit: totalProfit.toFixed(2), roi: roi.toFixed(1), filtered };\n  }\n\n  function getWeeklyBreakdown(data, days) {\n    const cutoff = new Date();\n    cutoff.setDate(cutoff.getDate() - days);\n    const filtered = data.filter(p =\u003e parseDate(p.date) \u003e= cutoff \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    const sorted = [...filtered].sort((a, b) =\u003e parseDate(a.date) - parseDate(b.date));\n    const weeks = [];\n    let currentWeek = {};\n    sorted.forEach(p =\u003e {\n      const d = parseDate(p.date);\n      const weekStart = new Date(d);\n      weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n      const weekKey = weekStart.toISOString().split('T')[0];\n      if (!currentWeek.key) {\n        currentWeek = { key: weekKey, start: p.date, end: p.date, profit: p.profit };\n      } else if (currentWeek.key === weekKey) {\n        currentWeek.end = p.date;\n        currentWeek.profit += p.profit;\n      } else {\n        weeks.push({ ...currentWeek });\n        currentWeek = { key: weekKey, start: p.date, end: p.date, profit: p.profit };\n      }\n    });\n    if (currentWeek.key) weeks.push({ ...currentWeek });\n    return weeks;\n  }\n\n  function getYearlyResults(data) {\n    const settled = data.filter(p =\u003e ['win', 'loss', 'push'].includes(p.result));\n    const years = {};\n    settled.forEach(p =\u003e {\n      const year = p.date.split('-')[0];\n      if (!years[year]) years[year] = { wins: 0, losses: 0, pushes: 0, profit: 0 };\n      if (p.result === 'win') years[year].wins++;\n      else if (p.result === 'loss') years[year].losses++;\n      else years[year].pushes++;\n      years[year].profit += p.profit;\n    });\n    return Object.entries(years)\n      .sort((a, b) =\u003e parseInt(b[0]) - parseInt(a[0]))\n      .slice(0, 5)\n      .map(([year, stats]) =\u003e ({\n        year,\n        wins: stats.wins,\n        losses: stats.losses,\n        pushes: stats.pushes,\n        record: `${stats.wins}-${stats.losses}${stats.pushes \u003e 0 ? `-${stats.pushes}` : ''}`,\n        winPct: ((stats.wins \/ (stats.wins + stats.losses)) * 100).toFixed(1),\n        profit: stats.profit\n      }));\n  }\n\n  async function loadData() {\n    try {\n      const response = await fetch(GOOGLE_APPS_SCRIPT_URL);\n      if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\n      const jsonData = await response.json();\n      \/\/ PATCH: read row.bet (current schema) with fallback to row.matchup (old schema).\n      \/\/ Normalize the date so ISO timestamps work with split('-') downstream.\n      allData = jsonData.map(row =\u003e ({\n        date: normalizeDate(row.date),\n        sport: (row.sport || '').toUpperCase(),\n        matchup: row.bet || row.matchup || '',\n        type: row.type || '',\n        odds: parseFloat(row.odds) || 0,\n        units: parseFloat(row.units) || 1,\n        result: (row.result || 'pending').toString().toLowerCase(),\n        profit: parseFloat(row.profit) || 0\n      })).filter(row =\u003e row.date \u0026\u0026 row.matchup);\n      console.log(`Loaded ${allData.length} picks from Google Sheets`);\n    } catch (error) {\n      console.error('Error loading data:', error);\n      return;\n    }\n\n    allData.sort((a, b) =\u003e parseDate(b.date) - parseDate(a.date));\n    const currentYear = new Date().getFullYear().toString();\n\n    \/\/ All-time stats\n    const stats = calculateStats(allData);\n    document.getElementById('jpYearAllTime').textContent = `${stats.record} (${stats.winRate}%)`;\n    const profitSign = parseFloat(stats.totalProfit) \u003e= 0 ? '+' : '';\n    const roiSign = parseFloat(stats.roi) \u003e= 0 ? '+' : '';\n    document.getElementById('jpYearAllTimeProfit').textContent = `${profitSign}${formatNumber(parseFloat(stats.totalProfit).toFixed(2))} units | ${roiSign}${stats.roi}% ROI`;\n\n    \/\/ Max bet stats\n    const maxBets = allData.filter(p =\u003e p.units \u003e= 3 \u0026\u0026 ['win', 'loss', 'push'].includes(p.result));\n    const mbWins = maxBets.filter(p =\u003e p.result === 'win').length;\n    const mbLosses = maxBets.filter(p =\u003e p.result === 'loss').length;\n    const mbWinPct = (mbWins + mbLosses) \u003e 0 ? ((mbWins \/ (mbWins + mbLosses)) * 100).toFixed(1) : '0';\n    const mbProfit = maxBets.reduce((sum, p) =\u003e sum + p.profit, 0);\n\n    \/\/ Stats grid\n    const profitClass = parseFloat(stats.totalProfit) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const mbProfitClass = mbProfit \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const mbProfitSign = mbProfit \u003e= 0 ? '+' : '';\n\n    document.getElementById('jpYearStatsGrid').innerHTML = `\n      \u003cdiv class=\"jp-dash-card jp-featured\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eRecord\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${stats.record}\u003c\/div\u003e\n        \u003cdiv class=\"jp-sub\"\u003e${formatNumber(stats.totalPicks)} settled picks\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eWin Rate\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${stats.winRate}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eTotal Profit\u003c\/div\u003e\n        \u003cdiv class=\"jp-val ${profitClass}\"\u003e${profitSign}${formatNumber(Math.round(parseFloat(stats.totalProfit)))}u\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-card\"\u003e\n        \u003cdiv class=\"jp-label\"\u003eMax Bets\u003c\/div\u003e\n        \u003cdiv class=\"jp-val\"\u003e${mbWinPct}%\u003c\/div\u003e\n        \u003cdiv class=\"jp-sub\"\u003e${mbProfitSign}${mbProfit.toFixed(0)}u profit\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n\n    \/\/ Last 30 days with weekly bars\n    const stats30 = calculatePeriodStats(allData, 30);\n    const weekly30 = getWeeklyBreakdown(allData, 30);\n    const weeklyBars = weekly30.map(w =\u003e ({\n      label: `${formatDateShort(w.start)} – ${formatDateShort(w.end)}`,\n      profit: w.profit,\n      start: w.start\n    }));\n    const now = new Date();\n    const thirtyAgo = new Date();\n    thirtyAgo.setDate(thirtyAgo.getDate() - 30);\n    const dateRange30 = `${thirtyAgo.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} – ${now.toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`;\n    const profitVal30 = parseFloat(stats30.profit);\n    const profitClass30 = profitVal30 \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    const profitSign30 = profitVal30 \u003e= 0 ? '+' : '';\n    const maxWeekVal = Math.max(...weeklyBars.map(b =\u003e Math.abs(b.profit)), 1);\n\n    document.getElementById('jpYear30Day').innerHTML = `\n      \u003cdiv class=\"jp-dash-period-header\"\u003e\n        \u003cdiv class=\"jp-dash-period-title\"\u003eLast 30 Days\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-period-dates\"\u003e${dateRange30}\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-period-stats\"\u003e\n        \u003cdiv class=\"jp-dash-period-profit ${profitClass30}\"\u003e${profitSign30}${stats30.profit} \u003cspan class=\"jp-unit-label\"\u003eunits\u003c\/span\u003e\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-period-record\"\u003e${stats30.record} (\u003cspan class=\"jp-hl\"\u003e${stats30.winPct}%\u003c\/span\u003e)\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-period-bar-label\"\u003eWEEKLY BREAKDOWN\u003c\/div\u003e\n      ${weeklyBars.map((b, idx) =\u003e {\n        const isLast = idx === weeklyBars.length - 1;\n        const barPct = Math.max((Math.abs(b.profit) \/ maxWeekVal) * 100, 2);\n        const barClass = b.profit \u003e= 0 ? (isLast ? 'jp-gold' : 'jp-green') : 'jp-red';\n        const valClass = b.profit \u003e= 0 ? (isLast ? 'jp-gold-text' : 'jp-positive') : 'jp-negative';\n        const labelClass = isLast ? 'jp-dash-bar-label jp-current' : 'jp-dash-bar-label';\n        const sign = b.profit \u003e= 0 ? '+' : '';\n        return `\n          \u003cdiv class=\"jp-dash-bar-row\"\u003e\n            \u003cdiv class=\"${labelClass}\"\u003e${b.label}\u003c\/div\u003e\n            \u003cdiv class=\"jp-dash-bar-track\"\u003e\n              \u003cdiv class=\"jp-dash-bar-fill ${barClass}\" style=\"width: ${barPct}%;\"\u003e\u003c\/div\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"jp-dash-bar-value ${valClass}\"\u003e${sign}${b.profit.toFixed(2)}u\u003c\/div\u003e\n          \u003c\/div\u003e\n        `;\n      }).join('')}\n    `;\n\n    \/\/ Yearly results\n    const yearlyResults = getYearlyResults(allData);\n    const maxYearProfit = Math.max(...yearlyResults.map(y =\u003e Math.abs(y.profit)), 1);\n    const allTimeYearlyProfit = yearlyResults.reduce((sum, y) =\u003e sum + y.profit, 0);\n    const atSign = allTimeYearlyProfit \u003e= 0 ? '+' : '';\n\n    document.getElementById('jpYearlyBody').innerHTML = yearlyResults.map(y =\u003e {\n      const isCurrent = y.year === currentYear;\n      const barPct = Math.max((Math.abs(y.profit) \/ maxYearProfit) * 100, 3);\n      const barClass = y.profit \u003e= 0 ? (isCurrent ? 'jp-gold' : 'jp-green') : 'jp-red';\n      const profitColorClass = y.profit \u003e= 0 ? (isCurrent ? 'jp-gold-text' : 'jp-positive') : 'jp-negative';\n      const ySign = y.profit \u003e= 0 ? '+' : '';\n      const rowClass = isCurrent ? 'jp-yearly-row jp-year-current' : 'jp-yearly-row';\n      const innerLabel = barPct \u003e 20 ? `${y.winPct}%` : '';\n      return `\n        \u003cdiv class=\"${rowClass}\"\u003e\n          \u003cdiv class=\"jp-yearly-year\"\u003e${y.year}${isCurrent ? '*' : ''}\u003c\/div\u003e\n          \u003cdiv class=\"jp-yearly-bar-container\"\u003e\n            \u003cdiv class=\"jp-yearly-bar-track\"\u003e\n              \u003cdiv class=\"jp-yearly-bar-fill ${barClass}\" style=\"width: ${barPct}%;\"\u003e\n                \u003cspan class=\"jp-yearly-bar-inner-label\"\u003e${innerLabel}\u003c\/span\u003e\n              \u003c\/div\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"jp-yearly-record\"\u003e${y.record}\u003c\/div\u003e\n          \u003cdiv class=\"jp-yearly-profit ${profitColorClass}\"\u003e${ySign}${y.profit.toFixed(1)}u\u003c\/div\u003e\n        \u003c\/div\u003e\n      `;\n    }).join('');\n\n    document.getElementById('jpYearlyTotal').textContent = `${atSign}${formatNumber(allTimeYearlyProfit.toFixed(2))} units`;\n\n    \/\/ 30-day profit chart\n    const cutoff30 = new Date();\n    cutoff30.setDate(cutoff30.getDate() - 30);\n    const settled30 = allData.filter(p =\u003e p.result !== 'pending').slice().reverse();\n    const filtered30 = settled30.filter(p =\u003e parseDate(p.date) \u003e= cutoff30);\n\n    const ctx = document.getElementById('jpYearChart').getContext('2d');\n    let cumulative = 0;\n    const chartData = [];\n    const labels = [];\n    filtered30.forEach(pick =\u003e {\n      cumulative += pick.profit;\n      labels.push(formatDateShort(pick.date));\n      chartData.push(parseFloat(cumulative.toFixed(2)));\n    });\n\n    const gradient = ctx.createLinearGradient(0, 0, 0, 240);\n    gradient.addColorStop(0, 'rgba(212, 165, 116, 0.4)');\n    gradient.addColorStop(1, 'rgba(212, 165, 116, 0.05)');\n\n    profitChart = new Chart(ctx, {\n      type: 'line',\n      data: {\n        labels: labels,\n        datasets: [{\n          label: 'Cumulative Profit (Units)',\n          data: chartData,\n          borderColor: '#D4A574',\n          backgroundColor: gradient,\n          borderWidth: 3,\n          fill: true,\n          tension: 0,\n          pointRadius: 0,\n          pointHoverRadius: 6,\n          pointHoverBackgroundColor: '#D4A574',\n          pointHoverBorderColor: '#fff',\n          pointHoverBorderWidth: 2\n        }]\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        interaction: { intersect: false, mode: 'index' },\n        plugins: {\n          legend: { display: false },\n          tooltip: {\n            backgroundColor: '#1a1a1a',\n            titleColor: '#999',\n            bodyColor: '#fff',\n            bodyFont: { size: 14, weight: 'bold' },\n            padding: 12,\n            displayColors: false,\n            callbacks: {\n              label: function(context) {\n                const value = context.parsed.y;\n                return `${value \u003e= 0 ? '+' : ''}${formatNumber(value.toFixed(2))} units`;\n              }\n            }\n          }\n        },\n        scales: {\n          x: { grid: { color: 'rgba(0,0,0,0.05)', drawBorder: false }, ticks: { color: '#999', maxTicksLimit: 8, font: { size: 11 } } },\n          y: { grid: { color: 'rgba(0,0,0,0.05)', drawBorder: false }, ticks: { color: '#999', font: { size: 11 }, callback: function(v) { return (v \u003e= 0 ? '+' : '') + v + 'u'; } } }\n        }\n      }\n    });\n\n    \/\/ Chart stats\n    const roiSign30 = parseFloat(stats30.roi) \u003e= 0 ? '+' : '';\n    const roiClass30 = parseFloat(stats30.roi) \u003e= 0 ? 'jp-positive' : 'jp-negative';\n    document.getElementById('jpYearChartStats').innerHTML = `\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eRecord\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value\"\u003e${stats30.record}\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eWin %\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value\"\u003e${stats30.winPct}%\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eUnits\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value ${profitClass30}\"\u003e${profitSign30}${stats30.profit}u\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"jp-dash-chart-stat\"\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-label\"\u003eROI\u003c\/div\u003e\n        \u003cdiv class=\"jp-dash-chart-stat-value ${roiClass30}\"\u003e${roiSign30}${stats30.roi}%\u003c\/div\u003e\n      \u003c\/div\u003e\n    `;\n\n    \/\/ Updated timestamp\n    document.getElementById('jpYearUpdated').textContent = new Date().toLocaleDateString('en-US', {\n      month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit'\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', loadData);\n  } else {\n    loadData();\n  }\n})();\n\u003c\/script\u003e\u003c\/p\u003e","brand":"Jolee Picks","offers":[{"title":"Default Title","offer_id":42765670351043,"sku":"","price":400.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0013\/1946\/9101\/files\/SEASON_1.png?v=1767215395"}],"url":"https:\/\/www.joleepicks.com\/collections\/month.oembed","provider":"Jolee Picks","version":"1.0","type":"link"}