{"id":4325,"date":"2023-10-26T15:01:23","date_gmt":"2023-10-26T15:01:23","guid":{"rendered":"https:\/\/treerunnerparks.com\/rochester\/?page_id=4325"},"modified":"2026-10-01T16:46:49","modified_gmt":"2026-10-01T16:46:49","slug":"holiday","status":"publish","type":"page","link":"https:\/\/treerunnerparks.com\/rochester\/holiday\/","title":{"rendered":"Holiday Sale"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4325\" class=\"elementor elementor-4325\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-59fce99 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"59fce99\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-79388a2\" data-id=\"79388a2\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1f74a84 elementor-widget elementor-widget-html\" data-id=\"1f74a84\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- =========================================================\n     TREERUNNER ROCHESTER\n     HOLIDAY SALE \u2014 2026\n     FULL PASTE-READY PAGE\n     ========================================================= -->\n\n<script>\nwindow.TR_HOLIDAY_CONFIG = {\n\n  \/* =======================================================\n     EASY EDIT AREA\n     =======================================================\n\n     HERO OVERRIDE:\n     Leave blank for automatic date-based rotation.\n\n     Options:\n       evergreen\n       bfcm\n       givingTuesday\n       pack10\n       pack10_6\n       pack10_4\n       pack10_6_4\n       bfcmReturn\n       flashTryIt\n       flashGemPutt\n       flashFourPlusOne\n       finalDay\n\n     Example:\n       heroOverride:\"bfcm\",\n\n     ======================================================= *\/\n\n  heroOverride:\"\",\n\n\n  \/* =======================================================\n     SPECIAL OFFER COUNTDOWN\n     Appears only when a scheduled offer has 48 hours or less remaining.\n     ======================================================= *\/\n\n  countdown:{\n    thresholdHours:48,\n    defaultEndTime:\"23:59:59\",\n    timeZone:\"America\/Detroit\"\n  },\n\n\n  \/* =======================================================\n     HERO IMAGE LIBRARY\n     ======================================================= *\/\n\n  heroImages:{\n\n    evergreen:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-24-2026-07_02_41-AM.png\",\n      alt:\"TreeRunner Rochester Holiday Sale \u2014 give the gift of adventure, up to 35% off.\"\n    },\n\n    bfcm:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-22-2026-01_55_37-PM.png\",\n      alt:\"TreeRunner Rochester Black Friday and Cyber Monday holiday sale \u2014 up to 45% off.\"\n    },\n\n    givingTuesday:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/03_giving_tuesday.png\",\n      alt:\"TreeRunner Rochester Giving Tuesday holiday promotion.\"\n    },\n\n    pack10:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-22-2026-01_58_53-PM.png\",\n      alt:\"TreeRunner Rochester 10 Pack Plus holiday offer is back \u2014 up to 45% off.\"\n    },\n\n    pack10_6:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-22-2026-02_00_04-PM.png\",\n      alt:\"TreeRunner Rochester 10 Pack Plus and 6 Pack Plus holiday offers are back \u2014 up to 45% off.\"\n    },\n\n    pack10_4:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-22-2026-02_01_45-PM.png\",\n      alt:\"TreeRunner Rochester 10 Pack Plus and 4 Pack Plus holiday offers are back \u2014 up to 45% off.\"\n    },\n\n    pack10_6_4:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-22-2026-01_56_20-PM-1.png\",\n      alt:\"TreeRunner Rochester 10 Pack Plus, 6 Pack Plus and 4 Pack Plus holiday offers are back \u2014 up to 45% off.\"\n    },\n\n    bfcmReturn:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/ChatGPT-Image-Sep-22-2026-01_56_20-PM-1.png\",\n      alt:\"TreeRunner Rochester Black Friday and Cyber Monday holiday deals are back \u2014 up to 45% off.\"\n    },\n\n    flashTryIt:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/10_try_it_tickets_flash_sale.png\",\n      alt:\"TreeRunner Rochester 24-hour Try-It Ticket flash sale.\"\n    },\n\n    flashGemPutt:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/11_gem_mining_mini_golf_flash_sale.png\",\n      alt:\"TreeRunner Rochester Gem Mining and Mini Golf flash sale.\"\n    },\n\n    flashFourPlusOne:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/12_buy_4_plus_1_free_flash_sale.png\",\n      alt:\"TreeRunner Rochester Buy 4 Get 1 Free holiday flash sale.\"\n    },\n\n    finalDay:{\n      src:\"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2026\/09\/08_final_day_to_save.png\",\n      alt:\"Final day to save during the TreeRunner Rochester holiday sale.\"\n    }\n\n  },\n\n\n  \/* =======================================================\n     HERO ROTATION SCHEDULE\n     ROCHESTER \/ EASTERN TIME\n     ======================================================= *\/\n\n  heroSchedule:[\n\n    \/* Early access \/ evergreen *\/\n    { start:\"2026-11-04\", end:\"2026-11-15\", hero:\"evergreen\" },\n\n    \/* Three public flash-sale hero takeovers *\/\n    { start:\"2026-11-16\", end:\"2026-11-16\", hero:\"flashTryIt\" },\n    { start:\"2026-11-17\", end:\"2026-11-17\", hero:\"evergreen\" },\n    { start:\"2026-11-18\", end:\"2026-11-18\", hero:\"flashGemPutt\" },\n    { start:\"2026-11-19\", end:\"2026-11-19\", hero:\"evergreen\" },\n    { start:\"2026-11-20\", end:\"2026-11-20\", hero:\"flashFourPlusOne\" },\n    { start:\"2026-11-21\", end:\"2026-11-22\", hero:\"evergreen\" },\n\n    \/* Black Friday \/ Cyber Monday *\/\n    { start:\"2026-11-23\", end:\"2026-11-30\", hero:\"bfcm\" },\n\n    \/* Giving Tuesday *\/\n    { start:\"2026-12-01\", end:\"2026-12-03\", hero:\"givingTuesday\" },\n\n    \/* Evergreen reset *\/\n    { start:\"2026-12-04\", end:\"2026-12-13\", hero:\"evergreen\" },\n\n    \/* Pre-Christmas offer progression *\/\n    { start:\"2026-12-14\", end:\"2026-12-15\", hero:\"pack10\" },\n    { start:\"2026-12-16\", end:\"2026-12-17\", hero:\"pack10_6\" },\n    { start:\"2026-12-18\", end:\"2026-12-19\", hero:\"pack10_4\" },\n    { start:\"2026-12-20\", end:\"2026-12-21\", hero:\"pack10_6_4\" },\n\n    \/*\n      Dec 22\u201324 are intentionally NOT assigned here.\n      The source schedule did not specify those dates.\n      With no scheduled match, the page falls back to evergreen.\n    *\/\n\n    \/* BFCM return *\/\n    { start:\"2026-12-25\", end:\"2026-12-25\", hero:\"bfcmReturn\" },\n\n    \/* Evergreen closeout *\/\n    { start:\"2026-12-26\", end:\"2026-12-30\", hero:\"evergreen\" },\n    { start:\"2026-12-31\", end:\"2026-12-31\", hero:\"finalDay\" }\n\n  ],\n\n\n  \/* =======================================================\n     SCHEDULED SPECIAL-OFFER CONTENT\n     Leave specialOffers below empty to use this schedule.\n     ======================================================= *\/\n\n  specialOfferSchedule:[\n    { start:\"2026-11-16\", end:\"2026-11-16\", products:[\"tryIt\"] },\n    { start:\"2026-11-18\", end:\"2026-11-18\", products:[\"gemPutt\"] },\n    { start:\"2026-11-20\", end:\"2026-11-20\", products:[\"fourPlusOne\"] },\n\n    { start:\"2026-11-23\", end:\"2026-11-30\", products:[\"fourPlusOne\",\"sixPlusOne\",\"tenPlusTwo\"] },\n\n    { start:\"2026-12-14\", end:\"2026-12-15\", products:[\"tenPlusTwo\"] },\n    { start:\"2026-12-16\", end:\"2026-12-17\", products:[\"sixPlusOne\",\"tenPlusTwo\"] },\n    { start:\"2026-12-18\", end:\"2026-12-19\", products:[\"fourPlusOne\",\"tenPlusTwo\"] },\n    { start:\"2026-12-20\", end:\"2026-12-21\", products:[\"fourPlusOne\",\"sixPlusOne\",\"tenPlusTwo\"] },\n    { start:\"2026-12-25\", end:\"2026-12-25\", products:[\"fourPlusOne\",\"sixPlusOne\",\"tenPlusTwo\"] }\n  ],\n\n\n  \/* =======================================================\n     SECTION ORDER\n     ======================================================= *\/\n\n  sectionOrder:[\n    \"special\",\n    \"giftPacks\",\n    \"youth\",\n    \"bounce\",\n    \"other\"\n  ],\n\n\n  \/* =======================================================\n     ACTIVE PRODUCTS\n\n     Add\/remove IDs here to show or hide products.\n     ======================================================= *\/\n\n  specialOffers:[\n    \/*\n    Manual preview\/testing examples:\n      One offer:  \"tryIt\"\n      Two offers: \"tryIt\", \"gemPutt\"\n      Three offers: \"fourPlusOne\", \"sixPlusOne\", \"tenPlusTwo\"\n\n    Leave this array empty\/commented for the automatic date schedule.\n\n    \"tryIt\",\n    \"gemPutt\",\n    \"fourPlusOne\",\n    \"sixPlusOne\",\n    \"tenPlusTwo\"\n    *\/\n  ],\n\n  giftProducts:[\n    \"single\",\n    \"twoPack\",\n    \"fourPack\",\n    \"sixPack\",\n    \"tenPack\",\n    \"seasonPass\"\n  ],\n\n  youthPrograms:[\n    \"sap\",\n    \"kidsClub\"\n  ],\n\n  bounceProducts:[\n    \"bounce4\",\n    \"bounce10\"\n  ],\n\n  otherProducts:[\n    \"giftVoucher\"\n  ],\n\n\n  \/* =======================================================\n     SECTION HEADLINES\n     ======================================================= *\/\n\n  sections:{\n\n    special:{\n      kicker:\"Limited-Time Holiday Drop\",\n      title:\"Today's extra holiday savings.\",\n      copy:\"These short-run offers only appear while they're live.\"\n    },\n\n    giftPacks:{\n      kicker:\"Holiday Adventure Packs\",\n      title:\"More adventure. Less than regular price.\",\n      copy:\"Choose the number of adventures that fits the person \u2014 or people \u2014 you're shopping for.\"\n    },\n\n    youth:{\n      kicker:\"Youth Programming\",\n      title:\"Put next summer under the tree.\",\n      copy:\"Holiday pricing is also available on select TreeRunner youth programs.\"\n    },\n\n    bounce:{\n      kicker:\"Bounce Forest Holiday Deals\",\n      title:\"Give them more reasons to bounce.\",\n      copy:\"Rochester's suspended outdoor net park has holiday packs of its own.\"\n    },\n\n    other:{\n      kicker:\"Flexible Holiday Gifting\",\n      title:\"Let them choose their own adventure.\",\n      copy:\"A TreeRunner Gift Voucher keeps the gift flexible while still putting adventure under the tree.\"\n    }\n\n  },\n\n\n  \/* =======================================================\n     SUMMER ADVENTURE PROGRAM TRACKER\n     ======================================================= *\/\n\n  sap:{\n\n    currentTierId:1,\n\n    progress:90,\n\n    tiers:[\n      {\n        id:1,\n        name:\"Tier 1\",\n        price:398\n      },\n      {\n        id:2,\n        name:\"Tier 2\",\n        price:438\n      },\n      {\n        id:3,\n        name:\"Tier 3\",\n        price:498\n      },\n      {\n        id:4,\n        name:\"Tier 4\",\n        price:538\n      },\n      {\n        id:5,\n        name:\"Tier 5\",\n        price:598\n      }\n    ],\n\n    purchaseUrl:\n      \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2395\",\n\n    learnUrl:\n      \"https:\/\/treerunnerparks.com\/rochester\/summer-adventure-program\/\"\n\n  },\n\n\n  \/* =======================================================\n     PRODUCT DATA\n     ======================================================= *\/\n\n  products:{\n\n\n    \/* -------------------------------------------------------\n       EVERGREEN AERIAL GIFTS\n       ------------------------------------------------------- *\/\n\n    single:{\n\n      badge:\"Solo Adventurer\",\n\n      title:\"Single Adventure\",\n\n      bestFor:\"A simple TreeRunner gift\",\n\n      description:\n        \"One aerial adventure at TreeRunner Rochester.\",\n\n      regularPrice:69,\n\n      salePrice:58,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Give One Adventure\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2448\",\n\n      tone:\"pine\"\n\n    },\n\n\n    twoPack:{\n\n      badge:\"Duo Explorer\",\n\n      title:\"2-Pack\",\n\n      bestFor:\"Best for two adventurers\",\n\n      description:\n        \"Two TreeRunner adventures for friends, siblings, couples or a parent-and-kid day.\",\n\n      regularPrice:138,\n\n      salePrice:108,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Shop the 2-Pack\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2124\",\n\n      tone:\"cranberry\"\n\n    },\n\n\n    fourPack:{\n\n      badge:\"Buy Four \u2022 Save More\",\n\n      title:\"4-Pack\",\n\n      bestFor:\"Family favorite\",\n\n      description:\n        \"Four TreeRunner adventures to use together or share.\",\n\n      regularPrice:276,\n\n      salePrice:208,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Shop the 4-Pack\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/534\",\n\n      tone:\"gold\"\n\n    },\n\n\n    sixPack:{\n\n      badge:\"Family Pack\",\n\n      title:\"6-Pack\",\n\n      bestFor:\"More adventures. More flexibility.\",\n\n      description:\n        \"Six TreeRunner adventures for a bigger outing or multiple visits.\",\n\n      regularPrice:414,\n\n      salePrice:288,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Shop the 6-Pack\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2123\",\n\n      tone:\"pine\"\n\n    },\n\n\n    tenPack:{\n\n      badge:\"Party Pack\",\n\n      title:\"10-Pack\",\n\n      bestFor:\"Best holiday pack value\",\n\n      description:\n        \"Ten adventures for repeat visits, larger families or one big TreeRunner day.\",\n\n      regularPrice:690,\n\n      salePrice:438,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Shop the 10-Pack\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/536\",\n\n      tone:\"cranberry\"\n\n    },\n\n\n    \/* -------------------------------------------------------\n       BFCM \/ BONUS PRODUCTS\n       ------------------------------------------------------- *\/\n\n    fourPlusOne:{\n\n      badge:\"Bonus Adventure\",\n\n      title:\"4-Pack + 1\",\n\n      bestFor:\"Five total adventures\",\n\n      description:\n        \"Buy the holiday 4-Pack and get one additional TreeRunner adventure.\",\n\n      regularPrice:345,\n\n      salePrice:208,\n\n      savingsLabel:\"BFCM Price\",\n\n      button:\"Get 5 Adventures\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2680\",\n\n      tone:\"cranberry\"\n\n    },\n\n\n    sixPlusOne:{\n\n      badge:\"Bonus Adventure\",\n\n      title:\"6-Pack + 1\",\n\n      bestFor:\"Seven total adventures\",\n\n      description:\n        \"Seven TreeRunner adventures for the holiday 6-Pack price.\",\n\n      regularPrice:483,\n\n      salePrice:288,\n\n      savingsLabel:\"BFCM Price\",\n\n      button:\"Get 7 Adventures\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2682\",\n\n      tone:\"gold\"\n\n    },\n\n\n    tenPlusTwo:{\n\n      badge:\"Biggest Bonus\",\n\n      title:\"10-Pack + 2\",\n\n      bestFor:\"Twelve total adventures\",\n\n      description:\n        \"Twelve TreeRunner adventures for the normal holiday 10-Pack price.\",\n\n      regularPrice:828,\n\n      salePrice:438,\n\n      savingsLabel:\"BFCM Price\",\n\n      button:\"Get 12 Adventures\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2685\",\n\n      tone:\"pine\"\n\n    },\n\n\n    \/* -------------------------------------------------------\n       FLASH SALES\n       ------------------------------------------------------- *\/\n\n    tryIt:{\n\n      badge:\"24-Hour Flash Sale\",\n\n      title:\"Try-It Ticket\",\n\n      bestFor:\"A first TreeRunner adventure\",\n\n      description:\n        \"One Flying Squirrel aerial adventure during this limited holiday flash sale.\",\n\n      regularPrice:49,\n\n      salePrice:38,\n\n      savingsLabel:\"Flash Sale\",\n\n      button:\"Get the Try-It Ticket\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2674\",\n\n      tone:\"cranberry\"\n\n    },\n\n\n    gemPutt:{\n\n      badge:\"Rochester Flash Sale\",\n\n      title:\"Gem Mining + Mini Golf\",\n\n      bestFor:\"Two Rochester favorites\",\n\n      description:\n        \"Pair Gem Mining with Putt Forest in one limited-time holiday bundle.\",\n\n      regularPrice:null,\n\n      salePrice:40,\n\n      savingsLabel:\"Flash Sale\",\n\n      button:\"Get the Bundle\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2940\",\n\n      tone:\"gold\"\n\n    },\n\n\n    \/* -------------------------------------------------------\n       BOUNCE FOREST\n       ------------------------------------------------------- *\/\n\n    bounce4:{\n\n      badge:\"Bounce Forest\",\n\n      title:\"Bounce 4-Pack\",\n\n      bestFor:\"Four Bounce sessions\",\n\n      description:\n        \"Four Bounce Forest sessions to use together or spread throughout the season.\",\n\n      regularPrice:80,\n\n      salePrice:58,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Shop Bounce 4-Pack\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/3907\",\n\n      tone:\"pine\"\n\n    },\n\n\n    bounce10:{\n\n      badge:\"Bounce Forest\",\n\n      title:\"Bounce 10-Pack\",\n\n      bestFor:\"Best Bounce value\",\n\n      description:\n        \"Ten Bounce Forest sessions for frequent bouncers, siblings and friends.\",\n\n      regularPrice:200,\n\n      salePrice:128,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Shop Bounce 10-Pack\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/3908\",\n\n      tone:\"cranberry\"\n\n    },\n\n\n    \/* -------------------------------------------------------\n       YOUTH PROGRAMMING\n       ------------------------------------------------------- *\/\n\n    kidsClub:{\n\n      badge:\"Youth Programming\",\n\n      title:\"Kids Club\",\n\n      bestFor:\"A TreeRunner day just for them\",\n\n      description:\n        \"Give kids a TreeRunner youth-program experience during select summer sessions.\",\n\n      regularPrice:148,\n\n      salePrice:138,\n\n      savingsLabel:\"Holiday Program Price\",\n\n      button:\"Give Kids Club\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2047\",\n\n      learnUrl:\n        \"https:\/\/treerunnerparks.com\/rochester\/kids-club\/\",\n\n      tone:\"gold\"\n\n    },\n\n\n    \/* -------------------------------------------------------\n       OTHER GIFTS\n       ------------------------------------------------------- *\/\n\n    seasonPass:{\n\n      badge:\"Season-Long Adventure\",\n\n      title:\"Season Pass\",\n\n      bestFor:\"The TreeRunner regular\",\n\n      description:\n        \"Give them a whole season of reasons to come back to TreeRunner.\",\n\n      regularPrice:350,\n\n      salePrice:300,\n\n      savingsLabel:\"Holiday Price\",\n\n      button:\"Give a Season Pass\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2118\",\n\n      tone:\"pine\"\n\n    },\n\n\n    giftVoucher:{\n\n      badge:\"Their Choice\",\n\n      title:\"Gift Voucher\",\n\n      bestFor:\"Maximum flexibility\",\n\n      description:\n        \"Let them choose how they want to experience TreeRunner when they're ready to visit.\",\n\n      regularPrice:null,\n\n      salePrice:null,\n\n      displayPrice:\"Choose Amount\",\n\n      savingsLabel:\"Flexible Gift\",\n\n      button:\"Give a Gift Voucher\",\n\n      url:\n        \"https:\/\/pos.treerunnerparks.com\/treerunnerrochester\/checkout\/default\/addtocart\/add\/2352\",\n\n      tone:\"cranberry\"\n\n    }\n\n  }\n\n};\n<\/script>\n\n\n\n<style>\n:root{\n\n  --tr-green:#8b9942;\n  --tr-green-dark:#68732f;\n  --tr-green-deep:#485027;\n  --tr-green-light:#eef1df;\n\n  --tr-orange:#ef9029;\n\n  --tr-cream:#f7f6f0;\n  --tr-charcoal:#303030;\n  --tr-text:#444444;\n  --tr-border:#deded6;\n  --tr-white:#ffffff;\n\n  --holiday-pine:#26351f;\n  --holiday-pine-mid:#34482a;\n  --holiday-pine-light:#4d603c;\n\n  --holiday-cranberry:#963e34;\n  --holiday-cranberry-dark:#6f2c25;\n\n  --holiday-gold:#d7a649;\n  --holiday-gold-dark:#98712d;\n  --holiday-gold-light:#f4e1ae;\n\n  --holiday-snow:#faf7ef;\n  --holiday-paper:#f5f0e5;\n  --holiday-paper-dark:#ede6d8;\n}\n\n\n\/* =========================================================\n   BASE\n   ========================================================= *\/\n\n.tr-holiday,\n.tr-holiday *{\n  box-sizing:border-box;\n}\n\n.tr-holiday{\n  width:100%;\n  overflow:hidden;\n\n  background:\n    radial-gradient(\n      circle at 10% 15%,\n      rgba(139,153,66,.045) 0 2px,\n      transparent 3px\n    ),\n    radial-gradient(\n      circle at 80% 12%,\n      rgba(150,62,52,.035) 0 1.6px,\n      transparent 2.6px\n    ),\n    var(--holiday-paper);\n\n  background-size:\n    76px 76px,\n    93px 93px,\n    auto;\n\n  color:var(--tr-text);\n\n  font-family:inherit;\n\n  line-height:1.6;\n}\n\n.tr-wrap{\n  width:calc(100% - 40px);\n  max-width:1160px;\n  margin:0 auto;\n}\n\n.tr-section{\n  position:relative;\n\n  padding:72px 0;\n}\n\n.tr-section-snow{\n  background:\n    linear-gradient(\n      180deg,\n      rgba(255,255,255,.26),\n      rgba(255,255,255,.08)\n    ),\n    var(--holiday-snow);\n}\n\n.tr-section-cream{\n  background:\n    linear-gradient(\n      180deg,\n      rgba(255,255,255,.2),\n      rgba(237,230,216,.45)\n    ),\n    var(--holiday-paper);\n}\n\n.tr-section-soft-green{\n  background:\n    linear-gradient(\n      180deg,\n      #eef1df,\n      #e8edd7\n    );\n}\n\n\/* Dark seasonal section used to alternate the page rhythm. *\/\n.tr-section-dark-green{\n  background:\n    radial-gradient(circle at 8% 10%,rgba(215,166,73,.09),transparent 22%),\n    radial-gradient(circle at 92% 86%,rgba(139,153,66,.12),transparent 26%),\n    linear-gradient(135deg,#1f2d1b,var(--holiday-pine) 55%,#304226);\n  color:#ffffff;\n}\n\n.tr-section-dark-green .tr-kicker{\n  color:var(--holiday-gold-light);\n}\n\n.tr-section-dark-green .tr-h2{\n  color:#ffffff;\n}\n\n.tr-section-dark-green .tr-lead{\n  color:rgba(255,255,255,.82);\n}\n\n.tr-section-dark-green .tr-sale-card{\n  background:#fffdf8;\n}\n\n.tr-kicker{\n  display:block;\n\n  margin-bottom:9px;\n\n  color:var(--tr-green-dark);\n\n  font-size:12px;\n\n  font-weight:900;\n\n  letter-spacing:1.15px;\n\n  text-transform:uppercase;\n}\n\n.tr-h2{\n  max-width:900px;\n\n  margin:0;\n\n  color:var(--tr-charcoal);\n\n  font-size:clamp(32px,4vw,46px);\n\n  font-weight:800;\n\n  letter-spacing:-1px;\n\n  line-height:1.07;\n}\n\n.tr-lead{\n  max-width:820px;\n\n  margin:16px 0 0;\n\n  font-size:17px;\n\n  line-height:1.72;\n}\n\n\n\/* =========================================================\n   HERO CAMPAIGN IMAGE\n   ========================================================= *\/\n\n.tr-campaign-hero{\n  padding:18px 0 0;\n\n  background:\n    linear-gradient(\n      180deg,\n      #f4efe4,\n      #ebe4d6\n    );\n}\n\n.tr-campaign-wrap{\n  width:calc(100% - 30px);\n  max-width:1320px;\n\n  margin:0 auto;\n}\n\n.tr-campaign-link{\n  position:relative;\n\n  display:block;\n\n  overflow:hidden;\n\n  border-radius:18px;\n\n  background:var(--holiday-pine);\n\n  box-shadow:\n    0 14px 40px rgba(38,53,31,.13);\n\n  text-decoration:none!important;\n}\n\n.tr-campaign-image{\n  display:block;\n\n  width:100%;\n\n  height:auto;\n}\n\n.tr-campaign-link::after{\n  content:\"\";\n\n  position:absolute;\n\n  inset:0;\n\n  border:1px solid rgba(255,255,255,.12);\n\n  border-radius:inherit;\n\n  pointer-events:none;\n}\n\n\n\/* =========================================================\n   PROMISE BAR\n   ========================================================= *\/\n\n.tr-promise-bar{\n  position:relative;\n\n  z-index:4;\n\n  display:grid;\n\n  grid-template-columns:repeat(3,minmax(0,1fr));\n\n  width:calc(100% - 70px);\n  max-width:1040px;\n\n  margin:-20px auto 0;\n\n  overflow:hidden;\n\n  border:1px solid rgba(72,80,39,.18);\n\n  border-radius:15px;\n\n  background:\n    linear-gradient(\n      180deg,\n      #fffdf8,\n      #f9f4e9\n    );\n\n  box-shadow:\n    0 12px 30px rgba(35,47,29,.08);\n}\n\n.tr-promise{\n  padding:21px 18px;\n\n  text-align:center;\n}\n\n.tr-promise + .tr-promise{\n  border-left:1px solid rgba(72,80,39,.13);\n}\n\n.tr-promise strong{\n  display:block;\n\n  color:var(--holiday-pine);\n\n  font-size:15px;\n}\n\n.tr-promise span{\n  display:block;\n\n  margin-top:4px;\n\n  color:#737166;\n\n  font-size:12px;\n}\n\n\n\/* =========================================================\n   SEASONAL DIVIDER\n   ========================================================= *\/\n\n.tr-light-divider{\n  position:relative;\n\n  height:28px;\n\n  overflow:hidden;\n\n  background:\n    linear-gradient(\n      90deg,\n      #1f2d1b,\n      var(--holiday-pine),\n      #1f2d1b\n    );\n}\n\n.tr-light-divider::before{\n  content:\"\";\n\n  position:absolute;\n\n  top:8px;\n  left:-3%;\n\n  width:106%;\n  height:1px;\n\n  background:\n    rgba(244,225,174,.30);\n}\n\n.tr-light-divider::after{\n  content:\"\";\n\n  position:absolute;\n\n  top:3px;\n  left:0;\n\n  width:100%;\n  height:13px;\n\n  background:\n    radial-gradient(\n      circle,\n      var(--holiday-gold) 0 2px,\n      rgba(244,225,174,.28) 2.5px,\n      transparent 5px\n    );\n\n  background-size:48px 13px;\n\n  opacity:.95;\n}\n\n\n\/* =========================================================\n   BUTTONS\n   ========================================================= *\/\n\n.tr-btn{\n  display:inline-flex;\n\n  width:100%;\n  min-height:48px;\n\n  padding:12px 18px;\n\n  align-items:center;\n  justify-content:center;\n\n  border:2px solid var(--holiday-cranberry);\n\n  border-radius:9px;\n\n  background:var(--holiday-cranberry);\n\n  color:#ffffff!important;\n\n  font-size:14px;\n\n  font-weight:900;\n\n  line-height:1.2;\n\n  text-align:center;\n\n  text-decoration:none!important;\n\n  transition:\n    background .18s ease,\n    border-color .18s ease,\n    transform .18s ease;\n}\n\n.tr-btn:hover{\n  border-color:var(--holiday-cranberry-dark);\n\n  background:var(--holiday-cranberry-dark);\n\n  transform:translateY(-1px);\n}\n\n.tr-link{\n  display:inline-block;\n\n  margin-top:14px;\n\n  color:var(--tr-green-dark)!important;\n\n  font-size:13px;\n\n  font-weight:900;\n\n  text-decoration:none!important;\n}\n\n.tr-link:hover{\n  text-decoration:underline!important;\n}\n\n\n\/* =========================================================\n   SALE GRID\n   ========================================================= *\/\n\n.tr-sale-grid{\n  display:grid;\n\n  grid-template-columns:repeat(3,minmax(0,1fr));\n\n  gap:19px;\n\n  margin-top:32px;\n}\n\n.tr-sale-card{\n  position:relative;\n\n  display:flex;\n\n  min-height:100%;\n\n  flex-direction:column;\n\n  overflow:hidden;\n\n  border:1px solid rgba(72,80,39,.17);\n\n  border-radius:17px;\n\n  background:\n    linear-gradient(\n      180deg,\n      #fffdf9,\n      #faf5ec\n    );\n\n  box-shadow:\n    0 9px 25px rgba(48,48,48,.055);\n}\n\n.tr-sale-card-top{\n  position:relative;\n\n  min-height:126px;\n\n  padding:25px 26px;\n\n  background:\n    radial-gradient(\n      circle at 92% 0,\n      rgba(215,166,73,.20),\n      transparent 34%\n    ),\n    linear-gradient(\n      135deg,\n      var(--holiday-pine),\n      #415936\n    );\n\n  color:#ffffff;\n}\n\n.tr-sale-card.cranberry .tr-sale-card-top{\n  background:\n    radial-gradient(\n      circle at 92% 0,\n      rgba(244,225,174,.15),\n      transparent 34%\n    ),\n    linear-gradient(\n      135deg,\n      var(--holiday-cranberry-dark),\n      var(--holiday-cranberry)\n    );\n}\n\n.tr-sale-card.gold .tr-sale-card-top{\n  background:\n    linear-gradient(\n      135deg,\n      #715727,\n      #ad8537\n    );\n}\n\n.tr-card-badge{\n  display:inline-flex;\n\n  padding:5px 9px;\n\n  border:1px solid rgba(255,255,255,.17);\n\n  border-radius:999px;\n\n  background:rgba(255,255,255,.11);\n\n  color:#ffffff;\n\n  font-size:10px;\n\n  font-weight:900;\n\n  letter-spacing:.8px;\n\n  text-transform:uppercase;\n}\n\n.tr-sale-card h3{\n  margin:11px 0 0;\n\n  color:#ffffff;\n\n  font-size:28px;\n\n  font-weight:900;\n\n  line-height:1.05;\n}\n\n\n\/* =========================================================\n   DISCOUNT FLAG\n   ========================================================= *\/\n\n.tr-discount-flag{\n  position:absolute;\n\n  top:17px;\n  right:17px;\n\n  min-width:62px;\n\n  padding:9px 8px;\n\n  border-radius:10px;\n\n  background:var(--holiday-gold-light);\n\n  color:var(--holiday-pine);\n\n  font-size:11px;\n\n  font-weight:900;\n\n  line-height:1.05;\n\n  text-align:center;\n}\n\n.tr-discount-flag strong{\n  display:block;\n\n  font-size:18px;\n\n  line-height:1;\n}\n\n\n\/* =========================================================\n   CARD BODY\n   ========================================================= *\/\n\n.tr-sale-card-body{\n  display:flex;\n\n  flex:1;\n\n  flex-direction:column;\n\n  padding:25px 26px 27px;\n}\n\n.tr-best-for{\n  margin:0;\n\n  color:var(--tr-green-dark);\n\n  font-size:11px;\n\n  font-weight:900;\n\n  letter-spacing:.7px;\n\n  line-height:1.3;\n\n  text-transform:uppercase;\n}\n\n.tr-card-copy{\n  margin:9px 0 0;\n\n  font-size:14px;\n\n  line-height:1.66;\n}\n\n\n\/* =========================================================\n   PRICES\n   ========================================================= *\/\n\n.tr-price-box{\n  margin-top:20px;\n\n  padding:18px 0;\n\n  border-top:1px solid rgba(72,80,39,.14);\n\n  border-bottom:1px solid rgba(72,80,39,.14);\n}\n\n.tr-price-label{\n  display:block;\n\n  margin-bottom:7px;\n\n  color:#77776f;\n\n  font-size:10px;\n\n  font-weight:900;\n\n  letter-spacing:.8px;\n\n  text-transform:uppercase;\n}\n\n.tr-prices{\n  display:flex;\n\n  flex-wrap:wrap;\n\n  gap:8px 13px;\n\n  align-items:baseline;\n}\n\n.tr-regular-price{\n  color:#898981;\n\n  font-size:17px;\n\n  font-weight:700;\n\n  text-decoration:line-through;\n\n  text-decoration-thickness:2px;\n}\n\n.tr-sale-price{\n  color:var(--holiday-cranberry);\n\n  font-size:34px;\n\n  font-weight:900;\n\n  letter-spacing:-.5px;\n\n  line-height:1;\n}\n\n.tr-save-dollar{\n  display:block;\n\n  margin-top:8px;\n\n  color:var(--tr-green-dark);\n\n  font-size:12px;\n\n  font-weight:900;\n}\n\n.tr-sale-card .tr-btn{\n  margin-top:22px;\n}\n\n\n\/* =========================================================\n   HOLIDAY GIFT GRID\n   Six balanced core gift offers in a 3-column x 2-row layout.\n   ========================================================= *\/\n\n.tr-gift-grid{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  gap:18px;\n  margin-top:34px;\n}\n\n.tr-gift-grid .tr-compact-offer{\n  --offer-accent:var(--holiday-pine);\n  position:relative;\n  display:flex;\n  min-height:100%;\n  flex-direction:column;\n  padding:27px 25px 24px;\n  overflow:hidden;\n  border:1px solid rgba(72,80,39,.16);\n  border-top:5px solid var(--offer-accent);\n  border-radius:14px;\n  background:\n    linear-gradient(180deg,rgba(255,255,255,.72),rgba(255,255,255,.16)),\n    var(--holiday-paper);\n  box-shadow:0 7px 20px rgba(48,48,48,.045);\n}\n\n.tr-gift-grid .tr-compact-offer.cranberry{\n  --offer-accent:var(--holiday-cranberry);\n}\n\n.tr-gift-grid .tr-compact-offer.gold{\n  --offer-accent:var(--holiday-gold-dark);\n}\n\n.tr-gift-grid .tr-card-badge{\n  width:max-content;\n  max-width:calc(100% - 72px);\n  border-color:rgba(72,80,39,.15);\n  background:rgba(72,80,39,.06);\n  color:var(--tr-green-dark);\n}\n\n.tr-gift-grid .tr-compact-offer h3{\n  margin:13px 0 0;\n  color:var(--tr-charcoal);\n  font-size:28px;\n  font-weight:900;\n  line-height:1.02;\n}\n\n.tr-gift-grid .tr-best-for{\n  margin-top:16px;\n}\n\n.tr-gift-grid .tr-card-copy{\n  margin-top:7px;\n  font-size:13px;\n}\n\n.tr-gift-grid .tr-price-box{\n  margin-top:auto;\n  padding:17px 0 0;\n  border-top:1px solid rgba(72,80,39,.13);\n  border-bottom:0;\n}\n\n.tr-gift-grid .tr-sale-price{\n  font-size:31px;\n}\n\n.tr-gift-grid .tr-btn{\n  margin-top:17px;\n  min-height:45px;\n}\n\n.tr-gift-grid .tr-discount-flag{\n  top:21px;\n  right:21px;\n  min-width:58px;\n  padding:8px 7px;\n  border-radius:9px;\n}\n\n.tr-gift-grid .tr-discount-flag strong{\n  font-size:17px;\n}\n\n\n\/* =========================================================\n   SPECIAL OFFER FEATURE\n   Copy and live offer sit side-by-side instead of a centered tile.\n   ========================================================= *\/\n\n.tr-special-section{\n  background:\n    radial-gradient(circle at 8% 12%,rgba(215,166,73,.10),transparent 22%),\n    radial-gradient(circle at 92% 86%,rgba(139,153,66,.13),transparent 26%),\n    linear-gradient(135deg,#1f2d1b,var(--holiday-pine) 55%,#304226);\n  color:#ffffff;\n}\n\n.tr-special-section .tr-kicker{\n  color:var(--holiday-gold-light);\n}\n\n.tr-special-section .tr-h2{\n  color:#ffffff;\n}\n\n.tr-special-section .tr-lead{\n  color:rgba(255,255,255,.82);\n}\n\n.tr-special-section .tr-special-note{\n  background:rgba(255,255,255,.10);\n  border:1px solid rgba(255,255,255,.16);\n  color:var(--holiday-gold-light);\n}\n\n.tr-special-layout{\n  display:grid;\n  grid-template-columns:minmax(250px,.72fr) minmax(0,1.28fr);\n  gap:42px;\n  margin-top:8px;\n  align-items:center;\n}\n\n.tr-special-intro .tr-lead{\n  margin-top:14px;\n}\n\n.tr-special-note{\n  display:inline-flex;\n  margin-top:22px;\n  padding:8px 11px;\n  border-radius:999px;\n  background:rgba(150,62,52,.08);\n  color:var(--holiday-cranberry-dark);\n  font-size:11px;\n  font-weight:900;\n  letter-spacing:.65px;\n  text-transform:uppercase;\n}\n\n\n.tr-special-countdown{\n  margin-top:18px;\n}\n\n.tr-special-countdown[hidden]{\n  display:none!important;\n}\n\n.tr-countdown-label{\n  display:block;\n  margin-bottom:8px;\n  color:rgba(255,255,255,.82);\n  font-size:11px;\n  font-weight:900;\n  letter-spacing:.75px;\n  text-transform:uppercase;\n}\n\n.tr-countdown-time{\n  display:flex;\n  flex-wrap:wrap;\n  gap:8px;\n}\n\n.tr-countdown-unit{\n  min-width:64px;\n  padding:9px 10px 8px;\n  border:1px solid rgba(244,225,174,.26);\n  border-radius:9px;\n  background:var(--holiday-gold-light);\n  color:var(--holiday-pine);\n  text-align:center;\n  box-shadow:0 5px 14px rgba(0,0,0,.08);\n}\n\n.tr-countdown-unit strong{\n  display:block;\n  font-size:22px;\n  font-weight:900;\n  line-height:1;\n}\n\n.tr-countdown-unit span{\n  display:block;\n  margin-top:4px;\n  font-size:9px;\n  font-weight:900;\n  letter-spacing:.7px;\n  text-transform:uppercase;\n}\n\n.tr-special-offers{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:16px;\n}\n\n.tr-special-offers.count-1{\n  grid-template-columns:1fr;\n}\n\n.tr-special-offers.count-2{\n  grid-template-columns:repeat(2,minmax(0,1fr));\n}\n\n.tr-special-offers.count-3 .tr-sale-card:first-child{\n  grid-column:1 \/ -1;\n}\n\n.tr-special-offers .tr-sale-card{\n  min-height:0;\n}\n\n.tr-special-offers .tr-sale-card-top{\n  min-height:108px;\n  padding:21px 22px;\n}\n\n.tr-special-offers .tr-sale-card-body{\n  padding:21px 22px 23px;\n}\n\n.tr-special-offers .tr-sale-card h3{\n  font-size:25px;\n}\n\n.tr-special-offers .tr-card-copy{\n  font-size:13px;\n}\n\n.tr-special-offers .tr-price-box{\n  margin-top:16px;\n  padding:14px 0;\n}\n\n.tr-special-offers .tr-sale-price{\n  font-size:30px;\n}\n\n\n\n\/* =========================================================\n   SINGLE-OFFER SECTION LAYOUT\n   Any section with exactly one active product uses a split\n   editorial layout instead of a lone centered tile.\n   ========================================================= *\/\n\n.tr-single-layout{\n  display:grid;\n  grid-template-columns:minmax(260px,.78fr) minmax(0,1.22fr);\n  gap:44px;\n  margin-top:8px;\n  align-items:center;\n}\n\n.tr-single-intro .tr-lead{\n  margin-top:14px;\n}\n\n.tr-single-offer{\n  max-width:560px;\n  width:100%;\n  justify-self:end;\n}\n\n.tr-single-offer .tr-sale-card{\n  min-height:0;\n}\n\n.tr-single-offer .tr-sale-card-top{\n  min-height:112px;\n  padding:22px 23px;\n}\n\n.tr-single-offer .tr-sale-card-body{\n  padding:22px 23px 24px;\n}\n\n.tr-single-offer .tr-sale-card h3{\n  font-size:27px;\n}\n\n.tr-single-offer .tr-card-copy{\n  font-size:13px;\n}\n\n.tr-single-offer .tr-price-box{\n  margin-top:16px;\n  padding:14px 0;\n}\n\n.tr-single-offer .tr-sale-price{\n  font-size:31px;\n}\n\n\n\/* =========================================================\n   YOUTH COMPANION OFFER\n   Kids Club sits as a horizontal companion to SAP instead of\n   a standalone tile floating below the program feature.\n   ========================================================= *\/\n\n.tr-youth-companion{\n  display:grid;\n  grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);\n  gap:28px;\n  margin-top:28px;\n  padding:29px 30px;\n  border:1px solid rgba(244,225,174,.24);\n  border-radius:16px;\n  background:rgba(255,255,255,.075);\n  align-items:center;\n}\n\n.tr-youth-companion-copy{\n  min-width:0;\n}\n\n.tr-youth-companion .tr-card-badge{\n  border-color:rgba(244,225,174,.26);\n  background:rgba(255,255,255,.08);\n  color:var(--holiday-gold-light);\n}\n\n.tr-youth-companion h3{\n  margin:12px 0 0;\n  color:#ffffff;\n  font-size:clamp(28px,3vw,38px);\n  font-weight:900;\n  line-height:1.02;\n}\n\n.tr-youth-companion .tr-best-for{\n  margin-top:14px;\n  color:var(--holiday-gold-light);\n}\n\n.tr-youth-companion .tr-card-copy{\n  max-width:650px;\n  margin-top:8px;\n  color:rgba(255,255,255,.82);\n  font-size:14px;\n}\n\n.tr-youth-companion-action{\n  position:relative;\n  padding:23px 24px;\n  border-radius:13px;\n  background:linear-gradient(180deg,#fffefb,#f7f1e6);\n  color:var(--tr-text);\n  box-shadow:0 9px 24px rgba(0,0,0,.12);\n}\n\n.tr-youth-companion-action .tr-discount-flag{\n  top:18px;\n  right:18px;\n}\n\n.tr-youth-companion-action .tr-price-box{\n  margin-top:0;\n  padding:0 72px 15px 0;\n  border-top:0;\n}\n\n.tr-youth-companion-action .tr-sale-price{\n  font-size:34px;\n}\n\n.tr-youth-companion-action .tr-btn{\n  margin-top:15px;\n}\n\n.tr-youth-companion-action .tr-link{\n  color:var(--tr-green-dark)!important;\n}\n\n\/* =========================================================\n   GRID BALANCE\n   Standard sections with only one or two items stay centered.\n   ========================================================= *\/\n\n.tr-sale-grid.count-1{\n  grid-template-columns:1fr;\n  max-width:420px;\n  margin-left:auto;\n  margin-right:auto;\n}\n\n.tr-sale-grid.count-2{\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  max-width:800px;\n  margin-left:auto;\n  margin-right:auto;\n}\n\n.tr-sale-grid.count-3{\n  grid-template-columns:repeat(3,minmax(0,1fr));\n}\n\n\n\n\/* =========================================================\n   YOUTH SECTION \u2014 SEASONAL DARK TREATMENT\n   ========================================================= *\/\n\n.tr-youth-section{\n  position:relative;\n\n  overflow:hidden;\n\n  background:\n    radial-gradient(\n      circle at 8% 10%,\n      rgba(215,166,73,.10),\n      transparent 22%\n    ),\n    radial-gradient(\n      circle at 92% 86%,\n      rgba(139,153,66,.13),\n      transparent 26%\n    ),\n    linear-gradient(\n      135deg,\n      #1f2d1b,\n      var(--holiday-pine) 55%,\n      #304226\n    );\n\n  color:#ffffff;\n}\n\n.tr-youth-section::before{\n  content:\"\";\n\n  position:absolute;\n\n  inset:0;\n\n  background:\n    radial-gradient(\n      circle,\n      rgba(255,255,255,.55) 0 1px,\n      transparent 1.5px\n    );\n\n  background-size:74px 74px;\n\n  opacity:.055;\n\n  pointer-events:none;\n}\n\n.tr-youth-section .tr-wrap{\n  position:relative;\n\n  z-index:2;\n}\n\n.tr-youth-section > .tr-wrap > .tr-kicker{\n  color:var(--holiday-gold-light);\n}\n\n.tr-youth-section > .tr-wrap > .tr-h2{\n  color:#ffffff;\n}\n\n.tr-youth-section > .tr-wrap > .tr-lead{\n  color:rgba(255,255,255,.82);\n}\n\n.tr-youth-section .tr-sale-card{\n  background:#fffdf8;\n}\n\n.tr-youth-section .tr-link{\n  color:var(--holiday-gold-light)!important;\n}\n\n\n\/* =========================================================\n   SAP FEATURE\n   ========================================================= *\/\n\n.tr-sap{\n  position:relative;\n\n  display:grid;\n\n  grid-template-columns:\n    minmax(0,1.08fr)\n    minmax(320px,.92fr);\n\n  gap:42px;\n\n  margin-top:32px;\n\n  padding:39px;\n\n  overflow:hidden;\n\n  border:1px solid rgba(244,225,174,.22);\n\n  border-radius:18px;\n\n  background:\n    radial-gradient(\n      circle at 100% 0,\n      rgba(215,166,73,.14),\n      transparent 30%\n    ),\n    rgba(255,255,255,.075);\n\n  align-items:center;\n}\n\n.tr-sap::before{\n  content:\"SUMMER\";\n\n  position:absolute;\n\n  top:-5px;\n  right:-16px;\n\n  color:rgba(255,255,255,.035);\n\n  font-size:110px;\n\n  font-weight:900;\n\n  letter-spacing:-5px;\n\n  pointer-events:none;\n}\n\n.tr-sap-copy{\n  position:relative;\n\n  z-index:2;\n}\n\n.tr-sap-copy .tr-kicker{\n  color:var(--holiday-gold-light);\n}\n\n.tr-sap-copy h3{\n  max-width:630px;\n\n  margin:0;\n\n  color:#ffffff;\n\n  font-size:clamp(29px,3.5vw,42px);\n\n  font-weight:800;\n\n  letter-spacing:-.8px;\n\n  line-height:1.08;\n}\n\n.tr-sap-copy p{\n  margin:14px 0 0;\n\n  color:rgba(255,255,255,.83);\n\n  font-size:15px;\n\n  line-height:1.7;\n}\n\n.tr-sap-value{\n  display:inline-flex;\n\n  margin-top:20px;\n\n  padding:8px 11px;\n\n  border-radius:8px;\n\n  background:var(--holiday-gold-light);\n\n  color:var(--holiday-pine);\n\n  font-size:12px;\n\n  font-weight:900;\n}\n\n\n\/* =========================================================\n   TIER TRACKER\n   ========================================================= *\/\n\n.tr-tier-card{\n  position:relative;\n\n  z-index:2;\n\n  padding:29px;\n\n  border-radius:15px;\n\n  background:\n    linear-gradient(\n      180deg,\n      #fffefb,\n      #f7f1e6\n    );\n\n  color:var(--tr-text);\n\n  box-shadow:\n    0 11px 32px rgba(0,0,0,.14);\n}\n\n.tr-tier-label{\n  display:block;\n\n  color:var(--tr-green-dark);\n\n  font-size:11px;\n\n  font-weight:900;\n\n  letter-spacing:1px;\n\n  text-transform:uppercase;\n}\n\n.tr-tier-price-row{\n  display:flex;\n\n  justify-content:space-between;\n\n  gap:15px;\n\n  margin-top:8px;\n\n  align-items:flex-end;\n}\n\n.tr-tier-name{\n  color:var(--tr-charcoal);\n\n  font-size:25px;\n\n  font-weight:900;\n}\n\n.tr-tier-price{\n  color:var(--holiday-cranberry);\n\n  font-size:37px;\n\n  font-weight:900;\n\n  line-height:1;\n}\n\n.tr-tier-savings{\n  margin-top:10px;\n\n  color:var(--tr-green-dark);\n\n  font-size:12px;\n\n  font-weight:900;\n}\n\n.tr-tier-meta{\n  display:flex;\n\n  justify-content:space-between;\n\n  gap:15px;\n\n  margin-top:20px;\n\n  font-size:12px;\n\n  font-weight:900;\n}\n\n.tr-progress{\n  width:100%;\n  height:14px;\n\n  margin-top:8px;\n\n  overflow:hidden;\n\n  border-radius:999px;\n\n  background:#e5e7dc;\n}\n\n.tr-progress-fill{\n  height:100%;\n\n  border-radius:999px;\n\n  background:\n    linear-gradient(\n      90deg,\n      var(--tr-green-dark),\n      var(--tr-green)\n    );\n}\n\n.tr-tier-next{\n  margin-top:12px;\n\n  font-size:13px;\n\n  line-height:1.55;\n}\n\n.tr-tier-next strong{\n  color:var(--holiday-cranberry);\n}\n\n.tr-tier-steps{\n  display:flex;\n\n  gap:5px;\n\n  margin-top:20px;\n}\n\n.tr-tier-step{\n  flex:1;\n\n  min-width:0;\n\n  padding:8px 3px;\n\n  border:1px solid var(--tr-border);\n\n  border-radius:7px;\n\n  background:var(--tr-cream);\n\n  color:#77776e;\n\n  font-size:9px;\n\n  font-weight:900;\n\n  text-align:center;\n}\n\n.tr-tier-step span{\n  display:block;\n\n  margin-top:2px;\n\n  font-size:10px;\n}\n\n.tr-tier-step.current{\n  border-color:var(--tr-green-dark);\n\n  background:var(--tr-green-dark);\n\n  color:#ffffff;\n}\n\n.tr-tier-step.past{\n  opacity:.6;\n}\n\n\n\/* =========================================================\n   HOW DIGITAL GIFTS WORK\n   ========================================================= *\/\n\n.tr-how-grid{\n  display:grid;\n\n  grid-template-columns:repeat(4,minmax(0,1fr));\n\n  gap:15px;\n\n  margin-top:30px;\n}\n\n.tr-how{\n  padding:24px 22px;\n\n  border:1px solid rgba(72,80,39,.16);\n\n  border-radius:14px;\n\n  background:\n    linear-gradient(\n      180deg,\n      #fffdf8,\n      #f7f1e7\n    );\n\n  box-shadow:\n    0 5px 16px rgba(48,48,48,.035);\n}\n\n.tr-how-num{\n  display:flex;\n\n  width:38px;\n  height:38px;\n\n  align-items:center;\n  justify-content:center;\n\n  border-radius:50%;\n\n  background:var(--holiday-pine);\n\n  color:var(--holiday-gold-light);\n\n  font-weight:900;\n}\n\n.tr-how h3{\n  margin:14px 0 0;\n\n  color:var(--tr-charcoal);\n\n  font-size:18px;\n}\n\n.tr-how p{\n  margin:7px 0 0;\n\n  font-size:13px;\n\n  line-height:1.62;\n}\n\n\n\n\n\/* =========================================================\n   HOLIDAY SALE DETAILS \/ FINE PRINT\n   ========================================================= *\/\n\n.tr-sale-details{\n  background:\n    radial-gradient(circle at 15% 20%, rgba(244,164,9,.07), transparent 22%),\n    radial-gradient(circle at 85% 72%, rgba(139,163,60,.08), transparent 25%),\n    linear-gradient(135deg, #172816, #304326);\n  border-top:1px solid rgba(255,255,255,.10);\n}\n\n.tr-details-box{\n  max-width:980px;\n  margin:0 auto;\n  padding:34px 36px;\n  border:1px solid rgba(72,80,39,.16);\n  border-radius:16px;\n  background:linear-gradient(180deg,#fffdf8,#f7f1e7);\n  box-shadow:0 8px 24px rgba(48,48,48,.04);\n}\n\n.tr-details-box h2{\n  margin:0;\n  color:var(--tr-charcoal);\n  font-size:clamp(28px,3.5vw,38px);\n  font-weight:800;\n  letter-spacing:-.7px;\n  line-height:1.08;\n}\n\n.tr-details-intro{\n  margin:12px 0 0;\n  color:var(--tr-text);\n  font-size:15px;\n  line-height:1.7;\n}\n\n.tr-details-grid{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:18px;\n  margin-top:26px;\n}\n\n.tr-detail-item{\n  padding:20px 21px;\n  border:1px solid rgba(72,80,39,.13);\n  border-radius:12px;\n  background:rgba(255,255,255,.48);\n}\n\n.tr-detail-item h3{\n  margin:0 0 8px;\n  color:var(--holiday-pine);\n  font-size:15px;\n  font-weight:900;\n}\n\n.tr-detail-item p{\n  margin:0;\n  color:#5d5b54;\n  font-size:13px;\n  line-height:1.65;\n}\n\n.tr-detail-item.full{\n  grid-column:1 \/ -1;\n}\n\n@media(max-width:700px){\n  .tr-details-box{\n    padding:27px 22px;\n  }\n  .tr-details-grid{\n    grid-template-columns:1fr;\n  }\n  .tr-detail-item.full{\n    grid-column:auto;\n  }\n}\n\n\n\/* =========================================================\n   FINAL CTA\n   ========================================================= *\/\n\n.tr-final{\n  position:relative;\n\n  overflow:hidden;\n\n  padding:74px 0;\n\n  background:\n    radial-gradient(\n      circle at 50% -20%,\n      rgba(215,166,73,.12),\n      transparent 38%\n    ),\n    var(--holiday-cream);\n\n  color:var(--holiday-pine);\n\n  text-align:center;\n}\n\n.tr-final::before{\n  content:\"\";\n\n  position:absolute;\n\n  inset:0;\n\n  background:\n    radial-gradient(\n      circle,\n      rgba(31,56,35,.38) 0 1px,\n      transparent 1.5px\n    );\n\n  background-size:67px 67px;\n\n  opacity:.06;\n}\n\n.tr-final .tr-wrap{\n  position:relative;\n\n  z-index:2;\n}\n\n.tr-final .tr-kicker{\n  color:var(--holiday-olive);\n}\n\n.tr-final h2{\n  max-width:820px;\n\n  margin:0 auto;\n\n  color:var(--holiday-pine);\n\n  font-size:clamp(35px,4vw,50px);\n\n  font-weight:800;\n\n  letter-spacing:-1px;\n\n  line-height:1.06;\n}\n\n.tr-final p{\n  max-width:700px;\n\n  margin:15px auto 0;\n\n  color:var(--holiday-charcoal);\n\n  font-size:17px;\n}\n\n\n\/* =========================================================\n   RESPONSIVE\n   ========================================================= *\/\n\n@media(max-width:950px){\n\n  .tr-single-layout,\n  .tr-youth-companion{\n    grid-template-columns:1fr;\n  }\n\n  .tr-single-offer{\n    max-width:none;\n    justify-self:stretch;\n  }\n\n  .tr-gift-grid{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n\n  .tr-special-layout{\n    grid-template-columns:1fr;\n    gap:26px;\n  }\n\n  .tr-sale-grid{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n\n  .tr-sap{\n    grid-template-columns:1fr;\n  }\n\n  .tr-how-grid{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n\n}\n\n\n@media(max-width:700px){\n\n  .tr-wrap{\n    width:calc(100% - 30px);\n  }\n\n  .tr-section{\n    padding:54px 0;\n  }\n\n  .tr-campaign-hero{\n    padding-top:10px;\n  }\n\n  .tr-campaign-wrap{\n    width:calc(100% - 20px);\n  }\n\n  .tr-campaign-link{\n    border-radius:12px;\n  }\n\n  .tr-promise-bar{\n    grid-template-columns:1fr;\n\n    width:calc(100% - 40px);\n\n    margin-top:12px;\n  }\n\n  .tr-promise + .tr-promise{\n    border-top:1px solid rgba(72,80,39,.13);\n\n    border-left:0;\n  }\n\n  .tr-gift-grid,\n  .tr-special-offers{\n    grid-template-columns:1fr;\n  }\n\n  .tr-special-offers.count-3 .tr-sale-card:first-child{\n    grid-column:auto;\n  }\n\n  .tr-countdown-time{\n    gap:6px;\n  }\n\n  .tr-countdown-unit{\n    flex:1 1 62px;\n    min-width:0;\n  }\n\n  .tr-sale-grid,\n  .tr-sale-grid.count-2,\n  .tr-sale-grid.count-3,\n  .tr-how-grid{\n    grid-template-columns:1fr;\n    max-width:none;\n  }\n\n  .tr-sap{\n    padding:27px;\n  }\n\n  .tr-tier-price-row{\n    align-items:flex-start;\n\n    flex-direction:column;\n\n    gap:7px;\n  }\n\n  .tr-tier-steps{\n    display:grid;\n\n    grid-template-columns:repeat(3,minmax(0,1fr));\n  }\n\n  .tr-final{\n    padding:58px 0;\n  }\n\n}\n<\/style>\n\n\n\n<main class=\"tr-holiday\">\n\n\n  <!-- =====================================================\n       ROTATING HOLIDAY CAMPAIGN HERO\n       ===================================================== -->\n\n  <section class=\"tr-campaign-hero\">\n\n    <div class=\"tr-campaign-wrap\">\n\n      <a\n        class=\"tr-campaign-link\"\n        id=\"tr-campaign-link\"\n        href=\"#holiday-deals\"\n        aria-label=\"Shop TreeRunner Rochester holiday deals\"\n      >\n\n        <img decoding=\"async\"\n          class=\"tr-campaign-image\"\n          id=\"tr-campaign-image\"\n          src=\"\"\n          alt=\"\"\n        >\n\n      <\/a>\n\n    <\/div>\n\n  <\/section>\n\n\n\n  <!-- =====================================================\n       QUICK GIFT BENEFITS\n       ===================================================== -->\n\n  <div class=\"tr-promise-bar\">\n\n    <div class=\"tr-promise\">\n\n      <strong>\n        Holiday-Only Pricing\n      <\/strong>\n\n      <span>\n        Save compared with regular pricing.\n      <\/span>\n\n    <\/div>\n\n\n    <div class=\"tr-promise\">\n\n      <strong>\n        100% Digital\n      <\/strong>\n\n      <span>\n        No shipping required.\n      <\/span>\n\n    <\/div>\n\n\n    <div class=\"tr-promise\">\n\n      <strong>\n        2027 Season Use\n      <\/strong>\n\n      <span>\n        Gifts can be used beginning in April.\n      <\/span>\n\n    <\/div>\n\n  <\/div>\n\n\n\n  <!-- =====================================================\n       MODULAR SALE CONTENT\n       ===================================================== -->\n\n  <div\n    id=\"holiday-deals\"\n  ><\/div>\n\n  <div\n    id=\"tr-holiday-sections\"\n  ><\/div>\n\n\n\n  <!-- =====================================================\n       DIGITAL GIFTING\n       ===================================================== -->\n\n  <div class=\"tr-light-divider\"><\/div>\n\n  <section class=\"tr-section\">\n\n    <div class=\"tr-wrap\">\n\n      <span class=\"tr-kicker\">\n        Easy Holiday Gifting\n      <\/span>\n\n      <h2 class=\"tr-h2\">\n        Buy it online. Put it under the tree.\n      <\/h2>\n\n      <div class=\"tr-how-grid\">\n\n\n        <article class=\"tr-how\">\n\n          <div class=\"tr-how-num\">\n            1\n          <\/div>\n\n          <h3>\n            Pick the deal.\n          <\/h3>\n\n          <p>\n            Choose an adventure pack, youth program or pass.\n          <\/p>\n\n        <\/article>\n\n\n        <article class=\"tr-how\">\n\n          <div class=\"tr-how-num\">\n            2\n          <\/div>\n\n          <h3>\n            Buy online.\n          <\/h3>\n\n          <p>\n            Complete the purchase without waiting for anything to arrive in the mail.\n          <\/p>\n\n        <\/article>\n\n\n        <article class=\"tr-how\">\n\n          <div class=\"tr-how-num\">\n            3\n          <\/div>\n\n          <h3>\n            Receive it digitally.\n          <\/h3>\n\n          <p>\n            Booking or redemption information is delivered electronically.\n          <\/p>\n\n        <\/article>\n\n\n        <article class=\"tr-how\">\n\n          <div class=\"tr-how-num\">\n            4\n          <\/div>\n\n          <h3>\n            Give adventure.\n          <\/h3>\n\n          <p>\n            Forward it, print it or put it into a holiday card.\n          <\/p>\n\n        <\/article>\n\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n\n\n\n  <!-- =====================================================\n       HOLIDAY SALE DETAILS \/ FINE PRINT\n       ===================================================== -->\n\n  <div class=\"tr-light-divider\"><\/div>\n\n  <section class=\"tr-section tr-sale-details\">\n\n    <div class=\"tr-wrap\">\n\n      <div class=\"tr-details-box\">\n\n        <span class=\"tr-kicker\">\n          Holiday Sale Details\n        <\/span>\n\n        <h2>\n          A few important details before you gift adventure.\n        <\/h2>\n\n        <p class=\"tr-details-intro\">\n          Gift vouchers never expire. Holiday gifts purchased during this sale may be used during our 2027 season beginning in April, subject to the restrictions below.\n        <\/p>\n\n        <div class=\"tr-details-grid\">\n\n          <div class=\"tr-detail-item full\">\n            <h3>Digital Delivery<\/h3>\n            <p>\n              All purchases from TreeRunner's holiday sale are entirely digital. This eco-friendly approach ensures you experience zero shipping or delivery delays, making it a swift and seamless gifting option. You'll receive your booking codes within one hour of purchase.\n            <\/p>\n          <\/div>\n\n          <div class=\"tr-detail-item\">\n            <h3>Voucher Use<\/h3>\n            <p>\n              Vouchers purchased are evergreen and never expire. However, they cannot be redeemed on Saturdays or during special events.\n            <\/p>\n          <\/div>\n\n          <div class=\"tr-detail-item\">\n            <h3>Gift Vouchers<\/h3>\n            <p>\n              Shareable fun for all ages! These tickets can be shared with friends and family. You can either keep or separate the tickets however you would like.\n            <\/p>\n          <\/div>\n\n          <div class=\"tr-detail-item\">\n            <h3>Season Passes<\/h3>\n            <p>\n              All season passes come with 2 buddy codes and can be used at any time throughout the year, except Saturdays and special events. Season Passes can be used at any of our park locations.\n            <\/p>\n          <\/div>\n\n          <div class=\"tr-detail-item\">\n            <h3>No Risk Cancellation Policy<\/h3>\n            <p>\n              Rest easy with the best cancellation policy ever! As long as you contact us before your scheduled start time that day, we can reschedule you for any time in the future, including if you get rained out.\n            <\/p>\n          <\/div>\n\n        <\/div>\n\n      <\/div>\n\n    <\/div>\n\n  <\/section>\n\n\n  <!-- =====================================================\n       FINAL CTA\n       ===================================================== -->\n\n  <section class=\"tr-final\">\n\n    <div class=\"tr-wrap\">\n\n      <span class=\"tr-kicker\">\n        TreeRunner Rochester Holiday Sale\n      <\/span>\n\n      <h2>\n        Less stuff. More adventure.\n      <\/h2>\n\n      <p>\n        Give them something they'll remember doing long after the wrapping paper is gone.\n      <\/p>\n\n    <\/div>\n\n  <\/section>\n\n\n<\/main>\n\n\n\n<script>\n(function(){\n\n  const CONFIG =\n    window.TR_HOLIDAY_CONFIG;\n\n\n  \/* =======================================================\n     HERO DATE HELPERS\n     Uses America\/Detroit regardless of visitor location.\n     ======================================================= *\/\n\n  function easternDateKey(){\n\n    const parts =\n      new Intl.DateTimeFormat(\n        \"en-US\",\n        {\n          timeZone:\"America\/Detroit\",\n          year:\"numeric\",\n          month:\"2-digit\",\n          day:\"2-digit\"\n        }\n      )\n      .formatToParts(\n        new Date()\n      );\n\n\n    const values = {};\n\n    parts.forEach(\n      function(part){\n\n        if(\n          part.type !== \"literal\"\n        ){\n          values[part.type] =\n            part.value;\n        }\n\n      }\n    );\n\n\n    return (\n      values.year +\n      \"-\" +\n      values.month +\n      \"-\" +\n      values.day\n    );\n\n  }\n\n\n  function getHeroKey(){\n\n    if(\n      CONFIG.heroOverride &&\n      CONFIG.heroImages[\n        CONFIG.heroOverride\n      ]\n    ){\n      return CONFIG.heroOverride;\n    }\n\n\n    const today =\n      easternDateKey();\n\n\n    const match =\n      CONFIG.heroSchedule\n        .find(\n          function(item){\n\n            return (\n              today >= item.start &&\n              today <= item.end\n            );\n\n          }\n        );\n\n\n    return match\n      ?\n      match.hero\n      :\n      \"evergreen\";\n\n  }\n\n\n  function renderHero(){\n\n    const key =\n      getHeroKey();\n\n    const hero =\n      CONFIG.heroImages[key] ||\n      CONFIG.heroImages.evergreen;\n\n\n    const image =\n      document.getElementById(\n        \"tr-campaign-image\"\n      );\n\n\n    if(!image){\n      return;\n    }\n\n\n    image.src =\n      hero.src;\n\n    image.alt =\n      hero.alt || \"\";\n\n  }\n\n\n\n\n  function getActiveSpecialOfferMatch(){\n\n    const today =\n      easternDateKey();\n\n    return (CONFIG.specialOfferSchedule || [])\n      .find(\n        function(item){\n          return (\n            today >= item.start &&\n            today <= item.end\n          );\n        }\n      ) || null;\n\n  }\n\n\n  function getActiveSpecialOfferIds(){\n\n    \/*\n      Any manually-entered specialOffers take priority.\n      Leave specialOffers empty for the automatic date schedule.\n    *\/\n    if(\n      Array.isArray(CONFIG.specialOffers) &&\n      CONFIG.specialOffers.length\n    ){\n      return CONFIG.specialOffers;\n    }\n\n    const match =\n      getActiveSpecialOfferMatch();\n\n    return match\n      ?\n      match.products\n      :\n      [];\n\n  }\n\n\n  function timeZoneOffsetMs(timestamp,timeZone){\n\n    const parts =\n      new Intl.DateTimeFormat(\n        \"en-US\",\n        {\n          timeZone:timeZone,\n          year:\"numeric\",\n          month:\"2-digit\",\n          day:\"2-digit\",\n          hour:\"2-digit\",\n          minute:\"2-digit\",\n          second:\"2-digit\",\n          hourCycle:\"h23\"\n        }\n      )\n        .formatToParts(new Date(timestamp));\n\n    const values = {};\n\n    parts.forEach(\n      function(part){\n        if(part.type !== \"literal\"){\n          values[part.type] = part.value;\n        }\n      }\n    );\n\n    const asUtc =\n      Date.UTC(\n        Number(values.year),\n        Number(values.month) - 1,\n        Number(values.day),\n        Number(values.hour),\n        Number(values.minute),\n        Number(values.second)\n      );\n\n    return asUtc - timestamp;\n\n  }\n\n\n  function zonedDateTimeToUtcMs(dateKey,timeText,timeZone){\n\n    const dateParts =\n      String(dateKey).split(\"-\").map(Number);\n\n    const timeParts =\n      String(timeText || \"23:59:59\").split(\":\").map(Number);\n\n    const guess =\n      Date.UTC(\n        dateParts[0],\n        dateParts[1] - 1,\n        dateParts[2],\n        timeParts[0] || 0,\n        timeParts[1] || 0,\n        timeParts[2] || 0\n      );\n\n    let result =\n      guess - timeZoneOffsetMs(guess,timeZone);\n\n    result =\n      guess - timeZoneOffsetMs(result,timeZone);\n\n    return result;\n\n  }\n\n\n  function renderSpecialCountdown(){\n\n    const countdown =\n      document.getElementById(\"tr-special-countdown\");\n\n    if(!countdown){\n      return;\n    }\n\n    if(\n      Array.isArray(CONFIG.specialOffers) &&\n      CONFIG.specialOffers.length\n    ){\n      countdown.hidden = true;\n      return;\n    }\n\n    const match =\n      getActiveSpecialOfferMatch();\n\n    if(!match){\n      countdown.hidden = true;\n      return;\n    }\n\n    const countdownConfig =\n      CONFIG.countdown || {};\n\n    const thresholdHours =\n      Number(countdownConfig.thresholdHours) || 48;\n\n    const timeZone =\n      countdownConfig.timeZone || \"America\/Detroit\";\n\n    const endTime =\n      match.endTime ||\n      countdownConfig.defaultEndTime ||\n      \"23:59:59\";\n\n    const endMs =\n      zonedDateTimeToUtcMs(\n        match.end,\n        endTime,\n        timeZone\n      );\n\n    const thresholdMs =\n      thresholdHours * 60 * 60 * 1000;\n\n    const daysEl =\n      countdown.querySelector(\"[data-tr-countdown-days]\");\n\n    const hoursEl =\n      countdown.querySelector(\"[data-tr-countdown-hours]\");\n\n    const minutesEl =\n      countdown.querySelector(\"[data-tr-countdown-minutes]\");\n\n    const secondsEl =\n      countdown.querySelector(\"[data-tr-countdown-seconds]\");\n\n    function update(){\n\n      const remaining =\n        endMs - Date.now();\n\n      if(remaining <= 0){\n        countdown.hidden = true;\n        window.location.reload();\n        return;\n      }\n\n      if(remaining > thresholdMs){\n        countdown.hidden = true;\n        return;\n      }\n\n      countdown.hidden = false;\n\n      const totalSeconds =\n        Math.floor(remaining \/ 1000);\n\n      const days =\n        Math.floor(totalSeconds \/ 86400);\n\n      const hours =\n        Math.floor((totalSeconds % 86400) \/ 3600);\n\n      const minutes =\n        Math.floor((totalSeconds % 3600) \/ 60);\n\n      const seconds =\n        totalSeconds % 60;\n\n      if(daysEl){\n        daysEl.textContent = String(days).padStart(2,\"0\");\n      }\n\n      if(hoursEl){\n        hoursEl.textContent = String(hours).padStart(2,\"0\");\n      }\n\n      if(minutesEl){\n        minutesEl.textContent = String(minutes).padStart(2,\"0\");\n      }\n\n      if(secondsEl){\n        secondsEl.textContent = String(seconds).padStart(2,\"0\");\n      }\n\n      window.setTimeout(update,1000);\n\n    }\n\n    update();\n\n  }\n\n\n  \/* =======================================================\n     GENERAL HELPERS\n     ======================================================= *\/\n\n  function money(value){\n\n    if(\n      value === null ||\n      value === undefined ||\n      value === \"\"\n    ){\n      return \"\";\n    }\n\n\n    return \"$\" +\n      Number(value)\n        .toLocaleString(\n          \"en-US\",\n          {\n            maximumFractionDigits:0\n          }\n        );\n\n  }\n\n\n  function discountPercent(\n    regular,\n    sale\n  ){\n\n    if(\n      !regular ||\n      sale === null ||\n      sale === undefined\n    ){\n      return null;\n    }\n\n    const actual =\n      (\n        (regular - sale)\n        \/\n        regular\n      )\n      *\n      100;\n\n    \/*\n      Holiday badge rule:\n      Always round DOWN to the nearest 5-point increment.\n      Example: 36.5% displays as 35% OFF.\n    *\/\n    return Math.floor(actual \/ 5) * 5;\n\n  }\n\n\n  function savingsDollars(\n    regular,\n    sale\n  ){\n\n    if(\n      !regular ||\n      sale === null ||\n      sale === undefined\n    ){\n      return null;\n    }\n\n\n    return regular - sale;\n\n  }\n\n\n  function toneClass(tone){\n\n    if(\n      tone === \"cranberry\"\n    ){\n      return \"cranberry\";\n    }\n\n\n    if(\n      tone === \"gold\"\n    ){\n      return \"gold\";\n    }\n\n\n    return \"\";\n\n  }\n\n\n\n  \/* =======================================================\n     STANDARD SALE TILE\n     ======================================================= *\/\n\n  function saleTile(product){\n\n    const pct =\n      discountPercent(\n        product.regularPrice,\n        product.salePrice\n      );\n\n\n    const savings =\n      savingsDollars(\n        product.regularPrice,\n        product.salePrice\n      );\n\n\n    const discountFlag =\n      pct !== null\n      ?\n      `\n        <div class=\"tr-discount-flag\">\n\n          <strong>\n            ${pct}%\n          <\/strong>\n\n          OFF\n\n        <\/div>\n      `\n      :\n      \"\";\n\n\n    let priceHTML =\n      \"\";\n\n\n    if(\n      product.displayPrice\n    ){\n\n      priceHTML = `\n        <div class=\"tr-price-box\">\n\n          <span class=\"tr-price-label\">\n            ${product.savingsLabel || \"Gift\"}\n          <\/span>\n\n          <div class=\"tr-prices\">\n\n            <span class=\"tr-sale-price\">\n              ${product.displayPrice}\n            <\/span>\n\n          <\/div>\n\n        <\/div>\n      `;\n\n    }else{\n\n\n      const regular =\n        product.regularPrice\n        ?\n        `\n          <span class=\"tr-regular-price\">\n            ${money(product.regularPrice)}\n          <\/span>\n        `\n        :\n        \"\";\n\n\n      const saved =\n        savings !== null\n        ?\n        `\n          <span class=\"tr-save-dollar\">\n            Save ${money(savings)}\n          <\/span>\n        `\n        :\n        \"\";\n\n\n      priceHTML = `\n        <div class=\"tr-price-box\">\n\n          <span class=\"tr-price-label\">\n            ${product.savingsLabel || \"Sale Price\"}\n          <\/span>\n\n          <div class=\"tr-prices\">\n\n            ${regular}\n\n            <span class=\"tr-sale-price\">\n              ${money(product.salePrice)}\n            <\/span>\n\n          <\/div>\n\n          ${saved}\n\n        <\/div>\n      `;\n\n    }\n\n\n    const learnLink =\n      product.learnUrl\n      ?\n      `\n        <a\n          class=\"tr-link\"\n          href=\"${product.learnUrl}\"\n        >\n          Learn More \u2192\n        <\/a>\n      `\n      :\n      \"\";\n\n\n    return `\n      <article\n        class=\"tr-sale-card ${toneClass(product.tone)}\"\n      >\n\n        <div class=\"tr-sale-card-top\">\n\n          ${discountFlag}\n\n          <span class=\"tr-card-badge\">\n            ${product.badge}\n          <\/span>\n\n          <h3>\n            ${product.title}\n          <\/h3>\n\n        <\/div>\n\n\n        <div class=\"tr-sale-card-body\">\n\n          <p class=\"tr-best-for\">\n            ${product.bestFor}\n          <\/p>\n\n          <p class=\"tr-card-copy\">\n            ${product.description}\n          <\/p>\n\n          ${priceHTML}\n\n          <a\n            class=\"tr-btn\"\n            href=\"${product.url}\"\n          >\n            ${product.button}\n          <\/a>\n\n          ${learnLink}\n\n        <\/div>\n\n      <\/article>\n    `;\n\n  }\n\n\n\n\n  \/* =======================================================\n     HOLIDAY GIFT GRID\n     ======================================================= *\/\n\n  function compactGiftOffer(product){\n\n    const pct =\n      discountPercent(\n        product.regularPrice,\n        product.salePrice\n      );\n\n    const savings =\n      savingsDollars(\n        product.regularPrice,\n        product.salePrice\n      );\n\n    const discountFlag =\n      pct !== null\n      ?\n      `\n        <div class=\"tr-discount-flag\">\n          <strong>${pct}%<\/strong>\n          OFF\n        <\/div>\n      `\n      :\n      \"\";\n\n    const regular =\n      product.regularPrice\n      ?\n      `<span class=\"tr-regular-price\">${money(product.regularPrice)}<\/span>`\n      :\n      \"\";\n\n    const saved =\n      savings !== null\n      ?\n      `<span class=\"tr-save-dollar\">Save ${money(savings)}<\/span>`\n      :\n      \"\";\n\n    const displayPrice =\n      product.displayPrice\n      ?\n      product.displayPrice\n      :\n      money(product.salePrice);\n\n    return `\n      <article class=\"tr-compact-offer ${toneClass(product.tone)}\">\n\n        ${discountFlag}\n\n        <span class=\"tr-card-badge\">\n          ${product.badge}\n        <\/span>\n\n        <h3>${product.title}<\/h3>\n\n        <p class=\"tr-best-for\">\n          ${product.bestFor}\n        <\/p>\n\n        <p class=\"tr-card-copy\">\n          ${product.description}\n        <\/p>\n\n        <div class=\"tr-price-box\">\n\n          <span class=\"tr-price-label\">\n            ${product.savingsLabel || \"Holiday Price\"}\n          <\/span>\n\n          <div class=\"tr-prices\">\n            ${regular}\n            <span class=\"tr-sale-price\">\n              ${displayPrice}\n            <\/span>\n          <\/div>\n\n          ${saved}\n\n        <\/div>\n\n        <a\n          class=\"tr-btn\"\n          href=\"${product.url}\"\n        >\n          ${product.button}\n        <\/a>\n\n      <\/article>\n    `;\n\n  }\n\n\n  function giftPacksSection(){\n\n    const section =\n      CONFIG.sections.giftPacks;\n\n    const products =\n      (CONFIG.giftProducts || [])\n        .map(\n          id => CONFIG.products[id]\n        )\n        .filter(Boolean);\n\n    if(\n      products.length === 0\n    ){\n      return \"\";\n    }\n\n    return `\n      <section class=\"tr-section tr-section-snow\">\n\n        <div class=\"tr-wrap\">\n\n          <span class=\"tr-kicker\">\n            ${section.kicker}\n          <\/span>\n\n          <h2 class=\"tr-h2\">\n            ${section.title}\n          <\/h2>\n\n          <p class=\"tr-lead\">\n            ${section.copy}\n          <\/p>\n\n          <div class=\"tr-gift-grid\">\n            ${products.map(compactGiftOffer).join(\"\")}\n          <\/div>\n\n        <\/div>\n\n      <\/section>\n    `;\n\n  }\n\n\n  function specialSection(){\n\n    const ids =\n      getActiveSpecialOfferIds();\n\n    if(\n      !ids ||\n      ids.length === 0\n    ){\n      return \"\";\n    }\n\n    const section =\n      CONFIG.sections.special;\n\n    const products =\n      ids\n        .map(\n          id => CONFIG.products[id]\n        )\n        .filter(Boolean);\n\n    if(\n      products.length === 0\n    ){\n      return \"\";\n    }\n\n    return `\n      <section class=\"tr-section tr-special-section\">\n\n        <div class=\"tr-wrap\">\n\n          <div class=\"tr-special-layout\">\n\n            <div class=\"tr-special-intro\">\n\n              <span class=\"tr-kicker\">\n                ${section.kicker}\n              <\/span>\n\n              <h2 class=\"tr-h2\">\n                ${section.title}\n              <\/h2>\n\n              <p class=\"tr-lead\">\n                ${section.copy}\n              <\/p>\n\n              <span class=\"tr-special-note\">\n                Available only while this offer is live\n              <\/span>\n\n              <div\n                class=\"tr-special-countdown\"\n                id=\"tr-special-countdown\"\n                hidden\n              >\n\n                <span class=\"tr-countdown-label\">\n                  Offer ends in\n                <\/span>\n\n                <div class=\"tr-countdown-time\">\n\n                  <div class=\"tr-countdown-unit\">\n                    <strong data-tr-countdown-days>00<\/strong>\n                    <span>Days<\/span>\n                  <\/div>\n\n                  <div class=\"tr-countdown-unit\">\n                    <strong data-tr-countdown-hours>00<\/strong>\n                    <span>Hrs<\/span>\n                  <\/div>\n\n                  <div class=\"tr-countdown-unit\">\n                    <strong data-tr-countdown-minutes>00<\/strong>\n                    <span>Min<\/span>\n                  <\/div>\n\n                  <div class=\"tr-countdown-unit\">\n                    <strong data-tr-countdown-seconds>00<\/strong>\n                    <span>Sec<\/span>\n                  <\/div>\n\n                <\/div>\n\n              <\/div>\n\n            <\/div>\n\n            <div class=\"tr-special-offers count-${products.length}\">\n              ${products.map(saleTile).join(\"\")}\n            <\/div>\n\n          <\/div>\n\n        <\/div>\n\n      <\/section>\n    `;\n\n  }\n\n\n  \/* =======================================================\n     STANDARD PRODUCT SECTION\n     ======================================================= *\/\n\n  function productSection(\n    sectionKey,\n    productIds,\n    background\n  ){\n\n    if(\n      !productIds ||\n      productIds.length === 0\n    ){\n      return \"\";\n    }\n\n\n    const section =\n      CONFIG.sections[\n        sectionKey\n      ];\n\n\n    const products =\n      productIds\n        .map(\n          id =>\n            CONFIG.products[id]\n        )\n        .filter(Boolean);\n\n\n    if(\n      products.length === 0\n    ){\n      return \"\";\n    }\n\n\n    if(\n      products.length === 1\n    ){\n\n      return `\n        <section\n          class=\"tr-section ${background || \"\"}\"\n        >\n\n          <div class=\"tr-wrap\">\n\n            <div class=\"tr-single-layout\">\n\n              <div class=\"tr-single-intro\">\n\n                <span class=\"tr-kicker\">\n                  ${section.kicker}\n                <\/span>\n\n                <h2 class=\"tr-h2\">\n                  ${section.title}\n                <\/h2>\n\n                <p class=\"tr-lead\">\n                  ${section.copy}\n                <\/p>\n\n              <\/div>\n\n              <div class=\"tr-single-offer\">\n                ${saleTile(products[0])}\n              <\/div>\n\n            <\/div>\n\n          <\/div>\n\n        <\/section>\n      `;\n\n    }\n\n\n    return `\n      <section\n        class=\"tr-section ${background || \"\"}\"\n      >\n\n        <div class=\"tr-wrap\">\n\n          <span class=\"tr-kicker\">\n            ${section.kicker}\n          <\/span>\n\n          <h2 class=\"tr-h2\">\n            ${section.title}\n          <\/h2>\n\n          <p class=\"tr-lead\">\n            ${section.copy}\n          <\/p>\n\n          <div class=\"tr-sale-grid count-${products.length}\">\n\n            ${\n              products\n                .map(saleTile)\n                .join(\"\")\n            }\n\n          <\/div>\n\n        <\/div>\n\n      <\/section>\n    `;\n\n  }\n\n\n  \/* =======================================================\n     SUMMER ADVENTURE PROGRAM\n     ======================================================= *\/\n\n  function sapBlock(){\n\n    const SAP =\n      CONFIG.sap;\n\n\n    const currentIndex =\n      SAP.tiers\n        .findIndex(\n          tier =>\n            tier.id ===\n            SAP.currentTierId\n        );\n\n\n    if(\n      currentIndex < 0\n    ){\n      return \"\";\n    }\n\n\n    const current =\n      SAP.tiers[\n        currentIndex\n      ];\n\n\n    const next =\n      SAP.tiers[\n        currentIndex + 1\n      ] || null;\n\n\n    const finalTier =\n      SAP.tiers[\n        SAP.tiers.length - 1\n      ];\n\n\n    const progress =\n      Math.max(\n        0,\n        Math.min(\n          100,\n          Number(\n            SAP.progress\n          ) || 0\n        )\n      );\n\n\n    const finalSavings =\n      finalTier.price -\n      current.price;\n\n\n    const belowFinalPercent =\n      Math.round(\n        (\n          finalSavings \/\n          finalTier.price\n        )\n        *\n        100\n      );\n\n\n    const tierBoxes =\n      SAP.tiers\n        .map(\n          function(\n            tier,\n            index\n          ){\n\n            let state =\n              \"\";\n\n\n            if(\n              index <\n              currentIndex\n            ){\n              state =\n                \"past\";\n            }\n\n\n            if(\n              index ===\n              currentIndex\n            ){\n              state =\n                \"current\";\n            }\n\n\n            return `\n              <div\n                class=\"tr-tier-step ${state}\"\n              >\n\n                ${tier.name}\n\n                <span>\n                  ${money(tier.price)}\n                <\/span>\n\n              <\/div>\n            `;\n\n          }\n        )\n        .join(\"\");\n\n\n    const nextText =\n      next\n      ?\n      `\n        Book before this tier fills.\n        Next price:\n\n        <strong>\n          ${money(next.price)}\n        <\/strong>.\n      `\n      :\n      `\n        <strong>\n          Final pricing tier.\n        <\/strong>\n\n        Registration remains available while space remains.\n      `;\n\n\n    return `\n      <div class=\"tr-sap\">\n\n        <div class=\"tr-sap-copy\">\n\n          <span class=\"tr-kicker\">\n            Summer Adventure Program\n          <\/span>\n\n          <h3>\n            Four days in the trees.\n            Holiday-season pricing now.\n          <\/h3>\n\n          <p>\n            TreeRunner Rochester's Summer Adventure Program\n            gives kids ages 7\u201314 four active days of climbing,\n            outdoor adventure and time outside together.\n          <\/p>\n\n          <div class=\"tr-sap-value\">\n\n            Current tier is\n            ${belowFinalPercent}%\n            below final-tier pricing\n\n          <\/div>\n\n\n          <a\n            class=\"tr-btn\"\n            style=\"\n              max-width:310px;\n              margin-top:22px;\n            \"\n            href=\"${SAP.purchaseUrl}\"\n          >\n            Reserve Summer Adventure Program\n          <\/a>\n\n          <br>\n\n          <a\n            class=\"tr-link\"\n            href=\"${SAP.learnUrl}\"\n          >\n            Learn About Summer Adventure Program \u2192\n          <\/a>\n\n        <\/div>\n\n\n        <aside class=\"tr-tier-card\">\n\n          <span class=\"tr-tier-label\">\n            Current Pricing Tier\n          <\/span>\n\n\n          <div class=\"tr-tier-price-row\">\n\n            <div class=\"tr-tier-name\">\n              ${current.name}\n            <\/div>\n\n            <div class=\"tr-tier-price\">\n              ${money(current.price)}\n            <\/div>\n\n          <\/div>\n\n\n          <div class=\"tr-tier-savings\">\n\n            Final tier:\n\n            <span\n              style=\"\n                text-decoration:line-through;\n                color:#85857d;\n              \"\n            >\n              ${money(finalTier.price)}\n            <\/span>\n\n            &nbsp;\u2022&nbsp;\n\n            Save\n            ${money(finalSavings)}\n            by booking at the current tier\n\n          <\/div>\n\n\n          <div class=\"tr-tier-meta\">\n\n            <span>\n              ${current.name}\n              is\n              ${progress}%\n              claimed\n            <\/span>\n\n            <span>\n              ${progress}%\n            <\/span>\n\n          <\/div>\n\n\n          <div\n            class=\"tr-progress\"\n            role=\"progressbar\"\n            aria-valuemin=\"0\"\n            aria-valuemax=\"100\"\n            aria-valuenow=\"${progress}\"\n          >\n\n            <div\n              class=\"tr-progress-fill\"\n              style=\"\n                width:${progress}%;\n              \"\n            ><\/div>\n\n          <\/div>\n\n\n          <div class=\"tr-tier-next\">\n            ${nextText}\n          <\/div>\n\n\n          <div class=\"tr-tier-steps\">\n            ${tierBoxes}\n          <\/div>\n\n        <\/aside>\n\n      <\/div>\n    `;\n\n  }\n\n\n\n  function kidsClubFeature(product){\n\n    const pct =\n      discountPercent(\n        product.regularPrice,\n        product.salePrice\n      );\n\n    const savings =\n      savingsDollars(\n        product.regularPrice,\n        product.salePrice\n      );\n\n    return `\n      <div class=\"tr-youth-companion\">\n\n        <div class=\"tr-youth-companion-copy\">\n\n          <span class=\"tr-card-badge\">\n            ${product.badge}\n          <\/span>\n\n          <h3>\n            ${product.title}\n          <\/h3>\n\n          <p class=\"tr-best-for\">\n            ${product.bestFor}\n          <\/p>\n\n          <p class=\"tr-card-copy\">\n            ${product.description}\n          <\/p>\n\n        <\/div>\n\n        <div class=\"tr-youth-companion-action\">\n\n          ${\n            pct !== null\n            ?\n            `\n              <div class=\"tr-discount-flag\">\n                <strong>${pct}%<\/strong>\n                OFF\n              <\/div>\n            `\n            :\n            \"\"\n          }\n\n          <div class=\"tr-price-box\">\n\n            <span class=\"tr-price-label\">\n              ${product.savingsLabel || \"Holiday Program Price\"}\n            <\/span>\n\n            <div class=\"tr-prices\">\n\n              ${\n                product.regularPrice\n                ?\n                `<span class=\"tr-regular-price\">${money(product.regularPrice)}<\/span>`\n                :\n                \"\"\n              }\n\n              <span class=\"tr-sale-price\">\n                ${money(product.salePrice)}\n              <\/span>\n\n            <\/div>\n\n            ${\n              savings !== null\n              ?\n              `<span class=\"tr-save-dollar\">Save ${money(savings)}<\/span>`\n              :\n              \"\"\n            }\n\n          <\/div>\n\n          <a\n            class=\"tr-btn\"\n            href=\"${product.url}\"\n          >\n            ${product.button}\n          <\/a>\n\n          ${\n            product.learnUrl\n            ?\n            `\n              <a\n                class=\"tr-link\"\n                href=\"${product.learnUrl}\"\n              >\n                Learn More \u2192\n              <\/a>\n            `\n            :\n            \"\"\n          }\n\n        <\/div>\n\n      <\/div>\n    `;\n\n  }\n\n\n  \/* =======================================================\n     YOUTH SECTION\n     ======================================================= *\/\n\n  function youthSection(){\n\n    const active =\n      CONFIG.youthPrograms ||\n      [];\n\n\n    if(\n      active.length === 0\n    ){\n      return \"\";\n    }\n\n\n    const showSAP =\n      active.includes(\n        \"sap\"\n      );\n\n\n    const standardYouth =\n      active\n        .filter(\n          id =>\n            id !== \"sap\"\n        )\n        .map(\n          id =>\n            CONFIG.products[id]\n        )\n        .filter(Boolean);\n\n\n    const section =\n      CONFIG.sections.youth;\n\n\n    return `\n      <div class=\"tr-light-divider\"><\/div>\n\n      <section\n        class=\"tr-section tr-youth-section\"\n      >\n\n        <div class=\"tr-wrap\">\n\n          <span class=\"tr-kicker\">\n            ${section.kicker}\n          <\/span>\n\n          <h2 class=\"tr-h2\">\n            ${section.title}\n          <\/h2>\n\n          <p class=\"tr-lead\">\n            ${section.copy}\n          <\/p>\n\n\n          ${\n            showSAP\n            ?\n            sapBlock()\n            :\n            \"\"\n          }\n\n\n          ${\n            standardYouth.length\n            ?\n            standardYouth\n              .map(kidsClubFeature)\n              .join(\"\")\n            :\n            \"\"\n          }\n\n        <\/div>\n\n      <\/section>\n    `;\n\n  }\n\n\n\n  \/* =======================================================\n     RENDER HERO\n     ======================================================= *\/\n\n  renderHero();\n\n\n\n  \/* =======================================================\n     RENDER SECTIONS\n     ======================================================= *\/\n\n  const sectionHTML = {\n\n\n    special:\n\n      specialSection(),\n\n\n    giftPacks:\n\n      giftPacksSection(),\n\n\n    youth:\n\n      youthSection(),\n\n\n    bounce:\n\n      `\n        <div class=\"tr-light-divider\"><\/div>\n      `\n      +\n      productSection(\n        \"bounce\",\n        CONFIG.bounceProducts,\n        \"tr-section-cream\"\n      ),\n\n\n    other:\n\n      `\n        <div class=\"tr-light-divider\"><\/div>\n      `\n      +\n      productSection(\n        \"other\",\n        CONFIG.otherProducts,\n        \"tr-section-dark-green\"\n      )\n\n  };\n\n\n  const output =\n    CONFIG.sectionOrder\n      .map(\n        key =>\n          sectionHTML[key] ||\n          \"\"\n      )\n      .join(\"\");\n\n\n  document.getElementById(\n    \"tr-holiday-sections\"\n  ).innerHTML =\n    output;\n\n  renderSpecialCountdown();\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Holiday-Only Pricing Save compared with regular pricing. 100% Digital No shipping required. 2027 Season Use Gifts can be used beginning in April. Easy Holiday Gifting Buy it online. Put it under the tree. 1 Pick the deal. Choose an adventure pack, youth program or pass. 2 Buy online. Complete the purchase without waiting for anything [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4325","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Holiday Sale - TreeRunner Adventure Parks Rochester<\/title>\n<meta name=\"description\" content=\"Light up their holiday season with a gift amidst the treetops. Give the Gift of Adventure, with a sustainable eco-friendly option.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/treerunnerparks.com\/rochester\/holiday\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Holiday Sale - TreeRunner Adventure Parks Rochester\" \/>\n<meta property=\"og:description\" content=\"Light up their holiday season with a gift amidst the treetops. Give the Gift of Adventure, with a sustainable eco-friendly option.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/treerunnerparks.com\/rochester\/holiday\/\" \/>\n<meta property=\"og:site_name\" content=\"TreeRunner Adventure Parks Rochester\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-01T16:46:49+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/holiday\\\/\",\"url\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/holiday\\\/\",\"name\":\"Holiday Sale - TreeRunner Adventure Parks Rochester\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/#website\"},\"datePublished\":\"2023-10-26T15:01:23+00:00\",\"dateModified\":\"2026-10-01T16:46:49+00:00\",\"description\":\"Light up their holiday season with a gift amidst the treetops. Give the Gift of Adventure, with a sustainable eco-friendly option.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/holiday\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/holiday\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/holiday\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Holiday Sale\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/#website\",\"url\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/\",\"name\":\"TreeRunner Adventure Parks Rochester\",\"description\":\"Ziplining, Climbing, Creating Memories!\",\"publisher\":{\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/#organization\",\"name\":\"TreeRunner Adventure Parks Rochester\",\"url\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/wp-content\\\/uploads\\\/sites\\\/9\\\/2023\\\/02\\\/Untitled-design-29.png\",\"contentUrl\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/wp-content\\\/uploads\\\/sites\\\/9\\\/2023\\\/02\\\/Untitled-design-29.png\",\"width\":350,\"height\":100,\"caption\":\"TreeRunner Adventure Parks Rochester\"},\"image\":{\"@id\":\"https:\\\/\\\/treerunnerparks.com\\\/rochester\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Holiday Sale - TreeRunner Adventure Parks Rochester","description":"Light up their holiday season with a gift amidst the treetops. Give the Gift of Adventure, with a sustainable eco-friendly option.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/treerunnerparks.com\/rochester\/holiday\/","og_locale":"en_US","og_type":"article","og_title":"Holiday Sale - TreeRunner Adventure Parks Rochester","og_description":"Light up their holiday season with a gift amidst the treetops. Give the Gift of Adventure, with a sustainable eco-friendly option.","og_url":"https:\/\/treerunnerparks.com\/rochester\/holiday\/","og_site_name":"TreeRunner Adventure Parks Rochester","article_modified_time":"2026-10-01T16:46:49+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/treerunnerparks.com\/rochester\/holiday\/","url":"https:\/\/treerunnerparks.com\/rochester\/holiday\/","name":"Holiday Sale - TreeRunner Adventure Parks Rochester","isPartOf":{"@id":"https:\/\/treerunnerparks.com\/rochester\/#website"},"datePublished":"2023-10-26T15:01:23+00:00","dateModified":"2026-10-01T16:46:49+00:00","description":"Light up their holiday season with a gift amidst the treetops. Give the Gift of Adventure, with a sustainable eco-friendly option.","breadcrumb":{"@id":"https:\/\/treerunnerparks.com\/rochester\/holiday\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/treerunnerparks.com\/rochester\/holiday\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/treerunnerparks.com\/rochester\/holiday\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/treerunnerparks.com\/rochester\/"},{"@type":"ListItem","position":2,"name":"Holiday Sale"}]},{"@type":"WebSite","@id":"https:\/\/treerunnerparks.com\/rochester\/#website","url":"https:\/\/treerunnerparks.com\/rochester\/","name":"TreeRunner Adventure Parks Rochester","description":"Ziplining, Climbing, Creating Memories!","publisher":{"@id":"https:\/\/treerunnerparks.com\/rochester\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/treerunnerparks.com\/rochester\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/treerunnerparks.com\/rochester\/#organization","name":"TreeRunner Adventure Parks Rochester","url":"https:\/\/treerunnerparks.com\/rochester\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/treerunnerparks.com\/rochester\/#\/schema\/logo\/image\/","url":"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2023\/02\/Untitled-design-29.png","contentUrl":"https:\/\/treerunnerparks.com\/rochester\/wp-content\/uploads\/sites\/9\/2023\/02\/Untitled-design-29.png","width":350,"height":100,"caption":"TreeRunner Adventure Parks Rochester"},"image":{"@id":"https:\/\/treerunnerparks.com\/rochester\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/pages\/4325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/comments?post=4325"}],"version-history":[{"count":573,"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/pages\/4325\/revisions"}],"predecessor-version":[{"id":451734,"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/pages\/4325\/revisions\/451734"}],"wp:attachment":[{"href":"https:\/\/treerunnerparks.com\/rochester\/wp-json\/wp\/v2\/media?parent=4325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}