ADVERTISEMENT

'Crime 101' elevates the heist genre

Published Feb 16, 2026 09:34 pm
I attended a special screening of Crime 101 at the Columbia Pictures mini theater ahead of its theatrical release — an intimate setting that suited a film built more on tension than spectacle.
Davis (Chris Hemsworth, right) and Lou (Mark Ruffalo, left) in 'Crime 101' (Images courtesy of Columbia Pictures)
Davis (Chris Hemsworth, right) and Lou (Mark Ruffalo, left) in 'Crime 101' (Images courtesy of Columbia Pictures)
Directed and written by Bart Layton and based on the novella by Don Winslow, Crime 101 is a deliberate return to classic heist storytelling. Columbia Pictures brings the film to theaters on Feb. 18, offering audiences a composed alternative to the heavier romantic dramas and horror titles currently in cinemas.
Set in Los Angeles, the story centers on a cat-and-mouse game between a highly intelligent thief and a detective determined to track him down. This is not an action film driven by nonstop explosions or graphic violence. It is more mental than physical — more strategy than spectacle. The tension unfolds in quiet confrontations and measured moves rather than chaos.
The cast includes Chris Hemsworth, Halle Berry, Mark Ruffalo, and Barry Keoghan — a strong lineup that understands exactly what kind of film this is.
Hemsworth plays his role with restraint, clearly attempting to blend into the background. But Chris Hemsworth has a presence that simply refuses to disappear. Even when he tones it down, you still feel him in every frame.
Halle Berry stars as Sharon in 'Crime 101' (Image courtesy of Merrick Morton)
Halle Berry stars as Sharon in 'Crime 101' (Image courtesy of Merrick Morton)
Ruffalo steps into familiar territory as the detective — quiet, slightly awkward, almost mumbling at times. It is a character type he has mastered over the years, and here it provides steadiness at the center of the investigation.
Berry returns to theaters in Crime 101, and it is genuinely good to see her back in this kind of role. Beyond looking effortlessly poised, she brings control and confidence to her performance. There is a quiet authority in the way she carries herself onscreen — steady, composed, and grounded — and it adds weight to several of the film’s key moments.
Barry Keoghan, meanwhile, brings an unpredictable edge. There is something in his performance that keeps you watching closely, almost waiting for something to implode. That tension works in the film’s favor.
The pacing is deliberate. It is not a fast-moving thriller, and seasoned viewers may find the plot somewhat predictable. I personally found myself wishing for sharper, wittier exchanges between the characters — more verbal tension to match the strategic maneuvering. The film does not attempt to reinvent the genre or shock with dramatic twists. But perhaps that is not its goal.
Crime 101 feels like a return to the fundamentals of the heist story — controlled, polished, and confident in its structure. In a season filled with emotional romances and high-intensity horror, this film offers a solid, classic action alternative.

Not every film needs to surprise you; some just need to hold your attention — and this one does.
"Crime 101' opens on Feb. 18. (Margaret Siytangco)
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.