(function () {
try {
// AQ-r2 (2026-06-09): respect the explicit-denial sentinel
// written by cookie-consent-harden.js writeATR() on any
// marketing-axis denial (payload.marketing === false; cycle-3 F1).
// Without this gate, the next page navigation re-creates
// gmx_first_touch from the current URL+referrer+utm_*+click_ids,
// silently undoing the reject-all deletion (sweep finding #1).
// The sentinel is cleared the moment the visitor grants
// marketing in the banner (analytics-only grant does NOT
// clear), restoring the writer path on the very next
// page load. Page-cache-safe: the sentinel is a
// browser-resident cookie checked in the inline script, so
// varnish/breeze-served HTML still hits this gate.
if (/(?:^|;\s*)gmx_consent_denied=1(?:;|$)/.test(document.cookie || '')) return;
var CLICK_IDS = ['gclid','fbclid','msclkid','ttclid','wbraid','gbraid','li_fat_id'];
var qs = new URLSearchParams(window.location.search);
var urlClickIdKey = null;
for (var i = 0; i < CLICK_IDS.length; i++) {
if (qs.get(CLICK_IDS[i])) { urlClickIdKey = CLICK_IDS[i]; break; }
}// Parse existing cookie.
var existing = null;
var match = document.cookie.match(/(?:^|;\s*)gmx_first_touch=([^;]+)/);
if (match) {
try { existing = JSON.parse(decodeURIComponent(match[1])); } catch (e) { existing = null; }
}// GWP-273 — referrer-enrichment branch.
// Keep existing unless either (a) URL carries a new click id
// the stored payload lacks (paid click is a higher-value
// signal and upgrades direct/organic), OR (b) the stored
// payload has empty referrer AND the current document.referrer
// is non-empty + external (Safari/ITP/policy-quirk catch:
// first-hit may have missed the referrer; later same-session
// page-loads can recover it).
var existingHasRef = !!(existing && existing.referrer && existing.referrer !== '');
var docRef = document.referrer || '';
var refHost = '';
if (docRef) {
try {
refHost = new URL(docRef).hostname.replace(/^www\./, '').toLowerCase();
} catch (e) { refHost = ''; }
}
var ownHost = (location.host || '').replace(/^www\./, '').toLowerCase();
var currentExternalRef = !!(refHost && refHost !== ownHost);
var canEnrichRef = !!existing && !existingHasRef && currentExternalRef;if (existing) {
if (!urlClickIdKey && !canEnrichRef) return;
if (urlClickIdKey && existing[urlClickIdKey] && !canEnrichRef) return;
}var utm_keys = [
'utm_source','utm_medium','utm_campaign','utm_content','utm_term',
'utm_adgroup','utm_matchtype','utm_network','utm_device','utm_placement'
];
// GWP-273 — merge-preserving base. When enriching an existing
// payload, retain its landing_url + ts + prior click ids /
// utms; only overlay referrer (and any click id appended below
// via the forEach). Branches with/without urlClickIdKey were
// collapsed — both produced the identical Object.assign — the
// click id is added uniformly later.
//
// GWP-273 design choice: "latest external referrer wins" —
// accepted edge case where a user opens a new external tab
// post-empty-first-touch and returns; low-volume, simple, no
// sentinel flag needed.
var data;
if (existing && canEnrichRef) {
data = Object.assign({}, existing, { referrer: docRef });
} else {
data = { landing_url: window.location.href, referrer: docRef, ts: Date.now() };
}
utm_keys.concat(CLICK_IDS).forEach(function (k) {
var v = qs.get(k);
if (v) data[k] = v;
});
// GWP-208 — carry Meta's first-party click-linker cookies (_fbc
// = fb.1.<ts>.<fbclid>, _fbp) into the captured payload so they
// ride the persistent gmx_first_touch cookie cross-page (LP X →
// LP Y) the same way the URL click-ids do. The CF7 hidden-field
// populator copies the whole payload verbatim, so fbc/fbp reach
// the lead even when the form lives on a page without ?fbclid.
var fbcMatch = document.cookie.match(/(?:^|;\s*)_fbc=([^;]+)/);
if (fbcMatch && fbcMatch[1]) data.fbc = decodeURIComponent(fbcMatch[1]);
var fbpMatch = document.cookie.match(/(?:^|;\s*)_fbp=([^;]+)/);
if (fbpMatch && fbpMatch[1]) data.fbp = decodeURIComponent(fbpMatch[1]);
var encoded = encodeURIComponent(JSON.stringify(data));
if (encoded.length > 3800) return;
var expires = new Date(Date.now() + 90 * 864e5).toUTCString(); // GWP-143 C1: match Google Ads 90-day attribution window
var secure = window.location.protocol === 'https:' ? '; Secure' : '';
document.cookie = 'gmx_first_touch=' + encoded + '; Path=/; Expires=' + expires + '; SameSite=Lax' + secure;
} catch (e) {}
})();
/* Meta Pixel base — inline in wp_head so Breeze Delay-All-JS does not defer it; fbevents.js is async-injected (optimizer-invisible). */
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://connect.facebook.net/en_US/fbevents.js');/* Symmetric with server GMX_Consent: revoke BEFORE init; cookies/sends held until grant. */
fbq('consent', 'revoke');
fbq('init', '1857131551802431');
fbq('track', 'PageView'); /* queued; flushed to Meta only after consent grant *//* Grant bridge — reads the SAME ATR marketing signal as GMX_Consent.applyConsent(). */
(function () {
function read(name){var m=document.cookie.match('(?:^|; )'+name.replace(/([.*+?^${}()|[\]\\])/g,'\\$1')+'=([^;]*)');return m?decodeURIComponent(m[1]):'';}
function marketingGranted(){
try {
var given = read('atr_cookie_notice_consent_given');
if (!given) return false; // undecided -> stay revoked
var c = JSON.parse(read('atr_cookie_notice_consent') || '{}');
return !!(c.marketing || c.ad_storage === 'granted');
} catch (e) { return false; } // NO-SILENT-OK: parse/read failure degrades gracefully to revoked (consent stays held; no marketing send) — not an error to report.
}
function apply(){ if (marketingGranted()) fbq('consent', 'grant'); }
apply();
document.addEventListener('click', function(ev){
if (ev.target && ev.target.closest && ev.target.closest('[class*="atr-cookie"], #atr-cookie-notice')) setTimeout(apply, 50);
}, true);
window.addEventListener('storage', apply);
})();
var breeze_prefetch = {"local_url":"https://gomixapp.com","ignore_remote_prefetch":"1","ignore_list":["/cart/","/checkout/","/my-account/","https://gomixapp.co.il/(.)/u05d4u05d8u05d5u05e4u05e1-u05e0u05e9u05dcu05d7-u05d1u05d4u05e6u05dcu05d7u05d4/","wp-admin","wp-login.php"]};
//# sourceURL=breeze-prefetch-js-extra
Running a sale? A sale sign printable for your store — free. Fill the product, the discount and the dates into the square brackets, print, and hang it in the window, next to the product or by the register. You can also copy the text with one click or download it as a Word file to edit and style your own way.
SALE!
[Product]
[Discount] off
Sale valid: [Sale period]
or while stocks last — whichever ends first.
Details at the register. Cannot be combined with other offers.
[Business name]
Fill in the details — the notice updates automatically:
How to write a sale sign that sells — without getting you in trouble
A good sale sign works by one rule: one product, one number. A passing customer’s eye catches the word “SALE”, the product name and the discount in about two seconds — and that’s it. A sign that tries to cram in five products, asterisks and three lines of terms simply doesn’t get read. The small print (validity, no double discounts, details at the register) goes in one small line at the bottom — it is there for fairness and for the law, not for the selling.
Know the legal side too: under Israel’s Consumer Protection Law it is forbidden to mislead about the existence or scope of a sale. In practice that means three things — the price shown on the sign binds at the register; a “previous price” shown for comparison must be the price actually charged before the sale; and if you printed dates, you honor them to the end. The phrase “or while stocks last — whichever ends first” protects you when stock runs out, but it is no substitute for a reasonable stock level relative to the advertising. And a sign for a sale that has ended — take it down.
Placement and size: the three spots that work are the shop window (brings customers in), the shelf next to the product (closes the decision) and the register (a last reminder). Print A4 for the shelf and A3 for the window, in strong contrast — dark text on a light background or the reverse — and make sure the discount number reads from four meters. In a long sale, replace the sign if it creases or fades: a worn sign signals worn goods.
Frequently Asked Questions
What makes a sale sign effective?
One product, one number. A sign that tries to sell five things at once sells none of them — the eye catches one big word (“SALE!”), one product and one prominent discount number. Everything else (validity, terms, no double discounts) goes small at the bottom. Golden rule: if the sign can’t be read within two seconds of walking past, it is overloaded.
Do I have to print dates on a sale sign?
Strongly recommended — and it pays off. A sale with no end date creates no urgency, and customers postpone the purchase. Legally, Israel’s Consumer Protection Law forbids misleading about the existence or scope of a sale: if you printed dates, you must honor them, and if stock is limited add “while stocks last”. Don’t leave up a sign for a sale that ended — a displayed price binds at the register.
Should I show a percent discount or the new price?
It depends on the product. Use percentages (“30% off”) when the discount is significant and covers a whole category; use prices (“49.90 instead of 79.90 ILS”) for a specific product — a concrete before/after price reads as more credible and tangible. Note: a “previous price” you display must be the price actually charged before the sale — an inflated previous price is prohibited misleading.
Where should sale signs hang in the store?
At three points: in the shop window (pulls people in), next to the product itself (removes doubt), and by the register (a reminder right before payment). A single sign in the middle of the store works least. Keep strong contrast and a letter size that reads from three to four meters, and in the window hang at a passerby’s eye level, not at floor level.
Can I write “while stocks last” without dates?
You can, but it’s weaker. “While stocks last” alone creates no real urgency — the customer doesn’t know if stock runs out tomorrow or in a month. The winning combination is defined dates plus “or while stocks last, whichever ends first”: urgency, plus protection if the product sells out before the sale ends. Either way, keep a reasonable stock level relative to the advertising.
Key Takeaways
One product + one number = a sign that works; an overloaded sign doesn’t get read
Validity dates + “while stocks last, whichever ends first” — urgency plus protection
A previous price must be real — an inflated one is misleading under the Consumer Protection Law
Hang at three points: shop window, next to the product, and by the register
The template here is free — copy, print, or download as Word
Printing a new sign for every sale? With a digital signage screen in the store, the promo goes up in one click, rotates between products by itself — and comes down automatically on the end date. No printing, no forgotten sign in the window.
var atrCookieNoticeSettings = {"cookieName":"atr_cookie_notice_consent","decisionCookieName":"atr_cookie_notice_consent_given","expiryDays":"365","autoHideDelay":"0","enableDebug":"","siteName":"GoMixApp","isPrivacyPage":"","privacyPolicyUrl":"https://gomixapp.com/privacy-policy/","privacyNoteText":"\ud83d\udca1 You can read this page while deciding about cookies","mode":"simple"};
//# sourceURL=atr-cookie-notice-simple-js-extra