ADVERTISEMENT

Rakuten Viki announces new legal fantasy K-drama 'Phantom Lawyer'

Supernatunal courtoom drama starring Yoo Yeon Seok and Esom draws strong viewership across Southeast Asiaon Viki

Published Mar 27, 2026 08:55 am

Rakuten Viki, the global streaming destination for Asian entertainment, has announced the premiere of its newest legal fantasy Korean drama, Phantom Lawyer, starring Yoo Yeon Seok (Dr. Romantic) and Esom (Taxi Driver).

Following its March 13 premiere, the drama has gained early momentum across Southeast Asia, dominating Viki’s regional charts at No. 1 from its premiere week. Among viewers, the show currently holds a 9.6/10 rating from more than 700 reviews.

In the drama, Yoo Yeon Seok—known for his charismatic role in Hospital Playlist and When the Phone Rings—takes on a strikingly different character as Shin Yi Rang, a timid and clumsy lawyer who unexpectedly gains the ability to see ghosts after moving into his new office, which was previously owned by a shaman. Upon discovering a mysterious incense stick that grants him the ability to communicate with–and be possessed by—restless spirits seeking justice, Shin Yi Rang finds himself tangled in chaotic and comedic situations.

Working alongside elite lawyer Han Na Hyun (played by Esom), who is initially skeptical of YiRang’s supernatural claims, the pair gradually builds a strong partnership as they take on cases tied to the unresolved grievances of lingering souls. Their evolving dynamic becomes central to the story as they combine legal strategy with unconventional methods to uncover hidden truths. Each case they take on reveals hidden perspectives behind crimes, conflicts, and personal struggles, expanding the drama beyond a traditional courtroom narrative.

The drama has also drawn attention for Yoo Yeon Seok’s on-screen transformation, including scenes in which the actor appears wearing a female hanbok and makeup, and dances to K-pop girl group songs, highlighting not only the actor’s versatility but also the character’s unpredictable nature. In a recent SBS interview, Yoo shared that he was excited for audiences to see a new side of his acting through the role, building anticipation for Shin Yi Rang’s multiple personalities.

Blending legal drama with supernatural mystery, the series explores themes of redemption, unresolved stories, and the pursuit of justice from unexpected sources. By combining emotional, character-driven storytelling with suspenseful investigations, Phantom Lawyer offers a fresh take on the legal genre, balancing fantasy, drama, and comedy to resonate with audiences across Southeast Asia.

Yoo Yeon Seok’s comedic transformation and Esom’s charismatic presence are now live in action, with the latest episodes of Phantom Lawyer available on Viki to viewers in the Americas, Europe, the Middle East, Oceania, India, and Southeast Asian countries including Malaysia, Indonesia, the Philippines, Singapore, and Thailand. (Robert Requintina)

Related Tags

Phantom Lawyer Rakuten Viki Esom Yoo Yeon Sook K-drama
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.