{"title":"BFCM Giving","description":"\u003c!-- ============================================================\n     BLACK FRIDAY GIVING — self-contained HTML block for a Shopify\n     COLLECTION DESCRIPTION (also works in a Page body).\n     Paste the ENTIRE contents of this file into the description editor's HTML view\n     ( the \"\u003c\u003e\" button ) and save WITHOUT switching back to the visual editor,\n     which strips scripts. No Liquid, no theme files, no app required.\n     On a collection page it hides the theme's own collection title, the\n     description's margins, and the theme's own product grid (CFG.hideThemeGrid).\n\n     HOW IT WORKS\n     - On the live site the page reads the collection named in CFG.collection\n       (\/collections\/\u003chandle\u003e\/products.json) and renders every product in the\n       collection's own order. Re-sort, add or remove products in the\n       collection and the page follows — no re-paste needed.\n     - Two card types, picked automatically per product. Both say \"Donate\":\n         AMOUNT  every variant is a \"$N Level\" or \"Custom\" -\u003e amount buttons,\n                 a \"Your amount\" field for Custom. Custom is priced at $1,\n                 so $N is added as quantity N (same as the product page).\n         GIFT    named variants (e.g. Toy \/ Treats) -\u003e a button per gift,\n                 live price and a quantity stepper.\n     - The two-sentence description for each product lives in CFG.blurbs,\n       keyed by product handle. A product with no entry still renders, just\n       without the description (and logs a console warning).\n     - CFG.snapshot is a copy of the collection taken when this file was built.\n       It's only used when the live read fails, or off-Shopify for previewing.\n\n     EDIT ONLY THE CONFIG BLOCK MARKED \"★ CONFIG ★\" BELOW.\n     ============================================================ --\u003e\n\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@800;900\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003cdiv id=\"bf-root\" class=\"bf-root\"\u003e\n\n  \u003cheader class=\"bf-banner bf-bleed\"\u003e\n    \u003cp class=\"bf-strip\" id=\"bf-strip\"\u003e\u003c\/p\u003e\n    \u003cdiv class=\"bf-decor\" aria-hidden=\"true\"\u003e\n      \u003csvg class=\"bf-flake bf-flake--1\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-flake bf-flake--2\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-flake bf-flake--3\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--1\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--2\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--3\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--4\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-flake bf-flake--4\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--5\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--6\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-spark bf-spark--7\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003c!-- wide screens only: clusters in the side gutters --\u003e\n      \u003csvg class=\"bf-g bf-flake bf-g1\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-spark bf-g2\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-spark bf-g3\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-flake bf-g4\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-spark bf-g5\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-spark bf-g6\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-flake bf-g7\" viewbox=\"-24 -24 48 48\"\u003e\u003cuse href=\"#bf-flake\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg class=\"bf-g bf-spark bf-g8\" viewbox=\"-10 -10 20 20\"\u003e\u003cuse href=\"#bf-spark\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\n      \u003csvg width=\"0\" height=\"0\" style=\"position:absolute\"\u003e\n        \u003cdefs\u003e\n          \u003clineargradient id=\"bf-gold-g\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\"\u003e\n            \u003cstop offset=\"0\" stop-color=\"#F8DD8A\"\u003e\u003c\/stop\u003e\u003cstop offset=\".35\" stop-color=\"#C8922C\"\u003e\u003c\/stop\u003e\n            \u003cstop offset=\".6\" stop-color=\"#FBE6A6\"\u003e\u003c\/stop\u003e\u003cstop offset=\"1\" stop-color=\"#B07A22\"\u003e\u003c\/stop\u003e\n          \u003c\/lineargradient\u003e\n          \u003cg id=\"bf-flake\" stroke=\"url(#bf-gold-g)\" stroke-width=\"3.6\" stroke-linecap=\"round\" fill=\"none\"\u003e\n            \u003cpath d=\"M0-20V20M-17.3-10L17.3 10M-17.3 10L17.3-10\"\u003e\u003c\/path\u003e\n            \u003cpath d=\"M-5-15L0-10L5-15M-5 15L0 10L5 15M-15.5-3.2L-8.7-5L-10.5-11.8M15.5 3.2L8.7 5L10.5 11.8M-15.5 3.2L-8.7 5L-10.5 11.8M15.5-3.2L8.7-5L10.5-11.8\"\u003e\u003c\/path\u003e\n          \u003c\/g\u003e\n          \u003cpath id=\"bf-spark\" d=\"M0-10C1-3 3-1 10 0C3 1 1 3 0 10C-1 3-3 1-10 0C-3-1-1-3 0-10Z\"\u003e\u003c\/path\u003e\n        \u003c\/defs\u003e\n      \u003c\/svg\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bf-banner-in\"\u003e\n      \u003cdiv class=\"bf-head\"\u003e\n        \u003ch1 class=\"bf-title\" id=\"bf-title\"\u003e\u003c\/h1\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"bf-copy\" id=\"bf-copy\"\u003e\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"bf-rule\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n  \u003c\/header\u003e\n\n  \u003cdiv class=\"bf-wrap\"\u003e\n    \u003cdiv class=\"bf-grid\" id=\"bf-grid\"\u003e\n      \u003cdiv class=\"bf-sk\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"bf-sk\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"bf-sk\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cp class=\"bf-empty\" id=\"bf-empty\" hidden\u003e\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"bf-toast\" id=\"bf-toast\" role=\"status\" aria-live=\"polite\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n\/* collection page: hide the theme's title before the script runs (script does the same) *\/\n.collection-hero:has(#bf-root) .collection-hero__title { display: none !important; }\n.collection-hero__description:has(#bf-root) { margin-top: 0 !important; margin-bottom: 0 !important; }\n\/* collection page: hide the theme's own product grid, since the cards above replace it *\/\nbody:has(#bf-root) .shopify-section[id$=\"__product-grid\"] { display: none !important; }\n\n\/* ---------- scoped reset ---------- *\/\n.bf-root, .bf-root *, .bf-root *::before, .bf-root *::after { box-sizing: border-box; }\n.bf-root :where(h1,h2,h3,p) { margin: 0; }\n.bf-root :where(img) { display: block; max-width: 100%; }\n.bf-root :where(button) { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; text-transform: none; }\n.bf-root :where(a) { text-decoration: none; }\n.bf-root [hidden] { display: none !important; }\n\n.bf-root {\n  \/* Store palette (same as Care-A-Thon \/ $3 Deals \/ Ukraine) for every control;\n     the banner borrows the Black Friday ad's purple panel, gold glitter and sparkles. *\/\n  --bf-purple:      #6D0769;\n  --bf-purple-deep: #4A0447;\n  --bf-purple-dark: #55054F;\n  --bf-panel-1:     #C552CC;\n  --bf-panel-2:     #8B1D98;\n  --bf-panel-3:     #520A63;\n  --bf-red:         #E2253A;\n  --bf-violet:      #A34FD0;\n  --bf-gold:        #D4A333;\n  --bf-ink:   #1A1019;\n  --bf-ink-2: #4A3E48;\n  --bf-ink-3: #6E5F6B;\n  --bf-rule:  rgba(26,16,25,.55);\n  --bf-line:  rgba(26,16,25,.14);\n  --bf-bg-2:  #f3eef2;\n  --bf-ok:    #1f6f5c;\n  --bf-err:   #b3261e;\n  --bf-radius: 8px;\n  --bf-btn-radius: 5px;\n  --bf-max: 1180px;\n  --bf-display: Montserrat, \"Arial Black\", Assistant, -apple-system, sans-serif;\n\n  font-family: Assistant, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  font-size: 16.9px;\n  color: var(--bf-ink);\n  background: transparent;\n  text-align: left;\n  -webkit-font-smoothing: antialiased;\n}\n.bf-bleed { width: 100vw; margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw); }\n.bf-wrap  { max-width: var(--bf-max); margin: 0 auto; padding: 22px 16px 40px; }\n\n\/* ---------- banner ---------- *\/\n.bf-banner { position: relative; overflow: hidden; isolation: isolate; background: #fff; }\n\n\/* gold glitter strip (the ad's top bar) — also the bottom rule *\/\n.bf-strip, .bf-rule {\n  position: relative; z-index: 2;\n  background-color: #D9A93C;\n  background-image:\n    url(\"data:image\/svg+xml,\u003csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='90' height='40' viewBox='0 0 90 40'\u003e\u003cg fill='%23FFF6D2'\u003e\u003ccircle cx='6' cy='7' r='1.1' opacity='.9'\/\u003e\u003ccircle cx='27' cy='22' r='.8' opacity='.8'\/\u003e\u003ccircle cx='44' cy='5' r='1.3' opacity='.85'\/\u003e\u003ccircle cx='61' cy='31' r='.9' opacity='.8'\/\u003e\u003ccircle cx='80' cy='14' r='1.2' opacity='.9'\/\u003e\u003ccircle cx='15' cy='34' r='.7' opacity='.7'\/\u003e\u003ccircle cx='70' cy='3' r='.7' opacity='.7'\/\u003e\u003c\/g\u003e\u003cg fill='%23946617'\u003e\u003ccircle cx='18' cy='15' r='1' opacity='.55'\/\u003e\u003ccircle cx='36' cy='33' r='1.1' opacity='.5'\/\u003e\u003ccircle cx='53' cy='18' r='.9' opacity='.55'\/\u003e\u003ccircle cx='86' cy='30' r='1' opacity='.5'\/\u003e\u003ccircle cx='3' cy='24' r='.8' opacity='.5'\/\u003e\u003c\/g\u003e\u003c\/svg\u003e\"),\n    linear-gradient(100deg, #B9862A 0%, #F5D681 18%, #C99530 34%, #FBE3A0 52%, #BB8A2D 70%, #F2CF71 86%, #B9862A 100%);\n}\n.bf-strip { padding: 6px 12px 7px; text-align: center;\n  font-family: var(--bf-display); font-size: 14.5px; font-weight: 800; letter-spacing: .2px; color: var(--bf-ink); }\n.bf-rule { height: 5px; }\n\n\/* decorative snowflakes + sparkles *\/\n.bf-decor { position: absolute; inset: 0; z-index: 0; pointer-events: none; }\n.bf-decor svg { position: absolute; display: block; }\n.bf-flake { filter: drop-shadow(0 1px 1px rgba(120,80,10,.25)); }\n.bf-flake--1 { width: 46px; height: 46px; left: 2%;  top: 44px; }\n.bf-flake--2 { width: 34px; height: 34px; right: 4%; bottom: 12px; }\n.bf-flake--3 { width: 26px; height: 26px; right: 30%; top: 40px; opacity: .8; }\n.bf-spark--1 { width: 16px; height: 16px; left: 12%; bottom: 16px; fill: var(--bf-red); }\n.bf-spark--2 { width: 13px; height: 13px; right: 12%; top: 46px; fill: var(--bf-violet); }\n.bf-spark--3 { width: 11px; height: 11px; left: 3%; top: 100px; fill: var(--bf-violet); }\n.bf-spark--4 { width: 14px; height: 14px; right: 2.5%; top: 50%; fill: var(--bf-red); }\n.bf-flake--4 { width: 28px; height: 28px; left: 4.5%; bottom: 14px; opacity: .9; }\n.bf-spark--5 { width: 12px; height: 12px; left: 6.5%; top: 40px; fill: #E2AE3E; }\n.bf-spark--6 { width: 15px; height: 15px; right: 6.5%; bottom: 38px; fill: var(--bf-violet); }\n.bf-spark--7 { width: 10px; height: 10px; right: 9%; top: 40px; fill: var(--bf-red); }\n.bf-decor .bf-g { display: none; }\n\n.bf-banner-in {\n  position: relative; z-index: 1; max-width: 1040px; margin: 0 auto; padding: 14px 16px 16px;\n  display: grid; gap: 11px; justify-items: center; text-align: center;\n}\n\/* the ad's purple panel with outlined white type *\/\n.bf-head {\n  display: inline-block; padding: 10px 20px 12px; border-radius: 14px;\n  background: linear-gradient(135deg, var(--bf-panel-1) 0%, var(--bf-panel-2) 45%, var(--bf-panel-3) 100%);\n  box-shadow: 4px 5px 0 var(--bf-ink);\n}\n.bf-title {\n  font-family: var(--bf-display); font-weight: 900; text-transform: uppercase;\n  font-size: clamp(30px, 8.8vw, 44px); line-height: .98; letter-spacing: -.3px; color: #fff;\n  -webkit-text-stroke: 5px var(--bf-ink); paint-order: stroke fill;\n  text-shadow: 3px 3px 0 var(--bf-ink);\n}\n.bf-title .bf-line { display: block; white-space: nowrap; }\n#bf-root .bf-title .bf-accent { color: #F9CF5E !important; }\n.bf-copy { max-width: 40em; font-size: 15.2px; font-weight: 500; line-height: 1.45; color: var(--bf-ink); }\n\n@media (min-width: 820px) {\n  .bf-banner-in { grid-template-columns: auto minmax(0, 1fr); align-items: center; justify-items: start;\n    column-gap: 34px; padding: 18px 64px 20px; text-align: left; }\n  .bf-head { padding: 12px 24px 14px; }\n  .bf-title { font-size: clamp(36px, 3.9vw, 48px); }\n  .bf-copy { font-size: 17px; line-height: 1.5; }\n  .bf-flake--1 { width: 54px; height: 54px; left: 1.5%; top: 48px; }\n  .bf-decor .bf-flake--3 { display: none; }\n}\n\/* tablet-ish desktop: the copy runs close to the right edge, so keep right-side decor in the padding *\/\n@media (min-width: 820px) and (max-width: 1099px) {\n  .bf-decor .bf-spark--6, .bf-decor .bf-spark--7 { display: none; }\n  .bf-flake--2 { right: 1.2%; width: 28px; height: 28px; }\n  .bf-spark--4 { right: 1.4%; }\n}\n@media (min-width: 1100px) {\n  .bf-banner-in { max-width: var(--bf-max); padding: 22px 56px 24px; column-gap: 44px; }\n  .bf-head { padding: 14px 30px 16px; }\n  .bf-title { font-size: clamp(46px, 3.9vw, 56px); }\n  .bf-copy { font-size: 17.6px; line-height: 1.5; max-width: none; }\n}\n\/* side gutters exist once the screen is wider than the header (1180px) *\/\n@media (min-width: 1300px) {\n  .bf-decor .bf-g { display: block; }\n  .bf-g1 { width: 46px; height: 46px; left: calc((50% - 590px) * .42); top: 58px; }\n  .bf-g2 { width: 18px; height: 18px; left: calc((50% - 590px) * .16); top: 120px; fill: var(--bf-red); }\n  .bf-g3 { width: 12px; height: 12px; left: calc((50% - 590px) * .74); bottom: 30px; fill: #E2AE3E; }\n  .bf-g4 { width: 34px; height: 34px; right: calc((50% - 590px) * .48); top: 52px; }\n  .bf-g5 { width: 16px; height: 16px; right: calc((50% - 590px) * .2); bottom: 36px; fill: var(--bf-violet); }\n  .bf-g6 { width: 11px; height: 11px; right: calc((50% - 590px) * .78); top: 128px; fill: var(--bf-red); }\n  .bf-g7 { width: 24px; height: 24px; left: calc((50% - 590px) * .1); bottom: 14px; opacity: .85; }\n  .bf-g8 { width: 13px; height: 13px; left: calc((50% - 590px) * .7); top: 44px; fill: var(--bf-violet); }\n  \/* push the in-header pieces out to the gutter edges so they don't crowd the panel *\/\n  .bf-flake--1 { left: calc((50% - 590px) * .12 + 6px); top: auto; bottom: 64px; width: 30px; height: 30px; }\n  .bf-spark--5 { left: calc((50% - 590px) * .9); }\n  .bf-spark--3 { left: calc((50% - 590px) * .55); top: 150px; }\n  .bf-decor .bf-flake--4 { display: none; }\n}\n\n\/* ---------- grid: 1 \/ 2 \/ 3 up ---------- *\/\n.bf-grid { display: grid; gap: 14px; grid-template-columns: 1fr; }\n@media (min-width: 560px) { .bf-grid { grid-template-columns: repeat(2, 1fr); gap: 16px; } }\n@media (min-width: 940px) { .bf-grid { grid-template-columns: repeat(3, 1fr); gap: 18px; } }\n\n.bf-sk { height: 560px; border-radius: var(--bf-radius);\n  background: linear-gradient(100deg,#ece6ea 30%,#f7f2f6 50%,#ece6ea 70%); background-size: 220% 100%; animation: bf-sh 1.3s infinite; }\n@keyframes bf-sh { to { background-position: -220% 0; } }\n.bf-empty { padding: 30px 0; text-align: center; color: var(--bf-ink-2); }\n\n\/* ---------- card ---------- *\/\n.bf-card { position: relative; z-index: 0; display: flex; flex-direction: column; overflow: hidden; background: #fff;\n  border: 1px solid var(--bf-line); border-radius: var(--bf-radius); }\n.bf-media { position: relative; display: block; aspect-ratio: 1 \/ 1; background: var(--bf-bg-2); overflow: hidden; }\n.bf-media img { width: 100%; height: 100%; object-fit: cover; transition: opacity .18s; }\n.bf-media img.is-swap { opacity: .35; }\n\n.bf-body { display: flex; flex-direction: column; gap: 9px; flex: 1 1 auto; padding: 13px 14px 15px; }\n.bf-name { font-size: 19.8px; font-weight: 700; line-height: 1.3; letter-spacing: .1px; }\n.bf-name a { color: inherit; }\n.bf-name a:hover { text-decoration: underline; }\n.bf-blurb { font-size: 15.4px; line-height: 1.48; color: var(--bf-ink-2); }\n.bf-more { align-self: flex-start; font-size: 15px; font-weight: 600;\n  text-decoration: underline; text-underline-offset: 2px; text-decoration-thickness: 1px; }\n.bf-more:hover { text-decoration-thickness: 2px; }\n.bf-price { font-size: 23px; font-weight: 800; line-height: 1.1; color: var(--bf-purple); font-variant-numeric: tabular-nums; }\n\n.bf-buy { margin-top: auto; padding-top: 4px; display: flex; flex-direction: column; gap: 10px; }\n.bf-lbl { display: block; margin-bottom: 6px; font-size: 13.4px; font-weight: 700; letter-spacing: .5px; text-transform: uppercase; color: var(--bf-ink-3); }\n.bf-lbl b { font-weight: 600; letter-spacing: .2px; text-transform: none; color: var(--bf-ink); }\n\n.bf-opts { display: flex; flex-wrap: wrap; gap: 6px; }\n.bf-opts--amt { display: grid; grid-template-columns: repeat(4, 1fr); }\n.bf-opt { min-height: 36px; padding: 5px 11px; border: 1px solid var(--bf-rule); border-radius: 7px; background: #fff;\n  color: var(--bf-ink); font-size: 14.2px; font-weight: 500; line-height: 1.3; letter-spacing: .1px;\n  transition: background .12s, border-color .12s, color .12s; }\n.bf-opts--amt .bf-opt { min-height: 40px; padding: 6px 4px; font-size: 15.2px; font-weight: 600; font-variant-numeric: tabular-nums; }\n.bf-opt:hover:not([aria-pressed=\"true\"]):not([disabled]) { border-color: var(--bf-purple); }\n.bf-opt[aria-pressed=\"true\"] { background: var(--bf-purple); border-color: var(--bf-purple); color: #fff; }\n\n.bf-custom { display: flex; align-items: center; gap: 8px; }\n.bf-custom label { font-size: 14.5px; font-weight: 600; color: var(--bf-ink-2); white-space: nowrap; }\n.bf-custom-field { display: flex; align-items: center; flex: 1 1 auto; height: 42px; padding: 0 10px;\n  border: 1px solid var(--bf-rule); border-radius: 7px; background: #fff; }\n.bf-custom-field span { font-weight: 700; color: var(--bf-ink-2); }\n.bf-custom-field input { flex: 1 1 auto; min-width: 0; height: 100%; border: 0; outline: 0; padding: 0 0 0 4px;\n  background: transparent; font: inherit; font-size: 16.5px; font-weight: 600; color: var(--bf-ink);\n  font-variant-numeric: tabular-nums; -moz-appearance: textfield; }\n.bf-custom-field input::-webkit-outer-spin-button, .bf-custom-field input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n.bf-custom-field:focus-within { outline: 2px solid var(--bf-purple); outline-offset: 1px; }\n\n.bf-row { display: flex; gap: 8px; }\n.bf-qty { display: inline-flex; align-items: center; flex: none; height: 46px; border: 1px solid var(--bf-rule); border-radius: var(--bf-btn-radius); background: #fff; }\n.bf-qty button { width: 32px; height: 100%; font-size: 19px; line-height: 1; color: var(--bf-ink); }\n.bf-qty button:disabled { opacity: .3; cursor: default; }\n.bf-qty input { width: 32px; height: 100%; border: 0; padding: 0; text-align: center; background: transparent; color: var(--bf-ink);\n  font: inherit; font-size: 16.5px; font-weight: 600; font-variant-numeric: tabular-nums; -moz-appearance: textfield; }\n.bf-qty input::-webkit-outer-spin-button, .bf-qty input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }\n\n.bf-atc { flex: 1 1 auto; width: 100%; min-height: 46px; border-radius: var(--bf-btn-radius); background: var(--bf-purple); color: #fff;\n  font-size: 17px; font-weight: 700; letter-spacing: .5px; display: flex; align-items: center; justify-content: center;\n  transition: background .14s, transform .06s; }\n.bf-atc:hover:not(:disabled) { background: var(--bf-purple-dark); }\n.bf-atc:active:not(:disabled) { transform: scale(.99); }\n.bf-atc:disabled { background: #e6e1e5; color: var(--bf-ink-3); cursor: not-allowed; }\n.bf-atc.is-busy { pointer-events: none; opacity: .75; }\n.bf-atc.is-done { background: var(--bf-ok); }\n.bf-err { font-size: 14.5px; color: var(--bf-err); }\n\n.bf-toast { position: fixed; left: 50%; bottom: 20px; transform: translate(-50%, 18px); z-index: 9999;\n  max-width: calc(100vw - 32px); padding: 11px 18px; border-radius: var(--bf-btn-radius);\n  background: var(--bf-purple-deep); color: #fff; font-size: 15.4px; text-align: center;\n  opacity: 0; pointer-events: none; transition: opacity .2s, transform .2s; box-shadow: 0 10px 34px -10px rgba(26,16,25,.55); }\n.bf-toast.on { opacity: 1; transform: translate(-50%, 0); }\n\n@media (max-width: 559px) {\n  .bf-strip { font-size: 13px; padding: 5px 10px 6px; }\n  .bf-banner-in { padding: 13px 14px 14px; gap: 10px; }\n  .bf-head { padding: 8px 16px 10px; border-radius: 12px; box-shadow: 3px 4px 0 var(--bf-ink); }\n  .bf-title { -webkit-text-stroke-width: 4px; text-shadow: 2px 2px 0 var(--bf-ink); }\n  .bf-copy { font-size: 15px; line-height: 1.42; }\n  .bf-flake--1 { width: 30px; height: 30px; left: 3%; top: 40px; }\n  .bf-flake--2 { width: 24px; height: 24px; right: 3%; bottom: auto; top: 44px; }\n  .bf-decor .bf-flake--3, .bf-decor .bf-spark--3, .bf-decor .bf-spark--4,\n  .bf-decor .bf-flake--4, .bf-decor .bf-spark--7 { display: none; }\n  .bf-spark--5 { width: 11px; height: 11px; left: 2.5%; top: 118px; }\n  .bf-spark--6 { width: 12px; height: 12px; right: 3%; bottom: auto; top: 124px; }\n  .bf-spark--1 { left: 6%; bottom: auto; top: 88px; }\n  .bf-spark--2 { right: 2.5%; top: 98px; }\n  .bf-wrap { padding-top: 16px; padding-left: 0; padding-right: 0; }\n}\n@media (prefers-reduced-motion: reduce) {\n  .bf-root *, .bf-root *::before { animation: none !important; transition: none !important; }\n}\n\n\/* ---------- last-resort hardening against theme button \/ link \/ heading rules ---------- *\/\n#bf-root .bf-banner .bf-title { color: #fff !important; }\n#bf-root .bf-banner .bf-copy { color: var(--bf-ink) !important; }\n#bf-root .bf-banner .bf-strip { color: var(--bf-ink) !important; }\n#bf-root .bf-name, #bf-root .bf-name a, #bf-root .bf-name a:visited, #bf-root .bf-name a:hover { color: var(--bf-ink); }\n#bf-root a.bf-more, #bf-root a.bf-more:visited, #bf-root a.bf-more:hover { color: var(--bf-purple) !important; }\n#bf-root .bf-price { color: var(--bf-purple); }\n\n#bf-root .bf-opt, #bf-root .bf-opt:hover, #bf-root .bf-opt:focus { color: var(--bf-ink); background: #fff; opacity: 1; width: auto; letter-spacing: .1px; }\n#bf-root .bf-opt[aria-pressed=\"true\"], #bf-root .bf-opt[aria-pressed=\"true\"]:hover, #bf-root .bf-opt[aria-pressed=\"true\"]:focus\n  { color: #fff; background: var(--bf-purple); border-color: var(--bf-purple); }\n\n#bf-root .bf-qty button, #bf-root .bf-qty button:hover, #bf-root .bf-qty button:focus { color: var(--bf-ink); background: transparent; width: 32px; opacity: 1; }\n#bf-root .bf-qty button:disabled { opacity: .3; }\n\n#bf-root .bf-atc, #bf-root .bf-atc:hover, #bf-root .bf-atc:focus, #bf-root .bf-atc:active\n  { color: #fff !important; opacity: 1; text-decoration: none; }\n#bf-root .bf-atc:hover:not(:disabled), #bf-root .bf-atc:focus:not(:disabled) { background: var(--bf-purple-dark) !important; }\n#bf-root .bf-atc.is-busy { opacity: .75 !important; }\n#bf-root .bf-atc.is-done, #bf-root .bf-atc.is-done:hover { background: var(--bf-ok) !important; }\n#bf-root .bf-atc:disabled, #bf-root .bf-atc:disabled:hover { background: #e6e1e5 !important; color: var(--bf-ink-3) !important; }\n\n#bf-root .bf-opt:focus-visible, #bf-root .bf-atc:focus-visible, #bf-root .bf-qty button:focus-visible,\n#bf-root .bf-name a:focus-visible, #bf-root .bf-more:focus-visible, #bf-root .bf-media:focus-visible\n  { outline: 2px solid var(--bf-purple); outline-offset: 2px; }\n#bf-root .bf-atc:focus-visible { outline-color: var(--bf-gold); }\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(function () {\n  \"use strict\";\n\n  var CDN = \"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/\";   \/\/ snapshot image prefix\n\n  \/* =========================================================================\n     ★ CONFIG ★  — the only part you need to edit.\n     ========================================================================= *\/\n  var CFG = {\n    \/\/ The collection this page is built from. Order on the page = the\n    \/\/ collection's own sort order in Shopify admin.\n    collection: \"bfcm-fundraising\",\n\n    banner: {\n      strip:  \"Make Your Holiday Shopping Count\",   \/\/ gold glitter bar (empty = thin gold rule only)\n      title:  \"Black Friday Giving\",\n      accent: \"Giving\",                              \/\/ word(s) at the end of the title shown in gold, on their own line\n      copy:   \"While you’re checking off your list and scooping up deals, here’s one more gift worth adding: a little kindness for someone who needs it. A toy for a shelter pet, a present for a child, or a warm kit for a neighbor in need can make the season brighter, and it’s the best deal you’ll find all weekend.\"\n    },\n\n    \/\/ Two sentences per product, keyed by product handle.\n    blurbs: {\n      \"00015-holiday-toy-treat-drive-bring-joy-to-a-shelter-pet-fundraiser-bb\":\n        \"Shelter pets spend the holidays waiting for families of their own, and a new toy or a bag of tasty treats can make that wait a little brighter. Treats also help shelters with training that boosts adoption chances, while playtime keeps dogs and cats happier and more adoptable.\",\n      \"00014-give-toys-books-joy-to-kids-in-need-fundraiser-bb\":\n        \"For kids in homeless and domestic abuse shelters, families recovering from disasters, and families stretched by the cost of autism care, holiday gifts often have to wait. Your gift sends a toy, book, or educational game, or a whole stocking of surprises, so no child goes without this season.\",\n      \"81474-help-fly-pets-to-freedom-fundraiser-gtgm\":\n        \"Overcrowded shelters are full of adoptable dogs and cats who are at risk simply because there isn’t enough space or enough adopters. Our Flights to Freedom carry these pets to Pacific Northwest shelters with room to spare, and just $10 flies one pet 33 miles closer to a forever home.\",\n      \"operation-turtle-takeoff-fundraiser-gtgm\":\n        \"When ocean temperatures drop too quickly, endangered sea turtles can become cold-stunned, a condition that slows their bodies down and often causes them to drown. Your gift supports the months of rehabilitation and the flights that carry recovering turtles back to warm water.\",\n      \"send-a-good-pack-to-an-american-experiencing-homelessness-fundraiser-gtgm\":\n        \"Most homeless shelters don’t allow animals, so many unhoused Americans with pets face long nights without shelter, warmth, food, or basic hygiene supplies. Your gift sends Emergency Relief Kits to people and pets in need, and helps stock kits for disaster survivors who’ve lost everything.\",\n      \"60485-emergency-animal-care-fund-fundraiser-gtgm\":\n        \"Every day, shelters and rescues take in animals who need emergency surgery or urgent treatment they can’t afford on their own. Your gift helps pets like Flint, who was abandoned and starving, and Lucky, who was shot in the chest, get the care they need to recover.\"\n    },\n\n    \/\/ Removed from the start of product titles on this page only (the products keep their real titles).\n    titleStrip: \/^$\/,\n\n    \/\/ Card image to use instead of the product's featured image, by product handle.\n    imageOverride: {},\n\n    \/\/ Collection pages only: hide the theme's collection title and its own product grid below this block.\n    hideCollectionTitle: true,\n    hideThemeGrid: true,\n\n    \/\/ On load, scroll just far enough for the site's navs to collapse, so the banner\n    \/\/ sits flush under the slim header. Skipped when the URL has a #hash, the browser\n    \/\/ restored a scroll position, or the shopper scrolls.\n    autoScroll: true,\n\n    \/\/ Option names shown above gift buttons. Anything not listed shows as-is.\n    optionLabels: { \"Selection\": \"Choose a gift\" },\n\n    learnMoreText: \"Learn more\",\n    donateText:    \"Donate\",\n    addText:       \"Donate\",          \/\/ gift cards (named variants) use this\n    soldOutText:   \"Sold out\",\n\n    \/\/ Amount cards: which amount is pre-selected (falls back to the first amount).\n    defaultAmount: \"$25 Level\",\n    \/\/ Gift cards: which gift is pre-selected, by product handle (falls back to the first in stock).\n    defaultOption: {\n      \"00015-holiday-toy-treat-drive-bring-joy-to-a-shelter-pet-fundraiser-bb\": \"Toy and Treat\",\n      \"00014-give-toys-books-joy-to-kids-in-need-fundraiser-bb\": \"Stocking Pack\"\n    },\n\n    \/\/ A product is an AMOUNT card when every variant title matches one of these.\n    amountMatch: \/^\\$[\\d,]+(\\.\\d\\d)?( Level)?$\/i,\n    customMatch: \/custom\/i,\n    stripFromLabel: \/ Level$\/i,        \/\/ \"$25 Level\" -\u003e \"$25\"\n    customMin: 1,\n    customMax: 10000,\n    customDefault: 5,                  \/\/ what the field shows each time Custom is clicked\n\n    maxQty:   10,                      \/\/ gift cards\n    afterAdd: \"drawer\",                \/\/ \"drawer\" | \"cart\" | \"toast\"\n\n    \/\/ Copy of the collection at build time (Nov 11, 2026). Fallback only — see header.\n    \/\/ { h:handle, t:title, i:image, o:option name, v:[[variant id, title, price cents, available 1\/0, variant image]] }\n    snapshot: [\n      {h:\"00015-holiday-toy-treat-drive-bring-joy-to-a-shelter-pet-fundraiser-bb\",t:\"8th Annual Holiday Toy \u0026 Treat Event: Bring Joy To a Shelter Pet\",i:\"files\/toys-and-treats-8.jpg\",o:\"Selection\",v:[\n        [31548934422603,\"Toy\",1400,1,\"files\/toys-and-treats-5.jpg\"],\n        [67199632015435,\"Treats\",1400,1,\"files\/toys-and-treats-8.jpg\"],\n        [31548934455371,\"Toy and Treat\",2400,1,\"files\/toys-and-treats-1_02aeef5a-f967-4b7b-96aa-2a413c62a72f.jpg\"],\n        [41818891812939,\"Stuff The Stockings\",5400,1,\"files\/toys-and-treats-6.jpg\"],\n        [41818891845707,\"Presents Under The Tree\",8900,1,\"files\/toys-and-treats-7.jpg\"]]},\n      {h:\"00014-give-toys-books-joy-to-kids-in-need-fundraiser-bb\",t:\"8th Annual Holiday Toy \u0026 Book Event: No Child Should Go Without\",i:\"files\/toys-and-books-9.jpg\",o:\"Selection\",v:[\n        [41844562329675,\"Send 1 Gift\",1500,1,\"files\/toys-and-books-9.jpg\"],\n        [67190797271115,\"Stocking Pack\",3200,1,\"files\/toys-and-books-13.jpg\"],\n        [40392136917067,\"Holiday Hope Pack\",6000,1,\"files\/toys-and-books-1.jpg\"]]},\n      {h:\"81474-help-fly-pets-to-freedom-fundraiser-gtgm\",t:\"Help Fly Pets to Freedom\",i:\"files\/fund_11122026_F2F-November_GEN_PDP_main.jpg\",o:\"Choose Your Donation\",v:[\n        [41556749549643,\"$5 Level\",500,1,\"files\/f2f-gtgm-3.png\"],[44312951754,\"$10 Level\",1000,1,\"files\/flight-to-freedom-cat.png\"],[44312951818,\"$25 Level\",2500,1,\"files\/cfp-dog-gnocchi.png\"],[44312951882,\"$50 Level\",5000,1,\"files\/f2f-gtgm-1.png\"],\n        [44312951946,\"$100 Level\",10000,1,\"files\/cfp-cat-shoelace.png\"],[40101574180939,\"$250 Level\",25000,1,\"files\/f2f-gtgm-5.png\"],[40678520782923,\"$500 Level\",50000,1,\"files\/f2f-gtgm-2.png\"],[40101573754955,\"Custom\",100,1,\"files\/f2f-gtgm-4.png\"]]},\n      {h:\"operation-turtle-takeoff-fundraiser-gtgm\",t:\"Operation Turtle Takeoff: Help Fly Endangered Sea Turtles to Warm Waters\",i:\"files\/turtle-takeoff-3.jpg\",o:\"Selection\",v:[\n        [41860077486155,\"$10 Level\",1000,1,\"files\/turtle-takeoff-3.jpg\"],[41860077518923,\"$25 Level\",2500,1,\"files\/turtle-takeoff-4.jpg\"],[41860077551691,\"$50 Level\",5000,1,\"files\/turtle-takeoff-5.jpg\"],[41860077584459,\"$100 Level\",10000,1,\"files\/turtle-takeoff-6.jpg\"],\n        [41860077617227,\"$250 Level\",25000,1,\"files\/turtle-takeoff-7.jpg\"],[41860077649995,\"$500 Level\",50000,1,\"files\/turtle-takeoff-1.jpg\"],[41860077682763,\"Custom\",100,1,\"files\/turtle-takeoff-2.jpg\"]]},\n      {h:\"send-a-good-pack-to-an-american-experiencing-homelessness-fundraiser-gtgm\",t:\"Send Relief Kits to Homeless Americans and their Pets\",i:\"files\/Good-Packs-for-Americans-GTGM-Dec-2024-5_b14bc2e4-2c22-4efb-9dbe-e5827375bf68.jpg\",o:\"Choose Your Donation\",v:[\n        [41168379740235,\"$10 Level\",1000,1,\"files\/Good-Packs-for-Americans-GTGM-Dec-2024-2_39bd85b4-a2d6-469f-b6fb-d2d1f4c15e5f.jpg\"],[39955488637003,\"$25 Level\",2500,1,\"files\/Good-Packs-for-Americans-GTGM-Dec-2024-5_b14bc2e4-2c22-4efb-9dbe-e5827375bf68.jpg\"],\n        [39955488669771,\"$50 Level\",5000,1,\"files\/MauiGoodPacks1000D_468dffa8-a94d-47c4-892c-d7d5c212d9bf.jpg\"],[39955488735307,\"$100 Level\",10000,1,\"files\/Good-Packs-for-Americans-GTGM-Dec-2024-4_edd6722f-15ca-483e-9e78-f1d102d74636.jpg\"],\n        [41168379773003,\"$250 Level\",25000,1,\"files\/MauiGoodPacks1000A_3def00fa-fbf0-4da5-8543-54cb070c5c48.jpg\"],[67354261323851,\"$500 Level\",50000,1,\"files\/Good-Packs-for-Americans-GTGM-Dec-2024-4_edd6722f-15ca-483e-9e78-f1d102d74636.jpg\"],\n        [39955488768075,\"Custom\",100,1,\"files\/Good-Packs-for-Americans-GTGM-Dec-2024-6_516ae093-f1fa-4791-92df-72f5b466c775.jpg\"]]},\n      {h:\"60485-emergency-animal-care-fund-fundraiser-gtgm\",t:\"Emergency Animal Care Fund\",i:\"files\/EAM-GTGM-6.png\",o:\"Choose Your Donation\",v:[\n        [33670007882,\"$5 Level\",500,1,\"files\/EAM_GTGM-3.png\"],[33670007946,\"$15 Level\",1500,1,\"files\/EAM_GTGM-1.png\"],[33670008010,\"$25 Level\",2500,1,\"files\/EAM-GTGM-5.png\"],[33670008074,\"$60 Level\",6000,1,\"files\/EAM-GTGM-2.png\"],\n        [33670008138,\"$100 Level\",10000,1,\"files\/EAM_GTGM-3.png\"],[40106746183755,\"$250 Level\",25000,1,\"files\/EAM_GTGM-1.png\"],[40106746347595,\"$500 Level\",50000,1,\"files\/EAM-GTGM-5.png\"],[13587125665867,\"Custom\",100,1,\"files\/EAM_GTGM-1.png\"]]}\n    ]\n  };\n  \/* ================= END CONFIG — no need to edit past here ================= *\/\n\n  var root = document.getElementById(\"bf-root\");\n  if (!root || root.dataset.bfInit) return;\n  root.dataset.bfInit = \"1\";\n\n  var onShopify = !!window.Shopify;\n  var ROOT_URL = (onShopify \u0026\u0026 window.Shopify.routes \u0026\u0026 window.Shopify.routes.root) ? window.Shopify.routes.root : \"\/\";\n  var BASE = ROOT_URL.replace(\/\\\/$\/, \"\");\n\n  \/* ---------- helpers ---------- *\/\n  function esc(s) { return String(s == null ? \"\" : s).replace(\/[\u0026\u003c\u003e\"]\/g, function (c) { return { \"\u0026\": \"\u0026amp;\", \"\u003c\": \"\u0026lt;\", \"\u003e\": \"\u0026gt;\", '\"': \"\u0026quot;\" }[c]; }); }\n  var decoder = document.createElement(\"textarea\");\n  function decode(s) { decoder.innerHTML = String(s == null ? \"\" : s); return decoder.value; }\n  function abs(url) { return (url \u0026\u0026 url.slice(0, 2) === \"\/\/\") ? \"https:\" + url : url; }\n  function sized(url, w) { url = abs(url); return url ? url + (url.indexOf(\"?\") \u003e -1 ? \"\u0026\" : \"?\") + \"width=\" + w : \"\"; }\n  function srcset(url) { return [320, 420, 560, 760].map(function (w) { return sized(url, w) + \" \" + w + \"w\"; }).join(\", \"); }\n  var SIZES = \"(min-width:1000px) 360px, (min-width:620px) 46vw, 92vw\";\n  function cents(x) { if (x == null || x === \"\") return 0; return typeof x === \"number\" ? x : Math.round(parseFloat(x) * 100); }\n  function money(c) {\n    var cur = (window.Shopify \u0026\u0026 window.Shopify.currency \u0026\u0026 window.Shopify.currency.active) || \"USD\";\n    try { return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: cur, minimumFractionDigits: c % 100 ? 2 : 0, maximumFractionDigits: c % 100 ? 2 : 0 }).format(c \/ 100); }\n    catch (e) { return \"$\" + (c \/ 100).toFixed(c % 100 ? 2 : 0); }\n  }\n  function isCustom(v) { return CFG.customMatch.test(v.title || \"\"); }\n  function isAmount(v) { return CFG.amountMatch.test(String(v.title || \"\").trim()) || isCustom(v); }\n  function amtLabel(v) { return String(v.title || \"\").replace(CFG.stripFromLabel, \"\").trim() || money(v.price); }\n\n  function normalise(p) {\n    if (p.h) {\n      return { handle: p.h, title: p.t, image: CDN + p.i, optName: p.o,\n        variants: p.v.map(function (r) { return { id: r[0], title: r[1], price: r[2], available: !!r[3], image: r[4] ? CDN + r[4] : \"\" }; }) };\n    }\n    var img = (p.images \u0026\u0026 p.images[0] \u0026\u0026 (p.images[0].src || p.images[0])) || p.image || \"\";\n    var o = p.options \u0026\u0026 p.options[0];\n    return {\n      handle: p.handle, title: p.title, image: abs(img),\n      optName: (o \u0026\u0026 (o.name || o)) || \"\",\n      variants: (p.variants || []).map(function (v) {\n        return { id: v.id, title: v.title, price: cents(v.price), available: v.available !== false,\n          image: abs(v.featured_image \u0026\u0026 v.featured_image.src) || \"\" };\n      })\n    };\n  }\n\n  \/* ---------- collection page: hide the theme's title, drop the description margins ---------- *\/\n  var hero = root.closest(\".collection-hero\");\n  if (hero \u0026\u0026 CFG.hideCollectionTitle) {\n    var ht = hero.querySelector(\".collection-hero__title\"); if (ht) ht.style.display = \"none\";\n    var hd = root.closest(\".collection-hero__description\"); if (hd) { hd.style.marginTop = \"0\"; hd.style.marginBottom = \"0\"; }\n  }\n  if (hero \u0026\u0026 CFG.hideThemeGrid) {\n    var grids = document.querySelectorAll('.shopify-section[id$=\"__product-grid\"]');\n    for (var g = 0; g \u003c grids.length; g++) grids[g].style.setProperty(\"display\", \"none\", \"important\");\n  }\n\n  \/* ---------- banner ---------- *\/\n  (function () {\n    var strip = document.getElementById(\"bf-strip\");\n    if (CFG.banner.strip) strip.textContent = CFG.banner.strip; else { strip.textContent = \"\"; strip.style.padding = \"0\"; strip.style.height = \"5px\"; }\n    var t = document.getElementById(\"bf-title\"), title = CFG.banner.title || \"\", acc = CFG.banner.accent || \"\";\n    if (acc \u0026\u0026 title.slice(-acc.length).toLowerCase() === acc.toLowerCase()) {\n      var lead = title.slice(0, title.length - acc.length).trim();\n      t.innerHTML = (lead ? '\u003cspan class=\"bf-line\"\u003e' + esc(lead) + '\u003c\/span\u003e' : '') +\n        '\u003cspan class=\"bf-line bf-accent\"\u003e' + esc(title.slice(-acc.length)) + '\u003c\/span\u003e';\n      t.setAttribute(\"aria-label\", title);\n    } else { t.textContent = title; }\n    var c = document.getElementById(\"bf-copy\");\n    if (CFG.banner.copy) c.textContent = CFG.banner.copy; else c.remove();\n  })();\n\n  \/* ---------- card ---------- *\/\n  var items = [];\n\n  function buildCard(p, i) {\n    var url = BASE + \"\/products\/\" + p.handle;\n    p.title = decode(p.title).replace(CFG.titleStrip, \"\");\n    if (CFG.imageOverride[p.handle]) p.image = CFG.imageOverride[p.handle];\n    var blurb = CFG.blurbs[p.handle];\n    if (!blurb \u0026\u0026 window.console) console.warn(\"[bfcm-giving] no blurb for \" + p.handle);\n\n    p.opts = p.variants.filter(function (v) { return v.available; });\n    p.donation = p.opts.length \u003e 0 \u0026\u0026 p.opts.every(isAmount);\n    var multi = p.opts.length \u003e 1 || (p.opts[0] \u0026\u0026 !\/^default title$\/i.test(p.opts[0].title));\n    var label = CFG.optionLabels[p.optName] || p.optName || \"Option\";\n    var cid = \"bf-custom-\" + i;\n\n    var el = document.createElement(\"article\");\n    el.className = \"bf-card\" + (p.donation ? \" bf-card--give\" : \" bf-card--gift\");\n    el.dataset.i = i;\n\n    el.innerHTML =\n      '\u003ca class=\"bf-media\" href=\"' + esc(url) + '\" tabindex=\"-1\" aria-hidden=\"true\"\u003e' +\n        (p.image ? '\u003cimg src=\"' + sized(p.image, 560) + '\" srcset=\"' + srcset(p.image) + '\" sizes=\"' + SIZES +\n          '\" alt=\"\" width=\"560\" height=\"560\" decoding=\"async\"' + (i \u003c 3 ? ' fetchpriority=\"high\"' : ' loading=\"lazy\"') + '\u003e' : '') +\n      '\u003c\/a\u003e' +\n      '\u003cdiv class=\"bf-body\"\u003e' +\n        '\u003ch3 class=\"bf-name\"\u003e\u003ca href=\"' + esc(url) + '\"\u003e' + esc(p.title) + '\u003c\/a\u003e\u003c\/h3\u003e' +\n        (blurb ? '\u003cp class=\"bf-blurb\"\u003e' + esc(blurb) + '\u003c\/p\u003e' : '') +\n        '\u003ca class=\"bf-more\" href=\"' + esc(url) + '\"\u003e' + esc(CFG.learnMoreText) +\n          '\u003cspan style=\"position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)\"\u003e about ' + esc(p.title) + '\u003c\/span\u003e\u003c\/a\u003e' +\n        '\u003cdiv class=\"bf-buy\"\u003e' +\n          (p.donation ?\n            '\u003cdiv class=\"bf-opts bf-opts--amt\" role=\"group\" aria-label=\"Donation amount\"\u003e' +\n              p.opts.map(function (v, vi) { return '\u003cbutton type=\"button\" class=\"bf-opt\" aria-pressed=\"false\" data-act=\"opt\" data-v=\"' + vi + '\"\u003e' + esc(amtLabel(v)) + '\u003c\/button\u003e'; }).join(\"\") +\n            '\u003c\/div\u003e' +\n            (p.opts.some(isCustom) ?\n              '\u003cdiv class=\"bf-custom\" hidden\u003e' +\n                '\u003clabel for=\"' + cid + '\"\u003eYour amount\u003c\/label\u003e' +\n                '\u003cdiv class=\"bf-custom-field\"\u003e\u003cspan aria-hidden=\"true\"\u003e$\u003c\/span\u003e' +\n                  '\u003cinput id=\"' + cid + '\" type=\"number\" inputmode=\"numeric\" min=\"' + CFG.customMin + '\" max=\"' + CFG.customMax + '\" step=\"1\" value=\"' + CFG.customDefault + '\" data-custom\u003e' +\n                '\u003c\/div\u003e' +\n              '\u003c\/div\u003e' : '') +\n            '\u003cbutton type=\"button\" class=\"bf-atc\" data-act=\"add\"\u003e' + esc(CFG.donateText) + '\u003c\/button\u003e'\n          :\n            '\u003cp class=\"bf-price\"\u003e\u003c\/p\u003e' +\n            (multi ?\n              '\u003cdiv\u003e\u003cspan class=\"bf-lbl\"\u003e' + esc(label) + ': \u003cb data-cur\u003e\u003c\/b\u003e\u003c\/span\u003e' +\n              '\u003cdiv class=\"bf-opts\" role=\"group\" aria-label=\"' + esc(label) + '\"\u003e' +\n                p.opts.map(function (v, vi) { return '\u003cbutton type=\"button\" class=\"bf-opt\" aria-pressed=\"false\" data-act=\"opt\" data-v=\"' + vi + '\"\u003e' + esc(v.title) + '\u003c\/button\u003e'; }).join(\"\") +\n              '\u003c\/div\u003e\u003c\/div\u003e' : '') +\n            '\u003cdiv class=\"bf-row\"\u003e' +\n              '\u003cdiv class=\"bf-qty\"\u003e' +\n                '\u003cbutton type=\"button\" data-act=\"minus\" aria-label=\"Decrease quantity\"\u003e−\u003c\/button\u003e' +\n                '\u003cinput type=\"number\" inputmode=\"numeric\" min=\"1\" max=\"' + CFG.maxQty + '\" value=\"1\" aria-label=\"Quantity\" data-qty\u003e' +\n                '\u003cbutton type=\"button\" data-act=\"plus\" aria-label=\"Increase quantity\"\u003e+\u003c\/button\u003e' +\n              '\u003c\/div\u003e' +\n              '\u003cbutton type=\"button\" class=\"bf-atc\" data-act=\"add\"\u003e' + esc(CFG.addText) + '\u003c\/button\u003e' +\n            '\u003c\/div\u003e') +\n          '\u003cp class=\"bf-err\" role=\"alert\" hidden\u003e\u003c\/p\u003e' +\n        '\u003c\/div\u003e' +\n      '\u003c\/div\u003e';\n\n    p.el = el;\n    p.q = {\n      img:    el.querySelector(\".bf-media img\"),\n      price:  el.querySelector(\".bf-price\"),\n      opts:   el.querySelectorAll(\".bf-opt\"),\n      cur:    el.querySelector(\"[data-cur]\"),\n      custom: el.querySelector(\".bf-custom\"),\n      input:  el.querySelector(\"[data-custom]\"),\n      qty:    el.querySelector(\"[data-qty]\"),\n      minus:  el.querySelector('[data-act=\"minus\"]'),\n      plus:   el.querySelector('[data-act=\"plus\"]'),\n      btn:    el.querySelector(\".bf-atc\"),\n      err:    el.querySelector(\".bf-err\")\n    };\n    p.shownImg = p.image;\n\n    var want = p.donation ? CFG.defaultAmount : CFG.defaultOption[p.handle];\n    var start = -1;\n    p.opts.forEach(function (v, vi) { if (start \u003c 0 \u0026\u0026 v.title === want) start = vi; });\n    if (start \u003c 0) p.opts.forEach(function (v, vi) { if (start \u003c 0 \u0026\u0026 !isCustom(v)) start = vi; });\n    if (start \u003c 0) start = 0;\n\n    if (!p.opts.length) {\n      p.q.btn.disabled = true;\n      p.q.btn.textContent = CFG.soldOutText;\n    } else {\n      select(p, start, true);\n    }\n    if (p.q.qty) syncQty(p);\n    return el;\n  }\n\n  function select(p, vi, first) {\n    p.sel = vi;\n    var v = p.opts[vi];\n    for (var k = 0; k \u003c p.q.opts.length; k++) p.q.opts[k].setAttribute(\"aria-pressed\", String(k === vi));\n    if (p.q.cur) p.q.cur.textContent = v.title;\n    if (p.q.price) p.q.price.textContent = money(v.price);\n\n    if (p.q.custom) {\n      var showCustom = isCustom(v);\n      if (showCustom \u0026\u0026 p.q.custom.hidden \u0026\u0026 p.q.input) p.q.input.value = CFG.customDefault;\n      p.q.custom.hidden = !showCustom;\n    }\n\n    var want = v.image || p.image;\n    if (!first \u0026\u0026 p.q.img \u0026\u0026 want \u0026\u0026 want !== p.shownImg) {\n      p.shownImg = want;\n      var img = p.q.img;\n      img.classList.add(\"is-swap\");\n      var pre = new Image();\n      pre.onload = pre.onerror = function () { img.srcset = srcset(want); img.src = sized(want, 560); img.classList.remove(\"is-swap\"); };\n      pre.src = sized(want, 560);\n    }\n    setErr(p, \"\");\n    syncLabel(p);\n  }\n\n  function customAmount(p) { var n = parseInt(String(p.q.input ? p.q.input.value : \"\"), 10); return isNaN(n) ? 0 : n; }\n  function syncLabel(p) {\n    var v = p.opts[p.sel]; if (!v) return;\n    if (p.donation) {\n      var amt = isCustom(v) ? customAmount(p) * v.price : v.price;\n      p.q.btn.setAttribute(\"aria-label\", CFG.donateText + (amt \u003e 0 ? \" \" + money(amt) : \"\") + \" to \" + p.title);\n    } else {\n      p.q.btn.setAttribute(\"aria-label\", CFG.addText + \": \" + p.title + \" – \" + v.title);\n    }\n  }\n  function qtyOf(p) { var n = parseInt(p.q.qty.value, 10); return isNaN(n) ? 1 : Math.max(1, Math.min(CFG.maxQty, n)); }\n  function syncQty(p) {\n    var n = qtyOf(p);\n    p.q.qty.value = n;\n    p.q.minus.disabled = n \u003c= 1;\n    p.q.plus.disabled = n \u003e= CFG.maxQty;\n  }\n  function setErr(p, msg) { p.q.err.textContent = msg || \"\"; p.q.err.hidden = !msg; }\n\n  \/* ---------- cart (same approach as Care-A-Thon \/ $3 Deals \/ Ukraine) ---------- *\/\n  function themeDrawer() { return document.querySelector(\"cart-drawer, cart-notification, #CartDrawer, .drawer--cart\"); }\n  function sectionsToRequest() {\n    var el = themeDrawer();\n    if (el \u0026\u0026 typeof el.getSectionsToRender === \"function\") {\n      try { return el.getSectionsToRender().map(function (x) { return x.id; }).filter(Boolean); } catch (e) {}\n    }\n    return [\"cart-drawer\", \"cart-icon-bubble\"];\n  }\n  function renderCart(json) {\n    var el = themeDrawer();\n    if (!json || !json.sections || !el || typeof el.renderContents !== \"function\") return false;\n    try {\n      el.classList.remove(\"is-empty\");\n      var inner = el.querySelector(\".drawer__inner\"); if (inner) inner.classList.remove(\"is-empty\");\n      el.renderContents(json);\n      return true;\n    } catch (e) { return false; }\n  }\n  function notifyTheme() {\n    try { if (typeof window.publish === \"function\") window.publish(\"cart-update\", { source: \"bfcm-giving\" }); } catch (e) {}\n    [\"cart:refresh\", \"cart:updated\"].forEach(function (n) { document.documentElement.dispatchEvent(new CustomEvent(n, { bubbles: true })); });\n  }\n  var toastT;\n  function toast(msg) {\n    var t = document.getElementById(\"bf-toast\");\n    t.textContent = msg; t.classList.add(\"on\");\n    clearTimeout(toastT); toastT = setTimeout(function () { t.classList.remove(\"on\"); }, 2600);\n  }\n\n  function add(p) {\n    var v = p.opts[p.sel];\n    if (!v || !v.available) return;\n    var qty, what;\n    if (p.donation) {\n      qty = 1;\n      if (isCustom(v)) {\n        qty = customAmount(p);\n        if (qty \u003c CFG.customMin || qty \u003e CFG.customMax) {\n          setErr(p, \"Enter a whole-dollar amount from \" + money(CFG.customMin * 100) + \" to \" + money(CFG.customMax * 100) + \".\");\n          if (p.q.input) p.q.input.focus();\n          return;\n        }\n      }\n      what = money(v.price * qty) + \" gift for \" + p.title;\n    } else {\n      qty = qtyOf(p);\n      what = (qty \u003e 1 ? qty + \" × \" : \"\") + v.title + \" – \" + p.title;\n    }\n    var btn = p.q.btn, label = p.donation ? CFG.donateText : CFG.addText;\n    setErr(p, \"\");\n    btn.classList.add(\"is-busy\"); btn.textContent = \"Adding…\";\n\n    function done(ok, json, msg) {\n      btn.classList.remove(\"is-busy\");\n      if (!ok) { btn.textContent = label; setErr(p, msg || \"This couldn't be added to the cart. Try again.\"); return; }\n      btn.classList.add(\"is-done\"); btn.textContent = \"Added to cart\";\n      setTimeout(function () { btn.classList.remove(\"is-done\"); btn.textContent = label; }, 1800);\n\n      if (CFG.afterAdd === \"cart\") { window.location.href = BASE + \"\/cart\"; return; }\n      var opened = CFG.afterAdd === \"drawer\" \u0026\u0026 renderCart(json);\n      notifyTheme();\n      if (!opened) {\n        if (CFG.afterAdd === \"drawer\" \u0026\u0026 !themeDrawer() \u0026\u0026 onShopify) { window.location.href = BASE + \"\/cart\"; return; }\n        toast(msg || (what + \" added to cart\"));\n      }\n    }\n\n    if (!onShopify) { setTimeout(function () { done(true, null, \"Preview only: \" + what + \" added\"); }, 400); return; }\n\n    var body = { items: [{ id: Number(v.id), quantity: qty }], sections: sectionsToRequest(), sections_url: window.location.pathname };\n    fetch(BASE + \"\/cart\/add.js\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application\/json\", Accept: \"application\/json\" },\n      body: JSON.stringify(body)\n    })\n      .then(function (r) { return r.json().then(function (j) { return { ok: r.ok, j: j }; }); })\n      .then(function (res) {\n        if (res.ok) done(true, res.j);\n        else done(false, null, (res.j \u0026\u0026 (res.j.description || res.j.message)) || \"This couldn't be added to the cart.\");\n      })\n      .catch(function () { done(false); });\n  }\n\n  \/* ---------- one delegated listener for every card ---------- *\/\n  function itemFor(el) { var card = el.closest(\".bf-card\"); return card ? items[+card.dataset.i] : null; }\n  root.addEventListener(\"click\", function (e) {\n    var b = e.target.closest(\"[data-act]\"); if (!b) return;\n    var p = itemFor(b); if (!p) return;\n    var act = b.dataset.act;\n    if (act === \"opt\") {\n      select(p, +b.dataset.v);\n      if (p.q.custom \u0026\u0026 !p.q.custom.hidden \u0026\u0026 p.q.input) p.q.input.focus();\n    } else if (act === \"minus\" || act === \"plus\") {\n      p.q.qty.value = qtyOf(p) + (act === \"plus\" ? 1 : -1);\n      syncQty(p);\n    } else if (act === \"add\") {\n      try { add(p); }\n      catch (err) {\n        p.q.btn.classList.remove(\"is-busy\"); p.q.btn.textContent = p.donation ? CFG.donateText : CFG.addText;\n        setErr(p, \"This couldn't be added to the cart. Try again.\");\n        if (window.console) console.error(\"[bfcm-giving] add failed\", err);\n      }\n    }\n  });\n  root.addEventListener(\"input\", function (e) {\n    if (!e.target.matches(\"[data-custom]\")) return;\n    var p = itemFor(e.target); if (p) { setErr(p, \"\"); syncLabel(p); }\n  });\n  root.addEventListener(\"change\", function (e) {\n    if (!e.target.matches(\"[data-qty]\")) return;\n    var p = itemFor(e.target); if (p) syncQty(p);\n  });\n  root.addEventListener(\"keydown\", function (e) {\n    if (e.key !== \"Enter\" || !e.target.matches(\"[data-custom]\")) return;\n    e.preventDefault();\n    var p = itemFor(e.target); if (p) add(p);\n  });\n\n  \/* ---------- start scrolled past the store's collapsible navs (same as the Ukraine page) ---------- *\/\n  var scrolled = false, userActed = false, target = -1;\n  if (CFG.autoScroll !== false \u0026\u0026 onShopify \u0026\u0026 !location.hash \u0026\u0026 \"scrollRestoration\" in history) {\n    try { history.scrollRestoration = \"manual\"; } catch (e) {}\n  }\n  [\"wheel\", \"touchstart\", \"keydown\", \"mousedown\"].forEach(function (ev) {\n    window.addEventListener(ev, function () { userActed = true; }, { passive: true, capture: true });\n  });\n  function headerEl() { return document.querySelector('.shopify-section[id$=\"__header\"]') || document.querySelector(\"sticky-header\") || document.querySelector(\"header\"); }\n  function autoScroll() {\n    var hd, h0, n = 0, last = -1, prev = -1, gap;\n    if (scrolled || userActed || CFG.autoScroll === false || !onShopify || location.hash || window.scrollY \u003e 2) return;\n    scrolled = true;\n    hd = headerEl(); if (!hd) return;\n    h0 = Math.round(hd.getBoundingClientRect().height);\n    function step() {\n      var r = hd.getBoundingClientRect(), hh = Math.round(r.height);\n      if (userActed) return;\n      if (last \u003e= 0 \u0026\u0026 Math.abs(window.scrollY - last) \u003e 2) { scrolled = false; setTimeout(autoScroll, 300); return; }\n      if (hh \u003e= h0 - 2) {\n        if (++n \u003e 30) return;\n        window.scrollTo(0, Math.min(window.scrollY + 12, 240)); last = window.scrollY;\n        setTimeout(step, window.scrollY \u003e= 240 ? 400 : 110); return;\n      }\n      if (hh !== prev) { prev = hh; setTimeout(step, 120); return; }\n      align();\n      setTimeout(align, 450); setTimeout(align, 1100);\n    }\n    function align() {\n      if (userActed) return;\n      var hb = Math.max(0, Math.round(hd.getBoundingClientRect().bottom));\n      var anchor = root.querySelector(\".bf-banner\") || root;\n      gap = Math.round(anchor.getBoundingClientRect().top - hb);\n      if (gap \u003e 0) window.scrollTo(0, window.scrollY + gap);\n      else if (gap \u003c 0) root.style.paddingTop = ((parseFloat(root.style.paddingTop) || 0) - gap) + \"px\";\n      last = target = window.scrollY;\n    }\n    step();\n  }\n  var prevY = 0;\n  window.addEventListener(\"scroll\", function () {\n    var y = window.scrollY, pad = parseFloat(root.style.paddingTop) || 0;\n    if (userActed \u0026\u0026 pad \u003e 0 \u0026\u0026 y \u003c prevY) {\n      root.style.paddingTop = \"\";\n      window.scrollTo(0, Math.max(0, y - pad));\n      y = window.scrollY;\n    }\n    prevY = y;\n  }, { passive: true });\n  function guard() {\n    var until = Date.now() + 6000;\n    (function check() {\n      if (userActed || Date.now() \u003e until) return;\n      if (target \u003e 0 \u0026\u0026 window.scrollY \u003c 3) { scrolled = false; target = -1; autoScroll(); }\n      setTimeout(check, 250);\n    })();\n  }\n  function afterRender() { setTimeout(autoScroll, 400); guard(); }\n\n  \/* ---------- load: live collection first, snapshot as fallback ---------- *\/\n  function render(list) {\n    items = list.map(normalise).filter(function (p) { return p.variants.some(function (v) { return v.available; }); });\n    var grid = document.getElementById(\"bf-grid\");\n    grid.innerHTML = \"\";\n    var frag = document.createDocumentFragment();\n    items.forEach(function (p, i) { frag.appendChild(buildCard(p, i)); });\n    grid.appendChild(frag);\n    if (!items.length) {\n      var empty = document.getElementById(\"bf-empty\");\n      empty.textContent = \"Nothing is listed in this campaign right now. Check back soon.\";\n      empty.hidden = false;\n    }\n  }\n\n  function loadLive() {\n    var all = [];\n    function page(n) {\n      return fetch(BASE + \"\/collections\/\" + encodeURIComponent(CFG.collection) + \"\/products.json?limit=250\u0026page=\" + n, { headers: { Accept: \"application\/json\" } })\n        .then(function (r) { if (!r.ok) throw new Error(\"HTTP \" + r.status); return r.json(); })\n        .then(function (j) {\n          var got = (j \u0026\u0026 j.products) || [];\n          all = all.concat(got);\n          return got.length === 250 \u0026\u0026 n \u003c 4 ? page(n + 1) : all;\n        });\n    }\n    return page(1);\n  }\n\n  if (onShopify) {\n    loadLive()\n      .then(function (list) { if (!list.length) throw new Error(\"collection returned no products\"); render(list); afterRender(); })\n      .catch(function (err) {\n        if (window.console) console.warn(\"[bfcm-giving] live collection read failed, using snapshot:\", err);\n        render(CFG.snapshot); afterRender();\n      });\n  } else {\n    render(CFG.snapshot);\n  }\n})();\n\u003c\/script\u003e\n","products":[{"product_id":"60485-emergency-animal-care-fund-fundraiser-gtgm","title":"Emergency Animal Care Fund","description":"\u003ch3 style=\"text-align: center;\"\u003eHelp provide emergency medical care to pets in need...\u003c\/h3\u003e\n\u003cp style=\"text-align: center;\"\u003e\u003cmeta charset=\"utf-8\"\u003eShelters and rescues across the country deal daily with animals who need emergency surgeries, treatments, or other urgent care. \u003cstrong\u003eWith your help, we can ensure that more animals who are suffering receive the treatment they need.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"margin: 10px 10px 10px 10px; float: left;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/GTGM-product-flint_3b3770fb-6b8f-4bbc-b59b-cbf93b043e36_240x240.png?v=1720630426\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMeet Flint\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eFlint was abandoned in the driveway of a shelter, matted and emaciated. This poor boy weighed in at less than half the average size for his breed.\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eHe needs surgery to remove a foreign body in his stomach, plus medication to treat a fungal infection on his skin. Then Flint will have a longer journey to reaching a healthy weight and happier state of mind. Help Flint heal.\u003c\/span\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/luckygtgm3_fd8cfaae-8ca0-49e4-97ae-1b2a61736527_240x240.jpg?v=1719846276\" alt=\"\" style=\"margin: 10px 10px 10px 10px; float: right;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMeet Lucky\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003ePoor six-year-old Lucky was rescued from death's door after becoming the victim in a violent altercation between two people. He had been shot in the chest and abdomen.\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eYou can help Lucky live up to his name. With proper treatment and surgery, he'll be lucky enough to make a full recovery, but he still needs your support.\u003c\/span\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg style=\"margin: 10px 10px 10px 10px; float: left;\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/GTGM-product-noel2_240x240.png?v=1722035639\"\u003e\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003eMeet Noel\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eThe sweet feline was found emaciated and near death in front of a coffee shop. She was brought back to a local cat rescue to be examined. The team discovered that Noel was suffering from painful mouth ulcers and many necrotic teeth.\u003c\/p\u003e\n\u003cp\u003eHer temperature was so low when she arrived that it didn't even register on the thermometer. She is resilient and already improving. Help her get the treatment she need. \u003cspan style=\"font-family: Assistant; color: black; mso-color-alt: windowtext; letter-spacing: .45pt;\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003chr\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong\u003eWill you help them recover? \u003c\/strong\u003e\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eWith the help of Greater Good Charities' Animal Medical Care Fund, these animals will get the urgent care they need as well as medication and ongoing treatments. But we can't do it without your support. \u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cstrong\u003eDonate now\u003c\/strong\u003e to help relieve the pain of these animals and help them start their journey to recovery.\u003c\/p\u003e","brand":"GGO","offers":[{"title":"$5 Level","offer_id":33670007882,"sku":"GTGM0450","price":5.0,"currency_code":"USD","in_stock":true},{"title":"$15 Level","offer_id":33670007946,"sku":"GTGM0451","price":15.0,"currency_code":"USD","in_stock":true},{"title":"$25 Level","offer_id":33670008010,"sku":"GTGM0452","price":25.0,"currency_code":"USD","in_stock":true},{"title":"$60 Level","offer_id":33670008074,"sku":"GTGM0453","price":60.0,"currency_code":"USD","in_stock":true},{"title":"$100 Level","offer_id":33670008138,"sku":"GTGM0454","price":100.0,"currency_code":"USD","in_stock":true},{"title":"$250 Level","offer_id":40106746183755,"sku":"GTGM0614","price":250.0,"currency_code":"USD","in_stock":true},{"title":"$500 Level","offer_id":40106746347595,"sku":"GTGM0615","price":500.0,"currency_code":"USD","in_stock":true},{"title":"Custom","offer_id":13587125665867,"sku":"GTGM0455","price":1.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/EAM-GTGM-6.png?v=1736172939"},{"product_id":"81474-help-fly-pets-to-freedom-fundraiser-gtgm","title":"Help Fly Pets to Freedom","description":"\u003ch2 style=\"text-align: center;\" class=\"p1\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e \u003cspan\u003eShelters are Overcrowded- Help Save Animals. \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003cp class=\"p1\"\u003e\u003cspan class=\"s1\"\u003eAnimal shelters are overflowing with homeless dogs and cats as new ones arrive weekly. Between kitten and puppy season ramping up and financial uncertainty driving increased owner surrenders, shelters can't keep up. Highly adoptable animals are at risk of euthanasia due to lack of space and adopters.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cspan class=\"s1\"\u003eThat's why we sponsor a flight each month, with your support, to save lives. Fuel prices are soaring which means we need more donations to conduct these lifesaving flights. $10 helps fly one pet 33 miles now, and there are so many cats and dogs waiting for a one-way ticket to freedom. \u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cspan class=\"s1\"\u003e\u003cstrong\u003e\u003cspan style=\"color: rgb(164, 52, 234);\"\u003eHelp \u003c\/span\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003cstrong\u003e\u003cspan style=\"color: rgb(164, 52, 234);\"\u003e\u003cspan class=\"s2\"\u003efly dozens of shelter dogs and cats\u003c\/span\u003e\u003cspan class=\"s1\"\u003e to freedom on our next Flight to Freedom.\u003c\/span\u003e\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003eWith your support, shelter animals will leave overcrowded shelters on November 18th and head to shelters in the Pacific Northwest to find forever homes. \u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cstrong\u003e\u003cspan style=\"color: rgb(164, 52, 234);\"\u003e\u003cspan class=\"s1\"\u003eHelp save shelter pets by flying them to freedom! \u003c\/span\u003e\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cspan class=\"s1\"\u003eThe animals on this flight are at-risk pets; \u003c\/span\u003e\u003cspan class=\"s3\"\u003e\u003cstrong\u003ewithout the flight, they might never find their loving homes\u003c\/strong\u003e \u003c\/span\u003e\u003cspan class=\"s1\"\u003edue to the overcrowding that often happens in shelters. Sending these pets from under-resourced shelters to shelters with empty spaces will give them a second chance at life AND the adoption they deserve.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"p2\"\u003e\u003cstrong\u003e\u003cspan style=\"color: rgb(164, 52, 234);\" class=\"s1\"\u003eDonate now to save lives!\u003c\/span\u003e\u003c\/strong\u003e\u003cstrong\u003e\u003cspan lang=\"EN-US\"\u003e\u003c\/span\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMeet some of the pet passengers on last month's flight below!\u003c\/strong\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003chr style=\"margin: 5px;\"\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/20261006_Transport_LA-WI_Batman_001_JPAWS_240x240.jpg?v=1790794521\" alt=\"\" style=\"margin: 10px 10px 10px 10px; float: left;\"\u003e\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eMeet Batman!\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eBatman is an opinionated black cat who arrived at the shelter missing his tail. The one-year-old feline is mysterious, courageous, and unforgettable - making him a superhero. \u003c\/span\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eThis vocal, playful, attention demanding boy is looking for his special someone. \u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003eHelp fly him to freedom! \u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003chr style=\"margin: 5px;\"\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/20261006_Transport_LA-WI_HattieMae_002_IbervilleParishAnimalShelter_240x240.jpg?v=1790794661\" alt=\"\" style=\"margin: 10px 10px 10px 10px; float: right;\"\u003e\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cstrong\u003eMeet Hattie Mae!\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003cspan\u003eThis gentle, sweet 2.5-year-old Shepherd mix has been quietly and steadily learning to trust humans. She arrived a little shy, a little uncertain — but every single day she has opened up a little more, trusted a little deeper, and shown the world more of the extraordinary girl she truly is. \u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cp class=\"p1\"\u003e \u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cspan class=\"s1\"\u003e\u003cstrong\u003eHelp fly her to freedom!\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cbr\u003e\n\u003c\/div\u003e\n\u003chr style=\"margin: 5px;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/20261006_Transport_LA-WI_Tigger_001_SaveAPetRescueAdoptionAndTransport_240x240.jpg?v=1790795065\" alt=\"\" style=\"margin: 10px 10px 10px 10px; float: left;\"\u003e\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003eMeet Tigger!\u003c\/strong\u003e\u003cmeta charset=\"utf-8\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003eThis sweet, social 1.5-year-old hound mix approaches life with the kind of easy, happy energy that makes everyone around him feel instantly at ease. This boy is genuinely wonderful — gentle with other dogs, loving with his people, and absolutely living for every single adventure the day brings. Tigger looks forward to pack walk time the way most of us look forward to the very best parts of our day. It is his moment. His joy. His absolute happy place. \u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003eHelp fly them all to freedom!\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003chr style=\"margin: 5px;\"\u003e\n\u003cp\u003e\u003cb\u003eEvery month we fly a group of deserving pets. Help us fund the next Flight to Freedom now! Just $10, helps cover the fuel costs of flying a pet 33 miles towards safety. \u003c\/b\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003chr style=\"margin: 5px;\"\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003cem\u003eIn shelters across the country, highly adoptable dogs and cats are euthanized just because the shelters are overcrowded. In other areas, shelters have a shortage of adoptable pets. We're transporting these pets to shelters where they're immediately adopted.\u003c\/em\u003e\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003cem\u003e\u003cmeta charset=\"utf-8\"\u003eThis month's flight will transport at-risk dogs and cats to safety! \u003c\/em\u003e\u003c\/p\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003cem\u003e\u003cmeta charset=\"utf-8\"\u003e \u003cspan\u003e*Due to many factors including pets being adopted prior to a flight, receiving shelter capacity, and pet health, the final number of pets on a flight may be different from totals quoted above.\u003c\/span\u003e\u003c\/em\u003e\u003c\/p\u003e\n\u003cp style=\"text-align: center;\"\u003e\u003cem\u003e\u003cspan\u003e\u003ciframe title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/53Ngu19hz_I?si=gTOL8dPw_mXXHAjg\" height=\"315\" width=\"560\"\u003e\u003c\/iframe\u003e\u003c\/span\u003e\u003c\/em\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003e\u003cspan\u003eIMPORTANT SAFETY INFORMATION:\u003c\/span\u003e\u003c\/b\u003e\u003cspan\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003ci\u003e\u003cspan\u003eNexGard \u003c\/span\u003e\u003c\/i\u003e\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003ePLUS (afoxolaner, moxidectin, and pyrantel chewable tablets) is safe for puppies at 8 weeks, weighing 4 pounds or more. The most frequently reported adverse reactions include diarrhea, vomiting, lethargy, and itching. Use with caution in dogs with a history of seizures or neurologic disorders. Dogs should be tested for existing heartworm infection prior to starting a preventive. For more information, \u003ca title=\"https:\/\/docs.boehringer-ingelheim.com\/AH\/NexGard_PLUS_PI.pdf\" href=\"https:\/\/docs.boehringer-ingelheim.com\/AH\/NexGard_PLUS_PI.pdf\"\u003e\u003cspan class=\"s1\"\u003eclick here \u003c\/span\u003e\u003c\/a\u003efor full prescribing information.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003e\u003cspan\u003eIMPORTANT SAFETY INFORMATION:\u003c\/span\u003e\u003c\/b\u003e\u003cspan\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"p1\"\u003e\u003cspan\u003eFollowing the use of HEARTGARD \u003c\/span\u003e\u003cspan\u003ePlus (ivermectin\/pyrantel) in dogs, digestive and neurologic side effects and itching have been reported. Safe for puppies 6 weeks of age or older with no weight restrictions. All dogs should be tested for heartworm infection before starting a preventive program. For more information, \u003ca title=\"https:\/\/docs.boehringer-ingelheim.com\/AH\/HEARTGARD_Plus_PI.pdf\" href=\"https:\/\/docs.boehringer-ingelheim.com\/AH\/HEARTGARD_Plus_PI.pdf\"\u003e\u003cspan class=\"s1\"\u003eclick here for full prescribing information\u003c\/span\u003e\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e","brand":"GGO","offers":[{"title":"$5 Level","offer_id":41556749549643,"sku":"GTGM0415","price":5.0,"currency_code":"USD","in_stock":true},{"title":"$10 Level","offer_id":44312951754,"sku":"GTGM0416","price":10.0,"currency_code":"USD","in_stock":true},{"title":"$25 Level","offer_id":44312951818,"sku":"GTGM0417","price":25.0,"currency_code":"USD","in_stock":true},{"title":"$50 Level","offer_id":44312951882,"sku":"GTGM0418","price":50.0,"currency_code":"USD","in_stock":true},{"title":"$100 Level","offer_id":44312951946,"sku":"GTGM0419","price":100.0,"currency_code":"USD","in_stock":true},{"title":"$250 Level","offer_id":40101574180939,"sku":"GTGM0613","price":250.0,"currency_code":"USD","in_stock":true},{"title":"$500 Level","offer_id":40678520782923,"sku":"GTGM1191","price":500.0,"currency_code":"USD","in_stock":true},{"title":"Custom","offer_id":40101573754955,"sku":"GTGM0612","price":1.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/fund_11122026_F2F-November_GEN_PDP_main.jpg?v=1794419388"},{"product_id":"00014-give-toys-books-joy-to-kids-in-need-fundraiser-bb","title":"8th Annual Holiday Toy \u0026 Book Event: No Child Should Go Without","description":"\u003ch3\u003eEvery child deserves a happy holiday. One gift can change everything.\u003c\/h3\u003e\n\u003cp\u003eFor all children, the holidays should be a joyous time full of laughter, lights, cocoa, and fun toys, games and books. Yet, for many children, this time of year will be a much different experience... \u003cspan style=\"background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);\"\u003e\u003cstrong\u003eunless we can make a difference!\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003eFamilies experiencing crisis in homeless or domestic abuse shelters \u003cstrong\u003emay have to forgo gifts to focus on day-to-day survival\u003c\/strong\u003e. Families with children on the autism spectrum may be forced to prioritize the cost of therapy and care. Families who’ve lost everything in a recent disaster, or lost income stability may find presents financially unattainable as they struggle to restore their lives to normal.\u003c\/p\u003e\n\u003cdiv style=\"float: right; margin: 10px; width: 55%; max-width: 225px;\"\u003e\n\u003cimg alt=\"GreaterGood team ships Emergency Kits\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/BoysGirlClub_VER3_2000x2000_95d79d9c-24de-442e-9ad8-55023afdcb7a_480x480.jpg?v=1634840816\" style=\"width: 100%;\"\u003e\u003cem\u003eWyatt enjoying a craft project that he was gifted.\u003c\/em\u003e\n\u003c\/div\u003e\n\u003cp\u003eJoin us in sending toys, games, and books to give these kids a joyful holiday. \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cspan style=\"color: #0c6523;\"\u003eHelp make the holidays brighter this year!\u003c\/span\u003e Contribution options include:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan style=\"color: #95130a;\"\u003e \u003cstrong\u003eSend 1 Gift: \u003c\/strong\u003e\u003c\/span\u003e\u003cspan style=\"color: rgb(0, 0, 0);\"\u003efor a boy or a girl. Depending on what is needed a book, toy or educational game may be sent. Clothing, footwear or jewelry for older children in need may be sent as well. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan style=\"color: #95130a;\"\u003e\u003cstrong\u003eStocking Pack:\u003c\/strong\u003e\u003c\/span\u003e t\u003cstrong\u003e\u003c\/strong\u003ehis gift provides 1 larger toy and 3 smaller toys that are perfect stocking stuffers!\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan style=\"color: #94140a;\"\u003e \u003cstrong\u003eHoliday Hope Pack:\u003c\/strong\u003e\u003c\/span\u003e send 3 large toys, a book and a backpack for a child or several children; perfect for changing lives in a way these kids will never forget!\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3\u003eStories:\u003c\/h3\u003e\n\u003cp data-end=\"358\" data-start=\"92\"\u003eThe Acadiana Outreach Center came together in a beautiful act to wrap and pack toys, books, games, backpacks, and many other gifts. For parents who were struggling, these gifts meant more than a moment of relief—they were a reminder that their community hadn’t forgotten them. And for the children who received them, they sparked joy, excitement, and the kind of holiday magic every child deserves.\u003c\/p\u003e\n\u003cp data-end=\"905\" data-start=\"692\"\u003eIn the image, you can see the devoted volunteers —working tirelessly, smiles on their faces, preparing each gift with love and the hope of bringing comfort to families who needed it most.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" height=\"211\" width=\"211\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/VS-Photograph_20211216_GPK_TOC_ToysforCUSA_002__GGC_1.jpg?v=1764014889\"\u003e\u003c\/span\u003e\u003c\/p\u003e","brand":"CUSA","offers":[{"title":"Send 1 Gift","offer_id":41844562329675,"sku":"350631","price":15.0,"currency_code":"USD","in_stock":true},{"title":"Stocking Pack","offer_id":67190797271115,"sku":"BB-KIDXMAS-STOCKING","price":32.0,"currency_code":"USD","in_stock":true},{"title":"Holiday Hope Pack","offer_id":40392136917067,"sku":"BB-KIDXMAS-BUNDLE","price":60.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/toys-and-books-9.jpg?v=1764103577"},{"product_id":"00015-holiday-toy-treat-drive-bring-joy-to-a-shelter-pet-fundraiser-bb","title":"8th Annual Holiday Toy \u0026 Treat Event: Bring Joy To a Shelter Pet","description":"\u003ch3\u003eGive Shelter Pets the Comforts of Home During the Holidays\u003c\/h3\u003e\n\u003cdiv style=\"float: left; margin: 10px; width: 35%; max-width: 225px;\"\u003e\n\u003cimg style=\"width: 100%;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/Screen_Shot_2020-10-21_at_2.19.55_PM_480x480.png?v=1603304481\" alt=\"cats\"\u003e\u003cem\u003eQuinn and Mew enjoying tasty treats that were sent to them!\u003c\/em\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cspan style=\"font-weight: 400;\"\u003eLet's show homeless fur babies who are waiting patiently for their new forever homes that they are loved! Help us shower these pups and kittens with gifts of tasty treats and terrific toys, because \u003c\/span\u003e\u003cspan style=\"text-decoration: underline;\"\u003e\u003cspan style=\"font-weight: 400;\"\u003eall\u003c\/span\u003e\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e pets deserve to have a happy \u003c\/span\u003e\u003ci\u003e\u003cspan style=\"font-weight: 400;\"\u003epaw\u003c\/span\u003e\u003c\/i\u003e\u003cspan style=\"font-weight: 400;\"\u003e-liday.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch1 style=\"margin: 0px 0px 10px; padding: 0px; border: 0px none; outline: currentcolor none 0px; font-size: 28px; vertical-align: baseline; background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; color: #000000; font-family: 'helvetica neue', Helvetica, Arial, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;\"\u003e\u003cspan class=\"emoji\" style=\"margin: 0px; padding: 0px; border: 0px; outline: 0px; font-size: 28px; vertical-align: baseline; background: 0px 0px; font-weight: 400; font-family: 'apple color emoji', 'segoe ui emoji', 'noto color emoji', 'android emoji', emojisymbols, 'emojione mozilla', 'twemoji mozilla', 'segoe ui symbol';\"\u003e❄️\u003c\/span\u003e\u003c\/h1\u003e\n\u003cp\u003e\u003cspan style=\"color: #710a0a;\"\u003e\u003cb\u003eGive a treat \u003c\/b\u003e\u003c\/span\u003eto make a shelter pet smile. The treats will also be used by shelters to aid in behavioral training that boosts pets' chances of adoption.\u003c\/p\u003e\n\u003cp\u003e\u003cspan style=\"color: #710a0a;\"\u003e\u003cb\u003eGive a toy\u003c\/b\u003e\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e to provide comfort and brighten a shelter pet's stay as they wait for their forever home! Play helps to make dogs and cats happier and increases their chance of adoption!\u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv style=\"float: right; margin: 10px; width: 35%; max-width: 225px;\"\u003e\n\u003cimg style=\"width: 100%;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/Screen_Shot_2020-10-21_at_4.20.41_PM_480x480.png?v=1603311679\" alt=\"pup\"\u003e\u003cem\u003eTori gets a delicious chew from a shelter volunteer.\u003c\/em\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cspan style=\"color: #5b0808;\"\u003e\u003cb\u003eGive More!\u003c\/b\u003e\u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003e Be a real Santa\u003cem\u003e Paws\u003c\/em\u003e \u003c\/span\u003e\u003cspan style=\"font-weight: 400;\"\u003efor sweet animals in need of holiday hope.\u003cspan style=\"font-weight: bold;\"\u003e \u003c\/span\u003e\u003c\/span\u003eMake a shelter animal's \u003cem\u003ehowl\u003c\/em\u003e-iday season \u003cem\u003emeow\u003c\/em\u003e-ry and bright by stuffing a stocking with multiple bags of treats or leave presents under the tree - which will send multiple toys and treats!\u003c\/p\u003e\n\u003cp\u003eYear-round, rescue organizations do everything possible to save thousands of animals and provide each animal in their care with the highest quality of life. The expenses of food and medical care can be a large financial burden and as a result there isn't much left in the way of financial resources to purchase extras like toys and treats. This holiday season we can assist these shelters by providing goods that will help our sweet furry friends and their chances of getting adopted during the holiday season!\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eThese past years we were able to send treats and toys all over the United States to shelters in need where pets benefited from these gifts. Please continue to show support for dogs and cats in need this Christmas and holiday season!\u003cspan style=\"color: #0b4b06;\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3 style=\"text-align: center;\"\u003e\u003cstrong\u003eStories\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp style=\"text-align: left;\"\u003eThese pets received some holiday goodies thanks to the generous giving of people like you! These dogs and cats had a bowl \"opening\" their gifts and playing with their new toys and snacking on their new treats. The shelters and rescues that these gifts were so thankful, and happy to see the pets in their care having a great time.\u003c\/p\u003e\n\u003cdiv style=\"display: grid; grid-gap: 10px 10px; grid-template-columns: repeat(2, minmax(1px, 200px)); align-content: space-evenly; justify-content: center;\"\u003e\n\u003cdiv style=\"grid-column: span 1; grid-row: span 1; flex-wrap: wrap;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/VS-Photograph_20241119_ChooseYourGood-GivingTuesday_012__GGC.jpg?v=1736280884\" alt=\"Christmas pup\" width=\"100%\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"grid-column: span 1; grid-row: span 1; flex-wrap: wrap;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/VS-Photograph_20241119_ChooseYourGood-GivingTuesday_003__GGC.jpg?v=1736280865\" alt=\"Christmas cats\" width=\"100%\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" height=\"171\" width=\"171\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/VS-Photograph_20241119_ChooseYourGood-GivingTuesday_016__GGC.jpg?v=1736280875\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cul\u003e\u003c\/ul\u003e","brand":"CUSA","offers":[{"title":"Toy","offer_id":31548934422603,"sku":"BB-PETDRIVE-TOY","price":14.0,"currency_code":"USD","in_stock":true},{"title":"Treats","offer_id":67199632015435,"sku":"BB-PETDRIVE-TREATS","price":14.0,"currency_code":"USD","in_stock":true},{"title":"Toy and Treat","offer_id":31548934455371,"sku":"BB-PETDRIVE-TOY\u0026TREAT","price":24.0,"currency_code":"USD","in_stock":true},{"title":"Stuff The Stockings","offer_id":41818891812939,"sku":"349992","price":54.0,"currency_code":"USD","in_stock":true},{"title":"Presents Under The Tree","offer_id":41818891845707,"sku":"349993","price":89.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/toys-and-treats-8.jpg?v=1764091649"},{"product_id":"send-a-good-pack-to-an-american-experiencing-homelessness-fundraiser-gtgm","title":"Send Relief Kits to Homeless Americans and their Pets","description":"\u003ch3 style=\"text-align: center;\"\u003eAmericans experiencing homelessness need YOUR help. Donate to send Emergency Relief Kits to people in need!\u003c\/h3\u003e\n\u003cp\u003eEvery night, thousands of unhoused people are left without consistent access to shelter, warmth, food, and hygiene supplies. For many with pets, the homeless shelter is not an option. \u003cstrong\u003eMost homeless shelters in the United States don’t allow animals\u003c\/strong\u003e and would require unhoused people with pets to abandon the only family they know for a warm place to stay. And for victims of natural disasters and other large catastrophes, there simply may not be enough shelter and supplies for all the survivors.\u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003eEmergency Relief Kits Can Change Lives\u003c\/h3\u003e\n\u003cdiv\u003eOur partner, Greater Good Charities is providing desperately needed essentials to thousands of homeless Americans, many of them veterans of the U.S. military. Relief Kits also provide stability for Americans who have lost everything to fire, flood, hurricane, tornado, or other disasters. GreaterGood is helping GGC fund a stockpile of Relief Kits that can be distributed to those needing care right away in the aftermath of natural disasters and other catastrophes.\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eEach Relief Kit for a person in need will include:\u003c\/strong\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003ea backpack to hold supplies and possessions\u003c\/li\u003e\n\u003cli\u003ea hygiene kit including shampoo, soap, and toothbrush\u003c\/li\u003e\n\u003cli\u003ea reusable water bottle\u003c\/li\u003e\n\u003cli\u003ea t-shirt and socks to provide a clean change of clothing\u003c\/li\u003e\n\u003cli\u003ea blanket for warmth and comfort\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eAll Relief Kits include Pet Packs for unhoused people caring for a companion.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eEach Pet Pack for a pet in need will include:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003ea bag to hold the pet supplies securely\u003c\/li\u003e\n\u003cli\u003ea collapsible bowl\u003c\/li\u003e\n\u003cli\u003ea slip lead leash\u003c\/li\u003e\n\u003cli\u003etreats and a toy\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eAs Greater Good Charities continues to work to convert more homeless shelters to accept pets, Relief Kits with pet supplies help keep people and their pets together during the deepest moments of crisis and in the most desperate situations, ensuring the emotional support of the human-animal bond can continue.\u003c\/p\u003e\n\u003cp\u003eYOU can help Americans and their pets experiencing homelessness across the country by providing essentials during a time of need. \u003cstrong\u003eJust $50 can send an Emergency Relief Kit.\u003c\/strong\u003e Give today.\u003c\/p\u003e\n\u003chr\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eNovember 2024 Update: Relief Kits for Hurricane Victims in the Southeast\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eIn September and October of 2024, Hurricanes Helene and Milton struck back-to-back, inundating Florida communities with storm surge and unleashing catastrophic flooding across the Southeast. In North Carolina alone, Helene killed more than 100 people and caused more than $50 billion in damages.\u003c\/p\u003e\n\u003cp\u003eTo help residents whose homes were damaged or destroyed, Greater Good Charities had teams on the ground distributing hundreds of Relief Kits, thanks to partnerships with organizations including YMCA Western North Carolina and Feeding Tampa Bay.\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cimg style=\"margin: 10px 10px 10px 10px; float: none;\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/Good-Packs-for-Americans-GTGM-Dec-2024-3_240x240.jpg?v=1733179384\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/Good-Packs-for-Americans-GTGM-Dec-2024-6_240x240.jpg?v=1733179419\" style=\"margin: 10px 10px 10px 10px; float: none;\"\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003eFebruary 2024 Update: Relief Kits for Wildfire Victims in Maui\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eIn August of 2023, wildfires prompted evacuations, destroyed thousands of properties, killed about 100 people, and left 5,000-plus people and their pets homeless. GreaterGood, in partnership with Greater Good Charities, has been working to help those struggling after this crisis, and in February, we helped fund more than 500 Relief Kits, which the GGC team personally transported to Maui and distributed to unhoused people and pets in need. \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eDenise Bash, GGC’s VP of Pet Programs, went with the team to Maui and spent several days distributing bags to displaced people at hotels, beaches, and parks in the area. She says, “I saw some tears, I got many hugs, I sat with many of them and talked…they were incredibly thankful.”\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg height=\"216\" width=\"216\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/MauiGoodPacks550.jpg?v=1712679652\" alt=\"\"\u003e          \u003cimg height=\"216\" width=\"216\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/MauiGoodPacks550B.jpg?v=1712679653\"\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e","brand":"GGO","offers":[{"title":"$10 Level","offer_id":41168379740235,"sku":"GTGM0048","price":10.0,"currency_code":"USD","in_stock":true},{"title":"$25 Level","offer_id":39955488637003,"sku":"GTGM0049","price":25.0,"currency_code":"USD","in_stock":true},{"title":"$50 Level","offer_id":39955488669771,"sku":"GTGM0050","price":50.0,"currency_code":"USD","in_stock":true},{"title":"$100 Level","offer_id":39955488735307,"sku":"GTGM0052","price":100.0,"currency_code":"USD","in_stock":true},{"title":"$250 Level","offer_id":41168379773003,"sku":"GTGM0051","price":250.0,"currency_code":"USD","in_stock":true},{"title":"$500 Level","offer_id":67354261323851,"sku":"GTGM3549","price":500.0,"currency_code":"USD","in_stock":true},{"title":"Custom","offer_id":39955488768075,"sku":"GTGM0053","price":1.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/Good-Packs-for-Americans-GTGM-Dec-2024-5_b14bc2e4-2c22-4efb-9dbe-e5827375bf68.jpg?v=1735942292"},{"product_id":"operation-turtle-takeoff-fundraiser-gtgm","title":"Operation Turtle Takeoff: Help Fly Endangered Sea Turtles to Warm Waters","description":"\u003ch2 style=\"text-align: center;\"\u003eHelp Rehabilitate Turtles Rescued From Freezing Waters\u003c\/h2\u003e\n\u003cp\u003eWhile the cold-stunning season has passed, endangered turtles that were flown to rehabilitation centers are still being cared for, waiting for their time to be released. Their recovery can require months of specialized care. \u003cstrong\u003eYour gift will help support those efforts and give these gentle animals a bright future.\u003c\/strong\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eThe Issue:\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003eEvery year, endangered sea turtles migrate between warmer and colder waters. As ocean temperatures rise, turtles are expanding their range farther north in summer, making it less likely they'll be able to reach the warmer, southern waters in time for fall. When water temperatures drop too quickly, they can become cold-stunned. \u003cstrong\u003eThis potentially deadly condition affects turtles' circulation, organ functions, and immune systems, often causing them to drown.\u003c\/strong\u003e Hundreds of turtles can be stunned in one area alone.\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eOperation Turtle Takeoff: \u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cmeta charset=\"utf-8\"\u003e\u003c\/strong\u003eTo help prevent turtles from dying of cold-stunning, \u003cstrong\u003eOperation Turtle Takeoff rehabilitates and flies cold-stunned turtles to warmer waters\u003c\/strong\u003e. These flights are crucial to release turtles as quickly as possible, saving their lives and ensuring that they can give birth to the next generation.\u003c\/p\u003e\n\u003cdiv style=\"text-align: right;\"\u003e\u003cimg style=\"margin-left: 10px; float: right;\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/GTGM-product-coldstun9_480x480.png?v=1763680159\"\u003e\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003eHow Operation Turtle Takeoff Works\u003c\/strong\u003e\u003cbr\u003eRescue organizations operate hotlines and have trained staff and volunteers monitor New England beaches during stranding season. When turtles are rescued, they are stabilized and transferred to the \u003cstrong\u003eNew England Aquarium's Sea Turtle Hospital\u003c\/strong\u003e, for rehabilitation. Turtles are closely monitored by marine biologists as they are gradually warmed in recovery pools and reintroduced to feeding. After their individualized treatment plan has been met and they've passed diagnostic tests, \u003cstrong\u003eturtles are cleared for takeoff\u003c\/strong\u003e. Turtles are flown with a heat pack and bedding to maintain their temperature. Receiving organizations will assess their health and complete the rehabilitation process before releasing the turtles back into the wild.\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eRehabilitation: \u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003eAfter their flights, receiving organizations assess each turtle's health and design an individualized treatment plan. Turtles are monitored for recovery and cleared for release only after passing full diagnostic tests. Every step takes time, expertise, and resources —\u003cstrong\u003e all made possible by supporters like you.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eYou can help. \u003c\/strong\u003eWill you donate now to rescue and rehabilitate these stranded turtles and send them back home to warmer waters?\u003c\/p\u003e\n\u003chr\u003e\n\u003ch3\u003eImpact:\u003c\/h3\u003e\n\u003cdiv style=\"text-align: left; max-width: 300px;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/20251124_GFL_SeaTurtles_MA-MS-LA_Arrival_001_GGC_8e371e6d-0f8c-497f-a245-013a84ee5823_480x480.jpg?v=1776957560\" style=\"margin: 10px 20px 10px 10px; float: left;\"\u003e\u003c\/div\u003e\n\u003cp\u003e\u003cstrong\u003eFlight Log:\u003c\/strong\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eDecember 3, \u003cstrong\u003e40 cold-stunned turtles\u003c\/strong\u003e flown to rehab centers in NY and PA!\u003c\/li\u003e\n\u003cli\u003eNovember 19, \u003cstrong\u003e35 turtles \u003c\/strong\u003eflown to safety in North Carolina!\u003c\/li\u003e\n\u003cli\u003eNovember 24, \u003cmeta charset=\"utf-8\"\u003e \u003cstrong\u003e91 Kemp's ridley turtles\u003c\/strong\u003e flown to \u003cmeta charset=\"utf-8\"\u003esafety in \u003cmeta charset=\"utf-8\"\u003eGulfport, MS and New Orleans, LA!\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eNursed Back to Health, New Names, and Sent Back Home\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cdiv style=\"float: left; margin: 10px; max-width: 400px;\"\u003e\n\u003cimg alt=\"man carrying small sea turtle\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/20260512_BC_SeaTurtles_May-Release_018_MississippiAquarium_480x480.jpg?v=1778764961\"\u003e\u003cbr\u003e\u003cem\u003ePhoto: Mississippi Aquarium\u003c\/em\u003e\n\u003c\/div\u003e\n\u003cp\u003eThis May, Leonardo and Michelangelo, two cold-stunned sea turtles that you helped us fly to Mississippi, supported their rehabilitation, and gave gnarly new names, were released along with dozens of other turtles. \u003c\/p\u003e\n\u003cp\u003eLeonardo and Michelangelo had both been found in Massachusetts suffering from pneumonia, frost bite, and other life-threatening ailments. They were flown to the Mississippi Aquarium, where they were nursed back. These juvenile, Kemp's ridley sea turtles will now have a chance to grow big and strong. \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eBut more turtles continue their rehabilitation and await their day to be sent home.\u003c\/strong\u003e You can help us save these incredible turtles today.\u003c\/p\u003e\n\u003cdiv style=\"text-align: right;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/20260512_BC_SeaTurtles_March-Release_009_MississippiAquarium_480x480.jpg?v=1778764369\" alt=\"\" style=\"margin: 10px 10px 10px 10px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"text-align: right;\"\u003e\u003cem\u003ePhoto: Mississippi Aquarium\u003c\/em\u003e\u003c\/div\u003e","brand":"GGO","offers":[{"title":"$10 Level","offer_id":41860077486155,"sku":"GTGM2801","price":10.0,"currency_code":"USD","in_stock":true},{"title":"$25 Level","offer_id":41860077518923,"sku":"GTGM2802","price":25.0,"currency_code":"USD","in_stock":true},{"title":"$50 Level","offer_id":41860077551691,"sku":"GTGM2803","price":50.0,"currency_code":"USD","in_stock":true},{"title":"$100 Level","offer_id":41860077584459,"sku":"GTGM2804","price":100.0,"currency_code":"USD","in_stock":true},{"title":"$250 Level","offer_id":41860077617227,"sku":"GTGM2805","price":250.0,"currency_code":"USD","in_stock":true},{"title":"$500 Level","offer_id":41860077649995,"sku":"GTGM2806","price":500.0,"currency_code":"USD","in_stock":true},{"title":"Custom","offer_id":41860077682763,"sku":"GTGM2807","price":1.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1185\/0798\/files\/turtle-takeoff-3.jpg?v=1761862981"}],"url":"https:\/\/greatergood.com\/collections\/bfcm-giving.oembed","provider":"GreaterGood","version":"1.0","type":"link"}