student 2 روز پیش
والد
کامیت
134b7e0040
100فایلهای تغییر یافته به همراه8300 افزوده شده و 839 حذف شده
  1. BIN
      2026_04_23_15_58 - Copy.xlsx
  2. BIN
      2026_04_23_15_58.xlsx
  3. BIN
      NCM_CR_Open_connection_for_Mega Lotto service.doc
  4. 1 1
      website/Areas/LotteryV2/Controllers/HomeController.cs
  5. 6 7
      website/Areas/LotteryV2/Views/Home/Index.cshtml
  6. 1016 0
      website/Areas/Millions/Controllers/HomeController.cs
  7. 1418 0
      website/Areas/Millions/Views/Home/BuyTicket.cshtml
  8. 87 0
      website/Areas/Millions/Views/Home/FAQ.cshtml
  9. 320 0
      website/Areas/Millions/Views/Home/GameHome.cshtml
  10. 308 0
      website/Areas/Millions/Views/Home/History.cshtml
  11. 148 0
      website/Areas/Millions/Views/Home/HowToPlay.cshtml
  12. 146 0
      website/Areas/Millions/Views/Home/More.cshtml
  13. 244 0
      website/Areas/Millions/Views/Home/Profile.cshtml
  14. 231 0
      website/Areas/Millions/Views/Home/Results.cshtml
  15. 262 0
      website/Areas/Millions/Views/Home/Rule.cshtml
  16. 592 0
      website/Areas/Millions/Views/Home/TransferWinMoney.cshtml
  17. 145 0
      website/Areas/Millions/Views/Home/_TermResultHistoryGrouped.cshtml
  18. 62 0
      website/Areas/Millions/Views/Home/_TermResultHistoryV2.cshtml
  19. 153 0
      website/Areas/Millions/Views/Home/_TermUserTicketHistory.cshtml
  20. 47 0
      website/Areas/Millions/Views/Shared/_BottomNavbar.cshtml
  21. 77 0
      website/Areas/Millions/Views/Shared/_Layout.cshtml
  22. 4 0
      website/Areas/Millions/Views/_ViewImports.cshtml
  23. 4 0
      website/Areas/Millions/Views/_ViewStart.cshtml
  24. 5 1
      website/Common/Constants.cs
  25. 1031 291
      website/Languages/Lang.Designer.cs
  26. 280 34
      website/Languages/Lang.fr.resx
  27. 227 227
      website/Languages/Lang.resx
  28. 129 124
      website/Languages/Question.Designer.cs
  29. 151 154
      website/Languages/Question.resx
  30. 70 0
      website/wwwroot/Millions/css/buy-ticket.css
  31. 45 0
      website/wwwroot/Millions/css/faq.css
  32. 205 0
      website/wwwroot/Millions/css/history.css
  33. 10 0
      website/wwwroot/Millions/css/howtoplay.css
  34. 10 0
      website/wwwroot/Millions/css/more.css
  35. 299 0
      website/wwwroot/Millions/css/results.css
  36. 122 0
      website/wwwroot/Millions/css/rule.css
  37. 206 0
      website/wwwroot/Millions/css/site.css
  38. BIN
      website/wwwroot/Millions/img/ChooseApp/asset_ball.png
  39. BIN
      website/wwwroot/Millions/img/ChooseApp/gold_bag.png
  40. BIN
      website/wwwroot/Millions/img/ChooseApp/logo.png
  41. BIN
      website/wwwroot/Millions/img/ChooseApp/main_bg.png
  42. BIN
      website/wwwroot/Millions/img/ChooseApp/money_stack.png
  43. 2 0
      website/wwwroot/Millions/img/Rectangle 132.svg
  44. BIN
      website/wwwroot/Millions/img/ball_10.png
  45. BIN
      website/wwwroot/Millions/img/ball_20.png
  46. BIN
      website/wwwroot/Millions/img/ball_3.png
  47. BIN
      website/wwwroot/Millions/img/ball_86.png
  48. BIN
      website/wwwroot/Millions/img/ball_88.png
  49. BIN
      website/wwwroot/Millions/img/ball_99.png
  50. BIN
      website/wwwroot/Millions/img/banner1.png
  51. BIN
      website/wwwroot/Millions/img/banner2.png
  52. BIN
      website/wwwroot/Millions/img/banner3.png
  53. BIN
      website/wwwroot/Millions/img/big_text.png
  54. BIN
      website/wwwroot/Millions/img/bigsmall/ball_1_big.png
  55. BIN
      website/wwwroot/Millions/img/bigsmall/ball_42_dark.png
  56. BIN
      website/wwwroot/Millions/img/bigsmall/ball_54_dark.png
  57. BIN
      website/wwwroot/Millions/img/bigsmall/ball_5_blue.png
  58. BIN
      website/wwwroot/Millions/img/bigsmall/ball_88_big.png
  59. BIN
      website/wwwroot/Millions/img/bigsmall/ball_8_pink.png
  60. BIN
      website/wwwroot/Millions/img/bigsmall/bg_curve.png
  61. BIN
      website/wwwroot/Millions/img/bigsmall/card_big_full.png
  62. BIN
      website/wwwroot/Millions/img/bigsmall/card_small_full.png
  63. BIN
      website/wwwroot/Millions/img/bigsmall/light_effect_1.png
  64. BIN
      website/wwwroot/Millions/img/bigsmall/light_effect_2.png
  65. BIN
      website/wwwroot/Millions/img/bigsmall/select_btn.png
  66. BIN
      website/wwwroot/Millions/img/bigsmall/selected_btn.png
  67. 1 0
      website/wwwroot/Millions/img/calling.svg
  68. 3 0
      website/wwwroot/Millions/img/chevron_down.svg
  69. BIN
      website/wwwroot/Millions/img/decorations/ellipse_1181.png
  70. BIN
      website/wwwroot/Millions/img/decorations/ellipse_1183.png
  71. BIN
      website/wwwroot/Millions/img/even_text.png
  72. BIN
      website/wwwroot/Millions/img/faq_banner.png
  73. BIN
      website/wwwroot/Millions/img/faq_banner_full.png
  74. BIN
      website/wwwroot/Millions/img/game_card1.png
  75. BIN
      website/wwwroot/Millions/img/game_card2.png
  76. BIN
      website/wwwroot/Millions/img/game_card3.png
  77. BIN
      website/wwwroot/Millions/img/gold.png
  78. BIN
      website/wwwroot/Millions/img/gold_bag.png
  79. BIN
      website/wwwroot/Millions/img/gold_chest.png
  80. BIN
      website/wwwroot/Millions/img/gold_wallet.png
  81. 4 0
      website/wwwroot/Millions/img/help.svg
  82. 21 0
      website/wwwroot/Millions/img/icon_calendar.svg
  83. 23 0
      website/wwwroot/Millions/img/icon_faq.svg
  84. 22 0
      website/wwwroot/Millions/img/icon_history.svg
  85. 24 0
      website/wwwroot/Millions/img/icon_home.svg
  86. 5 0
      website/wwwroot/Millions/img/icon_more.svg
  87. 20 0
      website/wwwroot/Millions/img/icon_rule.svg
  88. BIN
      website/wwwroot/Millions/img/icon_withdraw.png
  89. BIN
      website/wwwroot/Millions/img/illustration3.png
  90. BIN
      website/wwwroot/Millions/img/logo.png
  91. BIN
      website/wwwroot/Millions/img/m1.png
  92. BIN
      website/wwwroot/Millions/img/millionair_guy.png
  93. BIN
      website/wwwroot/Millions/img/modal/fail_icon.png
  94. BIN
      website/wwwroot/Millions/img/modal/otp_coins.png
  95. BIN
      website/wwwroot/Millions/img/modal/otp_glitter.png
  96. 48 0
      website/wwwroot/Millions/img/modal/otp_light_1.svg
  97. 48 0
      website/wwwroot/Millions/img/modal/otp_light_2.svg
  98. BIN
      website/wwwroot/Millions/img/modal/otp_shield.png
  99. 9 0
      website/wwwroot/Millions/img/modal/otp_sparkle_1.svg
  100. 9 0
      website/wwwroot/Millions/img/modal/otp_sparkle_2.svg

BIN
2026_04_23_15_58 - Copy.xlsx


BIN
2026_04_23_15_58.xlsx


BIN
NCM_CR_Open_connection_for_Mega Lotto service.doc


+ 1 - 1
website/Areas/LotteryV2/Controllers/HomeController.cs

@@ -141,7 +141,7 @@ namespace LotteryWebApp.Areas.LotteryV2.Controllers
                 Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
                 UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
 
-                model.termType = termType != null ? termType : Constants.MEGA_LOTO;
+                model.termType = termType != null ? termType : Constants.MEGA_LOTO_Pick10;
                 model.userStatus = userStatus;
                 model.profile = profile;
                 model.listTerm = new List<Term>();

+ 6 - 7
website/Areas/LotteryV2/Views/Home/Index.cshtml

@@ -31,7 +31,7 @@
     <div class="px-3 -mt-24 relative z-30">
         <div class="flex flex-col gap-3">
             <!-- Game Card 1: Basic Pick 10 -->
-            <div class="relative w-full h-[120px] rounded-2xl overflow-hidden shadow-2xl transform active:scale-[0.98] transition-all duration-300 cursor-pointer animate__animated animate__slideInUp card-red" onclick="changeGame()">
+            <div class="relative w-full h-[120px] rounded-2xl overflow-hidden shadow-2xl transform active:scale-[0.98] transition-all duration-300 cursor-pointer animate__animated animate__slideInUp card-red" onclick="changeGame('@Constants.MEGA_LOTO_Pick10', 'LotteryV2')">
                 <!-- 1. Premium Gradient Border -->
                 <div class="absolute inset-0 rounded-2xl border-[1.5px] border-white/40 pointer-events-none z-20"></div>
                 
@@ -64,14 +64,14 @@
                     <!-- Right: Action Section (4 columns) -->
                     <div class="col-span-4 flex flex-col items-center justify-end h-full pb-4 relative cursor-pointer group">
                         <img src="/LotteryV2/img/gold.png" alt="Chest" class="absolute bottom-[40px] w-16 h-18 object-contain filter drop-shadow-lg z-10 group-active:scale-95 transition-transform">
-                        <button class="bg-gradient-to-b from-yellow-300 to-white text-black font-black px-2 w-full max-w-[110px] py-1.5 rounded-[12px] text-[13px] shadow-xl border border-white/50 group-hover:brightness-110 group-active:scale-95 transition-all relative z-0" id="MEGA_LOTO_ID" value="@Constants.MEGA_LOTO">@Lang.rule_play_now</button>
+                        <button class="bg-gradient-to-b from-yellow-300 to-white text-black font-black px-2 w-full max-w-[110px] py-1.5 rounded-[12px] text-[13px] shadow-xl border border-white/50 group-hover:brightness-110 group-active:scale-95 transition-all relative z-0" id="MEGA_LOTO_ID" value="@Constants.MEGA_LOTO_Pick10">@Lang.rule_play_now</button>
                     </div>
                 </div>
             </div>
 
             <!-- Card 2 and 3 commented out by user previously -->
             <!-- Game Card 2: Millionair - Blurred/Faded State -->
-            <div class="card-blue relative w-full h-[120px] rounded-2xl overflow-hidden shadow-md opacity-25 grayscale blur-[1px] pointer-events-none animate__animated animate__slideInUp animate__delay-1s">
+            <div class="card-blue relative w-full h-[120px] rounded-2xl overflow-hidden shadow-md animate__animated animate__slideInUp animate__delay-1s cursor-pointer" onclick="changeGame('@Constants.MEGA_LOTO_Millions', 'Millions')">
                 <!-- 1. Premium Gradient Border -->
                 <div class="absolute inset-0 rounded-2xl border-[1.5px] border-white/20 pointer-events-none z-20"></div>
                 
@@ -98,7 +98,7 @@
                     <!-- Right: Action Section (4 columns) -->
                     <div class="col-span-4 flex flex-col items-center justify-end h-full pb-4 relative px-1">
                         <img src="/LotteryV2/img/money_bag_large.png" alt="Money Bag" class="absolute bottom-[40px] w-16 h-18 object-contain filter drop-shadow-lg z-10">
-                        <button class="bg-gradient-to-b from-yellow-300 to-white text-black font-black px-2 w-full max-w-[110px] py-1.5 rounded-[12px] text-[13px] shadow-xl border border-white/50 group-hover:brightness-110 group-active:scale-95 transition-all relative z-0">@Lang.rule_play_now</button>
+                        <button class="bg-gradient-to-b from-yellow-300 to-white text-black font-black px-2 w-full max-w-[110px] py-1.5 rounded-[12px] text-[13px] shadow-xl border border-white/50 group-hover:brightness-110 group-active:scale-95 transition-all relative z-0" id="MEGA_LOTO_ID" value="@Constants.MEGA_LOTO_Millions">@Lang.rule_play_now</button>
                     </div>
                 </div>
             </div>
@@ -146,9 +146,8 @@
 
 </div>
 <script>
-    function changeGame() {
-        var termType = $("#MEGA_LOTO_ID").val();
-        location.href = subDomain + '@Url.Action("GameHome", "Home", new { area = "LotteryV2" })?termType=' + termType;
+    function changeGame(termType, area) {
+        location.href = subDomain + '/' + area + '/Home/GameHome?termType=' + termType;
     }
 
     function startCountdown() {

+ 1016 - 0
website/Areas/Millions/Controllers/HomeController.cs

@@ -0,0 +1,1016 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Globalization;
+using System.Threading;
+using System.Threading.Tasks;
+using LotteryWebApp.Common;
+using LotteryWebApp.Extensions;
+using LotteryWebApp.Languages;
+using LotteryWebApp.Models;
+using LotteryWebApp.Service;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Newtonsoft.Json;
+using LotteryWebApp.Controllers;
+
+namespace LotteryWebApp.Areas.Millions.Controllers
+{
+    [Area("Millions")]
+    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
+    public class HomeController : BaseController
+    {
+        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
+
+        IConfiguration configuration;
+        private readonly IWebHostEnvironment webHostEnvironment;
+        APIFunctions api = new APIFunctions();
+
+        public HomeController(IConfiguration _configuration, IWebHostEnvironment hostEnvironment)
+        {
+            configuration = _configuration;
+            webHostEnvironment = hostEnvironment;
+        }
+
+        public String GetParameter(String key)
+        {
+            return configuration.GetSection(key).Value;
+        }
+
+        public async Task<IActionResult> Index(
+            string termType,
+            String uuid,
+            String mcuid,
+            String phonenumber,
+            String token
+        )
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+
+                CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
+                String lang = currentCulture.Name;
+
+                String msisdnAuto = null;
+
+                if (!CheckAuthToken())
+                {
+                    if (token != null)
+                    {
+                        AutoLoginRequest autoLoginRequest = new AutoLoginRequest { token = token };
+                        AutoLoginResponse autoLoginResponse = await api.AutoLoginApiAsync(configuration, autoLoginRequest);
+
+                        if (autoLoginResponse.code == Code.SUCCESS_CODE)
+                        {
+                            string msisdnReal = validateMsisdn(autoLoginResponse.data.msisdn.Substring(1));
+                            if (msisdnReal == "") return RedirectToAction("Login", "Account", new { area = "" });
+
+                            CheckAccountRequest checkAccountRequest = new CheckAccountRequest
+                            {
+                                msisdn = msisdnReal,
+                                channel = Constants.WEB_CHANNEL,
+                                language = lang == "en" ? "0" : "1"
+                            };
+                            CheckAccountResponse checkAccountResponse = api.CheckAccountApi(configuration, checkAccountRequest);
+                            if (checkAccountResponse.status == Code.SUCCESS)
+                            {
+                                string tokenGetReal = checkAccountResponse.token;
+                                HttpContext.Session.SetComplexData("msisdn", msisdnReal);
+                                CreateAuthToken();
+                                HttpContext.Session.SetComplexData("token", tokenGetReal);
+
+                                UserGetProfileRequest userGetProfileRequest = new UserGetProfileRequest { users = msisdnReal, token = tokenGetReal };
+                                Profile profileGet = api.UserLoadProfileApi(configuration, userGetProfileRequest);
+                                HttpContext.Session.SetComplexData("profile", profileGet);
+
+                                UserStatusRequest userStatusRequest = new UserStatusRequest { users = msisdnReal, token = tokenGetReal };
+                                UserStatus userStatusGet = api.GetUserStatusApi(configuration, userStatusRequest);
+                                HttpContext.Session.SetComplexData("userStatus", userStatusGet);
+                            }
+                            else
+                            {
+                                return RedirectToAction("Login", "Account", new { area = "" });
+                            }
+                        }
+                    }
+                    else if (uuid != null)
+                    {
+                        String res = await CheckAutoLogin(log, uuid);
+                        if (res != null)
+                        {
+                            dynamic json = JsonConvert.DeserializeObject(res);
+                            if (json["code"] == "200" && json["errorCode"] == "200")
+                            {
+                                msisdnAuto = json["data"]["msisdn"];
+                            }
+                        }
+
+                        String msisdnDetect = validateMsisdn(msisdnAuto.Substring(1));
+                        if (msisdnDetect != "")
+                        {
+                            RegisterRequest request = new RegisterRequest { Msisdn = msisdnDetect };
+                            RegisterResponse reset = api.UserForgotPasswordApi(configuration, request);
+                            if (reset.status == Code.SUCCESS)
+                            {
+                                HttpContext.Session.Remove("regInfos");
+                                HttpContext.Session.SetComplexData("msisdn", msisdnDetect);
+                                return RedirectToAction("Login", "Account", new { area = "", step = 2 });
+                            }
+                        }
+                        return RedirectToAction("Login", "Account", new { area = "" });
+                    }
+                    else if (phonenumber != null)
+                    {
+                        // simplified or same logic as original
+                        return RedirectToAction("Login", "Account", new { area = "" });
+                    }
+                    else
+                    {
+                        // If no token/uuid and not auth, verify existing session token
+                        var savedToken = HttpContext.Session.GetString("token");
+                        if (string.IsNullOrEmpty(savedToken))
+                        {
+                            return RedirectToAction("Login", "Account", new { area = "" });
+                        }
+                    }
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+
+                model.termType = termType != null ? termType : Constants.Millions_CODE;
+                model.userStatus = userStatus;
+                model.profile = profile;
+                model.listTerm = new List<Term>();
+
+                String tokenGet = HttpContext.Session.GetComplexData<String>("token");
+                String fromDate = DateTime.Now.AddDays(-2).ToString("dd/MM/yyyy");
+                String toDate = DateTime.Now.ToString("dd/MM/yyyy");
+
+                // Get Top Winner
+                GetTopWinnerRequest getTopWinnerRequest = new GetTopWinnerRequest { type = lang == "en" ? "0" : "1", token = tokenGet };
+                GetTopWininerResponse getTopWininerResponse = api.GetTopWinnerApi(configuration, getTopWinnerRequest);
+                if (getTopWininerResponse.responseCode == Code.SUCCESS)
+                {
+                    model.topWinner = getTopWininerResponse.list;
+                    HttpContext.Session.SetComplexData("topWinner", model.topWinner);
+                }
+
+                // Get Term Results
+                //ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
+                //{
+                //    gameId = model.termType,
+                //    token = tokenGet,
+                //    type = Constants.TERM_HAS_NOT_RESULT_TYPE,
+                //    order = Constants.DECS,
+                //    fromDate = fromDate,
+                //    toDate = toDate,
+                //    rowsOnPage = Constants.ROW_ON_PAGE,
+                //    seqPage = "1",
+                //    id = Constants.ALL_DATA
+                //};
+
+                //ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
+                //if (result.responseCode == Code.SESSION_EXPIRED)
+                //{
+                //     return RedirectToAction("Login", "Account", new { area = "" });
+                //}
+                //else if (result.responseCode == Code.SUCCESS)
+                //{
+                //    model.listTerm = result.listTerm;
+                //}
+
+                if (!string.IsNullOrEmpty(termType))
+                {
+                     HttpContext.Session.SetString("termType", termType);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return RedirectToAction("Login", "Account", new { area = "" });
+            }
+
+            return View(model);
+        }
+
+        public async Task<IActionResult> GameHome(string termType)
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+
+                model.termType = termType != null ? termType : Constants.Millions_CODE;
+                model.userStatus = userStatus;
+                model.profile = profile;
+                model.listTerm = new List<Term>();
+
+                if (!string.IsNullOrEmpty(termType))
+                {
+                     HttpContext.Session.SetString("termType", termType);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+            }
+            return View(model);
+        }
+
+        public async Task<IActionResult> FAQ()
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                model.userStatus = userStatus;
+                model.profile = profile;
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+            }
+            return View(model);
+        }
+
+        public IActionResult More()
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                model.userStatus = userStatus;
+                model.profile = profile;
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+            }
+            return View(model);
+        }
+
+        public IActionResult Profile()
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                model.userStatus = userStatus;
+                model.profile = profile;
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+            }
+            return View(model);
+        }
+
+        [HttpPost]
+        public IActionResult UserUpdateProfile(string fullName, string birthday)
+        {
+            try
+            {
+                string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                string token = HttpContext.Session.GetComplexData<string>("token");
+
+                if (string.IsNullOrEmpty(msisdn) || string.IsNullOrEmpty(token))
+                {
+                    return Json(new { status = Code.ERROR, message = "Session expired" });
+                }
+
+                string birthdayFormat = birthday;
+                if (!string.IsNullOrEmpty(birthday) && birthday.Contains("-"))
+                {
+                    try {
+                        birthdayFormat = DateTime.ParseExact(birthday, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy");
+                    } catch { }
+                }
+
+                UserUpdateProfileRequest request = new UserUpdateProfileRequest
+                {
+                    users = msisdn,
+                    token = token,
+                    fullName = fullName,
+                    birthday = birthdayFormat
+                };
+
+                UserUpdateProfileResponse response = api.UserUpdateProfileApi(configuration, request);
+                
+                if (response.status == Code.SUCCESS)
+                {
+                    // Update session profile
+                    Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                    if (profile != null)
+                    {
+                        profile.fullName = fullName;
+                        profile.birthday = birthdayFormat;
+                        HttpContext.Session.SetComplexData("profile", profile);
+                    }
+                }
+
+                return Json(response);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { status = Code.ERROR, message = ex.Message });
+            }
+        }
+
+        public IActionResult Rule()
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                model.userStatus = userStatus;
+                model.profile = profile;
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+            }
+            return View(model);
+        }
+
+        public IActionResult HowToPlay()
+        {
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                model.userStatus = userStatus;
+                model.profile = profile;
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+            }
+            return View(model);
+        }
+
+        public IActionResult Results(string termType, string fromDate, string toDate)
+        {
+            TermResultHistoryModel model = new TermResultHistoryModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                
+                model.termType = termType != null ? termType : (HttpContext.Session.GetString("termType") ?? Constants.Millions_CODE);
+                
+                // Set default dates if not provided (same as root implementation)
+                string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
+                string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
+
+                model.fromDate = fromFormatted;
+                model.toDate = toFormatted;
+
+                // Load initial results
+                ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
+                {
+                    gameId = model.termType,
+                    token = token,
+                    type = Constants.TERM_HAS_RESULT_TYPE,
+                    order = Constants.DECS,
+                    fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
+                    toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
+                    rowsOnPage = Constants.ROW_ON_PAGE,
+                    seqPage = "1",
+                    id = Constants.ALL_DATA
+                };
+
+                ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
+                if (result.responseCode == Code.SUCCESS)
+                {
+                    model.listTerm = result.listTerm ?? new List<Term>();
+                }
+                else
+                {
+                    model.listTerm = new List<Term>();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                model.listTerm = new List<Term>();
+            }
+            return View(model);
+        }
+
+        public IActionResult TermResultHistory(string termType, string fromDate, string toDate)
+        {
+            TermResultHistoryModel model = new TermResultHistoryModel();
+            try
+            {
+               var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
+
+                string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
+                string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
+
+                model.termType = termType;
+                model.fromDate = fromFormatted;
+                model.toDate = toFormatted;
+
+                ResultOfTermRequest request = new ResultOfTermRequest
+                {
+                    gameId = termType,
+                    token = token,
+                    type = Constants.TERM_HAS_RESULT_TYPE,
+                    order = Constants.DECS,
+                    fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
+                    toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
+                    rowsOnPage = Constants.ROW_ON_PAGE,
+                    seqPage = "1",
+                    id = Constants.ALL_DATA
+                };
+
+                ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
+                if (result.responseCode == Code.SUCCESS)
+                {
+                    model.listTerm = result.listTerm ?? new List<Term>();
+                }
+                else
+                {
+                    model.listTerm = new List<Term>();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                model.listTerm = new List<Term>();
+            }
+            return PartialView("_TermResultHistoryV2", model);
+        }
+
+        public IActionResult TermResultHistoryGrouped(string fromDate, string toDate)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
+
+                string fromFormatted = fromDate != null ? fromDate : DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
+                string toFormatted = toDate != null ? toDate : DateTime.Now.ToString("yyyy-MM-dd");
+
+                string[] gameIds = { Constants.Millions_CODE };
+                var allTerms = new List<Term>();
+
+                foreach (var gid in gameIds)
+                {
+                    ResultOfTermRequest request = new ResultOfTermRequest
+                    {
+                        gameId = gid,
+                        token = token,
+                        type = Constants.TERM_HAS_RESULT_TYPE,
+                        order = Constants.DECS,
+                        fromDate = DateTime.ParseExact(fromFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
+                        toDate = DateTime.ParseExact(toFormatted, "yyyy-MM-dd", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy"),
+                        rowsOnPage = "50", 
+                        seqPage = "1",
+                        id = Constants.ALL_DATA
+                    };
+
+                    ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
+                    if (result.responseCode == Code.SUCCESS && result.listTerm != null)
+                    {
+                        allTerms.AddRange(result.listTerm);
+                    }
+                }
+
+                // Group by date part of date_random
+                var grouped = allTerms.GroupBy(x => {
+                    DateTime dt;
+                    if (DateTime.TryParse(x.date_random, out dt))
+                        return dt.Date;
+                    return DateTime.MinValue;
+                })
+                .Where(g => g.Key != DateTime.MinValue)
+                .OrderByDescending(g => g.Key)
+                .ToList();
+
+                return PartialView("_TermResultHistoryGrouped", grouped);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return PartialView("_TermResultHistoryGrouped", new List<IGrouping<DateTime, Term>>());
+            }
+        }
+
+        public IActionResult History(string termType, string status, string seqPage)
+        {
+            UserTicketHistoryModel model = new UserTicketHistoryModel();
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                
+                model.termType = termType ?? Constants.Millions_CODE;
+                model.status = status ?? Constants.ALL_DATA; // -1 for all, or 0, 1, 2
+                model.seqPage = seqPage ?? "1";
+
+                UserTicketRequest request = new UserTicketRequest
+                {
+                    gameId = model.termType,
+                    msisdn = msisdn,
+                    token = token,
+                    type = model.status,
+                    order = Constants.DECS,
+                    rowsOnPage = Constants.ROW_ON_PAGE,
+                    seqPage = model.seqPage
+                };
+
+                UserTicketResponse result = api.GetUserTicketApi(configuration, request);
+                if (result.responseCode == Code.SUCCESS)
+                {
+                    model.listTicket = result.listTicket ?? new List<Ticket>();
+                    model.totalPage = result.totalPage;
+                }
+                else
+                {
+                    model.listTicket = new List<Ticket>();
+                    model.totalPage = "0";
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                model.listTicket = new List<Ticket>();
+            }
+            return View(model);
+        }
+
+        public IActionResult TermUserTicketHistory(string termType, string status, string seqPage)
+        {
+            UserTicketHistoryModel model = new UserTicketHistoryModel();
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token)) return Json(new { status = "error", message = "Session expired" });
+
+                string msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+
+                model.termType = termType;
+                model.status = status;
+                model.seqPage = seqPage ?? "1";
+
+                UserTicketRequest request = new UserTicketRequest
+                {
+                    gameId = termType,
+                    msisdn = msisdn,
+                    token = token,
+                    type = status,
+                    order = Constants.DECS,
+                    rowsOnPage = Constants.ROW_ON_PAGE,
+                    seqPage = model.seqPage
+                };
+
+                UserTicketResponse result = api.GetUserTicketApi(configuration, request);
+                if (result.responseCode == Code.SUCCESS)
+                {
+                    model.listTicket = result.listTicket ?? new List<Ticket>();
+                    model.totalPage = result.totalPage;
+                }
+                else
+                {
+                    model.listTicket = new List<Ticket>();
+                    model.totalPage = "0";
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                model.listTicket = new List<Ticket>();
+            }
+            return PartialView("_TermUserTicketHistory", model);
+        }
+
+        [HttpPost]
+        [ValidateAntiForgeryToken]
+        public IActionResult TermResult(string termType)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
+
+                string lang = CultureInfo.CurrentCulture.Name;
+                string langValue = (lang.StartsWith("en") || lang.StartsWith("fr")) ? "0" : "1";
+
+                ResultOfTermRequest request = new ResultOfTermRequest
+                {
+                    gameId = termType,
+                    language = langValue,
+                    token = token,
+                    type = Constants.TERM_HAS_NOT_RESULT_TYPE,
+                    order = Constants.DECS,
+                    rowsOnPage = "5",
+                    seqPage = "1",
+                    id = Constants.ALL_DATA
+                };
+
+                ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
+                return Json(result);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
+            }
+        }
+
+        [HttpPost]
+        public IActionResult ConfirmTicketData([FromBody] ConfirmTicketDataRequest request)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
+
+                request.token = token;
+                request.msisdn = msisdn;
+                request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
+                request.requestId = Guid.NewGuid().ToString();
+
+                // DEBUG: Log request data
+                var ticketDebug = request.ticket != null ? string.Join("; ", request.ticket.Select(t => $"code={t.code}, money={t.money}")) : "NULL";
+                log.Info($"[ConfirmTicketData] gameId={request.gameId}, msisdn={request.msisdn}, tickets=[{ticketDebug}]");
+
+                ConfirmTicketDataResponse response = api.ConfirmTicketDataApi(configuration, request);
+                
+                // DEBUG: Log response
+                log.Info($"[ConfirmTicketData] Response: code={response.responseCode}, msg={response.responseMessage}, transId={response.transId}");
+                
+                return Json(response);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
+            }
+        }
+
+        [HttpPost]
+        public IActionResult ConfirmOTP([FromBody] ConfirmOTPRequest request)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
+
+                request.token = token;
+                request.msisdn = msisdn;
+
+                ConfirmOTPResponse response = api.ConfirmOTPApi(configuration, request);
+                return Json(response);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
+            }
+        }
+
+        [HttpPost]
+        public IActionResult SendOTP()
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
+
+                SendOTPRequest request = new SendOTPRequest
+                {
+                    msisdn = msisdn,
+                    token = token,
+                    language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
+                    channel = configuration.GetSection("channel").Value
+                };
+
+                SendOTPResponse response = api.SendOTPApi(configuration, request);
+                return Json(response);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
+            }
+        }
+
+        [HttpPost]
+        public IActionResult ConfirmBuyingTicketV2([FromBody] ConfirmBuyingTicketRequest request)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
+
+                // Step 1: Verify OTP first
+                ConfirmOTPRequest otpRequest = new ConfirmOTPRequest
+                {
+                    otp = request.paymentCode,
+                    msisdn = msisdn,
+                    token = token,
+                    language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
+                    channel = configuration.GetSection("channel").Value
+                };
+                ConfirmOTPResponse otpResponse = api.ConfirmOTPApi(configuration, otpRequest);
+
+                if (otpResponse.responseCode != Code.SUCCESS)
+                {
+                    return Json(new { responseCode = otpResponse.responseCode, responseMessage = otpResponse.responseMessage });
+                }
+
+                // Step 2: Proceed to Confirm buying
+                request.token = token;
+                request.msisdn = msisdn;
+                request.requestId = Guid.NewGuid().ToString();
+                request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
+                request.channel = configuration.GetSection("channel").Value;
+
+                ConfirmBuyingTicketResponse response = api.ConfirmBuyingTicketApi(configuration, request);
+                if (response.responseCode == Code.SUCCESS)
+                {
+                    UpdateUserStatus(msisdn, token);
+                }
+                return Json(response);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
+            }
+        }
+
+        [HttpPost]
+        public IActionResult ConfirmBuyingTicket([FromBody] ConfirmBuyingTicketRequest request)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                if (string.IsNullOrEmpty(token)) return Json(new { responseCode = Code.SESSION_EXPIRED, responseMessage = "Session expired" });
+
+                request.token = token;
+                request.msisdn = msisdn;
+                request.requestId = Guid.NewGuid().ToString();
+                request.language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1";
+                request.channel = configuration.GetSection("channel").Value;
+
+                ConfirmBuyingTicketResponse response = api.ConfirmBuyingTicketApi(configuration, request);
+                if (response.responseCode == Code.SUCCESS)
+                {
+                    UpdateUserStatus(msisdn, token);
+                }
+                return Json(new { 
+                    responseCode = response.responseCode, 
+                    responseMessage = response.responseMessage,
+                    transId = response.transId,
+                    orderId = response.orderId,
+                    userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus")
+                });
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { responseCode = Code.ERROR, responseMessage = ex.Message });
+            }
+        }
+
+        public IActionResult BuyTicket(string termType)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                if (string.IsNullOrEmpty(token) && !User.Identity.IsAuthenticated)
+                {
+                    return RedirectToAction("Login", "Account", new { area = "" });
+                }
+
+                HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+                model.termType = termType ?? Constants.Millions_CODE;
+
+                Profile profile = HttpContext.Session.GetComplexData<Profile>("profile");
+                UserStatus userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+                model.userStatus = userStatus;
+                model.profile = profile;
+                
+                // Get active term
+                ResultOfTermRequest request = new ResultOfTermRequest
+                {
+                    gameId = model.termType,
+                    token = token,
+                    type = Constants.TERM_HAS_NOT_RESULT_TYPE,
+                    order = Constants.DECS,
+                    rowsOnPage = "1",
+                    seqPage = "1",
+                    id = Constants.ALL_DATA
+                };
+
+                ResultOfTermResponse result = api.GetResultOfTermApi(configuration, request);
+                if (result.responseCode == Code.SUCCESS && result.listTerm != null && result.listTerm.Count > 0)
+                {
+                    model.listTerm = result.listTerm;
+                }
+                else
+                {
+                    model.listTerm = new List<Term>();
+                }
+
+                if (model.termType == Constants.PIC10_BIGSMALL_CODE || model.termType == Constants.PIC10_ODDEVEN_CODE)
+                {
+                    ResultOfTermRequest pastRequest = new ResultOfTermRequest
+                    {
+                        gameId = model.termType,
+                        token = token,
+                        type = Constants.TERM_HAS_RESULT_TYPE,
+                        order = Constants.DECS,
+                        fromDate = DateTime.Now.AddDays(-10).ToString("dd/MM/yyyy"), 
+                        toDate = DateTime.Now.ToString("dd/MM/yyyy"),
+                        rowsOnPage = "5",
+                        seqPage = "1",
+                        id = Constants.ALL_DATA
+                    };
+
+                    ResultOfTermResponse pastResult = api.GetResultOfTermApi(configuration, pastRequest);
+                    if (pastResult.responseCode == Code.SUCCESS && pastResult.listTerm != null)
+                    {
+                        var pastTerms = pastResult.listTerm.Take(5).ToList();
+                        pastTerms.Reverse(); // Display chronological order
+                        ViewBag.PastTerms = pastTerms;
+                    }
+                    else
+                    {
+                        ViewBag.PastTerms = new List<Term>();
+                    }
+                }
+
+                return View(model);
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return RedirectToAction("GameHome", new { termType = termType });
+            }
+        }
+
+        public IActionResult TransferWinMoney()
+        {
+            if (!CheckAuthToken())
+            {
+                return RedirectToAction("Login", "Account", new { area = "" });
+            }
+            HomeIndex_ViewModel model = new HomeIndex_ViewModel();
+            model.profile = HttpContext.Session.GetComplexData<Profile>("profile");
+            model.userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus");
+            return View(model);
+        }
+
+        [HttpPost]
+        public IActionResult ConfirmTransfer(string otp, string phone, string amount)
+        {
+            try
+            {
+                var token = HttpContext.Session.GetComplexData<string>("token");
+                var msisdn = HttpContext.Session.GetComplexData<string>("msisdn");
+                if (string.IsNullOrEmpty(token)) return Json(new { status = Code.SESSION_EXPIRED, message = "Session expired" });
+
+                // Step 1: Verify OTP
+                ConfirmOTPRequest otpRequest = new ConfirmOTPRequest
+                {
+                    otp = otp,
+                    msisdn = msisdn,
+                    token = token,
+                    language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
+                    channel = configuration.GetSection("channel").Value
+                };
+                ConfirmOTPResponse otpResponse = api.ConfirmOTPApi(configuration, otpRequest);
+
+                if (otpResponse.responseCode != Code.SUCCESS)
+                {
+                    return Json(new { status = otpResponse.responseCode, message = otpResponse.responseMessage });
+                }
+
+                // Step 2: If OTP success, call Transfer Money Api
+                TransferMoneyRequest xferRequest = new TransferMoneyRequest
+                {
+                    msisdn = msisdn,
+                    msisdnReceive = phone,
+                    money = amount,
+                    otp = otp,
+                    token = token,
+                    channelPayment = Constants.BASIC_WALLET_TRANSFER,
+                    language = CultureInfo.CurrentCulture.Name.StartsWith("en") ? "0" : "1",
+                    channel = configuration.GetSection("channel").Value
+                };
+
+                TransferMoneyResponse xferResponse = api.TransferMoneyApi(configuration, xferRequest);
+
+                if (xferResponse.responseCode == Code.SUCCESS)
+                {
+                    UpdateUserStatus(msisdn, token);
+                }
+
+                return Json(new { 
+                    status = xferResponse.responseCode, 
+                    message = xferResponse.responseMessage,
+                    paymentCode = xferResponse.paymentCode,
+                    responseCode = xferResponse.responseCode,
+                    userStatus = HttpContext.Session.GetComplexData<UserStatus>("userStatus")
+                });
+            }
+            catch (Exception ex)
+            {
+                log.Error(ex);
+                return Json(new { status = Code.ERROR, message = ex.Message });
+            }
+        }
+
+        private void UpdateUserStatus(string msisdn, string token)
+        {
+            try
+            {
+                UserStatusRequest userStatusRequest = new UserStatusRequest { users = msisdn, token = token };
+                UserStatus userStatusGet = api.GetUserStatusApi(configuration, userStatusRequest);
+                if (userStatusGet != null)
+                {
+                    HttpContext.Session.SetComplexData("userStatus", userStatusGet);
+                }
+            }
+            catch (Exception ex)
+            {
+                log.Error("UpdateUserStatus Error: " + ex.Message);
+            }
+        }
+
+        public IActionResult Logout()
+        {
+            ClearCache();
+            return Redirect(GetParameter(Constants.SUB_DOMAIN) + "/Account/Login");
+        }
+    }
+}
+

+ 1418 - 0
website/Areas/Millions/Views/Home/BuyTicket.cshtml

@@ -0,0 +1,1418 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = "Millions - Buy Ticket";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+    var currentTerm = Model.listTerm?.FirstOrDefault();
+}
+@using LotteryWebApp.Languages;
+@using LotteryWebApp.Common;
+
+<link rel="stylesheet" href="/Millions/css/buy-ticket.css" />
+
+<link rel="stylesheet" href="/Millions/css/buy-ticket.css" />
+
+@if (Model.termType == Constants.PIC10_BIGSMALL_CODE || Model.termType == Constants.PIC10_ODDEVEN_CODE)
+{
+    var isBigSmall = Model.termType == Constants.PIC10_BIGSMALL_CODE;
+    var themeColor = isBigSmall ? "#0A9800" : "#AA3DC8";
+    var gameTitle = isBigSmall ? Lang.millions_big_small : Lang.millions_odd_even;
+    var prizeAmount = isBigSmall ? "100.000" : "200.000";
+    
+    <!-- ==================== CARD SELECTION GAME UI (BIG/SMALL or ODD/EVEN) ==================== -->
+    <div class="main-container animate__animated animate__fadeIn bg-[#F5F5F5] h-screen flex flex-col font-bricolage overflow-hidden max-w-[414px] mx-auto relative">
+        <!-- Header -->
+        <div class="w-full py-3 px-4 text-white flex items-center justify-between sticky top-0 z-[60]" style="background: @themeColor;">
+            <button onclick="location.href='@Url.Action("GameHome", "Home")'" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-all">
+                <i class="fa-solid fa-arrow-left text-[20px]"></i>
+            </button>
+            <span class="font-[800] text-[18px] absolute left-1/2 -translate-x-1/2 whitespace-nowrap">
+                @gameTitle
+            </span>
+            <div class="w-8"></div>
+        </div>
+
+        <!-- Sticky Term Info sub-header -->
+        <div class="p-4 py-2.5 bg-white flex items-center justify-between shadow-sm sticky top-[52px] z-50">
+            <div class="flex items-center gap-2 border border-[#E5E7EB] rounded-lg px-3 py-1.5 bg-gray-50">
+                <i class="fa-regular fa-calendar text-[[@themeColor]] text-sm" style="color: @themeColor"></i>
+                <span class="text-[12px] font-bold text-gray-700">@DateTime.Now.ToString("dddd, MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)</span>
+            </div>
+            <div class="flex items-center gap-1 ml-4 flex-1 justify-end">
+                <span class="text-[12px] font-bold text-gray-400">@Lang.millions_round</span>
+                <span class="text-[18px] font-black text-brown-main">#@(currentTerm?.id ?? "123")</span>
+            </div>
+        </div>
+
+        <!-- Scrollable Content Area -->
+        <div class="flex-1 overflow-y-auto bg-white pb-40" id="bsContent">
+            <!-- Results for the last 5 days -->
+            <div class="px-5 pt-4 pb-2">
+                <h3 class="text-[17px] font-bold text-black text-center mb-3">Results for the last 5 days</h3>
+                <div id="last5Results" class="flex justify-between gap-1.5 px-1">
+                    @{
+                        var pastTerms = ViewBag.PastTerms as List<LotteryWebApp.Service.Term> ?? new List<LotteryWebApp.Service.Term>();
+                        foreach (var term in pastTerms) {
+                            var rawResult = (term.result ?? "").Trim().ToUpper();
+                            var dateStr = "--";
+                            DateTime dt;
+                            if (DateTime.TryParse(term.date_random, out dt)) {
+                                dateStr = dt.ToString("MMM dd", System.Globalization.CultureInfo.InvariantCulture);
+                            }
+                            
+                            var resKey = rawResult;
+                            var resTitle = rawResult;
+                            if (isBigSmall) {
+                                if (rawResult == "S") { resKey = "Small"; resTitle = Lang.Small; }
+                                else if (rawResult == "B") { resKey = "Big"; resTitle = Lang.Big; }
+                            } else {
+                                if (rawResult == "O") { resKey = "Odd"; resTitle = Lang.Odd; }
+                                else if (rawResult == "E") { resKey = "Even"; resTitle = Lang.Even; }
+                            }
+                            
+                            var resColor = "";
+                            var bgStyle = "background: linear-gradient(136deg, #FFFAE6 0%, #FFE588 100%);";
+                            var textStyle = "-webkit-text-stroke: 0.5px #000;";
+
+                            if (resKey == "NA" || string.IsNullOrEmpty(rawResult)) {
+                                bgStyle = "background: #EAEAEA;";
+                                resTitle = "";
+                                textStyle = "";
+                            } else {
+                                if (isBigSmall) {
+                                    resColor = resKey == "Big" ? "#A2FF00" : "#FF4157";
+                                } else {
+                                    resColor = resKey == "Odd" ? "#FFC700" : "#B33BD0";
+                                }
+                                textStyle += $" color: {resColor};";
+                            }
+                            
+                            <div class="flex flex-col items-center justify-center min-h-[64px] flex-1 rounded-lg py-1.5 border border-gray-200" style="@bgStyle">
+                                <span class="text-[11px] font-bold text-black whitespace-nowrap opacity-70">@dateStr</span>
+                                <span class="text-[22px] font-black leading-tight" style="@textStyle">@resTitle</span>
+                            </div>
+                        }
+                        
+                        for(int r = pastTerms.Count; r < 5; r++) {
+                            <div class="flex flex-col items-center justify-center min-h-[64px] flex-1 rounded-lg py-1.5 border border-gray-200" style="background: #EAEAEA; opacity: 0.7;">
+                                <span class="text-[11px] font-bold text-black whitespace-nowrap opacity-70">--</span>
+                                <span class="text-[22px] font-black leading-tight" style="color: transparent;"></span>
+                            </div>
+                        }
+                    }
+                </div>
+            </div>
+
+            <!-- Selection Cards -->
+            <!-- Selection Cards -->
+            <div class="px-5 pt-4 flex gap-3 h-[245px]">
+                <!-- Card 1 (Big or Odd) -->
+                <div id="cardBig" onclick="selectBigSmall('big')" class="bigsmall-card flex-1 rounded-2xl relative cursor-pointer transition-all duration-300 active:scale-[0.97] border-2 border-transparent overflow-hidden flex flex-col" style="background: linear-gradient(180deg, #FFF7DB 0%, #FFEEB3 100%);">
+                    <img src="/Millions/img/bigsmall/light_effect_1.png" class="absolute top-0 left-0 w-full opacity-60 pointer-events-none" alt="" />
+                    <img src="/Millions/img/bigsmall/light_effect_2.png" class="absolute bottom-12 left-0 w-full opacity-60 pointer-events-none" alt="" />
+                    <div class="flex flex-col items-center pt-4 pb-3 px-3 relative z-10 h-full justify-between">
+                        <div class="flex flex-col items-center w-full">
+                            <div class="h-[34px] flex items-center justify-center">
+                                <div class="text-[40px] font-[800] leading-none" style="-webkit-text-stroke: 1px #000; text-shadow: 1px 2px 2px rgba(0,0,0,0.15); color: @(isBigSmall ? "#A2FF00" : "#FFC700");">@(isBigSmall ? "Big" : "Odd")</div>
+                            </div>
+                            <div class="text-[11px] font-medium text-gray-500 mt-1 h-[28px] text-center leading-tight">
+                                @(isBigSmall ? "13 number from" : "Odd numbers") <br/> <b>@(isBigSmall ? "41-80" : "1, 3, 5, 7, 9")</b>
+                            </div>
+                        </div>
+                        <div class="flex items-center justify-center -space-x-2 my-2">
+                            @if (isBigSmall) {
+                                <img src="/Millions/img/bigsmall/ball_42_dark.png" class="w-12 h-12 relative z-[1]" alt="42" />
+                                <img src="/Millions/img/bigsmall/ball_88_big.png" class="w-16 h-16 relative z-[2]" alt="88" />
+                                <img src="/Millions/img/bigsmall/ball_54_dark.png" class="w-12 h-12 relative z-[1]" alt="54" />
+                            } else {
+                                <img src="/Millions/img/oddeven/ball_3.png" class="w-12 h-12 relative z-[1]" alt="3" />
+                                <img src="/Millions/img/oddeven/ball_1.png" class="w-16 h-16 relative z-[2]" alt="1" />
+                                <img src="/Millions/img/oddeven/ball_19.png" class="w-12 h-12 relative z-[1]" alt="19" />
+                            }
+                        </div>
+                        <button class="bigsmall-btn w-full py-2.5 rounded-xl font-black text-[15px] transition-all shadow-md" style="background: @themeColor; color: white;">@Lang.millions_select</button>
+                    </div>
+                </div>
+
+                <!-- Card 2 (Small or Even) -->
+                <div id="cardSmall" onclick="selectBigSmall('small')" class="bigsmall-card flex-1 rounded-2xl relative cursor-pointer transition-all duration-300 active:scale-[0.97] border-2 border-transparent overflow-hidden flex flex-col" style="background: linear-gradient(180deg, #FFF7DB 0%, #FFEEB3 100%);">
+                    <img src="/Millions/img/bigsmall/light_effect_1.png" class="absolute top-0 left-0 w-full opacity-60 pointer-events-none" alt="" />
+                    <img src="/Millions/img/bigsmall/light_effect_2.png" class="absolute bottom-12 left-0 w-full opacity-60 pointer-events-none" alt="" />
+                    <div class="flex flex-col items-center pt-4 pb-3 px-3 relative z-10 h-full justify-between">
+                        <div class="flex flex-col items-center w-full">
+                            <div class="h-[34px] flex items-center justify-center">
+                                <div class="text-[40px] font-[800] leading-none italic" style="-webkit-text-stroke: 1px #000; text-shadow: 1px 2px 2px rgba(0,0,0,0.15); color: @(isBigSmall ? "#FF4157" : "#B33BD0");">@(isBigSmall ? "Small" : "Even")</div>
+                            </div>
+                            <div class="text-[11px] font-medium text-gray-500 mt-1 h-[28px] text-center leading-tight">
+                                @(isBigSmall ? "13 number from" : "Even numbers") <br/> <b>@(isBigSmall ? "01-40" : "0, 2, 4, 6, 8")</b>
+                            </div>
+                        </div>
+                        <div class="flex items-center justify-center -space-x-2 my-2">
+                            @if (isBigSmall) {
+                                <img src="/Millions/img/bigsmall/ball_5_blue.png" class="w-12 h-12 relative z-[1]" alt="5" />
+                                <img src="/Millions/img/bigsmall/ball_1_big.png" class="w-16 h-16 relative z-[2]" alt="1" />
+                                <img src="/Millions/img/bigsmall/ball_8_pink.png" class="w-12 h-12 relative z-[1]" alt="8" />
+                            } else {
+                                <img src="/Millions/img/oddeven/ball_66.png" class="w-12 h-12 relative z-[1]" alt="66" />
+                                <img src="/Millions/img/oddeven/ball_68.png" class="w-16 h-16 relative z-[2]" alt="68" />
+                                <img src="/Millions/img/oddeven/ball_88.png" class="w-12 h-12 relative z-[1]" alt="88" />
+                            }
+                        </div>
+                        <button class="bigsmall-btn w-full py-2.5 rounded-xl font-black text-[15px] transition-all shadow-md"
+								style="background: @themeColor; color: white;">@Lang.millions_select</button>
+                    </div>
+                </div>
+            </div>
+
+            <!-- You Choose + Prize Section -->
+            <div class="px-5 pt-6 flex flex-col items-center gap-4">
+                <div class="flex flex-col items-center">
+                    <span class="text-[15px] font-medium text-black">@Lang.millions_you_choose</span>
+                    <span id="choiceDisplay" class="text-[42px] font-[800] leading-tight" style="-webkit-text-stroke: 1px #000;">—</span>
+                </div>
+                <div class="flex flex-col items-center">
+                    <span class="text-[18px] font-medium text-black">@Lang.millions_prize_if_win</span>
+                    <div class="flex items-baseline gap-1">
+                        <span class="text-[28px] font-black text-black">@prizeAmount</span>
+                        <span class="text-[14px] font-black text-[#E56B23]">HTG</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- Bottom Action Bar -->
+        <div class="p-4 bg-white border-t border-gray-200 z-[70] shadow-[0px_-4px_10px_rgba(0,0,0,0.03)] absolute bottom-0 w-full left-0">
+            <div class="flex items-center justify-between">
+                <div class="flex flex-col">
+                    <div class="flex items-center gap-1.5 mb-0.5">
+                        <span class="text-[11px] text-black font-black uppercase">@Lang.total_ticket:</span>
+                        <span id="bsTotalTicketCount" class="text-[12px] font-black text-black">0</span>
+                    </div>
+                    <span class="text-[11px] text-black font-black uppercase">@Lang.millions_estimated_ticket_price</span>
+                    <div class="flex items-baseline gap-1">
+                        <span id="bsTotalPrice" class="text-[28px] font-black text-black">0</span>
+                        <span class="text-[13px] font-black" style="color: @themeColor">HTG</span>
+                    </div>
+                </div>
+                <button id="bsPaymentBtn" onclick="bsShowPayment()" class="text-white text-[20px] font-black px-10 py-3.5 rounded-xl shadow-lg active:scale-95 transition-all" style="background: @themeColor;">
+                    @Lang.millions_payment
+                </button>
+            </div>
+        </div>
+    </div>
+}
+else
+{
+<!-- ==================== Basic Pick 10 / Odd-Even GAME UI ==================== -->
+<div class="main-container animate__animated animate__fadeIn bg-[#F5F5F5] h-screen flex flex-col font-bricolage overflow-hidden max-w-[414px] mx-auto relative">
+    <!-- Header -->
+    <div class="w-full bg-[#0062FF] py-3 px-4 text-white flex items-center justify-between sticky top-0 z-[60]">
+        <button onclick="location.href='@Url.Action("GameHome", "Home")'" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-all">
+            <i class="fa-solid fa-arrow-left text-[20px]"></i>
+        </button>
+        <span class="font-[800] text-[18px] absolute left-1/2 -translate-x-1/2 whitespace-nowrap">
+            @if (Model.termType == Constants.PIC10_BASIC_CODE) { <text>Basic Pick 10</text> }
+            else if (Model.termType == Constants.Millions_CODE) { <text>Millions</text> }
+            else { @Lang.millions_odd_even }
+        </span>
+        <div class="w-8"></div>
+    </div>
+
+    <!-- Sticky Term Info sub-header -->
+    <div class="p-4 py-2.5 bg-white flex items-center justify-between shadow-sm sticky top-[52px] z-50">
+        <div class="flex items-center gap-2 border border-[#E5E7EB] rounded-lg px-3 py-1.5 bg-gray-50">
+            <i class="fa-regular fa-calendar text-[#0062FF] text-sm"></i>
+            <span class="text-[12px] font-bold text-gray-700">@DateTime.Now.ToString("dddd, MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)</span>
+        </div>
+        <div class="flex items-center gap-1 ml-4 flex-1 justify-end">
+            <span class="text-[12px] font-bold text-gray-400">@Lang.millions_round</span>
+            <span class="text-[18px] font-black text-brown-main">#@(currentTerm?.id ?? "12459")</span>
+        </div>
+    </div>
+
+    <!-- Ticket Scrollable List Area -->
+    <div id="ticketContainer" class="p-4 flex flex-col gap-6 flex-1 overflow-y-auto bg-[#F5F5F5] pb-[50vh]">
+        @for (int i = 1; i <= 2; i++)
+        {
+            <div class="ticket-card relative group active:bg-gray-50 transition-colors cursor-pointer animate__animated animate__fadeIn">
+                <button onclick="removeEntry(this)" class="absolute -right-2 top-2 w-7 h-7 bg-[#0062FF] text-white rounded-full flex items-center justify-center text-[11px] shadow-sm z-[10] hover:bg-red-600 transition-all border-2 border-white">
+                    <i class="fa-solid fa-xmark"></i>
+                </button>
+                <div class="absolute left-2 top-4 w-9 h-9 rounded-full border-[3px] border-white flex items-center justify-center text-white font-black text-sm shadow-md ticket-index">@i</div>
+                <div class="flex flex-col gap-1 pl-8">
+                    <span class="text-[16px] font-extrabold text-[#333]">@Lang.millions_select_10_lucky_numbers</span>
+                    <div class="flex items-start gap-4">
+                        <div class="grid grid-cols-5 gap-y-1 gap-x-2 flex-1">
+                            @for (int j = 0; j < (Model.termType == Constants.PIC10_BASIC_CODE ? 10 : (Model.termType == Constants.Millions_CODE ? 6 : 15)); j++)
+                            {
+                                <div class="ball-circle ball-empty"></div>
+                            }
+                        </div>
+                        <div class="w-20 action-area flex flex-col gap-2">
+                             <button onclick="randomizeTicket(this)" class="rand-btn bg-[#0A9800] text-white flex items-center justify-center gap-2 w-20 py-2 rounded-xl font-extrabold text-[11px] shadow-sm active:scale-95 transition-all">
+                                <i class="fa-solid fa-arrows-rotate text-[10px]"></i> @Lang.Random
+                             </button>
+                             <div class="edit-delete-group hidden flex flex-col gap-2">
+                                 <button onclick="editFullTicket(this)" class="bg-[#2B83F2] text-white flex items-center justify-center gap-2 w-20 py-1.5 rounded-lg font-bold text-[12px] shadow-sm active:scale-95 transition-all">
+                                    <i class="fa-solid fa-pen text-[10px]"></i> @Lang.millions_edit
+                                 </button>
+                                 <button onclick="clearTicket(this)" class="bg-[#0062FF] text-white flex items-center justify-center gap-2 w-20 py-1.5 rounded-lg font-bold text-[12px] shadow-sm active:scale-95 transition-all">
+                                    <i class="fa-solid fa-trash-can text-[10px]"></i> @Lang.millions_delete
+                                 </button>
+                             </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        }
+
+        <div class="w-full pt-2" id="addButtonWrapper">
+            <button onclick="addNewTicket()" class="w-fit min-w-[220px] mx-auto bg-green-main text-white font-black text-md py-2.5 px-6 rounded-xl shadow-md border-b-[4px] border-[#129A30] active:translate-y-[1px] active:border-b-[1px] transition-all flex items-center justify-center gap-2">
+                @Lang.millions_add_more_ticket
+            </button>
+        </div>
+        <div class="h-4"></div>
+    </div>
+
+    <!-- Bottom Action Bar -->
+    <div class="p-4 bg-white border-t border-gray-200 z-[70] shadow-[0px_-4px_10px_rgba(0,0,0,0.03)]">
+        <div class="flex items-center justify-between">
+            <div class="flex flex-col">
+                <div class="flex items-center gap-1.5 mb-0.5">
+                    <span class="text-[11px] text-black font-black uppercase">@Lang.total_ticket:</span>
+                    <span id="totalTicketCount" class="text-[12px] font-black text-black">0</span>
+                </div>
+                <span class="text-[11px] text-black font-black uppercase">@Lang.millions_estimated_ticket_price</span>
+                <div class="flex items-baseline gap-1">
+                    <span id="totalPrice" class="text-[28px] font-black text-black">0</span>
+                    <span class="text-[13px] font-black text-[#0062FF]">HTG</span>
+                </div>
+            </div>
+            <button onclick="preparePayment()" class="bg-[#0062FF] text-white text-[20px] font-black px-10 py-3.5 rounded-xl shadow-[0px_6px_15px_rgba(238,0,51,0.25)] active:scale-95 transition-all">
+                @Lang.millions_payment
+            </button>
+        </div>
+    </div>
+</div>
+}
+
+<!-- Order Summary Screen (from Figma) -->
+<div id="orderSummaryModal" class="hidden fixed inset-0 z-[150] bg-black/60 flex items-center justify-center p-0 font-bricolage backdrop-blur-[2px]">
+    <div class="w-full h-full bg-white flex flex-col animate__animated animate__fadeInRight animate__faster shadow-2xl relative lg:max-w-[414px]">
+        <!-- Header đồng bộ tuyệt đối -->
+        <div class="w-full bg-[#0062FF] py-3 px-4 text-white flex items-center justify-between sticky top-0 z-[60]">
+            <button onclick="hideOrderSummary()" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-all">
+                <i class="fa-solid fa-arrow-left text-[20px]"></i>
+            </button>
+            <span class="font-[800] text-[18px] absolute left-1/2 -translate-x-1/2 whitespace-nowrap">
+                @if (Model.termType == Constants.PIC10_BASIC_CODE) { <text>Basic Pick 10</text> }
+                else if (Model.termType == Constants.Millions_CODE) { <text>Millions</text> }
+                else if (Model.termType == Constants.PIC10_BIGSMALL_CODE) { @Lang.millions_big_small }
+                else { @Lang.millions_odd_even }
+            </span>
+            <div class="w-8"></div>
+        </div>
+
+        <!-- Content Area: Split into scrollable list and static summary -->
+        <div class="flex-1 flex flex-col min-h-0 bg-gray-50">
+            <!-- Scrollable Ticket List -->
+            <div class="flex-1 overflow-y-auto p-5 pb-2">
+                <div class="flex justify-between items-center px-1 mb-3">
+                     <span class="text-[14px] font-bold text-gray-800">Selected Tickets</span>
+                     <span class="text-[14px] font-bold text-gray-800">@Lang.price</span>
+                </div>
+
+                <!-- Ticket List -->
+                <div id="summaryTicketList" class="flex flex-col gap-4">
+                     <!-- Populated dynamically via JS -->
+                </div>
+            </div>
+
+            <!-- Static Summary Info (Dates & Totals) -->
+            <div class="shrink-0 bg-white p-5 space-y-4 border-t border-gray-100 shadow-[0px_-10px_20px_rgba(0,0,0,0.03)]">
+                 <!-- Dates Section -->
+                 <div class="grid grid-cols-2 gap-4">
+                      <div class="space-y-1">
+                          <span class="text-[11px] font-black text-[#0062FF] block text-center uppercase tracking-tight">@Lang.date_purchase</span>
+                          <div class="bg-white border border-gray-100 rounded-xl py-2.5 px-2 text-center font-black text-[11px] text-gray-700 shadow-sm">
+                              @DateTime.Now.ToString("dddd MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)
+                          </div>
+                      </div>
+                      <div class="space-y-1">
+                          <span class="text-[11px] font-black text-[#0062FF] block text-center uppercase tracking-tight">@Lang.draw_date</span>
+                          <div class="bg-white border border-gray-100 rounded-xl py-2.5 px-2 text-center font-black text-[11px] text-gray-700 shadow-sm" id="summaryResultDate">
+                              @{
+                                  DateTime drawDate;
+                                  bool isValidDate = DateTime.TryParse(currentTerm?.date_end, out drawDate);
+                                  if (isValidDate) {
+                                     @drawDate.ToString("dddd MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)
+                                  } else {
+                                     @:N/A
+                                  }
+                              }
+                          </div>
+                      </div>
+                 </div>
+
+                 <!-- Totals Section -->
+                 <div class="space-y-1 px-1">
+                      <div class="flex justify-between items-center">
+                          <span class="text-[14px] font-bold text-black">@Lang.total_ticket</span>
+                          <span id="summaryTotalCount" class="text-[16px] font-black text-black">0</span>
+                      </div>
+                      <div class="flex justify-between items-center">
+                          <span class="text-[14px] font-bold text-black">@Lang.total_money</span>
+                          <div class="flex items-baseline gap-1">
+                              <span id="summaryTotalAmount" class="text-[32px] font-black text-black">0</span>
+                              <span class="text-[16px] font-black text-[#0062FF]">HTG</span>
+                          </div>
+                      </div>
+                 </div>
+            </div>
+        </div>
+
+        <div class="shrink-0 p-4 bg-white border-t border-gray-100 grid grid-cols-2 gap-4 pb-8 shadow-[0px_-4px_20px_rgba(0,0,0,0.05)]">
+            <button onclick="hideOrderSummary()" class="bg-[#FFB000] text-white py-2.5 rounded-2xl font-black text-[18px] shadow-lg shadow-orange-200 active:scale-95 transition-all uppercase tracking-wide">
+                @Lang.reorder
+            </button>
+            <button id="finalPaymentBtn" onclick="confirmCheckout(this)" class="bg-[#0062FF] text-white py-2.5 rounded-2xl font-black text-[18px] shadow-lg shadow-red-200 active:scale-95 transition-all uppercase tracking-wide">
+                @Lang.millions_payment
+            </button>
+        </div>
+    </div>
+</div>
+
+    <!-- OTP Verification Modal (V2 Design Overhaul - Matching Figma) -->
+    <div id="otpModal" class="fixed inset-0 bg-black/80 backdrop-blur-sm z-[200] hidden items-center justify-center p-4">
+        
+        <!-- Outer container to hold the modal + external overflowing elements (like stars/glitter) -->
+        <div class="relative w-full max-w-[360px] mt-6 animate__animated animate__zoomIn animate__faster">
+            
+            <!-- Glitter effect (external to the white box) -->
+            <div class="absolute -top-[100px] -left-[10px] w-[380px] h-[160px] mix-blend-screen pointer-events-none z-0 overflow-visible opacity-90" style="background: url('/Millions/img/modal/otp_glitter.png') no-repeat center center; background-size: contain;"></div>
+
+            <!-- The White Box -->
+            <div class="bg-white rounded-[32px] w-full relative z-10 shadow-[0px_0px_30px_rgba(255,255,255,0.15)] pb-5 border border-yellow-500/20">
+                
+                <!-- Floating Coins from Figma -->
+                <div class="absolute -top-[40px] -right-[10px] z-[80] w-[120px] pointer-events-none drop-shadow-2xl">
+                    <img src="/Millions/img/modal/otp_coins.png" class="w-full object-contain" />
+                </div>
+
+                <!-- Red Header Section -->
+                <div class="relative w-full pt-4 pb-4 bg-[#0062FF] rounded-t-[32px] flex flex-col items-center justify-center z-20" style="border-bottom-left-radius: 50% 20px; border-bottom-right-radius: 50% 20px;">
+                    <h2 class="text-white text-[17px] sm:text-[20px] font-[900] uppercase tracking-wide relative z-10 font-bricolage drop-shadow-md text-center px-4 leading-tight w-[80%] mr-auto">@Lang.millions_confirm_purchase</h2>
+                </div>
+                
+                <!-- Modal Body Content -->
+                <div class="relative px-6 pt-3 flex flex-col items-center gap-3 z-10">
+                    
+                    <!-- Shield Icon: mix-blend-mode multiply to remove the white square background -->
+                    <div class="relative w-full flex justify-center mb-0 mt-1">
+                        <img src="/Millions/img/modal/otp_shield.png" alt="Success" class="w-[90px] object-contain">
+                    </div>
+        
+                    <!-- Info Rows (Aligned exactly like screenshot) -->
+                    <div class="w-full flex flex-col gap-2 items-center mt-0">
+                        <!-- Ticket Info -->
+                        <div class="grid grid-cols-[90px_auto] items-center gap-3 w-full justify-center">
+                            <span class="text-[15px] font-bold text-[#555] text-right font-bricolage">@Lang.millions_ticket</span>
+                            <div id="otpTicketTypeContainer" class="flex justify-start">
+                                <img id="otpTicketTypeImg" src="/Millions/img/even_text.png" class="h-6 object-contain drop-shadow-sm" />
+                            </div>
+                        </div>
+
+                        <!-- Amount Info -->
+                        <div class="grid grid-cols-[90px_auto] items-center gap-3 w-full justify-center">
+                            <span class="text-[15px] font-bold text-[#555] text-right font-bricolage">@Lang.millions_amount</span>
+                            <div class="flex items-baseline gap-1.5 justify-start">
+                                <span id="otpTotalAmount" class="text-[22px] font-[900] text-black leading-none tracking-tight">1.000</span>
+                                <span class="text-[15px] font-[900] text-[#F37021] font-bricolage">HTG</span>
+                            </div>
+                        </div>
+                    </div>
+        
+                    <p class="text-[14px] font-bold text-[#555] text-center px-4 leading-snug mt-0 font-bricolage">@Lang.millions_otp_instruction</p>
+        
+                    <!-- 6-Slots OTP Grid (Large Gray Blocks) -->
+                    <div class="flex items-center justify-center gap-2 w-full mt-1 px-2" id="otpInputs">
+                        @for (int i = 1; i <= 6; i++)
+                        {
+                            <input type="tel" maxlength="1" id="otp@(i)" 
+                                   oninput="moveToNext(this, '@(i < 6 ? "otp" + (i + 1) : "")')" 
+                                   class="w-[42px] h-[48px] bg-[#757575] rounded-[10px] text-white text-[26px] font-bold text-center appearance-none focus:bg-[#555] focus:scale-[1.03] focus:ring-2 focus:ring-[#0062FF]/50 transition-all outline-none shadow-inner otp-slot"
+                                   placeholder="-">
+                        }
+                    </div>
+        
+                    <!-- OTP Error Message -->
+                    <p id="otpError" class="text-[#0062FF] font-bold text-[14px] text-center mb-1 hidden animate__animated animate__shakeX"></p>
+
+                    <!-- Timer & Resend -->
+                    <div class="flex flex-col items-center gap-1 mt-0">
+                        <span id="otpTimer" class="text-[15px] font-black text-[#0062FF] font-bricolage">60s</span>
+                        <button id="resendOtpBtn" onclick="sendOtpRequest()" class="hidden text-[14px] font-black text-[#0A9800] underline decoration-solid underline-offset-[3px] transition-all hover:text-[#087a00] disabled:opacity-40 disabled:no-underline font-bricolage">@Lang.millions_request_new_otp</button>
+                    </div>
+        
+                    <!-- Action Buttons: Cancel / Confirm -->
+                    <div class="grid grid-cols-2 gap-3 w-full mt-2">
+                        <button onclick="hideOtpModal()" class="bg-[#FF0000] text-white py-[12px] rounded-[16px] font-[900] text-[17px] shadow-[0_8px_15px_rgba(255,0,0,0.2)] active:scale-95 transition-all tracking-wide">@Lang.millions_cancel</button>
+                        <button id="otpConfirmBtn" disabled onclick="finalizePurchase(this)" class="bg-[#0A9800] text-white py-[12px] rounded-[16px] font-[900] text-[17px] shadow-[0_8px_15px_rgba(10,152,0,0.2)] active:scale-95 transition-all tracking-wide disabled:opacity-50 disabled:grayscale disabled:cursor-not-allowed">@Lang.millions_confirm</button>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+
+@section Scripts {
+    <script>
+
+        const maxBalls = @(Model.termType == Constants.PIC10_BASIC_CODE ? 10 : (Model.termType == Constants.Millions_CODE ? 6 : (Model.termType == Constants.PIC10_BIGSMALL_CODE ? 13 : 15)));
+
+        function reindexTickets() {
+            $(".ticket-card").each(function(index) {
+                $(this).find(".ticket-index").text(index + 1);
+            });
+        }
+
+        function removeEntry(btn) {
+            var card = $(btn).closest('.ticket-card');
+            card.addClass('animate__animated animate__fadeOutRight animate__faster');
+            setTimeout(function() {
+                card.remove();
+                reindexTickets();
+                updateTotalPrice();
+            }, 300);
+        }
+
+        function randomizeTicket(btn) {
+            var icon = $(btn).find('i');
+            icon.addClass('fa-spin');
+            
+            var card = $(btn).closest('.ticket-card');
+            var balls = card.find('.ball-circle');
+            
+            // Generate unique random numbers 1-80
+            var numbers = [];
+            while(numbers.length < maxBalls){
+                var r = Math.floor(Math.random() * 80) + 1;
+                if(numbers.indexOf(r) === -1) numbers.push(r);
+            }
+            numbers.sort((a, b) => a - b);
+            
+            // Update balls with staggered animation
+            balls.each(function(index) {
+                var ball = $(this);
+                setTimeout(function() {
+                    var formattedNum = numbers[index].toString().padStart(2, '0');
+                    ball.removeClass('ball-empty').addClass('ball-filled').text(formattedNum);
+                    ball.addClass('animate__animated animate__flipInY');
+                    
+                    if(index === maxBalls - 1) {
+                        setTimeout(() => {
+                            icon.removeClass('fa-spin');
+                            // Replace button with Edit/Delete group
+                            $(btn).hide();
+                            card.find('.edit-delete-group').removeClass('hidden').addClass('animate__animated animate__fadeInRight animate__faster');
+                            updateTotalPrice();
+                        }, 300);
+                    }
+                }, index * 40);
+            });
+        }
+
+        function clearTicket(btn) {
+            var card = $(btn).closest('.ticket-card');
+            var balls = card.find('.ball-circle');
+            
+            balls.removeClass('ball-filled animate__animated animate__flipInY shadow-inner').addClass('ball-empty').text('');
+            
+            // Hide Edit/Delete group and show Rand button
+            card.find('.edit-delete-group').addClass('hidden');
+            card.find('.rand-btn').show().addClass('animate__animated animate__fadeInLeft animate__faster');
+            
+            updateTotalPrice();
+        }
+
+        // Open Number Picker Modal
+        var activeBall = null;
+        var activeTicketCard = null;
+        var selectedNumbers = []; // For Edit mode, this will be an array of fixed size with nulls
+        var isMultiMode = false;
+
+        function editFullTicket(btn) {
+            isMultiMode = true;
+            activeTicketCard = $(btn).closest('.ticket-card');
+            activeBall = null;
+            
+            // Initialize fixed slots for slot-based editing
+            selectedNumbers = new Array(maxBalls).fill(null);
+            let existing = [];
+            activeTicketCard.find('.ball-filled').each(function() {
+                var num = $(this).text().trim();
+                if(num) existing.push(num);
+            });
+            
+            // Initial fill from left to right
+            existing.forEach((num, idx) => {
+                if(idx < maxBalls) selectedNumbers[idx] = num;
+            });
+
+            openNumberPicker(true);
+        }
+
+        function openNumberPicker(isMulti) {
+            var modal = $("#numberPickerModal");
+            var grid = $("#numberGrid");
+            var title = $("#modalTitle");
+            var countArea = $(".selection-count-area");
+            var confirmBtn = $("#confirmBtn");
+            
+            grid.empty();
+            if (isMulti) {
+                title.text("Edit Ticket");
+                countArea.removeClass('hidden');
+                confirmBtn.removeClass('hidden').text("@Lang.confirm");
+            } else {
+                title.text("Pick Number");
+                countArea.addClass('hidden');
+                confirmBtn.removeClass('hidden').text("@Lang.confirm");
+                // Single mode logic is handled by setting selectedNumbers previously or here
+            }
+            
+            updateSelectionCount(); 
+            liveUpdateTicket();
+
+            // Focus card
+            if (activeTicketCard && activeTicketCard.length) {
+                var container = $("#ticketContainer");
+                var scrollPos = activeTicketCard.offset().top - container.offset().top + container.scrollTop();
+                container.stop().animate({ scrollTop: scrollPos - 15 }, 500);
+            }
+
+            // Populate Grid
+            for (var i = 1; i <= 80; i++) {
+                var formatted = i.toString().padStart(2, '0');
+                var isSelected = selectedNumbers.includes(formatted);
+                
+                var btnClass = isSelected 
+                    ? 'bg-[#0062FF] text-white shadow-md scale-105 active-num' 
+                    : 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-100';
+                
+                grid.append(`<button type="button" class="num-btn w-8 h-8 rounded-full font-black text-[11px] transition-all focus:outline-none flex items-center justify-center ${btnClass}">${formatted}</button>`);
+            }
+
+            // Cleanup old listeners and add new one to the grid (event delegation)
+            grid.off('click', '.num-btn').on('click', '.num-btn', function(e) {
+                e.preventDefault();
+                var $btn = $(this);
+                var picked = $btn.text().trim();
+                
+                if (isMultiMode) {
+                    if (selectedNumbers.includes(picked)) {
+                        // Remove
+                        let idx = selectedNumbers.indexOf(picked);
+                        if (idx !== -1) selectedNumbers[idx] = null;
+                        $btn.removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
+                    } else {
+                        // Add
+                        let firstEmpty = selectedNumbers.indexOf(null);
+                        if (firstEmpty !== -1) {
+                            selectedNumbers[firstEmpty] = picked;
+                            $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
+                        }
+                    }
+                    liveUpdateTicket();
+                } else {
+                    // Single Select mode
+                    var exists = false;
+                    if (activeTicketCard) {
+                        activeTicketCard.find('.ball-filled').each(function() {
+                            if (activeBall && this !== activeBall[0] && $(this).text().trim() === picked) {
+                                exists = true;
+                            }
+                        });
+                    }
+                    if (exists) {
+                        if (typeof showNotification === "function") {
+                            showNotification("Number already selected", "warning");
+                        }
+                        return;
+                    }
+                    grid.find('.num-btn').removeClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').addClass('bg-white text-gray-700 border border-gray-100');
+                    selectedNumbers = [picked];
+                    $btn.addClass('bg-[#0062FF] text-white shadow-md scale-105 active-num').removeClass('bg-white text-gray-700 border border-gray-100');
+                }
+                updateSelectionCount();
+            });
+
+            modal.removeClass('hidden').addClass('flex');
+            modal.find('.modal-content').removeClass('animate__zoomOut').addClass('animate__zoomIn');
+        }
+
+        function updateSelectionCount() {
+            var count = selectedNumbers.filter(n => n !== null && n !== "").length;
+            $("#selectionCount").text(count);
+            $("#maxSelectionCount").text(maxBalls);
+            var isValid = isMultiMode ? (count === maxBalls) : (count === 1);
+            if (isValid) {
+                $("#confirmBtn").prop('disabled', false).removeClass('opacity-50 cursor-not-allowed').addClass('cursor-pointer');
+            } else {
+                $("#confirmBtn").prop('disabled', true).addClass('opacity-50 cursor-not-allowed').removeClass('cursor-pointer');
+            }
+        }
+
+        function liveUpdateTicket() {
+            if (!activeTicketCard) return;
+            var balls = activeTicketCard.find('.ball-circle');
+            
+            if (isMultiMode) {
+                // Update Ticket Card balls
+                for(var i=0; i < maxBalls; i++){
+                    var val = selectedNumbers[i];
+                    if (i < balls.length) {
+                        var tBall = $(balls[i]);
+                        if (val) {
+                            tBall.removeClass('ball-empty').addClass('ball-filled').text(val);
+                        } else {
+                            tBall.removeClass('ball-filled').addClass('ball-empty').text('');
+                        }
+                    }
+                }
+                
+                // Toggle Rand/Edit button visibility
+                if (selectedNumbers.filter(n => n !== null && n !== "").length > 0) {
+                     activeTicketCard.find('.rand-btn').hide();
+                     activeTicketCard.find('.edit-delete-group').removeClass('hidden').show();
+                } else {
+                     activeTicketCard.find('.rand-btn').show();
+                     activeTicketCard.find('.edit-delete-group').addClass('hidden');
+                }
+                
+                updateTotalPrice();
+            }
+        }
+
+        // All immediate jQuery event bindings must wait for DOM + jQuery to be ready
+        document.addEventListener("DOMContentLoaded", function() {
+            // Click on a ball (filled or empty) to pick numbers
+            $(document).on('click', '.ball-filled, .ball-empty', function() {
+                isMultiMode = false;
+                activeBall = $(this);
+                activeTicketCard = activeBall.closest('.ticket-card');
+                
+                var val = activeBall.text().trim();
+                selectedNumbers = val ? [val] : [];
+                
+                openNumberPicker(false);
+            });
+
+            updateTotalPrice();
+
+            // Confirm button handler
+            $(document).off('click', '#confirmBtn').on('click', '#confirmBtn', function(e) {
+                e.preventDefault();
+                // Check non-null count
+                var count = selectedNumbers.filter(n => n !== null && n !== "").length;
+                if (count === 0) return;
+
+                if (isMultiMode && activeTicketCard && activeTicketCard.length > 0) {
+                    // Collect and sort for final storage/display (lottery numbers are usually sorted)
+                    var finalSorted = selectedNumbers.filter(n => n !== null && n !== "").sort((a, b) => parseInt(a) - parseInt(b));
+                    
+                    var balls = activeTicketCard.find('.ball-circle');
+                    balls.removeClass('ball-filled').addClass('ball-empty').text('');
+
+                    finalSorted.forEach((num, index) => {
+                        if (index < balls.length) {
+                            $(balls[index]).removeClass('ball-empty').addClass('ball-filled').text(num);
+                            $(balls[index]).addClass('animate__animated animate__pulse');
+                            setTimeout(() => $(balls[index]).removeClass('animate__animated animate__pulse'), 500);
+                        }
+                    });
+
+                    activeTicketCard.find('.rand-btn').hide();
+                    activeTicketCard.find('.edit-delete-group').removeClass('hidden').show();
+                    
+                    updateTotalPrice();
+                } else if (!isMultiMode && activeBall && activeBall.length > 0) {
+                    // Single mode: Update only the active ball
+                    activeBall.text(selectedNumbers[0]).removeClass('ball-empty').addClass('ball-filled');
+                    activeBall.addClass('animate__animated animate__pulse');
+                    setTimeout(() => activeBall.removeClass('animate__animated animate__pulse'), 500);
+                    
+                    var card = activeBall.closest('.ticket-card');
+                    var filledBalls = card.find('.ball-filled').length;
+                    if (filledBalls > 0) {
+                        card.find('.rand-btn').hide();
+                        card.find('.edit-delete-group').removeClass('hidden').show();
+                    } else {
+                        card.find('.rand-btn').show();
+                        card.find('.edit-delete-group').addClass('hidden');
+                    }
+                    
+                    updateTotalPrice();
+                }
+
+                closeNumberPicker();
+            });
+        });
+
+        function closeNumberPicker() {
+            var modal = $("#numberPickerModal");
+            modal.find('.modal-content').removeClass('animate__zoomIn').addClass('animate__zoomOut');
+            setTimeout(() => {
+                modal.removeClass('flex').addClass('hidden');
+                // Reset state
+                activeBall = null;
+                activeTicketCard = null;
+            }, 200);
+        }
+
+        function updateTotalPrice() {
+            var filledTickets = 0;
+            $(".ticket-card").each(function() {
+                if ($(this).find(".ball-filled").length === maxBalls) {
+                    filledTickets++;
+                }
+            });
+            const pricePerTicket = @(Model.termType == Constants.PIC10_BASIC_CODE ? "10" : "50");
+            $("#totalPrice").text(formatMoneyV2(filledTickets * pricePerTicket));
+            $("#totalTicketCount").text(filledTickets);
+        }
+
+        function addNewTicket() {
+            var container = $("#ticketContainer");
+            var wrapper = $("#addButtonWrapper");
+            var currentIndex = $(".ticket-card").length + 1;
+            
+            var ballsHtml = '';
+            for (var i = 0; i < maxBalls; i++) {
+                ballsHtml += '<div class="ball-circle ball-empty"></div>';
+            }
+
+            var ticketHtml = `
+                <div class="ticket-card relative group active:bg-gray-50 transition-colors cursor-pointer animate__animated animate__fadeInUp animate__faster">
+                    <button onclick="removeEntry(this)" class="absolute -right-2 top-1 w-7 h-7 bg-[#0062FF] text-white rounded-full flex items-center justify-center text-[11px] shadow-sm z-[10] hover:bg-red-600 transition-all border-2 border-white">
+                        <i class="fa-solid fa-xmark"></i>
+                    </button>
+                    <div class="absolute left-2 top-4 w-9 h-9 rounded-full border-[3px] border-white flex items-center justify-center text-white font-black text-sm shadow-md ticket-index">${currentIndex}</div>
+                    <div class="flex flex-col gap-1 pl-8">
+                        <span class="text-[16px] font-extrabold text-[#333]">@Lang.millions_select_10_lucky_numbers</span>
+                        <div class="flex items-start gap-4">
+                            <div class="grid grid-cols-5 gap-y-1 gap-x-2 flex-1">
+                                ${ballsHtml}
+                            </div>
+                            <div class="w-20 action-area flex flex-col gap-2">
+                                 <button onclick="randomizeTicket(this)" class="rand-btn bg-[#0A9800] text-white flex items-center justify-center gap-2 w-20 py-2 rounded-xl font-extrabold text-[11px] shadow-sm active:scale-95 transition-all">
+                                     <i class="fa-solid fa-arrows-rotate text-[10px]"></i> @Lang.Random
+                                 </button>
+                                 <div class="edit-delete-group hidden flex flex-col gap-2">
+                                     <button onclick="editFullTicket(this)" class="bg-[#2B83F2] text-white flex items-center justify-center gap-2 w-20 py-1.5 rounded-lg font-bold text-[12px] shadow-sm active:scale-95 transition-all">
+                                         <i class="fa-solid fa-pen text-[10px]"></i> @Lang.millions_edit
+                                     </button>
+                                     <button onclick="clearTicket(this)" class="bg-[#0062FF] text-white flex items-center justify-center gap-2 w-20 py-1.5 rounded-lg font-bold text-[12px] shadow-sm active:scale-95 transition-all">
+                                         <i class="fa-solid fa-trash-can text-[10px]"></i> @Lang.millions_delete
+                                     </button>
+                                 </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            `;
+            
+            $(ticketHtml).insertBefore(wrapper);
+            container.animate({ scrollTop: container.prop("scrollHeight") }, 300);
+        }
+
+        // --- Order Summary Modal Logic ---
+        // --- Payment Preparation & Order Summary Logic ---
+        function preparePayment(event) {
+            const isBSMode = @(Model.termType == Constants.PIC10_BIGSMALL_CODE || Model.termType == Constants.PIC10_ODDEVEN_CODE ? "true" : "false");
+            const tickets = [];
+
+            if (isBSMode) {
+                if (!bsChoice) {
+                    showNotification("Please select a choice first.", "warning");
+                    return;
+                }
+                
+                let bsCode = "";
+                if ('@Model.termType' === '@Constants.PIC10_BIGSMALL_CODE') {
+                    bsCode = (bsChoice === 'big') ? "B" : "S";
+                } else {
+                    bsCode = (bsChoice === 'big') ? "O" : "E"; // Odd = O, Even = E
+                }
+
+                tickets.push({
+                    code: bsCode,
+                    money: "50"
+                });
+            } else {
+                $(".ticket-card").each(function() {
+                    const balls = $(this).find(".ball-filled");
+                    if (balls.length === maxBalls) {
+                        const selectedNumbers = [];
+                        balls.each(function() { selectedNumbers.push($(this).text().trim()); });
+                        const itemPrice = "@(Model.termType == Constants.PIC10_BASIC_CODE ? "10" : "50")";
+                        tickets.push({
+                            code: selectedNumbers.join(','),
+                            money: itemPrice
+                        });
+                    }
+                });
+
+                if (tickets.length === 0) {
+                    showNotification("@Lang.millions_ticket_not_valid", "warning");
+                    return;
+                }
+            }
+
+            const requestData = {
+                gameId: "@Model.termType",
+                ticket: tickets
+            };
+
+            const btn = event ? event.currentTarget : null;
+            const originalText = btn ? btn.innerHTML : "@Lang.millions_payment";
+            if (btn) {
+                btn.innerHTML = '<i class="fa-solid fa-circle-notch fa-spin"></i> Loading...';
+                btn.disabled = true;
+            }
+
+
+            $.ajax({
+                url: subDomain + '@Url.Action("ConfirmTicketData", "Home")',
+                type: 'POST',
+                contentType: 'application/json',
+                data: JSON.stringify(requestData),
+                success: function(data) {
+
+                    if (btn) {
+                        btn.innerHTML = originalText;
+                        btn.disabled = false;
+                    }
+                    if (data.responseCode === "0") {
+                        showOrderSummary(data, tickets);
+                    } else {
+                        showNotification(data.responseMessage || "Confirmation failed", data.responseCode);
+                    }
+                },
+                error: function(err) {
+
+                    if (btn) {
+                        btn.innerHTML = originalText;
+                        btn.disabled = false;
+                    }
+
+                    showNotification("Network error occurred.", "warning");
+                }
+            });
+        }
+
+        let currentTransId = null;
+
+        function showOrderSummary(apiData, localTickets) {
+            currentTransId = apiData.transId;
+            const summaryModal = $("#orderSummaryModal");
+            const summaryList = $("#summaryTicketList");
+            summaryList.empty();
+
+            const displayTickets = (apiData && apiData.ticket) ? apiData.ticket : (localTickets || []);
+            if (!displayTickets || !Array.isArray(displayTickets)) {
+                console.warn("No tickets found to display in summary.");
+                return;
+            }
+
+            displayTickets.forEach((t, index) => {
+                const numbers = t.code.split(',');
+                let contentHtml = '';
+                
+                if (numbers.length > 1) {
+                    let numbersBalls = '';
+                    numbers.forEach(n => {
+                        numbersBalls += `<div class="w-7 h-7 rounded-full flex items-center justify-center text-white text-[11px] font-black shadow-[0_4px_10px_rgba(186,15,33,0.3)]" style="background: linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%); border: 1px solid rgba(255, 255, 255, 0.3); text-shadow: 0px 1px 2px rgba(0,0,0,0.1); transition: transform 0.2s;">${n.trim()}</div>`;
+                    });
+                    contentHtml = `<div class="grid grid-cols-5 gap-y-2 relative z-10 px-2 justify-items-center">${numbersBalls}</div>`;
+                } else {
+                    const isBS = @(Model.termType == Constants.PIC10_BIGSMALL_CODE ? "true" : "false");
+                    const isFirstChoice = (numbers[0] === 'B' || numbers[0] === 'O');
+                    const label = isFirstChoice ? (isBS ? "Big" : "Odd") : (isBS ? "Small" : "Even");
+                    const color = isFirstChoice ? (isBS ? "#A2FF00" : "#FFC700") : (isBS ? "#FF4157" : "#B33BD0");
+                    contentHtml = `<div class="w-full flex justify-center"><span class="text-[28px] font-black italic uppercase" style="-webkit-text-stroke: 1px #000; color: ${color};">${label}</span></div>`;
+                }
+
+                const itemHtml = `
+                    <div class="flex items-center gap-3">
+                        <div class="flex-1 rounded-2xl p-3 relative overflow-hidden flex flex-col gap-2 min-h-[80px] justify-center shadow-sm" 
+                             style="background: white; border: 1.5px solid #0062FF;">
+                            ${contentHtml}
+                        </div>
+                        <div class="w-24 shrink-0 bg-white border border-gray-200 rounded-2xl p-2.5 flex items-center justify-center shadow-sm">
+                            <div class="flex items-baseline gap-0.5">
+                                <span class="text-[20px] font-black text-black">${formatMoneyV2(t.money)}</span>
+                                <span class="text-[12px] font-black text-[#0062FF]">HTG</span>
+                            </div>
+                        </div>
+                    </div>
+                `;
+                summaryList.append(itemHtml);
+            });
+
+            $("#summaryTotalCount").text(displayTickets.length);
+            const totalMoney = apiData.totalMoneyPayment || apiData.totalMoney || "0";
+            $("#summaryTotalAmount").text(formatMoneyV2(totalMoney));
+
+            summaryModal.removeClass("hidden").addClass("flex");
+        }
+
+        function hideOrderSummary() {
+            $("#orderSummaryModal").removeClass("flex").addClass("hidden");
+        }
+
+        function confirmCheckout(btn) {
+            const originalText = $(btn).html();
+            $(btn).prop('disabled', true).html('<i class="fa-solid fa-spinner fa-spin mr-2"></i>Processing...');
+
+            // Trigger SendOTP API
+            $.ajax({
+                url: subDomain + '@Url.Action("SendOTP", "Home")',
+                type: 'POST',
+                success: function(data) {
+                    $(btn).prop('disabled', false).html(originalText);
+                    
+                    if (data.responseCode === "0") {
+                        showOtpModal();
+                    } else {
+                        showNotification(data.responseMessage || "Failed to send OTP", data.responseCode);
+                    }
+                },
+                error: function() {
+                    $(btn).prop('disabled', false).html(originalText);
+                    showNotification("Network error occurred.", "warning");
+                }
+            });
+        }
+
+        let otpInterval;
+        function showOtpModal() {
+            hideOrderSummary();
+            $("#otpModal").removeClass("hidden").addClass("flex");
+            $("#otpInputs input").val("");
+            $("#otpConfirmBtn").prop('disabled', true);
+            $("#otpError").addClass("hidden").text("");
+            $("#otp1").focus();
+            
+            // Map game type to readable name & image
+            let gameTypeStr = "@Model.termType";
+            let displayName = gameTypeStr === "@Constants.Millions_CODE" ? "Millions" : "Basic Pick 10";
+            let imgSrc = "";
+            
+            if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE") {
+                // Get the specific choice from summary
+                let firstTicketText = $("#summaryTicketList").find("span.font-black").first().text().trim();
+                if (firstTicketText) {
+                    displayName = firstTicketText.charAt(0).toUpperCase() + firstTicketText.slice(1).toLowerCase(); // Normalize to "Big" or "Small"
+                } else {
+                    displayName = "Big / Small";
+                }
+            } else if (gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") {
+                let firstTicketText = $("#summaryTicketList").find("span.font-black").first().text().trim();
+                if (firstTicketText) {
+                    displayName = firstTicketText.charAt(0).toUpperCase() + firstTicketText.slice(1).toLowerCase(); // Normalize to "Odd" or "Even"
+                } else {
+                    displayName = "Odd / Even";
+                }
+            }
+            
+            // Determine color based on game type
+            let typeColorClass = "text-purple-700"; // default
+            if (gameTypeStr === "@Constants.PIC10_BASIC_CODE") typeColorClass = "text-[#0062FF]";
+            else if (gameTypeStr === "@Constants.Millions_CODE") typeColorClass = "text-[#0062FF]";
+            else if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE") typeColorClass = "text-[#0A9800]";
+            else if (gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") typeColorClass = "text-[#9333ea]";
+
+            // Hide image for now and use the beautiful text style as requested
+            $("#otpTicketTypeImg").hide();
+            $("#otpTicketTypeContainer").find("span").remove();
+            $("#otpTicketTypeContainer").append(`<span class='text-[17px] font-[900] ${typeColorClass} italic'>${displayName}</span>`);
+            
+            $("#otpTotalAmount").text($("#summaryTotalAmount").text());
+            startOtpTimer(60);
+        }
+
+        // Add backspace support for OTP inputs
+        $("#otpInputs input").on("keyup", function() {
+            let otp = "";
+            $("#otpInputs input").each(function() { otp += $(this).val(); });
+            $("#otpConfirmBtn").prop('disabled', otp.length < 6);
+        });
+
+        $("#otpInputs input").on("keydown", function(e) {
+            if (e.key === "Backspace" && this.value.length === 0) {
+                $(this).prev('input').focus();
+            }
+        });
+
+        function hideOtpModal() {
+            $("#otpModal").removeClass("flex").addClass("hidden");
+            clearInterval(otpInterval);
+        }
+
+        function startOtpTimer(seconds) {
+            let timeLeft = seconds;
+            $("#resendOtpBtn").addClass("hidden");
+            $("#otpTimer").removeClass("hidden").text(timeLeft + "s");
+            clearInterval(otpInterval);
+            
+            otpInterval = setInterval(() => {
+                timeLeft--;
+                $("#otpTimer").text(timeLeft + "s");
+                if (timeLeft <= 0) {
+                    clearInterval(otpInterval);
+                    $("#otpTimer").addClass("hidden");
+                    $("#resendOtpBtn").removeClass("hidden");
+                }
+            }, 1000);
+        }
+
+        function moveToNext(el, nextId) {
+            if (el.value.length >= 1) {
+                if (nextId) document.getElementById(nextId).focus();
+            }
+            
+            let otp = "";
+            $("#otpInputs input").each(function() { otp += $(this).val(); });
+            $("#otpConfirmBtn").prop('disabled', otp.length < 6);
+
+            // Clear error when typing
+            $("#otpError").addClass("hidden").text("");
+        }
+
+        function sendOtpRequest() {
+            // Re-trigger SendOTP
+            $.ajax({
+                url: subDomain + '@Url.Action("SendOTP", "Home")',
+                type: 'POST',
+                success: function(data) {
+                    if (data.responseCode === "0") {
+                        startOtpTimer(60);
+                        showNotification("OTP has been resent.", "success");
+                    } else {
+                        showNotification(data.responseMessage || "Failed to resend OTP", data.responseCode);
+                    }
+                }
+            });
+        }
+
+        function showReceiptSuccess(transId, amount, phone, totalTickets, drawDate) {
+            // Setup data dynamically
+            $("#receiptAmount").text(formatMoneyV2(amount) + " HTG");
+            if(phone) $("#receiptPhone").text(phone);
+            if(totalTickets) $("#receiptTotalTickets").text(totalTickets);
+            if(drawDate) $("#receiptDrawDate").text(drawDate);
+            
+            let gameTypeStr = "@Model.termType";
+            let displayName = "Basic Pick 10";
+            if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE") displayName = "@Lang.millions_big_small";
+            else if (gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") displayName = "@Lang.millions_odd_even";
+            else if (gameTypeStr === "@Constants.Millions_CODE") displayName = "Millions";
+            
+            $("#receiptGameType").text("@Lang.buy " + displayName);
+            $("#receiptTicketCode").text("#" + transId);
+            
+            let choiceText = "-";
+            if (gameTypeStr === "@Constants.PIC10_BIGSMALL_CODE" || gameTypeStr === "@Constants.PIC10_ODDEVEN_CODE") {
+                choiceText = $("#summaryTicketList .flex.items-center span.font-black").first().text().trim();
+            } else {
+                choiceText = gameTypeStr === "@Constants.Millions_CODE" ? "Millions 6" : "PICK 10";
+            }
+            $("#receiptChoice").text(choiceText);
+            
+            // Format current date "dd/MM/yyyy - HH:mm:ss"
+            let now = new Date();
+            let ds = now.getDate().toString().padStart(2, '0') + '/' + (now.getMonth() + 1).toString().padStart(2, '0') + '/' + now.getFullYear() + ' - ' + now.getHours().toString().padStart(2, '0') + ':' + now.getMinutes().toString().padStart(2, '0') + ':' + now.getSeconds().toString().padStart(2, '0');
+            $("#receiptTime").text(ds);
+
+            hideOtpModal();
+            $("#receiptSuccessModal").removeClass("hidden").addClass("flex");
+        }
+
+        function finalizePurchase(btn) {
+            let otpCode = "";
+            $("#otpInputs input").each(function() {
+                otpCode += $(this).val();
+            });
+            
+            if (otpCode.length < 6) {
+                showNotification("Please enter full 6-digit OTP", "warning");
+                return;
+            }
+
+            const originalText = $(btn).html();
+            $(btn).prop('disabled', true).html('<i class="fa-solid fa-spinner fa-spin mr-2"></i> ...');
+
+            const finalData = {
+                transIdByTicket: currentTransId,
+                paymentCode: otpCode
+            };
+
+            // Call the unified backend action that verifies OTP and then buys the ticket
+            $.ajax({
+                url: subDomain + '@Url.Action("ConfirmBuyingTicketV2", "Home")',
+                type: 'POST',
+                contentType: 'application/json',
+                data: JSON.stringify(finalData),
+                success: function(res) {
+                    $(btn).prop('disabled', false).html(originalText);
+                    
+                    if (res.responseCode === "0" || res.responseCode === "0000") {
+                        // Success: Show receipt Modal
+                        showReceiptSuccess(res.orderId || currentTransId, $("#summaryTotalAmount").text(), "@(Model.userStatus?.msisdn ?? "-")", $("#summaryTotalCount").text(), "@(currentTerm?.date_random ?? "-")");
+                    } else {
+                        if (res.responseCode === "-2" || (res.responseMessage && res.responseMessage.includes("System is upgrading"))) {
+                             hideOtpModal();
+                             showNotification(res.responseMessage || "System is upgrading", res.responseCode);
+                        } else {
+                             $("#otpError").text(res.responseMessage || "Invalid OTP").removeClass("hidden");
+                             $("#otpInputs input").val("");
+                             $("#otp1").focus();
+                        }
+                    }
+                },
+                error: function() {
+                    $(btn).prop('disabled', false).html(originalText);
+                    showNotification("Network error occurred during payment completion.", "warning");
+                }
+            });
+        }
+
+        var systemUpgrading = false;
+        function showNotification(message, code) {
+            const msgEl = $("#notificationMessage");
+            const iconEl = $("#notificationModal img");
+            const btnEl = $("#notificationModal button");
+            
+            msgEl.text(message);
+            
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                btnEl.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                btnEl.text("OK");
+            }
+
+            // Toggle icon based on type (warning or success)
+            const warningIcon = '/Millions/img/modal/warning_icon.png';
+            const successIcon = '/Millions/img/modal/success_icon_v2.png';
+            const fallbackWarning = 'https://cdn-icons-png.flaticon.com/512/564/564619.png';
+            const fallbackSuccess = 'https://cdn-icons-png.flaticon.com/512/190/190411.png';
+
+            if (code === "-2" || code === "warning" || code === "error") {
+                iconEl.attr('src', warningIcon);
+                iconEl.attr('onerror', `this.src='${fallbackWarning}'`);
+            } else {
+                iconEl.attr('src', successIcon);
+                iconEl.attr('onerror', `this.src='${fallbackSuccess}'`);
+            }
+
+            $("#notificationModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeNotificationModal() {
+            $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+
+        // ==================== CARD SELECTION GAME LOGIC (BIG/SMALL / ODD/EVEN) ====================
+        var bsChoice = null; // 'big' or 'small' (reused as 'odd' or 'even')
+        const isBigSmall = @(Model.termType == Constants.PIC10_BIGSMALL_CODE ? "true" : "false");
+        const themeColor = isBigSmall ? "#0A9800" : "#AA3DC8";
+        const labelBig = isBigSmall ? "Big" : "Odd";
+        const labelSmall = isBigSmall ? "Small" : "Even";
+        const colorBig = isBigSmall ? "#A2FF00" : "#FFC700";
+        const colorSmall = isBigSmall ? "#FF4157" : "#B33BD0";
+
+        // Loclized text from resources
+        const langSelect = "@Lang.millions_select";
+        const langSelected = "@Lang.millions_selected";
+
+        function selectBigSmall(choice) {
+            bsChoice = choice;
+            var cardBig = document.getElementById('cardBig');
+            var cardSmall = document.getElementById('cardSmall');
+            var choiceDisplay = document.getElementById('choiceDisplay');
+
+            if (!cardBig || !cardSmall) return;
+
+            if (choice === 'big') {
+                // Highlight Big/Odd card with theme glow
+                cardBig.style.border = '2px solid ' + themeColor;
+                cardBig.style.boxShadow = '0px 0px 12px 0px ' + (isBigSmall ? 'rgba(162, 255, 0, 1)' : 'rgba(179, 59, 208, 0.6)');
+                cardBig.querySelector('.bigsmall-btn').textContent = langSelected;
+                cardBig.querySelector('.bigsmall-btn').style.background = '#333';
+
+                // Reset Small/Even card
+                cardSmall.style.border = '2px solid transparent';
+                cardSmall.style.boxShadow = 'none';
+                cardSmall.querySelector('.bigsmall-btn').textContent = langSelect;
+                cardSmall.querySelector('.bigsmall-btn').style.background = themeColor;
+
+                // Update display
+                if (choiceDisplay) {
+                    choiceDisplay.textContent = labelBig;
+                    choiceDisplay.style.color = colorBig;
+                    choiceDisplay.style.webkitTextStroke = '1px #000';
+                }
+            } else {
+                // Highlight Small/Even card with theme glow
+                cardSmall.style.border = '2px solid ' + themeColor;
+                cardSmall.style.boxShadow = '0px 0px 12px 0px ' + (isBigSmall ? 'rgba(162, 255, 0, 1)' : 'rgba(179, 59, 208, 0.6)');
+                cardSmall.querySelector('.bigsmall-btn').textContent = langSelected;
+                cardSmall.querySelector('.bigsmall-btn').style.background = '#333';
+
+                // Reset Big/Odd card
+                cardBig.style.border = '2px solid transparent';
+                cardBig.style.boxShadow = 'none';
+                cardBig.querySelector('.bigsmall-btn').textContent = langSelect;
+                cardBig.querySelector('.bigsmall-btn').style.background = themeColor;
+
+                // Update display
+                if (choiceDisplay) {
+                    choiceDisplay.textContent = labelSmall;
+                    choiceDisplay.style.color = colorSmall;
+                    choiceDisplay.style.webkitTextStroke = '1px #000';
+                }
+            }
+            $("#bsTotalTicketCount").text(1);
+            $("#bsTotalPrice").text(formatMoneyV2(50));
+        }
+
+        function bsShowPayment(e) {
+            preparePayment(e);
+        }
+    </script>
+
+    <!-- Number Picker Modal (Refined Bottom Sheet) -->
+    <div id="numberPickerModal" class="fixed inset-0 bg-black/10 z-[200] hidden items-end justify-center p-0 transition-all">
+        <div class="modal-content bg-white w-full md:max-w-[414px] mx-auto shadow-2xl animate__animated animate__slideInUp animate__faster rounded-t-[20px] overflow-hidden">
+            <div class="px-4 py-3 bg-[#0062FF] text-white flex justify-between items-center relative">
+                <div class="flex flex-col">
+                    <h3 class="font-black text-[15px] uppercase tracking-wide" id="modalTitle">@Lang.Pick_Number</h3>
+                    <div class="selection-count-area">
+                        <span class="text-[10px] font-bold text-white/80 uppercase">Selected: <span id="selectionCount" class="text-white">0</span>/<span id="maxSelectionCount">10</span></span>
+                    </div>
+                </div>
+                <button onclick="closeNumberPicker()" class="w-9 h-9 flex items-center justify-center rounded-full bg-white/10 hover:bg-white/20 transition-all">
+                    <i class="fa-solid fa-xmark text-lg"></i>
+                </button>
+            </div>
+            
+            <style>
+                #numberGrid::-webkit-scrollbar { width: 3px; }
+                #numberGrid::-webkit-scrollbar-track { background: transparent; }
+                #numberGrid::-webkit-scrollbar-thumb { background: #FFD700; border-radius: 10px; }
+                #numberGrid { scrollbar-width: thin; scrollbar-color: #FFD700 transparent; }
+            </style>
+            <div class="p-1 px-2 grid grid-cols-10 gap-1.5 h-[160px] overflow-y-auto bg-gray-50 border-b" id="numberGrid">
+                 <!-- 1-80 populated via JS -->
+            </div>
+            <div class="p-3 bg-white border-t flex gap-3">
+                 <button onclick="closeNumberPicker()" class="flex-1 py-1 bg-gray-100 text-gray-600 rounded-lg font-black text-[12px] active:bg-gray-200 transition-all uppercase">
+                     @Lang.millions_back
+                 </button>
+                 <button id="confirmBtn" class="hidden flex-[2] py-2 bg-[#0062FF] text-white rounded-lg font-black text-[13px] active:bg-[#CC002D] transition-all uppercase shadow-md">
+                     @Lang.confirm
+                 </button>
+            </div>
+        </div>
+    </div>
+    <div id="notificationModal" class="fixed inset-0 z-[300] bg-black/60 flex items-center justify-center hidden px-4 font-bricolage backdrop-blur-sm">
+        <div class="w-full max-w-[360px] bg-white rounded-[32px] overflow-hidden flex flex-col items-center px-6 pt-5 pb-6 animate__animated animate__zoomIn animate__faster shadow-2xl relative border border-white/50">
+            <!-- Alert Icon -->
+            <div class="w-full flex justify-center mb-2 mt-0">
+                <img src="/Millions/img/modal/success_icon_v2.png" class="w-full max-w-[240px] h-auto object-contain" alt="Notificaton icon" onerror="this.src='https://cdn-icons-png.flaticon.com/512/190/190411.png'" />
+            </div>
+
+            <!-- Message Area -->
+            <div class="px-2 text-center mb-5">
+                <p id="notificationMessage" class="text-black font-[800] text-[17px] leading-snug">
+                    <!-- Message content -->
+                </p>
+            </div>
+
+            <!-- Action Button -->
+            <div class="w-full">
+                <button onclick="closeNotificationModal()" class="w-full bg-[#0062FF] text-white font-[900] text-[18px] py-[13px] rounded-[18px] shadow-[0_8px_20px_rgba(238,0,51,0.25)] active:scale-95 transition-all uppercase tracking-wide">
+                    OK
+                </button> 
+            </div>
+        </div>
+    </div>
+
+    <!-- Beautiful Success Receipt Modal (Matches Figma 161:3722) -->
+    <div id="receiptSuccessModal" class="fixed inset-0 z-[300] bg-black/80 hidden items-center justify-center px-4 font-bricolage backdrop-blur-md">
+        <div class="w-full max-w-[360px] bg-[#F9F9F9] rounded-[32px] overflow-hidden flex flex-col items-center px-6 pt-4 pb-5 shadow-2xl relative animate__animated animate__zoomIn animate__faster border border-white/50">
+            <!-- Confetti/Celebration background effect (Subtle removed) -->
+            
+            <h2 class="text-[#534A4A] font-[800] text-[19px] tracking-tight relative z-10 w-full text-center mt-1">@Lang.millions_payment_successfully</h2>
+            
+            <!-- Ticket / Success Graphic -->
+            <div class="relative w-full flex justify-center mt-2 mb-0 z-10 px-4">
+                <img src="/Millions/img/modal/success_icon_v2.png" alt="Success" class="w-full h-auto object-contain">
+            </div>
+
+            <h3 class="text-[#0A9800] font-[900] text-[20px] uppercase tracking-wide relative z-10">@Lang.success</h3>
+
+            <div class="w-full h-px border-t-[2px] border-dashed border-gray-300 my-3 relative z-10"></div>
+            
+            <div class="w-full flex justify-between items-center mb-2 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.phone_number</span>
+                <span class="font-black text-[14px] text-gray-800" id="receiptPhone">-</span>
+            </div>
+            <div class="w-full flex justify-between items-center mb-2 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.millions_your_choice</span>
+                <span class="text-[#0062FF] font-[900] text-[15px] uppercase" id="receiptChoice">-</span>
+            </div>
+            
+            <div class="w-full flex justify-between items-center mb-2 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.ticket_code</span>
+                <span class="font-black text-[13px] text-gray-800" id="receiptTicketCode">#</span>
+            </div>
+            <div class="w-full flex justify-between items-center mb-2 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.total_ticket</span>
+                <span class="font-black text-[14px] text-gray-800" id="receiptTotalTickets">-</span>
+            </div>
+            <div class="w-full flex justify-between items-center mb-2 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.millions_draw_date</span>
+                <span class="font-black text-[14px] text-gray-800" id="receiptDrawDate">-</span>
+            </div>
+            <div class="w-full flex justify-between items-center mb-1 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.total_payment</span>
+                <span class="text-[#0062FF] font-[900] text-[15px]" id="receiptAmount">0 HTG</span>
+            </div>
+
+            <div class="w-full h-px border-t-[2px] border-dashed border-gray-300 my-3 relative z-10"></div>
+            
+            <div class="w-full flex justify-between items-center mb-2 relative z-10 px-1">
+                <span class="text-[#534A4A] font-bold text-[14px]">@Lang.time</span>
+                <span class="font-bold text-[13px] text-gray-600" id="receiptTime">00:00:00</span>
+            </div>
+            
+            <div class="w-full flex justify-start items-center relative z-10 px-1 mt-1">
+                <span class="text-[#534A4A] font-bold text-[13px] italic text-gray-500" id="receiptGameType">@Lang.millions_buy_ticket_label</span>
+            </div>
+            
+            <div class="text-[#534A4A] font-[900] text-[18px] relative z-10 text-center mt-3">@Lang.thank_you <span class="text-[#0062FF]">♥️</span></div>
+            
+            <!-- Action Button -->
+            <button onclick="location.href='@Url.Action("GameHome", "Home", new { termType = Model.termType })'" class="w-full bg-[#0062FF] text-white font-[900] text-[18px] py-[13px] rounded-[18px] shadow-[0_8px_20px_rgba(238,0,51,0.25)] active:scale-95 transition-all mt-4 relative z-10 uppercase tracking-wide">
+                @Lang.back_to_homepage
+            </button> 
+        </div>
+    </div>
+}
+
+

+ 87 - 0
website/Areas/Millions/Views/Home/FAQ.cshtml

@@ -0,0 +1,87 @@
+@{
+    ViewData["Title"] = "Millions - FAQs";
+    ViewData["ActiveTab"] = "FAQ";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+
+<script src="https://cdn.tailwindcss.com"></script>
+<link rel="stylesheet" href="/Millions/css/faq.css">
+
+<div class="main-container animate__animated animate__fadeIn bg-[#F5F5F5] min-h-screen relative flex flex-col pb-24 shadow-xl overflow-x-hidden">
+
+    <!-- Header Block (Red) - Fixed -->
+    <div class="fixed top-0 left-0 md:left-1/2 md:-translate-x-1/2 w-full md:max-w-[414px] bg-[#0062FF] h-[52px] flex items-center justify-between px-4 z-[100] shadow-sm">
+        <!-- Back Button -->
+        <button onclick="window.history.back()" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-colors z-10 text-white cursor-pointer">
+            <i class="fa-solid fa-arrow-left text-[20px]"></i>
+        </button>
+        <!-- Title -->
+        <div class="absolute inset-0 flex items-center justify-center pointer-events-none">
+            <span class="text-white text-[24px] font-bold tracking-wide drop-shadow-sm">@Lang.faq</span>
+        </div>
+    </div>
+
+    <!-- Header Spacer (~52px) -->
+    <div class="h-[52px]"></div>
+
+
+
+    <!-- Banner Graphic directly integrated with Grey background -->
+    <div class="w-full relative flex justify-center mt-3 mb-1">
+         <img src="/Millions/img/faq_banner_full.png" alt="FAQ Graphic" class="w-full max-h-48 object-contain z-10 px-4 pointer-events-none">
+    </div>
+
+    <!-- Messages / FAQ Chat Style List -->
+    <div class="flex-1 w-full px-5 pt-8 pb-20 space-y-5" id="faq-list">
+        
+        <!-- Standard Row Bot Bubble (Question) -->
+        <div class="flex justify-start">
+             <div class="rounded-xl rounded-tl-sm px-5 py-3 shadow-sm w-[90%] bg-[#0062FF] text-white">
+                 <span class="text-sm font-bold leading-snug block">@Lang.faq_q1</span>
+             </div>
+        </div>
+
+        <!-- Standard Row User Bubble (Answer) -->
+        <div class="flex justify-end mt-2">
+             <div class="rounded-xl rounded-tr-sm px-5 py-4 shadow-md w-[90%] bg-white text-[#212121] border border-gray-100">
+                 <span class="text-[13px] font-medium leading-relaxed block">@Lang.faq_a1</span>
+             </div>
+        </div>
+
+        <!-- Standard Row Bot Bubble (Question) -->
+        <div class="flex justify-start mt-8">
+             <div class="rounded-xl rounded-tl-sm px-5 py-3 shadow-sm w-[90%] bg-[#0062FF] text-white">
+                 <span class="text-sm font-bold leading-snug block">@Lang.faq_q2</span>
+             </div>
+        </div>
+
+        <!-- Standard Row User Bubble (Answer Long Text) -->
+        <div class="flex justify-end mt-2">
+             <div class="rounded-xl rounded-tr-sm px-5 py-4 shadow-md w-[90%] bg-white text-[#212121] border border-gray-100">
+                 <span class="text-[13px] font-medium leading-relaxed block mb-3">@Lang.faq_a2</span>
+                 <span class="text-sm font-bold text-[#0062FF] block mb-1">@Lang.faq_q3</span>
+                 <span class="text-[13px] font-medium leading-relaxed block">@Lang.faq_a3</span>
+             </div>
+        </div>
+
+        <!-- Q4: BASIC PICK 10 Prizes -->
+        <div class="flex justify-start pt-4">
+             <div class="rounded-xl rounded-tl-sm px-5 py-3 shadow-sm w-[90%] bg-[#0062FF] text-white">
+                 <span class="text-sm font-bold leading-snug block">@Lang.faq_millions_q4</span>
+             </div>
+        </div>
+        <div class="flex justify-end mt-2">
+             <div class="rounded-xl rounded-tr-sm px-5 py-4 shadow-md w-[90%] bg-white text-[#212121] border border-gray-100">
+                 <span class="text-[13px] font-medium leading-relaxed block">@Html.Raw(Lang.faq_millions_a4)</span>
+             </div>
+        </div>
+
+        <!-- Entries for other games removed as per request -->
+
+    </div>
+    <!-- Bottom Navbar shared component -->
+    <partial name="_BottomNavbar" />
+</div>
+
+

+ 320 - 0
website/Areas/Millions/Views/Home/GameHome.cshtml

@@ -0,0 +1,320 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = "Millions - Game Home";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+@using LotteryWebApp.Controllers;
+@using LotteryWebApp.Common;
+
+
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+
+<div class="main-container animate__animated animate__fadeIn bg-[#F5F5F5] min-h-screen">
+    <!-- Top Account Profile Bar / Backgound Red header -->
+    <div class="w-full bg-[#0062FF] p-4 text-white rounded-b-0xl shadow-md">
+        <!-- Row 1: Profile Info -->
+        <div class="flex items-center gap-4">
+            <a href="/LotteryV2/Home/Index" class="shrink-0 w-10 h-10 bg-white/20 backdrop-blur-md rounded-full flex items-center justify-center text-white border border-white/20 hover:bg-white/30 transition-all shadow-lg active:scale-90">
+                <i class="fas fa-chevron-left text-lg"></i>
+            </a>
+            <div class="flex items-center gap-4">
+                <div class="w-16 h-16 rounded-full border-2 border-white/60 overflow-hidden bg-[#FFE] shadow-sm">
+                    <img src="https://api.dicebear.com/7.x/avataaars/svg?seed=Ngan" alt="Avatar" class="w-full h-full object-cover">
+                </div>
+                <div>
+                    <div class="font-bold text-sm tracking-wide opacity-90">@(Model?.profile?.users ?? "User")</div>
+                    <div class="flex items-center gap-1 mt-0.5">
+                        <span class="text-3xl font-black text-[#FBF3A7]" style="text-shadow: 0 1px 2px rgba(0,0,0,0.2)">@FormatMoney(Model?.userStatus?.bet_coin)</span>
+                        <span class="text-xs font-bold text-[#FBF3A7] uppercase mt-1">@Lang.millions_htg</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- Row 2: Pill Actions Full Width Split -->
+        <div class="grid grid-cols-2 gap-3 mt-4">
+             <a onclick="checkTerm('@Constants.PIC10_BASIC_CODE')" class="btn-pulse border border-white/50 rounded-xl py-2 px-3 flex items-center justify-center gap-1 text-xr font-extrabold bg-white/10 hover:bg-white/20 transition-all text-white no-underline">
+                 <span class="text-yellow-300 text-xl">⚡</span> @Lang.quick_pick
+             </a>
+             <a href="/Millions/Home/Results" class="btn-pulse border border-white/50 rounded-xl py-2 px-3 flex items-center justify-center gap-1 text-xr font-extrabold bg-white/10 hover:bg-white/20 transition-all text-white no-underline">
+                <span class="text-yellow-300 text-xl">🎫</span> @Lang.results
+             </a>
+        </div>
+
+        <!-- Row 3: Withdraw Button Full Width -->
+        <div class="w-full mt-3">
+             <button onclick="location.href='@Url.Action("TransferWinMoney", "Home")'" class="btn-pulse w-full text-black font-black py-3 rounded-2xl text-[18px] flex items-center justify-center gap-2 shadow-lg transition-all" style="background: linear-gradient(118deg, #19EF4B 0%, #C0FF4B 100%);">
+                 <span>@Lang.tranfer_win_money</span>
+                 <img src="/Millions/img/gold_wallet.png" alt="Wallet" class="w-6 h-6 object-contain">
+             </button>
+        </div>
+    </div>
+
+    <!-- Countdown Timer Bar with Scalloped bottom divider background -->
+    <div class="relative w-full overflow-hidden" style="background-image: url('/Millions/img/wavy_border.svg'); background-size: 102% 100%; background-position: center; background-repeat: no-repeat; height: 114px;">
+        <!-- Top border red line -->
+        <div class="absolute top-0 left-0 w-full h-[1.5px] bg-[#0062FF]"></div>
+        
+        <div class="flex items-center justify-between px-4 pt-7 relative z-10">
+             <!-- Left: Draw Date -->
+             <div class="flex items-center gap-1 flex-1 min-w-0">
+                 <div class="w-8 h-8 flex-shrink-0">
+                     <img src="/Millions/img/calendar_icon_3d.png" alt="Calendar" class="w-full h-full object-contain" onerror="this.src='/Millions/img/icon_calendar.svg'">
+                 </div>
+                 <div class="flex flex-col min-w-0">
+                     <span class="text-[11px] text-[#A1A1A1] font-bold leading-none mb-1">Next Pick 10 draw</span>
+                     <span class="text-[12px] font-[900] text-black tracking-tight leading-none" id="draw-date">Friday, Mar 20, 2026</span>
+                 </div>
+             </div>
+
+             <!-- Middle: Dashed Divider -->
+             <div class="h-10 w-px border-l border-dashed border-gray-300 mx-2"></div>
+             
+             <!-- Right: Timer -->
+             <div class="flex gap-4 shrink-0">
+                 <div class="flex flex-col items-center min-w-[42px]">
+                     <span class="text-[10px] text-[#A1A1A1] font-bold uppercase tracking-tighter mb-1">@Lang.hours</span>
+                     <span class="text-[28px] font-black text-black leading-none font-bricolage" id="countdown-hours">00</span>
+                 </div>
+                 <div class="flex flex-col items-center min-w-[42px]">
+                    <span class="text-[10px] text-[#A1A1A1] font-bold uppercase tracking-tighter mb-1">@Lang.Minutes</span>
+                     <span class="text-[28px] font-black text-black leading-none font-bricolage" id="countdown-minutes">00</span>
+                 </div>
+                 <div class="flex flex-col items-center min-w-[42px]">
+                    <span class="text-[10px] text-[#A1A1A1] font-bold uppercase tracking-tighter mb-1">@Lang.Secs</span>
+                     <span class="text-[28px] font-black text-black leading-none font-bricolage" id="countdown-seconds">00</span>
+                 </div>
+             </div>
+        </div>
+    </div>
+
+    <!-- Anti-forgery token for AJAX -->
+    @Html.AntiForgeryToken()
+
+    <!-- Card list items with accurate illustrations -->
+    <div class="px-3 flex flex-col gap-2 pb-40 relative z-10 mt-[14px]">
+        
+        <!-- Game item: Millions -->
+        <div class="relative w-full h-[120px] rounded-2xl overflow-hidden shadow-xl font-bricolage transition-all duration-300 active:scale-[0.98] cursor-pointer card-red" onclick="checkTerm('@Constants.Millions_CODE')">
+            <!-- 1. Premium Gradient Border -->
+            <div class="absolute inset-0 rounded-2xl border-[1.5px] border-white/40 pointer-events-none z-20"></div>
+            
+            <!-- 2. Decorative Highlights -->
+            <img src="/Millions/img/decorations/ellipse_1183.png" class="absolute -left-[80px] -top-[130px] w-[220px] h-[220px] pointer-events-none z-10 mix-blend-screen scale-y-[-1]" alt="highlight">
+            <img src="/Millions/img/decorations/ellipse_1181.png" class="absolute -right-[60px] -top-[20px] w-[200px] h-[200px] pointer-events-none z-10 mix-blend-screen" alt="highlight">
+
+            <div class="absolute inset-0 grid grid-cols-10 items-center px-3 z-20 gap-0">
+                <!-- Left: Millions + Ball (3 columns) -->
+                <div class="col-span-3 flex items-center h-full -ml-2 relative">
+                    <!-- Text Layout -->
+                    <div class="flex flex-col items-center leading-[0.85] relative z-10 font-UTM_Futura_Extra">
+                        <span class="text-white font-[900] text-[16px] drop-shadow-md">Millions</span>
+                        <span class="font-[900] text-[30px] drop-shadow-lg leading-[0.9]" style="background: linear-gradient(180deg, #FFFFFF 20%, #FFF307 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">6 số</span>
+                        
+                        <!-- Floating Bubbles -->
+                        <div class="absolute top-[-4px] right-[-4px] w-2.5 h-2.5 bg-white rounded-full shadow-sm"></div>
+                        <div class="absolute top-[18px] right-[-6px] w-2 h-2 bg-yellow-400 rounded-full shadow-sm"></div>
+                    </div>
+
+                    <!-- Single Ball (Yellow) -->
+                    <div class="relative w-[36px] h-[36px] flex-shrink-0 -ml-18 aspect-square z-20">
+                        <div class="w-full h-full bg-[#FFDE59] rounded-full border-[2.5px] border-white flex items-center justify-center shadow-lg">
+                            <span class="text-black font-[900] text-[18px] leading-none mb-0.5">6</span>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- Center: Jackpot info (4 columns) -->
+                <div class="col-span-4 flex flex-col items-center justify-center text-center">
+                    <div class="text-[14px] font-bold text-white mb-0.5 whitespace-nowrap opacity-90">@Lang.jackpot_prize</div>
+                    <div class="flex items-start gap-0.5">
+                        <span class="text-[22px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">30.000.000</span>
+                        <span class="text-[9px] font-bold text-white uppercase opacity-90 mt-1">@Lang.millions_htg</span>
+                    </div>
+                    <div class="text-[12px] text-white/90 font-medium whitespace-nowrap mt-1">@Lang.next_round <span class="font-black text-yellow-300 ml-1 countdown-timer">00:00:00</span></div>
+                </div>
+
+                <!-- Right: Action Section (3 columns) -->
+                <div class="col-span-3 flex flex-col items-center justify-end h-full pb-3.5 relative">
+                    <img src="/Millions/img/gold_chest.png" alt="Chest" class="absolute bottom-[38px] w-18 h-20 object-contain filter drop-shadow-lg z-10">
+                    <button class="text-black font-black px-3 w-full py-1.5 rounded-[12px] text-[13px] shadow-xl border border-white/50 hover:brightness-110 active:scale-95 transition-all relative z-0" style="background: linear-gradient(180deg, #FFF385 0%, #EFAD19 100%);">@Lang.rule_play_now</button>
+                </div>
+            </div>
+        </div>
+
+
+    </div>
+
+    <!-- Banner Info Section centered red text bar -->
+    <div class="fixed bottom-[82px] left-1/2 -translate-x-1/2 w-full min-[600px]:max-w-[414px] bg-[#0062FF] text-white py-2 text-center text-[13px] font-bold tracking-wide z-40 flex flex-col items-center justify-center overflow-hidden h-auto shadow-md">
+         <div class="flex flex-col items-center w-full animate-slide-up">
+             <!-- Row 1 -->
+             <div class="opacity-90">@Lang.have_chance_to_get</div>
+             <!-- Row 2 -->
+             <div class="text-[20px] font-black text-[#FBF3A7] mt-0.5">
+                @Lang.millions_jackpot_today_htg
+             </div>
+         </div>
+    </div>
+
+    <!-- Custom Notification Modal (Branded design from Profile) -->
+    <div id="notificationModal" class="fixed inset-0 z-[100] flex items-center justify-center hidden px-6 font-bricolage" style="background: linear-gradient(135deg, rgba(26, 26, 46, 0.9) 0%, rgba(22, 33, 62, 0.9) 100%);">
+        <div class="w-full max-w-[343px] min-h-[480px] bg-white rounded-[24px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster shadow-2xl">
+            <!-- Alert Icon -->
+            <div class="w-full flex justify-center mb-8 mt-6">
+                <img src="/Millions/img/modal/fail_icon.png" class="w-[180px] h-auto object-contain" alt="Notificaton icon" />
+            </div>
+
+            <!-- Message Area -->
+            <div class="px-2 text-center mb-10 flex-1 flex items-center justify-center">
+                <p id="notificationMessage" class="text-black font-[800] text-[22px] leading-snug">
+                    <!-- Message content -->
+                </p>
+            </div>
+
+            <!-- Action Button -->
+            <div class="w-full">
+                <button onclick="closeNotificationModal()" class="w-full bg-[#0062FF] text-white font-[800] text-[20px] py-[12px] rounded-[14px] shadow-lg active:scale-95 transition-all">
+                    @Lang.try_again
+                </button> 
+            </div>
+        </div>
+    </div>
+
+    <!-- Bottom Navbar shared component -->
+    <partial name="_BottomNavbar" />
+</div>
+
+@section Scripts {
+    <script>
+        var systemUpgrading = false;
+        function showNotification(message, code) {
+            $("#notificationMessage").text(message);
+            const $btn = $("#notificationModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("@Lang.try_again");
+            }
+            $("#notificationModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeNotificationModal() {
+            $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+
+        let isCheckingTerm = false;
+
+        function checkTerm(termType) {
+            if (isCheckingTerm) return;
+            isCheckingTerm = true;
+
+            // Get anti-forgery token from the page
+            var token = $('input[name="__RequestVerificationToken"]').val();
+            
+            // Show loading or disable buttons if needed
+            $.ajax({
+                url: subDomain + '/Millions/Home/TermResult',
+                type: 'POST',
+                data: {
+                    __RequestVerificationToken: token,
+                    termType: termType
+                },
+                success: function (res) {
+                    if (res.responseCode === "0") {
+                        if (res.listTerm && res.listTerm.length > 0) {
+                            var status = res.listTerm[0].status;
+                            if (status === "0" || status === "1") {
+                                location.href = subDomain + '/Millions/Home/BuyTicket?termType=' + termType;
+                                return;
+                            } else if (status === "2") {
+                                showNotification("@Lang.millions_game_locked");
+                            } else if (status === "3") {
+                                showNotification("@Lang.millions_updating_results");
+                            } else {
+                                showNotification("@Lang.millions_game_locked");
+                            }
+                        } else {
+                            showNotification("@Lang.no_results_found");
+                        }
+                    } else if (res.responseCode === "401") {
+                        window.location.href = subDomain + "/Account/Login";
+                        return;
+                    } else {
+                        showNotification(res.responseMessage || "@Lang.error_happened", res.responseCode);
+                    }
+                    isCheckingTerm = false;
+                },
+                error: function (err) {
+                    showNotification("@Lang.error_happened");
+                    isCheckingTerm = false;
+                }
+            });
+        }
+
+        function startCountdown() {
+            const targetHour = 20; // 20:00 (8h tối)
+            const now = new Date();
+            let target = new Date();
+            target.setHours(targetHour, 0, 0, 0);
+
+            if (now >= target) {
+                target.setDate(target.getDate() + 1);
+            }
+
+            // Định dạng ngày hiển thị (VD: Friday, Mar 20, 2026)
+            const options = { weekday: 'long', month: 'short', day: 'numeric', year: 'numeric' };
+            const dateText = target.toLocaleDateString('en-US', options);
+            document.getElementById('draw-date').innerText = dateText;
+
+            function updateTime() {
+                const current = new Date();
+                const diff = target - current;
+
+                if (diff <= 0) {
+                    target.setDate(target.getDate() + 1);
+                    const updatedDateText = target.toLocaleDateString('en-US', options);
+                    document.getElementById('draw-date').innerText = updatedDateText;
+                    updateTime();
+                    return;
+                }
+
+                const hours = Math.floor((diff / (1000 * 60 * 60)));
+                const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
+                const seconds = Math.floor((diff % (1000 * 60)) / 1000);
+
+                document.getElementById('countdown-hours').innerText = hours.toString().padStart(2, '0');
+                document.getElementById('countdown-minutes').innerText = minutes.toString().padStart(2, '0');
+                document.getElementById('countdown-seconds').innerText = seconds.toString().padStart(2, '0');
+
+                // Update all card timers
+                const timeStr = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
+                document.querySelectorAll('.countdown-timer').forEach(t => t.innerText = timeStr);
+            }
+
+            updateTime();
+            setInterval(updateTime, 1000);
+        }
+
+        document.addEventListener('DOMContentLoaded', startCountdown);
+    </script>
+}
+
+
+
+

+ 308 - 0
website/Areas/Millions/Views/Home/History.cshtml

@@ -0,0 +1,308 @@
+@model LotteryWebApp.Models.UserTicketHistoryModel
+@using LotteryWebApp.Languages
+@using LotteryWebApp.Common
+@{
+    ViewData["Title"] = "Millions - History";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+    ViewData["ActiveTab"] = "History";
+}
+
+@section Styles {
+    <script src="https://cdn.tailwindcss.com"></script>
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+    <link rel="stylesheet" href="/Millions/css/site.css" />
+    <link rel="stylesheet" href="/Millions/css/results.css" />
+    <link rel="stylesheet" href="/Millions/css/history.css" />
+}
+
+<div class="main-container results-container animate__animated animate__fadeIn pb-40 relative">
+    <!-- Header Group: Static at Top -->
+    <div class="w-full z-[100] bg-[#F3F4F6] pb-2 shadow-md">
+        <!-- Header -->
+        <div class="results-top-header">
+            <a href="/Millions/Home/GameHome" class="back-btn">
+                <i class="fas fa-arrow-left"></i>
+            </a>
+            <h1 class="font-bricolage">@Lang.history</h1>
+        </div>
+
+        <!-- Removed game tabs as per request: only Millions_CODE is used -->
+        <input type="hidden" id="currentTermType" value="@Constants.Millions_CODE" />
+
+        <!-- Status Filters -->
+        <div class="status-filters !mt-1">
+            <div class="status-filter @(Model.status == Constants.ALL_DATA ? "active" : "")" 
+                 onclick="changeStatus('@Constants.ALL_DATA', this)">@Lang.millions_all</div>
+            <div class="status-filter @(Model.status == Constants.NOT_DRAW_CODE ? "active" : "")" 
+                 onclick="changeStatus('@Constants.NOT_DRAW_CODE', this)">@Lang.millions_waiting</div>
+            <div class="status-filter @(Model.status == Constants.WIN_CODE ? "active" : "")" 
+                 onclick="changeStatus('@Constants.WIN_CODE', this)">@Lang.millions_win</div>
+            <div class="status-filter @(Model.status == Constants.DRAWN_CODE ? "active" : "")" 
+                 onclick="changeStatus('@Constants.DRAWN_CODE', this)">@Lang.millions_not_win</div>
+        </div>
+    </div>
+
+    <!-- Ticket List Container -->
+    <div id="history-list-container" class="history-items-list px-4 mt-2">
+        <partial name="_TermUserTicketHistory" model="Model" />
+    </div>
+
+    <!-- Shared Bottom Navbar -->
+    <partial name="_BottomNavbar" />
+
+    <!-- Custom Notification Modal -->
+    <div id="notificationModal" class="fixed inset-0 z-[300] flex items-center justify-center hidden px-6 font-bricolage" style="background: linear-gradient(135deg, rgba(26, 26, 46, 0.9) 0%, rgba(22, 33, 62, 0.9) 100%);">
+        <div class="w-full max-w-[343px] min-h-[420px] bg-white rounded-[24px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster shadow-2xl border border-white/50">
+            <div class="w-full flex justify-center mb-8 mt-4">
+                <img src="/Millions/img/modal/fail_icon.png" class="w-[160px] h-auto object-contain" alt="Notificaton icon" />
+            </div>
+            <div class="px-2 text-center mb-10 flex-1 flex items-center justify-center">
+                <p id="notificationMessage" class="text-black font-[800] text-[20px] leading-snug"></p>
+            </div>
+            <div class="w-full">
+                <button onclick="closeNotificationModal()" class="w-full bg-[#0062FF] text-white font-[800] text-[18px] py-[12px] rounded-[16px] shadow-lg active:scale-95 transition-all">
+                    @Lang.login
+                </button> 
+            </div>
+        </div>
+    </div>
+</div>
+
+@section Scripts {
+    <script>
+
+        let currentTermType = '@Model.termType';
+        let currentStatus = '@Model.status';
+        let currentSeqPage = parseInt('@Model.seqPage');
+        let totalPages = parseInt('@Model.totalPage' || '1');
+
+        function changeGame(type, el) {
+            if (currentTermType === type) return;
+            currentTermType = type;
+            currentSeqPage = 1;
+            
+            document.querySelectorAll('.game-tab').forEach(t => t.classList.remove('active'));
+            el.classList.add('active');
+            
+            loadHistory();
+        }
+
+        function changeStatus(status, el) {
+            if (currentStatus === status) return;
+            currentStatus = status;
+            currentSeqPage = 1;
+
+            document.querySelectorAll('.status-filter').forEach(t => t.classList.remove('active'));
+            el.classList.add('active');
+
+            loadHistory();
+        }
+
+        function changePage(page) {
+            if (page < 1 || page > totalPages) return;
+            currentSeqPage = page;
+            loadHistory();
+        }
+
+        var systemUpgrading = false;
+        function showNotification(message, code) {
+            $("#notificationMessage").text(message);
+            const $btn = $("#notificationModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("OK");
+            }
+            $("#notificationModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeNotificationModal() {
+            $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+
+        function loadHistory() {
+            const container = document.getElementById("history-list-container");
+            container.style.opacity = "0.5";
+
+            fetch(subDomain + `/Millions/Home/TermUserTicketHistory?termType=${currentTermType}&status=${currentStatus}&seqPage=${currentSeqPage}`)
+                .then(response => {
+                    if (!response.ok) throw new Error('Network response was not ok');
+                    return response.text();
+                })
+                .then(html => {
+                    try {
+                        const json = JSON.parse(html);
+                        if (json.responseCode === "-2" || (json.responseMessage && json.responseMessage.includes("System is upgrading"))) {
+                            showNotification(json.responseMessage || "System is upgrading", "-2");
+                            return;
+                        }
+                    } catch (e) {
+                        // Not JSON, likely HTML partial
+                    }
+                    container.innerHTML = html;
+                    container.style.opacity = "1";
+                    updatePaginationUI();
+                })
+                .catch(error => {
+                    console.error("Error loading history:", error);
+                    container.style.opacity = "1";
+                    if (error.message && (error.message.includes("System is upgrading") || error.message.includes("-2"))) {
+                        showNotification(error.message, "-2");
+                    }
+                });
+        }
+
+        function updatePaginationUI() {
+            const pageDisplay = document.getElementById("pageDisplay");
+            const prevBtn = document.getElementById("prevPage");
+            const nextBtn = document.getElementById("nextPage");
+            
+            if (pageDisplay) {
+                pageDisplay.innerText = `${currentSeqPage} / ${totalPages}`;
+            }
+            if (prevBtn) prevBtn.disabled = currentSeqPage <= 1;
+            if (nextBtn) nextBtn.disabled = currentSeqPage >= totalPages;
+        }
+
+        function showTicketDetail(billCode, money, moneyWin, date, channel, payMethod, ticketCode, gameId, drawTime, ticketId) {
+            document.getElementById('detailBillCode').innerText = '#' + (billCode || '-');
+            document.getElementById('detailTicketCode').innerText = '#' + (ticketId || '-');
+            document.getElementById('detailMoney').innerText = formatMoneyV2(money || '0') + ' HTG';
+            document.getElementById('detailMoneyWin').innerText = formatMoneyV2(moneyWin || '0') + ' HTG';
+            document.getElementById('detailDate').innerText = date || '-';
+            document.getElementById('detailDrawTime').innerText = drawTime || '-';
+            document.getElementById('detailChannel').innerText = channel || 'App';
+            
+            // Logic for Game Name and Color
+            let gameName = "@Lang.millions_classic_pick_10";
+            let gameColor = "#0062FF"; // Red
+            
+            if (gameId === "31") {
+                gameName = "@Lang.millions_big_small";
+                gameColor = "#00A3FF"; // Blue
+            } else if (gameId === "32") {
+                gameName = "@Lang.millions_odd_even";
+                gameColor = "#9333EA"; // Purple
+            }
+            
+            const gameEl = document.getElementById('detailGameName');
+            gameEl.innerText = gameName;
+            gameEl.style.color = gameColor;
+
+            let payMethodText = "Main Account";
+            if(payMethod == "1") payMethodText = "Wallet";
+            else if(payMethod == "0") payMethodText = "Main Account";
+
+            document.getElementById('detailPaymentMethod').innerText = payMethodText;
+
+            // Render Numbers
+            const container = document.getElementById('detailBallsContainer');
+            container.innerHTML = '';
+            if (ticketCode) {
+                const balls = ticketCode.split(/[;,]/).filter(x => x.trim() !== '');
+                balls.forEach(val => {
+                    let ballVal = val.trim();
+                    let displayVal = ballVal;
+                    let isLabel = false;
+                    switch(ballVal.toUpperCase()) {
+                        case 'B': displayVal = 'Big'; isLabel = true; break;
+                        case 'S': displayVal = 'Small'; isLabel = true; break;
+                        case 'O': displayVal = 'Odd'; isLabel = true; break;
+                        case 'E': displayVal = 'Even'; isLabel = true; break;
+                    }
+
+                    const div = document.createElement('div');
+                    if (isLabel) {
+                        div.className = "bg-[#0062FF] text-white px-4 py-1 rounded-full font-black text-[12px] shadow-sm uppercase tracking-wider";
+                    } else {
+                        div.className = "w-8 h-8 rounded-full flex items-center justify-center text-white text-[12px] font-black shadow-md";
+                        div.style.background = "linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%)";
+                        div.style.border = "1px solid rgba(255, 255, 255, 0.3)";
+                    }
+                    div.innerText = displayVal;
+                    container.appendChild(div);
+                });
+            }
+            
+            const modal = document.getElementById('ticketDetailModal');
+            modal.classList.remove('hidden');
+            modal.classList.add('flex');
+        }
+
+        function closeDetailModal() {
+            const modal = document.getElementById('ticketDetailModal');
+            modal.classList.add('hidden');
+            modal.classList.remove('flex');
+        }
+    </script>
+}
+
+<!-- Ticket Detail Modal -->
+<div id="ticketDetailModal" class="fixed inset-0 z-[200] bg-black/60 hidden items-center justify-center p-4 font-bricolage backdrop-blur-sm">
+    <div class="w-full max-w-[380px] bg-white rounded-[28px] overflow-hidden flex flex-col items-center px-6 py-8 shadow-2xl relative animate__animated animate__zoomIn animate__faster">
+        <button onclick="closeDetailModal()" class="absolute top-4 right-4 text-gray-400 hover:text-gray-600 transition-colors">
+            <i class="fas fa-times text-xl"></i>
+        </button>
+        
+        <div class="w-20 h-20 bg-gray-50 rounded-full flex items-center justify-center mb-4">
+            <i class="fas fa-receipt text-3xl text-[#0062FF]"></i>
+        </div>
+        
+        <h2 class="text-[20px] font-black text-gray-800 mb-2 uppercase tracking-tight">@Lang.millions_ticket_detail</h2>
+        
+        <!-- Ticket Numbers Display -->
+        <div id="detailBallsContainer" class="flex flex-wrap justify-center gap-2 mb-6 mt-2 max-w-full">
+            <!-- Dynamic balls here -->
+        </div>
+
+        <div class="w-full space-y-4">
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_game</span>
+                <span id="detailGameName" class="font-black">Pick 10</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_bill_code</span>
+                <span id="detailBillCode" class="font-black text-gray-800">#</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_ticket_code</span>
+                <span id="detailTicketCode" class="font-black text-gray-800">#</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_money_ticket</span>
+                <span id="detailMoney" class="font-black text-gray-800">0 HTG</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_money_win</span>
+                <span id="detailMoneyWin" class="font-black text-[#0A9800]">0 HTG</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_purchase_date</span>
+                <span id="detailDate" class="font-black text-gray-800">-</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_draw_date</span>
+                <span id="detailDrawTime" class="font-black text-gray-800">-</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_channel</span>
+                <span id="detailChannel" class="font-black text-gray-800">-</span>
+            </div>
+            <div class="flex justify-between items-center text-sm border-b border-gray-50 pb-2">
+                <span class="text-gray-400 font-bold uppercase text-[11px]">@Lang.millions_payment_method</span>
+                <span id="detailPaymentMethod" class="font-black text-gray-800">-</span>
+            </div>
+        </div>
+        
+        <button onclick="closeDetailModal()" class="w-full bg-[#0062FF] text-white font-black text-[16px] py-3.5 rounded-2xl shadow-lg mt-8 active:scale-95 transition-all uppercase tracking-widest">
+            @Lang.millions_close
+        </button>
+    </div>
+</div>
+
+

+ 148 - 0
website/Areas/Millions/Views/Home/HowToPlay.cshtml

@@ -0,0 +1,148 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = "Millions - How to play";
+    ViewData["ActiveTab"] = "More";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+
+<script src="https://cdn.tailwindcss.com"></script>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+<link rel="stylesheet" href="/Millions/css/site.css" />
+
+<!-- Add custom font Bricolage Grotesque to match Figma styling -->
+<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;700;800;900&display=swap" rel="stylesheet">
+<link rel="stylesheet" href="/Millions/css/howtoplay.css" />
+
+<div class="main-container animate__animated animate__fadeIn min-h-screen relative flex flex-col pb-24 font-bricolage overflow-x-hidden" style="background-color: #EAEAEA !important;">
+    
+    <!-- Header (Red Background) -->
+    <div class="w-full bg-[#0062FF] h-[52px] flex items-center justify-between px-4 sticky top-0 z-50">
+        <!-- Back Button -->
+        <button onclick="window.history.back()" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-colors z-10 text-white">
+            <i class="fa-solid fa-arrow-left text-[20px]"></i>
+        </button>
+        <!-- Title -->
+        <div class="absolute inset-0 flex items-center justify-center pointer-events-none">
+            <span class="font-bold text-[24px] text-white tracking-wide drop-shadow-sm">@Lang.how_to_play</span>
+        </div>
+    </div>
+
+    <!-- Content / Cards -->
+    <div class="w-full flex flex-col px-5 py-4 gap-6">
+
+        <!-- Card 1: Basic Pick 10 -->
+        <div class="w-full flex flex-col gap-1.5 cursor-pointer hover:opacity-95 transition-opacity" onclick="window.location.href='/Millions/Home/GameHome'">
+            <h2 class="text-[13px] font-bold text-[#534A4A] tracking-normal px-1">@Lang.how_to_play_pick10</h2>
+            <div class="w-full h-[90px] rounded-[16px] relative overflow-hidden card-red border border-white/20 shadow-[0_4px_10px_rgba(238,0,51,0.25)]">
+                <!-- Background Glow -->
+                <div class="absolute -left-6 -top-6 w-20 h-20 bg-white/20 rounded-full blur-2xl"></div>
+                <div class="absolute -bottom-10 -right-10 w-24 h-24 bg-black/20 rounded-full blur-2xl"></div>
+                
+                <div class="w-full h-full flex items-center justify-between pl-3 pr-2 relative z-10">
+                    <!-- Left: Basic Pick 10 Logo -->
+                    <div class="flex flex-col items-center justify-center pt-2">
+                        <span class="text-[14px] font-black italic text-white drop-shadow-md leading-[1.1] text-center" style="font-family: 'Montserrat', sans-serif;">Basic<br>Pick</span>
+                        <img src="/Millions/img/ball_10.png" class="w-7 h-7 object-contain drop-shadow-md -mt-2 -mr-8 border-2 border-[#E11D48] rounded-full bg-[#E11D48]">
+                    </div>
+
+                    <!-- Center: Numbers -->
+                    <div class="flex flex-col items-center mt-0.5 ml-4">
+                        <span class="text-[10px] font-[800] text-white tracking-widest drop-shadow">@Lang.jackpot_prize</span>
+                        <div class="flex items-start gap-1 mt-0.5">
+                            <span class="text-[28px] font-[900] text-white leading-none tracking-tight drop-shadow-md">100.000</span>
+                            <span class="text-[7px] font-[800] text-white bg-transparent border border-white/60 rounded px-[2px] mt-1 shadow-sm leading-tight">HTG</span>
+                        </div>
+                        <div class="text-[9px] text-white/90 mt-0.5">@Lang.next_round <span class="font-[900] text-white ml-0.5 drop-shadow">05:00</span></div>
+                    </div>
+
+                    <!-- Right: Graphic & Button -->
+                    <div class="flex flex-col items-end justify-between h-full py-2 w-[70px]">
+                        <img src="/Millions/img/play_chest.png" class="h-[46px] w-[56px] object-contain drop-shadow-lg scale-125 origin-top-right mr-1 mt-1">
+                        <div class="w-full yellow-button text-center rounded-[8px] py-[3px] text-[10px] font-[900] px-2 z-20 active:scale-95 transition-transform mt-auto">@Lang.play</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- Card 2: Millionair -->
+        <div class="w-full flex flex-col gap-1.5 cursor-pointer hover:opacity-95 transition-opacity" onclick="window.location.href='/Millions/Home/GameHome'">
+            <h2 class="text-[13px] font-bold text-[#534A4A] tracking-normal px-1">@Lang.how_to_play_millionair</h2>
+            <div class="w-full h-[90px] rounded-[16px] relative overflow-hidden card-blue border border-white/20 shadow-[0_4px_10px_rgba(26,146,244,0.25)]">
+                <!-- Background Glow -->
+                <div class="absolute -left-6 -top-6 w-20 h-20 bg-white/20 rounded-full blur-2xl"></div>
+                <div class="absolute -bottom-10 -right-10 w-24 h-24 bg-black/20 rounded-full blur-2xl"></div>
+                
+                <div class="w-full h-full flex items-center justify-between pl-1 pr-2 relative z-10">
+                    <!-- Left: Millionair Graphic -->
+                    <div class="flex flex-col items-center justify-end relative w-[80px] h-full z-10">
+                        <img src="/Millions/img/ball_86.png" class="absolute left-[-12px] top-[12px] w-[38px] h-[38px] object-contain drop-shadow-md z-0 transform -rotate-[15deg]">
+                        <img src="/Millions/img/ball_88.png" class="absolute left-[52px] top-[26px] w-[32px] h-[32px] object-contain drop-shadow-md z-0 transform rotate-[15deg]">
+                        <img src="/Millions/img/m1.png" class="absolute left-[10px] bottom-[-5px] h-[95px] w-auto object-contain drop-shadow-md z-10">
+                        <span class="text-[12px] font-black italic text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.8)] absolute bottom-[8px] left-[12px] tracking-wide z-20" style="font-family: 'Montserrat', sans-serif;">Millionair</span>
+                    </div>
+
+                    <!-- Center: Numbers -->
+                    <div class="flex flex-col items-center mt-0.5 -ml-1">
+                        <span class="text-[10px] font-[800] text-white tracking-widest drop-shadow">@Lang.jackpot_prize</span>
+                        <div class="flex items-start gap-1 mt-0.5">
+                            <span class="text-[28px] font-[900] text-[#FFDE59] leading-none tracking-tight drop-shadow-md">500.000</span>
+                            <span class="text-[7px] font-[800] text-white bg-transparent border border-white/60 rounded px-[2px] mt-1 shadow-sm leading-tight">HTG</span>
+                        </div>
+                        <div class="text-[9px] text-white/90 mt-0.5">@Lang.next_round <span class="font-[900] text-white ml-0.5 drop-shadow">05:00</span></div>
+                    </div>
+
+                    <!-- Right: Graphic & Button -->
+                    <div class="flex flex-col items-end justify-between h-full py-2 w-[70px]">
+                        <img src="/Millions/img/play_millionair.png" class="h-[43px] w-[58px] object-contain drop-shadow-[0_5px_8px_rgba(0,0,0,0.3)] scale-110 origin-right mr-1 mt-2">
+                        <div class="w-full yellow-button text-center rounded-[8px] py-[3px] text-[10px] font-[900] px-2 z-20 active:scale-95 transition-transform mt-auto">@Lang.play</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- Card 3: Mega Bet -->
+        <div class="w-full flex flex-col gap-1.5 cursor-pointer hover:opacity-95 transition-opacity" onclick="window.location.href='/Millions/Home/GameHome'">
+            <h2 class="text-[13px] font-bold text-[#534A4A] tracking-normal px-1">@Lang.how_to_play_megabet</h2>
+            <div class="w-full h-[90px] rounded-[16px] relative overflow-hidden card-orange border border-white/20 shadow-[0_4px_10px_rgba(248,110,34,0.25)]">
+                <!-- Background Glow -->
+                <div class="absolute -left-6 -top-6 w-20 h-20 bg-white/20 rounded-full blur-2xl"></div>
+                <div class="absolute -bottom-10 -right-10 w-24 h-24 bg-black/20 rounded-full blur-2xl"></div>
+                
+                <div class="w-full h-full flex items-center justify-between pl-3 pr-2 relative z-10">
+                    <!-- Left: Mega Bet Graphic -->
+                    <div class="flex items-center relative w-[80px] h-full">
+                        <div class="flex flex-col text-white drop-shadow-md text-left z-20" style="font-family: 'Montserrat', sans-serif;">
+                            <span class="text-[10px] font-[900] italic leading-[0.9]">@Lang.MEGA</span>
+                            <span class="text-[15px] font-[900] italic text-[#FFDE59] leading-[0.9]">@Lang.Bet</span>
+                        </div>
+                        <img src="/Millions/img/ball_88.png" class="w-[22px] h-[22px] object-contain drop-shadow-md absolute left-[38px] top-[24px] z-10">
+                        <img src="/Millions/img/ball_99.png" class="w-[28px] h-[28px] object-contain drop-shadow-lg absolute left-[52px] top-[30px] z-30">
+                    </div>
+
+                    <!-- Center: Numbers -->
+                    <div class="flex flex-col items-center mt-0.5 ml-2">
+                        <span class="text-[10px] font-[800] text-white tracking-widest drop-shadow">@Lang.jackpot_prize</span>
+                        <div class="flex items-start gap-1 mt-0.5">
+                            <span class="text-[28px] font-[900] text-white leading-none tracking-tight drop-shadow-md">800.000</span>
+                            <span class="text-[7px] font-[800] text-white bg-transparent border border-white/60 rounded px-[2px] mt-1 shadow-sm leading-tight">HTG</span>
+                        </div>
+                        <div class="text-[9px] text-white/90 mt-0.5">@Lang.next_round <span class="font-[900] text-white ml-0.5 drop-shadow">05:00</span></div>
+                    </div>
+
+                    <!-- Right: Graphic & Button -->
+                    <div class="flex flex-col items-end justify-between h-full py-2 w-[70px]">
+                        <img src="/Millions/img/play_megabet.png" class="h-[43px] w-[65px] object-contain drop-shadow-[0_8px_10px_rgba(0,0,0,0.5)] scale-110 origin-right mr-1 mt-2">
+                        <div class="w-full yellow-button text-center rounded-[8px] py-[3px] text-[10px] font-[900] px-2 z-20 active:scale-95 transition-transform mt-auto">@Lang.play</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </div>
+
+</div>
+
+<!-- Bottom Navbar shared component -->
+<partial name="_BottomNavbar" />
+

+ 146 - 0
website/Areas/Millions/Views/Home/More.cshtml

@@ -0,0 +1,146 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = "Millions - More";
+    ViewData["ActiveTab"] = "More";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+
+<script src="https://cdn.tailwindcss.com"></script>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+<link rel="stylesheet" href="/Millions/css/site.css" />
+<link rel="stylesheet" href="/Millions/css/more.css" />
+
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+
+<div class="main-container animate__animated animate__fadeIn min-h-screen relative flex flex-col pb-24 overflow-x-hidden" style="background-color: #EAEAEA !important;">
+    
+    <!-- User Profile Header (Center Aligned, Red Background) -->
+    <div class="w-full bg-[#0062FF] flex flex-col items-center justify-center pt-8 pb-6 px-6 relative z-10 border-none m-0">
+        <!-- Avatar Ring -->
+        <div class="w-[88px] h-[88px] bg-[#EAEAEA] rounded-full flex items-center justify-center border-4 border-[#FFF9CB] shadow-lg mb-3 overflow-hidden">
+            <img src="/Millions/img/avatar.png" class="w-full h-full object-cover" onerror="this.outerHTML='<i class=\'fa-solid fa-user text-gray-500 text-4xl\'></i>'" />
+        </div>
+        <!-- Info -->
+        <span class="font-bold text-lg text-white tracking-wide">@(Model?.profile?.fullName ?? "User")</span>
+        <span class="text-sm text-white font-medium tracking-wide mb-2">@(Model?.profile?.users ?? "0000000000")</span>
+
+        <!-- Coin Display (Matching GameHome aesthetic) -->
+        <div class="flex items-center gap-1.5 mt-1 bg-black/10 px-4 py-1 rounded-full border border-white/10 backdrop-blur-sm">
+            <img src="/Millions/img/gold_coin.png" class="w-5 h-5 object-contain" onerror="this.style.display='none'" />
+            <span class="text-[22px] font-black text-[#FBF3A7]" style="text-shadow: 0 1px 2px rgba(0,0,0,0.2)">@FormatMoney(Model?.userStatus?.bet_coin)</span>
+            <span class="text-[10px] font-bold text-[#FBF3A7] uppercase mt-1.5">@Lang.millions_htg</span>
+        </div>
+    </div>
+
+    <!-- Menu List (White Full Container) -->
+    <div class="w-full bg-white flex flex-col px-6 pt-2 pb-6 relative z-10 m-0 border-none">
+        
+        <!-- Item: Winning Account
+        <div class="flex items-center justify-between py-[18px] border-b-2 border-dashed border-gray-100 cursor-pointer transition-colors active:bg-gray-50">
+            <div class="flex items-center gap-4">
+                <img src="/Millions/img/gold_coin.png" class="w-6 h-6 object-contain" onerror="this.outerHTML='<i class=\'fa-solid fa-sack-dollar text-[#4A4A4A] text-[20px] w-6 text-center\'></i>'" />
+                <span class="text-[#212121] font-bold text-[13px]">@Lang.winning_account</span>
+            </div>
+            <span class="font-extrabold text-[15px] text-[#212121]">@(Model?.userStatus?.cash_coin ?? "0") HTG</span>
+        </div> -->
+
+        <!-- Item: Profile -->
+        <div class="flex items-center justify-between py-[18px] border-b-2 border-dashed border-gray-100 cursor-pointer transition-colors active:bg-gray-50" onclick="window.location.href='/Millions/Home/Profile'">
+            <div class="flex items-center gap-4">
+                <i class="fa-regular fa-user text-[#4A4A4A] text-[20px] w-6 text-center"></i>
+                <span class="text-[#212121] font-bold text-[13px]">@Lang.profile</span>
+            </div>
+            <i class="fa-solid fa-chevron-right text-gray-400 text-sm opacity-80"></i>
+        </div>
+
+        <!-- Item: How to play Pick 10 
+        <div class="flex items-center justify-between py-[18px] border-b-2 border-dashed border-gray-100 cursor-pointer transition-colors active:bg-gray-50" onclick="window.location.href='/Millions/Home/HowToPlay'">
+            <div class="flex items-center gap-4">
+                <i class="fa-regular fa-circle-question text-[#4A4A4A] text-[20px] w-6 text-center"></i>
+                <span class="text-[#212121] font-bold text-[13px]">@Lang.how_to_play_pick10</span>
+            </div>
+            <i class="fa-solid fa-chevron-right text-gray-400 text-sm opacity-80"></i>
+        </div>
+        -->
+
+        <!-- Item: Change Lang 
+        <div class="flex items-center justify-between py-[18px] border-b-2 border-dashed border-gray-100 cursor-pointer transition-colors active:bg-gray-50" onclick="toggleLanguage()">
+            <div class="flex items-center gap-4">
+                <i class="fa-solid fa-language text-[#1689FC] text-[22px] w-6 text-center shadow-blue-500 drop-shadow-sm"></i>
+                <span class="text-[#212121] font-bold text-[13px]">@Lang.change_language</span>
+            </div>
+            <i class="fa-solid fa-chevron-right text-gray-400 text-sm opacity-80"></i>
+        </div>
+        -->
+
+
+
+        <!-- Item: Contact Us -->
+        <div class="flex items-center justify-between py-[18px] cursor-pointer transition-colors active:bg-gray-50">
+            <div class="flex items-center gap-4">
+                <i class="fa-solid fa-phone-volume text-[#4A4A4A] text-[18px] w-6 text-center" style="transform: rotate(-15deg);"></i>
+                <span class="text-[#212121] font-bold text-[13px]">@Lang.contact_us</span>
+            </div>
+            <div class="flex items-center gap-3">
+                <span class="font-extrabold text-[15px] text-[#0062FF]">191</span>
+                <i class="fa-solid fa-chevron-right text-gray-400 text-sm opacity-80"></i>
+            </div>
+        </div>
+
+        <!-- Log out Button -->
+        <div class="mt-6 w-full px-1">
+            <a href="@Url.Action("Logout", "Home", new { area = "Millions" })" class="w-full flex items-center justify-center bg-[#f00b39] text-white font-bold text-[18px] py-[14px] rounded-[10px] shadow-[0_5px_15px_rgba(238,0,51,0.2)] hover:bg-red-700 transition-colors cursor-pointer no-underline active:scale-95 duration-150">
+                @Lang.logout
+            </a>
+        </div>
+
+        <!-- Item: Change Language Flags -->
+        <div class="mt-8 flex items-center justify-center w-full px-1">
+            <div class="flex items-center gap-2 bg-gray-100 p-1.5 rounded-xl w-full">
+                @{
+                    var currentLang = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
+                }
+                <a href="javascript:void(0)" onclick="setLanguage('fr')" class="flex flex-1 justify-center items-center gap-2 px-3 py-2 rounded-lg transition-all @(currentLang == "fr" ? "bg-white shadow-sm border border-gray-200" : "opacity-60 hover:opacity-100")">
+                    <img src="/img/en_flag.png" alt="English" class="w-7 h-auto drop-shadow-sm" />
+                    <span class="text-[13px] font-bold text-gray-700">English</span>
+                </a>
+                <a href="javascript:void(0)" onclick="setLanguage('en')" class="flex flex-1 justify-center items-center gap-2 px-3 py-2 rounded-lg transition-all @(currentLang != "fr" ? "bg-white shadow-sm border border-gray-200" : "opacity-60 hover:opacity-100")">
+                    <img src="/img/Flag_of_Haiti.png" alt="Natcom" class="w-7 h-auto drop-shadow-sm" />
+                    <span class="text-[13px] font-bold text-gray-700">Natcom</span>
+                </a>
+            </div>
+        </div>
+    </div>
+    
+    <!-- Real scalloped edge using CSS mask trick below the white box -->
+    <div class="w-full relative z-10 scalloped-bottom"></div>
+
+</div>
+
+<!-- Bottom Navbar shared component -->
+<partial name="_BottomNavbar" />
+
+<script>
+
+    function setLanguage(newLang) {
+        fetch(subDomain + '/Home/SetCulture?lang=' + newLang)
+            .then(response => {
+                location.reload();
+            })
+            .catch(error => {
+                location.reload();
+            });
+    }
+</script>
+
+

+ 244 - 0
website/Areas/Millions/Views/Home/Profile.cshtml

@@ -0,0 +1,244 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = "Millions - Profile";
+    ViewData["ActiveTab"] = "More";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+
+<script src="https://cdn.tailwindcss.com"></script>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+<link rel="stylesheet" href="/Millions/css/site.css" />
+
+<!-- Add custom font Bricolage Grotesque to match Figma styling -->
+<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;700;800&display=swap" rel="stylesheet">
+<!-- Flatpickr for premium calendar -->
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
+<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.js"></script>
+<link rel="stylesheet" href="/Millions/css/results.css" />
+<style>
+    .font-bricolage { font-family: 'Bricolage Grotesque', sans-serif; }
+</style>
+
+<div class="main-container animate__animated animate__fadeIn min-h-screen relative flex flex-col pb-24 font-bricolage" style="background-color: #EAEAEA !important;">
+    
+    <!-- Header (Red Background) - Fixed -->
+    <div class="fixed top-0 left-1/2 -translate-x-1/2 w-full max-w-[414px] bg-[#0062FF] h-[52px] flex items-center justify-between px-4 z-[100] shadow-sm">
+        <!-- Back Button -->
+        <button onclick="window.location.href='/Millions/Home/More'" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-colors z-10 text-white">
+            <i class="fa-solid fa-arrow-left text-[24px]"></i>
+        </button>
+        <!-- Title -->
+        <div class="absolute inset-0 flex items-center justify-center pointer-events-none">
+            <span class="font-bold text-[32px] text-white tracking-wide">@Lang.profile</span>
+        </div>
+    </div>
+
+    <!-- Header Spacer (~52px) -->
+    <div class="h-[52px]"></div>
+
+    <!-- Content Form -->
+    <div class="w-full flex flex-col items-center px-5 py-6 gap-3 flex-1 overflow-x-hidden">
+        
+        <!-- Phone Number Field (Disabled State) -->
+        <div class="w-full flex flex-col gap-2">
+            <label class="font-bold text-[#534A4A] text-[14px]">@Lang.phone_number</label>
+            <div class="w-full bg-[#C9C9C9] rounded-[8px] h-[50px] px-3 flex items-center shadow-inner">
+                <span class="font-[800] text-[20px] text-black w-full tracking-wide">@(Model?.profile?.users ?? "509XXXXXXXX")</span>
+            </div>
+        </div>
+
+        <!-- Name Field -->
+        <div class="w-full flex flex-col gap-2 mt-2">
+            <label class="font-bold text-[#534A4A] text-[14px]">@Lang.name</label>
+            <div class="w-full bg-transparent border border-[#8F8F8F] rounded-[8px] h-[50px] px-3 flex items-center">
+                <input type="text" id="txtFullName" class="w-full bg-transparent font-[800] text-[20px] text-black outline-none tracking-wide" value="@(Model?.profile?.fullName ?? "User")" />
+            </div>
+        </div>
+
+        <div class="w-full flex flex-col gap-2 mt-2">
+            <label class="font-bold text-[#534A4A] text-[14px]">@Lang.dateOfBirth</label>
+            @{
+                string birthdayVal = Model?.profile?.birthday ?? "2000-01-01";
+                if (birthdayVal.Contains("/")) {
+                    try {
+                        var parts = birthdayVal.Split('/');
+                        if (parts.Length == 3) { birthdayVal = $"{parts[2]}-{parts[1]}-{parts[0]}"; }
+                    } catch { birthdayVal = "2000-01-01"; }
+                }
+            }
+            <div class="w-full bg-transparent rounded-[8px] flex items-center justify-between relative cursor-pointer" onclick="document.getElementById('txtBirthday')._flatpickr.open()">
+                <input type="text" id="txtBirthday" class="w-full bg-transparent font-[800] text-[20px] text-black outline-none tracking-wide flex-1" 
+                       value="@birthdayVal" readonly />
+                <i class="fa-regular fa-calendar text-[#534A4A] text-[20px] pointer-events-none absolute right-3"></i>
+            </div>
+        </div>
+
+
+        <!-- Update Button -->
+        <div class="w-full flex justify-center mt-8">
+            <button id="btnUpdateProfile" onclick="updateProfile(this)" class="w-[300px] max-w-full bg-[#0062FF] text-white font-[800] text-[20px] py-[10px] rounded-[12px] shadow-[0px_3px_8px_rgba(0,0,0,0.25)] hover:bg-red-700 active:scale-95 transition-all">
+                @Lang.update
+            </button>
+        </div>
+
+    </div>
+
+</div>
+
+<!-- Success Modal Overlay -->
+<div id="successModal" class="fixed inset-0 z-[100] flex items-center justify-center hidden px-6 translate-y-0" style="background: linear-gradient(135deg, #1A1A2E 0%, #16213E 100%);">
+    <div class="w-full max-w-[343px] min-h-[520px] bg-white rounded-[20px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster">
+        <div class="w-full flex flex-col items-center mb-5 mt-4">
+            <div class="relative w-full max-w-[343px] flex items-center justify-center">
+                <img src="/Millions/img/modal/success_header.png" class="w-[280px] h-auto object-contain" />
+            </div>
+        </div>
+        <div class="px-5 text-center mb-10 mt-5">
+            <p class="text-black font-[700] text-[20px] font-bricolage leading-tight">
+                @Lang.update_successful
+            </p>
+        </div>
+        <div class="w-full mt-auto">
+            <button onclick="closeModalAndReload('/Millions/Home/More')" class="w-full bg-[#0062FF] text-white font-[800] text-[20px] py-[10px] rounded-[12px] shadow-[0px_3px_8px_rgba(0,0,0,0.25)] hover:bg-red-700 active:scale-95 transition-all font-bricolage">
+                @Lang.back_to_homepage
+            </button>
+        </div>
+    </div>
+</div>
+
+<!-- Failure Modal Overlay -->
+<div id="failureModal" class="fixed inset-0 z-[100] flex items-center justify-center hidden px-6 translate-y-0" style="background: linear-gradient(135deg, #1A1A2E 0%, #16213E 100%);">
+    <div class="w-full max-w-[343px] min-h-[520px] bg-white rounded-[20px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster">
+        <div class="w-full flex flex-col items-center mb-8 mt-10">
+            <div class="relative w-full max-w-[343px] flex items-center justify-center">
+                <img src="/Millions/img/modal/fail_icon.png" class="w-[200px] h-auto object-contain" />
+            </div>
+        </div>
+        <div class="px-5 text-center mb-10 mt-5">
+            <p id="failErrorMessage" class="text-black font-[700] text-[20px] font-bricolage leading-tight">
+                @Lang.update_profile_error
+            </p>
+        </div>
+        <div class="w-full mt-auto">
+            <button onclick="closeFailureModal()" class="w-full bg-[#0062FF] text-white font-[800] text-[20px] py-[10px] rounded-[12px] shadow-[0px_3px_8_rgba(0,0,0,0.25)] hover:bg-red-700 active:scale-95 transition-all font-bricolage">
+                @Lang.try_again
+            </button>
+        </div>
+    </div>
+</div>
+
+<partial name="_BottomNavbar" />
+
+<script>
+
+    function initBrandedFlatpickr(selector, yearStart, yearEnd) {
+        flatpickr(selector, {
+            dateFormat: "Y-m-d",
+            altInput: true,
+            altFormat: "d/m/Y",
+            altInputClass: "w-full bg-transparent font-[800] text-[20px] text-black outline-none tracking-wide cursor-pointer",
+            disableMobile: true,
+            monthSelectorType: "dropdown",
+            onReady: function (selectedDates, dateStr, instance) {
+                const yearInput = instance.calendarContainer.querySelector(".numInput.cur-year");
+                if (yearInput) {
+                    const yearSelect = document.createElement("select");
+                    yearSelect.className = "flatpickr-monthDropdown-months cur-year-select";
+                    yearSelect.style.cssText = "appearance:none; font-weight:800; border:none; background:transparent; color:white; cursor:pointer; margin-left:4px; outline:none; font-family:inherit; font-size:inherit;";
+
+                    for (let y = yearEnd; y >= yearStart; y--) {
+                        const opt = document.createElement("option");
+                        opt.value = y;
+                        opt.text = y;
+                        opt.style.color = "#333";
+                        if (y === instance.currentYear) opt.selected = true;
+                        yearSelect.appendChild(opt);
+                    }
+
+                    yearSelect.addEventListener("change", function () {
+                        instance.changeYear(parseInt(this.value));
+                    });
+
+                    yearInput.style.display = "none";
+                    yearInput.parentNode.appendChild(yearSelect);
+                    
+                    instance.set("onChange", function(d, s, i) {
+                        yearSelect.value = i.currentYear;
+                    });
+                }
+            }
+        });
+    }
+
+    document.addEventListener('DOMContentLoaded', function() {
+        initBrandedFlatpickr("#txtBirthday", 1940, 2026);
+    });
+
+    function updateProfile(btn) {
+        var fullName = $("#txtFullName").val();
+        var birthday = $("#txtBirthday").val(); 
+
+        if (fullName == "") {
+            showFailureModal("@Lang.enter_name");
+            return;
+        }
+
+        // Prevent double-click
+        var $btn = $(btn);
+        var originalText = $btn.html();
+        $btn.prop('disabled', true).html('<i class="fa-solid fa-spinner fa-spin mr-2"></i> ...');
+
+        $.ajax({
+            url: subDomain + "/Millions/Home/UserUpdateProfile",
+            type: "POST",
+            data: {
+                fullName: fullName,
+                birthday: birthday
+            },
+            success: function (response) {
+                $btn.prop('disabled', false).html(originalText);
+                if (response.status == "0") {
+                    showSuccessModal();
+                } else {
+                    showFailureModal(response.message || "Update failed", response.status);
+                }
+            },
+            error: function (error) {
+                $btn.prop('disabled', false).html(originalText);
+                showFailureModal("An error occurred during network request");
+            }
+        });
+    }
+
+    function showSuccessModal() {
+        $("#successModal").removeClass("hidden").addClass("flex");
+    }
+
+    var systemUpgrading = false;
+    function showFailureModal(message, code) {
+        $("#failErrorMessage").text(message);
+        const $btn = $("#failureModal button");
+        if (code === "-2" || (message && message.includes("System is upgrading"))) {
+            systemUpgrading = true;
+            $btn.text("@Lang.login");
+        } else {
+            systemUpgrading = false;
+            $btn.text("@Lang.try_again");
+        }
+        $("#failureModal").removeClass("hidden").addClass("flex");
+    }
+
+    function closeModalAndReload(url) {
+        $("#successModal").addClass("hidden").removeClass("flex");
+        window.location.href = url;
+    }
+
+    function closeFailureModal() {
+        $("#failureModal").addClass("hidden").removeClass("flex");
+        if (systemUpgrading) {
+            window.location.href = subDomain + "/Account/Login";
+        }
+    }
+</script>
+

+ 231 - 0
website/Areas/Millions/Views/Home/Results.cshtml

@@ -0,0 +1,231 @@
+@model LotteryWebApp.Models.TermResultHistoryModel
+@{
+    ViewData["Title"] = "Millions - Results History";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+    ViewData["ActiveTab"] = "Results";
+
+    // Default to last 3 days if not specified
+    if (string.IsNullOrEmpty(Model.fromDate)) {
+        Model.fromDate = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd");
+    }
+    if (string.IsNullOrEmpty(Model.toDate)) {
+        Model.toDate = DateTime.Now.ToString("yyyy-MM-dd");
+    }
+}
+@using LotteryWebApp.Languages;
+@using LotteryWebApp.Common;
+
+
+@section Styles {
+    <script src="https://cdn.tailwindcss.com"></script>
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+    <!-- Flatpickr for premium calendar -->
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
+    <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
+    <link rel="stylesheet" href="/Millions/css/site.css" />
+    <link rel="stylesheet" href="/Millions/css/results.css" />
+}
+
+<div class="main-container results-container animate__animated animate__fadeIn pb-40 relative mx-auto max-w-[414px] shadow-2xl min-h-screen bg-white">
+    <!-- Header Group: Sticky at Top -->
+    <div class="sticky top-0 w-full z-[100] bg-[#F3F4F6] pb-2 shadow-md">
+        <!-- Header: Matches Figma (Right Image) -->
+        <div class="results-top-header">
+            <a href="javascript:history.back()" class="back-btn">
+                <i class="fas fa-arrow-left"></i>
+            </a>
+            <h1 class="font-bricolage">@Lang.results</h1>
+        </div>
+
+        <!-- Selection Bar: Side-by-side dates and search -->
+        <div class="selection-bar bg-white/50 backdrop-blur-sm px-4 pt-2 pb-2">
+            <div class="flex gap-3">
+                <div class="date-pick-input flex-1 cursor-pointer relative bg-white border border-gray-200 rounded-lg p-2 flex items-center gap-2">
+                    <img src="/Millions/img/icon_calendar.svg" class="w-5 h-5" />
+                    <input type="text" id="fromDate" value="@Model.fromDate" class="bg-transparent border-none outline-none font-bold text-[13px] w-full ml-1 cursor-pointer" readonly />
+                    <i class="fas fa-caret-down text-gray-400"></i>
+                </div>
+                <div class="date-pick-input flex-1 cursor-pointer relative bg-white border border-gray-200 rounded-lg p-2 flex items-center gap-2">
+                    <img src="/Millions/img/icon_calendar.svg" class="w-5 h-5" />
+                    <input type="text" id="toDate" value="@Model.toDate" class="bg-transparent border-none outline-none font-bold text-[13px] w-full ml-1 cursor-pointer" readonly />
+                    <i class="fas fa-caret-down text-gray-400"></i>
+                </div>
+                <button id="btnSearch" class="btn-search-red !w-12 !h-12 flex items-center justify-center bg-[#0062FF] text-white rounded-xl shadow-md" onclick="triggerSearch()">
+                    <i class="fas fa-search"></i>
+                </button>
+            </div>
+        </div>
+
+        <!-- Red Separator Line -->
+        <div class="px-4 mt-1">
+            <div class="h-[2px] bg-gradient-to-r from-transparent via-[#0062FF] to-transparent rounded-full opacity-40"></div>
+        </div>
+    </div>
+
+    <!-- Result List Container -->
+    <div id="results-list-container" class="results-items-list px-4 min-h-[300px]">
+        <!-- Content will be loaded via JS for all 3 games -->
+        <div class="flex flex-col items-center justify-center py-20 text-gray-400">
+             <i class="fas fa-circle-notch fa-spin text-3xl mb-2"></i>
+             <span>Loading results...</span>
+        </div>
+    </div>
+
+    <!-- Bottom Promo Bar (Matches Bottom message with yellow text) -->
+    <div class="fixed bottom-[82px] left-1/2 -translate-x-1/2 w-full min-[600px]:max-w-[414px] bg-[#0062FF] text-white py-2 text-center text-[12px] font-bold tracking-wide z-40 flex flex-col items-center justify-center overflow-hidden h-auto shadow-md">
+         <div class="flex flex-col items-center w-full animate-slide-up">
+              <div class="opacity-90">@Lang.have_chance_to_get</div>
+            <div class="text-[18px] font-black text-[#FBF3A7] mt-0.5">@Lang.millions_jackpot_today_htg</div>
+         </div>
+    </div>
+
+    <!-- Shared Bottom Navbar -->
+    <div class="fixed bottom-0 left-0 w-full z-50">
+         <div class="mx-auto max-w-[414px]">
+             <partial name="_BottomNavbar" />
+         </div>
+    </div>
+
+    <!-- Custom Notification Modal -->
+    <div id="notificationModal" class="fixed inset-0 z-[300] flex items-center justify-center hidden px-6 font-bricolage" style="background: linear-gradient(135deg, rgba(26, 26, 46, 0.9) 0%, rgba(22, 33, 62, 0.9) 100%);">
+        <div class="w-full max-w-[343px] min-h-[420px] bg-white rounded-[24px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster shadow-2xl border border-white/50">
+            <div class="w-full flex justify-center mb-8 mt-4">
+                <img src="/Millions/img/modal/fail_icon.png" class="w-[160px] h-auto object-contain" alt="Notificaton icon" />
+            </div>
+            <div class="px-2 text-center mb-10 flex-1 flex items-center justify-center">
+                <p id="notificationMessage" class="text-black font-[800] text-[20px] leading-snug"></p>
+            </div>
+            <div class="w-full">
+                <button onclick="closeNotificationModal()" class="w-full bg-[#0062FF] text-white font-[800] text-[18px] py-[12px] rounded-[16px] shadow-lg active:scale-95 transition-all">
+                    @Lang.login
+                </button> 
+            </div>
+        </div>
+    </div>
+</div>
+
+@section Scripts {
+    <script>
+        const gameConfigs = [
+            { code: '@Constants.Millions_CODE', name: 'Millions', color: '#0062FF' }
+        ];
+
+        function initBrandedFlatpickr(selector, yearStart, yearEnd) {
+            const inputEl = document.querySelector(selector);
+            const wrapper = inputEl.closest('.date-pick-input');
+            
+            flatpickr(selector, {
+                dateFormat: "Y-m-d",
+                altInput: true,
+                altFormat: "M d, Y",
+                altInputClass: "bg-transparent border-none outline-none font-bold text-[13px] w-full ml-1 cursor-pointer",
+                disableMobile: true,
+                monthSelectorType: "dropdown",
+                appendTo: wrapper,
+                onReady: function (selectedDates, dateStr, instance) {
+                    instance.calendarContainer.style.zIndex = "9999";
+                    const yearInput = instance.calendarContainer.querySelector(".numInput.cur-year");
+                    if (yearInput) {
+                        const yearSelect = document.createElement("select");
+                        yearSelect.className = "flatpickr-monthDropdown-months cur-year-select";
+                        yearSelect.style.cssText = "appearance:none; font-weight:800; border:none; background:transparent; color:white; cursor:pointer; margin-left:4px; outline:none; font-family:inherit; font-size:inherit;";
+                        for (let y = yearEnd; y >= yearStart; y--) {
+                            const opt = document.createElement("option");
+                            opt.value = y;
+                            opt.text = y;
+                            opt.style.color = "#333";
+                            if (y === instance.currentYear) opt.selected = true;
+                            yearSelect.appendChild(opt);
+                        }
+                        yearSelect.addEventListener("change", function () {
+                            instance.changeYear(parseInt(this.value));
+                        });
+                        yearInput.style.display = "none";
+                        yearInput.parentNode.appendChild(yearSelect);
+                    }
+                }
+            });
+        }
+
+        document.addEventListener('DOMContentLoaded', function() {
+            initBrandedFlatpickr("#fromDate", 2020, 2030);
+            initBrandedFlatpickr("#toDate", 2020, 2030);
+            triggerSearch(); // Initial load for all games
+        });
+
+        var systemUpgrading = false;
+        function showNotification(message, code) {
+            $("#notificationMessage").text(message);
+            const $btn = $("#notificationModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("OK");
+            }
+            $("#notificationModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeNotificationModal() {
+            $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+
+        async function triggerSearch() {
+            const fromDate = document.getElementById("fromDate").value;
+            const toDate = document.getElementById("toDate").value;
+            const btn = document.getElementById("btnSearch");
+            const container = document.getElementById("results-list-container");
+
+            btn.disabled = true;
+            btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
+            container.style.opacity = "0.7";
+
+            try {
+                // Call the new grouped endpoint
+                const response = await fetch(`${subDomain}/Millions/Home/TermResultHistoryGrouped?fromDate=${fromDate}&toDate=${toDate}`);
+                if (!response.ok) throw new Error('Network response was not ok');
+                
+                const html = await response.text();
+                
+                try {
+                    const json = JSON.parse(html);
+                    if (json.responseCode === "-2" || (json.responseMessage && json.responseMessage.includes("System is upgrading"))) {
+                        showNotification(json.responseMessage || "System is upgrading", "-2");
+                        return;
+                    }
+                } catch (e) {
+                    // Not JSON, likely HTML partial
+                }
+
+                if (html.trim() === "") {
+                    container.innerHTML = `
+                        <div class="w-full py-20 flex flex-col items-center justify-center text-gray-400 opacity-60">
+                            <i class="fas fa-search text-5xl mb-4"></i>
+                            <p class="font-bold">@Lang.no_results_found</p>
+                        </div>
+                    `;
+                } else {
+                    container.innerHTML = html;
+                }
+            } catch (error) {
+                console.error("Error loading grouped results:", error);
+                
+                // Check if the error response is JSON and has code -2
+                if (error.message && (error.message.includes("System is upgrading") || error.message.includes("-2"))) {
+                    showNotification(error.message, "-2");
+                } else {
+                    container.innerHTML = `<div class="text-center py-10 text-red-500 font-bold">Error loading results. Please try again.</div>`;
+                }
+            }
+
+            container.style.opacity = "1";
+            btn.disabled = false;
+            btn.innerHTML = '<i class="fas fa-search"></i>';
+        }
+    </script>
+}
+

+ 262 - 0
website/Areas/Millions/Views/Home/Rule.cshtml

@@ -0,0 +1,262 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = "Millions - @Lang.rule_title";
+    ViewData["ActiveTab"] = "Rule";
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+
+<script src="https://cdn.tailwindcss.com"></script>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+<link rel="stylesheet" href="/Millions/css/site.css" />
+<link rel="stylesheet" href="/Millions/css/rule.css" />
+
+<!-- Add custom font Bricolage Grotesque to match Figma styling -->
+<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;700;800;900&display=swap" rel="stylesheet">
+
+<div class="main-container animate__animated animate__fadeIn h-screen relative flex flex-col font-bricolage overflow-hidden" style="background-color: #F5F5F5 !important;">
+    
+    <!-- Fixed Header & Tabs Group -->
+    <div class="fixed top-0 left-0 md:left-1/2 md:-translate-x-1/2 w-full md:max-w-[414px] z-[100] bg-white shadow-md">
+        <!-- Header Block (Red) -->
+        <div class="w-full bg-[#0062FF] h-[52px] flex items-center justify-between px-4 relative">
+            <!-- Back Button -->
+            <button onclick="window.history.back()" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-colors z-10 text-white cursor-pointer">
+                <i class="fa-solid fa-arrow-left text-[20px]"></i>
+            </button>
+            <!-- Title -->
+            <div class="absolute inset-0 flex items-center justify-center pointer-events-none">
+                <span class="text-white text-[24px] font-bold tracking-wide drop-shadow-sm">@Lang.rule_title</span>
+            </div>
+        </div>
+
+        <!-- Tabs Block Container -->
+        <div class="w-full bg-white flex items-center justify-center px-2 pt-3 pb-1 relative shadow-sm transition-all border-b border-gray-100">
+            <!-- Tab 1 -->
+            <div class="flex flex-col items-center gap-1 cursor-pointer flex-1 group" onclick="switchFAQTab('basic')">
+                <span id="tab-basic-label" class="text-[14px] font-bold text-[#534A4A] transition-colors whitespace-nowrap">Millions</span>
+                <div id="tab-basic-bar" class="w-full h-[3px] bg-[#0062FF] mt-1 drop-shadow-sm transition-all rounded-t-sm"></div>
+            </div>
+        </div>
+    </div>
+
+    <!-- Main Scrollable Area -->
+    <div class="flex-grow overflow-y-auto mt-[96px] pb-32 custom-scrollbar px-4" id="rule-scroll-container">
+        <div class="max-w-[380px] mx-auto"> <!-- Wrapper to shrink content width -->
+
+            <!-- Active Tab Content -->
+            <div id="tab-content-basic" class="w-full animate__animated animate__fadeIn">
+                
+                <div class="rule-header-red">@Lang.rule_general_info</div>
+                
+                <div class="rule-table-grid pb-2">
+                    <div class="font-[800]">@Lang.rule_item</div>
+                    <div class="font-[800]">@Lang.rule_regulation_draw</div>
+                    
+                    <div>@Lang.rule_time</div>
+                    <div>@Lang.rule_20_30_daily</div>
+                    
+                    <div>@Lang.rule_ticket_closure</div>
+                    <div>@Lang.rule_20_00_daily</div>
+                    
+                    <div>@Lang.rule_total_numbers</div>
+                    <div>@Lang.rule_01_80</div>
+        
+                    <div>@Lang.rule_numbers_drawn</div>
+                    <div>@Lang.rule_20_per_draw</div>
+        
+                    <div>@Lang.rule_purchase_channels</div>
+                    <div>@Lang.rule_ussd_web_app</div>
+        
+                    <div>@Lang.rule_result_channel</div>
+                    <div>@Lang.rule_web_app</div>
+        
+                    <div>@Lang.rule_duplicate_allowed</div>
+                    <div>@Lang.rule_yes</div>
+        
+                    <div>@Lang.rule_identical_allowed</div>
+                    <div>@Lang.rule_yes</div>
+                </div>
+        
+                <div class="rule-header-red">@Lang.rule_game_1_title</div>
+        
+                <!-- Card Mockup inside Rule -->
+                <div class="play-card bg-[#E11D48] relative mx-3 mt-4 mb-4 h-[90px] rounded-2xl overflow-hidden border border-white/20 shadow-lg cursor-pointer transition-all active:scale-[0.98]" onclick="window.location.href='/Millions/Home/GameHome'">
+                    <!-- 1. Design-accurate Staggered Ellipses -->
+                    <img src="/Millions/img/decorations/ellipse_1183.png" class="absolute -left-[60px] -top-[100px] w-[180px] h-[180px] pointer-events-none z-10 mix-blend-screen opacity-90 scale-y-[-1]" alt="highlight">
+                    <img src="/Millions/img/decorations/ellipse_1181.png" class="absolute -right-[50px] -top-[20px] w-[160px] h-[160px] pointer-events-none z-10 mix-blend-screen opacity-90" alt="highlight">
+
+                    <div class="w-full h-full flex items-center justify-between pl-3 pr-2 relative z-10">
+                        <div class="flex flex-col items-center justify-center pt-2">
+                            <span class="text-[14px] font-black italic text-white drop-shadow-md leading-[1.1] text-center" style="font-family: 'Montserrat', sans-serif;">@Html.Raw(Lang.rule_basic_pick)</span>
+                            <img src="/Millions/img/ball_10.png" class="w-7 h-7 object-contain drop-shadow-md -mt-2 -mr-8 border-2 border-[#E11D48] rounded-full bg-[#E11D48]">
+                        </div>
+        
+                        <div class="flex flex-col items-center mt-0.5 ml-4">
+                            <span class="text-[10px] font-[800] text-white tracking-widest uppercase drop-shadow">@Lang.rule_jackpot_prize</span>
+                            <div class="flex items-start gap-1 mt-0.5">
+                                <span class="text-[28px] font-[900] text-white leading-none tracking-tight drop-shadow-md">30.000.000</span>
+                                <span class="text-[7px] font-[800] text-white bg-transparent border border-white/60 rounded px-[2px] mt-1 shadow-sm leading-tight">HTG</span>
+                            </div>
+                            <div class="text-[9px] text-white/90 mt-0.5">@Lang.rule_next_round <span class="font-[900] text-white ml-0.5 drop-shadow">05:00</span></div>
+                        </div>
+        
+                        <div class="flex flex-col items-center justify-center h-full py-2 w-[80px] gap-1">
+                            <img src="/Millions/img/play_chest.png" class="h-[46px] w-auto object-contain drop-shadow-lg">
+                            <div class="w-full yellow-button text-center rounded-[10px] py-[4px] text-[10px] font-[900] px-2 z-20 active:scale-95 transition-transform text-[#212121] border-2 border-white shadow-lg" style="background: linear-gradient(180deg, #FFE95B 0%, #ECA600 100%);">@Lang.rule_play_now</div>
+                        </div>
+                    </div>
+                </div>
+        
+                <!-- @Lang.rule_how_to_play Section -->
+                <div class="rule-section-title">
+                    <span class="icon">&#9670;</span> @Lang.rule_how_to_play
+                </div>
+                
+                <div class="rule-table-grid desc-grid pb-4">
+                    <div class="font-[800]">@Lang.rule_item</div>
+                    <div class="font-[800]">@Lang.rule_description</div>
+                    
+                    <div>@Lang.rule_ticket_price</div>
+                    <div>@Lang.rule_10_htg</div>
+                    
+                    <div>@Lang.rule_selection_method</div>
+                    <div>@Html.Raw(Lang.rule_choose_10)</div>
+                    
+                    <div>@Lang.rule_winning_rule</div>
+                    <div>@Html.Raw(Lang.rule_10_taken_from)</div>
+                    
+                    <div>Drawn numbers as the<br>official</div>
+                    <div></div>
+        
+                    <div>@Lang.rule_objective</div>
+                    <div>@Lang.rule_match_as_many</div>
+                </div>
+        
+                <!-- @Lang.rule_jackpot_rule Section -->
+                <div class="rule-section-title mt-2">
+                    <span class="icon">&#9670;</span> @Lang.rule_jackpot_rule
+                </div>
+        
+                <div class="flex justify-center mt-4 mb-4">
+                     <img src="/Millions/img/play_chest.png" class="h-[120px] object-contain drop-shadow-xl" alt="Chest" />
+                </div>
+        
+                <div class="text-[11px] font-semibold text-[#212121] px-3 mb-3">@Html.Raw(Lang.rule_match_all_10)</div>
+                
+                <div class="px-3 flex flex-wrap gap-2 mb-4 justify-start">
+                    <div class="ball-green">1</div>
+                    <div class="ball-green">4</div>
+                    <div class="ball-green">5</div>
+                    <div class="ball-green">12</div>
+                    <div class="ball-green">24</div>
+                    <div class="ball-green">28</div>
+                    <div class="ball-green">30</div>
+                    <div class="ball-green">37</div>
+                    <div class="ball-green">46</div>
+                    <div class="ball-green">49</div>
+                </div>
+        
+                <div class="rule-table-grid pb-2">
+                    <div class="font-[800]">@Lang.rule_condition</div>
+                    <div class="font-[800]">@Lang.rule_prize_pool</div>
+                    
+                    <div>@Html.Raw(Lang.rule_if_le_10)</div>
+                    <div>@Html.Raw(Lang.rule_each_receives)</div>
+                    
+                    <div class="mt-2">@Html.Raw(Lang.rule_if_gt_10)</div>
+                    <div class="mt-2">@Html.Raw(Lang.rule_shared_equally)</div>
+                </div>
+        
+                <!-- @Lang.rule_standard_prize -->
+                <div class="rule-section-title mt-4">
+                    <span class="icon">&#9670;</span> @Lang.rule_standard_prize
+                </div>
+        
+                <div class="rule-table-grid pb-2">
+                    <div class="font-[800]">@Lang.rule_numbers_matches</div>
+                    <div class="font-[800]">@Lang.rule_prize_pool_htg</div>
+                    
+                    <div>9</div>
+                    <div>@Html.Raw(Lang.rule_prize_12k)</div>
+                    
+                    <div>8</div>
+                    <div>@Html.Raw(Lang.rule_prize_600)</div>
+                    
+                    <div>7</div>
+                    <div>@Html.Raw(Lang.rule_prize_160)</div>
+                    
+                    <div>6</div>
+                    <div>@Html.Raw(Lang.rule_prize_20)</div>
+                    
+                    <div>5</div>
+                    <div>@Html.Raw(Lang.rule_prize_5)</div>
+                </div>
+        
+            </div>
+        
+            <!-- Other tabs removed as per request -->
+        </div> <!-- End max-width wrapper -->
+    </div> <!-- End Scroll Container -->
+</div>
+
+<script>
+
+    function switchFAQTab(tabId) {
+        // Simple mock tab visual switcher for now matching the exact styling requested
+        ['basic', 'smallbig', 'oddeven'].forEach(t => {
+            document.getElementById(`tab-${t}-label`).classList.remove('text-[#534A4A]');
+            document.getElementById(`tab-${t}-label`).classList.add('text-[#909090]');
+            
+            let bar = document.getElementById(`tab-${t}-bar`);
+            if(bar) {
+                bar.classList.remove('bg-[#0062FF]', 'drop-shadow-sm', 'h-[3px]', 'rounded-t-sm');
+                bar.classList.add('bg-transparent', 'h-0.5');
+            }
+            
+            let desc = document.getElementById(`tab-${t}-desc`);
+            if(desc) {
+                desc.classList.remove('text-[#534A4A]');
+                desc.classList.add('text-[#909090]');
+            }
+            
+            // Hide content
+            let content = document.getElementById(`tab-content-${t.replace('_','')}`);
+            if(content) {
+                content.classList.add('hidden');
+            }
+        });
+
+        // activate target
+        document.getElementById(`tab-${tabId}-label`).classList.remove('text-[#909090]');
+        document.getElementById(`tab-${tabId}-label`).classList.add('text-[#534A4A]');
+        
+        let targetBar = document.getElementById(`tab-${tabId}-bar`);
+        if(targetBar) {
+            targetBar.classList.remove('bg-transparent', 'h-0.5');
+            targetBar.classList.add('bg-[#0062FF]', 'drop-shadow-sm', 'h-[3px]', 'rounded-t-sm');
+        }
+        
+        let currentDesc = document.getElementById(`tab-${tabId}-desc`);
+        if(currentDesc) {
+            currentDesc.classList.remove('text-[#909090]');
+            currentDesc.classList.add('text-[#534A4A]');
+        }
+        
+        // Show content (the id for content is tab-content-basic, tab-content-smallbig, tab-content-oddeven)
+        let activeContentId = `tab-content-${tabId.replace('_','')}`;
+        let currentContent = document.getElementById(activeContentId);
+        if(currentContent) {
+            currentContent.classList.remove('hidden');
+        }
+        
+        // Reset scroll position when switching tabs
+        let scrollCont = document.getElementById('rule-scroll-container');
+        if(scrollCont) scrollCont.scrollTop = 0;
+    }
+</script>
+
+<!-- Bottom Navbar shared component -->
+<partial name="_BottomNavbar" />
+
+

+ 592 - 0
website/Areas/Millions/Views/Home/TransferWinMoney.cshtml

@@ -0,0 +1,592 @@
+@model LotteryWebApp.Models.HomeIndex_ViewModel
+@{
+    ViewData["Title"] = Lang.millions_transfer;
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+@using LotteryWebApp.Languages;
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+<style>
+    @@keyframes float {
+        0%, 100% { transform: translateY(0); }
+        50% { transform: translateY(-8px); }
+    }
+    .animate-float {
+        animation: float 4s ease-in-out infinite;
+    }
+    .btn-premium {
+        border: 2px solid #ffffff !important;
+        box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15), inset 0 0 0 1px rgba(255, 255, 255, 0.1);
+        transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+    }
+    .btn-premium:active {
+        transform: scale(0.95);
+        box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
+    }
+    .btn-premium-red {
+        background: linear-gradient(135deg, #0062FF 0%, #004ecb 100%);
+    }
+</style>
+
+<div class="main-container animate__animated animate__fadeIn bg-[#EAEAEA] min-h-screen font-bricolage overflow-x-hidden">
+    <!-- Standardized Header (Matches Profile/Rules) -->
+    <div class="sticky top-0 w-full bg-[#0062FF] h-[52px] flex items-center justify-between px-4 z-[100] shadow-sm">
+        <!-- Back Button -->
+        <button onclick="history.back()" class="w-10 h-10 flex items-center justify-center -ml-2 rounded-full active:bg-white/20 transition-colors z-10 text-white">
+            <i class="fa-solid fa-arrow-left text-[20px]"></i>
+        </button>
+        <!-- Title centered -->
+        <div class="absolute inset-0 flex items-center justify-center pointer-events-none">
+            <span class="font-bold text-[24px] text-white tracking-wide uppercase">@Lang.millions_transfer</span>
+        </div>
+    </div>
+
+    <div class="pt-[20px] px-4 pb-24 max-w-[414px] mx-auto">
+        <!-- Account Card Section (Matching Figma: Frame 69) -->
+        <div class="relative w-full bg-[#0062FF] rounded-[12px] overflow-hidden shadow-xl mb-6 pl-8 pr-5 py-2 flex flex-col justify-between" style="border: 4px solid transparent; border-image: linear-gradient(175deg, rgba(255,255,255,0.2) 0%, rgba(255,199,0,0.4) 100%) 1; border-radius: 12px; aspect-ratio: 383/92;">
+            <!-- Decorative Elements (positions from Figma: card 383×92) -->
+            <div class="absolute inset-0 pointer-events-none overflow-hidden rounded-[12px]">
+                <!-- Golden Ribbon: Figma x:232.58 y:19.11 w:202.23 h:113.29 → right:0, top:20.8%, w:52.8% -->
+                <img src="/Millions/img/transfer_card_bg_v2.png" alt="" class="absolute z-0" style="right: -10%; top: 20%; width: 53%; height: auto;" />
+                
+                <!-- Coin 2 (top-right): Figma x:336 y:11 w:27 h:26 → right:5.2%, top:12% -->
+                <img src="/Millions/img/transfer/coin_2.png" alt="" class="absolute z-10 animate-float" style="right: 5%; top: 12%; width: 7%;" />
+                <!-- Coin 1 (mid-right): Figma x:309 y:51 w:28 h:25 → right:12%, top:55% -->
+                <img src="/Millions/img/transfer/coin_1.png" alt="" class="absolute z-10 animate-float" style="right: 12%; top: 55%; width: 7.4%; animation-delay: 0.5s;" />
+                <!-- Coin 3 (small, left of ribbon): Figma x:272 y:27 w:18 h:12 → right:24.3%, top:29% -->
+                <img src="/Millions/img/transfer/coin_3.png" alt="" class="absolute z-10 animate-pulse" style="right: 24%; top: 29%; width: 4.7%;" />
+                
+                <!-- Lights: Figma w:800 h:43, full-bleed glow overlays -->
+                <img src="/Millions/img/transfer/light_1.png" alt="" class="absolute z-[1]" style="top: -23%; left: -55%; width: 210%; opacity: 0.7;" />
+                <img src="/Millions/img/transfer/light_2.png" alt="" class="absolute z-[1]" style="bottom: -23%; left: -55%; width: 210%; opacity: 0.7;" />
+            </div>
+
+            <!-- Account Label -->
+            <p class="relative z-10 text-white font-bold text-[16px] tracking-normal" style="font-family: 'Bricolage Grotesque', sans-serif;">@Lang.millions_account_name</p>
+            
+            <!-- Balance Row -->
+            <div class="relative z-10 flex items-end gap-2">
+                <span id="currentBetCoin" class="font-[800] text-[40px] leading-[1.2]" style="background: linear-gradient(179deg, rgba(255,255,255,1) 0%, rgba(240,201,63,1) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-family: 'Bricolage Grotesque', sans-serif;">@FormatMoney(Model?.userStatus?.bet_coin)</span>
+                <span class="text-white font-[800] text-[20px] uppercase pb-[6px]" style="font-family: 'Bricolage Grotesque', sans-serif;">htg</span>
+            </div>
+        </div>
+
+        <!-- Selection Area (Horizontal Cards) -->
+        <div class="mb-6">
+            <h2 class="text-[#534A4A] font-[900] text-[18px] mb-3 pl-1">@Lang.millions_choose_account</h2>
+            <div class="flex gap-3">
+            <!-- Basic Account Option -->
+            <div id="selectBasic" onclick="selectChannel(1)" class="channel-card flex-1 bg-white h-[76px] rounded-[18px] border-2 border-[#0062FF] shadow-md flex items-center px-3 gap-2 cursor-pointer relative">
+                <!-- Selected Icon -->
+                <div class="check-icon absolute -top-2 -right-1 bg-white rounded-full">
+                    <i class="fa-solid fa-circle-check text-[#00AF1B] text-[20px]"></i>
+                </div>
+                <span class="text-[#0062FF] font-[900] text-[15px] leading-tight flex-1">@Lang.Basic<br />@Lang.Account</span>
+                <img src="/Millions/img/transfer_basic_icon.png" alt="Basic" class="w-12 h-10 object-contain" />
+            </div>
+            <!-- Natcash Card -->
+            <div id="selectNatcash" onclick="selectChannel(2)" class="channel-card flex-1 bg-white h-[76px] rounded-[18px] border border-gray-100 shadow-sm flex items-center px-3 gap-2 cursor-pointer relative overflow-visible">
+                <!-- Selected Icon (Hidden by default) -->
+                <div class="check-icon absolute -top-2 -right-1 bg-white rounded-full hidden">
+                    <i class="fa-solid fa-circle-check text-[#00AF1B] text-[20px]"></i>
+                </div>
+                <div class="flex-1 overflow-hidden h-full flex items-center">
+                    <img src="/Millions/img/transfer_other_card.png" alt="Natcash" class="w-full h-full object-contain" />
+                </div>
+            </div>
+        </div>
+        </div>
+
+        <!-- Form Fields Area -->
+        <div class="flex flex-col gap-2">
+            <!-- Sender Phone -->
+            <div class="flex flex-col gap-2">
+                <label class="text-[#534A4A] font-[900] text-[16px] px-1 capitalize">@Lang.millions_sender_phone</label>
+                <div class="relative w-full group">
+                    <input type="text" readonly value="@(Model?.userStatus?.msisdn ?? "0")" class="w-full bg-gray-100 border border-gray-300 text-[#534A4A] text-[17px] font-[800] rounded-[18px] py-[15px] px-5 outline-none transition-all cursor-not-allowed" />
+                    <div class="absolute right-4 top-1/2 -translate-y-1/2 text-gray-400">
+                        <i class="fa-solid fa-lock text-[20px] opacity-40"></i>
+                    </div>
+                </div>
+            </div>
+
+            <!-- Receiver Phone (Mandatory same as sender) -->
+            <div class="flex flex-col gap-2">
+                <label class="text-[#534A4A] font-[900] text-[16px] px-1 capitalize">@Lang.millions_receiver_phone</label>
+                <div class="relative w-full">
+                    <input id="receiverPhone" type="tel" readonly value="@(Model?.userStatus?.msisdn ?? "0")" class="w-full bg-gray-100 border border-gray-300 text-[#534A4A] text-[17px] font-[800] rounded-[18px] py-[15px] px-5 outline-none transition-all cursor-not-allowed" />
+                    <div class="absolute right-4 top-1/2 -translate-y-1/2 text-gray-400">
+                        <i class="fa-solid fa-lock text-[20px] opacity-40"></i>
+                    </div>
+                </div>
+            </div>
+
+            <!-- Amount -->
+            <div class="flex flex-col gap-2">
+                <label class="text-[#534A4A] font-[900] text-[16px] px-1 capitalize">@Lang.millions_amount_htg</label>
+                <div class="relative w-full">
+                    <input id="transferAmount" type="number" value="5000" placeholder="5,000" class="w-full bg-white border border-gray-300 focus:border-[#0062FF] focus:ring-2 focus:ring-[#0062FF]/10 text-[#0062FF] text-[17px] font-[800] rounded-[18px] py-[15px] px-5 outline-none transition-all placeholder:text-gray-300" />
+                    <span class="absolute right-5 top-1/2 -translate-y-1/2 text-gray-400 font-black">HTG</span>
+                </div>
+                <!-- Shortcut Buttons -->
+                <div class="flex gap-2 mt-1">
+                    <button onclick="setAmount(10, this)" class="amt-btn flex-1 py-1.5 border border-gray-300 rounded-lg text-[14px] font-black transition-all bg-white text-[#534A4A] flex items-center justify-center gap-1 shadow-sm">
+                        10
+                        <i class="fa-solid fa-circle-check text-[#00AF1B] text-[14px] hidden"></i>
+                    </button>
+                    <button onclick="setAmount(1000, this)" class="amt-btn flex-1 py-1.5 border border-gray-300 rounded-lg text-[14px] font-black transition-all bg-white text-[#534A4A] flex items-center justify-center gap-1 shadow-sm">
+                        1.000
+                        <i class="fa-solid fa-circle-check text-[#00AF1B] text-[14px] hidden"></i>
+                    </button>
+                    <button id="defaultAmt" onclick="setAmount(5000, this)" class="amt-btn flex-1 py-1.5 border-2 border-white bg-[#0062FF] rounded-lg text-[14px] font-black text-white transition-all flex items-center justify-center gap-1 shadow-md">
+                        5.000
+                        <i class="fa-solid fa-circle-check text-white text-[14px]"></i>
+                    </button>
+                </div>
+
+                <!-- Fee Section (Newly placed on a new line) -->
+                <div class="mt-6 flex flex-col gap-1 px-1">
+                    <span class="text-gray-500 font-bold text-[14px]">@Lang.millions_fee</span>
+                    <span class="text-black font-black text-[28px] leading-none mt-1">@Lang.millions_free</span>
+                </div>
+            </div>
+        </div>
+
+        <!-- Main Action Button -->
+        <div class="mt-6">
+            <button id="btnContinue" class="btn-premium btn-premium-red w-full text-white font-[900] text-[18px] py-[18px] rounded-[22px] active:scale-95 transition-all uppercase tracking-wide">
+                @Lang.millions_continue
+            </button>
+        </div>
+    </div>
+
+    <!-- Success Modal Overlay -->
+    <div id="successModal" class="fixed inset-0 z-[110] flex items-center justify-center hidden px-6" style="background: rgba(0,0,0,0.7);">
+        <div class="w-full max-w-[370px] bg-white rounded-[32px] overflow-hidden flex flex-col items-center animate__animated animate__zoomIn animate__faster shadow-2xl relative">
+            <!-- Content Container -->
+            <div class="relative z-10 w-full flex flex-col items-center pt-10 pb-8 px-6">
+                
+                <!-- Success Icon Group -->
+                <div class="relative w-full flex justify-center mb-0 mt-2 z-10 px-4">
+                    <img src="/Millions/img/modal/otp_success.png" alt="Success" class="w-full max-w-[200px] h-auto object-contain">
+                </div>
+
+                <h2 class="text-[#0A9800] font-[800] text-[32px] mb-1 tracking-tight">@Lang.success</h2>
+                <p class="text-[#000000] font-[700] text-[20px] text-center px-4 mb-6 leading-tight">
+                    @Lang.millions_payment_successfully
+                </p>
+
+                <div class="w-full border-t border-dashed border-gray-200 pt-5 flex flex-col gap-3 mb-5">
+                    <!-- Info Rows -->
+                    <div class="flex justify-between items-center text-[15px]">
+                        <span class="text-[#534A4A] font-bold">@Lang.amount_transfered</span>
+                        <span id="successAmount" class="text-black font-black text-right">5.000 HTG</span>
+                    </div>
+                    <div class="flex justify-between items-center text-[15px]">
+                        <span class="text-[#534A4A] font-bold">@Lang.sender</span>
+                        <span id="successSender" class="text-black font-black text-right">50940236545</span>
+                    </div>
+                    <div class="flex justify-between items-center text-[15px]">
+                        <span class="text-[#534A4A] font-bold">@Lang.receiver</span>
+                        <span id="successReceiver" class="text-black font-black text-right">50940236545</span>
+                    </div>
+                    <div class="flex justify-between items-center text-[15px]">
+                        <span class="text-[#534A4A] font-bold">@Lang.fee</span>
+                        <span class="text-black font-black text-right">0 HTG</span>
+                    </div>
+                </div>
+
+                <div class="w-full border-t border-dashed border-gray-200 pt-4 flex justify-between items-center mb-8">
+                    <span class="text-[#534A4A] font-bold text-[15px]">@Lang.time</span>
+                    <span id="successTime" class="text-[#534A4A] font-medium text-[14px] text-right">08/01/2022 - 10:00:20</span>
+                </div>
+
+                <button onclick="window.location.href='/Millions/Home/GameHome'" class="btn-premium btn-premium-red w-full text-white font-[800] text-[20px] py-[14px] rounded-[18px] active:scale-95 transition-all">
+                    @Lang.back_to_homepage
+                </button>
+            </div>
+        </div>
+    </div>
+
+    <!-- Failure Modal Overlay -->
+    <div id="failureModal" class="fixed inset-0 z-[110] flex items-center justify-center hidden px-6" style="background: rgba(0,0,0,0.5);">
+        <div class="w-full max-w-[343px] min-h-[420px] bg-white rounded-[20px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster shadow-2xl">
+            <div class="w-full flex flex-col items-center mb-6 mt-4">
+                <div class="relative w-full flex items-center justify-center">
+                    <img src="/Millions/img/modal/fail_icon.png" class="w-[160px] h-auto object-contain" />
+                </div>
+            </div>
+            <div class="px-2 text-center mb-12 mt-2">
+                <p id="failErrorMessage" class="text-black font-[700] text-[20px] leading-tight">
+                    @Lang.millions_enter_valid_amount
+                </p>
+            </div>
+            <div class="w-full mt-auto">
+                <button onclick="closeFailureModal()" class="btn-premium btn-premium-red w-full text-white font-[800] text-[20px] py-[10px] rounded-[14px] active:scale-95 transition-all">
+                    @Lang.try_again
+                </button>
+            </div>
+        </div>
+    </div>
+
+
+    <!-- OTP Modal Overlay -->
+    <div id="otpModal" class="fixed inset-0 z-[120] flex items-center justify-center hidden px-6" style="background: rgba(0,0,0,0.7);">
+        <!-- Glitter/Sparkles Overlay -->
+        <img src="/Millions/img/modal/otp_glitter.png" class="absolute pointer-events-none opacity-60 w-full max-w-[500px]" />
+
+        <div class="w-full max-w-[360px] bg-white rounded-[32px] overflow-visible flex flex-col items-center animate__animated animate__zoomIn animate__faster relative border-4 border-[#FFCD1D]/10" style="box-shadow: 0 0 25px rgba(229, 107, 35, 0.6);">
+            
+            <!-- Gold Coins on Top -->
+            <img src="/Millions/img/modal/otp_coins.png" class="absolute -top-12 -right-2 w-32 z-30 pointer-events-none drop-shadow-lg" />
+
+            <!-- Red Header -->
+            <div class="w-full bg-[#0062FF] pt-5 pb-4 px-6 rounded-t-[32px] flex justify-center border-b-4 border-white/20">
+                <h3 class="text-white font-[900] text-[22px] tracking-tight text-center">@Lang.millions_confirm_transaction</h3>
+            </div>
+
+            <div class="relative z-10 w-full flex flex-col items-center p-6 py-6 pb-8">
+                
+                <!-- Shield Icon -->
+                <div class="flex flex-col items-center gap-1 mb-2">
+                    <img src="/Millions/img/modal/otp_shield.png" class="w-[90px] h-auto object-contain drop-shadow-md" />
+                    <span class="text-[#534A4A] font-bold text-[14px]">@Lang.millions_convert</span>
+                </div>
+
+                <!-- Conversion Display Area -->
+                <div class="flex items-center justify-center gap-2 mb-4">
+                    <span id="displayAmountCoins" class="text-[#0062FF] font-[900] text-[24px]">100</span>
+                    <span class="text-black font-[900] text-[24px]">@Lang.millions_coins</span>
+                    <i class="fa-solid fa-arrow-right text-gray-800 text-[20px] mx-1"></i>
+                    <span id="displayAmountHTG" class="text-[#0062FF] font-[900] text-[24px]">100</span>
+                    <span class="text-black font-[900] text-[24px]">@Lang.millions_htg</span>
+                </div>
+
+                <p class="text-[#534A4A] font-bold text-[14px] text-center px-4 mb-6 leading-tight">@Lang.millions_enter_otp_proceed</p>
+                
+                <!-- OTP Inputs Area -->
+                <div class="flex gap-2 mb-4" id="otpInputs">
+                    <input type="tel" maxlength="1" pattern="[0-9]" inputmode="numeric" oninput="handleOtpInput(this)" onkeydown="handleOtpKeydown(event, this)" placeholder="-"
+                           class="otp-digit w-[42px] h-[48px] bg-[#757575] text-white rounded-[10px] text-center text-[26px] font-[900] outline-none transition-all placeholder:text-white/60 shadow-inner" />
+                    <input type="tel" maxlength="1" pattern="[0-9]" inputmode="numeric" oninput="handleOtpInput(this)" onkeydown="handleOtpKeydown(event, this)" placeholder="-"
+                           class="otp-digit w-[42px] h-[48px] bg-[#757575] text-white rounded-[10px] text-center text-[26px] font-[900] outline-none transition-all placeholder:text-white/60 shadow-inner" />
+                    <input type="tel" maxlength="1" pattern="[0-9]" inputmode="numeric" oninput="handleOtpInput(this)" onkeydown="handleOtpKeydown(event, this)" placeholder="-"
+                           class="otp-digit w-[42px] h-[48px] bg-[#757575] text-white rounded-[10px] text-center text-[26px] font-[900] outline-none transition-all placeholder:text-white/60 shadow-inner" />
+                    <input type="tel" maxlength="1" pattern="[0-9]" inputmode="numeric" oninput="handleOtpInput(this)" onkeydown="handleOtpKeydown(event, this)" placeholder="-"
+                           class="otp-digit w-[42px] h-[48px] bg-[#757575] text-white rounded-[10px] text-center text-[26px] font-[900] outline-none transition-all placeholder:text-white/60 shadow-inner" />
+                    <input type="tel" maxlength="1" pattern="[0-9]" inputmode="numeric" oninput="handleOtpInput(this)" onkeydown="handleOtpKeydown(event, this)" placeholder="-"
+                           class="otp-digit w-[42px] h-[48px] bg-[#757575] text-white rounded-[10px] text-center text-[26px] font-[900] outline-none transition-all placeholder:text-white/60 shadow-inner" />
+                    <input type="tel" maxlength="1" pattern="[0-9]" inputmode="numeric" oninput="handleOtpInput(this)" onkeydown="handleOtpKeydown(event, this)" placeholder="-"
+                           class="otp-digit w-[42px] h-[48px] bg-[#757575] text-white rounded-[10px] text-center text-[26px] font-[900] outline-none transition-all placeholder:text-white/60 shadow-inner" />
+                </div>
+                
+                <!-- OTP Error Message -->
+                <p id="otpError" class="text-[#0062FF] font-bold text-[14px] text-center mb-4 hidden animate__animated animate__shakeX"></p>
+
+                <!-- Timer & Resend Display -->
+                <div class="flex flex-col items-center justify-center mb-6 gap-2">
+                    <span id="otpTimer" class="text-[#0062FF] font-[900] text-[18px]">60s</span>
+                    <button id="resendOtpBtn" onclick="sendOtpRequest()" class="hidden text-[15px] font-black text-[#0A9800] underline decoration-solid underline-offset-[4px] hover:text-[#087a00] transition-all font-bricolage">@Lang.millions_request_new_otp</button>
+                </div>
+                
+                <!-- Action Buttons -->
+                <div class="w-full flex gap-4">
+                    <button onclick="closeOtpModal()" class="btn-premium flex-1 bg-[#757575] text-white font-[900] py-2.5 rounded-[16px] active:scale-95 transition-all text-[13px]">@Lang.cancel</button>
+                    <button id="btnConfirmTransfer" disabled class="btn-premium flex-1 bg-[#0A9800] text-white font-[900] py-2.5 rounded-[16px] active:scale-95 transition-all text-[13px] disabled:opacity-50 disabled:grayscale disabled:cursor-not-allowed">@Lang.confirm</button>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <!-- Bottom Navbar shared component -->
+    <partial name="_BottomNavbar" />
+</div>
+
+
+@section Scripts {
+    <script>
+        function setAmount(val, el) {
+            $("#transferAmount").val(val);
+            
+            // Update active state visuals
+            $(".amt-btn").removeClass("border-2 border-white bg-[#0062FF] text-white shadow-md").addClass("border-gray-300 bg-white text-[#534A4A] shadow-sm");
+            $(".amt-btn i").addClass("hidden").removeClass("text-white").addClass("text-[#00AF1B]"); // reset icons
+            
+            $(el).removeClass("border-gray-300 bg-white text-[#534A4A] shadow-sm").addClass("border-2 border-white bg-[#0062FF] text-white shadow-md");
+            $(el).find("i").removeClass("hidden").removeClass("text-[#00AF1B]").addClass("text-white"); // show current check icon in white
+        }
+
+        // Logic removed as fields are read-only
+
+        let timerInterval;
+        let isProcessing = false;
+        let selectedChannel = 1; // 1 = Basic, 2 = Natcash
+
+        function selectChannel(id) {
+            selectedChannel = id;
+            
+            // Reset both
+            $(".channel-card").removeClass("border-2 border-[#0062FF] shadow-md").addClass("border border-gray-100 shadow-sm");
+            $(".channel-card .check-icon").addClass("hidden");
+            
+            // Activate selected
+            if (id === 1) {
+                $("#selectBasic").removeClass("border-gray-100 shadow-sm").addClass("border-2 border-[#0062FF] shadow-md");
+                $("#selectBasic .check-icon").removeClass("hidden");
+            } else {
+                $("#selectNatcash").removeClass("border-gray-100 shadow-sm").addClass("border-2 border-[#0062FF] shadow-md");
+                $("#selectNatcash .check-icon").removeClass("hidden");
+            }
+        }
+
+        $("#btnContinue").on("click", function() {
+            if (isProcessing) return; // Prevent double-click
+            const rawAmount = $("#transferAmount").val();
+            const amount = parseFloat(unformatMoneyV2(rawAmount)) || 0;
+            const phone = $("#receiverPhone").val();
+            const winMoney = parseFloat(unformatMoneyV2("@(Model?.userStatus?.bet_coin ?? "0")")) || 0;
+            
+            if(amount <= 0) {
+                showFailureModal("@Html.Raw(Lang.millions_enter_valid_amount)");
+                return;
+            }
+
+            if(amount > winMoney) {
+                showFailureModal("@Html.Raw(Lang.millions_insufficient_balance)");
+                return;
+            }
+
+            // Lock button + show loading
+            isProcessing = true;
+            const $btn = $(this);
+            const originalText = $btn.html();
+            $btn.prop('disabled', true).html('<i class="fa-solid fa-spinner fa-spin mr-2"></i> ...');
+
+            // Call sendotp API
+            $.ajax({
+                url: subDomain + "/Millions/Home/SendOTP",
+                type: "POST",
+                data: { phone: phone, amount: unformatMoneyV2(rawAmount), channelPayment: selectedChannel },
+                success: function(res) {
+                    $btn.prop('disabled', false).html(originalText);
+                    isProcessing = false;
+                    if(res.responseCode == "0" || res.responseCode == 0) {
+                        openOtpModal();
+                    } else {
+                        showFailureModal(res.message || "Failed to send OTP", res.responseCode);
+                    }
+                },
+                error: function() {
+                    $btn.prop('disabled', false).html(originalText);
+                    isProcessing = false;
+                    showFailureModal("Network error while sending OTP");
+                }
+            });
+        });
+
+        function openOtpModal() {
+            // Clear previous OTP values
+            $(".otp-digit").val("");
+            $("#btnConfirmTransfer").prop('disabled', true);
+            
+            // Set display amounts
+            const amt = $("#transferAmount").val();
+            const formattedAmt = formatMoneyV2(amt);
+            $("#displayAmountCoins").text(formattedAmt);
+            $("#displayAmountHTG").text(formattedAmt);
+
+            $("#otpModal").removeClass("hidden").addClass("flex");
+            resetTimer();
+            $(".otp-digit").first().focus();
+        }
+
+        function closeOtpModal() {
+            $("#otpModal").addClass("hidden").removeClass("flex");
+            clearInterval(timerInterval);
+        }
+
+        // OTP input: enforce single digit, auto-advance
+        function handleOtpInput(el) {
+            // Allow only single digit
+            el.value = el.value.replace(/[^0-9]/g, '').slice(0, 1);
+            
+            if (el.value.length === 1) {
+                const next = $(el).next('.otp-digit');
+                if (next.length) {
+                    next.focus();
+                }
+            }
+
+            // Check if all 6 digits filled
+            var filled = 0;
+            $(".otp-digit").each(function() { if ($(this).val().length >= 1) filled++; });
+            $("#btnConfirmTransfer").prop('disabled', filled < 6);
+
+            // Clear error when typing and reset color to red
+            $("#otpError").addClass("hidden").text("").removeClass("text-[#0A9800]").addClass("text-[#0062FF] animate__shakeX");
+        }
+
+        // OTP backspace: move to previous input
+        function handleOtpKeydown(e, el) {
+            if (e.key === 'Backspace') {
+                if (el.value.length === 0) {
+                    const prev = $(el).prev('.otp-digit');
+                    if (prev.length) {
+                        prev.focus();
+                    }
+                }
+            }
+        }
+
+        function resetTimer() {
+            let seconds = 60;
+            clearInterval(timerInterval);
+            $("#otpTimer").removeClass("hidden").text("60s");
+            $("#resendOtpBtn").addClass("hidden");
+            // Keep confirm disabled until OTP is filled — don't re-enable here
+            
+            timerInterval = setInterval(() => {
+                seconds--;
+                $("#otpTimer").text(seconds + "s");
+                if (seconds <= 0) {
+                    clearInterval(timerInterval);
+                    $("#otpTimer").addClass("hidden");
+                    $("#resendOtpBtn").removeClass("hidden");
+                    // Disable confirm when timer expired
+                    $("#btnConfirmTransfer").prop('disabled', true).addClass('opacity-50');
+                }
+            }, 1000);
+        }
+
+        function sendOtpRequest() {
+            const $btn = $("#resendOtpBtn");
+            const originalText = $btn.text();
+            $btn.prop('disabled', true).text("...");
+
+            $.ajax({
+                url: subDomain + "/Millions/Home/SendOTP",
+                type: 'POST',
+                success: function(data) {
+                    $btn.prop('disabled', false).text(originalText);
+                    if (data.responseCode === "0" || data.responseCode === 0) {
+                        resetTimer();
+                        $("#otpError").removeClass("text-[#0062FF] animate__shakeX").addClass("text-[#0A9800]").text("@Lang.millions_otp_sent_successfully").removeClass("hidden");
+                        $(".otp-digit").val("").first().focus();
+                    } else {
+                        if (data.responseCode === "-2" || (data.responseMessage && data.responseMessage.includes("System is upgrading"))) {
+                             closeOtpModal();
+                             showFailureModal(data.responseMessage || "System is upgrading", data.responseCode);
+                        } else {
+                             $("#otpError").removeClass("text-[#0A9800]").addClass("text-[#0062FF] animate__shakeX").text(data.responseMessage || "Failed to resend OTP").removeClass("hidden");
+                        }
+                    }
+                },
+                error: function() {
+                    $btn.prop('disabled', false).text(originalText);
+                    $("#otpError").text("Network error occurred.").removeClass("hidden");
+                }
+            });
+        }
+
+        $("#btnConfirmTransfer").on("click", function() {
+            if (isProcessing) return; // Prevent double-click
+
+            let otp = "";
+            $(".otp-digit").each(function() { otp += $(this).val(); });
+            
+            if(otp.length < 6) {
+                showFailureModal("Please enter 6-digit OTP");
+                return;
+            }
+
+            // Lock button + show loading
+            isProcessing = true;
+            const $btn = $(this);
+            const originalText = $btn.html();
+            $btn.prop('disabled', true).html('<i class="fa-solid fa-spinner fa-spin mr-2"></i> ...');
+            
+            // Call the unified backend action that verifies OTP and then transfers
+            $.ajax({
+                url: subDomain + "/Millions/Home/ConfirmTransfer",
+                type: "POST",
+                data: {
+                    otp: otp,
+                    phone: $("#receiverPhone").val(),
+                    amount: unformatMoneyV2($("#transferAmount").val()),
+                    channelPayment: selectedChannel
+                },
+                success: function(res) {
+                    $btn.prop('disabled', false).html(originalText);
+                    isProcessing = false;
+
+                    if(res.responseCode == "0" || res.responseCode == 0) {
+                        closeOtpModal();
+                        
+                        // Update balance in UI immediately
+                        if(res.userStatus && res.userStatus.bet_coin) {
+                           $("#currentBetCoin").text(formatMoneyV2(res.userStatus.bet_coin));
+                        }
+
+                        // Populate Success Modal Fields
+                        const transferAmt = $("#transferAmount").val();
+                        $("#successAmount").text(formatMoneyV2(transferAmt) + " HTG");
+                        $("#successSender").text("@(Model?.userStatus?.msisdn ?? "0")");
+                        $("#successReceiver").text($("#receiverPhone").val());
+                        
+                        const now = new Date();
+                        const pad = (n) => n.toString().padStart(2, '0');
+                        const formattedTime = `${pad(now.getDate())}/${pad(now.getMonth() + 1)}/${now.getFullYear()} - ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}`;
+                        $("#successTime").text(formattedTime);
+
+                        $("#successModal").removeClass("hidden").addClass("flex");
+                    } else {
+                        if (res.responseCode === "-2" || (res.message && res.message.includes("System is upgrading"))) {
+                             closeOtpModal();
+                             showFailureModal(res.message || "System is upgrading", res.responseCode);
+                        } else {
+                             $("#otpError").text(res.message || "Invalid OTP").removeClass("hidden");
+                             $(".otp-digit").val("");
+                             $(".otp-digit").first().focus();
+                        }
+                    }
+                },
+                error: function() {
+                    $btn.prop('disabled', false).html(originalText);
+                    isProcessing = false;
+                    showFailureModal("Network error while confirming transfer");
+                }
+            });
+        });
+
+        var systemUpgrading = false;
+        function showFailureModal(message, code) {
+            $("#failErrorMessage").html(message);
+            const $btn = $("#failureModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("@Lang.try_again");
+            }
+            $("#failureModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeFailureModal() {
+            $("#failureModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+    </script>
+}
+
+

+ 145 - 0
website/Areas/Millions/Views/Home/_TermResultHistoryGrouped.cshtml

@@ -0,0 +1,145 @@
+@using LotteryWebApp.Service
+@using LotteryWebApp.Languages
+@using System.Linq
+@model List<IGrouping<DateTime, Term>>
+
+@if (Model != null && Model.Count > 0)
+{
+    foreach (var group in Model)
+    {
+        var drawDate = group.Key;
+        var filteredGames = group.Where(x => !string.Equals(x.result, "NA", StringComparison.OrdinalIgnoreCase)).ToList();
+        
+        if (filteredGames.Count == 0) continue;
+        
+        <div class="result-card-premium animate__animated animate__fadeInUp mb-6 overflow-hidden bg-white rounded-2xl shadow-sm border border-gray-100">
+            <!-- Simplified Header -->
+            <div class="bg-gray-50/50 px-4 py-2.5 border-b border-gray-100 flex items-center justify-between">
+                <div class="flex items-center gap-2">
+                    <i class="fas fa-trophy text-[#0062FF] text-[12px]"></i>
+                    <span class="text-[11px] font-black text-gray-500 uppercase tracking-widest">@Lang.results</span>
+                </div>
+                <div class="flex items-center gap-1.5">
+                    <div class="w-1.5 h-1.5 rounded-full bg-green-500 animate-pulse"></div>
+                    <span class="text-[9px] font-bold text-gray-400 uppercase">Live Update</span>
+                </div>
+            </div>
+
+            <!-- Games Container -->
+            <div class="px-3 pt-2 pb-3 space-y-0.5">
+                <!-- Date/Time Info Row -->
+                <div class="flex items-center gap-3 mb-1.5 bg-gray-50/50 p-2 rounded-2xl border border-gray-100/80 shadow-xs">
+                    <div class="w-11 h-11 flex flex-col items-center justify-center bg-white rounded-xl shadow-xs border border-gray-100 shrink-0">
+                        <span class="text-[9px] font-bold text-gray-400 uppercase leading-none">@drawDate.ToString("MMM")</span>
+                        <span class="text-[18px] font-black text-[#0062FF] leading-none">@drawDate.ToString("dd")</span>
+                    </div>
+                    <div class="flex flex-col">
+                        <span class="text-[14px] font-black text-gray-800 leading-tight">@drawDate.ToString("dddd, MMM dd yyyy", System.Globalization.CultureInfo.InvariantCulture)</span>
+                        <div class="flex items-center gap-1.5 mt-0.5">
+                            <i class="far fa-calendar-alt text-[11px] text-[#0062FF]"></i>
+                            <span class="text-[11px] font-bold text-gray-400 uppercase tracking-tighter">@Lang.draw_date</span>
+                        </div>
+                    </div>
+                </div>
+
+                @{
+                    var games = filteredGames.OrderBy(x => x.gameId).ToList();
+                    for (int i = 0; i < games.Count; i++)
+                    {
+                        var item = games[i];
+                        var isBasic = item.gameId == "30";
+                        var isBigSmall = item.gameId == "31";
+                        var isOddEven = item.gameId == "32";
+                        
+                        var gameName = isBasic ? Lang.millions_classic_pick_10 : 
+                                       isBigSmall ? Lang.millions_big_small : 
+                                       isOddEven ? Lang.millions_odd_even : "Game";
+                        
+                        // Fallback labels if resource is missing
+                        if (string.IsNullOrEmpty(gameName)) {
+                            gameName = isBasic ? "Basic" : isBigSmall ? "Big/Small" : isOddEven ? "Odd/Even" : "Game";
+                        }
+                        
+                        var gameColor = isBasic ? "#0062FF" : isBigSmall ? "#26A31E" : isOddEven ? "#B529E9" : "#0062FF";
+                        var gameBg = isBasic ? "bg-[#0062FF]/5" : isBigSmall ? "bg-[#26A31E]/5" : isOddEven ? "bg-[#B529E9]/5" : "bg-gray-50";
+
+                        <div class="game-result-row px-1">
+                            <div class="flex items-center justify-between mb-0 px-1">
+                                <div class="flex items-center gap-2">
+                                    <div class="w-1.5 h-4 rounded-full" style="background-color: @gameColor"></div>
+                                    <span class="text-[14px] font-black uppercase tracking-widest" style="color: @gameColor">@gameName</span>
+                                </div>
+                                <div class="flex flex-col items-end">
+                                    <span class="text-[13px] font-bold text-gray-400 opacity-60">#@item.id</span>
+                                    @{
+                                        DateTime drawTime;
+                                        var timeStr = DateTime.TryParse(item.date_random, out drawTime) ? drawTime.ToString("HH:mm") : "--:--";
+                                    }
+                                    <span class="text-[11px] font-black text-[#0062FF]/60 uppercase tracking-tighter">@timeStr</span>
+                                </div>
+                            </div>
+
+                            <div class="flex items-center justify-center gap-2.5 flex-wrap">
+                                @if (!string.IsNullOrEmpty(item.result))
+                                {
+                                    var balls = item.result.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
+                                    foreach (var ball in balls)
+                                    {
+                                        var cleanBall = ball.Trim();
+                                        if (isBasic)
+                                        {
+                                            <div class="w-8 h-8 flex items-center justify-center rounded-full text-white text-[15px] font-black shadow-md transform hover:scale-110 transition-transform" 
+                                                 style="background: linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%);">
+                                                @cleanBall
+                                            </div>
+                                        }
+                                        else
+                                        {
+                                            var ballText = cleanBall.ToUpper();
+                                            if (isBigSmall) {
+                                                if (ballText == "S") ballText = Lang.Small;
+                                                else if (ballText == "B") ballText = Lang.Big;
+                                            } else if (isOddEven) {
+                                                if (ballText == "O") ballText = Lang.Odd;
+                                                else if (ballText == "E") ballText = Lang.Even;
+                                            }
+
+                                            <div class="px-4 py-1.5 rounded-xl bg-white border border-gray-100 shadow-sm text-[13px] font-black transform hover:bg-gray-50 transition-colors uppercase tracking-tight" style="color: @gameColor">
+                                                @ballText
+                                            </div>
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    <div class="py-2 px-4 rounded-lg border border-dashed" style="background-color: @(gameColor + "10"); border-color: @(gameColor + "30");">
+                                        <span class="italic text-[11px] font-bold" style="color: @gameColor">@Lang.waiting_for_result</span>
+                                    </div>
+                                }
+                            </div>
+                        </div>
+
+                        if (i < games.Count - 1)
+                        {
+                            <!-- Red Separator Line -->
+                            <div class="py-0">
+                                <div class="h-[1px] bg-gradient-to-r from-transparent via-[#0062FF]/20 to-transparent"></div>
+                            </div>
+                        }
+                    }
+                }
+            </div>
+        </div>
+    }
+}
+else
+{
+    <div class="w-full py-20 flex flex-col items-center justify-center text-gray-400 opacity-60">
+        <div class="w-20 h-20 bg-gray-50 rounded-full flex items-center justify-center mb-4">
+            <i class="fas fa-search text-3xl"></i>
+        </div>
+        <p class="font-black text-[14px] uppercase tracking-widest">@Lang.no_results_found</p>
+    </div>
+}
+
+

+ 62 - 0
website/Areas/Millions/Views/Home/_TermResultHistoryV2.cshtml

@@ -0,0 +1,62 @@
+@model LotteryWebApp.Models.TermResultHistoryModel
+@using LotteryWebApp.Languages
+@if (Model != null && Model.listTerm != null && Model.listTerm.Count > 0)
+{
+    foreach (var item in Model.listTerm)
+    {
+        if (string.Equals(item.result, "NA", StringComparison.OrdinalIgnoreCase)) continue;
+        
+        var gameColor = item.gameId == "30" ? "#0062FF" : item.gameId == "31" ? "#26A31E" : item.gameId == "32" ? "#B529E9" : "#0062FF";
+        var gameGradient = item.gameId == "30" ? "linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%)" : 
+                           item.gameId == "31" ? "linear-gradient(135deg, #4ADE80 0%, #26A31E 100%)" : 
+                           item.gameId == "32" ? "linear-gradient(135deg, #C084FC 0%, #B529E9 100%)" : 
+                           "linear-gradient(135deg, #FF3D63 0%, #BA0F21 100%)";
+        
+        <!-- Result Item Card -->
+        <div class="result-item-red animate__animated animate__fadeInUp relative overflow-hidden" style="border-color: @gameColor">
+            <!-- Game Label Badge -->
+            <div class="absolute top-2 right-4 px-2 py-0.5 rounded-full text-[9px] font-black text-white uppercase tracking-tighter z-10 shadow-sm" style="background-color: @gameColor">
+                 @(item.gameId == "30" ? "Basic" : item.gameId == "31" ? "Big/Small" : item.gameId == "32" ? "Odd/Even" : "Mega")
+            </div>
+
+            <div class="item-date-text font-bricolage">
+                @{
+                    DateTime drawDate;
+                    if (DateTime.TryParse(item.date_random, out drawDate)) {
+                        <div class="day">@drawDate.ToString("dddd,", System.Globalization.CultureInfo.InvariantCulture)</div>
+                        <div class="date">@drawDate.ToString("MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)</div>
+                    } else {
+                        <div class="day">Draw Date:</div>
+                        <div class="date">@item.date_random</div>
+                    }
+                }
+            </div>
+            <div class="balls-container">
+                @if (!string.IsNullOrEmpty(item.result))
+                {
+                    var balls = item.result.Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
+                    foreach (var ball in balls)
+                    {
+                        var cleanBall = ball.Trim();
+                        if (!string.IsNullOrEmpty(cleanBall))
+                        {
+                            <div class="yellow-ball" style="background: @gameGradient">@cleanBall</div>
+                        }
+                    }
+                }
+                else
+                {
+                    <span class="text-gray-400 italic text-[12px]">@Lang.waiting_for_result</span>
+                }
+            </div>
+        </div>
+    }
+}
+else
+{
+    <div class="w-full py-20 flex flex-col items-center justify-center text-gray-400 opacity-60">
+        <i class="fas fa-search text-5xl mb-4"></i>
+        <p class="font-bold">@Lang.no_results_found</p>
+    </div>
+}
+

+ 153 - 0
website/Areas/Millions/Views/Home/_TermUserTicketHistory.cshtml

@@ -0,0 +1,153 @@
+@model LotteryWebApp.Models.UserTicketHistoryModel
+@using LotteryWebApp.Languages
+@using LotteryWebApp.Common
+
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+
+@if (Model != null && Model.listTicket != null && Model.listTicket.Count > 0)
+{
+    foreach (var item in Model.listTicket)
+    {
+        <div class="ticket-card animate__animated animate__fadeInUp">
+            <div class="ticket-card-top">
+                <div class="ticket-header">
+                    <span class="ticket-id">#@item.seq</span>
+                </div>
+
+                <div class="ticket-numbers flex flex-wrap gap-2">
+                    @if (!string.IsNullOrEmpty(item.code))
+                    {
+                        var delimiters = new[] { ';', ',' };
+                        var balls = item.code.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
+                        
+                        // Prepare winning numbers for comparison
+                        var winningBalls = new HashSet<string>();
+                        if (!string.IsNullOrEmpty(item.termResult))
+                        {
+                            var winningSplit = item.termResult.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
+                            foreach (var wb in winningSplit) winningBalls.Add(wb.Trim());
+                        }
+
+                        foreach (var ball in balls)
+                        {
+                            var ballValue = ball.Trim();
+                            if (!string.IsNullOrEmpty(ballValue))
+                            {
+                                string ballClass = "";
+                                if (item.status == Constants.NOT_DRAW_CODE) {
+                                    ballClass = "ball-waiting";
+                                } else if (winningBalls.Contains(ballValue)) {
+                                    ballClass = "ball-win";
+                                } else {
+                                    ballClass = "ball-lose";
+                                }
+
+                                // Map single-letter codes to full labels
+                                var displayValue = ballValue;
+                                var isLabel = false;
+                                switch (ballValue.ToUpper())
+                                {
+                                    case "B": displayValue = "Big"; isLabel = true; break;
+                                    case "S": displayValue = "Small"; isLabel = true; break;
+                                    case "O": displayValue = "Odd"; isLabel = true; break;
+                                    case "E": displayValue = "Even"; isLabel = true; break;
+                                }
+
+                                if (isLabel)
+                                {
+                                    <div class="ticket-ball @ballClass" style="width: auto; min-width: 50px; padding: 2px 10px; border-radius: 16px; font-size: 13px;">@displayValue</div>
+                                }
+                                else
+                                {
+                                    <div class="ticket-ball @ballClass">@displayValue</div>
+                                }
+                            }
+                        }
+                    }
+                </div>
+            </div>
+
+            <div class="ticket-perforation"></div>
+
+            <div class="ticket-card-bottom">
+                <div class="ticket-info-grid">
+                    <div class="info-row">
+                        <span class="info-label">@Lang.millions_date_and_time</span>
+                        <span class="info-value">@item.createDate</span>
+                    </div>
+                    <div class="info-row">
+                        <span class="info-label">@Lang.millions_amount_played</span>
+                        <span class="info-value">@FormatMoney(item.money) HTG</span>
+                    </div>
+                    @if (item.status == Constants.WIN_CODE) {
+                        <div class="info-row">
+                            <span class="info-label">@Lang.millions_amount_won</span>
+                            <span class="info-value win-amount">@FormatMoney(item.moneyWin) HTG</span>
+                        </div>
+                    }
+                </div>
+
+                <!-- Ticket Action: Detail Button -->
+                <div class="mt-3 pt-3 border-t border-gray-100 flex justify-between items-center">
+                    <div class="flex items-center gap-1.5 text-gray-400">
+                        <i class="fa-solid fa-circle-info text-[12px]"></i>
+                        <span class="text-[10px] font-bold uppercase tracking-tight">@Lang.millions_tap_to_see_detail</span>
+                    </div>
+                    <button onclick="showTicketDetail('@item.billCode', '@item.money', '@item.moneyWin', '@item.createDate', '@item.channel', '@item.channelPayment', '@item.code', '@item.gameId', '@item.termRandomDate', '@item.id')" 
+                            class="bg-[#00A3FF] text-white px-5 py-1.5 rounded-lg font-black text-[12px] shadow-[0_4px_10px_rgba(0,163,255,0.3)] active:scale-95 transition-all border-[1.5px] border-white uppercase tracking-wide">
+                        @Lang.millions_detail
+                    </button>
+                </div>
+            </div>
+        </div>
+    }
+
+    @if (Model.totalPage != null && int.Parse(Model.totalPage) > 1)
+    {
+        var seq = int.Parse(Model.seqPage);
+        var total = int.Parse(Model.totalPage);
+        <div class="flex justify-center items-center gap-4 py-8 pb-32">
+            <button onclick="changePage(currentSeqPage - 1)" 
+                    class="p-2 px-6 bg-white rounded-xl shadow-sm font-bold text-gray-500 active:scale-95 transition-transform disabled:opacity-30 disabled:pointer-events-none" 
+                    id="prevPage" @(seq <= 1 ? "disabled" : "")>
+                <i class="fas fa-chevron-left mr-1"></i> Prev
+            </button>
+            
+            <div class="flex flex-col items-center">
+                <span class="text-[10px] text-gray-400 font-bold uppercase tracking-widest">Page</span>
+                <span class="font-black text-[#0062FF] text-lg" id="pageDisplay">@Model.seqPage / @Model.totalPage</span>
+            </div>
+
+            <button onclick="changePage(currentSeqPage + 1)" 
+                    class="p-2 px-6 bg-white rounded-xl shadow-sm font-bold text-gray-500 active:scale-95 transition-transform disabled:opacity-30 disabled:pointer-events-none" 
+                    id="nextPage" @(seq >= total ? "disabled" : "")>
+                Next <i class="fas fa-chevron-right ml-1"></i>
+            </button>
+        </div>
+        <script>
+            totalPages = parseInt('@Model.totalPage');
+        </script>
+    }
+    else
+    {
+        <div class="w-full pb-32"></div>
+    }
+}
+else
+{
+    <div class="w-full py-24 flex flex-col items-center justify-center text-gray-400 opacity-60">
+        <i class="fas fa-receipt text-5xl mb-4"></i>
+        <p class="font-bold">@Lang.no_results_found</p>
+    </div>
+}
+
+

+ 47 - 0
website/Areas/Millions/Views/Shared/_BottomNavbar.cshtml

@@ -0,0 +1,47 @@
+@using LotteryWebApp.Languages
+@{
+    var activePage = ViewData["ActiveTab"] as string ?? "Home";
+}
+<!-- Bottom Navbar pinned statically white background row -->
+<div class="fixed bottom-0 left-1/2 -translate-x-1/2 w-full min-[600px]:max-w-[414px] bg-white border-t border-gray-100 p-3 flex justify-around items-center z-50 shadow-[0_-2px_10px_rgba(0,0,0,0.05)] h-[82px]">
+    <a href="/Millions/Home/GameHome" class="flex flex-col items-center @(activePage == "Home" ? "text-[var(--primary)]" : "text-gray-400 hover:text-[var(--primary)]") cursor-pointer relative transition-colors no-underline">
+        @if(activePage == "Home") {
+            <div class="absolute -top-[14px] left-1/2 -translate-x-1/2 w-10 h-[2.5px] bg-[#0062FF] rounded-sm"></div>
+        }
+        <img src="/Millions/img/icon_home.svg" alt="Home" class="w-8 h-8">
+        <span class="text-[12px] mt-1 @(activePage == "Home" ? "font-extrabold" : "font-bold")" style="@(activePage == "Home" ? "color: #0062FF;" : "")">@Lang.home</span>
+    </a>
+    
+    <a href="/Millions/Home/Rule" class="flex flex-col items-center @(activePage == "Rule" ? "text-[var(--primary)]" : "text-gray-400 hover:text-[var(--primary)]") cursor-pointer relative transition-colors no-underline">
+        @if(activePage == "Rule") {
+            <div class="absolute -top-[14px] left-1/2 -translate-x-1/2 w-10 h-[2.5px] bg-[#0062FF] rounded-sm"></div>
+        }
+        <img src="/Millions/img/icon_rule.svg" alt="Rule" class="w-8 h-8">
+        <span class="text-[12px] mt-1 @(activePage == "Rule" ? "font-extrabold" : "font-bold")" style="@(activePage == "Rule" ? "color: #0062FF;" : "")">@Lang.rules</span>
+    </a>
+
+    <a href="/Millions/Home/History" class="flex flex-col items-center @(activePage == "History" ? "text-[var(--primary)]" : "text-gray-400 hover:text-[var(--primary)]") cursor-pointer relative transition-colors no-underline">
+        @if(activePage == "History") {
+            <div class="absolute -top-[14px] left-1/2 -translate-x-1/2 w-10 h-[2.5px] bg-[#0062FF] rounded-sm"></div>
+        }
+        <img src="/Millions/img/icon_history.svg" alt="History" class="w-8 h-8">
+        <span class="text-[12px] mt-1 @(activePage == "History" ? "font-extrabold" : "font-bold")" style="@(activePage == "History" ? "color: #0062FF;" : "")">@Lang.history</span>
+    </a>
+
+    <a href="/Millions/Home/FAQ" class="flex flex-col items-center @(activePage == "FAQ" ? "text-[var(--primary)]" : "text-gray-400 hover:text-[var(--primary)]") cursor-pointer relative transition-colors no-underline group">
+        @if(activePage == "FAQ") {
+            <div class="absolute -top-[14px] left-1/2 -translate-x-1/2 w-10 h-[2.5px] bg-[#0062FF] rounded-sm"></div>
+        }
+        <img src="/Millions/img/icon_faq.svg" alt="FAQ" class="w-8 h-8">
+        <span class="text-[12px] mt-1 @(activePage == "FAQ" ? "font-extrabold drop-shadow-sm" : "font-bold")" style="@(activePage == "FAQ" ? "color: #0062FF;" : "")">@Lang.faq</span>
+    </a>
+
+    <a href="/Millions/Home/More" class="flex flex-col items-center @(activePage == "More" ? "text-[var(--primary)]" : "text-gray-400 hover:text-[var(--primary)]") cursor-pointer relative transition-colors no-underline group">
+        @if(activePage == "More") {
+            <div class="absolute -top-[14px] left-1/2 -translate-x-1/2 w-10 h-[2.5px] bg-[#0062FF] rounded-sm"></div>
+        }
+        <img src="/Millions/img/icon_more.svg" alt="More" class="w-8 h-8">
+        <span class="text-[12px] mt-1 @(activePage == "More" ? "font-extrabold drop-shadow-sm" : "font-bold")" style="@(activePage == "More" ? "color: #0062FF;" : "")">@Lang.more</span>
+    </a>
+</div>
+

+ 77 - 0
website/Areas/Millions/Views/Shared/_Layout.cshtml

@@ -0,0 +1,77 @@
+@inject Microsoft.Extensions.Configuration.IConfiguration configuration
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" />
+    <title>@ViewData["Title"] - Millions</title>
+    
+    <!-- Original website bootstrap if needed, or link separate -->
+    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css" />
+    
+    <!-- Isolated CSS just for Millions  -->
+    <link rel="stylesheet" href="/Millions/css/site.css" />
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
+    <script src="https://cdn.tailwindcss.com"></script>
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
+    <link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;700;800&display=swap" rel="stylesheet">
+    <style>
+        .font-bricolage { font-family: 'Bricolage Grotesque', sans-serif; }
+        .font-UTM_Futura_Extra { font-family: 'UTM Futura Extra', sans-serif; }
+    </style>
+    
+    @RenderSection("Styles", required: false)
+</head>
+<body class="millions-bg">
+    @Html.AntiForgeryToken()
+    <input type="hidden" id="subDomain" value="@(configuration["subDomain"] ?? "")" />
+    <script>
+        var subDomain = document.getElementById("subDomain").value || "";
+    </script>
+    <div id="loading-overlay" class="hidden">
+        <div class="loading-spinner"></div>
+    </div>
+
+    @RenderBody()
+
+    <!-- Original jquery or similar -->
+    <script src="/lib/jquery/jquery.min.js"></script>
+    <script src="/lib/bootstrap/js/bootstrap.bundle.min.js"></script>
+    
+    <!-- Isolated JS just for Millions -->
+    <script src="/Millions/js/site.js"></script>
+
+    <script>
+        // Global Loading Helpers
+        function showLoading() {
+            $('#loading-overlay').removeClass('hidden').addClass('flex');
+        }
+        function hideLoading() {
+            $('#loading-overlay').removeClass('flex').addClass('hidden');
+        }
+
+        // Auto-show for all AJAX calls
+        $(document).ajaxStart(function() {
+            showLoading();
+        }).ajaxStop(function() {
+            hideLoading();
+        });
+
+        function formatMoneyV2(amount) {
+            if (amount === undefined || amount === null || amount === "") return "0";
+            let str = amount.toString().replace(/[^0-9]/g, '');
+            if (str === "") return "0";
+            return str.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
+        }
+
+        function unformatMoneyV2(amount) {
+            if (amount === undefined || amount === null || amount === "") return "0";
+            return amount.toString().replace(/[^0-9]/g, '');
+        }
+    </script>
+
+
+    @RenderSection("Scripts", required: false)
+</body>
+</html>
+

+ 4 - 0
website/Areas/Millions/Views/_ViewImports.cshtml

@@ -0,0 +1,4 @@
+@using LotteryWebApp
+@using LotteryWebApp.Models
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+

+ 4 - 0
website/Areas/Millions/Views/_ViewStart.cshtml

@@ -0,0 +1,4 @@
+@{
+    Layout = "~/Areas/Millions/Views/Shared/_Layout.cshtml";
+}
+

+ 5 - 1
website/Common/Constants.cs

@@ -83,10 +83,14 @@ namespace LotteryWebApp.Common
         public const string TENNESSEE_MAYRAJ_CODE = "19";
         public const string TENNESSEE_LOTTO3_CODE = "20";
 
-        public const string MEGA_LOTO = "87";
+        public const string MEGA_LOTO_Pick10 = "87";
+        public const string MEGA_LOTO_Millions = "88";
+        public const string MEGA_LOTO_Bet = "89";
+
         public const string PIC10_BASIC_CODE = "30";
         public const string PIC10_BIGSMALL_CODE = "31";
         public const string PIC10_ODDEVEN_CODE = "32";
+        public const string Millions_CODE = "33";
 
 
         public const string TERM_HAS_RESULT_TYPE = "1";

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1031 - 291
website/Languages/Lang.Designer.cs


+ 280 - 34
website/Languages/Lang.fr.resx

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <root>
   <!-- 
     Microsoft ResX Schema 
@@ -145,7 +145,7 @@
     <value>Basic Account</value>
   </data>
   <data name="bee_account" xml:space="preserve">
-    <value>Natcom Lotto’s Account</value>
+    <value>Natcom Lotto’s Account</value>
   </data>
   <data name="bee_loto_des" xml:space="preserve">
     <value>Natcom Lotto is a Bolet, Maryaj and Lotto3 games, results of NewYork and Florida lottery games. Pick your numbers and wait for the winning combination to be announced. You can convert the winning amount to Natcom mobile balance or Natcash. Good luck!</value>
@@ -153,7 +153,7 @@
   <data name="bee_loto_intro" xml:space="preserve">
     <value>Natcom Lotto is a new VAS lottery service of Natcom. You can play via USSD or WEB/APP. You can also receive SMS results with FREE once you send ON to 7777 and you can send OFF to 7777 to request for not receive MT sms results or MT information from Lottery and ON to recover MT sms.
 You can also try your luck with Natcom Lottery draw.
-We’ll help you create an account in a few easy steps.</value>
+We’ll help you create an account in a few easy steps.</value>
   </data>
   <data name="bet_amount" xml:space="preserve">
     <value>Bet Amount</value>
@@ -945,7 +945,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Yes</value>
   </data>
   <data name="rule_game_1_title" xml:space="preserve">
-    <value>II. GAME 1  BASIC PICK 10</value>
+    <value>II. GAME 1 – BASIC PICK 10</value>
   </data>
   <data name="rule_basic_pick" xml:space="preserve">
     <value>Basic&lt;br&gt;Pick</value>
@@ -972,7 +972,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Selection Method</value>
   </data>
   <data name="rule_choose_10" xml:space="preserve">
-    <value>Choose 10 numbers from 0180.</value>
+    <value>Choose 10 numbers from 01–80.</value>
   </data>
   <data name="rule_winning_rule" xml:space="preserve">
     <value>Winning Rule</value>
@@ -990,16 +990,16 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Prize Pool</value>
   </data>
   <data name="rule_if_le_10" xml:space="preserve">
-    <value>If  10 winners</value>
+    <value>If ≤ 10 winners</value>
   </data>
   <data name="rule_each_receives" xml:space="preserve">
-    <value>Each winner receives 💰100,000 HTG.</value>
+    <value>Each winner receives 💰100,000 HTG.</value>
   </data>
   <data name="rule_if_gt_10" xml:space="preserve">
     <value>If &gt; 10 winners</value>
   </data>
   <data name="rule_shared_equally" xml:space="preserve">
-    <value>💰1,000,000 HTG shared equally among winners.</value>
+    <value>💰1,000,000 HTG shared equally among winners.</value>
   </data>
   <data name="rule_numbers_matches" xml:space="preserve">
     <value>Numbers Matches</value>
@@ -1008,19 +1008,19 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Prize Pool (HTG)</value>
   </data>
   <data name="rule_prize_12k" xml:space="preserve">
-    <value>💰12,000 HTG.</value>
+    <value>💰12,000 HTG.</value>
   </data>
   <data name="rule_prize_600" xml:space="preserve">
-    <value>💰600 HTG.</value>
+    <value>💰600 HTG.</value>
   </data>
   <data name="rule_prize_160" xml:space="preserve">
-    <value>💰160 HTG.</value>
+    <value>💰160 HTG.</value>
   </data>
   <data name="rule_prize_20" xml:space="preserve">
-    <value>💰20 HTG.</value>
+    <value>💰20 HTG.</value>
   </data>
   <data name="rule_prize_5" xml:space="preserve">
-    <value>💰5 HTG.</value>
+    <value>💰5 HTG.</value>
   </data>
   <data name="rule_sales_cutoff" xml:space="preserve">
     <value>Ticket Sales Cut-off Time</value>
@@ -1038,7 +1038,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>The official system time will determine ticket validity.</value>
   </data>
   <data name="rule_bs_winning_rule" xml:space="preserve">
-    <value>BIG  SMALL  WINNING RULE</value>
+    <value>BIG  SMALL – WINNING RULE</value>
   </data>
   <data name="rule_how_to_win" xml:space="preserve">
     <value>How to win?</value>
@@ -1062,7 +1062,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Selected</value>
   </data>
   <data name="rule_if_13_41_80" xml:space="preserve">
-    <value>If 13 numbers among the 20 drawn numbers fall within the range &lt;span class="text-[#0BA01A] font-bold"&gt;4180&lt;/span&gt;,</value>
+    <value>If 13 numbers among the 20 drawn numbers fall within the range &lt;span class="text-[#0BA01A] font-bold"&gt;41–80&lt;/span&gt;,</value>
   </data>
   <data name="rule_you_win" xml:space="preserve">
     <value>You win.</value>
@@ -1071,7 +1071,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>13 number from &lt;span class="font-[900]"&gt;01-40&lt;/span&gt;</value>
   </data>
   <data name="rule_if_13_01_40" xml:space="preserve">
-    <value>If 13 numbers among the 20 drawn numbers fall within the range &lt;span class="text-[#0BA01A] font-bold"&gt;0140&lt;/span&gt;,</value>
+    <value>If 13 numbers among the 20 drawn numbers fall within the range &lt;span class="text-[#0BA01A] font-bold"&gt;01–40&lt;/span&gt;,</value>
   </data>
   <data name="rule_example" xml:space="preserve">
     <value>Example</value>
@@ -1080,10 +1080,10 @@ We’ll help you create an account in a few easy steps.</value>
     <value>If the 20 drawn numbers contain:</value>
   </data>
   <data name="rule_13_or_more_41_80" xml:space="preserve">
-    <value>13 or more numbers between &lt;span class="text-[#0BA01A] font-bold"&gt;41–80&lt;/span&gt; → BIG wins</value>
+    <value>13 or more numbers between &lt;span class="text-[#0BA01A] font-bold"&gt;41–80&lt;/span&gt; → BIG wins</value>
   </data>
   <data name="rule_13_or_more_01_40" xml:space="preserve">
-    <value>13 or more numbers between &lt;span class="text-[#0BA01A] font-bold"&gt;01–40&lt;/span&gt; → SMALL wins</value>
+    <value>13 or more numbers between &lt;span class="text-[#0BA01A] font-bold"&gt;01–40&lt;/span&gt; → SMALL wins</value>
   </data>
   <data name="rule_prize_pool_title" xml:space="preserve">
     <value>PRIZE POOL</value>
@@ -1092,7 +1092,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Winning tickets receive 2x the bet amount.</value>
   </data>
   <data name="rule_example_bet_50" xml:space="preserve">
-    <value>Example: Bet 50 HTG  Win 100 HTG.</value>
+    <value>Example: Bet 50 HTG → Win 100 HTG.</value>
   </data>
   <data name="rule_how_result_determined" xml:space="preserve">
     <value>How the Winning Result is Determined</value>
@@ -1164,7 +1164,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Winning tickets receive 4x the bet amount.</value>
   </data>
   <data name="rule_example_bet_50_4x" xml:space="preserve">
-    <value>Example: Bet 50 HTG  Win 200 HTG.</value>
+    <value>Example: Bet 50 HTG → Win 200 HTG.</value>
   </data>
   <data name="rule_important_notes" xml:space="preserve">
     <value>Important Notes</value>
@@ -1185,10 +1185,10 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Try again</value>
   </data>
   <data name="update_profile_error" xml:space="preserve">
-    <value>Une erreur est survenue lors de la mise à jour de votre profil.</value>
+    <value>Une erreur est survenue lors de la mise à jour de votre profil.</value>
   </data>
   <data name="jackpot_today_htg" xml:space="preserve">
-    <value>1.000.000 HTG today !</value>
+    <value>100.000 HTG today !</value>
   </data>
   <data name="no_results_found" xml:space="preserve">
     <value>No results found</value>
@@ -1290,7 +1290,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Confirm</value>
   </data>
   <data name="v2_payment_successfully" xml:space="preserve">
-    <value>Money 💸 has been transferred successfully!</value>
+    <value>Money 💸 has been transferred successfully!</value>
   </data>
   <data name="v2_your_choice" xml:space="preserve">
     <value>Your choice</value>
@@ -1305,10 +1305,10 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Choose the account</value>
   </data>
   <data name="v2_sender_phone" xml:space="preserve">
-    <value>💸 Sender phone</value>
+    <value>💸 Sender phone</value>
   </data>
   <data name="v2_receiver_phone" xml:space="preserve">
-    <value>💰 Receiver phone</value>
+    <value>💰 Receiver phone</value>
   </data>
   <data name="v2_amount_htg" xml:space="preserve">
     <value>Amount (HTG)</value>
@@ -1320,7 +1320,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Continue</value>
   </data>
   <data name="v2_account_name" xml:space="preserve">
-    <value>Bee Lottos Account</value>
+    <value>Bee Lotto’s Account</value>
   </data>
   <data name="v2_fee" xml:space="preserve">
     <value>Fee</value>
@@ -1362,31 +1362,31 @@ We’ll help you create an account in a few easy steps.</value>
     <value>millionair</value>
   </data>
   <data name="faq_v2_q4" xml:space="preserve">
-    <value> How many matching numbers do I need to win a prize?</value>
+    <value>❓ How many matching numbers do I need to win a prize?</value>
   </data>
   <data name="faq_v2_a4" xml:space="preserve">
-    <value>The more numbers you match, the bigger your prize! &lt;br/&gt; In BASIC PICK 10, your 10 selected numbers are compared with the 10 official result numbers. You win when you match 6 or more numbers — and even matching 0 numbers still gives you a reward!&lt;br/&gt;&lt;br/&gt; 🎯 Match 10 numbers → Win the Jackpot&lt;br/&gt; 🔥 Match 9 numbers → Win 12,000 HTG&lt;br/&gt; 💰 Match 8 numbers → Win 600 HTG&lt;br/&gt; ⭐ Match 7 numbers → Win 160 HTG&lt;br/&gt; 🎉 Match 6 numbers → Win 20 HTG&lt;br/&gt; 🎁 Match 0 numbers → Win 5 HTG&lt;br/&gt;&lt;br/&gt; Every ticket gives you a chance to win — even when luck surprises you!</value>
+    <value>The more numbers you match, the bigger your prize! &lt;br/&gt; In BASIC PICK 10, your 10 selected numbers are compared with the 10 official result numbers. You win when you match 6 or more numbers — and even matching 0 numbers still gives you a reward!&lt;br/&gt;&lt;br/&gt; 🎯 Match 10 numbers → Win the Jackpot&lt;br/&gt; 🔥 Match 9 numbers → Win 12,000 HTG&lt;br/&gt; 💰 Match 8 numbers → Win 600 HTG&lt;br/&gt; ⭐ Match 7 numbers → Win 160 HTG&lt;br/&gt; 🎉 Match 6 numbers → Win 20 HTG&lt;br/&gt; 🎁 Match 0 numbers → Win 5 HTG&lt;br/&gt;&lt;br/&gt; Every ticket gives you a chance to win — even when luck surprises you!</value>
   </data>
   <data name="faq_v2_q5" xml:space="preserve">
-    <value> How do I play the Big / Small game?</value>
+    <value>❓ How do I play the Big / Small game?</value>
   </data>
   <data name="faq_v2_a5" xml:space="preserve">
-    <value>Choose Big (41–80) or Small (01–40). Purchase your ticket before 20:00 and wait for the draw at 20:30.</value>
+    <value>Choose Big (41–80) or Small (01–40). Purchase your ticket before 20:00 and wait for the draw at 20:30.</value>
   </data>
   <data name="faq_v2_q6" xml:space="preserve">
-    <value> How do I win in the Big / Small game?</value>
+    <value>❓ How do I win in the Big / Small game?</value>
   </data>
   <data name="faq_v2_a6" xml:space="preserve">
-    <value>After 20 numbers are drawn, the system checks how many numbers fall within each range: &lt;br/&gt; - If 13 or more numbers are between 41–80, the result is BIG.&lt;br/&gt; - If 13 or more numbers are between 01–40, the result is SMALL.&lt;br/&gt;&lt;br/&gt; If your selected option matches the official result, you win.</value>
+    <value>After 20 numbers are drawn, the system checks how many numbers fall within each range: &lt;br/&gt; - If 13 or more numbers are between 41–80, the result is BIG.&lt;br/&gt; - If 13 or more numbers are between 01–40, the result is SMALL.&lt;br/&gt;&lt;br/&gt; If your selected option matches the official result, you win.</value>
   </data>
   <data name="faq_v2_q7" xml:space="preserve">
-    <value> How do I play the Odd / Even game?</value>
+    <value>❓ How do I play the Odd / Even game?</value>
   </data>
   <data name="faq_v2_a7" xml:space="preserve">
     <value>Choose Odd or Even. Purchase your ticket before 20:00 and wait for the draw at 20:30.</value>
   </data>
   <data name="faq_v2_q8" xml:space="preserve">
-    <value> How do I win in the Odd / Even game?</value>
+    <value>❓ How do I win in the Odd / Even game?</value>
   </data>
   <data name="faq_v2_a8" xml:space="preserve">
     <value>After 20 numbers are drawn, the system counts how many numbers are odd or even: &lt;br/&gt; - If 15 or more numbers are odd, the result is ODD.&lt;br/&gt; - If 15 or more numbers are even, the result is EVEN.&lt;br/&gt;&lt;br/&gt; If your selected option matches the official result, you win.</value>
@@ -1475,4 +1475,250 @@ We’ll help you create an account in a few easy steps.</value>
   <data name="v2_ticket_code" xml:space="preserve">
     <value>Ticket Code</value>
   </data>
+  <data name="loto_des_millions" xml:space="preserve">
+    <value> is a Bolet, Maryaj and Lotto3 games, results of NewYork and Florida lottery games. Pick your numbers and wait for the winning combination to be announced. You can convert the winning amount to Natcom mobile balance or Natcash. Good luck!</value>
+  </data>
+  <data name="millions_select" xml:space="preserve">
+    <value>Select</value>
+  </data>
+  <data name="millions_selected" xml:space="preserve">
+    <value>Selected</value>
+  </data>
+  <data name="millions_prize_if_win" xml:space="preserve">
+    <value>Prize if win</value>
+  </data>
+  <data name="millions_you_choose" xml:space="preserve">
+    <value>Your Choose</value>
+  </data>
+  <data name="millions_win" xml:space="preserve">
+    <value>Win</value>
+  </data>
+  <data name="millions_not_win" xml:space="preserve">
+    <value>Not Win</value>
+  </data>
+  <data name="millions_waiting" xml:space="preserve">
+    <value>Waiting</value>
+  </data>
+  <data name="millions_all" xml:space="preserve">
+    <value>All</value>
+  </data>
+  <data name="millions_classic_pick_10" xml:space="preserve">
+    <value>BASIC PICK 10</value>
+  </data>
+  <data name="millions_big_small" xml:space="preserve">
+    <value>Big  Small</value>
+  </data>
+  <data name="millions_odd_even" xml:space="preserve">
+    <value>Odd Even</value>
+  </data>
+  <data name="millions_amount_played" xml:space="preserve">
+    <value>Amount played</value>
+  </data>
+  <data name="millions_amount_won" xml:space="preserve">
+    <value>Amount won</value>
+  </data>
+  <data name="millions_date_and_time" xml:space="preserve">
+    <value>Date and Time</value>
+  </data>
+  <data name="millions_game_locked" xml:space="preserve">
+    <value>This game is currently locked.</value>
+  </data>
+  <data name="millions_updating_results" xml:space="preserve">
+    <value>Results are being updated.</value>
+  </data>
+  <data name="millions_buy_classic_pick_10" xml:space="preserve">
+    <value>Buy Basic Pick 10</value>
+  </data>
+  <data name="millions_select_10_lucky_numbers" xml:space="preserve">
+    <value>Select Lucky Numbers</value>
+  </data>
+  <data name="millions_add_more_ticket" xml:space="preserve">
+    <value>Add more Ticket</value>
+  </data>
+  <data name="millions_estimated_ticket_price" xml:space="preserve">
+    <value>Estimated Ticket Price</value>
+  </data>
+  <data name="millions_payment" xml:space="preserve">
+    <value>Payment</value>
+  </data>
+  <data name="millions_round" xml:space="preserve">
+    <value>Round</value>
+  </data>
+  <data name="millions_edit" xml:space="preserve">
+    <value>Edit</value>
+  </data>
+  <data name="millions_delete" xml:space="preserve">
+    <value>Delete</value>
+  </data>
+  <data name="millions_back" xml:space="preserve">
+    <value>back</value>
+  </data>
+  <data name="millions_save" xml:space="preserve">
+    <value>Save</value>
+  </data>
+  <data name="millions_selected_ticket" xml:space="preserve">
+    <value>Selected Tickets</value>
+  </data>
+  <data name="millions_ticket_not_valid" xml:space="preserve">
+    <value>Ticket not valid</value>
+  </data>
+  <data name="millions_confirm_purchase" xml:space="preserve">
+    <value>Confirm Purchase</value>
+  </data>
+  <data name="millions_ticket" xml:space="preserve">
+    <value>Ticket</value>
+  </data>
+  <data name="millions_amount" xml:space="preserve">
+    <value>Amount</value>
+  </data>
+  <data name="millions_otp_instruction" xml:space="preserve">
+    <value>Please confirm and enter OTP to proceed.</value>
+  </data>
+  <data name="millions_request_new_otp" xml:space="preserve">
+    <value>Request new OTP</value>
+  </data>
+  <data name="millions_cancel" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="millions_confirm" xml:space="preserve">
+    <value>Confirm</value>
+  </data>
+  <data name="millions_payment_successfully" xml:space="preserve">
+    <value>Money 💸 has been transferred successfully!</value>
+  </data>
+  <data name="millions_your_choice" xml:space="preserve">
+    <value>Your choice</value>
+  </data>
+  <data name="millions_buy_ticket_label" xml:space="preserve">
+    <value>Buy ticket</value>
+  </data>
+  <data name="millions_transfer" xml:space="preserve">
+    <value>Transfer</value>
+  </data>
+  <data name="millions_choose_account" xml:space="preserve">
+    <value>Choose the account</value>
+  </data>
+  <data name="millions_sender_phone" xml:space="preserve">
+    <value>💸 Sender phone</value>
+  </data>
+  <data name="millions_receiver_phone" xml:space="preserve">
+    <value>💰 Receiver phone</value>
+  </data>
+  <data name="millions_amount_htg" xml:space="preserve">
+    <value>Amount (HTG)</value>
+  </data>
+  <data name="millions_paste" xml:space="preserve">
+    <value>Paste</value>
+  </data>
+  <data name="millions_continue" xml:space="preserve">
+    <value>Continue</value>
+  </data>
+  <data name="millions_account_name" xml:space="preserve">
+    <value>Bee Lotto’s Account</value>
+  </data>
+  <data name="millions_fee" xml:space="preserve">
+    <value>Fee</value>
+  </data>
+  <data name="millions_free" xml:space="preserve">
+    <value>Free</value>
+  </data>
+  <data name="millions_enter_valid_amount" xml:space="preserve">
+    <value>Please enter a valid amount.</value>
+  </data>
+  <data name="millions_insufficient_balance" xml:space="preserve">
+    <value>The winnings balance is insufficient.</value>
+  </data>
+  <data name="millions_confirm_transaction" xml:space="preserve">
+    <value>Confirm transaction</value>
+  </data>
+  <data name="millions_enter_otp_proceed" xml:space="preserve">
+    <value>Please confirm and enter OTP to proceed</value>
+  </data>
+  <data name="millions_convert" xml:space="preserve">
+    <value>Convert</value>
+  </data>
+  <data name="millions_coins" xml:space="preserve">
+    <value>Coins</value>
+  </data>
+  <data name="millions_htg" xml:space="preserve">
+    <value>HTG</value>
+  </data>
+  <data name="millions_rule_drawn_count_desc" xml:space="preserve">
+    <value>For this game, the system will count how many of the 20 drawn numbers are:</value>
+  </data>
+  <data name="faq_millions_q4" xml:space="preserve">
+    <value>❓ How many matching numbers do I need to win a prize?</value>
+  </data>
+  <data name="faq_millions_a4" xml:space="preserve">
+    <value>The more numbers you match, the bigger your prize! &lt;br/&gt; In BASIC PICK 10, your 10 selected numbers are compared with the 10 official result numbers. You win when you match 6 or more numbers — and even matching 0 numbers still gives you a reward!&lt;br/&gt;&lt;br/&gt; 🎯 Match 10 numbers → Win the Jackpot&lt;br/&gt; 🔥 Match 9 numbers → Win 12,000 HTG&lt;br/&gt; 💰 Match 8 numbers → Win 600 HTG&lt;br/&gt; ⭐ Match 7 numbers → Win 160 HTG&lt;br/&gt; 🎉 Match 6 numbers → Win 20 HTG&lt;br/&gt; 🎁 Match 0 numbers → Win 5 HTG&lt;br/&gt;&lt;br/&gt; Every ticket gives you a chance to win — even when luck surprises you!</value>
+  </data>
+  <data name="faq_millions_q5" xml:space="preserve">
+    <value>❓ How do I play the Big / Small game?</value>
+  </data>
+  <data name="faq_millions_a5" xml:space="preserve">
+    <value>Choose Big (41–80) or Small (01–40). Purchase your ticket before 20:00 and wait for the draw at 20:30.</value>
+  </data>
+  <data name="faq_millions_q6" xml:space="preserve">
+    <value>❓ How do I win in the Big / Small game?</value>
+  </data>
+  <data name="faq_millions_a6" xml:space="preserve">
+    <value>After 20 numbers are drawn, the system checks how many numbers fall within each range: &lt;br/&gt; - If 13 or more numbers are between 41–80, the result is BIG.&lt;br/&gt; - If 13 or more numbers are between 01–40, the result is SMALL.&lt;br/&gt;&lt;br/&gt; If your selected option matches the official result, you win.</value>
+  </data>
+  <data name="faq_millions_q7" xml:space="preserve">
+    <value>❓ How do I play the Odd / Even game?</value>
+  </data>
+  <data name="faq_millions_a7" xml:space="preserve">
+    <value>Choose Odd or Even. Purchase your ticket before 20:00 and wait for the draw at 20:30.</value>
+  </data>
+  <data name="faq_millions_q8" xml:space="preserve">
+    <value>❓ How do I win in the Odd / Even game?</value>
+  </data>
+  <data name="faq_millions_a8" xml:space="preserve">
+    <value>After 20 numbers are drawn, the system counts how many numbers are odd or even: &lt;br/&gt; - If 15 or more numbers are odd, the result is ODD.&lt;br/&gt; - If 15 or more numbers are even, the result is EVEN.&lt;br/&gt;&lt;br/&gt; If your selected option matches the official result, you win.</value>
+  </data>
+  <data name="millions_otp_sent_successfully" xml:space="preserve">
+    <value>Your OTP has been sent successfully. Please check your messages !</value>
+  </data>
+  <data name="millions_detail" xml:space="preserve">
+    <value>Detail</value>
+  </data>
+  <data name="millions_tap_to_see_detail" xml:space="preserve">
+    <value>Tap to see detail</value>
+  </data>
+  <data name="millions_ticket_detail" xml:space="preserve">
+    <value>Ticket Detail</value>
+  </data>
+  <data name="millions_bill_code" xml:space="preserve">
+    <value>Bill Code</value>
+  </data>
+  <data name="millions_money_ticket" xml:space="preserve">
+    <value>Money Ticket</value>
+  </data>
+  <data name="millions_money_win" xml:space="preserve">
+    <value>Money Win</value>
+  </data>
+  <data name="millions_purchase_date" xml:space="preserve">
+    <value>Purchase Date</value>
+  </data>
+  <data name="millions_channel" xml:space="preserve">
+    <value>Channel Buy</value>
+  </data>
+  <data name="millions_payment_method" xml:space="preserve">
+    <value>Payment Method</value>
+  </data>
+  <data name="millions_close" xml:space="preserve">
+    <value>Close</value>
+  </data>
+  <data name="millions_game" xml:space="preserve">
+    <value>Game Name</value>
+  </data>
+  <data name="millions_draw_date" xml:space="preserve">
+    <value>Draw Date</value>
+  </data>
+  <data name="millions_ticket_code" xml:space="preserve">
+    <value>Ticket Code</value>
+  </data>
+  <data name="millions_jackpot_today_htg" xml:space="preserve">
+    <value>30.000.000 HTG today !</value>
+  </data>
 </root>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 227 - 227
website/Languages/Lang.resx


+ 129 - 124
website/Languages/Question.Designer.cs

@@ -61,20 +61,21 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;1.1 Souk ki kont pouw gen lajan pouw kaNatcom Lotto?&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;1.1 A ki kont mwen ka jwe nan Natcom Lotto?&lt;/p&gt;
         ///&lt;ul&gt;
-        ///&lt;li&gt;Ou ka jwe avek kob ki sou kont, fe *5555# oswa website/application htttps://lotto.natcom.com.ht&lt;/li&gt;
-        ///&lt;li&gt;Ou ka jwe avek kob ki sou kont &amp;ndash; Natcash, fe *202#&lt;/li&gt;
+        ///&lt;li&gt;Jwe ak yon prensipal, fe *5555# oswa sou sitweb/aplikasyon htttps://lotto.natcom.com.ht&lt;/li&gt;
+        ///&lt;li&gt;Jwe ak kont prensipal &amp;ndash; Natcash, fe *202#&lt;/li&gt;
         ///&lt;/ul&gt;
-        ///&lt;p&gt;1.2. Ki pi piti kob ak ki pi plis kobo u ka achte yon Tike?&lt;/p&gt;
+        ///&lt;p&gt;1.2 Ki kantite minimom ak maksimom ou ka achte yon tike?&lt;/p&gt;
         ///&lt;ul&gt;
-        ///&lt;li&gt;Minimom: 1 HTG&lt;/li&gt;
         ///&lt;li&gt;Maksimom: 5000 HTG&lt;/li&gt;
+        ///&lt;li&gt;Minimom: 1 HTG&lt;/li&gt;
         ///&lt;/ul&gt;
-        ///&lt;p&gt;1.3&amp;nbsp;Rezilta Lotri NewYork&lt;/p&gt;
+        ///&lt;p&gt;1.3 Rezilta Lotri Nouyok:&lt;/p&gt;
         ///&lt;p&gt;&lt;span style=color: #ff0000;&quot;&gt;B&amp;ograve;L&amp;egrave;t&lt;/span&gt;&lt;/p&gt;
         ///&lt;ul&gt;
-        ///&lt;li&gt;Achte 1 tike: *5555*1*XX*parye [rest of string was truncated]&quot;;.
+        ///&lt;li&gt;Achte 1 tike: *5555*1*XX*Paryaj# Voye&lt;/li&gt;
+        ///&lt;li&gt;Ach [rest of string was truncated]&quot;;.
         /// </summary>
         public static string a1 {
             get {
@@ -83,7 +84,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Apre chak tiraj, system nan voye yon SMS otomatik bay chak ganyan. Moun ki pedi pap jwenn SMS sa..
+        ///   Looks up a localized string similar to Apre chak tiraj, sistem nan voye yon SMS otomatikman bay chak ganyan. Jwe ki pa genyen tike PA P RESEVWA SMS..
         /// </summary>
         public static string a2 {
             get {
@@ -92,7 +93,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Wap resevwa lajan ou genyen an direkteman sou kont Natcom Lotto ou kek minit apre tiraj la (normalman lika anviwon 5 minit konsa), ganyan an ka verifye kont li lel, fe *5555*5#.
+        ///   Looks up a localized string similar to Lajan ganyan an ap direkteman sou kont Natcom loto nan kek minit apre le tiraj la (nomalman nan 5 minit). Ganyan yo ka verifye kantite lajan an le yo fe *5555*5#..
         /// </summary>
         public static string a3 {
             get {
@@ -101,7 +102,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Wi, ou ka. fel *5555*5# peze send oswa telechaje aplikasyon NatcomID a =&gt; Natcom Lotto oswa vizite sitweb sa: htttps;//lotto.natcom.com.ht.
+        ///   Looks up a localized string similar to Wi, ou kapab. Fe *5555*5#  oswa telechaje aplikasyon NatcomID la =&gt; Natcom Lotto oswa vizite sitweb la: htttps://lotto.natcom.com.ht.
         /// </summary>
         public static string a4 {
             get {
@@ -110,11 +111,11 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;Wi, ou ka transfere lajan ou geneyen an sou kont de baz ou oswasou kont Natcash ou – Kont Natcash epi  retire lajanw kach kay nenpot Agen Natcash&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;Wi, ou ka transfere kantite lajan ou te genyen an sou kont prensipal ou ak oswa - kont Natcash epi retire lajan kach nan kay ajan Natcash&lt;/p&gt;
         ///&lt;ul&gt;
-        ///&lt;li&gt;Pouf e transfe apati  ussd, fe*5555*5# peze Send&lt;/li&gt;
-        ///&lt;li&gt;Oswa apati aplikasyon Natcom Lotto: Klike“Retire Lajan” epi  etap yo&lt;/li&gt;
-        ///&lt;li&gt;Remak: Pi plis kob ou ka retire se 40,000 HTG/jou&lt;/li&gt;
+        ///&lt;li&gt;Pou transfere apati ussd, fe *5555*5# Voye&lt;/li&gt;
+        ///&lt;li&gt;Oubyen sou aplikasyon Natcom Lotto: Klike sou &quot;Retire Lajan&quot; epi swiv etap yo&lt;/li&gt;
+        ///&lt;li&gt;Not: Ou ka retire yon maksimom 40,000 HTG pa jou&lt;/li&gt;
         ///&lt;/ul&gt;.
         /// </summary>
         public static string a5 {
@@ -124,8 +125,8 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to Sou  sitweb: Chwazi lang la sou paj dakey la
-        ///Apati USSD: Fe *5555# epi chwazi Opsyon 8.
+        ///   Looks up a localized string similar to Sou sitweb la: Chwazi lang sou paj koneksyon an.
+        ///Sou USSD: Fe *5555# epi chwazi Opsyon 8 la..
         /// </summary>
         public static string a6 {
             get {
@@ -134,12 +135,12 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;Wi, Ouka achte Bolet, Maryaj, Lotto3 ak pou NewYork epi Lotri Florida sou kont Nacash:&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;Wi, ou ka achte Bolet, Maryaj, Lotto3 pou tou de Lotri New York ak Florida sou kont Nacash:&lt;/p&gt;
         ///&lt;ul&gt;
-        ///&lt;li&gt;Apati USSD: fe *202# epi Opsyon 6&lt;/li&gt;
-        ///&lt;li&gt;Sou aplikasyon Natcash la&lt;/li&gt;
+        ///&lt;li&gt;Via USSD: Fe *202# epi Opsyon 6&lt;/li&gt;
+        ///&lt;li&gt;Apati aplikasyon Natcash&lt;/li&gt;
         ///&lt;/ul&gt;
-        ///&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Not:&lt;/strong&gt; Si ou pa ko gen yon kont Natcash, ouka enskri nan Natcash lew fe *202# epi ou swiv enstriksyon yo oswa vizite nenpot showroom &amp;nbsp;Natcom oswa Ajan Natcash&lt;/p&gt;.
+        ///&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Si ou pa gen yon kont Natcash, ou ka kreye yon kont le w fe *202# epi swiv enstriksyon yo oswa vizite nenpot Showroom ak ajan Natcom&lt;/p&gt;.
         /// </summary>
         public static string a7 {
             get {
@@ -148,11 +149,13 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;Sipo Natcom Lotri:&lt;/p&gt;
+        ///   Looks up a localized string similar to Natcom:&lt;/p&gt;
         ///&lt;ul&gt;
-        ///&lt;li&gt;Sevis Klyantel 111 (1htg/min)&lt;/li&gt;
+        ///&lt;ul&gt;
+        ///&lt;li&gt;Rele yon ajan sant apel 111 (1htg/min)&lt;/li&gt;
         ///&lt;li&gt;Tchat: WhatsApp +509 33 25 1111 ; Facebook: NATCOM S.A&lt;/li&gt;
-        ///&lt;li&gt;Oswa ekri nan email sa: vas.department@natcom.com.ht&lt;/a&gt;&lt;/li&gt;
+        ///&lt;li&gt;Oswa voye yon imel nan: vas.department@natcom.com.ht&lt;/li&gt;
+        ///&lt;/ul&gt;
         ///&lt;/ul&gt;.
         /// </summary>
         public static string a8 {
@@ -163,11 +166,11 @@ namespace LotteryWebApp.Languages {
         
         /// <summary>
         ///   Looks up a localized string similar to &lt;p&gt;9.1 Ki moun ki ka jwe Natcom Lotto?&lt;/p&gt;
-        ///&lt;p&gt;- Si yon moun poko gen 18 tan lipa gen dwa jwe Natcom Lotto&lt;/p&gt;
-        ///&lt;p&gt;9.2 Obligasyon pou tout ganyan?&lt;/p&gt;
-        ///&lt;p&gt;- Lew jwe Natcom Lotto, sa vledi ou dako ak kondisyon &amp;nbsp;Natcom yo, epi ou bay Natcom tout dwa poul itilize enffomasyon yo janl vle le lap fe pwomosyon oswa piblisite san kel pa gen pou li peye pou enfomasyon say o.&lt;/p&gt;
-        ///&lt;p&gt;9.3 Ki dat limit ou geyen pou fe yon reklamayon?&lt;/p&gt;
-        ///&lt;p&gt;- Ou gen yon dele &amp;nbsp;90 jou pou fe tout reklamasyon. Apre period sa, N [rest of string was truncated]&quot;;.
+        ///&lt;p&gt;- Nenpot moun ki poko gen 18 an pa gen dwa jwe Natcom Lotto&lt;/p&gt;
+        ///&lt;p&gt;9.2 Obligasyon ganyan an?&lt;/p&gt;
+        ///&lt;p&gt;- Le jwe a jwe Natcom Lotto, li aksepte ke Natcom, san avetisman alavans, ka, gen dwa, itilize non li ak imaj li pou rezon pwomosyonel pandan nenpot kanpay piblisite. Gayan an, san okenn lot konpansasyon pou peye li pou rezon sa a.&lt;/p&gt;
+        ///&lt;p&gt;9.3 Dat limit pou reklame tike?&lt;/p&gt;
+        ///&lt;p&gt;- Tout pri yo dwe reklame nan 90 jou apre dat tiraj la. Apre peryod sa a, Natcom Lo [rest of string was truncated]&quot;;.
         /// </summary>
         public static string a9 {
             get {
@@ -176,15 +179,16 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;1&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 50 fwa (50x) kob ou parye a&lt;/p&gt;
-        ///&lt;p&gt;2&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 20 fwa (20x) kob ou parye a&lt;/p&gt;
-        ///&lt;p&gt;3&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 10 fwa (10x) kob ou parye a&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;- Rezilta NewYork : 14:30 (Midi), 22:30 (Aswe), nimewo ganyan : NUMBERS ak Win4&lt;/p&gt;
-        ///&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Ekzamp:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;- Rezilta NewYork pou dat: 14/03/2022 (le  [rest of string was truncated]&quot;;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;1ye Lot: genyen 50 fwa (50x) parye ou a&lt;/p&gt;
+        ///&lt;p&gt;2yem Lot: genyen 20 fwa (20x) parye ou a&lt;/p&gt;
+        ///&lt;p&gt;3yem Lot: Genyen 10 fwa (10x) parye ou a&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Rezilta NewYork: 14:30 (Midi), 22:30 (Aswe), nimewo ganyan yo: NUMBERS ak Win4&lt;/p&gt;
+        ///&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Egzanp:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Rezilta NewYork nan dat 14/03/2022 (Le tiraj la: 14:30):&lt;/p&gt;
+        ///&lt;ul style=&quot;list-style-type: [rest of string was truncated]&quot;;.
         /// </summary>
         public static string h1 {
             get {
@@ -193,14 +197,14 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;Genyen 1000 fwa (1000x) kob ou parye a.&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;Genyen 1000 fwa (1000x) parye ou&lt;/p&gt;
         ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
         ///&lt;p&gt;- Rezilta NewYork: 14:30 (Midi), 22:30 (Aswe)&lt;/p&gt;
-        ///NUMBERS ak Win4&lt;/p&gt;
-        ///&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Konbinezon 2 nimewo ganyan nan Bolet NewYork la&lt;/p&gt;.
+        ///&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Konbine 2 nimewo gayan pe Bol&amp;egrave;t NewYork&lt;/p&gt;
+        ///.
         /// </summary>
         public static string h2 {
             get {
@@ -209,14 +213,13 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;Genyen 500 fwa (500x) kob ou parye a.&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;Genyen 500 fwa (500x) parye ou&lt;/p&gt;
         ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
         ///&lt;p&gt;- Rezilta NewYork: 14:30 (Midi), 22:30 (Aswe)&lt;/p&gt;
-        ///NUMBERS ak Win4&lt;/p&gt;
-        ///&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Tiraj NewYork: NUMBERS&lt;/p&gt;.
+        ///&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Tiraj NewYork: NIMEWO&lt;/p&gt;.
         /// </summary>
         public static string h3 {
             get {
@@ -225,16 +228,18 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;1&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 50 fwa (50x) kob ou parye a&lt;/p&gt;
-        ///&lt;p&gt;2&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 20 fwa (20x) kob ou parye a&lt;/p&gt;
-        ///&lt;p&gt;3&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 10 fwa (10x) kob ou parye a&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Rezilta Florida: 13:30 (Midi), 21:45 (Aswe), nimewo ganyan : Pick3 ak Pick4&lt;/p&gt;
-        ///NUMBERS ak Win4&lt;/p&gt;
-        ///&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Ekzamp:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Rezilta Florida pou  [rest of string was truncated]&quot;;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;1ye Lot: genyen 50 fwa (50x) parye ou&lt;/p&gt;
+        ///&lt;p&gt;2yem Lot: genyen 20 fwa (20x) parye ou&lt;/p&gt;
+        ///&lt;p&gt;3yem Lot: Genyen 10 fwa (10x) parye ou&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;ul&gt;
+        ///&lt;li&gt;Rezilta Florid: 13:30 (Midi), 21:45 (Aswe), nimewo gayan yo: Pick3 ak Pick4&lt;/li&gt;
+        ///&lt;li&gt;Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/li&gt;
+        ///&lt;/ul&gt;
+        ///&lt;p&gt;&lt;strong&gt;Egzanp:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Rezilta Florid nan dat 14/03/2022 (Le tiraj la: 13:30):&lt;/p&gt;
+        ///&lt;ul style=list-style-typ [rest of string was truncated]&quot;;.
         /// </summary>
         public static string h4 {
             get {
@@ -243,14 +248,14 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;Genyen 1000 fwa (1000x) kob ou parye a.&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;Genyen 1000 fwa (1000x) parye ou&lt;/p&gt;
         ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;- Rezilta Florida: 13:30 (Midi), 21:45 (Aswe)&lt;/p&gt;
-        ///NUMBERS ak Win4&lt;/p&gt;
-        ///&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Konbinezon 2 nimewo ganyan nan Bolet Florida la&lt;/p&gt;.
+        ///&lt;p&gt;- Rezilta Florid: 13:30 (Midi), 21:45 (Aswe)
+        ///&lt;/p&gt;
+        ///&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Konbine 2 nimewo gayan pe Bel&amp;egrave;t Florida&lt;/p&gt;.
         /// </summary>
         public static string h5 {
             get {
@@ -259,14 +264,13 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;Genyen 500 fwa (500x) kob ou parye a.&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;Genyen 500 fwa (500x) parye ou&lt;/p&gt;
         ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;- Rezilta Florida: 13:30 (Midi), 21:45 (Aswe)&lt;/p&gt;
-        ///NUMBERS ak Win4&lt;/p&gt;
-        ///&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Tiraj Florida: PICK3&lt;/p&gt;.
+        ///&lt;p&gt;- Rezilta Florid: 13:30 (Midi), 21:45 (Aswe)&lt;/p&gt;
+        ///&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Tiraj Florid: PICK3&lt;/p&gt;.
         /// </summary>
         public static string h6 {
             get {
@@ -275,17 +279,17 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;1st: Genyen 40 fwa (40x) kob ou parye a.&lt;/p&gt;
-        ///&lt;p&gt;2nd - 11st: Genyen 4 fwa (4x) kob ou parye a.&lt;/p&gt;
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;Peman: &lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;1ye pri: Genyen 40 fwa (40x) parye ou&lt;/p&gt;
+        ///&lt;p&gt;2n pri - 11yem pri: Genyen 4 fwa (4x) parye ou&lt;/p&gt;
         ///&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;Rezilta chak 30 minit epi tann nan 10 minit .&lt;/p&gt;
-        ///&lt;p&gt;Egzamp : &lt;/p&gt;
-        ///&lt;p&gt;- Lè tiraj la komanse : 0:00.&lt;/p&gt;
-        ///&lt;p&gt;- Lè tiraj la fèmen : 0:30 .&lt;/p&gt;
-        ///&lt;p&gt;- - Tann tiraj sistèm nan lap disponib nan 10 minit.Kliyan an ap resevw rezilta apati 0:30:01 - 0:40:00&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-        ///&lt;p&gt;-&amp;nbsp;Tiraj sistèm lotri Natcom nan , enkli  [rest of string was truncated]&quot;;.
+        ///&lt;p&gt;- Rezilta chak 30 minit epi tann rezilta a nan 10 minit&lt;/p&gt;
+        ///&lt;p&gt;Egzanp:&lt;/p&gt;
+        ///&lt;p&gt;- Le tiraj la komanse: 0:00&lt;/p&gt;
+        ///&lt;p&gt;- Le tiraj la fini: 0:30&lt;/p&gt;
+        ///&lt;p&gt;- Tann sistem nan tire loto a epi voye rezilta a nan 10 minit. Kliyan an ap resevwa rezilta a soti 0:30:01 – 0:40:00&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+        ///&lt;p&gt;- Tiraj la fet pa sis [rest of string was truncated]&quot;;.
         /// </summary>
         public static string h7 {
             get {
@@ -294,14 +298,15 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-        ///&lt;p&gt;- Jwe avek lajan ki sou kont Natcash ou : *202# chwazi option 6&lt;/p&gt;
-        ///&lt;p&gt;- Quick Pick:&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri NewYork::&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 2-5 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri Florida:&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt; [rest of string was truncated]&quot;;.
+        ///   Looks up a localized string similar to &lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak entenet/aplikasyon loto Natcom&lt;/p&gt;
+        ///&lt;p&gt;- Jwe ak kont Natcash ou: *202# ak opsyon 6&lt;/p&gt;
+        ///&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri New York:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XX*Pari# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 2-5 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XX*Paryaj1*XX*Paryaj2*XX*Paryaj3# Voye&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri Florida:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*2&lt;/span&gt;*XX*Pari# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 2-5 tike:  [rest of string was truncated]&quot;;.
         /// </summary>
         public static string p1 {
             get {
@@ -310,15 +315,15 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-        ///&lt;p&gt;- Jwe avek lajan ki sou kont Natcash ou : *202# chwazi option 6&lt;/p&gt;
-        ///&lt;p&gt;- Quick Pick:&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri NewYork::&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike:&amp;nbsp;&lt;span style=color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XXXX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 2-5 tike:&amp;nbsp;&lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XXXX* paryaj 1*XXXX* paryaj 2*XXXX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-        ///&lt;p&gt;&amp;nbsp;&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri Florida:&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike [rest of string was truncated]&quot;;.
+        ///   Looks up a localized string similar to &lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak entenet/aplikasyon loto Natcom&lt;/p&gt;
+        ///&lt;p&gt;- Jwe ak kont Natcash ou: *202# ak opsyon 6&lt;/p&gt;
+        ///&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri New York:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike:&lt;span style=color: #ff0000;&quot;&gt; *5555*1&lt;/span&gt;*XXXX*Paryaj# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 2-5 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XXXX*Paryaj1*XXXX*Paryaj2*XXXX*Paryaj3# Voye&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri Florida:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*2&lt;/span&gt;*XXXX*Pari# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Acht [rest of string was truncated]&quot;;.
         /// </summary>
         public static string p2 {
             get {
@@ -327,14 +332,15 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-        ///&lt;p&gt;- Jwe avek lajan ki sou kont Natcash ou : *202# chwazi option 6&lt;/p&gt;
-        ///&lt;p&gt;- Quick Pick:&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri NewYork::&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike:&amp;nbsp;&lt;span style=color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XXX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 2-5 tike:&amp;nbsp;&lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XXX* paryaj 1*XXX* paryaj 2*XXX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri Florida:&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=&quot;col [rest of string was truncated]&quot;;.
+        ///   Looks up a localized string similar to &lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak entenet/aplikasyon loto Natcom&lt;/p&gt;
+        ///&lt;p&gt;- Jwe ak kont Natcash ou: *202# ak opsyon 6&lt;/p&gt;
+        ///&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri New York:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike:&lt;span style=color: #ff0000;&quot;&gt; *5555*1&lt;/span&gt;*XXX*Pari# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 2-5 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*1&lt;/span&gt;*XXX*Paryaj1*XXX*Paryaj2*XXX*Paryaj3# Voye&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri Florida:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*2&lt;/span&gt;*XXX*Paryaj# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 2-5 [rest of string was truncated]&quot;;.
         /// </summary>
         public static string p3 {
             get {
@@ -343,13 +349,12 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-        ///&lt;p&gt;- Quick Pick:&lt;/p&gt;
-        ///&lt;p&gt;Rezilta Lotri Boulchans::&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 1 tike:&amp;nbsp;&lt;span style=color: #ff0000;&quot;&gt;*5555*3&lt;/span&gt;*XX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-        ///&lt;p&gt;+ Achte 2-5 tike:&amp;nbsp;&lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*3&lt;/span&gt;*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-        ///&lt;p&gt;&lt;strong&gt;Remak:&lt;/strong&gt; X soti 0-9 ak&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;nbsp;2 chif&lt;/span&gt;&lt;/p&gt;
-        ///&lt;p&gt;&amp;nbsp;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak loto entenet/aplikasyon Natcom&lt;/p&gt;
+        ///&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+        ///&lt;p&gt;Rezilta lotri Boulchans:&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 1 tike:&lt;span style=color: #ff0000;&quot;&gt; *5555*3&lt;/span&gt;*XX*Pari# Voye&lt;/p&gt;
+        ///&lt;p&gt;+ Achte 2-5 tike: &lt;span style=&quot;color: #ff0000;&quot;&gt;*5555*3&lt;/span&gt;*XX*Paryaj1*XX*Paryaj2*XX*Paryaj3# Voye&lt;/p&gt;
+        ///&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Mete yon X soti nan 0-9 epi &lt;span style=&quot;color: #ff0000;&quot;&gt;2 chif&lt;/span&gt;&lt;/p.
         /// </summary>
         public static string p4 {
             get {
@@ -358,7 +363,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;1. Kijan pou w tike, Quick pick e tout sot de tike (2-5 tike an menm tan)?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;1. Kijan pou achte tike, chwazi tike rapid ak tike miltip (2-5 tike an menm tan)?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q1 {
             get {
@@ -367,7 +372,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;2. Kijan ouka konen siw genyen ak siw pedi?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;2. Kijan m ka konnen si tike mwen an genyen oswa pedi?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q2 {
             get {
@@ -376,7 +381,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;3. Kijan wap resevwa kob ou genyen an ?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;3. Kijan m ka resevwa lajan kem genyen an?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q3 {
             get {
@@ -385,7 +390,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;4. Kijan ou ka verifye lajan ou sot genyen an ?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;4. Kijan m ka verifye lajan mwen genyen an?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q4 {
             get {
@@ -394,7 +399,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;5. Kijan ou ka retire lajan ou fin genyen an ?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;5. Kijan mwen ka retire lajan mwen te genyen an?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q5 {
             get {
@@ -403,7 +408,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;6. Kijan ou ka chanje lang la?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;6. Kijan pou chanje lang nan?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q6 {
             get {
@@ -412,7 +417,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;7. Kijan ouka jwe Natcom Lotto sou kont Natcash ou?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;7. Kijan pou jwe loto Natcom sou kont Natcash?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q7 {
             get {
@@ -421,7 +426,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;8. Ou bezwen yon ed anliy?&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;8. Ou bezwen sipo an direk?&lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q8 {
             get {
@@ -430,7 +435,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;9. Definisyon &amp; Condisyon Natcom Lotto&lt;/strong&gt;&lt;/p&gt;.
+        ///   Looks up a localized string similar to &lt;p&gt;&lt;strong&gt;9. Definisyon ak Kondisyon konsenan Natcom Loto &lt;/strong&gt;&lt;/p&gt;.
         /// </summary>
         public static string q9 {
             get {

+ 151 - 154
website/Languages/Question.resx

@@ -118,256 +118,253 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <data name="a1" xml:space="preserve">
-    <value>&lt;p&gt;1.1 Souk ki kont pouw gen lajan pouw kaNatcom Lotto?&lt;/p&gt;
+    <value>&lt;p&gt;1.1 A ki kont mwen ka jwe nan Natcom Lotto?&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Ou ka jwe avek kob ki sou kont, fe *5555# oswa website/application htttps://lotto.natcom.com.ht&lt;/li&gt;
-&lt;li&gt;Ou ka jwe avek kob ki sou kont &amp;ndash; Natcash, fe *202#&lt;/li&gt;
+&lt;li&gt;Jwe ak yon prensipal, fe *5555# oswa sou sitweb/aplikasyon htttps://lotto.natcom.com.ht&lt;/li&gt;
+&lt;li&gt;Jwe ak kont prensipal &amp;ndash; Natcash, fe *202#&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;1.2. Ki pi piti kob ak ki pi plis kobo u ka achte yon Tike?&lt;/p&gt;
+&lt;p&gt;1.2 Ki kantite minimom ak maksimom ou ka achte yon tike?&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Minimom: 1 HTG&lt;/li&gt;
 &lt;li&gt;Maksimom: 5000 HTG&lt;/li&gt;
+&lt;li&gt;Minimom: 1 HTG&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;1.3&amp;nbsp;Rezilta Lotri NewYork&lt;/p&gt;
+&lt;p&gt;1.3 Rezilta Lotri Nouyok:&lt;/p&gt;
 &lt;p&gt;&lt;span style=color: #ff0000;"&gt;B&amp;ograve;L&amp;egrave;t&lt;/span&gt;&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Achte 1 tike: *5555*1*XX*parye# &amp;nbsp;Peze Send&lt;/li&gt;
-&lt;li&gt;Achte 2-5 tike: *5555*1*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze Send&amp;nbsp;&lt;em&gt;(X soti0-9 ak 2 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*1*XX*Paryaj# Voye&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*1*XX*Paryaj1*XX*Paryaj2*XX*Paryaj3# Voye&lt;em&gt;(X soti nan 0-9 ak 2 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;p&gt;&lt;span style="color: #ff0000;"&gt;Maryaj:&lt;/span&gt;&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Buy 1 ticket: *5555*1*XXXX* parye #&lt;/li&gt;
-&lt;li&gt;Buy 2-5 tickets: *5555*1*XXXX* paryaj 1*XXXX* paryaj 2*XXXX* paryaj 3# Peze Send&amp;nbsp;&lt;em&gt;(X soti &amp;nbsp;0-9 ak 4 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*1*XXXX*Pari#&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*1*XXXX*Paryaj1*XXXX*Paryaj2*XXXX*Paryaj3# Voye&lt;em&gt;(X soti nan 0-9 ak 4 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;p&gt;&lt;span style="color: #ff0000;"&gt;Lotto3:&lt;/span&gt;&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Achte 1 tike: *5555*1*XXX* paryaj #&lt;/li&gt;
-&lt;li&gt;Achte 2-5 tike: *5555*1*XXX* paryaj 1*XXX* paryaj 2*XXX* paryaj 3# Peze Send&lt;em&gt;(X soti 0-9 ak 3 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*1*XXX*Pari#&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*1*XXX*Paryaj1*XXX*Paryaj2*XXX*Paryaj3# Voye&lt;em&gt;(X soti nan 0-9 ak 3 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;p&gt;1.4 Rezilta Lotri Florida&lt;/p&gt;
 &lt;p&gt;&lt;span style="color: #0000ff;"&gt;B&amp;ograve;L&amp;egrave;t&lt;/span&gt;&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Achte 1 tike: *5555*2*XX* paryaj # Peze Send&lt;/li&gt;
-&lt;li&gt;Achte 2-5 tike: *5555*2*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3&lt;strong&gt;#&lt;/strong&gt; Peze Send&amp;nbsp;&lt;em&gt;(X Soti 0-9 ak 3 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*2*XX*Bet#&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*2*XX*Paryaj1*XX*Bet2*XX*Paryaj3&lt;strong&gt;#&lt;/strong&gt; Voye&lt;em&gt;(X soti nan 0-9 ak 2 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;&lt;span style="color: #0000ff;"&gt;Maryaj&lt;/span&gt;&lt;/p&gt;
+&lt;p&gt;Maryaj:&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Achte 1 ticket: *5555*2*XXXX* paryaj #&lt;/li&gt;
-&lt;li&gt;Achte 2-5 tike: *5555*2*XXXX* paryaj 1*XXXX* paryaj 2*XXXX* paryaj 3# Peze Send&amp;nbsp;&lt;em&gt;(X soti&amp;nbsp; 0-9 ak 4 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*2*XXXX*Bet#&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*2*XXXX*Paryaj1*XXXX*Paryaj2*XXXX*Paryaj3# Voye&lt;em&gt;(X soti nan 0-9 ak 4 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;&lt;span style="color: #0000ff;"&gt;Lotto3&lt;/span&gt;&lt;/p&gt;
+&lt;p&gt;&lt;span style="color: #0000ff;"&gt;Lotto3:&lt;/span&gt;&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Achte 1 tike: *5555*2*XXX* paryaj # Peze Send&lt;/li&gt;
-&lt;li&gt;Achte 2-5 tike: *5555*2*XXX* paryaj 1*XXX* paryaj 2*XXX* paryaj 3# Peze Send&amp;nbsp;&lt;em&gt;(X soti 0-9 ak 3 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*2*XXX*Paryaj# Voye&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*2*XXX*Paryaj1*XXX*Paryaj2*XXX*Paryaji3# Voye&lt;em&gt;(X soti nan 0-9 ak 3 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;1.5 Rezilta Lotri Boulchans&lt;/p&gt;
+&lt;p&gt;Rezilta Lotri 1.5 Boulchans&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Achte 1 tike: *5555*3*XX* paryaj # Peze Send&lt;/li&gt;
-&lt;li&gt;Achte 2-5 tike: *5555*3*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze Send&amp;nbsp;&lt;em&gt;(X soti 0-9 ak 2 chif)&lt;/em&gt;&lt;/li&gt;
+&lt;li&gt;Achte 1 tike: *5555*3*XX*Pari#&lt;/li&gt;
+&lt;li&gt;Achte 2-5 tike: *5555*3*XX*Paryaj1*XX*Paryaj2*XX*Paryaj3&lt;strong&gt;#&lt;/strong&gt; Voye&lt;em&gt;(X soti nan 0-9 ak 2 chif)&lt;/em&gt;&lt;/li&gt;
 &lt;/ul&gt;</value>
   </data>
   <data name="a2" xml:space="preserve">
-    <value>Apre chak tiraj, system nan voye yon SMS otomatik bay chak ganyan. Moun ki pedi pap jwenn SMS sa.</value>
+    <value>Apre chak tiraj, sistem nan voye yon SMS otomatikman bay chak ganyan. Jwe ki pa genyen tike PA P RESEVWA SMS.</value>
   </data>
   <data name="a3" xml:space="preserve">
-    <value>Wap resevwa lajan ou genyen an direkteman sou kont Natcom Lotto ou kek minit apre tiraj la (normalman lika anviwon 5 minit konsa), ganyan an ka verifye kont li lel, fe *5555*5#</value>
+    <value>Lajan ganyan an ap direkteman sou kont Natcom loto nan kek minit apre le tiraj la (nomalman nan 5 minit). Ganyan yo ka verifye kantite lajan an le yo fe *5555*5#.</value>
   </data>
   <data name="a4" xml:space="preserve">
-    <value>Wi, ou ka. fel *5555*5# peze send oswa telechaje aplikasyon NatcomID a =&gt; Natcom Lotto oswa vizite sitweb sa: htttps;//lotto.natcom.com.ht</value>
+    <value>Wi, ou kapab. Fe *5555*5#  oswa telechaje aplikasyon NatcomID la =&gt; Natcom Lotto oswa vizite sitweb la: htttps://lotto.natcom.com.ht</value>
   </data>
   <data name="a5" xml:space="preserve">
-    <value>&lt;p&gt;Wi, ou ka transfere lajan ou geneyen an sou kont de baz ou oswasou kont Natcash ou – Kont Natcash epi  retire lajanw kach kay nenpot Agen Natcash&lt;/p&gt;
+    <value>&lt;p&gt;Wi, ou ka transfere kantite lajan ou te genyen an sou kont prensipal ou ak oswa - kont Natcash epi retire lajan kach nan kay ajan Natcash&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Pouf e transfe apati  ussd, fe*5555*5# peze Send&lt;/li&gt;
-&lt;li&gt;Oswa apati aplikasyon Natcom Lotto: Klike“Retire Lajan” epi  etap yo&lt;/li&gt;
-&lt;li&gt;Remak: Pi plis kob ou ka retire se 40,000 HTG/jou&lt;/li&gt;
+&lt;li&gt;Pou transfere apati ussd, fe *5555*5# Voye&lt;/li&gt;
+&lt;li&gt;Oubyen sou aplikasyon Natcom Lotto: Klike sou "Retire Lajan" epi swiv etap yo&lt;/li&gt;
+&lt;li&gt;Not: Ou ka retire yon maksimom 40,000 HTG pa jou&lt;/li&gt;
 &lt;/ul&gt;</value>
   </data>
   <data name="a6" xml:space="preserve">
-    <value>Sou  sitweb: Chwazi lang la sou paj dakey la
-Apati USSD: Fe *5555# epi chwazi Opsyon 8</value>
+    <value>Sou sitweb la: Chwazi lang sou paj koneksyon an.
+Sou USSD: Fe *5555# epi chwazi Opsyon 8 la.</value>
   </data>
   <data name="a7" xml:space="preserve">
-    <value>&lt;p&gt;Wi, Ouka achte Bolet, Maryaj, Lotto3 ak pou NewYork epi Lotri Florida sou kont Nacash:&lt;/p&gt;
+    <value>&lt;p&gt;Wi, ou ka achte Bolet, Maryaj, Lotto3 pou tou de Lotri New York ak Florida sou kont Nacash:&lt;/p&gt;
 &lt;ul&gt;
-&lt;li&gt;Apati USSD: fe *202# epi Opsyon 6&lt;/li&gt;
-&lt;li&gt;Sou aplikasyon Natcash la&lt;/li&gt;
+&lt;li&gt;Via USSD: Fe *202# epi Opsyon 6&lt;/li&gt;
+&lt;li&gt;Apati aplikasyon Natcash&lt;/li&gt;
 &lt;/ul&gt;
-&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Not:&lt;/strong&gt; Si ou pa ko gen yon kont Natcash, ouka enskri nan Natcash lew fe *202# epi ou swiv enstriksyon yo oswa vizite nenpot showroom &amp;nbsp;Natcom oswa Ajan Natcash&lt;/p&gt;</value>
+&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Si ou pa gen yon kont Natcash, ou ka kreye yon kont le w fe *202# epi swiv enstriksyon yo oswa vizite nenpot Showroom ak ajan Natcom&lt;/p&gt;</value>
   </data>
   <data name="a8" xml:space="preserve">
-    <value>&lt;p&gt;Sipo Natcom Lotri:&lt;/p&gt;
+    <value>Natcom:&lt;/p&gt;
+&lt;ul&gt;
 &lt;ul&gt;
-&lt;li&gt;Sevis Klyantel 111 (1htg/min)&lt;/li&gt;
+&lt;li&gt;Rele yon ajan sant apel 111 (1htg/min)&lt;/li&gt;
 &lt;li&gt;Tchat: WhatsApp +509 33 25 1111 ; Facebook: NATCOM S.A&lt;/li&gt;
-&lt;li&gt;Oswa ekri nan email sa: vas.department@natcom.com.ht&lt;/a&gt;&lt;/li&gt;
+&lt;li&gt;Oswa voye yon imel nan: vas.department@natcom.com.ht&lt;/li&gt;
+&lt;/ul&gt;
 &lt;/ul&gt;</value>
   </data>
   <data name="a9" xml:space="preserve">
     <value>&lt;p&gt;9.1 Ki moun ki ka jwe Natcom Lotto?&lt;/p&gt;
-&lt;p&gt;- Si yon moun poko gen 18 tan lipa gen dwa jwe Natcom Lotto&lt;/p&gt;
-&lt;p&gt;9.2 Obligasyon pou tout ganyan?&lt;/p&gt;
-&lt;p&gt;- Lew jwe Natcom Lotto, sa vledi ou dako ak kondisyon &amp;nbsp;Natcom yo, epi ou bay Natcom tout dwa poul itilize enffomasyon yo janl vle le lap fe pwomosyon oswa piblisite san kel pa gen pou li peye pou enfomasyon say o.&lt;/p&gt;
-&lt;p&gt;9.3 Ki dat limit ou geyen pou fe yon reklamayon?&lt;/p&gt;
-&lt;p&gt;- Ou gen yon dele &amp;nbsp;90 jou pou fe tout reklamasyon. Apre period sa, Natcom Lotto pa reponsab pou peyew kob ou te genyen men lap ajoute li sou gran pri a. &amp;nbsp;Nan ka sa moun ki te jwe ap dako kel pa gen dwa sou tike sa kel pat janm al touche kob li te genyen pou li a.&lt;/p&gt;</value>
+&lt;p&gt;- Nenpot moun ki poko gen 18 an pa gen dwa jwe Natcom Lotto&lt;/p&gt;
+&lt;p&gt;9.2 Obligasyon ganyan an?&lt;/p&gt;
+&lt;p&gt;- Le jwe a jwe Natcom Lotto, li aksepte ke Natcom, san avetisman alavans, ka, gen dwa, itilize non li ak imaj li pou rezon pwomosyonel pandan nenpot kanpay piblisite. Gayan an, san okenn lot konpansasyon pou peye li pou rezon sa a.&lt;/p&gt;
+&lt;p&gt;9.3 Dat limit pou reklame tike?&lt;/p&gt;
+&lt;p&gt;- Tout pri yo dwe reklame nan 90 jou apre dat tiraj la. Apre peryod sa a, Natcom Lotto refize tout responsablite pou peman montan sa a, ki pral ajoute nan Gran Pri yo. Nan yon ka konsa, jwe a dako pou yo prive l de tout dwa ki gen rapo ak tike ganyan sa a.&lt;/p&gt;</value>
   </data>
   <data name="h1" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;1&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 50 fwa (50x) kob ou parye a&lt;/p&gt;
-&lt;p&gt;2&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 20 fwa (20x) kob ou parye a&lt;/p&gt;
-&lt;p&gt;3&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 10 fwa (10x) kob ou parye a&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Le tiraj la:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;- Rezilta NewYork : 14:30 (Midi), 22:30 (Aswe), nimewo ganyan : NUMBERS ak Win4&lt;/p&gt;
-&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Ekzamp:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;- Rezilta NewYork pou dat: 14/03/2022 (le tiraj la: 14:30):&lt;/p&gt;
-&lt;ul&gt;
-&lt;li&gt;Tiraj: NUMBERS: 139; Win4: 3505&lt;/li&gt;
-&lt;li&gt;B&amp;ograve;l&amp;egrave;t NewYork nimewo ganyan: 1e Lo: 39; 2e Lo: 35; 3e Lo: 05&lt;/li&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;1ye Lot: genyen 50 fwa (50x) parye ou a&lt;/p&gt;
+&lt;p&gt;2yem Lot: genyen 20 fwa (20x) parye ou a&lt;/p&gt;
+&lt;p&gt;3yem Lot: Genyen 10 fwa (10x) parye ou a&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Rezilta NewYork: 14:30 (Midi), 22:30 (Aswe), nimewo ganyan yo: NUMBERS ak Win4&lt;/p&gt;
+&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Egzanp:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Rezilta NewYork nan dat 14/03/2022 (Le tiraj la: 14:30):&lt;/p&gt;
+&lt;ul style="list-style-type: square;"&gt;
+&lt;li&gt;Tiraj: NIMEWO: 139; Win4: 3505&lt;/li&gt;
+&lt;li&gt;Nimewo gayan B&amp;ograve;l&amp;egrave;t New York: 1ye Lo: 39; 2yem Lo: 35; 3yem Lo: 05&lt;/li&gt;
 &lt;/ul&gt;</value>
   </data>
   <data name="h2" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;Genyen 1000 fwa (1000x) kob ou parye a.&lt;/p&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;Genyen 1000 fwa (1000x) parye ou&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;- Rezilta NewYork: 14:30 (Midi), 22:30 (Aswe)&lt;/p&gt;
-NUMBERS ak Win4&lt;/p&gt;
-&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Konbinezon 2 nimewo ganyan nan Bolet NewYork la&lt;/p&gt;</value>
+&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Konbine 2 nimewo gayan pe Bol&amp;egrave;t NewYork&lt;/p&gt;
+</value>
   </data>
   <data name="h3" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;Genyen 500 fwa (500x) kob ou parye a.&lt;/p&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;Genyen 500 fwa (500x) parye ou&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
 &lt;p&gt;- Rezilta NewYork: 14:30 (Midi), 22:30 (Aswe)&lt;/p&gt;
-NUMBERS ak Win4&lt;/p&gt;
-&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Tiraj NewYork: NUMBERS&lt;/p&gt;</value>
+&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Tiraj NewYork: NIMEWO&lt;/p&gt;</value>
   </data>
   <data name="h4" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;1&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 50 fwa (50x) kob ou parye a&lt;/p&gt;
-&lt;p&gt;2&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 20 fwa (20x) kob ou parye a&lt;/p&gt;
-&lt;p&gt;3&lt;sup&gt;e&lt;/sup&gt; Lo: ou genyen 10 fwa (10x) kob ou parye a&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Le tiraj la:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Rezilta Florida: 13:30 (Midi), 21:45 (Aswe), nimewo ganyan : Pick3 ak Pick4&lt;/p&gt;
-NUMBERS ak Win4&lt;/p&gt;
-&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Ekzamp:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Rezilta Florida pou dat: 14/03/2022 (le tiraj la: 13:30):&lt;/p&gt;
-&lt;ul style="list-style-type: square;"&gt;
-&lt;li&gt;Tiraj: PICK3: &lt;strong&gt;462&lt;/strong&gt;; PICK4: &lt;strong&gt;0453&lt;/strong&gt;&lt;/li&gt;
-&lt;li&gt;B&amp;ograve;l&amp;egrave;t Florida nimewo ganyan: 1&lt;sup&gt;e&lt;/sup&gt; Lo: &lt;strong&gt;62&lt;/strong&gt;; 2&lt;sup&gt;e&lt;/sup&gt; Lo: &lt;strong&gt;04&lt;/strong&gt;; 3&lt;sup&gt;e&lt;/sup&gt; Lo: &lt;strong&gt;53&lt;/strong&gt;&lt;/li&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;1ye Lot: genyen 50 fwa (50x) parye ou&lt;/p&gt;
+&lt;p&gt;2yem Lot: genyen 20 fwa (20x) parye ou&lt;/p&gt;
+&lt;p&gt;3yem Lot: Genyen 10 fwa (10x) parye ou&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;Rezilta Florid: 13:30 (Midi), 21:45 (Aswe), nimewo gayan yo: Pick3 ak Pick4&lt;/li&gt;
+&lt;li&gt;Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;&lt;strong&gt;Egzanp:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Rezilta Florid nan dat 14/03/2022 (Le tiraj la: 13:30):&lt;/p&gt;
+&lt;ul style=list-style-type: square;"&gt;
+&lt;li&gt;Tiraj: PICK3: 462; PICK4: 0453&lt;/li&gt;
+&lt;li&gt;Nimewo gayan Bol&amp;egrave;t Florida yo: 1ye Lo: 62; 2yem Lo: 04; 3yem Lo: 53&lt;/li&gt;
 &lt;/ul&gt;</value>
   </data>
   <data name="h5" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;Genyen 1000 fwa (1000x) kob ou parye a.&lt;/p&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;Genyen 1000 fwa (1000x) parye ou&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;- Rezilta Florida: 13:30 (Midi), 21:45 (Aswe)&lt;/p&gt;
-NUMBERS ak Win4&lt;/p&gt;
-&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Konbinezon 2 nimewo ganyan nan Bolet Florida la&lt;/p&gt;</value>
+&lt;p&gt;- Rezilta Florid: 13:30 (Midi), 21:45 (Aswe)
+&lt;/p&gt;
+&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj la&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Konbine 2 nimewo gayan pe Bel&amp;egrave;t Florida&lt;/p&gt;</value>
   </data>
   <data name="h6" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;Genyen 500 fwa (500x) kob ou parye a.&lt;/p&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;Genyen 500 fwa (500x) parye ou&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;- Rezilta Florida: 13:30 (Midi), 21:45 (Aswe)&lt;/p&gt;
-NUMBERS ak Win4&lt;/p&gt;
-&lt;p&gt;- Tout Tike ou jwe 30 minit avan tiraj la ap konte pou pwochen tiraj&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Tiraj Florida: PICK3&lt;/p&gt;</value>
+&lt;p&gt;- Rezilta Florid: 13:30 (Midi), 21:45 (Aswe)&lt;/p&gt;
+&lt;p&gt;- Not: Tike yo ap deplase nan pwochen sek la 30’ anvan chak le tiraj&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Tiraj Florid: PICK3&lt;/p&gt;</value>
   </data>
   <data name="h7" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;Peyman: &lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;1st: Genyen 40 fwa (40x) kob ou parye a.&lt;/p&gt;
-&lt;p&gt;2nd - 11st: Genyen 4 fwa (4x) kob ou parye a.&lt;/p&gt;
+    <value>&lt;p&gt;&lt;strong&gt;Peman: &lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;1ye pri: Genyen 40 fwa (40x) parye ou&lt;/p&gt;
+&lt;p&gt;2n pri - 11yem pri: Genyen 4 fwa (4x) parye ou&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Le tiraj la:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;Rezilta chak 30 minit epi tann nan 10 minit .&lt;/p&gt;
-&lt;p&gt;Egzamp : &lt;/p&gt;
-&lt;p&gt;- Lè tiraj la komanse : 0:00.&lt;/p&gt;
-&lt;p&gt;- Lè tiraj la fèmen : 0:30 .&lt;/p&gt;
-&lt;p&gt;- - Tann tiraj sistèm nan lap disponib nan 10 minit.Kliyan an ap resevw rezilta apati 0:30:01 - 0:40:00&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Nimewo ganyan:&lt;/strong&gt;&lt;/p&gt;
-&lt;p&gt;-&amp;nbsp;Tiraj sistèm lotri Natcom nan , enkli 2 nimewo&lt;/p&gt;</value>
+&lt;p&gt;- Rezilta chak 30 minit epi tann rezilta a nan 10 minit&lt;/p&gt;
+&lt;p&gt;Egzanp:&lt;/p&gt;
+&lt;p&gt;- Le tiraj la komanse: 0:00&lt;/p&gt;
+&lt;p&gt;- Le tiraj la fini: 0:30&lt;/p&gt;
+&lt;p&gt;- Tann sistem nan tire loto a epi voye rezilta a nan 10 minit. Kliyan an ap resevwa rezilta a soti 0:30:01 – 0:40:00&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Nimewo gayan yo:&lt;/strong&gt;&lt;/p&gt;
+&lt;p&gt;- Tiraj la fet pa sistem loto Natcom, gen ladan 2 nimewo.&lt;/p&gt;</value>
   </data>
   <data name="p1" xml:space="preserve">
-    <value>&lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-&lt;p&gt;- Jwe avek lajan ki sou kont Natcash ou : *202# chwazi option 6&lt;/p&gt;
-&lt;p&gt;- Quick Pick:&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri NewYork::&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike: &lt;span style=color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri Florida:&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Remak:&lt;/strong&gt; X soti 0-9 ak &lt;span style="color: #ff0000;"&gt;2 chif&lt;/span&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak entenet/aplikasyon loto Natcom&lt;/p&gt;
+&lt;p&gt;- Jwe ak kont Natcash ou: *202# ak opsyon 6&lt;/p&gt;
+&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+&lt;p&gt;Rezilta lotri New York:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike: &lt;span style=color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XX*Pari# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XX*Paryaj1*XX*Paryaj2*XX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;Rezilta lotri Florida:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XX*Pari# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: *5555*2*XX*Paryaj1*XX*PParyaj2*XX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Yon X soti nan 0-9 epi &lt;span style="color: #ff0000;"&gt;2 chif&lt;/span&gt;&lt;/p&gt;</value>
   </data>
   <data name="p2" xml:space="preserve">
-    <value>&lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-&lt;p&gt;- Jwe avek lajan ki sou kont Natcash ou : *202# chwazi option 6&lt;/p&gt;
-&lt;p&gt;- Quick Pick:&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri NewYork::&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike:&amp;nbsp;&lt;span style=color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XXXX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike:&amp;nbsp;&lt;span style="color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XXXX* paryaj 1*XXXX* paryaj 2*XXXX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;&amp;nbsp;&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri Florida:&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXXX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXXX* paryaj 1*XXXX* paryaj 2*XXXX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Remak:&lt;/strong&gt; X soti 0-9 ak&lt;span style="color: #ff0000;"&gt; 4 chif&lt;/span&gt;&lt;/p&gt;
-&lt;p&gt;&amp;nbsp;&lt;/p&gt;</value>
+    <value>&lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak entenet/aplikasyon loto Natcom&lt;/p&gt;
+&lt;p&gt;- Jwe ak kont Natcash ou: *202# ak opsyon 6&lt;/p&gt;
+&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+&lt;p&gt;Rezilta lotri New York:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike:&lt;span style=color: #ff0000;"&gt; *5555*1&lt;/span&gt;*XXXX*Paryaj# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XXXX*Paryaj1*XXXX*Paryaj2*XXXX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;Rezilta lotri Florida:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXXX*Pari# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXXX*Pari1*XXXX*Pariyaj*XXXX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; X soti nan 0-9 ak &lt;span style="color: #ff0000;"&gt;4 chif&lt;/span&gt;&lt;/p&gt;</value>
   </data>
   <data name="p3" xml:space="preserve">
-    <value>&lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-&lt;p&gt;- Jwe avek lajan ki sou kont Natcash ou : *202# chwazi option 6&lt;/p&gt;
-&lt;p&gt;- Quick Pick:&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri NewYork::&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike:&amp;nbsp;&lt;span style=color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XXX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike:&amp;nbsp;&lt;span style="color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XXX* paryaj 1*XXX* paryaj 2*XXX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri Florida:&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXX* paryaj 1*XXX* paryaj 2*XXX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Remak:&lt;/strong&gt; X soti 0-9 ak&lt;span style="color: #ff0000;"&gt;&amp;nbsp;3 chif&lt;/span&gt;&lt;/p&gt;
-&lt;p&gt;&amp;nbsp;&lt;/p&gt;"</value>
+    <value>&lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak entenet/aplikasyon loto Natcom&lt;/p&gt;
+&lt;p&gt;- Jwe ak kont Natcash ou: *202# ak opsyon 6&lt;/p&gt;
+&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+&lt;p&gt;Rezilta lotri New York:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike:&lt;span style=color: #ff0000;"&gt; *5555*1&lt;/span&gt;*XXX*Pari# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*1&lt;/span&gt;*XXX*Paryaj1*XXX*Paryaj2*XXX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;Rezilta lotri Florida:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXX*Paryaj# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*2&lt;/span&gt;*XXX*Paryaj1*XXX*Paryaj2*XXX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Yon X soti nan 0-9 epi &lt;span style="color: #ff0000;"&gt;3 chif&lt;/span&gt;&lt;/p&gt;"</value>
   </data>
   <data name="p4" xml:space="preserve">
-    <value>&lt;p&gt;- Jwe avek lajan ki sou kont prensipal ou: *5555# oswa sou: sitweb/app Natcom lotto&lt;/p&gt;
-&lt;p&gt;- Quick Pick:&lt;/p&gt;
-&lt;p&gt;Rezilta Lotri Boulchans::&lt;/p&gt;
-&lt;p&gt;+ Achte 1 tike:&amp;nbsp;&lt;span style=color: #ff0000;"&gt;*5555*3&lt;/span&gt;*XX*parye#&amp;nbsp; Peze Send&lt;/p&gt;
-&lt;p&gt;+ Achte 2-5 tike:&amp;nbsp;&lt;span style="color: #ff0000;"&gt;*5555*3&lt;/span&gt;*XX* paryaj 1*XX* paryaj 2*XX* paryaj 3# Peze&amp;nbsp; Send&lt;/p&gt;
-&lt;p&gt;&lt;strong&gt;Remak:&lt;/strong&gt; X soti 0-9 ak&lt;span style="color: #ff0000;"&gt;&amp;nbsp;2 chif&lt;/span&gt;&lt;/p&gt;
-&lt;p&gt;&amp;nbsp;&lt;/p&gt;</value>
+    <value>&lt;p&gt;- Jwe ak balans prensipal ou: *5555# ak loto entenet/aplikasyon Natcom&lt;/p&gt;
+&lt;p&gt;- Chwa rapid:&lt;/p&gt;
+&lt;p&gt;Rezilta lotri Boulchans:&lt;/p&gt;
+&lt;p&gt;+ Achte 1 tike:&lt;span style=color: #ff0000;"&gt; *5555*3&lt;/span&gt;*XX*Pari# Voye&lt;/p&gt;
+&lt;p&gt;+ Achte 2-5 tike: &lt;span style="color: #ff0000;"&gt;*5555*3&lt;/span&gt;*XX*Paryaj1*XX*Paryaj2*XX*Paryaj3# Voye&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;Not:&lt;/strong&gt; Mete yon X soti nan 0-9 epi &lt;span style="color: #ff0000;"&gt;2 chif&lt;/span&gt;&lt;/p</value>
   </data>
   <data name="q1" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;1. Kijan pou w tike, Quick pick e tout sot de tike (2-5 tike an menm tan)?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;1. Kijan pou achte tike, chwazi tike rapid ak tike miltip (2-5 tike an menm tan)?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q2" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;2. Kijan ouka konen siw genyen ak siw pedi?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;2. Kijan m ka konnen si tike mwen an genyen oswa pedi?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q3" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;3. Kijan wap resevwa kob ou genyen an ?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;3. Kijan m ka resevwa lajan kem genyen an?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q4" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;4. Kijan ou ka verifye lajan ou sot genyen an ?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;4. Kijan m ka verifye lajan mwen genyen an?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q5" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;5. Kijan ou ka retire lajan ou fin genyen an ?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;5. Kijan mwen ka retire lajan mwen te genyen an?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q6" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;6. Kijan ou ka chanje lang la?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;6. Kijan pou chanje lang nan?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q7" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;7. Kijan ouka jwe Natcom Lotto sou kont Natcash ou?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;7. Kijan pou jwe loto Natcom sou kont Natcash?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q8" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;8. Ou bezwen yon ed anliy?&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;8. Ou bezwen sipo an direk?&lt;/strong&gt;&lt;/p&gt;</value>
   </data>
   <data name="q9" xml:space="preserve">
-    <value>&lt;p&gt;&lt;strong&gt;9. Definisyon &amp; Condisyon Natcom Lotto&lt;/strong&gt;&lt;/p&gt;</value>
+    <value>&lt;p&gt;&lt;strong&gt;9. Definisyon ak Kondisyon konsenan Natcom Loto &lt;/strong&gt;&lt;/p&gt;</value>
   </data>
 </root>

+ 70 - 0
website/wwwroot/Millions/css/buy-ticket.css

@@ -0,0 +1,70 @@
+.font-bricolage {
+    font-family: 'Bricolage Grotesque', sans-serif;
+}
+
+.ticket-card {
+    background: url('/LotteryV2/img/Rectangle 132.svg') no-repeat center center;
+    background-size: 100% 100%;
+    padding: 15px 12px 20px 12px;
+    position: relative;
+    margin-top: 5px;
+    margin-bottom: 5px;
+    border: none;
+    background-color: transparent !important;
+}
+
+.ball-circle {
+    width: 30px;
+    height: 30px;
+    background: #EAEAEA;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-weight: 900;
+    font-size: 12px;
+    color: #333;
+    box-shadow: inset 0px -2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.bg-green-main {
+    background-color: #1AB13C;
+}
+
+.text-brown-main {
+    color: #994900;
+}
+
+.ball-empty {
+    background: #F3F4F6 !important;
+    border: 1px solid #E5E7EB !important;
+    box-shadow: inset 0px 2px 4px rgba(0, 0, 0, 0.05) !important;
+}
+
+.ball-filled {
+    background: linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%) !important;
+    border: 1px solid rgba(255, 255, 255, 0.3) !important;
+    color: #ffffff !important;
+    box-shadow: 0 4px 10px rgba(186, 15, 33, 0.3) !important;
+    font-weight: 900 !important;
+    text-shadow: 0px 1px 2px rgba(0,0,0,0.1);
+    transform: scale(1.1);
+}
+
+.active-num {
+    background: linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%) !important;
+    border: none !important;
+    box-shadow: 0 4px 8px rgba(186, 15, 33, 0.4) !important;
+}
+
+.ticket-index {
+    background-color: #1AB13C !important;
+    border: 3px solid #ffffff !important;
+    color: #ffffff !important;
+    box-shadow: 0 4px 10px rgba(26, 177, 60, 0.3) !important;
+}
+
+/* Custom scrollbar to match mobile feel */
+::-webkit-scrollbar {
+    display: none;
+}

+ 45 - 0
website/wwwroot/Millions/css/faq.css

@@ -0,0 +1,45 @@
+/* FAQ Stylesheet Settings */
+body {
+    -webkit-tap-highlight-color: transparent;
+    -webkit-font-smoothing: antialiased;
+    overscroll-behavior-y: none;
+}
+
+/* Custom Scrollbar */
+.custom-scrollbar::-webkit-scrollbar {
+    width: 4px;
+}
+.custom-scrollbar::-webkit-scrollbar-track {
+    background: transparent;
+}
+.custom-scrollbar::-webkit-scrollbar-thumb {
+    background-color: #D9D9D9;
+    border-radius: 4px;
+}
+
+/* Fluid Animation for the Mascot image */
+@keyframes faqFloat {
+    0% {
+        transform: translateY(0px) rotate(0deg);
+    }
+    50% {
+        transform: translateY(-8px) rotate(-1.5deg);
+    }
+    100% {
+        transform: translateY(0px) rotate(0deg);
+    }
+}
+
+.faq-float-anim {
+    animation: faqFloat 6s ease-in-out infinite;
+    transform-origin: bottom center;
+}
+
+/* Glowing text shadow for Impact question mark */
+.faq-question-mark {
+    background: linear-gradient(155deg, rgba(229, 40, 62, 1) 38%, rgba(127, 22, 34, 1) 100%);
+    -webkit-background-clip: text;
+    background-clip: text;
+    text-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);
+    -webkit-text-stroke: 3px #fff;
+}

+ 205 - 0
website/wwwroot/Millions/css/history.css

@@ -0,0 +1,205 @@
+/* History specific styles */
+.history-game-tabs {
+    display: flex;
+    padding: 0 16px;
+    gap: 8px;
+    margin-top: 20px;
+    overflow-x: auto;
+    padding-bottom: 8px;
+}
+.history-game-tabs::-webkit-scrollbar { display: none; }
+.game-tab {
+    flex: none;
+    padding: 10px 18px;
+    background: white;
+    border-radius: 14px;
+    font-size: 13px;
+    font-weight: 800;
+    color: #4B5563;
+    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
+    border: 1.5px solid transparent;
+    transition: all 0.2s;
+    cursor: pointer;
+    white-space: nowrap;
+}
+.game-tab.active {
+    color: #0062FF;
+    border-color: #0062FF;
+    background: #FFF5F5;
+}
+
+.status-filters {
+    display: flex;
+    padding: 0 16px;
+    gap: 4px;
+    margin-top: 12px;
+    background: white;
+    margin-left: 16px;
+    margin-right: 16px;
+    border-radius: 12px;
+    box-shadow: 0 2px 4px rgba(0,0,0,0.03);
+}
+.status-filter {
+    flex: 1;
+    padding: 12px 4px;
+    text-align: center;
+    font-size: 12px;
+    font-weight: 700;
+    color: #9CA3AF;
+    position: relative;
+    cursor: pointer;
+    transition: all 0.2s;
+}
+.status-filter.active {
+    color: #0062FF;
+}
+.status-filter.active::after {
+    content: '';
+    position: absolute;
+    bottom: 6px;
+    left: 20%;
+    right: 20%;
+    height: 3px;
+    background: #0062FF;
+    border-radius: 2px;
+}
+
+/* Ticket Card */
+.ticket-card {
+    background: white;
+    border-radius: 12px;
+    margin: 16px 0;
+    padding: 0;
+    box-shadow: 0 8px 25px rgba(0,0,0,0.06);
+    position: relative;
+    border: 1px solid #F1F1F1;
+    overflow: hidden;
+}
+
+.ticket-card-top {
+    padding: 12px 16px 16px 16px;
+    background: white;
+    position: relative;
+}
+
+.ticket-perforation {
+    height: 4px;
+    background-image: radial-gradient(circle, #F3F4F6 6px, transparent 6px);
+    background-size: 24px 24px;
+    background-position: center;
+    background-repeat: repeat-x;
+    position: relative;
+    margin: 0 -10px;
+}
+
+.ticket-card-bottom {
+    padding: 12px 16px;
+    background: #FDFDFD;
+    border-top: 1px dashed #E5E7EB;
+}
+
+.ticket-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 12px;
+}
+.ticket-id { 
+    font-size: 13px; 
+    color: #9CA3AF; 
+    font-weight: 700;
+    font-family: 'Bricolage Grotesque', sans-serif;
+}
+.ticket-status {
+    padding: 6px 14px;
+    border-radius: 30px;
+    font-size: 11px;
+    font-weight: 900;
+    text-transform: uppercase;
+    letter-spacing: 0.5px;
+}
+.status-waiting { background: #FFF9C4; color: #B45309; }
+.status-win { background: #DCFCE7; color: #15803D; }
+.status-notwin { background: #FEE2E2; color: #B91C1C; }
+
+.ticket-numbers {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 10px;
+    padding: 0;
+    background: transparent;
+}
+.ticket-ball {
+    width: 32px;
+    height: 32px;
+    background: #F3F4F6;
+    border: 1px solid #E5E7EB;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 13px;
+    font-weight: 800;
+    color: #4B5563;
+    transition: all 0.2s;
+    flex-shrink: 0;
+}
+
+.ticket-ball.ball-win {
+    background: #10B981;
+    color: white;
+    border-color: #059669;
+    box-shadow: 0 4px 10px rgba(16, 185, 129, 0.3);
+}
+
+.ticket-ball.ball-lose {
+    background: #EF4444;
+    color: white;
+    border-color: #DC2626;
+    box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3);
+}
+
+.ticket-ball.ball-waiting {
+    background: #F3F4F6;
+    color: #9CA3AF;
+    border: 1px dashed #D1D5DB;
+}
+
+.ticket-info-grid {
+    display: flex;
+    flex-direction: column;
+    gap: 8px;
+}
+.info-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.info-label { font-size: 12px; color: #9CA3AF; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }
+.info-value { font-size: 14px; color: #1F2937; font-weight: 900; }
+.win-amount { color: #0062FF; font-size: 18px; }
+
+.history-items-list {
+    flex: 1;
+    height: calc(100vh - 175px) !important;
+    overflow-y: auto !important;
+    overflow-x: hidden !important;
+    padding-bottom: 100px;
+    
+    scrollbar-width: thin !important;
+    scrollbar-color: #fce303 transparent !important;
+}
+
+.history-items-list::-webkit-scrollbar {
+    width: 6px !important;
+    display: block !important;
+}
+
+.history-items-list::-webkit-scrollbar-track {
+    background: transparent !important;
+}
+
+.history-items-list::-webkit-scrollbar-thumb {
+    background-color: #fce303 !important;
+    border-radius: 20px !important;
+}

+ 10 - 0
website/wwwroot/Millions/css/howtoplay.css

@@ -0,0 +1,10 @@
+/* Custom styles for How To Play page */
+.font-bricolage { 
+    font-family: 'Bricolage Grotesque', sans-serif; 
+}
+
+.yellow-button {
+    background: linear-gradient(180deg, #FFE95B 0%, #ECA600 100%);
+    box-shadow: inset 0px -2px 0px rgba(0, 0, 0, 0.15), 0px 4px 6px rgba(0, 0, 0, 0.2);
+    color: #212121;
+}

+ 10 - 0
website/wwwroot/Millions/css/more.css

@@ -0,0 +1,10 @@
+.scalloped-bottom {
+    background-color: transparent;
+    background-image: radial-gradient(circle at 10px 10px, transparent 0, transparent 9px, white 10px);
+    background-size: 20px 20px;
+    background-repeat: repeat-x;
+    background-position: bottom;
+    height: 10px;
+    transform: rotate(180deg);
+    filter: drop-shadow(0px -2px 3px rgba(0,0,0,0.08));
+}

+ 299 - 0
website/wwwroot/Millions/css/results.css

@@ -0,0 +1,299 @@
+.results-container {
+    background-color: #F3F4F6;
+    height: 100vh !important;
+    overflow: hidden !important; 
+    position: relative;
+    display: flex;
+    flex-direction: column;
+}
+
+.results-items-list {
+    flex: 1; /* Take up available space between header and footer */
+    height: calc(100vh - 150px - 140px) !important; 
+    overflow-y: auto !important;
+    overflow-x: hidden !important;
+    padding-bottom: 20px;
+    
+    scrollbar-width: thin !important;
+    scrollbar-color: #fce303 transparent !important;
+}
+
+.results-items-list::-webkit-scrollbar {
+    width: 6px !important;
+    display: block !important;
+}
+
+.results-items-list::-webkit-scrollbar-track {
+    background: transparent !important;
+}
+
+.results-items-list::-webkit-scrollbar-thumb {
+    background-color: #fce303 !important;
+    border-radius: 20px !important;
+}
+
+.results-top-header {
+    background-color: #0062FF;
+    padding: 12px 16px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    position: relative;
+}
+
+.results-top-header h1 {
+    color: white;
+    font-size: 28px;
+    font-weight: 800;
+}
+
+.results-top-header .back-btn {
+    position: absolute;
+    left: 16px;
+    color: white;
+    font-size: 20px;
+}
+
+/* Date Selection Bar */
+.selection-bar {
+    display: flex;
+    padding: 16px;
+    gap: 12px;
+    align-items: center;
+}
+
+.date-pick-input {
+    flex: 1;
+    background: white;
+    border: 1px solid #D1D5DB;
+    border-radius: 8px;
+    padding: 8px 10px;
+    display: flex;
+    align-items: center;
+    gap: 4px;
+    font-size: 13px;
+    font-weight: 700;
+    color: #374151;
+    position: relative;
+    overflow: visible;
+}
+
+/* Ensure flatpickr calendar stays within container bounds */
+.date-pick-input .flatpickr-calendar {
+    left: 0 !important;
+    right: auto !important;
+    max-width: 300px;
+}
+
+/* For the second (right-side) date input, align calendar to the right */
+.date-pick-input:nth-child(2) .flatpickr-calendar {
+    left: auto !important;
+    right: 0 !important;
+}
+
+.btn-search-red {
+    background-color: #0062FF;
+    width: 54px;
+    height: 54px;
+    border-radius: 12px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: white;
+    font-size: 24px;
+    box-shadow: 0 4px 10px rgba(238, 0, 51, 0.2);
+}
+
+/* Tabs */
+.tab-switcher {
+    display: flex;
+    padding: 0 16px;
+    gap: 12px;
+    margin-bottom: 16px;
+}
+
+.tab-btn {
+    flex: 1;
+    background: white;
+    border-radius: 12px;
+    padding: 14px;
+    text-align: center;
+    font-weight: 800;
+    color: #1F2937;
+    font-size: 14px;
+    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
+}
+
+/* Result Item Cards */
+.result-item-red {
+    background: white;
+    border-radius: 16px;
+    margin: 0 0px 16px 0px;
+    padding: 16px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
+    position: relative;
+    overflow: hidden;
+    border: 1.5px solid #0062FF;
+}
+
+.item-date-text {
+    flex: 0 0 90px;
+    color: #374151;
+    line-height: 1.2;
+    font-weight: 700;
+}
+
+.item-date-text .day { font-size: 14px; margin-bottom: 2px; }
+.item-date-text .date { font-size: 12px; font-weight: 400; color: #6B7280; }
+
+.balls-container {
+    flex: 1;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: flex-end;
+    gap: 4px;
+    padding: 2px 0;
+}
+
+.yellow-ball {
+    width: 28px;
+    height: 28px;
+    background: linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%);
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 11px;
+    font-weight: 900;
+    color: white;
+    box-shadow: 0 2px 5px rgba(186, 15, 33, 0.3);
+}
+
+.yellow-ball:hover {
+    transform: scale(1.1);
+    box-shadow: 0 4px 8px rgba(186, 15, 33, 0.4);
+}
+
+.results-items-list {
+    padding-bottom: 240px; /* Extra space for the sticky jackpot bar */
+}
+
+/* Premium Grouped Result Cards */
+.result-card-premium {
+    background: white;
+    border-radius: 20px !important;
+    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04) !important;
+    border: 1px solid #F3F4F6 !important;
+    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.result-card-premium:hover {
+    transform: translateY(-3px);
+    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08) !important;
+}
+
+.game-result-row {
+    padding: 4px 0;
+}
+
+/* Bottom Promo Bar */
+.bottom-promo-red {
+    background-color: #0062FF;
+    padding: 12px;
+    text-align: center;
+    position: fixed;
+    bottom: 74px;
+    left: 50%;
+    transform: translateX(-50%);
+    width: 100%;
+    max-width: 414px;
+    z-index: 40;
+}
+
+.promo-text {
+    color: white;
+    font-size: 12px;
+    font-weight: 700;
+}
+
+.promo-highlight {
+    display: block;
+    color: #FFE600;
+    font-size: 18px;
+    font-weight: 900;
+    margin-top: 2px;
+}
+
+/* Modern Flatpickr Red Theme */
+.flatpickr-calendar {
+    background: #fff;
+    border-radius: 16px;
+    box-shadow: 0 10px 25px rgba(0,0,0,0.1);
+    border: 1px solid #eee;
+}
+.flatpickr-day.selected {
+    background: #0062FF !important;
+    border-color: #0062FF !important;
+    color: #fff !important;
+}
+.flatpickr-months .flatpickr-month {
+    background: #0062FF;
+    color: #fff;
+    fill: #fff;
+    border-radius: 16px 16px 0 0;
+    height: 50px;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months { 
+    font-weight: 800; 
+    color: #fff !important;
+    background: transparent;
+}
+.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
+    background-color: #fff;
+    color: #333;
+}
+.numInputWrapper span.arrowUp:after { border-bottom-color: #fff; }
+.numInputWrapper span.arrowDown:after { border-top-color: #fff; }
+.flatpickr-current-month input.cur-year { color: #fff !important; font-weight: 800; }
+.flatpickr-weekdays { background: #0062FF; border-radius: 0; }
+.flatpickr-weekday { background: #0062FF; color: rgba(255,255,255,0.9) !important; font-weight: 700; }
+.flatpickr-day.today { border-color: #0062FF !important; }
+.flatpickr-day:hover { background: #ffebee !important; }
+
+/* Game Tab Bar */
+.game-tabs-container {
+    -ms-overflow-style: none;
+    scrollbar-width: none;
+}
+.game-tabs-container::-webkit-scrollbar {
+    display: none;
+}
+
+.game-tab-btn {
+    padding: 7px 18px;
+    border-radius: 20px;
+    background: white;
+    color: #4B5563;
+    font-size: 13px;
+    font-weight: 800;
+    border: 1px solid #E5E7EB;
+    transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
+    box-shadow: 0 2px 4px rgba(0,0,0,0.03);
+    cursor: pointer;
+    flex-shrink: 0;
+}
+
+.game-tab-btn.active {
+    background: #0062FF;
+    color: white;
+    border-color: #0062FF;
+    box-shadow: 0 6px 12px rgba(238, 0, 51, 0.25);
+    transform: translateY(-1px);
+}
+
+.game-tab-btn:active {
+    transform: scale(0.95);
+}

+ 122 - 0
website/wwwroot/Millions/css/rule.css

@@ -0,0 +1,122 @@
+/* Custom formatting for the Rule page */
+.rule-header-red {
+    background-color: #0062FF;
+    color: white;
+    font-weight: bold;
+    font-size: 16px;
+    padding: 8px 12px;
+    text-transform: uppercase;
+    margin-top: 24px;
+    margin-bottom: 16px;
+}
+
+.rule-table-grid {
+    display: grid;
+    grid-template-columns: 1.2fr 1fr;
+    row-gap: 6px;
+    column-gap: 12px;
+    font-size: 14px;
+    color: #000000;
+    line-height: 1.4;
+    padding: 0 12px;
+}
+
+.rule-table-grid.desc-grid {
+    grid-template-columns: 100px 1fr;
+    row-gap: 10px;
+}
+
+.rule-table-header {
+    font-weight: 800;
+    margin-bottom: 6px;
+}
+
+.rule-section-title {
+    font-size: 14px;
+    font-weight: 800;
+    color: #212121;
+    display: flex;
+    align-items: center;
+    gap: 6px;
+    margin-top: 20px;
+    margin-bottom: 12px;
+    padding: 0 12px;
+}
+
+.rule-section-title .icon {
+    color: #1A92F4;
+    font-size: 12px;
+}
+
+.ball-green {
+    width: 22px;
+    height: 22px;
+    border-radius: 50%;
+    border: 2px solid #16A34A;
+    /* tailwind green-600 */
+    background-color: white;
+    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 11px;
+    font-weight: 900;
+    color: #16A34A;
+}
+
+.play-card {
+    margin: 0 12px;
+    border-radius: 12px;
+    overflow: hidden;
+    position: relative;
+    box-shadow: 0 4px 6px rgba(238, 0, 51, 0.2);
+}
+
+.bullet-list {
+    padding-left: 12px;
+    padding-right: 12px;
+}
+
+.bullet-list li {
+    font-size: 13px;
+    color: #212121;
+    margin-bottom: 6px;
+    list-style-type: none;
+    position: relative;
+    padding-left: 12px;
+    line-height: 1.3;
+}
+
+.bullet-list li::before {
+    content: "•";
+    position: absolute;
+    left: 0;
+    top: 0;
+    font-weight: bold;
+}
+
+/* Custom Styled Scrollbar */
+.custom-scrollbar::-webkit-scrollbar {
+    width: 6px;
+}
+
+.custom-scrollbar::-webkit-scrollbar-track {
+    background: #E5E5E5;
+    border-radius: 10px;
+}
+
+.custom-scrollbar::-webkit-scrollbar-thumb {
+    background: #FF8A00;
+    /* Orange thumb to match design */
+    border-radius: 10px;
+}
+
+.custom-scrollbar::-webkit-scrollbar-thumb:hover {
+    background: #FF6B00;
+}
+
+/* For Firefox */
+.custom-scrollbar {
+    scrollbar-width: thin;
+    scrollbar-color: #FF8A00 #E5E5E5;
+}

+ 206 - 0
website/wwwroot/Millions/css/site.css

@@ -0,0 +1,206 @@
+/* Custom styles for LotteryV2 */
+body.millions-bg {
+    background: white !important;
+    /* Changed from dark gradient to brand red */
+    color: #fff;
+    min-height: 100vh;
+    margin: 0;
+    padding: 0;
+}
+
+.millions-container {
+    padding-top: 50px;
+    text-align: center;
+}
+
+.millions-card {
+    background: rgba(255, 255, 255, 0.1);
+    backdrop-filter: blur(10px);
+    border: 1px solid rgba(255, 255, 255, 0.2);
+    border-radius: 16px;
+    padding: 30px;
+    margin: 20px auto;
+    max-width: 400px;
+    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4);
+}
+
+.millions-btn-back {
+    margin-top: 20px;
+    background: #FF2E93;
+    border: none;
+    border-radius: 20px;
+    padding: 10px 20px;
+    font-weight: bold;
+    color: white;
+}
+
+/* Figma Layout Styles for Home */
+body {
+    background-color: white !important;
+    /* Full red support from figma nodes fills */
+    font-family: 'Montserrat', sans-serif;
+}
+
+.main-container {
+    width: 100% !important;
+    max-width: 100% !important;
+    /* Mặc định tràn viền cho di động */
+    margin: 0 auto;
+    background-color: #0062FF;
+    min-height: 100vh;
+    padding-bottom: 30px;
+    overflow-x: hidden;
+}
+
+@media (min-width: 600px) {
+    .main-container {
+        max-width: 414px !important;
+    }
+}
+
+.glass-header {
+    background: transparent;
+}
+
+.card-red {
+    background: linear-gradient(135deg, #3385FF 0%, #004ecb 100%);
+    border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.card-blue {
+    background: linear-gradient(135deg, #1A92F4 0%, #0C5BAA 100%);
+    border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.card-orange {
+    background: linear-gradient(135deg, #F86E22 0%, #B8470B 100%);
+    border: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+/* Hide Scrollbar for fully immersive mobile wrapper view */
+html,
+body,
+.main-container {
+    -ms-overflow-style: none;
+    /* IE and Edge */
+    scrollbar-width: none;
+    /* Firefox */
+}
+
+html::-webkit-scrollbar,
+body::-webkit-scrollbar,
+.main-container::-webkit-scrollbar {
+    display: none;
+    /* Chrome, Safari & Opera */
+}
+
+.card-shadow {
+    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
+}
+
+@keyframes btn-pulse {
+
+    0%,
+    100% {
+        transform: scale(1);
+    }
+
+    50% {
+        transform: scale(1.05);
+    }
+}
+
+.btn-pulse {
+    animation: btn-pulse 1s ease-in-out infinite;
+}
+
+@keyframes tick-scroll {
+
+    0%,
+    40% {
+        transform: translateY(0);
+    }
+
+    50%,
+    90% {
+        transform: translateY(-24px);
+    }
+
+    100% {
+        transform: translateY(-48px);
+    }
+}
+
+.animate-tick-scroll {
+    animation: tick-scroll 4s cubic-bezier(0.77, 0, 0.175, 1) infinite;
+}
+
+@keyframes slide-up {
+    0% {
+        transform: translateY(100%);
+        opacity: 0;
+    }
+
+    15% {
+        transform: translateY(0);
+        opacity: 1;
+    }
+
+    85% {
+        transform: translateY(0);
+        opacity: 1;
+    }
+
+    100% {
+        transform: translateY(-100%);
+        opacity: 0;
+    }
+}
+
+.animate-slide-up {
+    animation: slide-up 2s ease-in-out infinite;
+}
+
+/* Global Loading Overlay */
+#loading-overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: rgba(0, 0, 0, 0.3);
+    backdrop-filter: blur(2px);
+    display: none;
+    align-items: center;
+    justify-content: center;
+    z-index: 9999;
+    transition: opacity 0.3s ease;
+}
+
+.loading-spinner {
+    width: 48px;
+    height: 48px;
+    border: 5px solid rgba(255, 255, 255, 0.2);
+    border-radius: 50%;
+    border-top-color: #fff;
+    animation: spin 0.8s linear infinite;
+    box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
+}
+
+@keyframes spin {
+    to {
+        transform: rotate(360deg);
+    }
+}
+
+/* Hide Spinners for input number */
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+    -webkit-appearance: none;
+    margin: 0;
+}
+
+input[type=number] {
+    appearance: textfield;
+    -moz-appearance: textfield;
+}

BIN
website/wwwroot/Millions/img/ChooseApp/asset_ball.png


BIN
website/wwwroot/Millions/img/ChooseApp/gold_bag.png


BIN
website/wwwroot/Millions/img/ChooseApp/logo.png


BIN
website/wwwroot/Millions/img/ChooseApp/main_bg.png


BIN
website/wwwroot/Millions/img/ChooseApp/money_stack.png


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 0
website/wwwroot/Millions/img/Rectangle 132.svg


BIN
website/wwwroot/Millions/img/ball_10.png


BIN
website/wwwroot/Millions/img/ball_20.png


BIN
website/wwwroot/Millions/img/ball_3.png


BIN
website/wwwroot/Millions/img/ball_86.png


BIN
website/wwwroot/Millions/img/ball_88.png


BIN
website/wwwroot/Millions/img/ball_99.png


BIN
website/wwwroot/Millions/img/banner1.png


BIN
website/wwwroot/Millions/img/banner2.png


BIN
website/wwwroot/Millions/img/banner3.png


BIN
website/wwwroot/Millions/img/big_text.png


BIN
website/wwwroot/Millions/img/bigsmall/ball_1_big.png


BIN
website/wwwroot/Millions/img/bigsmall/ball_42_dark.png


BIN
website/wwwroot/Millions/img/bigsmall/ball_54_dark.png


BIN
website/wwwroot/Millions/img/bigsmall/ball_5_blue.png


BIN
website/wwwroot/Millions/img/bigsmall/ball_88_big.png


BIN
website/wwwroot/Millions/img/bigsmall/ball_8_pink.png


BIN
website/wwwroot/Millions/img/bigsmall/bg_curve.png


BIN
website/wwwroot/Millions/img/bigsmall/card_big_full.png


BIN
website/wwwroot/Millions/img/bigsmall/card_small_full.png


BIN
website/wwwroot/Millions/img/bigsmall/light_effect_1.png


BIN
website/wwwroot/Millions/img/bigsmall/light_effect_2.png


BIN
website/wwwroot/Millions/img/bigsmall/select_btn.png


BIN
website/wwwroot/Millions/img/bigsmall/selected_btn.png


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
website/wwwroot/Millions/img/calling.svg


+ 3 - 0
website/wwwroot/Millions/img/chevron_down.svg

@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9 18L15 12L9 6" stroke="black" stroke-opacity="0.45" stroke-width="1.33333" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>

BIN
website/wwwroot/Millions/img/decorations/ellipse_1181.png


BIN
website/wwwroot/Millions/img/decorations/ellipse_1183.png


BIN
website/wwwroot/Millions/img/even_text.png


BIN
website/wwwroot/Millions/img/faq_banner.png


BIN
website/wwwroot/Millions/img/faq_banner_full.png


BIN
website/wwwroot/Millions/img/game_card1.png


BIN
website/wwwroot/Millions/img/game_card2.png


BIN
website/wwwroot/Millions/img/game_card3.png


BIN
website/wwwroot/Millions/img/gold.png


BIN
website/wwwroot/Millions/img/gold_bag.png


BIN
website/wwwroot/Millions/img/gold_chest.png


BIN
website/wwwroot/Millions/img/gold_wallet.png


+ 4 - 0
website/wwwroot/Millions/img/help.svg

@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="12" cy="17" r="1" fill="#0E1105"/>
+<path d="M9 9C9 7.34315 10.3431 6 12 6C13.6569 6 15 7.34315 15 9C15 10.313 14.1565 11.4289 12.9819 11.8356C12.46 12.0163 12 12.4477 12 13V14M11 3H13C17.9706 3 22 7.02944 22 12C22 16.9706 17.9706 21 13 21H6C3.79086 21 2 19.2091 2 17V12C2 7.02944 6.02944 3 11 3Z" stroke="#0E1105" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
+</svg>

+ 21 - 0
website/wwwroot/Millions/img/icon_calendar.svg

@@ -0,0 +1,21 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_178_10254)">
+<path d="M21.8907 2.8125H2.10941C0.942124 2.8125 3.05176e-05 3.75464 3.05176e-05 4.92188V9.14062C3.05176e-05 9.53433 0.309359 9.9375 0.703156 9.9375H23.2969C23.6907 9.9375 24 9.53433 24 9.14062V4.92188C24 3.75464 23.0579 2.8125 21.8907 2.8125Z" fill="#FF2251"/>
+<path d="M24 4.92188V9.14062C24 9.53433 23.6907 9.9375 23.2969 9.9375H12.0469V2.8125H21.8907C23.0579 2.8125 24 3.75464 24 4.92188Z" fill="#EE0033"/>
+<path d="M13.4532 5.625V1.40625C13.4532 0.629578 12.8236 0 12.0469 0C11.2702 0 10.6407 0.629578 10.6407 1.40625V5.625C10.6407 6.40167 11.2702 7.03125 12.0469 7.03125C12.8236 7.03125 13.4532 6.40167 13.4532 5.625Z" fill="#B7E0F6"/>
+<path d="M13.4532 1.40625V5.625C13.4532 6.40158 12.8235 7.03125 12.0469 7.03125V0C12.8235 0 13.4532 0.629672 13.4532 1.40625Z" fill="#A4D9F5"/>
+<path d="M6.32816 5.625V1.40625C6.32816 0.629578 5.69858 0 4.92191 0C4.14523 0 3.51566 0.629578 3.51566 1.40625V5.625C3.51566 6.40167 4.14523 7.03125 4.92191 7.03125C5.69858 7.03125 6.32816 6.40167 6.32816 5.625Z" fill="#B7E0F6"/>
+<path d="M20.4844 5.625V1.40625C20.4844 0.629578 19.8548 0 19.0782 0C18.3015 0 17.6719 0.629578 17.6719 1.40625V5.625C17.6719 6.40167 18.3015 7.03125 19.0782 7.03125C19.8548 7.03125 20.4844 6.40167 20.4844 5.625Z" fill="#A4D9F5"/>
+<path d="M3.05176e-05 8.4375V21.8906C3.05176e-05 23.0578 0.942124 24 2.10941 24H21.8907C23.0579 24 24 23.0578 24 21.8906V8.4375H3.05176e-05Z" fill="#CAE8F9"/>
+<path d="M24 8.4375V21.8906C24 23.0578 23.0579 24 21.8907 24H12.0469V8.4375H24Z" fill="#B7E0F6"/>
+<path d="M20.4844 12.0469H3.51566V20.4844H20.4844V12.0469Z" fill="#CAE8F9"/>
+<path d="M20.4844 11.3438H3.51566C3.12186 11.3438 2.81253 11.6531 2.81253 12.0469V20.4844C2.81253 20.8781 3.12186 21.1875 3.51566 21.1875H20.4844C20.8782 21.1875 21.1875 20.8781 21.1875 20.4844V12.0469C21.1875 11.6531 20.8782 11.3438 20.4844 11.3438ZM7.03128 19.7812H4.21878V16.9688H7.03128V19.7812ZM7.03128 15.5625H4.21878V12.75H7.03128V15.5625ZM11.3438 19.7812H8.43753V16.9688H11.3438V19.7812ZM11.3438 15.5625H8.43753V12.75H11.3438V15.5625ZM15.5625 19.7812H12.75V16.9688H15.5625V19.7812ZM15.5625 15.5625H12.75V12.75H15.5625V15.5625ZM19.7813 19.7812H16.9688V16.9688H19.7813V19.7812ZM19.7813 15.5625H16.9688V12.75H19.7813V15.5625Z" fill="#363636"/>
+<path d="M20.4844 12.0469H12.0469V20.4844H20.4844V12.0469Z" fill="#B7E0F6"/>
+<path d="M20.4844 11.3438H12.0469V21.1875H20.4844C20.8782 21.1875 21.1875 20.8781 21.1875 20.4844V12.0469C21.1875 11.6531 20.8782 11.3438 20.4844 11.3438ZM15.5625 19.7812H12.75V16.9688H15.5625V19.7812ZM15.5625 15.5625H12.75V12.75H15.5625V15.5625ZM19.7813 19.7812H16.9688V16.9688H19.7813V19.7812ZM19.7813 15.5625H16.9688V12.75H19.7813V15.5625Z" fill="black"/>
+</g>
+<defs>
+<clipPath id="clip0_178_10254">
+<rect width="24" height="24" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 23 - 0
website/wwwroot/Millions/img/icon_faq.svg

@@ -0,0 +1,23 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_0_82)">
+<g clip-path="url(#clip1_0_82)">
+<path d="M11.9531 0.130859C6.13125 0.130859 1.40625 4.85586 1.40625 10.6777V11.3809C1.40625 11.9574 2.06714 12.2949 2.5313 11.9433C3.00937 11.5777 3.61416 11.3809 4.21875 11.3809H4.92188C5.31567 11.3809 5.625 11.0714 5.625 10.6777C5.625 7.19019 8.46567 4.34961 11.9531 4.34961C15.4547 4.34961 18.375 7.17617 18.375 10.6777C18.375 11.0714 18.6843 11.3809 19.0781 11.3809H19.7812C20.3858 11.3809 20.9906 11.5777 21.4687 11.9433C21.9329 12.2949 22.5938 11.9574 22.5938 11.3809V10.6777C22.5938 4.85586 17.775 0.130859 11.9531 0.130859Z" fill="#CAE8F9"/>
+<path d="M22.5937 10.6777V11.3809C22.5937 11.9574 21.9329 12.2949 21.4687 11.9433C20.9906 11.5777 20.3858 11.3809 19.7812 11.3809H19.0781C18.6843 11.3809 18.375 11.0714 18.375 10.6777C18.375 7.17617 15.4547 4.34961 11.9531 4.34961V0.130859C17.775 0.130859 22.5937 4.85586 22.5937 10.6777Z" fill="#B7E0F6"/>
+<path d="M19.7813 19.209C19.7813 21.1474 18.2047 22.7246 16.2657 22.7246H14.8594C13.9326 22.7246 13.9288 21.3184 14.8594 21.3184H16.2657C17.4288 21.3184 18.375 20.3721 18.375 19.209V17.8027C18.375 17.4141 18.6895 17.0996 19.0782 17.0996C19.4668 17.0996 19.7813 17.4141 19.7813 17.8027V19.209Z" fill="#B7E0F6"/>
+<path d="M13.4531 19.9121H11.9531C9.16879 19.9121 9.16879 24.1309 11.9531 24.1309H13.4531C16.2374 24.1309 16.2374 19.9121 13.4531 19.9121Z" fill="#B758CE"/>
+<path d="M8.4375 16.3965C8.4375 17.5596 7.49128 18.5059 6.32812 18.5059H4.92187C4.53323 18.5059 4.21875 18.1914 4.21875 17.8027V10.6777C4.21875 10.2891 4.53323 9.97461 4.92187 9.97461H6.32812C7.49128 9.97461 8.4375 10.9208 8.4375 12.084V16.3965Z" fill="#AA3DC8"/>
+<path d="M19.7812 17.8027C19.7812 18.1914 19.4668 18.5059 19.0781 18.5059H17.6719C16.5087 18.5059 15.5625 17.5596 15.5625 16.3965V12.084C15.5625 10.9208 16.5087 9.97461 17.6719 9.97461H19.0781C19.4668 9.97461 19.7812 10.2891 19.7812 10.6777V17.8027Z" fill="#9332B0"/>
+<path d="M13.4531 24.1309H11.9531V19.9121H13.4531C16.2375 19.9121 16.2375 24.1309 13.4531 24.1309Z" fill="#AA3DC8"/>
+<path d="M5.625 18.5059H4.21875C1.89239 18.5059 0 16.5197 0 14.1934C0 11.7924 1.94231 9.97461 4.21875 9.97461H5.625V18.5059Z" fill="#B758CE"/>
+<path d="M24 14.1934C24 16.5447 22.1044 18.5059 19.7812 18.5059H18.375V9.97461H19.7812C22.0737 9.97461 24 11.8226 24 14.1934Z" fill="#AA3DC8"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_0_82">
+<rect width="24" height="24" fill="white"/>
+</clipPath>
+<clipPath id="clip1_0_82">
+<rect width="24" height="24" fill="white" transform="translate(0 0.130859)"/>
+</clipPath>
+</defs>
+</svg>

+ 22 - 0
website/wwwroot/Millions/img/icon_history.svg

@@ -0,0 +1,22 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_0_59)">
+<g clip-path="url(#clip1_0_59)">
+<path d="M12.0469 0.130859C5.45166 0.130859 0 5.48867 0 12.084C0 18.6793 5.45166 24.1309 12.0469 24.1309C18.6421 24.1309 24 18.6793 24 12.084C24 5.48867 18.6421 0.130859 12.0469 0.130859Z" fill="#FD003A"/>
+<path d="M24 12.084C24 18.6793 18.6421 24.1309 12.0469 24.1309V0.130859C18.6421 0.130859 24 5.48867 24 12.084Z" fill="#E50027"/>
+<path d="M20.4844 12.084C20.4844 16.7387 16.7017 20.6152 12.0469 20.6152C7.39209 20.6152 3.51562 16.7387 3.51562 12.084C3.51562 7.4293 7.39209 3.64648 12.0469 3.64648C16.7017 3.64648 20.4844 7.4293 20.4844 12.084Z" fill="#CAE8F9"/>
+<path d="M20.4844 12.084C20.4844 16.7387 16.7017 20.6152 12.0469 20.6152V3.64648C16.7017 3.64648 20.4844 7.4293 20.4844 12.084Z" fill="#B7E0F6"/>
+<path d="M14.3673 15.4823L12.0469 13.0683L11.5548 12.5761C11.2734 12.3089 11.2734 11.8589 11.5548 11.5917L14.3673 8.77921C15.0141 8.11832 16.0126 9.10269 15.3516 9.76358L13.0453 12.0839L15.3515 14.498C16.0267 15.1589 15 16.1293 14.3673 15.4823Z" fill="#1689FC"/>
+<path d="M12.0469 2.94336C7.02647 2.94336 2.8125 7.02144 2.8125 12.084C2.8125 17.1043 6.98442 21.3184 12.0469 21.3184C17.0673 21.3184 21.1875 17.1464 21.1875 12.084C21.1875 7.06367 17.1093 2.94336 12.0469 2.94336ZM17.9812 17.1277L17.5172 16.6496C16.8561 16.0027 15.8577 16.9871 16.5187 17.6481L16.9969 18.1121C15.8155 19.0965 14.3532 19.7293 12.75 19.8699V19.209C12.75 18.7449 12.3984 18.5059 12.0469 18.5059C11.6953 18.5059 11.3437 18.7449 11.3437 19.209V19.8699C9.74062 19.7293 8.18447 19.0964 7.00308 18.1121L7.48134 17.648C8.12817 16.9871 7.14384 15.9886 6.48281 16.6496L6.0188 17.1276C5.03447 15.9465 4.40156 14.3902 4.26098 12.7871H4.92187C5.84986 12.7871 5.84986 11.3809 4.92187 11.3809H4.26098C4.40156 9.77773 5.03447 8.31523 6.0188 7.13394L6.48281 7.61211C7.14389 8.25894 8.14228 7.27452 7.48134 6.61362L7.00308 6.14952C8.18447 5.16528 9.74062 4.53242 11.3437 4.39184V5.05273C11.3437 5.51684 11.6953 5.75586 12.0469 5.75586C12.3984 5.75586 12.75 5.51684 12.75 5.05273V4.39184C14.3531 4.53242 15.8155 5.16528 16.9969 6.14956L16.5187 6.61367C15.8578 7.27456 16.8702 8.25894 17.5172 7.61216L17.9812 7.13398C18.9655 8.31528 19.5984 9.77773 19.739 11.3809H19.0781C18.1501 11.3809 18.1501 12.7872 19.0781 12.7872H19.739C19.5984 14.3902 18.9655 15.9465 17.9812 17.1277Z" fill="#81C8EE"/>
+<path d="M14.3672 15.4823L12.0469 13.0683V11.0996L14.3672 8.77921C15.0141 8.11832 16.0126 9.10269 15.3516 9.76358L13.0453 12.0839L15.3515 14.498C16.0267 15.1589 15 16.1293 14.3672 15.4823Z" fill="#136EF1"/>
+<path d="M21.1875 12.084C21.1875 17.1464 17.0673 21.3184 12.0469 21.3184V18.5059C12.3984 18.5059 12.75 18.7449 12.75 19.209V19.8699C14.3531 19.7293 15.8155 19.0964 16.9969 18.1121L16.5187 17.648C15.8578 16.9871 16.8562 16.0027 17.5172 16.6496L17.9812 17.1276C18.9655 15.9465 19.5984 14.3902 19.739 12.7871H19.0781C18.1501 12.7871 18.1501 11.3809 19.0781 11.3809H19.739C19.5984 9.77773 18.9655 8.31523 17.9812 7.13394L17.5172 7.61211C16.8702 8.25894 15.8577 7.27452 16.5187 6.61362L16.9969 6.14952C15.8155 5.16528 14.3531 4.53242 12.75 4.39184V5.05273C12.75 5.51684 12.3984 5.75586 12.0469 5.75586V2.94336C17.1093 2.94336 21.1875 7.06367 21.1875 12.084Z" fill="#4DBBEC"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_0_59">
+<rect width="24" height="24" fill="white"/>
+</clipPath>
+<clipPath id="clip1_0_59">
+<rect width="24" height="24" fill="white" transform="translate(0 0.130859)"/>
+</clipPath>
+</defs>
+</svg>

+ 24 - 0
website/wwwroot/Millions/img/icon_home.svg

@@ -0,0 +1,24 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_0_8)">
+<g clip-path="url(#clip1_0_8)">
+<path d="M20.9354 10.6593L12.4979 3.4312C12.3712 3.31865 12.2025 3.26245 12.0338 3.26245C11.865 3.26245 11.6963 3.31865 11.5696 3.4312L3.08522 10.6593C2.93072 10.7999 2.84625 10.9827 2.84625 11.1937V23.2968C2.84625 23.6906 3.15558 23.9999 3.54938 23.9999H20.4713C20.865 23.9999 21.1744 23.6906 21.1744 23.2968V11.1937C21.1744 10.9827 21.0899 10.7999 20.9354 10.6593Z" fill="#CAE8F9"/>
+<path d="M21.1743 11.1937V23.2968C21.1743 23.6906 20.865 23.9999 20.4712 23.9999H12.0337V3.26245C12.2025 3.26245 12.3712 3.31865 12.4979 3.4312L20.9354 10.6593C21.0899 10.8 21.1743 10.9828 21.1743 11.1937Z" fill="#B7E0F6"/>
+<path d="M15.5493 15.4688H8.5181C8.1243 15.4688 7.81497 15.7781 7.81497 16.1719V24H16.2525V16.1719C16.2525 15.7781 15.9431 15.4688 15.5493 15.4688Z" fill="#1689FC"/>
+<path d="M16.2525 16.1719V24H12.0337V15.4688H15.5493C15.9431 15.4688 16.2525 15.7781 16.2525 16.1719Z" fill="#136EF1"/>
+<path d="M20.0125 8.02828L17.2 5.60925C17.0448 5.47603 16.9556 5.28103 16.9556 5.07642V2.10937C16.9556 1.72073 17.2701 1.40625 17.6587 1.40625H20.4712C20.8599 1.40625 21.1743 1.72073 21.1743 2.10937V7.49541C21.1743 8.0963 20.4667 8.41791 20.0125 8.02828Z" fill="#A4D9F5"/>
+<path d="M23.2556 8.94375L13.4118 0.50625C13.0181 0.16875 12.5259 0 12.0338 0C11.5416 0 11.0494 0.16875 10.6557 0.50625L0.765057 8.94375C-1.34432 10.7579 1.41189 13.9641 3.52126 12.15L12.0338 4.89375L20.5135 12.15C20.8932 12.4734 21.3854 12.6281 21.8634 12.6281C22.468 12.6281 23.0728 12.3891 23.4807 11.925C24.2399 11.025 24.1416 9.70317 23.2556 8.94375Z" fill="#FD003A"/>
+<path d="M23.4806 11.925C23.0727 12.3891 22.468 12.6281 21.8634 12.6281C21.3853 12.6281 20.8931 12.4734 20.5134 12.15L12.0337 4.8937V0C12.5259 0 13.0181 0.16875 13.4118 0.50625L23.2556 8.94375C24.1415 9.70317 24.2399 11.025 23.4806 11.925Z" fill="#E50027"/>
+<path d="M14.1431 8.4375H9.92435C9.53055 8.4375 9.22122 8.74683 9.22122 9.14062V13.3594C9.22122 13.7532 9.53055 14.0625 9.92435 14.0625H14.1431C14.5369 14.0625 14.8462 13.7532 14.8462 13.3594V9.14062C14.8462 8.74683 14.5369 8.4375 14.1431 8.4375Z" fill="#1DE8F1"/>
+<path d="M12.7369 19.6875C13.1253 19.6875 13.4401 19.3727 13.4401 18.9844C13.4401 18.596 13.1253 18.2812 12.7369 18.2812C12.3486 18.2812 12.0338 18.596 12.0338 18.9844C12.0338 19.3727 12.3486 19.6875 12.7369 19.6875Z" fill="#B7E0F6"/>
+<path d="M14.1431 14.0625H12.0337V8.4375H14.1431C14.5369 8.4375 14.8462 8.74683 14.8462 9.14062V13.3594C14.8462 13.7532 14.5369 14.0625 14.1431 14.0625Z" fill="#1BD9DE"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_0_8">
+<rect width="24" height="24" fill="white"/>
+</clipPath>
+<clipPath id="clip1_0_8">
+<rect width="24" height="24" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 5 - 0
website/wwwroot/Millions/img/icon_more.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M7 12H20" stroke="#0E1105" stroke-width="1.5" stroke-linecap="round"/>
+<path d="M4 17L20 17" stroke="#0E1105" stroke-width="1.5" stroke-linecap="round"/>
+<path d="M4 7L20 7" stroke="#0E1105" stroke-width="1.5" stroke-linecap="round"/>
+</svg>

+ 20 - 0
website/wwwroot/Millions/img/icon_rule.svg

@@ -0,0 +1,20 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_0_36)">
+<g clip-path="url(#clip1_0_36)">
+<path d="M12.0469 0.130859C5.45166 0.130859 0 5.48867 0 12.084C0 14.3762 0.646828 16.6776 1.87041 18.6042L0.0562969 23.1604C-0.182812 23.751 0.393797 24.3135 0.970219 24.0745L5.52647 22.2604C7.45322 23.4838 9.75469 24.1308 12.0469 24.1308C18.6421 24.1308 24 18.6793 24 12.084C24 5.48872 18.6421 0.130859 12.0469 0.130859Z" fill="#17ACE8"/>
+<path d="M23.9999 12.084C23.9999 18.6793 18.642 24.1307 12.0468 24.1307V0.130859C18.642 0.130859 23.9999 5.48867 23.9999 12.084Z" fill="#1689FC"/>
+<path d="M14.8593 15.6932H14.1562V9.27148C14.1562 8.87769 13.8469 8.56836 13.4531 8.56836H9.23431C8.84052 8.56836 8.53119 8.87769 8.53119 9.27148V12.084C8.53119 12.4778 8.84052 12.7871 9.23431 12.7871H9.93744V15.6932H9.23431C8.84052 15.6932 8.53119 16.0025 8.53119 16.3963V19.2088C8.53119 19.6026 8.84052 19.912 9.23431 19.912H14.8593C15.2531 19.912 15.5624 19.6026 15.5624 19.2088V16.3963C15.5624 16.0025 15.2531 15.6932 14.8593 15.6932Z" fill="#CAE8F9"/>
+<path d="M12.0468 2.94336C10.8795 2.94336 9.93744 3.8855 9.93744 5.05273C9.93744 6.21997 10.8795 7.16211 12.0468 7.16211C13.2141 7.16211 14.1562 6.21997 14.1562 5.05273C14.1562 3.8855 13.2141 2.94336 12.0468 2.94336Z" fill="#CAE8F9"/>
+<path d="M12.0468 7.16211V2.94336C13.2141 2.94336 14.1562 3.8855 14.1562 5.05273C14.1562 6.21997 13.2141 7.16211 12.0468 7.16211Z" fill="#B7E0F6"/>
+<path d="M15.5624 16.3963V19.2088C15.5624 19.6026 15.2531 19.912 14.8593 19.912H12.0468V8.56836H13.4531C13.8469 8.56836 14.1562 8.87769 14.1562 9.27148V15.6932H14.8593C15.2531 15.6932 15.5624 16.0025 15.5624 16.3963Z" fill="#B7E0F6"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_0_36">
+<rect width="24" height="24" fill="white"/>
+</clipPath>
+<clipPath id="clip1_0_36">
+<rect width="24" height="24" fill="white" transform="translate(0 0.130859)"/>
+</clipPath>
+</defs>
+</svg>

BIN
website/wwwroot/Millions/img/icon_withdraw.png


BIN
website/wwwroot/Millions/img/illustration3.png


BIN
website/wwwroot/Millions/img/logo.png


BIN
website/wwwroot/Millions/img/m1.png


BIN
website/wwwroot/Millions/img/millionair_guy.png


BIN
website/wwwroot/Millions/img/modal/fail_icon.png


BIN
website/wwwroot/Millions/img/modal/otp_coins.png


BIN
website/wwwroot/Millions/img/modal/otp_glitter.png


+ 48 - 0
website/wwwroot/Millions/img/modal/otp_light_1.svg

@@ -0,0 +1,48 @@
+<svg width="578" height="43" viewBox="0 0 578 43" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.7" style="mix-blend-mode:screen">
+<path d="M289 43C448.61 43 578 33.3741 578 21.5C578 9.62588 448.61 0 289 0C129.39 0 0 9.62588 0 21.5C0 33.3741 129.39 43 289 43Z" fill="url(#paint0_radial_213_4740)" style="mix-blend-mode:screen"/>
+<path d="M289 43C448.61 43 578 33.3741 578 21.5C578 9.62588 448.61 0 289 0C129.39 0 0 9.62588 0 21.5C0 33.3741 129.39 43 289 43Z" fill="url(#paint1_radial_213_4740)" fill-opacity="0.5" style="mix-blend-mode:screen"/>
+<path d="M289 43C448.61 43 578 33.3741 578 21.5C578 9.62588 448.61 0 289 0C129.39 0 0 9.62588 0 21.5C0 33.3741 129.39 43 289 43Z" fill="url(#paint2_radial_213_4740)" fill-opacity="0.3" style="mix-blend-mode:screen"/>
+</g>
+<defs>
+<radialGradient id="paint0_radial_213_4740" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(289.899 20.7222) scale(288.982 21.4163)">
+<stop offset="0.11" stop-color="#FF9500"/>
+<stop offset="0.15" stop-color="#D37B00"/>
+<stop offset="0.2" stop-color="#A76200"/>
+<stop offset="0.25" stop-color="#7F4A00"/>
+<stop offset="0.31" stop-color="#5C3600"/>
+<stop offset="0.37" stop-color="#3F2500"/>
+<stop offset="0.44" stop-color="#281700"/>
+<stop offset="0.51" stop-color="#160C00"/>
+<stop offset="0.61" stop-color="#090500"/>
+<stop offset="0.73" stop-color="#020100"/>
+<stop offset="1"/>
+</radialGradient>
+<radialGradient id="paint1_radial_213_4740" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(289.899 20.7222) scale(288.982 21.4163)">
+<stop offset="0.11" stop-color="#FF9500"/>
+<stop offset="0.15" stop-color="#D37B00"/>
+<stop offset="0.2" stop-color="#A76200"/>
+<stop offset="0.25" stop-color="#7F4A00"/>
+<stop offset="0.31" stop-color="#5C3600"/>
+<stop offset="0.37" stop-color="#3F2500"/>
+<stop offset="0.44" stop-color="#281700"/>
+<stop offset="0.51" stop-color="#160C00"/>
+<stop offset="0.61" stop-color="#090500"/>
+<stop offset="0.73" stop-color="#020100"/>
+<stop offset="1"/>
+</radialGradient>
+<radialGradient id="paint2_radial_213_4740" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(289.899 20.7222) scale(288.982 21.4163)">
+<stop offset="0.11" stop-color="#FF9500"/>
+<stop offset="0.15" stop-color="#D37B00"/>
+<stop offset="0.2" stop-color="#A76200"/>
+<stop offset="0.25" stop-color="#7F4A00"/>
+<stop offset="0.31" stop-color="#5C3600"/>
+<stop offset="0.37" stop-color="#3F2500"/>
+<stop offset="0.44" stop-color="#281700"/>
+<stop offset="0.51" stop-color="#160C00"/>
+<stop offset="0.61" stop-color="#090500"/>
+<stop offset="0.73" stop-color="#020100"/>
+<stop offset="1"/>
+</radialGradient>
+</defs>
+</svg>

+ 48 - 0
website/wwwroot/Millions/img/modal/otp_light_2.svg

@@ -0,0 +1,48 @@
+<svg width="578" height="29" viewBox="0 0 578 29" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g opacity="0.7" style="mix-blend-mode:screen">
+<path d="M289 29C448.61 29 578 22.5081 578 14.5C578 6.49187 448.61 0 289 0C129.39 0 0 6.49187 0 14.5C0 22.5081 129.39 29 289 29Z" fill="url(#paint0_radial_213_4741)" style="mix-blend-mode:screen"/>
+<path d="M289 29C448.61 29 578 22.5081 578 14.5C578 6.49187 448.61 0 289 0C129.39 0 0 6.49187 0 14.5C0 22.5081 129.39 29 289 29Z" fill="url(#paint1_radial_213_4741)" fill-opacity="0.5" style="mix-blend-mode:screen"/>
+<path d="M289 29C448.61 29 578 22.5081 578 14.5C578 6.49187 448.61 0 289 0C129.39 0 0 6.49187 0 14.5C0 22.5081 129.39 29 289 29Z" fill="url(#paint2_radial_213_4741)" fill-opacity="0.3" style="mix-blend-mode:screen"/>
+</g>
+<defs>
+<radialGradient id="paint0_radial_213_4741" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(289.899 13.9754) scale(288.982 14.4435)">
+<stop offset="0.11" stop-color="#FF9500"/>
+<stop offset="0.15" stop-color="#D37B00"/>
+<stop offset="0.2" stop-color="#A76200"/>
+<stop offset="0.25" stop-color="#7F4A00"/>
+<stop offset="0.31" stop-color="#5C3600"/>
+<stop offset="0.37" stop-color="#3F2500"/>
+<stop offset="0.44" stop-color="#281700"/>
+<stop offset="0.51" stop-color="#160C00"/>
+<stop offset="0.61" stop-color="#090500"/>
+<stop offset="0.73" stop-color="#020100"/>
+<stop offset="1"/>
+</radialGradient>
+<radialGradient id="paint1_radial_213_4741" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(289.899 13.9754) scale(288.982 14.4435)">
+<stop offset="0.11" stop-color="#FF9500"/>
+<stop offset="0.15" stop-color="#D37B00"/>
+<stop offset="0.2" stop-color="#A76200"/>
+<stop offset="0.25" stop-color="#7F4A00"/>
+<stop offset="0.31" stop-color="#5C3600"/>
+<stop offset="0.37" stop-color="#3F2500"/>
+<stop offset="0.44" stop-color="#281700"/>
+<stop offset="0.51" stop-color="#160C00"/>
+<stop offset="0.61" stop-color="#090500"/>
+<stop offset="0.73" stop-color="#020100"/>
+<stop offset="1"/>
+</radialGradient>
+<radialGradient id="paint2_radial_213_4741" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(289.899 13.9754) scale(288.982 14.4435)">
+<stop offset="0.11" stop-color="#FF9500"/>
+<stop offset="0.15" stop-color="#D37B00"/>
+<stop offset="0.2" stop-color="#A76200"/>
+<stop offset="0.25" stop-color="#7F4A00"/>
+<stop offset="0.31" stop-color="#5C3600"/>
+<stop offset="0.37" stop-color="#3F2500"/>
+<stop offset="0.44" stop-color="#281700"/>
+<stop offset="0.51" stop-color="#160C00"/>
+<stop offset="0.61" stop-color="#090500"/>
+<stop offset="0.73" stop-color="#020100"/>
+<stop offset="1"/>
+</radialGradient>
+</defs>
+</svg>

BIN
website/wwwroot/Millions/img/modal/otp_shield.png


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 9 - 0
website/wwwroot/Millions/img/modal/otp_sparkle_1.svg


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 9 - 0
website/wwwroot/Millions/img/modal/otp_sparkle_2.svg


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است