Cart drawer in both skins, the pre‑checkout warning, and checkout. Every frame is the live prototype in an iframe, not a screenshot — click any element for its spec. Sizes, type, colour and spacing are read off the rendered element, so they cannot drift from the prototype.
Reverse‑engineered from ten live carts, no deviation. The prototypes implement this exactly.
| Rule | Detail |
|---|---|
| Two products | Two units. Two of the same item counts — the “+” button is a valid way to qualify. |
| 499 kr threshold | Measured on regular price, inclusive (>=). Not on the discounted sum. |
| What counts | All products count toward both count and amount — but only Deal items receive a discount. |
| Nothing locks | Drop below the threshold and the discount falls away again. |
| Cascade | Deal items sorted ascending by price; one discount subtracted at a time, but only while the running sum is still ≥ 499 before the subtraction. |
The cascade is a bug, not a rule to design around. Yeti 400 + FYKA 99 (= 499) gives 19,80 kr; a non‑Deal item at 99 kr instead gives 72 kr — choosing the campaign product costs the customer 52,20 kr. Until this is fixed, any message about the saving will be wrong in some carts. Development, not design.
The “partial discount” states (s8/s9) show it: the condition is met, so the bar reads “Deal aktiverad”, but the amount comes from the cascade — not from summing every Deal discount.
Every icon in the prototypes, read out of the running pages. Download the SVG or copy the markup.