{"id":7716,"date":"2026-07-22T08:28:48","date_gmt":"2026-07-22T08:28:48","guid":{"rendered":"https:\/\/www.joytify.com\/blog\/en-ph\/?page_id=7716"},"modified":"2026-07-22T09:19:15","modified_gmt":"2026-07-22T09:19:15","slug":"ragnarok-games","status":"publish","type":"page","link":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/","title":{"rendered":"Ragnarok Games List"},"content":{"rendered":"\n<!-- ============================================================\n     RAGNAROK HUB \u2014 Joytify Philippines (en-ph)\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 *\/\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.joytify.com\/en-ph\" target=\"_blank\" rel=\"noopener\" aria-label=\"Joytify home\">\n      <img class=\"brand-logo\" src=\"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png\" alt=\"Ragnarok Online\" referrerpolicy=\"no-referrer\" decoding=\"async\">\n      <span class=\"brand-tag\">Hub \u00b7 Joytify PH<\/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 Joytify Philippines, ranked by what Filipino 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 Classic, Origin, The New World\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.joytify.com\/blog\/en-ph\/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.joytify.com\/blog\/en-ph\/\" 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.joytify.com\/en-ph\" target=\"_blank\" rel=\"noopener\">joytify.com\/en-ph<\/a><\/span>\n      <a class=\"ext\" href=\"https:\/\/www.joytify.com\/en-ph\" target=\"_blank\" rel=\"noopener\">Open Joytify \u2192<\/a>\n    <\/div>\n    <p class=\"note\">Every card links to the official Joytify Philippines product page for that title. Games are ordered by recent sales in the en-ph 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 (joytify.com\/en-ph) ---- *\/\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=RagnarokHubPagePH\";\nconst withUTM = u => u + (u.indexOf(\"?\") === -1 ? \"?\" : \"&\") + UTM;\n\nconst cdn = p => \"https:\/\/img.joytify.com\/?src=\" + encodeURIComponent(p) + \"&w=720&q=75&f=webp\";\n\n\/* ART \u2014 all served from Joytify's own CDN (img.joytify.com).\n   \u2714 = path read directly from that product page's og:image (confirmed).\n   ? = filename reused from the ID catalogue with the domain swapped to\n       joytify.com \u2014 very likely correct, but unverified. If one is wrong the\n       card falls back to its gradient tile, never a broken image. *\/\nconst ART = {\n  mClassic: cdn(\"https:\/\/www.joytify.com\/static\/category\/ROM Classic.jpg\"),                       \/\/ \u2714 verified\n  mel:      cdn(\"https:\/\/www.joytify.com\/static\/images\/category\/ragnarok-m-eternal-love.webp\"),   \/\/ \u2714 verified\n  oriClas:  cdn(\"https:\/\/www.joytify.com\/static\/category\/Ragnarok Origin Classic.jpg\"),           \/\/ \u2714 verified\n  theRag:   cdn(\"https:\/\/www.joytify.com\/static\/category\/The Ragnarok Icon.png\"),                  \/\/ ?\n  origin:   cdn(\"https:\/\/www.joytify.com\/static\/banner\/lapakgaming\/202601\/Ragnarok Origin.png\"),   \/\/ ?\n  idle:     cdn(\"https:\/\/www.joytify.com\/static\/category\/ragnarok-idle-adventure-plus.png\"),       \/\/ ?\n  tnw:      cdn(\"https:\/\/www.joytify.com\/static\/category\/rotnw.png\"),                              \/\/ ?\n  x:        cdn(\"https:\/\/www.joytify.com\/static\/banner\/lapakgaming\/202601\/Ragnarok X.png\"),        \/\/ ?\n  twilight: cdn(\"https:\/\/www.joytify.com\/static\/category\/RO TWILIGHT PNG .png\"),                   \/\/ ?\n  btg:      cdn(\"https:\/\/www.joytify.com\/static\/category\/Ragnarok Back to Glory via Login.jpg\"),   \/\/ ?\n  ggl:      cdn(\"https:\/\/www.joytify.com\/static\/category\/pdp-ragnarok-classic.jpg\"),               \/\/ ?\n  zero:     cdn(\"https:\/\/www.joytify.com\/static\/category\/download (1).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 PHP, 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 \"\u20b1\", no commas. e.g. 1234.56\n   \u25b8 Verified live on 22 Jul 2026: the three marked \u2714 below.\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  \"mclassic-uid\":         160.03,   \/\/ \u2714 1.8 Million Zeny\n  \"mel-sea\":               53.50,   \/\/ \u2714 6 BCC\n  \"origin-classic-login\": 285.02,   \/\/ \u2714 Package 5$ \/ 210 Nyan Berry\n  \"therag-goc\":             null,   \/\/ \u2190 add\n  \"origin-package\":         null,   \/\/ \u2190 add\n  \"therag-ooc\":             null,   \/\/ \u2190 add\n  \"origin-classic\":         null,   \/\/ \u2190 add\n  \"idle-plus\":              null,   \/\/ \u2190 add\n  \"tnw\":                    null,   \/\/ \u2190 add\n  \"x-id-number\":            null,   \/\/ \u2190 add\n  \"twilight-ooc\":           null,   \/\/ \u2190 add\n  \"therag-login\":           null,   \/\/ \u2190 add\n  \"origin-global\":          null,   \/\/ \u2190 add\n  \"btg-droplink\":           null,   \/\/ \u2190 add\n  \"twilight-goc\":           null,   \/\/ \u2190 add\n  \"classic-ggl\":            null,   \/\/ \u2190 add\n  \"zero-global\":            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 PH GMV. Zero: Global + Twilight pinned at the bottom.\n   Starting prices live in the PRICES block above, not here. *\/\nconst GAMES = [\n  {id:\"mclassic-uid\",        name:\"Ragnarok M Classic - UID\",            url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-m-classic\",             cur:\"Zeny\",           img:ART.mClassic},\n  {id:\"mel-sea\",             name:\"Ragnarok M Eternal Love SEA\",         url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-m-eternal-love\",        cur:\"Big Cat Coins\",  img:ART.mel},\n  {id:\"origin-classic-login\",name:\"Ragnarok Origin Classic via Login\",   url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-origin-classic-login\",  cur:\"Nyan Berry\",     img:ART.oriClas},\n  {id:\"therag-goc\",          name:\"The Ragnarok - Drop Link GOC\",        url:\"https:\/\/www.joytify.com\/en-ph\/the-ragnarok-sea\",               cur:\"Diamonds\",       img:ART.theRag},\n  {id:\"origin-package\",      name:\"Ragnarok Origin Global - Package\",    url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-origin-special-pack\",   cur:\"Nyan Berry\",     img:ART.origin},\n  {id:\"therag-ooc\",          name:\"The Ragnarok - Drop Link OOC\",        url:\"https:\/\/www.joytify.com\/en-ph\/the-ragnarok-sea-link\",          cur:\"Diamonds\",       img:ART.theRag},\n  {id:\"origin-classic\",      name:\"Ragnarok Origin Classic\",             url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-origin-classic\",        cur:\"Nyan Berry\",     img:ART.oriClas},\n  {id:\"idle-plus\",           name:\"Ragnarok Idle Adventure Plus\",        url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-idle-adventure-plus\",   cur:\"Top Up\",         img:ART.idle},\n  {id:\"tnw\",                 name:\"Ragnarok The New World\",              url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-the-new-world\",         cur:\"Starstones\",     img:ART.tnw},\n  {id:\"x-id-number\",         name:\"Ragnarok X - ID Number\",              url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-x\",                     cur:\"Diamonds\",       img:ART.x},\n  {id:\"twilight-ooc\",        name:\"Ragnarok Twilight - Drop Link OOC\",   url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-twilight\",              cur:\"Top Up\",         img:ART.twilight},\n  {id:\"therag-login\",        name:\"The Ragnarok - Via Login\",            url:\"https:\/\/www.joytify.com\/en-ph\/the-ragnarok-login\",             cur:\"Diamonds\",       img:ART.theRag},\n  {id:\"origin-global\",       name:\"Ragnarok Origin Global\",              url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-origin\",                cur:\"Nyan Berry\",     img:ART.origin},\n  {id:\"btg-droplink\",        name:\"Ragnarok Back to Glory Drop Link\",    url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-back-to-glory\",         cur:\"Top Up\",         img:ART.btg},\n  {id:\"twilight-goc\",        name:\"Ragnarok Twilight - Drop Link GOC\",   url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-twilight-drop-link-goc\",cur:\"Top Up\",         img:ART.twilight},\n  {id:\"classic-ggl\",         name:\"Ragnarok Classic by GGL\",             url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-classic\",               cur:\"Top Up\",         img:ART.ggl},\n  {id:\"zero-global\",         name:\"Ragnarok Zero: Global\",               url:\"https:\/\/www.joytify.com\/en-ph\/ragnarok-zero-global\",           cur:\"Top Up\",         img:ART.zero},\n  {id:\"twilight\",            name:\"Ragnarok Twilight\",                   url:\"https:\/\/www.joytify.com\/en-ph\/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  \"mclassic-uid\",\n  \"mel-sea\",\n  \"origin-classic-login\",\n  \"therag-goc\",\n  \"origin-package\"\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 php = n => \"\u20b1\" + Number(n).toLocaleString(\"en-PH\",{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>${php(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>${php(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.joytify.com\/blog\/en-ph\/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 Joytify PH The World of Midgard Every Ragnarok gamein one place All the Ragnarok titles available on Joytify Philippines, ranked by what Filipino 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":7718,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-7716","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 - Joytify Blog Philippines<\/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.joytify.com\/blog\/en-ph\/ragnarok-games\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ragnarok Games List - Joytify Blog Philippines\" \/>\n<meta property=\"og:description\" content=\"Here are the list of all Ragnarok games in Joytify.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/\" \/>\n<meta property=\"og:site_name\" content=\"Joytify Blog Philippines\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61551549509492\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-22T09:19:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.joytify.com\/blog\/en-ph\/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:site\" content=\"@joytifyofficial\" \/>\n<meta name=\"twitter:label1\" content=\"Est. 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.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/\",\"url\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/\",\"name\":\"Ragnarok Games List - Joytify Blog Philippines\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Ragnarok-Online-Logo.png?wsr\",\"datePublished\":\"2026-07-22T08:28:48+00:00\",\"dateModified\":\"2026-07-22T09:19:15+00:00\",\"description\":\"Here are the list of all Ragnarok games in Joytify.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Ragnarok-Online-Logo.png?wsr\",\"contentUrl\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/Ragnarok-Online-Logo.png?wsr\",\"width\":1536,\"height\":1024,\"caption\":\"Ragnarok Online logo in blue with stylized text and horizontal lines\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/ragnarok-games\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ragnarok Games List\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/#website\",\"url\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/\",\"name\":\"Joytify Blog Philippines\",\"description\":\"Gaming News, Guide, and More\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/#organization\",\"name\":\"Joytify\",\"url\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/joytify-logo-1.webp?wsr\",\"contentUrl\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/joytify-logo-1.webp?wsr\",\"width\":1000,\"height\":224,\"caption\":\"Joytify\"},\"image\":{\"@id\":\"https:\\\/\\\/www.joytify.com\\\/blog\\\/en-ph\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61551549509492\",\"https:\\\/\\\/x.com\\\/joytifyofficial\",\"https:\\\/\\\/www.instagram.com\\\/lapakgaming.ph\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@joytifyofficial\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ragnarok Games List - Joytify Blog Philippines","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.joytify.com\/blog\/en-ph\/ragnarok-games\/","og_locale":"en_US","og_type":"article","og_title":"Ragnarok Games List - Joytify Blog Philippines","og_description":"Here are the list of all Ragnarok games in Joytify.","og_url":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/","og_site_name":"Joytify Blog Philippines","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61551549509492","article_modified_time":"2026-07-22T09:19:15+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo-1024x683.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@joytifyofficial","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/","url":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/","name":"Ragnarok Games List - Joytify Blog Philippines","isPartOf":{"@id":"https:\/\/www.joytify.com\/blog\/en-ph\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/#primaryimage"},"image":{"@id":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/#primaryimage"},"thumbnailUrl":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png?wsr","datePublished":"2026-07-22T08:28:48+00:00","dateModified":"2026-07-22T09:19:15+00:00","description":"Here are the list of all Ragnarok games in Joytify.","breadcrumb":{"@id":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/#primaryimage","url":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png?wsr","contentUrl":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2026\/07\/Ragnarok-Online-Logo.png?wsr","width":1536,"height":1024,"caption":"Ragnarok Online logo in blue with stylized text and horizontal lines"},{"@type":"BreadcrumbList","@id":"https:\/\/www.joytify.com\/blog\/en-ph\/ragnarok-games\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.joytify.com\/blog\/en-ph\/"},{"@type":"ListItem","position":2,"name":"Ragnarok Games List"}]},{"@type":"WebSite","@id":"https:\/\/www.joytify.com\/blog\/en-ph\/#website","url":"https:\/\/www.joytify.com\/blog\/en-ph\/","name":"Joytify Blog Philippines","description":"Gaming News, Guide, and More","publisher":{"@id":"https:\/\/www.joytify.com\/blog\/en-ph\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.joytify.com\/blog\/en-ph\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.joytify.com\/blog\/en-ph\/#organization","name":"Joytify","url":"https:\/\/www.joytify.com\/blog\/en-ph\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.joytify.com\/blog\/en-ph\/#\/schema\/logo\/image\/","url":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2025\/09\/joytify-logo-1.webp?wsr","contentUrl":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-content\/uploads\/2025\/09\/joytify-logo-1.webp?wsr","width":1000,"height":224,"caption":"Joytify"},"image":{"@id":"https:\/\/www.joytify.com\/blog\/en-ph\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61551549509492","https:\/\/x.com\/joytifyofficial","https:\/\/www.instagram.com\/lapakgaming.ph\/","https:\/\/www.tiktok.com\/@joytifyofficial"]}]}},"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/pages\/7716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/comments?post=7716"}],"version-history":[{"count":0,"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/pages\/7716\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/media\/7718"}],"wp:attachment":[{"href":"https:\/\/www.joytify.com\/blog\/en-ph\/wp-json\/wp\/v2\/media?parent=7716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}