student 1 mesiac pred
rodič
commit
c9afc298d0

+ 283 - 258
website/Areas/Millions/Views/Home/PopupFreeTickit.cshtml

@@ -1,279 +1,304 @@
 @using LotteryWebApp.Languages
 @using Microsoft.AspNetCore.Http
 @{
-    var shouldAutoCheckFreeTicket = Context.Session.GetString("Millions.FreeTicket.AutoChecked") != "1";
+	var shouldAutoCheckFreeTicket = Context.Session.GetString("Millions.FreeTicket.AutoChecked") != "1";
 }
 
 <link rel="stylesheet" href="~/Millions/css/popup-free-ticket.css" asp-append-version="true" />
 
 <aside class="free-ticket-popup" aria-labelledby="freeTicketTitle">
-    <a class="free-ticket-popup__card"
-       href="#"
-       id="freeTicketClaimButton"
-       aria-label="Get your free ticket">
-        <img class="free-ticket-popup__image"
-             src="~/Millions/assets/images/free-ticket-floating-icon.png"
-             alt="" aria-hidden="true" />
-        <strong class="free-ticket-popup__ticket-text">
-            @Lang.millions_free<br />@Lang.millions_ticket
-        </strong>
-        <strong class="free-ticket-popup__button-text" id="freeTicketTitle">
-            @Lang.millions_free @Lang.millions_ticket
-        </strong>
-    </a>
+	<a class="free-ticket-popup__card"
+	   href="#"
+	   id="freeTicketClaimButton"
+	   aria-label="Get your free ticket">
+		<img class="free-ticket-popup__image"
+			 src="~/Millions/assets/images/free-ticket-floating-icon.png"
+			 alt="" aria-hidden="true" />
+		<strong class="free-ticket-popup__ticket-text">
+			@Lang.millions_free<br />@Lang.millions_ticket
+		</strong>
+		<strong class="free-ticket-popup__button-text" id="freeTicketTitle">
+			@Lang.millions_free @Lang.millions_ticket
+		</strong>
+	</a>
 </aside>
 
 <div class="free-ticket-result" id="freeTicketResultModal" role="dialog" aria-modal="true"
-     aria-labelledby="freeTicketResultTitle" aria-describedby="freeTicketResultDescription" hidden>
-    <div class="free-ticket-result__backdrop" data-free-ticket-close></div>
-    <section class="free-ticket-result__panel">
-        <h2 class="free-ticket-visually-hidden" id="freeTicketResultTitle">@Lang.free_ticket_waiting_title</h2>
-        <p class="free-ticket-visually-hidden" id="freeTicketResultDescription">@Lang.free_ticket_waiting_description</p>
-        <img class="free-ticket-result__image"
-             src="~/Millions/assets/images/free-ticket-success.png"
-             alt="" aria-hidden="true" />
-        <button type="button" class="free-ticket-result__action free-ticket-result__action--dismiss-icon"
-                data-free-ticket-close aria-label="@Lang.millions_close"></button>
-        <a class="free-ticket-result__action free-ticket-result__action--use"
-           href="@Url.Action("BuyTicket", "Home", new { area = "Millions", freeTicketMode = "1" })"
-           aria-label="@Lang.free_ticket_buy_now"></a>
-        <button type="button" class="free-ticket-result__action free-ticket-result__action--later"
-                data-free-ticket-close aria-label="@Lang.millions_close"></button>
-    </section>
+	 aria-labelledby="freeTicketResultTitle" aria-describedby="freeTicketResultDescription" hidden>
+	<div class="free-ticket-result__backdrop" data-free-ticket-close></div>
+	<section class="free-ticket-result__panel">
+		<h2 class="free-ticket-visually-hidden" id="freeTicketResultTitle">@Lang.free_ticket_waiting_title</h2>
+		<p class="free-ticket-visually-hidden" id="freeTicketResultDescription">@Lang.free_ticket_waiting_description</p>
+		<img class="free-ticket-result__image"
+			 src="~/Millions/assets/images/free-ticket-success-no-text.png"
+			 alt="" aria-hidden="true" />
+		<strong class="free-ticket-result__copy free-ticket-result__copy--badge">@Lang.free_ticket_success_badge</strong>
+		<h2 class="free-ticket-result__copy free-ticket-result__copy--title">@Lang.free_ticket_success_title</h2>
+		<p class="free-ticket-result__copy free-ticket-result__copy--received">@Lang.free_ticket_success_received</p>
+		<p class="free-ticket-result__copy free-ticket-result__copy--ticket">@Lang.free_ticket_success_ticket</p>
+		<p class="free-ticket-result__copy free-ticket-result__copy--chance">@Lang.free_ticket_success_chance</p>
+		<strong class="free-ticket-result__copy free-ticket-result__copy--prize">30,000,000 HTG!</strong>
+		<span class="free-ticket-result__copy free-ticket-result__copy--use">@Lang.free_ticket_success_use</span>
+		<span class="free-ticket-result__copy free-ticket-result__copy--later">@Lang.free_ticket_success_later</span>
+		<p class="free-ticket-result__copy free-ticket-result__copy--validity">@Lang.free_ticket_success_validity</p>
+		<button type="button" class="free-ticket-result__action free-ticket-result__action--dismiss-icon"
+				data-free-ticket-close aria-label="@Lang.millions_close"></button>
+		<a class="free-ticket-result__action free-ticket-result__action--use"
+		   href="@Url.Action("BuyTicket", "Home", new { area = "Millions", freeTicketMode = "1" })"
+		   aria-label="@Lang.free_ticket_buy_now"></a>
+		<button type="button" class="free-ticket-result__action free-ticket-result__action--later"
+				data-free-ticket-close aria-label="@Lang.millions_close"></button>
+	</section>
 </div>
 
 <div class="free-ticket-error-43" id="freeTicketError43Modal" role="dialog" aria-modal="true"
-     aria-labelledby="freeTicketError43Title" aria-describedby="freeTicketError43Description" hidden>
-    <div class="free-ticket-error-43__backdrop" data-free-ticket-error-43-close></div>
-    <section class="free-ticket-error-43__panel">
-        <h2 class="free-ticket-visually-hidden" id="freeTicketError43Title">@Lang.free_ticket_error_43_title</h2>
-        <p class="free-ticket-visually-hidden" id="freeTicketError43Description">
-            @Lang.free_ticket_error_43_description
-        </p>
-        <img class="free-ticket-error-43__image"
-             src="~/Millions/assets/images/free-ticket-error-43.png"
-             alt="" aria-hidden="true" />
-        <button type="button" class="free-ticket-error-43__action free-ticket-error-43__action--dismiss-icon"
-                data-free-ticket-error-43-close aria-label="@Lang.millions_close"></button>
-        <a class="free-ticket-error-43__action free-ticket-error-43__action--buy"
-           href="@Url.Action("BuyTicket", "Home", new { area = "Millions" })"
-           aria-label="@Lang.millions_buy_ticket_label"></a>
-        <button type="button" class="free-ticket-error-43__action free-ticket-error-43__action--close"
-                data-free-ticket-error-43-close aria-label="@Lang.millions_close"></button>
-    </section>
+	 aria-labelledby="freeTicketError43Title" aria-describedby="freeTicketError43Description" hidden>
+	<div class="free-ticket-error-43__backdrop" data-free-ticket-error-43-close></div>
+	<section class="free-ticket-error-43__panel">
+		<h2 class="free-ticket-visually-hidden" id="freeTicketError43Title">@Lang.free_ticket_error_43_title</h2>
+		<p class="free-ticket-visually-hidden" id="freeTicketError43Description">
+			@Lang.free_ticket_error_43_description
+		</p>
+		<img class="free-ticket-error-43__image"
+			 src="~/Millions/assets/images/free-ticket-error-43-no-text.png"
+			 alt="" aria-hidden="true" />
+		<strong class="free-ticket-error-43__copy free-ticket-error-43__copy--badge">@Lang.free_ticket_error_43_badge</strong>
+		<h2 class="free-ticket-error-43__copy free-ticket-error-43__copy--title">@Lang.free_ticket_error_43_title</h2>
+		<p class="free-ticket-error-43__copy free-ticket-error-43__copy--description">@Lang.free_ticket_error_43_description</p>
+		<strong class="free-ticket-error-43__copy free-ticket-error-43__copy--daily-title">@Lang.free_ticket_error_43_daily_title</strong>
+		<p class="free-ticket-error-43__copy free-ticket-error-43__copy--daily-description">@Lang.free_ticket_error_43_daily_description</p>
+		<span class="free-ticket-error-43__copy free-ticket-error-43__copy--buy">@Lang.millions_buy_ticket_label</span>
+		<span class="free-ticket-error-43__copy free-ticket-error-43__copy--close">@Lang.millions_close</span>
+		<p class="free-ticket-error-43__copy free-ticket-error-43__copy--footer">@Lang.free_ticket_error_43_footer</p>
+		<button type="button" class="free-ticket-error-43__action free-ticket-error-43__action--dismiss-icon"
+				data-free-ticket-error-43-close aria-label="@Lang.millions_close"></button>
+		<a class="free-ticket-error-43__action free-ticket-error-43__action--buy"
+		   href="@Url.Action("BuyTicket", "Home", new { area = "Millions" })"
+		   aria-label="@Lang.millions_buy_ticket_label"></a>
+		<button type="button" class="free-ticket-error-43__action free-ticket-error-43__action--close"
+				data-free-ticket-error-43-close aria-label="@Lang.millions_close"></button>
+	</section>
 </div>
 
 <div class="free-ticket-error-44" id="freeTicketError44Modal" role="dialog" aria-modal="true"
-     aria-labelledby="freeTicketError44Title" aria-describedby="freeTicketError44Description" hidden>
-    <div class="free-ticket-error-44__backdrop" data-free-ticket-error-44-close></div>
-    <section class="free-ticket-error-44__panel">
-        <h2 class="free-ticket-visually-hidden" id="freeTicketError44Title">@Lang.free_ticket_waiting_title</h2>
-        <p class="free-ticket-visually-hidden" id="freeTicketError44Description">
-            @Lang.free_ticket_waiting_description
-        </p>
-        <img class="free-ticket-error-44__image"
-             src="~/Millions/assets/images/free-ticket-error-44.png"
-             alt="" aria-hidden="true" />
-        <button type="button" class="free-ticket-error-44__action free-ticket-error-44__action--dismiss-icon"
-                data-free-ticket-error-44-close aria-label="@Lang.millions_close"></button>
-        <a class="free-ticket-error-44__action free-ticket-error-44__action--buy"
-           href="@Url.Action("BuyTicket", "Home", new { area = "Millions", freeTicketMode = "1" })"
-           aria-label="@Lang.free_ticket_buy_now"></a>
-        <button type="button" class="free-ticket-error-44__action free-ticket-error-44__action--close"
-                data-free-ticket-error-44-close aria-label="@Lang.millions_close"></button>
-    </section>
+	 aria-labelledby="freeTicketError44Title" aria-describedby="freeTicketError44Description" hidden>
+	<div class="free-ticket-error-44__backdrop" data-free-ticket-error-44-close></div>
+	<section class="free-ticket-error-44__panel">
+		<h2 class="free-ticket-visually-hidden" id="freeTicketError44Title">@Lang.free_ticket_waiting_title</h2>
+		<p class="free-ticket-visually-hidden" id="freeTicketError44Description">
+			@Lang.free_ticket_waiting_description
+		</p>
+		<img class="free-ticket-error-44__image"
+			 src="~/Millions/assets/images/free-ticket-error-44-no-text.png"
+			 alt="" aria-hidden="true" />
+		<strong class="free-ticket-error-44__copy free-ticket-error-44__copy--badge">@Lang.free_ticket_waiting_badge</strong>
+		<h2 class="free-ticket-error-44__copy free-ticket-error-44__copy--title">@Lang.free_ticket_waiting_title</h2>
+		<p class="free-ticket-error-44__copy free-ticket-error-44__copy--description">@Lang.free_ticket_waiting_description</p>
+		<p class="free-ticket-error-44__copy free-ticket-error-44__copy--chance">@Lang.free_ticket_success_chance</p>
+		<strong class="free-ticket-error-44__copy free-ticket-error-44__copy--prize">30,000,000 HTG!</strong>
+		<span class="free-ticket-error-44__copy free-ticket-error-44__copy--buy">@Lang.free_ticket_buy_now</span>
+		<span class="free-ticket-error-44__copy free-ticket-error-44__copy--close">@Lang.millions_close</span>
+		<p class="free-ticket-error-44__copy free-ticket-error-44__copy--footer">@Lang.free_ticket_waiting_validity</p>
+		<button type="button" class="free-ticket-error-44__action free-ticket-error-44__action--dismiss-icon"
+				data-free-ticket-error-44-close aria-label="@Lang.millions_close"></button>
+		<a class="free-ticket-error-44__action free-ticket-error-44__action--buy"
+		   href="@Url.Action("BuyTicket", "Home", new { area = "Millions", freeTicketMode = "1" })"
+		   aria-label="@Lang.free_ticket_buy_now"></a>
+		<button type="button" class="free-ticket-error-44__action free-ticket-error-44__action--close"
+				data-free-ticket-error-44-close aria-label="@Lang.millions_close"></button>
+	</section>
 </div>
 
 <script>
-    (function () {
-        var popup = document.querySelector('.free-ticket-popup');
-        var claimButton = document.getElementById('freeTicketClaimButton');
-        var resultModal = document.getElementById('freeTicketResultModal');
-        var error43Modal = document.getElementById('freeTicketError43Modal');
-        var error44Modal = document.getElementById('freeTicketError44Modal');
-        var error43ReturnFocus = null;
-        var error44ReturnFocus = null;
-        if (!popup) return;
-
-        function showFreeTicketResult(result) {
-            if (!resultModal || !result || String(result.responseCode) !== '0' || !result.code) {
-                return false;
-            }
-
-            resultModal.hidden = false;
-            document.body.classList.add('free-ticket-result-open');
-            return true;
-        }
-
-        function showFreeTicketError43() {
-            if (!error43Modal) return false;
-
-            error43ReturnFocus = document.activeElement;
-            error43Modal.hidden = false;
-            document.body.classList.add('free-ticket-result-open');
-            var closeButton = error43Modal.querySelector('[data-free-ticket-error-43-close]');
-            if (closeButton) closeButton.focus();
-            return true;
-        }
-
-        function closeFreeTicketError43() {
-            if (!error43Modal) return;
-
-            error43Modal.hidden = true;
-            document.body.classList.remove('free-ticket-result-open');
-            if (error43ReturnFocus && typeof error43ReturnFocus.focus === 'function') {
-                error43ReturnFocus.focus();
-            }
-        }
-
-        if (error43Modal) {
-            error43Modal.querySelectorAll('[data-free-ticket-error-43-close]').forEach(function (closeButton) {
-                closeButton.addEventListener('click', closeFreeTicketError43);
-            });
-
-            error43Modal.addEventListener('keydown', function (event) {
-                if (event.key === 'Escape') closeFreeTicketError43();
-            });
-        }
-
-        function showFreeTicketError44(result) {
-            if (!error44Modal) return false;
-
-            error44ReturnFocus = document.activeElement;
-            error44Modal.hidden = false;
-            document.body.classList.add('free-ticket-result-open');
-            var closeButton = error44Modal.querySelector('[data-free-ticket-error-44-close]');
-            if (closeButton) closeButton.focus();
-            return true;
-        }
-
-        function closeFreeTicketError44() {
-            if (!error44Modal) return;
-
-            error44Modal.hidden = true;
-            document.body.classList.remove('free-ticket-result-open');
-            if (error44ReturnFocus && typeof error44ReturnFocus.focus === 'function') {
-                error44ReturnFocus.focus();
-            }
-        }
-
-        if (error44Modal) {
-            error44Modal.querySelectorAll('[data-free-ticket-error-44-close]').forEach(function (closeButton) {
-                closeButton.addEventListener('click', closeFreeTicketError44);
-            });
-
-            error44Modal.addEventListener('keydown', function (event) {
-                if (event.key === 'Escape') closeFreeTicketError44();
-            });
-        }
-
-        if (resultModal) {
-            resultModal.querySelectorAll('[data-free-ticket-close]').forEach(function (closeButton) {
-                closeButton.addEventListener('click', function () {
-                    resultModal.hidden = true;
-                    document.body.classList.remove('free-ticket-result-open');
-                });
-            });
-        }
-
-        if (claimButton) {
-            var freeTicketMessages = {
-                '38': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_38)),
-                '39': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_39)),
-                '40': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_40)),
-                '41': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_41)),
-                '42': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_42)),
-                '43': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_43)),
-                '44': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_44))
-            };
-
-            if (@(shouldAutoCheckFreeTicket ? "true" : "false") && document.getElementById('playNowSection')) {
-                document.addEventListener('DOMContentLoaded', function () {
-                    var initialVerificationToken = document.querySelector('input[name="__RequestVerificationToken"]');
-                    $.ajax({
-                        url: subDomain + '@Url.Action("GetFreeTicket", "Home", new { area = "Millions" })',
-                        type: 'POST',
-                        data: {
-                            __RequestVerificationToken: initialVerificationToken ? initialVerificationToken.value : '',
-                            type: '1'
-                        },
-                        success: function (result) {
-                            if (result && String(result.responseCode) === '0' && result.code) {
-                                showFreeTicketError44(result);
-                            }
-                        }
-                    });
-                });
-            }
-
-            claimButton.addEventListener('click', function (event) {
-                event.preventDefault();
-                if (claimButton.dataset.loading === 'true') return;
-
-                var verificationToken = document.querySelector('input[name="__RequestVerificationToken"]');
-                claimButton.dataset.loading = 'true';
-                claimButton.classList.add('free-ticket-popup__card--loading');
-
-                $.ajax({
-                    url: subDomain + '@Url.Action("GetFreeTicket", "Home", new { area = "Millions" })',
-                    type: 'POST',
-                    data: {
-                        __RequestVerificationToken: verificationToken ? verificationToken.value : ''
-                    },
-                    success: function (result) {
-                        if (showFreeTicketResult(result)) {
-                            return;
-                        }
-
-                        var responseCode = result && result.responseCode
-                            ? String(result.responseCode)
-                            : '';
-                        if (responseCode === '43' && showFreeTicketError43()) {
-                            return;
-                        }
-                        if (responseCode === '44' && showFreeTicketError44(result)) {
-                            return;
-                        }
-                        var responseMessage = freeTicketMessages[responseCode]
-                            || (result && result.responseMessage)
-                            || 'Unable to get free ticket.';
-
-                        window.alert(responseMessage);
-                    },
-                    error: function () {
-                        window.alert('Unable to get free ticket.');
-                    },
-                    complete: function () {
-                        claimButton.dataset.loading = 'false';
-                        claimButton.classList.remove('free-ticket-popup__card--loading');
-                    }
-                });
-            });
-        }
-
-        function alignFreeTicketIcon() {
-            var millionsFrame = document.querySelector('.main-content, .main-container');
-            var playNowSection = document.getElementById('playNowSection');
-            if (!millionsFrame) {
-                popup.style.left = '';
-                popup.style.right = '10px';
-                return;
-            }
-
-            var frameRect = millionsFrame.getBoundingClientRect();
-            var popupWidth = popup.getBoundingClientRect().width;
-            popup.style.left = Math.max(8, frameRect.right - popupWidth - 15) + 'px';
-            popup.style.right = 'auto';
-
-            if (playNowSection) {
-                var playRect = playNowSection.getBoundingClientRect();
-                popup.style.top = (playRect.top - 7) + 'px';
-                popup.style.bottom = 'auto';
-            }
-        }
-
-        alignFreeTicketIcon();
-        window.addEventListener('resize', alignFreeTicketIcon, { passive: true });
-        window.addEventListener('scroll', alignFreeTicketIcon, { passive: true, capture: true });
-    })();
+	(function () {
+		var popup = document.querySelector('.free-ticket-popup');
+		var claimButton = document.getElementById('freeTicketClaimButton');
+		var resultModal = document.getElementById('freeTicketResultModal');
+		var error43Modal = document.getElementById('freeTicketError43Modal');
+		var error44Modal = document.getElementById('freeTicketError44Modal');
+		var error43ReturnFocus = null;
+		var error44ReturnFocus = null;
+		if (!popup) return;
+
+		function showFreeTicketResult(result) {
+			if (!resultModal || !result || String(result.responseCode) !== '0' || !result.code) {
+				return false;
+			}
+
+			resultModal.hidden = false;
+			document.body.classList.add('free-ticket-result-open');
+			return true;
+		}
+
+		function showFreeTicketError43() {
+			if (!error43Modal) return false;
+
+			error43ReturnFocus = document.activeElement;
+			error43Modal.hidden = false;
+			document.body.classList.add('free-ticket-result-open');
+			var closeButton = error43Modal.querySelector('[data-free-ticket-error-43-close]');
+			if (closeButton) closeButton.focus();
+			return true;
+		}
+
+		function closeFreeTicketError43() {
+			if (!error43Modal) return;
+
+			error43Modal.hidden = true;
+			document.body.classList.remove('free-ticket-result-open');
+			if (error43ReturnFocus && typeof error43ReturnFocus.focus === 'function') {
+				error43ReturnFocus.focus();
+			}
+		}
+
+		if (error43Modal) {
+			error43Modal.querySelectorAll('[data-free-ticket-error-43-close]').forEach(function (closeButton) {
+				closeButton.addEventListener('click', closeFreeTicketError43);
+			});
+
+			error43Modal.addEventListener('keydown', function (event) {
+				if (event.key === 'Escape') closeFreeTicketError43();
+			});
+		}
+
+		function showFreeTicketError44(result) {
+			if (!error44Modal) return false;
+
+			error44ReturnFocus = document.activeElement;
+			error44Modal.hidden = false;
+			document.body.classList.add('free-ticket-result-open');
+			var closeButton = error44Modal.querySelector('[data-free-ticket-error-44-close]');
+			if (closeButton) closeButton.focus();
+			return true;
+		}
+
+		function closeFreeTicketError44() {
+			if (!error44Modal) return;
+
+			error44Modal.hidden = true;
+			document.body.classList.remove('free-ticket-result-open');
+			if (error44ReturnFocus && typeof error44ReturnFocus.focus === 'function') {
+				error44ReturnFocus.focus();
+			}
+		}
+
+		if (error44Modal) {
+			error44Modal.querySelectorAll('[data-free-ticket-error-44-close]').forEach(function (closeButton) {
+				closeButton.addEventListener('click', closeFreeTicketError44);
+			});
+
+			error44Modal.addEventListener('keydown', function (event) {
+				if (event.key === 'Escape') closeFreeTicketError44();
+			});
+		}
+
+		if (resultModal) {
+			resultModal.querySelectorAll('[data-free-ticket-close]').forEach(function (closeButton) {
+				closeButton.addEventListener('click', function () {
+					resultModal.hidden = true;
+					document.body.classList.remove('free-ticket-result-open');
+				});
+			});
+		}
+
+		if (claimButton) {
+			var freeTicketMessages = {
+				'38': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_38)),
+				'39': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_39)),
+				'40': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_40)),
+				'41': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_41)),
+				'42': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_42)),
+				'43': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_43)),
+				'44': @Html.Raw(System.Text.Json.JsonSerializer.Serialize(Lang.get_free_ticket_code_44))
+			};
+
+			if (@(shouldAutoCheckFreeTicket ? "true" : "false") && document.getElementById('playNowSection')) {
+				document.addEventListener('DOMContentLoaded', function () {
+					var initialVerificationToken = document.querySelector('input[name="__RequestVerificationToken"]');
+					$.ajax({
+						url: subDomain + '@Url.Action("GetFreeTicket", "Home", new { area = "Millions" })',
+						type: 'POST',
+						data: {
+							__RequestVerificationToken: initialVerificationToken ? initialVerificationToken.value : '',
+							type: '1'
+						},
+						success: function (result) {
+							if (result && String(result.responseCode) === '0' && result.code) {
+								showFreeTicketError44(result);
+							}
+						}
+					});
+				});
+			}
+
+			claimButton.addEventListener('click', function (event) {
+				event.preventDefault();
+				if (claimButton.dataset.loading === 'true') return;
+
+				var verificationToken = document.querySelector('input[name="__RequestVerificationToken"]');
+				claimButton.dataset.loading = 'true';
+				claimButton.classList.add('free-ticket-popup__card--loading');
+
+				$.ajax({
+					url: subDomain + '@Url.Action("GetFreeTicket", "Home", new { area = "Millions" })',
+					type: 'POST',
+					data: {
+						__RequestVerificationToken: verificationToken ? verificationToken.value : ''
+					},
+					success: function (result) {
+						if (showFreeTicketResult(result)) {
+							return;
+						}
+
+						var responseCode = result && result.responseCode
+							? String(result.responseCode)
+							: '';
+						if (responseCode === '43' && showFreeTicketError43()) {
+							return;
+						}
+						if (responseCode === '44' && showFreeTicketError44(result)) {
+							return;
+						}
+						var responseMessage = freeTicketMessages[responseCode]
+							|| (result && result.responseMessage)
+							|| 'Unable to get free ticket.';
+
+						window.alert(responseMessage);
+					},
+					error: function () {
+						window.alert('Unable to get free ticket.');
+					},
+					complete: function () {
+						claimButton.dataset.loading = 'false';
+						claimButton.classList.remove('free-ticket-popup__card--loading');
+					}
+				});
+			});
+		}
+
+		function alignFreeTicketIcon() {
+			var millionsFrame = document.querySelector('.main-content, .main-container');
+			var playNowSection = document.getElementById('playNowSection');
+			if (!millionsFrame) {
+				popup.style.left = '';
+				popup.style.right = '10px';
+				return;
+			}
+
+			var frameRect = millionsFrame.getBoundingClientRect();
+			var popupWidth = popup.getBoundingClientRect().width;
+			popup.style.left = Math.max(8, frameRect.right - popupWidth - 15) + 'px';
+			popup.style.right = 'auto';
+
+			if (playNowSection) {
+				var playRect = playNowSection.getBoundingClientRect();
+				popup.style.top = (playRect.top - 7) + 'px';
+				popup.style.bottom = 'auto';
+			}
+		}
+
+		alignFreeTicketIcon();
+		window.addEventListener('resize', alignFreeTicketIcon, { passive: true });
+		window.addEventListener('scroll', alignFreeTicketIcon, { passive: true, capture: true });
+	})();
 </script>

+ 306 - 20
website/Languages/Lang.Designer.cs

@@ -1215,6 +1215,177 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Achte kounye a.
+        /// </summary>
+        public static string free_ticket_buy_now {
+            get {
+                return ResourceManager.GetString("free_ticket_buy_now", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to PLIS CHANS PWOCHEN FWA!.
+        /// </summary>
+        public static string free_ticket_error_43_badge {
+            get {
+                return ResourceManager.GetString("free_ticket_error_43_badge", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Yo bay tikè gratis chak jou. Pa rate chans ou demen!.
+        /// </summary>
+        public static string free_ticket_error_43_daily_description {
+            get {
+                return ResourceManager.GetString("free_ticket_error_43_daily_description", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Nouvo chans chak jou!.
+        /// </summary>
+        public static string free_ticket_error_43_daily_title {
+            get {
+                return ResourceManager.GetString("free_ticket_error_43_daily_title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Ou pa t resevwa yon tikè gratis jodi a. Retounen demen epi eseye chans ou ankò..
+        /// </summary>
+        public static string free_ticket_error_43_description {
+            get {
+                return ResourceManager.GetString("free_ticket_error_43_description", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Achte yon tikè kounye a pou chans genyen jiska 30,000,000 HTG!.
+        /// </summary>
+        public static string free_ticket_error_43_footer {
+            get {
+                return ResourceManager.GetString("free_ticket_error_43_footer", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Bòn chans pwochen fwa!.
+        /// </summary>
+        public static string free_ticket_error_43_title {
+            get {
+                return ResourceManager.GetString("free_ticket_error_43_title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to TIKÈ GRATIS.
+        /// </summary>
+        public static string free_ticket_success_badge {
+            get {
+                return ResourceManager.GetString("free_ticket_success_badge", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Sèvi avè l kounye a pou chans genyen jiska.
+        /// </summary>
+        public static string free_ticket_success_chance {
+            get {
+                return ResourceManager.GetString("free_ticket_success_chance", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Pita.
+        /// </summary>
+        public static string free_ticket_success_later {
+            get {
+                return ResourceManager.GetString("free_ticket_success_later", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Ou resevwa.
+        /// </summary>
+        public static string free_ticket_success_received {
+            get {
+                return ResourceManager.GetString("free_ticket_success_received", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to 1 Tikè Millions GRATIS..
+        /// </summary>
+        public static string free_ticket_success_ticket {
+            get {
+                return ResourceManager.GetString("free_ticket_success_ticket", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Felisitasyon!.
+        /// </summary>
+        public static string free_ticket_success_title {
+            get {
+                return ResourceManager.GetString("free_ticket_success_title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Sèvi ak tikè a.
+        /// </summary>
+        public static string free_ticket_success_use {
+            get {
+                return ResourceManager.GetString("free_ticket_success_use", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Tikè gratis la valab sèlman pou tiraj jodi a..
+        /// </summary>
+        public static string free_ticket_success_validity {
+            get {
+                return ResourceManager.GetString("free_ticket_success_validity", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to TIKÈ GRATIS.
+        /// </summary>
+        public static string free_ticket_waiting_badge {
+            get {
+                return ResourceManager.GetString("free_ticket_waiting_badge", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Ou gen 1 tikè Millions gratis ki poko itilize. Sèvi avè l pou tiraj jodi a..
+        /// </summary>
+        public static string free_ticket_waiting_description {
+            get {
+                return ResourceManager.GetString("free_ticket_waiting_description", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Tikè GRATIS ou ap tann ou!.
+        /// </summary>
+        public static string free_ticket_waiting_title {
+            get {
+                return ResourceManager.GetString("free_ticket_waiting_title", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Tikè gratis la valab sèlman pou tiraj jodi a. Pa bliye sèvi avè l!.
+        /// </summary>
+        public static string free_ticket_waiting_validity {
+            get {
+                return ResourceManager.GetString("free_ticket_waiting_validity", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Soti nan.
         /// </summary>
@@ -1242,6 +1413,69 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Kòd pwomosyon an pa valid.
+        /// </summary>
+        public static string get_free_ticket_code_38 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_38", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Kòd pwomosyon an deja itilize.
+        /// </summary>
+        public static string get_free_ticket_code_39 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_39", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Pwomosyon an pa aktif.
+        /// </summary>
+        public static string get_free_ticket_code_40 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_40", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Demann tikè a pa egziste.
+        /// </summary>
+        public static string get_free_ticket_code_41 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_41", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Tranzaksyon ou an pa reyisi.
+        /// </summary>
+        public static string get_free_ticket_code_42 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_42", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Bòn chans pwochen fwa.
+        /// </summary>
+        public static string get_free_ticket_code_43 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_43", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Yo voye kòd la.
+        /// </summary>
+        public static string get_free_ticket_code_44 {
+            get {
+                return ResourceManager.GetString("get_free_ticket_code_44", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Jwenn OTP.
         /// </summary>
@@ -3456,6 +3690,42 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Kont prensipal.
+        /// </summary>
+        public static string payment_main_account {
+            get {
+                return ResourceManager.GetString("payment_main_account", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Peye avèk balans mobil ou.
+        /// </summary>
+        public static string payment_main_account_desc {
+            get {
+                return ResourceManager.GetString("payment_main_account_desc", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Chwazi yon kont pou fini acha ou.
+        /// </summary>
+        public static string payment_method_subtitle {
+            get {
+                return ResourceManager.GetString("payment_method_subtitle", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Chwazi metòd peman.
+        /// </summary>
+        public static string payment_method_title {
+            get {
+                return ResourceManager.GetString("payment_method_title", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Metod peyman.
         /// </summary>
@@ -3465,6 +3735,42 @@ namespace LotteryWebApp.Languages {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to Enfòmasyon peman ou pwoteje.
+        /// </summary>
+        public static string payment_security_message {
+            get {
+                return ResourceManager.GetString("payment_security_message", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to WALLET.
+        /// </summary>
+        public static string payment_wallet {
+            get {
+                return ResourceManager.GetString("payment_wallet", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Peman sekirize avèk PIN wallet la.
+        /// </summary>
+        public static string payment_wallet_desc {
+            get {
+                return ResourceManager.GetString("payment_wallet_desc", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Antre PIN WALLET ou.
+        /// </summary>
+        public static string payment_wallet_pin_instruction {
+            get {
+                return ResourceManager.GetString("payment_wallet_pin_instruction", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Nimewo telefon nan pa bon.
         /// </summary>
@@ -5806,25 +6112,5 @@ namespace LotteryWebApp.Languages {
                 return ResourceManager.GetString("your_password_reset", resourceCulture);
             }
         }
-        public static string payment_method_title { get { return ResourceManager.GetString("payment_method_title", resourceCulture); } }
-        public static string payment_method_subtitle { get { return ResourceManager.GetString("payment_method_subtitle", resourceCulture); } }
-        public static string payment_main_account { get { return ResourceManager.GetString("payment_main_account", resourceCulture); } }
-        public static string payment_main_account_desc { get { return ResourceManager.GetString("payment_main_account_desc", resourceCulture); } }
-        public static string payment_wallet { get { return ResourceManager.GetString("payment_wallet", resourceCulture); } }
-        public static string payment_wallet_desc { get { return ResourceManager.GetString("payment_wallet_desc", resourceCulture); } }
-        public static string payment_security_message { get { return ResourceManager.GetString("payment_security_message", resourceCulture); } }
-        public static string payment_wallet_pin_instruction { get { return ResourceManager.GetString("payment_wallet_pin_instruction", resourceCulture); } }
-        public static string get_free_ticket_code_38 { get { return ResourceManager.GetString("get_free_ticket_code_38", resourceCulture); } }
-        public static string get_free_ticket_code_39 { get { return ResourceManager.GetString("get_free_ticket_code_39", resourceCulture); } }
-        public static string get_free_ticket_code_40 { get { return ResourceManager.GetString("get_free_ticket_code_40", resourceCulture); } }
-        public static string get_free_ticket_code_41 { get { return ResourceManager.GetString("get_free_ticket_code_41", resourceCulture); } }
-        public static string get_free_ticket_code_42 { get { return ResourceManager.GetString("get_free_ticket_code_42", resourceCulture); } }
-        public static string get_free_ticket_code_43 { get { return ResourceManager.GetString("get_free_ticket_code_43", resourceCulture); } }
-        public static string get_free_ticket_code_44 { get { return ResourceManager.GetString("get_free_ticket_code_44", resourceCulture); } }
-        public static string free_ticket_error_43_title { get { return ResourceManager.GetString("free_ticket_error_43_title", resourceCulture); } }
-        public static string free_ticket_error_43_description { get { return ResourceManager.GetString("free_ticket_error_43_description", resourceCulture); } }
-        public static string free_ticket_waiting_title { get { return ResourceManager.GetString("free_ticket_waiting_title", resourceCulture); } }
-        public static string free_ticket_waiting_description { get { return ResourceManager.GetString("free_ticket_waiting_description", resourceCulture); } }
-        public static string free_ticket_buy_now { get { return ResourceManager.GetString("free_ticket_buy_now", resourceCulture); } }
     }
 }

+ 103 - 21
website/Languages/Lang.fr.resx

@@ -2035,24 +2035,106 @@ We’ll help you create an account in a few easy steps.</value>
   <data name="millions_jackpot_rule7_desc3" xml:space="preserve">
     <value>In case of any dispute, Natcom's decision shall be final.</value>
   </data>
-  <data name="payment_method_title" xml:space="preserve"><value>Choose payment method</value></data>
-  <data name="payment_method_subtitle" xml:space="preserve"><value>Select an account to complete your purchase</value></data>
-  <data name="payment_main_account" xml:space="preserve"><value>Main account</value></data>
-  <data name="payment_main_account_desc" xml:space="preserve"><value>Pay with your mobile balance</value></data>
-  <data name="payment_wallet" xml:space="preserve"><value>WALLET</value></data>
-  <data name="payment_wallet_desc" xml:space="preserve"><value>Secure payment with wallet PIN</value></data>
-  <data name="payment_security_message" xml:space="preserve"><value>Your payment information is protected</value></data>
-  <data name="payment_wallet_pin_instruction" xml:space="preserve"><value>Enter your WALLET PIN</value></data>
-  <data name="get_free_ticket_code_38" xml:space="preserve"><value>Promotion code invalid</value></data>
-  <data name="get_free_ticket_code_39" xml:space="preserve"><value>Promotion code has already been used</value></data>
-  <data name="get_free_ticket_code_40" xml:space="preserve"><value>Promotion is not active</value></data>
-  <data name="get_free_ticket_code_41" xml:space="preserve"><value>Ticket request does not exist</value></data>
-  <data name="get_free_ticket_code_42" xml:space="preserve"><value>Your transaction was unsuccessful</value></data>
-  <data name="get_free_ticket_code_43" xml:space="preserve"><value>Good luck next time</value></data>
-  <data name="get_free_ticket_code_44" xml:space="preserve"><value>The code has been sent</value></data>
-  <data name="free_ticket_error_43_title" xml:space="preserve"><value>Good luck next time!</value></data>
-  <data name="free_ticket_error_43_description" xml:space="preserve"><value>You did not receive a free ticket today. Come back tomorrow and try your luck again.</value></data>
-  <data name="free_ticket_waiting_title" xml:space="preserve"><value>Your FREE ticket is waiting!</value></data>
-  <data name="free_ticket_waiting_description" xml:space="preserve"><value>You have 1 free Millions ticket that has not been used. Use it for today's draw.</value></data>
-  <data name="free_ticket_buy_now" xml:space="preserve"><value>Buy now</value></data>
-</root>
+  <data name="payment_method_title" xml:space="preserve">
+    <value>Choose payment method</value>
+  </data>
+  <data name="payment_method_subtitle" xml:space="preserve">
+    <value>Select an account to complete your purchase</value>
+  </data>
+  <data name="payment_main_account" xml:space="preserve">
+    <value>Main account</value>
+  </data>
+  <data name="payment_main_account_desc" xml:space="preserve">
+    <value>Pay with your mobile balance</value>
+  </data>
+  <data name="payment_wallet" xml:space="preserve">
+    <value>WALLET</value>
+  </data>
+  <data name="payment_wallet_desc" xml:space="preserve">
+    <value>Secure payment with wallet PIN</value>
+  </data>
+  <data name="payment_security_message" xml:space="preserve">
+    <value>Your payment information is protected</value>
+  </data>
+  <data name="payment_wallet_pin_instruction" xml:space="preserve">
+    <value>Enter your WALLET PIN</value>
+  </data>
+  <data name="get_free_ticket_code_38" xml:space="preserve">
+    <value>Promotion code invalid</value>
+  </data>
+  <data name="get_free_ticket_code_39" xml:space="preserve">
+    <value>Promotion code has already been used</value>
+  </data>
+  <data name="get_free_ticket_code_40" xml:space="preserve">
+    <value>Promotion is not active</value>
+  </data>
+  <data name="get_free_ticket_code_41" xml:space="preserve">
+    <value>Ticket request does not exist</value>
+  </data>
+  <data name="get_free_ticket_code_42" xml:space="preserve">
+    <value>Your transaction was unsuccessful</value>
+  </data>
+  <data name="get_free_ticket_code_43" xml:space="preserve">
+    <value>Good luck next time</value>
+  </data>
+  <data name="get_free_ticket_code_44" xml:space="preserve">
+    <value>The code has been sent</value>
+  </data>
+  <data name="free_ticket_error_43_title" xml:space="preserve">
+    <value>Good luck next time!</value>
+  </data>
+  <data name="free_ticket_error_43_description" xml:space="preserve">
+    <value>You did not receive a free ticket today. Come back tomorrow and try your luck again.</value>
+  </data>
+  <data name="free_ticket_waiting_title" xml:space="preserve">
+    <value>Your FREE ticket is waiting!</value>
+  </data>
+  <data name="free_ticket_waiting_description" xml:space="preserve">
+    <value>You have 1 free Millions ticket that has not been used. Use it for today's draw.</value>
+  </data>
+  <data name="free_ticket_buy_now" xml:space="preserve">
+    <value>Buy now</value>
+  </data>
+  <data name="free_ticket_success_badge" xml:space="preserve">
+    <value>FREE TICKET</value>
+  </data>
+  <data name="free_ticket_success_title" xml:space="preserve">
+    <value>Congratulations!</value>
+  </data>
+  <data name="free_ticket_success_received" xml:space="preserve">
+    <value>You have received</value>
+  </data>
+  <data name="free_ticket_success_ticket" xml:space="preserve">
+    <value>1 FREE Millions Ticket.</value>
+  </data>
+  <data name="free_ticket_success_chance" xml:space="preserve">
+    <value>Use it now for your chance to win up to</value>
+  </data>
+  <data name="free_ticket_success_use" xml:space="preserve">
+    <value>Use Ticket Now</value>
+  </data>
+  <data name="free_ticket_success_later" xml:space="preserve">
+    <value>Later</value>
+  </data>
+  <data name="free_ticket_success_validity" xml:space="preserve">
+    <value>The free ticket is valid for today's draw only.</value>
+  </data>
+  <data name="free_ticket_error_43_badge" xml:space="preserve">
+    <value>BETTER LUCK NEXT TIME!</value>
+  </data>
+  <data name="free_ticket_error_43_daily_title" xml:space="preserve">
+    <value>New chances every day!</value>
+  </data>
+  <data name="free_ticket_error_43_daily_description" xml:space="preserve">
+    <value>Free tickets are given out daily. Don't miss your chance tomorrow!</value>
+  </data>
+  <data name="free_ticket_error_43_footer" xml:space="preserve">
+    <value>Buy a ticket now for your chance to win up to 30,000,000 HTG!</value>
+  </data>
+  <data name="free_ticket_waiting_badge" xml:space="preserve">
+    <value>FREE TICKET</value>
+  </data>
+  <data name="free_ticket_waiting_validity" xml:space="preserve">
+    <value>Free ticket is valid for today's draw only. Don't forget to use it!</value>
+  </data>
+</root>

+ 103 - 21
website/Languages/Lang.resx

@@ -2036,24 +2036,106 @@ Apre yo fin tire 20 nimewo, sistem nan konte konbyen nimewo ki enpe oswa pe: &lt
   <data name="millions_jackpot_rule7_desc3" xml:space="preserve">
     <value>Si gen nenpòt diskisyon, desizyon Natcom se desizyon final la.</value>
   </data>
-  <data name="payment_method_title" xml:space="preserve"><value>Chwazi metòd peman</value></data>
-  <data name="payment_method_subtitle" xml:space="preserve"><value>Chwazi yon kont pou fini acha ou</value></data>
-  <data name="payment_main_account" xml:space="preserve"><value>Kont prensipal</value></data>
-  <data name="payment_main_account_desc" xml:space="preserve"><value>Peye avèk balans mobil ou</value></data>
-  <data name="payment_wallet" xml:space="preserve"><value>WALLET</value></data>
-  <data name="payment_wallet_desc" xml:space="preserve"><value>Peman sekirize avèk PIN wallet la</value></data>
-  <data name="payment_security_message" xml:space="preserve"><value>Enfòmasyon peman ou pwoteje</value></data>
-  <data name="payment_wallet_pin_instruction" xml:space="preserve"><value>Antre PIN WALLET ou</value></data>
-  <data name="get_free_ticket_code_38" xml:space="preserve"><value>Kòd pwomosyon an pa valid</value></data>
-  <data name="get_free_ticket_code_39" xml:space="preserve"><value>Kòd pwomosyon an deja itilize</value></data>
-  <data name="get_free_ticket_code_40" xml:space="preserve"><value>Pwomosyon an pa aktif</value></data>
-  <data name="get_free_ticket_code_41" xml:space="preserve"><value>Demann tikè a pa egziste</value></data>
-  <data name="get_free_ticket_code_42" xml:space="preserve"><value>Tranzaksyon ou an pa reyisi</value></data>
-  <data name="get_free_ticket_code_43" xml:space="preserve"><value>Bòn chans pwochen fwa</value></data>
-  <data name="get_free_ticket_code_44" xml:space="preserve"><value>Yo voye kòd la</value></data>
-  <data name="free_ticket_error_43_title" xml:space="preserve"><value>Bòn chans pwochen fwa!</value></data>
-  <data name="free_ticket_error_43_description" xml:space="preserve"><value>Ou pa t resevwa yon tikè gratis jodi a. Retounen demen epi eseye chans ou ankò.</value></data>
-  <data name="free_ticket_waiting_title" xml:space="preserve"><value>Tikè GRATIS ou ap tann ou!</value></data>
-  <data name="free_ticket_waiting_description" xml:space="preserve"><value>Ou gen 1 tikè Millions gratis ki poko itilize. Sèvi avè l pou tiraj jodi a.</value></data>
-  <data name="free_ticket_buy_now" xml:space="preserve"><value>Achte kounye a</value></data>
-</root>
+  <data name="payment_method_title" xml:space="preserve">
+    <value>Chwazi metòd peman</value>
+  </data>
+  <data name="payment_method_subtitle" xml:space="preserve">
+    <value>Chwazi yon kont pou fini acha ou</value>
+  </data>
+  <data name="payment_main_account" xml:space="preserve">
+    <value>Kont prensipal</value>
+  </data>
+  <data name="payment_main_account_desc" xml:space="preserve">
+    <value>Peye avèk balans mobil ou</value>
+  </data>
+  <data name="payment_wallet" xml:space="preserve">
+    <value>WALLET</value>
+  </data>
+  <data name="payment_wallet_desc" xml:space="preserve">
+    <value>Peman sekirize avèk PIN wallet la</value>
+  </data>
+  <data name="payment_security_message" xml:space="preserve">
+    <value>Enfòmasyon peman ou pwoteje</value>
+  </data>
+  <data name="payment_wallet_pin_instruction" xml:space="preserve">
+    <value>Antre PIN WALLET ou</value>
+  </data>
+  <data name="get_free_ticket_code_38" xml:space="preserve">
+    <value>Kòd pwomosyon an pa valid</value>
+  </data>
+  <data name="get_free_ticket_code_39" xml:space="preserve">
+    <value>Kòd pwomosyon an deja itilize</value>
+  </data>
+  <data name="get_free_ticket_code_40" xml:space="preserve">
+    <value>Pwomosyon an pa aktif</value>
+  </data>
+  <data name="get_free_ticket_code_41" xml:space="preserve">
+    <value>Demann tikè a pa egziste</value>
+  </data>
+  <data name="get_free_ticket_code_42" xml:space="preserve">
+    <value>Tranzaksyon ou an pa reyisi</value>
+  </data>
+  <data name="get_free_ticket_code_43" xml:space="preserve">
+    <value>Bòn chans pwochen fwa</value>
+  </data>
+  <data name="get_free_ticket_code_44" xml:space="preserve">
+    <value>Yo voye kòd la</value>
+  </data>
+  <data name="free_ticket_error_43_title" xml:space="preserve">
+    <value>Bòn chans pwochen fwa!</value>
+  </data>
+  <data name="free_ticket_error_43_description" xml:space="preserve">
+    <value>Ou pa t resevwa yon tikè gratis jodi a. Retounen demen epi eseye chans ou ankò.</value>
+  </data>
+  <data name="free_ticket_waiting_title" xml:space="preserve">
+    <value>Tikè GRATIS ou ap tann ou!</value>
+  </data>
+  <data name="free_ticket_waiting_description" xml:space="preserve">
+    <value>Ou gen 1 tikè Millions gratis ki poko itilize. Sèvi avè l pou tiraj jodi a.</value>
+  </data>
+  <data name="free_ticket_buy_now" xml:space="preserve">
+    <value>Achte kounye a</value>
+  </data>
+  <data name="free_ticket_success_badge" xml:space="preserve">
+    <value>TIKÈ GRATIS</value>
+  </data>
+  <data name="free_ticket_success_title" xml:space="preserve">
+    <value>Felisitasyon!</value>
+  </data>
+  <data name="free_ticket_success_received" xml:space="preserve">
+    <value>Ou resevwa</value>
+  </data>
+  <data name="free_ticket_success_ticket" xml:space="preserve">
+    <value>1 Tikè Millions GRATIS.</value>
+  </data>
+  <data name="free_ticket_success_chance" xml:space="preserve">
+    <value>Sèvi avè l kounye a pou chans genyen jiska</value>
+  </data>
+  <data name="free_ticket_success_use" xml:space="preserve">
+    <value>Sèvi ak tikè a</value>
+  </data>
+  <data name="free_ticket_success_later" xml:space="preserve">
+    <value>Pita</value>
+  </data>
+  <data name="free_ticket_success_validity" xml:space="preserve">
+    <value>Tikè gratis la valab sèlman pou tiraj jodi a.</value>
+  </data>
+  <data name="free_ticket_error_43_badge" xml:space="preserve">
+    <value>PLIS CHANS PWOCHEN FWA!</value>
+  </data>
+  <data name="free_ticket_error_43_daily_title" xml:space="preserve">
+    <value>Nouvo chans chak jou!</value>
+  </data>
+  <data name="free_ticket_error_43_daily_description" xml:space="preserve">
+    <value>Yo bay tikè gratis chak jou. Pa rate chans ou demen!</value>
+  </data>
+  <data name="free_ticket_error_43_footer" xml:space="preserve">
+    <value>Achte yon tikè kounye a pou chans genyen jiska 30,000,000 HTG!</value>
+  </data>
+  <data name="free_ticket_waiting_badge" xml:space="preserve">
+    <value>TIKÈ GRATIS</value>
+  </data>
+  <data name="free_ticket_waiting_validity" xml:space="preserve">
+    <value>Tikè gratis la valab sèlman pou tiraj jodi a. Pa bliye sèvi avè l!</value>
+  </data>
+</root>

BIN
website/wwwroot/Millions/assets/images/free-ticket-error-43-no-text.png


BIN
website/wwwroot/Millions/assets/images/free-ticket-error-44-no-text.png


BIN
website/wwwroot/Millions/assets/images/free-ticket-success-no-text.png


+ 276 - 0
website/wwwroot/Millions/css/popup-free-ticket.css

@@ -157,6 +157,164 @@ body.free-ticket-result-open {
     object-fit: contain;
 }
 
+.free-ticket-error-43__copy,
+.free-ticket-error-44__copy,
+.free-ticket-result__copy {
+    position: absolute;
+    z-index: 2;
+    box-sizing: border-box;
+    margin: 0;
+    pointer-events: none;
+    text-align: center;
+}
+
+.free-ticket-error-43__copy--badge {
+    top: 14%;
+    left: 29%;
+    width: 34%;
+    color: #0a358b;
+    font-size: 12px;
+    font-weight: 900;
+    line-height: 1.05;
+    text-transform: uppercase;
+    transform: rotate(-7deg);
+}
+
+.free-ticket-error-43__copy--title,
+.free-ticket-error-44__copy--title {
+    top: 39.2%;
+    left: 10%;
+    width: 80%;
+    color: #082d7d;
+    font-size: 19px;
+    font-weight: 900;
+    line-height: 1;
+    text-wrap: balance;
+}
+
+.free-ticket-error-44__copy--title {
+    top: 43.7%;
+    font-size: 18px;
+}
+
+.free-ticket-error-43__copy--description,
+.free-ticket-error-44__copy--description {
+    top: 51.5%;
+    left: 16%;
+    width: 68%;
+    color: #4d5876;
+    font-size: 9px;
+    line-height: 1.25;
+    text-wrap: balance;
+}
+
+.free-ticket-error-44__copy--description {
+    top: 55.2%;
+    left: 17%;
+    width: 66%;
+}
+
+.free-ticket-error-43__copy--daily-title {
+    top: 64.5%;
+    left: 36%;
+    width: 47%;
+    color: #074dc7;
+    font-size: 10px;
+    font-weight: 900;
+    line-height: 1.05;
+    text-align: left;
+}
+
+.free-ticket-error-43__copy--daily-description {
+    top: 69.2%;
+    left: 36%;
+    width: 47%;
+    color: #44516e;
+    font-size: 7px;
+    line-height: 1.15;
+    text-align: left;
+}
+
+.free-ticket-error-43__copy--buy,
+.free-ticket-error-43__copy--close,
+.free-ticket-error-44__copy--buy,
+.free-ticket-error-44__copy--close {
+    top: 79.8%;
+    display: flex;
+    height: 9.4%;
+    align-items: center;
+    justify-content: center;
+    font-size: 13px;
+    font-weight: 900;
+    line-height: 1;
+}
+
+.free-ticket-error-43__copy--buy,
+.free-ticket-error-44__copy--buy {
+    left: 12.3%;
+    width: 36.8%;
+    color: #fff;
+}
+
+.free-ticket-error-43__copy--close,
+.free-ticket-error-44__copy--close {
+    left: 51.1%;
+    width: 35.9%;
+    color: #0843ac;
+}
+
+.free-ticket-error-44__copy--buy {
+    left: 10.9%;
+    width: 38%;
+}
+
+.free-ticket-error-44__copy--close {
+    left: 51.4%;
+    width: 37.8%;
+}
+
+.free-ticket-error-43__copy--footer,
+.free-ticket-error-44__copy--footer {
+    top: 92.2%;
+    left: 23%;
+    width: 65%;
+    color: #133b7f;
+    font-size: 8px;
+    line-height: 1.2;
+}
+
+.free-ticket-error-44__copy--badge {
+    top: 14%;
+    left: 30%;
+    width: 30%;
+    color: #fff;
+    font-size: 18px;
+    font-weight: 900;
+    line-height: 1.05;
+    text-transform: uppercase;
+    transform: rotate(-4deg);
+}
+
+.free-ticket-error-44__copy--chance {
+    top: 67.2%;
+    left: 34%;
+    width: 46%;
+    color: #44516e;
+    font-size: 8px;
+    line-height: 1.15;
+    text-wrap: balance;
+}
+
+.free-ticket-error-44__copy--prize {
+    top: 71.8%;
+    left: 34%;
+    width: 46%;
+    color: #1353c7;
+    font-size: 15px;
+    font-weight: 900;
+    white-space: nowrap;
+}
+
 .free-ticket-error-43__action,
 .free-ticket-error-44__action {
     position: absolute;
@@ -185,6 +343,13 @@ body.free-ticket-result-open {
     height: 8.8%;
 }
 
+.free-ticket-error-44__action--buy {
+    top: 79.8%;
+    left: 10.9%;
+    width: 38%;
+    height: 9.4%;
+}
+
 .free-ticket-error-43__action--close,
 .free-ticket-error-44__action--close {
     top: 79.4%;
@@ -193,6 +358,13 @@ body.free-ticket-result-open {
     height: 8.8%;
 }
 
+.free-ticket-error-44__action--close {
+    top: 79.8%;
+    left: 51.4%;
+    width: 37.8%;
+    height: 9.4%;
+}
+
 .free-ticket-error-43__action:focus-visible,
 .free-ticket-error-44__action:focus-visible {
     outline: 3px solid #ffd447;
@@ -240,6 +412,96 @@ body.free-ticket-result-open {
     object-fit: contain;
 }
 
+.free-ticket-result__copy--badge {
+    top: 12%;
+    left: 34%;
+    width: 32%;
+    color: #fff4a1;
+    font-size: 20px;
+    font-weight: 900;
+    line-height: .95;
+    text-transform: uppercase;
+    transform: rotate(-5deg);
+}
+
+.free-ticket-result__copy--title {
+    top: 41.5%;
+    left: 16%;
+    width: 68%;
+    color: #061f69;
+    font-size: 22px;
+    font-weight: 900;
+    line-height: 1.05;
+}
+
+.free-ticket-result__copy--received {
+    top: 50.5%;
+    left: 25%;
+    width: 50%;
+    color: #4d5876;
+    font-size: 9px;
+}
+
+.free-ticket-result__copy--ticket {
+    top: 54.2%;
+    left: 18%;
+    width: 64%;
+    color: #d60021;
+    font-size: 15px;
+    font-weight: 900;
+}
+
+.free-ticket-result__copy--chance {
+    top: 64.2%;
+    left: 31%;
+    width: 52%;
+    color: #4d5876;
+    font-size: 7.5px;
+    line-height: 1.1;
+}
+
+.free-ticket-result__copy--prize {
+    top: 70.2%;
+    left: 31%;
+    width: 52%;
+    color: #d00020;
+    font-size: 15px;
+    font-weight: 900;
+    white-space: nowrap;
+}
+
+.free-ticket-result__copy--use,
+.free-ticket-result__copy--later {
+    top: 79.4%;
+    display: flex;
+    height: 10.1%;
+    align-items: center;
+    justify-content: center;
+    font-size: 13px;
+    font-weight: 900;
+    line-height: 1;
+}
+
+.free-ticket-result__copy--use {
+    left: 9.2%;
+    width: 39.2%;
+    color: #fff;
+}
+
+.free-ticket-result__copy--later {
+    left: 51%;
+    width: 39.6%;
+    color: #0843ac;
+}
+
+.free-ticket-result__copy--validity {
+    top: 93.3%;
+    left: 25%;
+    width: 65%;
+    color: #133b7f;
+    font-size: 8px;
+}
+
 .free-ticket-result__action {
     position: absolute;
     z-index: 2;
@@ -281,6 +543,20 @@ body.free-ticket-result-open {
     .free-ticket-popup {
         right: 8px;
     }
+
+    .free-ticket-error-43__copy--title,
+    .free-ticket-error-44__copy--title {
+        font-size: 16px;
+    }
+
+    .free-ticket-result__copy--title {
+        font-size: 20px;
+    }
+
+    .free-ticket-error-44__copy--badge,
+    .free-ticket-result__copy--badge {
+        font-size: 16px;
+    }
 }
 
 @media (prefers-reduced-motion: no-preference) {