{"id":16561,"date":"2026-07-22T17:17:02","date_gmt":"2026-07-22T09:17:02","guid":{"rendered":"https:\/\/www.lapakgaming.com\/blog\/en-my\/?page_id=16561"},"modified":"2026-07-22T17:19:19","modified_gmt":"2026-07-22T09:19:19","slug":"ragnarok-games","status":"publish","type":"page","link":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/","title":{"rendered":"Ragnarok Games List"},"content":{"rendered":"\n<!-- ============================================================\n     RAGNAROK HUB \u2014 Lapakgaming Malaysia (en-my)\n     Paste this WHOLE block into a WordPress \"Custom HTML\" block\n     (or an Elementor HTML widget). Self-contained: no external files.\n     ============================================================ -->\n<div class=\"rag-hub\">\n\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Cinzel:wght@500;600;700;800&family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');\n\n  :root{\n    --midnight:#0b0e2a;\n    --midnight-2:#10143a;\n    --panel:#161b48;\n    --line:rgba(150,160,225,.16);\n    --gold:#f4c04e;\n    --gold-deep:#e0a12a;\n    --violet:#8a7dff;\n    --teal:#4fd0c8;\n    --berry:#ff7ab0;\n    --ice:#66c6ff;\n    --amber:#ffa552;\n    --text:#eef0ff;\n    --muted:#a3a9d6;\n    --muted-2:#7f86b8;\n    --radius:16px;\n    --maxw:1200px;\n    --shadow:0 18px 40px -18px rgba(0,0,0,.7);\n  }\n\n  .rag-hub *{box-sizing:border-box}\n  html{scroll-behavior:smooth}\n  .rag-hub{\n    margin:0;\n    font-family:\"Plus Jakarta Sans\",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;\n    color:var(--text);\n    background:var(--midnight);\n    background-image:\n      radial-gradient(1100px 520px at 78% -8%, rgba(138,125,255,.20), transparent 60%),\n      radial-gradient(900px 500px at 8% 4%, rgba(244,192,78,.10), transparent 55%),\n      linear-gradient(180deg,#0b0e2a 0%, #0a0c22 100%);\n    background-attachment:fixed;\n    -webkit-font-smoothing:antialiased;\n    line-height:1.5;\n  }\n  .rag-hub a{color:inherit;text-decoration:none}\n  .rag-hub img{display:block;max-width:100%}\n  .rag-hub .wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}\n\n  \/* ---------- Header ---------- *\/\n  .rag-hub header{\n    position:sticky;top:0;z-index:50;\n    backdrop-filter:blur(12px);\n    background:linear-gradient(180deg, rgba(10,12,34,.92), rgba(10,12,34,.72));\n    border-bottom:1px solid var(--line);\n  }\n  .rag-hub .bar{display:flex;align-items:center;gap:16px;height:66px}\n  .rag-hub .brand{display:flex;align-items:center;gap:11px;flex-shrink:0}\n  .rag-hub .head-search{margin-left:auto;position:relative;width:min(320px,38vw)}\n  .rag-hub .head-search input{\n    width:100%;height:40px;border-radius:999px;border:1px solid var(--line);\n    background:rgba(255,255,255,.04);color:var(--text);\n    padding:0 16px 0 40px;font-size:14px;font-family:inherit;outline:none;\n  }\n  .rag-hub .head-search input::placeholder{color:var(--muted-2)}\n  .rag-hub .head-search input:focus{border-color:rgba(244,192,78,.5);background:rgba(255,255,255,.07)}\n  .rag-hub .head-search svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);opacity:.55}\n  @media(max-width:720px){ .rag-hub .head-search{display:none} }\n\n  \/* ---------- Logo ---------- *\/\n  .rag-hub .brand-logo{height:30px;width:auto;flex-shrink:0;filter:drop-shadow(0 2px 6px rgba(0,0,0,.55))}\n  .rag-hub .brand-tag{\n    font-size:10.5px;color:var(--muted-2);letter-spacing:.08em;text-transform:uppercase;\n    white-space:nowrap;padding-left:11px;border-left:1px solid var(--line);\n  }\n  @media(max-width:560px){ .rag-hub .brand-tag{display:none} }\n\n  .rag-hub .hero-inner{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);gap:44px;align-items:center}\n  .rag-hub .hero-copy{min-width:0}\n  .rag-hub .hero-logo{display:flex;align-items:center;justify-content:center;min-width:0}\n  .rag-hub .hero-logo img{\n    width:100%;max-width:430px;height:auto;\n    filter:drop-shadow(0 0 48px rgba(244,192,78,.20)) drop-shadow(0 14px 28px rgba(0,0,0,.55));\n  }\n  @media(max-width:900px){\n    .rag-hub .hero-inner{grid-template-columns:1fr;gap:20px}\n    .rag-hub .hero-logo{order:-1;justify-content:flex-start}\n    .rag-hub .hero-logo img{max-width:240px}\n  }\n\n  \/* ---------- Hero ---------- *\/\n  .rag-hub .hero{padding:54px 0 30px;position:relative;overflow:hidden}\n  .rag-hub .eyebrow{\n    display:inline-flex;align-items:center;gap:8px;\n    font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);\n    font-weight:700;margin-bottom:18px;\n  }\n  .rag-hub .eyebrow::before{content:\"\";width:26px;height:1px;background:linear-gradient(90deg,var(--gold),transparent)}\n  .rag-hub .hero h1{\n    font-family:\"Cinzel\",serif;font-weight:800;\n    font-size:clamp(2.3rem,6vw,4.4rem);line-height:1.02;margin:0 0 18px;\n    letter-spacing:.01em;color:var(--text);-webkit-text-fill-color:var(--text);\n  }\n  .rag-hub .hero h1 .glow{\n    background:linear-gradient(180deg,#ffe6a3,var(--gold) 55%,var(--gold-deep));\n    -webkit-background-clip:text;background-clip:text;\n    color:transparent;-webkit-text-fill-color:transparent;\n    filter:drop-shadow(0 2px 20px rgba(244,192,78,.28));\n  }\n  .rag-hub .hero p.lede{max-width:560px;color:var(--muted);font-size:clamp(1rem,2.4vw,1.15rem);margin:0 0 26px}\n  .rag-hub .hero-search{position:relative;max-width:560px}\n  .rag-hub .hero-search input{\n    width:100%;height:56px;border-radius:14px;border:1px solid var(--line);\n    background:rgba(255,255,255,.05);color:var(--text);\n    padding:0 18px 0 52px;font-size:16px;font-family:inherit;outline:none;\n    transition:border-color .2s,background .2s;\n  }\n  .rag-hub .hero-search input::placeholder{color:var(--muted-2)}\n  .rag-hub .hero-search input:focus{border-color:rgba(244,192,78,.55);background:rgba(255,255,255,.08);box-shadow:0 0 0 4px rgba(244,192,78,.10)}\n  .rag-hub .hero-search svg{position:absolute;left:18px;top:50%;transform:translateY(-50%);opacity:.6}\n  .rag-hub .stats{display:flex;gap:26px;margin-top:24px;flex-wrap:wrap}\n  .rag-hub .stat b{font-family:\"Cinzel\",serif;font-size:1.5rem;color:var(--text);display:block;line-height:1}\n  .rag-hub .stat span{font-size:12.5px;color:var(--muted-2);letter-spacing:.03em}\n\n  \/* ---------- Section headings ---------- *\/\n  .rag-hub .sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:14px 0 18px}\n  .rag-hub .sec-head h2{\n    font-family:\"Cinzel\",serif;font-weight:700;font-size:clamp(1.25rem,3.2vw,1.7rem);margin:0;\n    color:var(--text);-webkit-text-fill-color:var(--text);\n    display:flex;align-items:center;gap:12px;\n  }\n  .rag-hub .sec-head h2 .rune{width:9px;height:22px;background:linear-gradient(180deg,var(--gold),var(--gold-deep));border-radius:2px;box-shadow:0 0 14px rgba(244,192,78,.5)}\n  .rag-hub .sec-head .hint{color:var(--muted-2);font-size:13px}\n\n  \/* ---------- Featured rail ---------- *\/\n  .rag-hub #featured{padding:22px 0 8px}\n  .rag-hub .rail{\n    display:grid;grid-auto-flow:column;grid-auto-columns:minmax(270px,1fr);\n    gap:18px;overflow-x:auto;padding:4px 4px 18px;scroll-snap-type:x mandatory;\n    scrollbar-width:thin;scrollbar-color:rgba(138,125,255,.4) transparent;\n  }\n  .rag-hub .rail::-webkit-scrollbar{height:8px}\n  .rag-hub .rail::-webkit-scrollbar-thumb{background:rgba(138,125,255,.35);border-radius:8px}\n  @media(min-width:900px){ .rag-hub .rail{grid-auto-columns:1fr;overflow:visible} }\n  .rag-hub .feat{\n    scroll-snap-align:start;border-radius:var(--radius);overflow:hidden;\n    border:1px solid var(--line);background:var(--panel);\n    display:flex;flex-direction:column;\n    box-shadow:var(--shadow);transition:transform .25s ease,border-color .25s;\n  }\n  .rag-hub .feat:hover{transform:translateY(-5px);border-color:rgba(244,192,78,.45)}\n  .rag-hub .feat .media{position:relative;aspect-ratio:16\/10;overflow:hidden;background:var(--midnight-2)}\n  .rag-hub .feat .media .fallback{position:absolute;inset:0;z-index:1}\n  .rag-hub .feat .media .art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:2}\n  .rag-hub .feat .body{padding:15px 16px 16px;display:flex;flex-direction:column;gap:10px}\n  .rag-hub .feat h3{\n    font-family:\"Cinzel\",serif;font-weight:700;font-size:1.12rem;margin:0;line-height:1.15;color:var(--text);\n    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;\n    min-height:2.3em;\n  }\n  .rag-hub .feat .meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n  .rag-hub .feat .price{margin-left:auto;text-align:right;line-height:1.1}\n  .rag-hub .feat .price small{display:block;font-size:10px;color:var(--muted-2);letter-spacing:.04em}\n  .rag-hub .feat .price b{font-size:15px;color:var(--gold)}\n  .rag-hub .feat .go{margin-top:2px;display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:13.5px;color:var(--text)}\n  .rag-hub .feat .go svg{transition:transform .2s}\n  .rag-hub .feat:hover .go svg{transform:translateX(4px)}\n\n  \/* ---------- Controls ---------- *\/\n  .rag-hub .controls{\n    position:sticky;top:66px;z-index:20;padding:14px 0;margin-top:8px;\n    background:linear-gradient(180deg,rgba(10,12,34,.96),rgba(10,12,34,.86));\n    backdrop-filter:blur(10px);border-bottom:1px solid var(--line);\n  }\n  .rag-hub .controls-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}\n  .rag-hub .filt-label{\n    font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;\n    color:var(--muted-2);flex-shrink:0;\n  }\n  .rag-hub .filt-label::after{content:\"\u00b7\";margin-left:10px;opacity:.5}\n  @media(max-width:560px){ .rag-hub .filt-label{width:100%} .rag-hub .filt-label::after{content:\"\"} }\n  .rag-hub .chips{display:flex;gap:8px;flex-wrap:wrap;flex:1;min-width:0}\n\n  \/* Hide the in-game currency filter on mobile only (must come AFTER .chips) *\/\n  @media(max-width:700px){\n    .rag-hub .filt-label,\n    .rag-hub .chips{ display:none }\n  }\n  .rag-hub .chip{\n    border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--muted);\n    padding:8px 15px;border-radius:999px;font-size:13px;font-weight:600;cursor:pointer;\n    font-family:inherit;white-space:nowrap;transition:.18s;\n  }\n  .rag-hub .chip:hover{color:var(--text);border-color:rgba(138,125,255,.5)}\n  .rag-hub .chip[aria-pressed=\"true\"]{\n    background:linear-gradient(180deg,#ffe29a,var(--gold));color:#3a2a06;border-color:transparent;\n    box-shadow:0 6px 18px -8px rgba(244,192,78,.7);\n  }\n  .rag-hub .sortsel{position:relative;flex-shrink:0}\n  .rag-hub .sortsel select{\n    appearance:none;font-family:inherit;font-size:13px;font-weight:600;color:var(--text);\n    background:#1a2054;border:1px solid var(--line);border-radius:999px;\n    padding:9px 34px 9px 15px;cursor:pointer;outline:none;\n  }\n  .rag-hub .sortsel select option{background:#141a45;color:#eef0ff}\n  .rag-hub .sortsel::after{content:\"\u25be\";position:absolute;right:14px;top:50%;transform:translateY(-50%);color:var(--muted-2);pointer-events:none;font-size:11px}\n  .rag-hub .count{width:100%;color:var(--muted-2);font-size:12.5px;margin-top:2px}\n\n  \/* ---------- Grid: 18 cards \u2192 2\u00d79 \/ 3\u00d76 \/ 6\u00d73, never a ragged last row ---------- *\/\n  .rag-hub #grid-sec{padding:26px 0 60px}\n  .rag-hub .grid{display:grid;gap:14px;grid-template-columns:repeat(2,1fr)}\n  @media(min-width:700px){  .rag-hub .grid{gap:16px;grid-template-columns:repeat(3,1fr)} }\n  @media(min-width:1100px){ .rag-hub .grid{grid-template-columns:repeat(6,1fr)} }\n\n  .rag-hub .card{\n    position:relative;border-radius:14px;overflow:hidden;border:1px solid var(--line);\n    background:var(--panel);display:flex;flex-direction:column;\n    transition:transform .2s ease,border-color .2s,box-shadow .2s;\n  }\n  .rag-hub .card:hover{transform:translateY(-4px);border-color:rgba(244,192,78,.5);box-shadow:var(--shadow)}\n  .rag-hub .card:focus-visible{outline:2px solid var(--gold);outline-offset:2px}\n  .rag-hub .thumb{position:relative;aspect-ratio:4\/5;overflow:hidden;background:var(--midnight-2)}\n  .rag-hub .thumb .art{width:100%;height:100%;object-fit:cover;position:relative;z-index:2}\n  .rag-hub .thumb .fallback{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;padding:14px}\n  .rag-hub .fallback .mono{\n    font-family:\"Cinzel\",serif;font-weight:700;text-align:center;line-height:1.1;\n    font-size:clamp(.95rem,3.4vw,1.15rem);color:rgba(255,255,255,.92);\n    text-shadow:0 2px 12px rgba(0,0,0,.4);\n  }\n  .rag-hub .fallback::after{content:\"\";position:absolute;inset:0;background:\n    radial-gradient(120% 80% at 50% 0%, rgba(255,255,255,.14), transparent 60%),\n    linear-gradient(180deg, rgba(9,11,32,0) 55%, rgba(9,11,32,.55))}\n  .rag-hub .thumb .tag{position:absolute;top:9px;left:9px;z-index:3}\n  .rag-hub .card .info{padding:11px 12px 13px;display:flex;flex-direction:column;gap:9px;flex:1}\n  .rag-hub .card .name{\n    font-weight:700;font-size:13.5px;line-height:1.25;letter-spacing:.005em;\n    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;\n    min-height:2.5em;\n  }\n  .rag-hub .card .foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:6px}\n  .rag-hub .card .from{line-height:1.05}\n  .rag-hub .card .from small{display:block;font-size:9.5px;color:var(--muted-2)}\n  .rag-hub .card .from b{font-size:13px;color:var(--gold)}\n  .rag-hub .card .cek{font-size:11.5px;color:var(--muted-2);font-weight:600}\n  .rag-hub .card .arrow{color:var(--muted);transition:transform .2s,color .2s;flex-shrink:0}\n  .rag-hub .card:hover .arrow{color:var(--gold);transform:translateX(3px)}\n\n  \/* currency chip *\/\n  .rag-hub .cur{\n    display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;\n    padding:4px 9px;border-radius:999px;letter-spacing:.01em;\n    background:rgba(10,12,34,.55);border:1px solid rgba(255,255,255,.12);color:var(--text);\n    backdrop-filter:blur(4px);white-space:nowrap;\n  }\n  .rag-hub .cur .gem{width:8px;height:8px;border-radius:2px;transform:rotate(45deg);flex-shrink:0}\n  .rag-hub .cur[data-c=\"Diamonds\"] .gem{background:var(--ice);box-shadow:0 0 8px var(--ice)}\n  .rag-hub .cur[data-c=\"Nyan Berry\"] .gem{background:var(--berry);box-shadow:0 0 8px var(--berry)}\n  .rag-hub .cur[data-c=\"Starstones\"] .gem{background:var(--gold);box-shadow:0 0 8px var(--gold)}\n  .rag-hub .cur[data-c=\"Zeny\"] .gem{background:var(--teal);box-shadow:0 0 8px var(--teal)}\n  .rag-hub .cur[data-c=\"Big Cat Coins\"] .gem{background:var(--amber);box-shadow:0 0 8px var(--amber)}\n  .rag-hub .cur[data-c=\"Top Up\"] .gem{background:var(--violet);box-shadow:0 0 8px var(--violet)}\n\n  \/* empty state *\/\n  .rag-hub .empty{display:none;text-align:center;padding:60px 20px;color:var(--muted)}\n  .rag-hub .empty.show{display:block}\n  .rag-hub .empty .poring{width:76px;height:76px;margin:0 auto 18px}\n  .rag-hub .empty h3{font-family:\"Cinzel\",serif;color:var(--text);margin:0 0 6px;font-size:1.2rem}\n  .rag-hub .empty button{margin-top:16px;background:none;border:1px solid var(--line);color:var(--text);\n    padding:9px 18px;border-radius:999px;font-family:inherit;font-weight:600;cursor:pointer}\n  .rag-hub .empty button:hover{border-color:var(--gold);color:var(--gold)}\n\n  \/* ---------- Blog strip ---------- *\/\n  .rag-hub #blog-sec{padding:8px 0 60px;display:none}   \/* shown once posts load *\/\n  .rag-hub #blog-sec.show{display:block}\n  .rag-hub .blog-all{color:var(--gold)!important;font-weight:600;white-space:nowrap}\n  .rag-hub .blog-grid{display:grid;gap:16px;grid-template-columns:repeat(4,1fr)}\n  @media(max-width:900px){ .rag-hub .blog-grid{grid-template-columns:repeat(2,1fr);gap:12px} }\n  .rag-hub .post{display:flex;flex-direction:column;overflow:hidden;\n    border:1px solid var(--line);border-radius:14px;background:var(--panel);\n    transition:transform .2s,border-color .2s,box-shadow .2s}\n  .rag-hub .post:hover{transform:translateY(-4px);border-color:rgba(244,192,78,.5);box-shadow:var(--shadow)}\n  .rag-hub .post-thumb{position:relative;aspect-ratio:16\/9;overflow:hidden;background:var(--midnight-2)}\n  .rag-hub .post-thumb .fallback{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center}\n  .rag-hub .post-thumb .fallback span{font-family:\"Cinzel\",serif;font-weight:700;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.5)}\n  .rag-hub .post-thumb .art{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:2}\n  .rag-hub .post-title{\n    padding:12px 14px 15px;font-weight:700;font-size:14px;line-height:1.32;margin:0;\n    color:var(--text);transition:color .2s;\n    display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;\n    min-height:calc(3 * 1.32em + 27px);\n  }\n  .rag-hub .post:hover .post-title{color:var(--gold)}\n\n  \/* ---------- Footer ---------- *\/\n  .rag-hub footer{border-top:1px solid var(--line);padding:34px 0 46px;color:var(--muted-2);font-size:13px}\n  .rag-hub footer .frow{display:flex;gap:22px;flex-wrap:wrap;align-items:center;justify-content:space-between}\n  .rag-hub footer a.ext{color:var(--gold);font-weight:600}\n  .rag-hub footer .note{max-width:640px;margin-top:16px;font-size:12px;line-height:1.6;color:var(--muted-2)}\n\n  .rag-hub :focus-visible{outline:2px solid var(--gold);outline-offset:2px}\n\n  @media (prefers-reduced-motion:reduce){\n    .rag-hub *{transition:none!important;scroll-behavior:auto!important}\n  }\n<\/style>\n\n<header>\n  <div class=\"wrap bar\">\n    <a class=\"brand\" href=\"https:\/\/www.lapakgaming.com\/en-my\" target=\"_blank\" rel=\"noopener\" aria-label=\"Lapakgaming home\">\n      <img class=\"brand-logo\" src=\"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png\" alt=\"Ragnarok Online\" referrerpolicy=\"no-referrer\" decoding=\"async\">\n      <span class=\"brand-tag\">Hub \u00b7 Lapakgaming MY<\/span>\n    <\/a>\n    <div class=\"head-search\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle><path d=\"M21 21l-4-4\"><\/path><\/svg>\n      <input id=\"searchTop\" type=\"search\" placeholder=\"Search Ragnarok games\u2026\" aria-label=\"Search Ragnarok games\">\n    <\/div>\n  <\/div>\n<\/header>\n\n<section class=\"hero\">\n  <div class=\"wrap hero-inner\">\n    <div class=\"hero-copy\">\n      <span class=\"eyebrow\">The World of Midgard<\/span>\n      <h1>Every <span class=\"glow\">Ragnarok<\/span> game<br>in one place<\/h1>\n      <p class=\"lede\">All the Ragnarok titles available on Lapakgaming Malaysia, ranked by what Malaysian players top up most. Pick your game, then head to its official product page.<\/p>\n      <div class=\"hero-search\">\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"><\/circle><path d=\"M21 21l-4-4\"><\/path><\/svg>\n        <input id=\"searchHero\" type=\"search\" placeholder=\"Search a title \u2014 M Eternal Love, Ragnarok X, Origin\u2026\" aria-label=\"Search Ragnarok games\">\n      <\/div>\n      <div class=\"stats\">\n        <div class=\"stat\"><b>100%<\/b><span>Official supply<\/span><\/div>\n        <div class=\"stat\"><b>24 Hours<\/b><span>Top up processing<\/span><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"hero-logo\">\n      <img src=\"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png\" alt=\"Ragnarok Online\" referrerpolicy=\"no-referrer\" decoding=\"async\">\n    <\/div>\n  <\/div>\n<\/section>\n\n<section id=\"featured\">\n  <div class=\"wrap\">\n    <div class=\"sec-head\">\n      <h2><span class=\"rune\"><\/span>Featured<\/h2>\n      <span class=\"hint\">Best-Selling Ragnarok Titles<\/span>\n    <\/div>\n    <div class=\"rail\" id=\"rail\"><\/div>\n  <\/div>\n<\/section>\n\n<div class=\"controls\">\n  <div class=\"wrap\">\n    <div class=\"controls-row\">\n      <span class=\"filt-label\">In-game currency<\/span>\n      <div class=\"chips\" id=\"chips\" role=\"group\" aria-label=\"Filter by in-game currency\"><\/div>\n      <div class=\"sortsel\">\n        <select id=\"sort\" aria-label=\"Sort\">\n          <option value=\"feat\">Sort: Best selling<\/option>\n          <option value=\"az\">Name A\u2013Z<\/option>\n          <option value=\"za\">Name Z\u2013A<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"count\" id=\"count\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<section id=\"grid-sec\">\n  <div class=\"wrap\">\n    <div class=\"sec-head\" id=\"gridHead\">\n      <h2><span class=\"rune\"><\/span>All Ragnarok Games<\/h2>\n      <span class=\"hint\">Ranked by best selling \u00b7 tap a card to top up<\/span>\n    <\/div>\n    <div class=\"grid\" id=\"grid\"><\/div>\n    <div class=\"empty\" id=\"empty\">\n      <svg class=\"poring\" viewBox=\"0 0 100 100\" aria-hidden=\"true\">\n        <ellipse cx=\"50\" cy=\"58\" rx=\"40\" ry=\"36\" fill=\"#ff86bd\"><\/ellipse>\n        <ellipse cx=\"50\" cy=\"52\" rx=\"40\" ry=\"36\" fill=\"#ff9ecb\"><\/ellipse>\n        <circle cx=\"37\" cy=\"48\" r=\"6\" fill=\"#2a1030\"><\/circle><circle cx=\"63\" cy=\"48\" r=\"6\" fill=\"#2a1030\"><\/circle>\n        <circle cx=\"39\" cy=\"46\" r=\"2\" fill=\"#fff\"><\/circle><circle cx=\"65\" cy=\"46\" r=\"2\" fill=\"#fff\"><\/circle>\n        <path d=\"M40 64 q10 9 20 0\" stroke=\"#2a1030\" stroke-width=\"3\" fill=\"none\" stroke-linecap=\"round\"><\/path>\n        <path d=\"M50 16 l6 12 h-12 z\" fill=\"#ffd36b\"><\/path>\n      <\/svg>\n      <h3>The Poring got away\u2026<\/h3>\n      <p>No Ragnarok game matches your search.<\/p>\n      <button id=\"resetBtn\" type=\"button\">Reset search<\/button>\n    <\/div>\n  <\/div>\n<\/section>\n\n<section id=\"blog-sec\">\n  <div class=\"wrap\">\n    <div class=\"sec-head\">\n      <h2><span class=\"rune\"><\/span>From the Ragnarok Blog<\/h2>\n      <a class=\"hint blog-all\" id=\"blogAll\" href=\"https:\/\/www.lapakgaming.com\/blog\/en-my\/\" target=\"_blank\" rel=\"noopener\">View all \u2192<\/a>\n    <\/div>\n    <div class=\"blog-grid\" id=\"blog\"><\/div>\n  <\/div>\n<\/section>\n\n<footer>\n  <div class=\"wrap\">\n    <div class=\"frow\">\n      <span>Ragnarok catalogue hub \u00b7 data from <a class=\"ext\" href=\"https:\/\/www.lapakgaming.com\/en-my\" target=\"_blank\" rel=\"noopener\">lapakgaming.com\/en-my<\/a><\/span>\n      <a class=\"ext\" href=\"https:\/\/www.lapakgaming.com\/en-my\" target=\"_blank\" rel=\"noopener\">Open Lapakgaming \u2192<\/a>\n    <\/div>\n    <p class=\"note\">Every card links to the official Lapakgaming Malaysia product page for that title. Games are ordered by recent sales in the en-my catalogue. &#8220;Starting from&#8221; prices are a snapshot and may change \u2014 the product page is always the final word. Titles with several top up methods (via Login, Drop Link OOC\/GOC) appear as separate cards, matching their separate product pages.<\/p>\n  <\/div>\n<\/footer>\n\n<script data-cfasync=\"false\">\n\/* ---- Ragnarok catalogue (lapakgaming.com\/en-my) ---- *\/\n\n\/* Every outbound link to the shop gets this campaign tag \u2014 edit in one place. *\/\nconst UTM = \"utm_source=SEO&utm_medium=BLOG&utm_campaign=RagnarokHubPageMY\";\nconst withUTM = u => u + (u.indexOf(\"?\") === -1 ? \"?\" : \"&\") + UTM;\n\nconst cdn = p => \"https:\/\/img.lapakgaming.com\/?src=\" + encodeURIComponent(p) + \"&w=720&q=75&f=webp\";\n\n\/* ART \u2014 served from Lapakgaming's own CDN (img.lapakgaming.com).\n   These are the same asset paths already proven on the id-id hub. *\/\nconst cdn2 = enc => \"https:\/\/img.lapakgaming.com\/?src=\" + enc + \"&w=720&q=75&f=webp&onerror=redirect\";\nconst ART = {\n  mel:      cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fimages%2Fcategory%2Fragnarok-m-eternal-love.webp\"),\n  x:        cdn(\"https:\/\/www.lapakgaming.com\/static\/banner\/lapakgaming\/202601\/Ragnarok X.png\"),\n  oriClas:  cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2FRagnarok+Origin+Classic.jpg\"),\n  origin:   cdn(\"https:\/\/www.lapakgaming.com\/static\/banner\/lapakgaming\/202601\/Ragnarok Origin.png\"),\n  mClassic: cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2FROM+Classic.jpg\"),\n  theRag:   cdn(\"https:\/\/www.lapakgaming.com\/static\/category\/The Ragnarok Icon.png\"),\n  tnw:      cdn(\"https:\/\/www.lapakgaming.com\/static\/category\/rotnw.png\"),\n  idle:     cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2Fragnarok-idle-adventure-plus.png\"),\n  zero:     cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2Fdownload+%281%29.jpg\"),\n  twilight: cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2FRO+TWILIGHT+PNG+.png\"),\n  btg:      cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2FRagnarok+Back+to+Glory+via+Login.jpg\"),\n  ggl:      cdn2(\"https%3A%2F%2Fwww.lapakgaming.com%2Fstatic%2Fcategory%2Fpdp-ragnarok-classic.jpg\")\n};\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   PRICES \u2014 starting price in MYR, keyed by game id.\n   \u25b8 Fill in the nulls with the lowest denomination price from each\n     product page. A null simply shows \"Check price\" on the card.\n   \u25b8 Numbers only \u2014 no \"RM\", no commas. e.g. 12.90\n   \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nconst PRICES = {\n  \"mel-sea\":                null,   \/\/ \u2190 add\n  \"x-id-number\":            null,   \/\/ \u2190 add\n  \"origin-classic\":         null,   \/\/ \u2190 add\n  \"origin-package\":         null,   \/\/ \u2190 add\n  \"mclassic-uid\":           null,   \/\/ \u2190 add\n  \"origin-classic-login\":   null,   \/\/ \u2190 add\n  \"therag-ooc\":             null,   \/\/ \u2190 add\n  \"origin-global\":          null,   \/\/ \u2190 add\n  \"tnw\":                    null,   \/\/ \u2190 add\n  \"idle-plus\":              null,   \/\/ \u2190 add\n  \"zero-global\":            null,   \/\/ \u2190 add\n  \"therag-goc\":             null,   \/\/ \u2190 add\n  \"twilight-goc\":           null,   \/\/ \u2190 add\n  \"therag-login\":           null,   \/\/ \u2190 add\n  \"btg-droplink\":           null,   \/\/ \u2190 add\n  \"twilight-ooc\":           null,   \/\/ \u2190 add\n  \"classic-ggl\":            null,   \/\/ \u2190 add\n  \"twilight\":               null    \/\/ \u2190 add\n};\n\n\/* Each entry is its OWN product page (variants kept separate).\n   Order = ranking by MY GMV. Starting prices live in the PRICES block above. *\/\nconst GAMES = [\n  {id:\"mel-sea\",                 name:\"Ragnarok M Eternal Love SEA\",             url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-m-eternal-love\",               cur:\"Big Cat Coins\",   img:ART.mel},\n  {id:\"x-id-number\",             name:\"Ragnarok X - ID Number\",                  url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-x\",                            cur:\"Diamonds\",        img:ART.x},\n  {id:\"origin-classic\",          name:\"Ragnarok Origin Classic\",                 url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-origin-classic\",               cur:\"Nyan Berry\",      img:ART.oriClas},\n  {id:\"origin-package\",          name:\"Ragnarok Origin Global - Package\",        url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-origin-special-pack\",          cur:\"Nyan Berry\",      img:ART.origin},\n  {id:\"mclassic-uid\",            name:\"Ragnarok M Classic - UID\",                url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-m-classic\",                    cur:\"Zeny\",            img:ART.mClassic},\n  {id:\"origin-classic-login\",    name:\"Ragnarok Origin Classic via Login\",       url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-origin-classic-login\",         cur:\"Nyan Berry\",      img:ART.oriClas},\n  {id:\"therag-ooc\",              name:\"The Ragnarok - Drop Link OOC\",            url:\"https:\/\/www.lapakgaming.com\/en-my\/the-ragnarok-sea-link\",                 cur:\"Diamonds\",        img:ART.theRag},\n  {id:\"origin-global\",           name:\"Ragnarok Origin Global\",                  url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-origin\",                       cur:\"Nyan Berry\",      img:ART.origin},\n  {id:\"tnw\",                     name:\"Ragnarok The New World\",                  url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-the-new-world\",                cur:\"Starstones\",      img:ART.tnw},\n  {id:\"idle-plus\",               name:\"Ragnarok Idle Adventure Plus\",            url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-idle-adventure-plus\",          cur:\"Top Up\",          img:ART.idle},\n  {id:\"zero-global\",             name:\"Ragnarok Zero: Global\",                   url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-zero-global\",                  cur:\"Top Up\",          img:ART.zero},\n  {id:\"therag-goc\",              name:\"The Ragnarok - Drop Link GOC\",            url:\"https:\/\/www.lapakgaming.com\/en-my\/the-ragnarok-sea\",                      cur:\"Diamonds\",        img:ART.theRag},\n  {id:\"twilight-goc\",            name:\"Ragnarok Twilight - Drop Link GOC\",       url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-twilight-drop-link-goc\",       cur:\"Top Up\",          img:ART.twilight},\n  {id:\"therag-login\",            name:\"The Ragnarok - Via Login\",                url:\"https:\/\/www.lapakgaming.com\/en-my\/the-ragnarok-login\",                    cur:\"Diamonds\",        img:ART.theRag},\n  {id:\"btg-droplink\",            name:\"Ragnarok Back to Glory Drop Link\",        url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-back-to-glory\",                cur:\"Top Up\",          img:ART.btg},\n  {id:\"twilight-ooc\",            name:\"Ragnarok Twilight - Drop Link OOC\",       url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-twilight\",                     cur:\"Top Up\",          img:ART.twilight},\n  {id:\"classic-ggl\",             name:\"Ragnarok Classic by GGL\",                 url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-classic\",                      cur:\"Top Up\",          img:ART.ggl},\n  {id:\"twilight\",                name:\"Ragnarok Twilight\",                       url:\"https:\/\/www.lapakgaming.com\/en-my\/ragnarok-twilight-uid\",                 cur:\"Top Up\",          img:ART.twilight}\n];\n\n\/* \u2500\u2500 Featured row: which titles appear under \"Featured\". Order matters. \u2500\u2500 *\/\nconst FEATURED = [\n  \"mel-sea\",\n  \"x-id-number\",\n  \"origin-classic\",\n  \"origin-package\",\n  \"mclassic-uid\"\n];\nGAMES.forEach((g,i)=>{ g.order = i; g.feat = FEATURED.includes(g.id); g.from = PRICES[g.id] || null; });\n\n\/* deterministic cohesive gradient for art-less tiles *\/\nfunction tileGradient(name){\n  let h=0; for(const c of name) h=(h*31+c.charCodeAt(0))>>>0;\n  const hue = 218 + (h % 74);\n  const hue2 = (hue + 26) % 360;\n  if(h % 5 === 0) return \"linear-gradient(150deg,#3a2c53,#241b46 55%,#141031)\";\n  return `linear-gradient(150deg,hsl(${hue} 46% 26%),hsl(${hue2} 52% 15%))`;\n}\nconst myr = n => \"RM\" + Number(n).toLocaleString(\"en-MY\",{minimumFractionDigits:2,maximumFractionDigits:2});\nconst curChip = c => `<span class=\"cur\" data-c=\"${c}\"><span class=\"gem\"><\/span>${c}<\/span>`;\n\n\/* ---- Featured rail ---- *\/\nfunction renderRail(){\n  const feats = FEATURED.map(id => GAMES.find(g => g.id === id)).filter(Boolean);\n  document.getElementById(\"rail\").innerHTML = feats.map(g=>`\n    <a class=\"feat\" href=\"${withUTM(g.url)}\" target=\"_blank\" rel=\"noopener\" aria-label=\"Top up ${g.name}\">\n      <div class=\"media\">\n        <div class=\"fallback\" style=\"background:${tileGradient(g.name)}\"><\/div>\n        <img class=\"art\" src=\"${g.img}\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" onerror=\"this.remove()\">\n      <\/div>\n      <div class=\"body\">\n        <h3>${g.name}<\/h3>\n        <div class=\"meta\">\n          ${curChip(g.cur)}\n          ${g.from ? `<span class=\"price\"><small>starting from<\/small><b>${myr(g.from)}<\/b><\/span>` : ``}\n        <\/div>\n        <span class=\"go\">Top up now\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\n        <\/span>\n      <\/div>\n    <\/a>`).join(\"\");\n}\n\n\/* ---- Grid ---- *\/\nfunction cardHTML(g){\n  const priceBlock = g.from\n    ? `<span class=\"from\"><small>starting from<\/small><b>${myr(g.from)}<\/b><\/span>`\n    : `<span class=\"cek\">Check price<\/span>`;\n  return `\n   <a class=\"card\" href=\"${withUTM(g.url)}\" target=\"_blank\" rel=\"noopener\" aria-label=\"Top up ${g.name}\">\n     <div class=\"thumb\">\n       <div class=\"fallback\" style=\"background:${tileGradient(g.name)}\"><span class=\"mono\">${g.name}<\/span><\/div>\n       <img class=\"art\" src=\"${g.img}\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" onerror=\"this.remove()\">\n       <span class=\"tag\">${curChip(g.cur)}<\/span>\n     <\/div>\n     <div class=\"info\">\n       <span class=\"name\">${g.name}<\/span>\n       <span class=\"foot\">\n         ${priceBlock}\n         <svg class=\"arrow\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\n       <\/span>\n     <\/div>\n   <\/a>`;\n}\n\nlet state = {q:\"\", cur:\"all\", sort:\"feat\"};\n\nfunction apply(){\n  let list = GAMES.slice();\n  const q = state.q.trim().toLowerCase();\n  if(q) list = list.filter(g => g.name.toLowerCase().includes(q));\n  if(state.cur !== \"all\") list = list.filter(g => g.cur === state.cur);\n  if(state.sort === \"az\") list.sort((a,b)=>a.name.localeCompare(b.name));\n  else if(state.sort === \"za\") list.sort((a,b)=>b.name.localeCompare(a.name));\n  else list.sort((a,b)=>(b.feat?1:0)-(a.feat?1:0) || a.order-b.order);\n\n  document.getElementById(\"grid\").innerHTML = list.map(cardHTML).join(\"\");\n  document.getElementById(\"count\").textContent =\n    `${list.length} game${list.length===1?\"\":\"s\"}${state.cur!==\"all\"?\" \u00b7 \"+state.cur:\"\"}${q?` \u00b7 \"${state.q}\"`:\"\"}`;\n  document.getElementById(\"empty\").classList.toggle(\"show\", list.length===0);\n  document.getElementById(\"grid\").style.display = list.length===0 ? \"none\":\"grid\";\n\n  const searching = !!q;\n  document.getElementById(\"featured\").style.display = searching ? \"none\":\"block\";\n  document.getElementById(\"gridHead\").style.display = searching ? \"none\":\"flex\";\n}\n\n\/* ---- currency filter chips ---- *\/\nfunction buildChips(){\n  const order = [\"all\",\"Zeny\",\"Big Cat Coins\",\"Nyan Berry\",\"Diamonds\",\"Starstones\",\"Top Up\"];\n  const label = {all:\"All\", \"Top Up\":\"Other\"};\n  const wrap = document.getElementById(\"chips\");\n  wrap.innerHTML = order.map((c,i)=>\n    `<button class=\"chip\" type=\"button\" data-cur=\"${c}\" aria-pressed=\"${i===0}\">${label[c]||c}<\/button>`\n  ).join(\"\");\n  wrap.addEventListener(\"click\", e=>{\n    const b = e.target.closest(\".chip\"); if(!b) return;\n    state.cur = b.dataset.cur;\n    wrap.querySelectorAll(\".chip\").forEach(x=>x.setAttribute(\"aria-pressed\", x===b));\n    apply();\n  });\n}\n\n\/* ---- search sync (hero + header) ---- *\/\nfunction bindSearch(){\n  const hero = document.getElementById(\"searchHero\");\n  const top  = document.getElementById(\"searchTop\");\n  const on = v => { state.q = v; hero.value = v; top.value = v; apply(); };\n  hero.addEventListener(\"input\", e=>on(e.target.value));\n  top.addEventListener(\"input\", e=>on(e.target.value));\n  document.getElementById(\"resetBtn\").addEventListener(\"click\", ()=>{ on(\"\"); hero.focus(); });\n}\n\n\/* ---- Blog strip ----\n   Resolves the Ragnarok category ID by slug at runtime, then pulls that\n   category's latest posts \u2014 so new articles appear here automatically and\n   you never have to hard-code an ID. If the API can't be reached the whole\n   blog section stays hidden rather than showing anything wrong. *\/\nconst BLOG_BASE  = \"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\";\nconst BLOG_CAT_SLUG = \"ragnarok\";\nconst BLOG_CAT_ID   = null;   \/\/ optional: hard-code the ID here to skip the lookup\nconst BLOG_LIMIT = 4;\n\nfunction postImage(post){\n  const media = post._embedded && post._embedded[\"wp:featuredmedia\"] && post._embedded[\"wp:featuredmedia\"][0];\n  if(media){\n    const sizes = media.media_details && media.media_details.sizes;\n    const src = (sizes && ((sizes.medium_large && sizes.medium_large.source_url) ||\n                           (sizes.large        && sizes.large.source_url) ||\n                           (sizes.medium       && sizes.medium.source_url)))\n             || media.source_url;\n    if(src) return src;\n  }\n  if(post.jetpack_featured_media_url) return post.jetpack_featured_media_url;\n  const html = (post.content && post.content.rendered) || \"\";\n  const m = html.match(\/<img[^>]+src=[\"']([^\"']+\\.(?:jpe?g|png|webp))(?:\\?[^\"']*)?[\"']\/i);\n  return m ? m[1] : \"\";\n}\n\nconst decodeEntities = s => {\n  const t = document.createElement(\"textarea\");\n  t.innerHTML = s; return t.value;\n};\n\nfunction renderBlog(list){\n  const el = document.getElementById(\"blog\");\n  if(!el) return;\n  el.innerHTML = list.slice(0, BLOG_LIMIT).map(p=>`\n    <a class=\"post\" href=\"${p.url}\" target=\"_blank\" rel=\"noopener\">\n      <div class=\"post-thumb\">\n        <div class=\"fallback\" style=\"background:${tileGradient(p.title)}\"><span>Ragnarok<\/span><\/div>\n        ${p.img ? `<img class=\"art\" src=\"${p.img}\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" onerror=\"this.remove()\">` : ``}\n      <\/div>\n      <h3 class=\"post-title\">${p.title}<\/h3>\n    <\/a>`).join(\"\");\n  document.getElementById(\"blog-sec\").classList.add(\"show\");\n}\n\nasync function resolveCategoryId(){\n  if(BLOG_CAT_ID) return BLOG_CAT_ID;\n  const r = await fetch(`${BLOG_BASE}\/categories?slug=${BLOG_CAT_SLUG}`, { headers:{ \"Accept\":\"application\/json\" } });\n  if(!r.ok) throw new Error(\"categories HTTP \" + r.status);\n  const cats = await r.json();\n  if(!Array.isArray(cats) || !cats.length) throw new Error(\"category '\" + BLOG_CAT_SLUG + \"' not found\");\n  return cats[0].id;\n}\n\nasync function loadBlog(){\n  try{\n    const catId = await resolveCategoryId();\n    const r = await fetch(`${BLOG_BASE}\/posts?categories=${catId}&per_page=${BLOG_LIMIT}&_embed=1`,\n                          { headers:{ \"Accept\":\"application\/json\" } });\n    if(!r.ok) throw new Error(\"posts HTTP \" + r.status);\n    let data = await r.json();\n    if(!Array.isArray(data) || !data.length) throw new Error(\"no posts\");\n    \/\/ the host may strip query params \u2014 filter to the right category ourselves\n    const inCat = data.filter(p => Array.isArray(p.categories) && p.categories.includes(catId));\n    if(inCat.length) data = inCat;\n    const posts = data.slice(0, BLOG_LIMIT).map(p => ({\n      title: decodeEntities((p.title && p.title.rendered) || \"\"),\n      url:   p.link,\n      img:   postImage(p)\n    }));\n    if(posts.length){\n      renderBlog(posts);\n      console.log(\"Ragnarok blog: \" + posts.length + \" posts loaded (category \" + catId + \"), \" +\n                  posts.filter(p=>p.img).length + \" with a thumbnail.\");\n    }\n  }catch(e){\n    console.warn(\"Ragnarok blog hidden \u2014 could not load posts.\", e);\n  }\n}\n\n\/* ---- boot: run once the DOM exists, wherever this script is placed ---- *\/\nfunction init(){\n  if(!document.getElementById(\"grid\")) return;\n  const sortEl = document.getElementById(\"sort\");\n  if(sortEl) sortEl.addEventListener(\"change\", e=>{ state.sort=e.target.value; apply(); });\n  renderRail();\n  buildChips();\n  bindSearch();\n  loadBlog();\n  apply();\n}\nif(document.readyState === \"loading\"){\n  document.addEventListener(\"DOMContentLoaded\", init);\n}else{\n  init();\n}\n<\/script>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hub \u00b7 Lapakgaming MY The World of Midgard Every Ragnarok gamein one place All the Ragnarok titles available on Lapakgaming Malaysia, ranked by what Malaysian players top up most. Pick your game, then head to its official product page. 100%Official supply 24 HoursTop up processing Featured Best-Selling Ragnarok Titles In-game currency Sort: Best sellingName A\u2013ZName<\/p>\n","protected":false},"author":1,"featured_media":16580,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-16561","page","type-page","status-publish","has-post-thumbnail"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ragnarok Games List - Lapakgaming Blog Malaysia<\/title>\n<meta name=\"description\" content=\"Here are the list of all Ragnarok games in Joytify.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ragnarok Games List - Lapakgaming Blog Malaysia\" \/>\n<meta property=\"og:description\" content=\"Here are the list of all Ragnarok games in Joytify.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/\" \/>\n<meta property=\"og:site_name\" content=\"Lapakgaming Blog Malaysia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61552323314248\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-22T09:19:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/\",\"url\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/\",\"name\":\"Ragnarok Games List - Lapakgaming Blog Malaysia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Ragnarok-Online-Logo.png\",\"datePublished\":\"2026-07-22T09:17:02+00:00\",\"dateModified\":\"2026-07-22T09:19:19+00:00\",\"description\":\"Here are the list of all Ragnarok games in Joytify.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Ragnarok-Online-Logo.png\",\"contentUrl\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Ragnarok-Online-Logo.png\",\"width\":1536,\"height\":1024,\"caption\":\"Ragnarok Online Logo - ragnarok games\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/ragnarok-games\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ragnarok Games List\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/#website\",\"url\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/\",\"name\":\"Lapakgaming Blog Malaysia\",\"description\":\"Gaming News, Guide, and More\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/#organization\",\"name\":\"Lapakgaming\",\"url\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/logo-lapakgaming-by-bukalapak.png\",\"contentUrl\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/logo-lapakgaming-by-bukalapak.png\",\"width\":237,\"height\":53,\"caption\":\"Lapakgaming\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lapakgaming.com\\\/blog\\\/en-my\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61552323314248\",\"https:\\\/\\\/www.instagram.com\\\/lapakgaming.mys\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ragnarok Games List - Lapakgaming Blog Malaysia","description":"Here are the list of all Ragnarok games in Joytify.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/","og_locale":"en_GB","og_type":"article","og_title":"Ragnarok Games List - Lapakgaming Blog Malaysia","og_description":"Here are the list of all Ragnarok games in Joytify.","og_url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/","og_site_name":"Lapakgaming Blog Malaysia","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61552323314248","article_modified_time":"2026-07-22T09:19:19+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo-1024x683.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/","url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/","name":"Ragnarok Games List - Lapakgaming Blog Malaysia","isPartOf":{"@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/#primaryimage"},"image":{"@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png","datePublished":"2026-07-22T09:17:02+00:00","dateModified":"2026-07-22T09:19:19+00:00","description":"Here are the list of all Ragnarok games in Joytify.","breadcrumb":{"@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/#primaryimage","url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png","contentUrl":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png","width":1536,"height":1024,"caption":"Ragnarok Online Logo - ragnarok games"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/ragnarok-games\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lapakgaming.com\/blog\/en-my\/"},{"@type":"ListItem","position":2,"name":"Ragnarok Games List"}]},{"@type":"WebSite","@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/#website","url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/","name":"Lapakgaming Blog Malaysia","description":"Gaming News, Guide, and More","publisher":{"@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lapakgaming.com\/blog\/en-my\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/#organization","name":"Lapakgaming","url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/#\/schema\/logo\/image\/","url":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2023\/10\/logo-lapakgaming-by-bukalapak.png","contentUrl":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-content\/uploads\/2023\/10\/logo-lapakgaming-by-bukalapak.png","width":237,"height":53,"caption":"Lapakgaming"},"image":{"@id":"https:\/\/www.lapakgaming.com\/blog\/en-my\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61552323314248","https:\/\/www.instagram.com\/lapakgaming.mys"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/pages\/16561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/comments?post=16561"}],"version-history":[{"count":0,"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/pages\/16561\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/media\/16580"}],"wp:attachment":[{"href":"https:\/\/www.lapakgaming.com\/blog\/en-my\/wp-json\/wp\/v2\/media?parent=16561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}