*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;color:#3d3654;font-family:ui-rounded,'SF Pro Rounded','Segoe UI',system-ui,-apple-system,Arial,sans-serif;line-height:1.7;font-size:17px;background:linear-gradient(180deg,#ede9fe 0%,#f7f4ff 340px,#fff9f3 900px,#f2fbf6 100%)}
h1,h2,h3{color:#2c2545;line-height:1.25;font-weight:800}
a{color:#6d28d9;text-decoration:none}
a:hover{text-decoration:underline}
.wrap{max-width:1120px;margin:0 auto;padding:0 24px}
.site-header{background:rgba(255,255,255,.85);backdrop-filter:blur(10px);position:sticky;top:0;z-index:50;border-bottom:3px solid #ede9fe}
.site-header .wrap{display:flex;align-items:center;gap:20px;padding:12px 24px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:#2c2545;font-weight:800;font-size:22px}
.brand:hover{text-decoration:none}
.brand svg{width:38px;height:38px}
.nav{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto;align-items:center}
.nav a{text-decoration:none;color:#3d3654;font-weight:700;font-size:14.5px;padding:9px 14px;border-radius:999px}
.nav a:hover{background:#ede9fe;text-decoration:none;color:#6d28d9}
.nav a.cta{background:#6d28d9;color:#fff;box-shadow:0 6px 18px rgba(109,40,217,.28)}
.nav a.cta:hover{background:#5b21b6;color:#fff}
.dots{position:absolute;inset:0;background-image:radial-gradient(#c4b5fd 2.2px,transparent 2.3px);background-size:22px 22px;opacity:.35;pointer-events:none}
.hero{padding:58px 0 12px;position:relative;overflow:hidden}
.hero-inner{position:relative}
.eyebrow{display:inline-block;background:#ffedd5;color:#9a3412;font-weight:800;font-size:13px;letter-spacing:1.5px;text-transform:uppercase;padding:8px 18px;border-radius:999px;margin-bottom:16px;box-shadow:0 6px 16px rgba(251,146,60,.25)}
.hero h1{font-size:clamp(36px,5.6vw,60px);margin:0 0 16px;letter-spacing:-.5px}
.hero h1 .hl{color:#6d28d9}
.lede{max-width:66ch;color:#5b5478;font-size:18px}
.tool-card{background:#fff;border-radius:24px;margin:30px 0 12px;box-shadow:0 18px 48px rgba(139,92,246,.16);border:1px solid #ede9fe;overflow:hidden}
.tool-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:20px 26px;background:linear-gradient(135deg,#ede9fe,#ffedd5);border-bottom:1px solid #f1eafd}
.tool-head h2{margin:0;font-size:24px}
.privacy-chip{margin-left:auto;display:inline-flex;align-items:center;gap:8px;background:#fff;border:2px solid #6d28d9;color:#6d28d9;font-weight:800;font-size:13px;padding:8px 16px;border-radius:999px}
.privacy-chip svg{width:16px;height:16px}
.tool-body{padding:28px 26px}
.opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:18px;margin-bottom:24px}
.opt{background:#faf9ff;border:2px solid #ede9fe;padding:18px;border-radius:18px}
.opt.mint{background:#f2fbf6;border-color:#d1fae5}
.opt.peach{background:#fffaf3;border-color:#ffedd5}
.opt-label{display:block;font-weight:800;font-size:14px;letter-spacing:.6px;text-transform:uppercase;color:#6d28d9;margin-bottom:12px}
.opt.mint .opt-label{color:#047857}
.opt.peach .opt-label{color:#c2410c}
.opt-hint{font-size:13.5px;color:#8a84a3;margin:10px 0 0}
.seg{display:flex;flex-wrap:wrap;gap:8px}
.seg button{border:2px solid #ddd6fe;background:#fff;color:#3d3654;padding:8px 15px;font-weight:700;font-size:13.5px;cursor:pointer;font-family:inherit;border-radius:999px;transition:all .15s}
.seg button:hover{border-color:#a78bfa}
.seg button[aria-pressed="true"]{background:#6d28d9;color:#fff;border-color:#6d28d9;box-shadow:0 4px 12px rgba(109,40,217,.3)}
.opt.mint .seg button[aria-pressed="true"]{background:#059669;border-color:#059669;box-shadow:0 4px 12px rgba(5,150,105,.3)}
.opt.peach .seg button[aria-pressed="true"]{background:#ea580c;border-color:#ea580c;box-shadow:0 4px 12px rgba(234,88,12,.3)}
.num-row{display:flex;align-items:center;gap:12px}
.num-row input[type=range]{flex:1;accent-color:#6d28d9}
.num-row input[type=number]{width:70px;border:2px solid #ddd6fe;border-radius:12px;padding:8px 10px;font-size:15px;font-family:inherit;background:#fff;color:#3d3654}
.count-val{font-weight:800;color:#6d28d9;font-size:20px;min-width:40px;text-align:center}
.actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.btn{border:2px solid #6d28d9;background:transparent;color:#6d28d9;padding:12px 26px;font-weight:800;font-size:15px;cursor:pointer;font-family:inherit;border-radius:999px;display:inline-flex;align-items:center;gap:9px;text-decoration:none;transition:all .15s}
.btn:hover{background:#ede9fe;text-decoration:none}
.btn.primary{background:#6d28d9;color:#fff;box-shadow:0 8px 22px rgba(109,40,217,.32)}
.btn.primary:hover{background:#5b21b6}
.btn svg{width:17px;height:17px}
.btn:disabled{opacity:.35;cursor:not-allowed;box-shadow:none}
.copy-note{font-size:14px;font-weight:700;color:#059669}
.output{margin-top:20px;background:#faf9ff;border:2px solid #ede9fe;min-height:130px;padding:20px;border-radius:18px}
.output ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.output li{background:#fff;border:1px solid #ede9fe;border-radius:16px;padding:14px 18px;cursor:pointer;box-shadow:0 6px 18px rgba(139,92,246,.08);display:flex;gap:14px;align-items:flex-start}
.output li:hover{box-shadow:0 10px 24px rgba(139,92,246,.16)}
.output li .idx{flex:none;width:38px;height:38px;border-radius:50%;background:#ede9fe;color:#6d28d9;font-weight:800;display:flex;align-items:center;justify-content:center;font-size:15px}
.output li .txt{min-width:0}
.output li .nm{display:block;font-weight:800;font-size:16.5px;color:#2c2545}
.output li .ds{display:block;font-size:14px;color:#5b5478}
.output li .rl{display:block;font-size:13px;color:#047857;margin-top:3px}
.output li .mini-copy{margin-left:auto;flex:none;font-size:12px;font-weight:800;color:#6d28d9;border:2px dashed #c4b5fd;padding:5px 12px;border-radius:999px;align-self:center}
.output .placeholder{color:#a5a0bd;text-align:center;margin:32px 0;font-size:15px}
.output-meta{margin-top:12px;font-size:13.5px;color:#8a84a3}
.limits{margin-top:22px;background:#fffaf3;border:2px dashed #fb923c;padding:20px 22px;border-radius:18px}
.limits h3{margin:0 0 10px;font-size:19px;color:#9a3412;display:flex;align-items:center;gap:10px}
.limits h3 svg{width:22px;height:22px;flex:none}
.limits ul{margin:0;padding-left:20px;font-size:15px;color:#5b5478}
.limits li{margin-bottom:7px}
.section{padding:52px 0 8px}
.section h2{font-size:clamp(28px,3.6vw,40px);margin:0 0 14px}
.section h2 .hl{color:#6d28d9}
.sub{color:#5b5478;max-width:68ch;margin:0 0 24px}
.cards3{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px}
.card{background:#fff;border:1px solid #ede9fe;border-radius:24px;padding:24px;box-shadow:0 12px 30px rgba(139,92,246,.10);display:flex;flex-direction:column}
.card.peach{border-color:#ffedd5;box-shadow:0 12px 30px rgba(251,146,60,.10)}
.card.mint{border-color:#d1fae5;box-shadow:0 12px 30px rgba(16,185,129,.10)}
.card h3{margin:0 0 10px;font-size:19px}
.card p{margin:0 0 14px;color:#5b5478;font-size:15px;flex:1}
.card .icon{width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.card .icon svg{width:24px;height:24px}
.card a.more{font-weight:800;font-size:14.5px}
.prose{max-width:74ch}
.prose p{margin:0 0 16px}
.prose h2{margin:36px 0 12px;font-size:27px}
.prose h3{margin:28px 0 10px;font-size:20px}
.prose ul,.prose ol{margin:0 0 18px;padding-left:22px}
.prose li{margin-bottom:8px}
.prose table{width:100%;border-collapse:collapse;margin:18px 0;font-size:15.5px}
.prose th{background:#ede9fe;color:#2c2545;text-align:left;padding:10px 14px}
.prose td{padding:10px 14px;border-bottom:1px solid #ede9fe}
.callout{background:#ede9fe;border-radius:18px;padding:18px 22px;margin:20px 0}
.callout.peach{background:#ffedd5}
.callout.mint{background:#d1fae5}
.faq-item{background:#fff;border:1px solid #ede9fe;border-radius:18px;padding:18px 22px;margin-bottom:14px;box-shadow:0 8px 22px rgba(139,92,246,.08)}
.faq-item h3{margin:0 0 8px;font-size:18px}
.faq-item p{margin:0;color:#5b5478;font-size:15.5px}
.site-footer{background:#2c2545;color:#cfc9e8;margin-top:70px;padding:44px 0 30px}
.site-footer .wrap{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:26px}
.site-footer h4{color:#fff;margin:0 0 12px;font-size:16px}
.site-footer a{color:#cfc9e8;font-size:14.5px;display:block;margin-bottom:8px}
.site-footer a:hover{color:#fff}
.site-footer .fine{grid-column:1/-1;font-size:13px;color:#9d95c4;border-top:1px solid #453d68;padding-top:18px;margin-top:6px}
.breadcrumb{font-size:13.5px;color:#8a84a3;margin:22px 0 0}
.breadcrumb a{color:#6d28d9}
.page-hero{padding:44px 0 6px}
.page-hero h1{font-size:clamp(32px,4.6vw,48px);margin:0 0 14px}
@media(max-width:700px){.tool-body{padding:20px 16px}.output li{flex-wrap:wrap}.nav{margin-left:0}}
Free Marketing Offer Generator
Stuck for a promo idea?
Meet OfferOrb.
A free marketing offer generator that brainstorms promotional offer ideas in seconds: discounts, BOGO deals, free-shipping offers, gift-with-purchase, bundles, flash sales, and more. Pick a mechanic and a goal, generate up to 20 ideas, and copy or download your favorites. No signup, no cost, and everything happens right in your browser.
Why most promotions lose money
Picking the mechanic is the easy part. Whether a promotion adds sales or just gives away margin depends on the rules around it: who can redeem it, on which products, how often, and for how long. Use our types of marketing offers guide to match mechanics to goals, then keep each offer profitable with one simple habit: pair every incentive with a rule that stops it discounting orders you would have won anyway.
Types of marketing offers
Percentage discounts, fixed-amount coupons, BOGO, free shipping, gift with purchase, bundles, flash sales, welcome, loyalty, and referral offers, each with its best-fit goal.
Read the guide
How to write a marketing offer
Turn a mechanic into copy that converts: the headline formula, where the value goes, how to state terms without scaring people off.
Read the guide
Offer examples by mechanic
Concrete example offers for every mechanic the generator produces, from "$10 off $50" thresholds to tiered loyalty rewards.
See examples
When to use which offer
Launch week, slow season, cart recovery, inventory clear-out: a use-case map that pairs common business moments with the right mechanic.
Explore use cases
Offer FAQ
How deep should a discount go? How often can you run a sale? Answers to the questions marketers ask before launching a promotion.
Read the FAQ
How the generator works
OfferOrb keeps a bank of offer mechanics, headline templates, and example values. When you click Generate, it uses your browser's built-in cryptographically secure random number generator (crypto.getRandomValues) to combine a mechanic, a headline template, and illustrative numbers into a fresh idea, then pairs each idea with a short explanation and a profitability rule drawn from common promotional pricing practice.
Nothing leaves your device: there is no account, no tracking of what you generate, and no server involved at all. The ideas refresh every click, so generate a few rounds, copy the ones that fit your margins, and adapt the wording to your brand voice before you publish.