<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">

    <!-- Base URL for SPA routing - ensures all relative paths resolve from root -->
    <base href="/">

    <!-- Primary Meta Tags -->
    <title>Play Free Solitaire Games Online | 100% Ad-Free - TrySolitaire</title>
    <meta name="description" content="Sick of ads & logins? 100+ free solitaire games. Zero ads. Zero sign-ups. Instant play. Klondike, Spider, FreeCell, Sudoku, 2048. Pure gaming bliss!">
    <meta name="author" content="Try Solitaire">
    <meta name="robots" content="index, follow">
    <link rel="canonical" href="https://trysolitaire.com/" id="canonical-link">

    <!-- SEO_SCRIPT_START -->
    <!-- Dynamic SEO for SPA routes - Generated by scripts/generate-seo-script.cjs -->
    <!-- Contains 107 games, 23.5KB raw, ~7.0KB gzipped -->
    <script>(function(){var p=window.location.pathname,c=document.getElementById('canonical-link'),h=document.querySelectorAll('link[rel="alternate"][hreflang]'),g={"2048":["Play 2048 Online Free - Classic Puzzle Game","Play the addictive 2048 puzzle game online for free. Combine tiles to reach 2048! Features Classic mode, Rescue mode, and Infinite 6x6 mode."],"accordion":["Play Accordion Solitaire Online Free - Extreme Challenge","Play Accordion Solitaire free! Watch cards auto-compress by rank or suit. Extremely difficult - getting to 10 piles is achievement. No ads, no downloads!"],"acesandkings":["Play Aces and Kings Solitaire Online Free - Classic Reserve Game","Play Aces and Kings Solitaire online for free! Remove Aces and Kings to foundations, build by suit. Strategic reserve-based gameplay. No ads, no downloads!"],"acesup":["Play Aces Up Solitaire Online Free - Card Removal Challenge","Play Aces Up Solitaire free! Remove lower cards when higher cards of same suit appear. Simple rules, challenging gameplay. No ads, no downloads!"],"agnes":["Play Agnes Solitaire Online Free - Klondike Variant with a Twist","Play Agnes Solitaire online for free! Klondike variant with all cards visible and foundations starting at a random rank. Strategic and challenging! No ads,"],"alaska":["Play Alaska Solitaire Online Free - Yukon's Challenging Cousin","Play Alaska Solitaire online for free! Similar to Yukon but with face-down cards and stricter rules. Challenging strategic gameplay. No ads, no downloads!"],"alhambra":["Play Alhambra Solitaire Online Free - Reserve Card Challenge","Play Alhambra Solitaire online for free! Build by suit with a strategic reserve pile. Named after Spain's famous palace. No ads, no downloads required!"],"americantoad":["Play American Toad Solitaire Online Free - Eight Foundation Challenge","Play American Toad Solitaire online for free! FreeCell variant with 8 foundations and 8 reserve cells. Double the challenge! No ads, no downloads!"],"auldlangsyne":["Play Auld Lang Syne Solitaire Online Free - Simple New Year's Game","Play Auld Lang Syne Solitaire online for free! Simple, relaxing game - deal cards to 4 piles building up. Perfect for beginners! No ads, no downloads!"],"australianpatience":["Play Australian Patience Solitaire Online Free - Klondike Simplified","Play Australian Patience Solitaire online for free! Like Klondike but with Aces pre-dealt to foundations. Easier and faster! No ads, no downloads!"],"bakersdozen":["Play Baker's Dozen Solitaire Online Free - Classic Card Game","Play Baker's Dozen Solitaire free! All cards visible from start with 13 tableau piles. Strategic and fair variant - no ads, no downloads required!"],"bakersgame":["Play Baker's Game Solitaire Online Free - FreeCell by Suit","Play Baker's Game Solitaire online for free! Like FreeCell but build by suit instead of alternating colors. Much harder challenge! No ads, no downloads!"],"baroness":["Play Baroness Solitaire Online Free - Match Cards to 13","Play Baroness Solitaire online for free! Simple matching game - remove pairs that add to 13. Quick, fun, relaxing! No ads, no downloads required!"],"beleagueredcastle":["Play Beleaguered Castle Solitaire Online Free - FreeCell Without Cells","Play Beleaguered Castle Solitaire free! Build foundations by suit while managing tableau with no free cells. Strategic and challenging. No ads!"],"bisley":["Play Bisley Solitaire Online Free - Unique Two-Way Building","Play Bisley Solitaire online for free! Build foundations up from Aces AND down from Kings simultaneously. Unique strategic challenge! No ads, no downloads!"],"blackhole":["Play Black Hole Solitaire Online Free - All Cards to the Ace","Play Black Hole Solitaire online for free! Build up or down regardless of suit around a central Ace. Unique circular layout. No ads, no downloads required!"],"blindhookey":["Play Blind Hookey Solitaire Online Free - Mystery Card Challenge","Play Blind Hookey Solitaire free! Unique game where foundations start with random hidden cards. Build sequences in the dark! No ads, no downloads required!"],"bristol":["Play Bristol Solitaire Online Free - Strategic Three-Card Fans","Play Bristol Solitaire free! Eight fans of three cards each with strategic building. Foundations start at Ace. Challenging variant! No ads, no downloads..."],"calculation":["Play Calculation Solitaire Online Free - Math-Based Card Puzzle","Play Calculation Solitaire free! Build four foundations with mathematical sequences: +1, +2, +3, +4. Strategic reserve management. No ads!"],"canfield":["Play Canfield Solitaire Online Free - Classic Demon Solitaire","Play Canfield (Demon) Solitaire free! Features random foundation start rank and a 13-card reserve. Challenging classic variant - no ads, no downloads..."],"capricieuse":["Play Capricieuse Solitaire Online Free - Foundations Build Any Direction","Play Capricieuse Solitaire free! Unique game where you choose foundation build direction (up or down). Strategic decision-making! No ads, no downloads!"],"carlton":["Play Carlton Solitaire Online Free - Build by Suit in Tableau","Play Carlton Solitaire free! Unique variant where tableau builds down by suit instead of alternating colors. Challenging twist on Klondike! No ads!"],"castlesinspain":["Play Castles in Spain Solitaire Online Free - Build Any Suit Direction","Play Castles in Spain Solitaire free! Unique variant where tableau builds up OR down by suit. Ultimate flexibility meets strategy! No ads, no downloads!"],"chinesepatience":["Play Chinese Patience Solitaire Online Free - Build by Suit Sequences","Play Chinese Patience Solitaire free! Build tableau sequences up OR down by suit. Strategic and rewarding variant! No ads, no downloads required!"],"clock":["Play Clock Solitaire Online Free - Fast-Paced Luck Game","Play Clock Solitaire free! Race against time as cards form a clock face. Quick rounds, pure luck. Perfect for casual play. No ads!"],"cotillion":["Play Cotillion Solitaire Online Free - Two Deck Dance Pattern","Play Cotillion Solitaire free! Elegant two-deck game with 8 foundations starting from random base. Dance pattern layout! No ads, no downloads!"],"cribbagesolitaire":["Play Cribbage Solitaire Online Free - Score Cribbage Hands","Play Cribbage Solitaire free! Arrange cards to maximize cribbage scoring hands. Unique blend of solitaire and cribbage! No ads, no downloads!"],"crossword":["Play Crossword Solitaire Online Free - Build Words with Cards","Play Crossword Solitaire free! Unique game where you arrange cards to form words crossword-style. Creative word puzzle meets solitaire! No ads!"],"cruel":["Play Cruel Solitaire Online Free - Challenging Building Game","Play Cruel Solitaire free! Build foundations while managing tableau with limited moves. Strategic redeals. Challenging but winnable. No ads!"],"demon":["Play Demon Solitaire Online Free - Classic Canfield Variant","Play Demon Solitaire (Canfield) online free! Features random foundation base and 13-card reserve. Challenging classic from 1890s - no ads, no downloads..."],"demonfan":["Play Demon Fan Solitaire Online Free - Fan Layout Variant","Play Demon Fan Solitaire free! Classic Demon rules with beautiful fan-style tableau layout. Unique visual presentation - no ads, no downloads required!"],"diamondmine":["Play Diamond Mine Solitaire Online Free - Unique Card Puzzle","Play Diamond Mine Solitaire free! Clear cards from a diamond-shaped mine layout. Strategic single-deck game - no ads, no downloads required!"],"diplomat":["Play Diplomat Solitaire Online Free - Strategic Card Game","Play Diplomat Solitaire free! Build foundations while managing tableau strategically. Unique rules and challenging gameplay - no ads, no downloads..."],"doubleklondike":["Play Double Klondike Solitaire Online Free - Two-Deck Challenge","Play Double Klondike Solitaire free! Classic Klondike with two decks (104 cards). More complex, more strategic, more rewarding. No ads!"],"duchess":["Play Duchess Solitaire Online Free - Royal Card Challenge","Play Duchess Solitaire free! Elegant variation with unique fan reserve and foundation building. Royal challenge for patient players - no ads, no downloads!"],"eaglewing":["Play Eagle Wing Solitaire Online Free - Unique Wing Layout","Play Eagle Wing Solitaire free! Distinctive eagle wing tableau layout creates unique challenge. Strategic spatial puzzle - no ads, no downloads!"],"easthaven":["Play Easthaven Solitaire Online Free - Klondike Variation","Play Easthaven Solitaire free! Klondike variant with all tableau cards face-up and unique dealing. Strategic and winnable. No ads!"],"easthavenjr":["Play Easthaven Jr Solitaire Online Free - Beginner-Friendly Variant","Play Easthaven Jr Solitaire free! Simplified Easthaven rules perfect for learning. Klondike-style game with unique dealing - no ads, no downloads!"],"eightoff":["Play Eight Off Solitaire Online Free - FreeCell with 8 Reserves","Play Eight Off Solitaire free! Like FreeCell but with 8 reserve cells and suit-based building. Strategic and mostly winnable. No ads!"],"eightoffjr":["Play Eight Off Jr Solitaire Online Free - Enhanced FreeCell","Play Eight Off Jr Solitaire free! Like FreeCell but with 8 free cells instead of 4. More strategic depth and flexibility - no ads, no downloads!"],"eliminator":["Play Eliminator Solitaire Online Free - Fast Card Elimination","Play Eliminator Solitaire free! Eliminate cards by matching pairs or sequences. Fast-paced puzzle game - no ads, no downloads required!"],"engines":["Play Engines Solitaire Online Free - Two Deck Card Game","Play Engines (Locomotives) Solitaire free! Uses 2 decks with 8 reserve 'engines'. Strategic two-deck challenge with unique mechanics. No ads, no downloads!"],"escalator":["Play Escalator Solitaire Online Free - Ascending Card Challenge","Play Escalator Solitaire free! Build ascending sequences to clear all cards. Unique progressive gameplay. Strategic and satisfying - no ads, no downloads!"],"fan":["Play Fan Solitaire Online Free - La Belle Lucie Card Game","Play Fan Solitaire free! Cards arranged in 18 beautiful fans. Strategic single-deck challenge. Also known as La Belle Lucie. No ads, no downloads!"],"florentine":["Play Florentine Solitaire Online Free - Two Deck Florence","Play Florentine (Florence) Solitaire free! Two-deck game with 5 rows of cards. Strategic building and tableau management. No ads, no downloads!"],"flowergarden":["Play Flower Garden Solitaire Online Free - Strategic Bouquet","Play Flower Garden Solitaire free! 6 garden piles plus 16-card bouquet reserve. All reserve cards available. Strategic single-deck gem. No ads, no..."],"fortress":["Play Fortress Solitaire Online Free - Beleaguered Castle Variant","Play Fortress Solitaire free! All cards visible, build up or down by suit. Strategic single-deck challenge. Related to Beleaguered Castle. No ads!"],"fortunesfavor":["Play Fortune's Favor Solitaire Online Free - Luck-Based Two Deck","Play Fortune's Favor Solitaire free! Two-deck game with unique charm mechanics. Test your luck with this entertaining variant. No ads, no downloads!"],"fortythieves":["Play Forty Thieves Solitaire Online Free - Two Deck Challenge","Play Forty Thieves Solitaire free! Two decks, 10 tableau piles, strict suit building. Ultimate challenge - no ads!"],"freecell":["Play FreeCell Solitaire Online Free - Skill-Based Card Game","Play FreeCell Solitaire online for free! Unlike other solitaire games, nearly every FreeCell game is winnable with skill. No ads, no downloads required."],"gaps":["Play Gaps Solitaire Online Free - Montana Card Puzzle","Play Gaps (Montana) Solitaire free! Unique spatial puzzle where you arrange cards in sequence by suit. Features 2 redeals. No ads, no downloads required!"],"golf":["Play Golf Solitaire Online Free - Simple & Addictive","Play Golf Solitaire free online! Simple rules, addictive gameplay. Clear cards one rank at a time. No ads!"],"gypsy":["Play Gypsy Solitaire Online Free - Two Deck Klondike-Spider Hybrid","Play Gypsy Solitaire free! Combines Klondike and Spider with 2 decks. 8 tableau piles, alternating colors. Challenging hybrid variant. No ads!"],"indian":["Play Indian Solitaire Online Free - Yukon By Suit Challenge","Play Indian Solitaire free! Like Yukon but build by suit instead of alternating colors. Extremely challenging. No stock pile. No ads, no downloads!"],"intelligence":["Play Intelligence Solitaire Online Free - Strategic Fan Game","Play Intelligence Solitaire free! Cards in fans, strategic reserve management. Challenging single-deck variant. Related to La Belle Lucie. No ads!"],"josephine":["Play Josephine Solitaire Online Free - Two-Deck Strategy Game","Play Josephine Solitaire online for free! Two-deck variant with relaxed building rules. Similar to Forty Thieves but easier. No ads, no downloads required!"],"kingalbert":["Play King Albert Solitaire Online Free - Elegant Strategy Game","Play King Albert Solitaire online for free! All cards visible with 7 reserve cards. Similar to FreeCell but with unique twist. No ads, no downloads..."],"kingsincorners":["Play Kings in Corners Solitaire Online Free - Corner Card Game","Play Kings in Corners Solitaire online for free! Unique layout with four corner piles. Build down in alternating colors. Fun twist on classic solitaire -"],"klondike":["Play Solitaire Online Free - Full Screen, No Ads, Play Instantly!","Play the classic Klondike Solitaire game online for free. No ads, no downloads required. Perfect for beginners and experts alike!"],"labellelucie":["Play La Belle Lucie Solitaire Online Free - The Fan Game","Play La Belle Lucie Solitaire free! Build foundations from fan-shaped tableau. Limited redeals, strategic choices. Beautiful and challenging. No ads!"],"littlespider":["Play Little Spider Solitaire Online Free - Strategic Spider Variant","Play Little Spider Solitaire online for free! Build two foundations up, two down. Unique strategic challenge with limited redeals. No ads, no downloads!"],"mahjong":["Play Mahjong Solitaire Online Free - Classic Tile Matching","Play Mahjong Solitaire free! Match identical tiles in 3D layout. Classic Chinese game with modern digital convenience. No ads, no downloads!"],"martha":["Play Martha Solitaire Online Free - Relaxed Two-Deck Game","Play Martha Solitaire online for free! Two decks with flexible building rules. Build down by color (not suit). Easier than Forty Thieves - no ads!"],"minesweeper":["Play Minesweeper Online Free - Classic Logic Puzzle Game","Play Minesweeper free! Use logic to flag mines and reveal safe squares. Three difficulty levels from beginner to expert. No ads, no downloads!"],"missmilligan":["Play Miss Milligan Solitaire Online Free - Two-Deck Challenge","Play Miss Milligan Solitaire free! Build down by alternating colors with 8 foundations. Unique 'waiving' rule adds strategic depth. No ads!"],"montecarlo":["Play Monte Carlo Solitaire Online Free - Card Pairing Puzzle","Play Monte Carlo Solitaire free! Match and remove pairs of same-rank cards that are adjacent or diagonal. Simple rules, addictive gameplay!"],"nestor":["Play Nestor Solitaire Online Free - Simple Matching Challenge","Play Nestor Solitaire free! Match pairs of same-rank cards from the top row of 8 columns. Quick games with pure strategy. No ads!"],"oddandeven":["Play Odd and Even Solitaire Online Free - Numerical Pattern Game","Play Odd and Even Solitaire free! Build foundations by odd/even values. Unique sequencing with alternating odd-even patterns. No ads!"],"osmosis":["Play Osmosis Solitaire Online Free - Unique Foundation Building","Play Osmosis Solitaire free! Build foundations by matching ranks already played. Unusual rules create strategic challenges. No ads!"],"paganini":["Play Paganini Solitaire Online Free - Challenging Reserve Strategy","Play Paganini Solitaire free! Build down by suit with 8 reserve cells. Named after the virtuoso, demands virtuoso play! No ads!"],"parallels":["Play Parallels Solitaire Online Free - British Blockade Card Game","Play Parallels (British Blockade) Solitaire free! Build Aces up and Kings down by suit. Unique bidirectional building with reversals. No ads, no downloads!"],"penguin":["Play Penguin Solitaire Online Free - FreeCell Variant Challenge","Play Penguin Solitaire free! FreeCell variant where foundations start with matching cards. Build down by suit. Strategic depth! No ads!"],"pokersolitaire":["Play Poker Solitaire Online Free - Poker Squares Card Game","Play Poker Solitaire (Poker Patience) free! Build a 5x5 grid creating poker hands in rows and columns. Score-based puzzle game. No ads, no downloads!"],"pyramid":["Play Pyramid Solitaire Online Free - Match to 13","Play Pyramid Solitaire online for free! Remove pairs of cards that add up to 13. Fun and challenging card game. No ads, no downloads required!"],"queensaudience":["Play Queen's Audience Solitaire Online Free - Royal Court Card Game","Play Queen's Audience Solitaire free! Place Jacks before Queens in the audience chamber. High win rate, elegant gameplay. No ads, no downloads!"],"raglan":["Play Raglan Solitaire Online Free - All Cards Visible Solitaire","Play Raglan Solitaire free! All 52 cards visible from start. 9 tableau piles plus 6-card reserve. 50% win rate with skill. No ads, no downloads!"],"rainbow":["Play Rainbow Solitaire Online Free - Matching Foundation Ranks","Play Rainbow Solitaire free! Unique rule: all foundations must start with the same rank. Strategic stock management required. No ads, no downloads!"],"redandblack":["Play Red and Black Solitaire Online Free - Two Deck Challenge","Play Red and Black Solitaire free! Two decks, 8 foundations, alternating colors. Classic Napoleon family game. No ads, no downloads required!"],"royalcotillion":["Play Royal Cotillion Solitaire Online Free - Dance of the Royals","Play Royal Cotillion Solitaire free! Two decks, build by twos, Ladies' and Lords' sides. Unique royal dance theme. No ads, no downloads!"],"royalmarriage":["Play Royal Marriage Solitaire Online Free - Unite the King & Queen","Play Royal Marriage Solitaire free! Eliminate cards to bring King and Queen of Hearts together. Accordion-style game. No ads, no downloads!"],"russian":["Play Russian Solitaire Online Free - Hard Yukon Variant","Play Russian Solitaire free online! Like Yukon but build by suit instead of alternating colors. Much harder! No stock pile. No ads, no downloads required!"],"saliclaw":["Play Salic Law Solitaire Online Free - No Queens Allowed","Play Salic Law Solitaire free! Two decks with all Queens removed. Build Ace to Jack foundations. Unique historical theme. No ads, no downloads!"],"scorpion":["Play Scorpion Solitaire Online Free - Challenging Card Game","Play Scorpion Solitaire free! Build King-to-Ace sequences that auto-remove. 3-card reserve. Challenging - no ads!"],"sevendevils":["Play Seven Devils Solitaire Online Free - Spider Variant","Play Seven Devils Solitaire free! Build 7 descending sequences by suit. Challenging Spider-style variant with unique 7-foundation layout. No ads, no..."],"simplesimon":["Play Simple Simon Solitaire Online Free - All Cards Visible","Play Simple Simon Solitaire free! All 52 cards dealt face-up. Build down by suit in tableau. Pure strategy with complete information. No ads, no downloads!"],"sirtommy":["Play Sir Tommy Solitaire Online Free - Original Patience Game","Play Sir Tommy Solitaire free! One of the oldest solitaire games. Build 4 foundations up regardless of suit. Simple rules, challenging strategy. No ads, no"],"somerset":["Play Somerset Solitaire Online Free - Klondike Variant","Play Somerset Solitaire free! Like Klondike but with different building rules. Unique tableau structure adds challenge. No ads, no downloads required!"],"spanishpatience":["Play Spanish Patience Solitaire Online Free - Two Deck Game","Play Spanish Patience free! Uses two decks with unique building rules. Challenging variant with 10 tableau piles. No ads, no downloads required!"],"spider":["Play Spider Solitaire Online Free - 1, 2, or 4 Suits","Play Spider Solitaire free online - 1, 2, or 4 suits. Build King-to-Ace sequences to win. No ads, no downloads!"],"spiderette":["Play Spiderette Solitaire Online Free - One-Deck Spider Variant","Play Spiderette Solitaire free! Spider rules with one deck (52 cards). Build down by suit, remove complete sequences. No ads!"],"streetsandalleys":["Play Streets and Alleys Solitaire Online Free - FreeCell Variant","Play Streets and Alleys free! Like FreeCell but without free cells. All cards visible, pure strategy. Challenging variant - no ads, no downloads!"],"sudoku":["Play Sudoku Online Free - Daily Challenges & Multiple Difficulties","Play free Sudoku online with daily challenges! 4 difficulty levels from Beginner to Xtreme. Hints, notes, timer & auto-save. No ads!"],"sultan":["Play Sultan Solitaire Online Free - Build Around The Sultan","Play Sultan Solitaire free! Build 8 foundations around a central Sultan (King of Hearts). Two deck game with unique layout. No ads, no downloads!"],"terrace":["Play Terrace Solitaire Online Free - Two Deck Challenge","Play Terrace Solitaire free! Features unique reserve terrace and starting rank for foundations. Complex two-deck strategy game. No ads, no downloads!"],"thievesofegypt":["Play Thieves of Egypt Solitaire Online Free - Two Deck Pyramid","Play Thieves of Egypt free! Two-deck Pyramid variant with 10 tableau piles. Match pairs adding to 13. Challenging strategic game - no ads, no downloads!"],"threeblindmice":["Play Three Blind Mice Solitaire Online Free - Strategic Card Game","Play Three Blind Mice Solitaire free! Build down by suit with three reserve cells. Strategic variant combining FreeCell and Klondike elements. No ads, no"],"thumbandpouch":["Play Thumb and Pouch Solitaire Online Free - Klondike Variant","Play Thumb and Pouch Solitaire free! Unique Klondike variant with double dealing and strategic building. Challenging and rewarding - no ads, no downloads!"],"trefoil":["Play Trefoil Solitaire Online Free - La Belle Lucie Variant","Play Trefoil Solitaire free! Build by suit in fan layouts with strategic redeals. Classic elegant card game also known as Three Shuffles. No ads, no..."],"triangle":["Play Triangle Solitaire Online Free - Pyramid Matching Game","Play Triangle Solitaire free! Clear pyramid by matching cards that sum to 13. Similar to Pyramid but with unique layout. Strategic matching game - no ads,"],"tripeaks":["Play TriPeaks Solitaire Online Free - Fast-Paced Card Game","Play TriPeaks Solitaire free! Fast, fun card game. Clear three peaks by matching one higher or lower. No ads!"],"twenty":["Play Twenty Solitaire Online Free - Strategic Tableau Game","Play Twenty Solitaire free! Build down by suit with strategic reserve management. Challenging variant with unique 20-card tableau layout. No ads, no..."],"wasp":["Play Wasp Solitaire Online Free - Scorpion Variant Challenge","Play Wasp Solitaire free! Scorpion rules with different dealing pattern. Build down by suit, move any face-up card. Strategic! No ads!"],"westcliff":["Play Westcliff Solitaire Online Free - Klondike with 10 Piles","Play Westcliff Solitaire free! Like Klondike but with 10 tableau piles and unique dealing pattern. Challenging strategic variant - no ads, no downloads!"],"wheel":["Play Wheel Solitaire Online Free - Circular Layout Game","Play Wheel Solitaire free! Unique circular spoke layout with strategic building. Beautiful radial design makes this variant visually distinctive. No ads,"],"willothewisp":["Play Will o' the Wisp Solitaire Online Free - Strategic Building Game","Play Will o' the Wisp Solitaire free! Build foundations from Kings down and Aces up simultaneously. Unique bidirectional building challenge - no ads, no..."],"windmill":["Play Windmill Solitaire Online Free - Cross Pattern Game","Play Windmill Solitaire free! Unique cross-shaped layout with central reserve pile. Build eight foundations in distinctive windmill pattern. No ads, no..."],"yukon":["Play Yukon Solitaire Online Free - Klondike Variation","Play Yukon Solitaire free online! Challenging Klondike variant with all cards visible. Move any face-up card. No ads!"]};if(p.startsWith('/play/')||p.match(/^\/(en|es|fr|nl|hi|de)\/play\//)){var m=p.match(/\/play\/([^\/\?]+)/);if(m&&m[1]){var n=m[1];c.href='https://trysolitaire.com/en/play/'+n;var d=g[n];if(d){document.title=d[0];var e=document.querySelector('meta[name="description"]');if(e)e.content=d[1];var t=document.querySelector('meta[property="og:title"]');if(t)t.content=d[0];var o=document.querySelector('meta[property="og:description"]');if(o)o.content=d[1]}['en','es','fr','nl','hi','de'].forEach(function(l){h.forEach(function(tag){var hr=tag.getAttribute('hreflang');if(hr===l||(hr==='x-default'&&l==='en'))tag.href='https://trysolitaire.com/'+l+'/play/'+n})})}}})();</script>
    <!-- SEO_SCRIPT_END -->

    <!-- Apply saved theme immediately to prevent flash (default: dark-green) -->
    <script>
    (function() {
        var theme = localStorage.getItem('theme') || 'dark-green';
        if (theme !== 'default') {
            document.documentElement.setAttribute('data-theme', theme);
        }
    })();
    </script>

    <!-- Hide pre-rendered Klondike content if loading different game -->
    <script>
    (function() {
        var p = window.location.pathname;
        var isNonKlondike = p.match(/\/play\/(?!klondike)/) ||
                           (p.match(/^\/(en|es|fr|nl|hi|de)\/play\//) && !p.includes('/play/klondike'));
        if (isNonKlondike) {
            var s = document.createElement('style');
            s.id = 'preload-hide';
            s.textContent = '#game-area > .top-piles, #game-area > .tableau-piles { visibility: hidden; } #game-name-display { visibility: hidden; }';
            document.head.appendChild(s);
        }
    })();
    </script>

    <!-- Hreflang Tags for Multi-Language Support -->
    <link rel="alternate" hreflang="en" href="https://trysolitaire.com/">
    <link rel="alternate" hreflang="es" href="https://trysolitaire.com/es/">
    <link rel="alternate" hreflang="fr" href="https://trysolitaire.com/fr/">
    <link rel="alternate" hreflang="nl" href="https://trysolitaire.com/nl/">
    <link rel="alternate" hreflang="hi" href="https://trysolitaire.com/hi/">
    <link rel="alternate" hreflang="de" href="https://trysolitaire.com/de/">
    <link rel="alternate" hreflang="x-default" href="https://trysolitaire.com/">

    <!-- Open Graph / Facebook -->
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://trysolitaire.com/">
    <meta property="og:title" content="Play Free Solitaire Games Online | 100% Ad-Free">
    <meta property="og:description" content="Play free solitaire games online - 100% ad-free, no sign-up required. Klondike, Spider, FreeCell, Pyramid, TriPeaks and more. Plus Sudoku and 2048. Instant play!">
    <meta property="og:image" content="https://trysolitaire.com/klondike.png">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:alt" content="Klondike Solitaire game screenshot">
    <meta property="og:site_name" content="Try Solitaire">

    <!-- Twitter -->
    <meta property="twitter:card" content="summary_large_image">
    <meta property="twitter:url" content="https://trysolitaire.com/">
    <meta property="twitter:title" content="Play Free Solitaire Games Online | 100% Ad-Free">
    <meta property="twitter:description" content="Play free solitaire games online - 100% ad-free, no sign-up required. Klondike, Spider, FreeCell, Pyramid, TriPeaks and more. Plus Sudoku and 2048. Instant play!">
    <meta property="twitter:image" content="https://trysolitaire.com/klondike.png">
    <meta property="twitter:image:alt" content="Klondike Solitaire game screenshot">

    <!-- Google Fonts - Inter for body, Poppins for headings -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Poppins:wght@600;700&display=swap" rel="stylesheet">

    <!-- Favicon - Based on TrySolitaire logo (crown with three aces) -->
    <link rel="icon" type="image/x-icon" href="/assets/favicon-2cx6jndB.ico" sizes="16x16 32x32 48x48">
    <link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16-89yxs7wr.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32-oFSJS_Fr.png">
    <link rel="shortcut icon" href="/assets/favicon-2cx6jndB.ico">

    <!-- PWA Manifest -->
    <link rel="manifest" href="/assets/manifest-DLV4Xx3g.json">

    <!-- iOS Specific Meta Tags -->
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="apple-mobile-web-app-title" content="TrySolitaire">
    <link rel="apple-touch-icon" href="/assets/icon-180x180-B9MDctuR.png">

    <!-- Android/Chrome Theme -->
    <meta name="theme-color" content="#1a1a2e">
    <meta name="mobile-web-app-capable" content="yes">

    <!-- Windows Metro Tile -->
    <meta name="msapplication-TileColor" content="#1a1a2e">
    <meta name="msapplication-TileImage" content="/assets/icon-144x144-Dcm3oB1e.png">
    <meta name="msapplication-config" content="data:text/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPGJyb3dzZXJjb25maWc+CiAgPG1zYXBwbGljYXRpb24+CiAgICA8dGlsZT4KICAgICAgPHNxdWFyZTcweDcwbG9nbyBzcmM9Ii9hc3NldHMvaWNvbnMvaWNvbi03Mng3Mi5wbmciLz4KICAgICAgPHNxdWFyZTE1MHgxNTBsb2dvIHNyYz0iL2Fzc2V0cy9pY29ucy9pY29uLTE1MngxNTIucG5nIi8+CiAgICAgIDxzcXVhcmUzMTB4MzEwbG9nbyBzcmM9Ii9hc3NldHMvaWNvbnMvaWNvbi0zODR4Mzg0LnBuZyIvPgogICAgICA8VGlsZUNvbG9yPiMxYTFhMmU8L1RpbGVDb2xvcj4KICAgIDwvdGlsZT4KICA8L21zYXBwbGljYXRpb24+CjwvYnJvd3NlcmNvbmZpZz4K">

    <!-- Preload critical assets -->
    <link rel="modulepreload" href="/assets/main-BNO4ztpi.js">
    <!-- Preload critical JavaScript modules to avoid request chain -->
    <link rel="modulepreload" href="/assets/router-_N8CMb1p.js">
    <link rel="modulepreload" href="/assets/app-DFt5hC7l.js">
    <link rel="modulepreload" href="/assets/i18n-CQmPgXAu.js">
    <link rel="modulepreload" href="/assets/utils-8Y3QT3b_.js">
    <link rel="modulepreload" href="/assets/klondike-CqPnxXdp.js">
    <link rel="modulepreload" href="/assets/EventManager-Dfyfn0ko.js">
    <link rel="modulepreload" href="/assets/index-D9-7u_MU.js">
    <link rel="modulepreload" href="data:text/javascript;base64,Ly8gU3RvcmFnZSBtYW5hZ2VyIGZvciBiZXN0IHRpbWVzIGFuZCBnYW1lIGRhdGEKY29uc3QgU3RvcmFnZSA9IHsKICAgIC8vIFRyeSBsb2NhbFN0b3JhZ2UgZmlyc3QsIGZhbGxiYWNrIHRvIGNvb2tpZXMKICAgIHNldChrZXksIHZhbHVlLCBkYXlzID0gMzY1KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY29va2llCiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXMgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgZGF5cyAqIDg2NGU1KS50b1VUQ1N0cmluZygpOwogICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHZhbHVlKSl9OyBleHBpcmVzPSR7ZXhwaXJlc307IHBhdGg9LzsgU2FtZVNpdGU9TGF4YDsKICAgICAgICB9CiAgICB9LAoKICAgIGdldChrZXkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBpdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTsKICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPyBKU09OLnBhcnNlKGl0ZW0pIDogbnVsbDsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGNvb2tpZQogICAgICAgICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnwgKScgKyBrZXkgKyAnPShbXjtdKyknKSk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbMl0pKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0sCgogICAgLy8gR2V0IHJhdyBzdHJpbmcgdmFsdWUgKG5vIEpTT04gcGFyc2luZykKICAgIGdldFN0cmluZyhrZXksIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBpdGVtID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTsKICAgICAgICAgICAgcmV0dXJuIGl0ZW0gIT09IG51bGwgPyBpdGVtIDogZGVmYXVsdFZhbHVlOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY29va2llCiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefCApJyArIGtleSArICc9KFteO10rKScpKTsKICAgICAgICAgICAgcmV0dXJuIG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzJdKSA6IGRlZmF1bHRWYWx1ZTsKICAgICAgICB9CiAgICB9LAoKICAgIC8vIFNldCByYXcgc3RyaW5nIHZhbHVlIChubyBKU09OIHN0cmluZ2lmaWNhdGlvbikKICAgIHNldFN0cmluZyhrZXksIHZhbHVlLCBkYXlzID0gMzY1KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAvLyBGYWxsYmFjayB0byBjb29raWUKICAgICAgICAgICAgY29uc3QgZXhwaXJlcyA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBkYXlzICogODY0ZTUpLnRvVVRDU3RyaW5nKCk7CiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke2tleX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfTsgZXhwaXJlcz0ke2V4cGlyZXN9OyBwYXRoPS87IFNhbWVTaXRlPUxheGA7CiAgICAgICAgfQogICAgfSwKCiAgICAvLyBHZXQgbnVtYmVyIHZhbHVlCiAgICBnZXROdW1iZXIoa2V5LCBkZWZhdWx0VmFsdWUgPSAwKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFN0cmluZyhrZXkpOwogICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpOwogICAgICAgIHJldHVybiBpc05hTihudW0pID8gZGVmYXVsdFZhbHVlIDogbnVtOwogICAgfSwKCiAgICAvLyBHZXQgYm9vbGVhbiB2YWx1ZQogICAgZ2V0Qm9vbGVhbihrZXksIGRlZmF1bHRWYWx1ZSA9IGZhbHNlKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFN0cmluZyhrZXkpOwogICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJzsKICAgIH0sCgogICAgLy8gR2V0IG9iamVjdCB2YWx1ZSAod2l0aCBKU09OIHBhcnNpbmcpCiAgICBnZXRPYmplY3Qoa2V5LCBkZWZhdWx0VmFsdWUgPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGtleSkgfHwgZGVmYXVsdFZhbHVlOwogICAgfSwKCiAgICAvLyBSZW1vdmUgYW4gaXRlbQogICAgcmVtb3ZlKGtleSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAvLyBSZW1vdmUgZnJvbSBjb29raWUKICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7a2V5fT07IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBVVEM7IHBhdGg9LztgOwogICAgICAgIH0KICAgIH0sCgogICAgLy8gQ2xlYXIgYWxsIGl0ZW1zICh1c2Ugd2l0aCBjYXV0aW9uKQogICAgY2xlYXIoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAvLyBDYW5ub3QgY2xlYXIgYWxsIGNvb2tpZXMgZWFzaWx5LCBzbyBkbyBub3RoaW5nCiAgICAgICAgfQogICAgfSwKCiAgICBnZXRCZXN0VGltZShnYW1lKSB7CiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0KGBiZXN0VGltZV8ke2dhbWV9YCk7CiAgICAgICAgcmV0dXJuIGRhdGE/LnRpbWUgPz8gbnVsbDsKICAgIH0sCgogICAgc2V0QmVzdFRpbWUoZ2FtZSwgdGltZSkgewogICAgICAgIHRoaXMuc2V0KGBiZXN0VGltZV8ke2dhbWV9YCwgeyB0aW1lLCBkYXRlOiBEYXRlLm5vdygpIH0pOwogICAgfSwKCiAgICBjaGVja0FuZFVwZGF0ZUJlc3RUaW1lKGdhbWUsIHRpbWUpIHsKICAgICAgICBjb25zdCBjdXJyZW50QmVzdCA9IHRoaXMuZ2V0QmVzdFRpbWUoZ2FtZSk7CiAgICAgICAgaWYgKGN1cnJlbnRCZXN0ID09PSBudWxsIHx8IHRpbWUgPCBjdXJyZW50QmVzdCkgewogICAgICAgICAgICB0aGlzLnNldEJlc3RUaW1lKGdhbWUsIHRpbWUpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTmV3IHJlY29yZAogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn07CgovLyBFUzYgbW9kdWxlIGV4cG9ydApleHBvcnQgZGVmYXVsdCBTdG9yYWdlOwo=">
    <link rel="modulepreload" href="/assets/statsManager-D8M4nj5l.js">
    <link rel="modulepreload" href="/assets/gameRelationships-DmfesUsR.js">
    <!-- Preload default game content JSON to break dependency chain -->
    <link rel="preload" href="locales/en/klondike.json" as="fetch" crossorigin="anonymous">
    <link rel="preload" href="/assets/icon-192x192-fGs4ECPO.png" as="image">
    <link rel="preload" href="/assets/klondike-RerajoWq.webp" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="/assets/spider-CVAVPeOv.webp" as="image" type="image/webp" fetchpriority="high">
    <!-- Preload default card back (WebP) and initial cards for faster LCP -->
    <link rel="preload" href="/assets/Spanish@1.5x-BZMLGn_r.webp" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="/assets/Spanish@1x-DBHn9Yex.webp" as="image" type="image/webp" media="(max-width: 600px)">
    <!-- Preload foundation placeholder (LCP element) -->
    <link rel="preload" href="/assets/Placeholder@1.5x-BXklLBKi.webp" as="image" type="image/webp" fetchpriority="high">
    <!-- Preload responsive card images for Klondike initial deal -->
    <link rel="preload" href="data:image/webp;base64,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" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="data:image/webp;base64,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" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="data:image/webp;base64,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" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="data:image/webp;base64,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" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="/assets/5C@1.5x-Cnurz6S6.webp" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="/assets/6C@1.5x-C2iLl0ej.webp" as="image" type="image/webp" fetchpriority="high">
    <link rel="preload" href="/assets/7C@1.5x-CSCQv7RL.webp" as="image" type="image/webp" fetchpriority="high">

    <!-- CSS Migration Bridge (Phase 1) - Loads design tokens before main styles -->

    <!-- Main stylesheet (critical) -->

    <!-- Font Awesome Icons (deferred to prevent render blocking) -->
    <!-- Using media="print" trick to defer loading until after page render -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA==" crossorigin="anonymous" referrerpolicy="no-referrer" media="print" onload="this.media='all';" id="font-awesome-css">

    <!-- Font Awesome font-display override (after CSS loads) -->
    <script>
        document.getElementById('font-awesome-css').addEventListener('load', function() {
            const style = document.createElement('style');
            style.textContent = '@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:swap;src:url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/webfonts/fa-solid-900.woff2) format("woff2")}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:swap;src:url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/webfonts/fa-regular-400.woff2) format("woff2")}';
            document.head.appendChild(style);
        });
    </script>

    <!-- Non-critical performance CSS (loaded after DOM) -->
    <script>
        window.addEventListener('DOMContentLoaded', function() {
            const perfCSS = document.createElement('link');
            perfCSS.rel = 'stylesheet';
            perfCSS.href = 'css/performance.min.css';
            document.head.appendChild(perfCSS);
        });
    </script>

    <!-- JSON-LD Structured Data -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "WebApplication",
      "name": "Try Solitaire - Free Online Solitaire, Sudoku & 2048 Games",
      "applicationCategory": "Game",
      "genre": ["Card Game", "Puzzle Game", "Logic Puzzle", "Brain Game"],
      "url": "https://trysolitaire.com/",
      "description": "Play free Solitaire, Sudoku, and 2048 online with no ads, no downloads, no signup required. Daily Sudoku challenges, multiple solitaire variants, and 2048 modes. The best free card and puzzle games with smooth animations.",
      "operatingSystem": "Any",
      "browserRequirements": "Requires JavaScript. Modern web browser required.",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD"
      },
      "featureList": [
        "No ads",
        "100% free",
        "No download required",
        "No signup required",
        "Mobile friendly",
        "Beautiful SVG cards",
        "Smooth animations",
        "Track statistics",
        "Multiple game modes",
        "Daily Sudoku challenges",
        "2048 puzzle game with 3 modes",
        "Classic solitaire variants",
        "Sudoku difficulty levels",
        "Notes mode and hints"
      ],
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "4.9",
        "ratingCount": "1247",
        "bestRating": "5"
      }
    }
    </script>

    <!-- FAQ Schema -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Is TrySolitaire really 100% free with no ads?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes! TrySolitaire is completely free with zero ads, no sign-up required, and no downloads needed. We believe in providing a pure gaming experience without interruptions."
          }
        },
        {
          "@type": "Question",
          "name": "What solitaire games can I play?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "We offer 100+ solitaire games including Klondike (classic Solitaire), Spider, FreeCell, Pyramid, TriPeaks, Golf, Yukon, Russian, Scorpion, Canfield, Forty Thieves, and many more variants."
          }
        },
        {
          "@type": "Question",
          "name": "Do I need to download anything to play?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "No downloads required! All games run directly in your web browser. Just visit the site and start playing instantly on any device - desktop, tablet, or mobile."
          }
        },
        {
          "@type": "Question",
          "name": "Can I play on mobile devices?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes! TrySolitaire is fully optimized for mobile devices with touch-friendly controls, responsive design, and works perfectly on iOS and Android phones and tablets."
          }
        },
        {
          "@type": "Question",
          "name": "Are my game statistics saved?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes! Your game stats (wins, losses, streaks, best times) are automatically saved in your browser's local storage. No account needed - your privacy is protected."
          }
        },
        {
          "@type": "Question",
          "name": "What is the difference between Klondike and Spider Solitaire?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Klondike (classic Solitaire) uses 1 deck and builds foundations by suit from Ace to King. Spider uses 2 decks and builds tableau sequences from King to Ace, which are then removed when complete."
          }
        },
        {
          "@type": "Question",
          "name": "Can I play Sudoku and 2048 as well?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes! In addition to 100+ solitaire games, we offer Daily Sudoku challenges with multiple difficulty levels, and 2048 puzzle game with 3 different board sizes (4x4, 5x5, 6x6)."
          }
        }
      ]
    }
    </script>

    <!-- Breadcrumb Schema -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://trysolitaire.com/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "All Games",
          "item": "https://trysolitaire.com/all-games"
        }
      ]
    }
    </script>
  <script type="module" crossorigin src="/js/main-CJanO94B.js"></script>
  <link rel="modulepreload" crossorigin href="/js/modulepreload-polyfill-YP0FEG5d.js">
  <link rel="modulepreload" crossorigin href="/js/stats-Be06zLH_.js">
  <link rel="modulepreload" crossorigin href="/js/overlays-TDQmR44h.js">
  <link rel="modulepreload" crossorigin href="/js/daily-challenge-B6dJhNIX.js">
  <link rel="modulepreload" crossorigin href="/js/ui-modules-1wOHEtBS.js">
  <link rel="stylesheet" crossorigin href="/assets/styles-bridge-CVwag0mU.css">
</head>
<body>
    <!-- Game Selection Overlay (hidden by default since we auto-load Klondike) -->
    <div class="game-selection-overlay hidden" id="game-selection-overlay">
        <div class="game-selection-container">
            <div class="overlay-header">
                <div class="overlay-branding">
                    <img src="/logo-64.webp"
                         srcset="/logo-64.webp 1x, /logo-128.webp 2x"
                         alt="TrySolitaire Logo"
                         class="header-logo"
                         width="64"
                         height="64">
                    <h1 class="overlay-title" data-i18n="gameSelection.mainTitle">Free Solitaire Games Online</h1>
                </div>
                <h2 class="overlay-tagline" data-i18n="gameSelection.tagline">Play Classic Games Free</h2>
                <div class="overlay-social-proof">
                    <span class="social-proof-text" data-i18n="gameSelection.socialProof">No Ads • No Sign-Up • No Downloads • Privacy First • Free Forever</span>
                </div>
            </div>

            <!-- All Games Grid -->
            <div class="games-grid">
                <!-- Regional Variants for Klondike -->
                <div class="game-card" data-game="klondike" data-display-name="Solitaire">
                    <span class="game-badge popular" data-i18n="gameSelection.popular">Popular</span>
                    <picture class="game-card-icon">
                        <source srcset="/assets/klondike-RerajoWq.webp" type="image/webp">
                        <img src="/assets/klondike-RerajoWq.webp" alt="Solitaire" loading="eager" fetchpriority="high">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.solitaireName">Solitaire</h3>
                </div>

                <div class="game-card" data-game="klondike" data-display-name="Patience">
                    <picture class="game-card-icon">
                        <source srcset="/assets/klondike-RerajoWq.webp" type="image/webp">
                        <img src="/assets/klondike-RerajoWq.webp" alt="Patience" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.patienceName">Patience</h3>
                </div>

                <div class="game-card" data-game="klondike" data-display-name="Klondike">
                    <picture class="game-card-icon">
                        <source srcset="/assets/klondike-RerajoWq.webp" type="image/webp">
                        <img src="/assets/klondike-RerajoWq.webp" alt="Klondike Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.klondikeName">Klondike</h3>
                </div>

                <div class="game-card" data-game="spider">
                    <span class="game-badge popular" data-i18n="gameSelection.popular">Popular</span>
                    <picture class="game-card-icon">
                        <source srcset="/assets/spider-CVAVPeOv.webp" type="image/webp">
                        <img src="/assets/spider-CVAVPeOv.webp" alt="Spider Solitaire" loading="eager" fetchpriority="high">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.spiderName">Spider Solitaire</h3>
                </div>

                <div class="game-card" data-game="freecell">
                    <span class="game-badge popular" data-i18n="gameSelection.popular">Popular</span>
                    <picture class="game-card-icon">
                        <source srcset="/assets/freecell-B-cUBKtx.webp" type="image/webp">
                        <img src="/assets/freecell-B-cUBKtx.webp" alt="FreeCell Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.freecellName">FreeCell Solitaire</h3>
                </div>

                <div class="game-card" data-game="pyramid">
                    <picture class="game-card-icon">
                        <source srcset="/assets/pyramid-BkJusHDc.webp" type="image/webp">
                        <img src="/assets/pyramid-BkJusHDc.webp" alt="Pyramid Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.pyramidName">Pyramid Solitaire</h3>
                </div>

                <div class="game-card" data-game="tripeaks">
                    <picture class="game-card-icon">
                        <source srcset="/assets/tripeaks-Bi0yYZyN.webp" type="image/webp">
                        <img src="/assets/tripeaks-Bi0yYZyN.webp" alt="TriPeaks Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.tripeaksName">TriPeaks Solitaire</h3>
                </div>

                <div class="game-card" data-game="golf">
                    <picture class="game-card-icon">
                        <source srcset="/assets/golf-MZiJCOpW.webp" type="image/webp">
                        <img src="/assets/golf-MZiJCOpW.webp" alt="Golf Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.golfName">Golf Solitaire</h3>
                </div>

                <div class="game-card" data-game="yukon">
                    <picture class="game-card-icon">
                        <source srcset="/assets/klondike-RerajoWq.webp" type="image/webp">
                        <img src="/assets/klondike-RerajoWq.webp" alt="Yukon Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.yukonName">Yukon</h3>
                </div>

                <div class="game-card" data-game="russian">
                    <picture class="game-card-icon">
                        <source srcset="/assets/klondike-RerajoWq.webp" type="image/webp">
                        <img src="/assets/klondike-RerajoWq.webp" alt="Russian Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.russianName">Russian</h3>
                </div>

                <div class="game-card" data-game="fortythieves">
                    <picture class="game-card-icon">
                        <source srcset="/assets/klondike-RerajoWq.webp" type="image/webp">
                        <img src="/assets/klondike-RerajoWq.webp" alt="Forty Thieves Solitaire" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.fortyThievesName">Forty Thieves</h3>
                </div>

                <div class="game-card" data-game="sudoku">
                    <span class="game-badge popular" data-i18n="gameSelection.popular">Popular</span>
                    <picture class="game-card-icon">
                        <source srcset="/assets/sudoku-nRH4x7xy.webp" type="image/webp">
                        <img src="/assets/sudoku-nRH4x7xy.webp" alt="Sudoku" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.sudokuName">Sudoku</h3>
                </div>

                <div class="game-card" data-game="2048">
                    <span class="game-badge trending" data-i18n="gameSelection.trending">Trending</span>
                    <picture class="game-card-icon">
                        <source srcset="/assets/2048-BH7uOGtj.webp" type="image/webp">
                        <img src="/assets/2048-BH7uOGtj.webp" alt="2048" loading="lazy">
                    </picture>
                    <h3 class="game-card-name" data-i18n="gameSelection.2048Name">2048</h3>
                </div>

                <!-- All Games Link -->
                <a href="/all-games" class="game-card all-games-card" style="text-decoration: none;">
                    <span class="game-badge" style="background: var(--border-accent, #ffd700); color: #000;">107</span>
                    <div class="game-card-icon" style="font-size: 4rem; color: var(--nav-gradient-start, #2e7d32);">
                        <i class="fas fa-th"></i>
                    </div>
                    <h3 class="game-card-name" data-i18n="gameSelection.allGames">All Games</h3>
                    <p style="margin: 0.5rem 0 0 0; font-size: 0.85rem; color: var(--text-primary, #666);" data-i18n="gameSelection.allGamesSubtitle">Browse all games</p>
                </a>
            </div>
        </div>
    </div>

    <nav class="top-menu">
        <button class="hamburger-menu" id="hamburger-menu" aria-label="Game Menu">
            <span></span>
            <span></span>
            <span></span>
        </button>

        <div class="logo">
            <a href="/" id="logo-link" style="display: flex; align-items: center; text-decoration: none; cursor: pointer;">
                <img src="/logo-64.webp"
                     srcset="/logo-64.webp 1x, /logo-128.webp 2x"
                     alt="Try Solitaire"
                     style="width: 50px; height: 50px; object-fit: contain;"
                     width="50"
                     height="50">
                <span id="game-name-display" style="color: white; font-weight: bold; font-size: 1.1rem; margin-left: 0.5rem;">Solitaire</span>
            </a>
            <div class="new-game-buttons" id="klondike-buttons">
                <div class="game-dropdown">
                    <button class="dropdown-trigger" id="klondike-dropdown-trigger">
                        <span data-i18n="nav.newGame">New Game</span>
                        <i class="fas fa-chevron-down"></i>
                    </button>
                    <div class="dropdown-menu" id="klondike-dropdown-menu">
                        <button class="dropdown-option active" id="draw-1-btn" data-draw="1">
                            <i class="fas fa-check"></i>
                            <span data-i18n="settings.turn1">Turn 1</span>
                        </button>
                        <button class="dropdown-option" id="draw-3-btn" data-draw="3">
                            <i class="fas fa-check" style="opacity: 0;"></i>
                            <span data-i18n="settings.turn3">Turn 3</span>
                        </button>
                        <div class="dropdown-separator"></div>
                        <button class="dropdown-option daily-challenge" id="daily-draw-1-btn" data-draw="1" data-daily="true">
                            <i class="fas fa-fire"></i>
                            <span data-i18n="nav.dailyChallengeShort">Daily (Turn 1)</span>
                        </button>
                        <button class="dropdown-option daily-challenge" id="daily-draw-3-btn" data-draw="3" data-daily="true">
                            <i class="fas fa-fire"></i>
                            <span data-i18n="nav.dailyChallengeShort3">Daily (Turn 3)</span>
                        </button>
                    </div>
                </div>
                <button class="new-game-btn restart-btn" id="klondike-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="doubleklondike-buttons" style="display: none;">
                <div class="game-dropdown">
                    <button class="dropdown-trigger" id="doubleklondike-dropdown-trigger">
                        <span data-i18n="nav.newGame">New Game</span>
                        <i class="fas fa-chevron-down"></i>
                    </button>
                    <div class="dropdown-menu" id="doubleklondike-dropdown-menu">
                        <button class="dropdown-option active" id="doubleklondike-draw-1-btn" data-draw="1">
                            <i class="fas fa-check"></i>
                            <span data-i18n="settings.turn1">Turn 1</span>
                        </button>
                        <button class="dropdown-option" id="doubleklondike-draw-3-btn" data-draw="3">
                            <i class="fas fa-check" style="opacity: 0;"></i>
                            <span data-i18n="settings.turn3">Turn 3</span>
                        </button>
                    </div>
                </div>
                <button class="new-game-btn restart-btn" id="doubleklondike-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="spider-buttons" style="display: none;">
                <div class="game-dropdown">
                    <button class="dropdown-trigger" id="spider-dropdown-trigger">
                        <span data-i18n="nav.newGame">New Game</span>
                        <i class="fas fa-chevron-down"></i>
                    </button>
                    <div class="dropdown-menu" id="spider-dropdown-menu">
                        <button class="dropdown-option active" id="spider-1-suit" data-suits="1">
                            <i class="fas fa-check"></i>
                            <span data-i18n="settings.oneSuit">1 Suit</span>
                        </button>
                        <button class="dropdown-option" id="spider-2-suits" data-suits="2">
                            <i class="fas fa-check" style="opacity: 0;"></i>
                            <span data-i18n="settings.twoSuits">2 Suits</span>
                        </button>
                        <button class="dropdown-option" id="spider-4-suits" data-suits="4">
                            <i class="fas fa-check" style="opacity: 0;"></i>
                            <span data-i18n="settings.fourSuits">4 Suits</span>
                        </button>
                    </div>
                </div>
                <button class="new-game-btn restart-btn" id="spider-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="freecell-buttons" style="display: none;">
                <button class="new-game-btn" id="freecell-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="freecell-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="pyramid-buttons" style="display: none;">
                <button class="new-game-btn" id="pyramid-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="pyramid-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="tripeaks-buttons" style="display: none;">
                <button class="new-game-btn" id="tripeaks-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="tripeaks-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="golf-buttons" style="display: none;">
                <button class="new-game-btn" id="golf-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="golf-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="yukon-buttons" style="display: none;">
                <button class="new-game-btn" id="yukon-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="yukon-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="russian-buttons" style="display: none;">
                <button class="new-game-btn" id="russian-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="russian-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="scorpion-buttons" style="display: none;">
                <button class="new-game-btn" id="scorpion-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="scorpion-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="fortythieves-buttons" style="display: none;">
                <button class="new-game-btn" id="fortythieves-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="fortythieves-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="canfield-buttons" style="display: none;">
                <button class="new-game-btn" id="canfield-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="canfield-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="gaps-buttons" style="display: none;">
                <button class="new-game-btn" id="gaps-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="gaps-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="accordion-buttons" style="display: none;">
                <button class="new-game-btn" id="accordion-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="accordion-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="minesweeper-buttons" style="display: none;">
                <button class="new-game-btn" id="minesweeper-new" data-i18n="nav.newGame">New Game</button>
                <button class="new-game-btn restart-btn" id="minesweeper-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="australianpatience-buttons" style="display: none;">
                <div class="game-dropdown">
                    <button class="dropdown-trigger" id="australianpatience-dropdown-trigger">
                        <span data-i18n="nav.newGame">New Game</span>
                        <i class="fas fa-chevron-down"></i>
                    </button>
                    <div class="dropdown-menu" id="australianpatience-dropdown-menu">
                        <button class="dropdown-option active" id="australianpatience-turn-1-btn" data-draw="1">
                            <i class="fas fa-check"></i>
                            <span data-i18n="settings.draw1">Turn 1</span>
                        </button>
                        <button class="dropdown-option" id="australianpatience-turn-3-btn" data-draw="3">
                            <i class="fas fa-check" style="opacity: 0;"></i>
                            <span data-i18n="settings.draw3">Turn 3</span>
                        </button>
                    </div>
                </div>
                <button class="new-game-btn restart-btn" id="australianpatience-restart" disabled data-i18n="nav.restart">Restart</button>
            </div>
            <div class="new-game-buttons" id="2048-buttons" style="display: none;">
                <button class="new-game-btn" id="2048-new-btn" data-i18n="nav.newGame">New Game</button>
            </div>

            <div class="new-game-buttons" id="sudoku-buttons" style="display: none;">
                <!-- Sudoku navigation moved to left sidebar -->
            </div>

            <!-- Quick Navigation Links (populated dynamically based on current game) -->
            <div class="quick-nav-links" id="quick-nav-links">
                <!-- Links will be populated by updateQuickNavLinks() in app.js -->
            </div>
        </div>

        <!-- Language Selector (Desktop) -->
        <div id="language-switcher-container"></div>
    </nav>

    <!-- Global Game Menu (Mobile/Tablet) -->
    <div class="global-menu-overlay" id="global-menu-overlay"></div>
    <div class="global-menu" id="global-menu">
        <!-- Language Selector (Mobile) -->
        <div id="mobile-language-switcher-container" style="padding: 1rem; border-bottom: 1px solid rgba(255,255,255,0.1);"></div>

        <h3 data-i18n="gameSelector.title">Games</h3>
        <div class="global-menu-item" data-game="klondike" data-i18n="games.klondike">Klondike</div>
        <div class="global-menu-subitem" data-game="klondike" data-variant="1" data-i18n="settings.draw1">Draw 1</div>
        <div class="global-menu-subitem" data-game="klondike" data-variant="3" data-i18n="settings.draw3">Draw 3</div>
        <div class="global-menu-item" data-game="spider" data-i18n="games.spider">Spider</div>
        <div class="global-menu-subitem" data-game="spider" data-variant="1" data-i18n="settings.oneSuit">1 Suit</div>
        <div class="global-menu-subitem" data-game="spider" data-variant="2" data-i18n="settings.twoSuits">2 Suits</div>
        <div class="global-menu-subitem" data-game="spider" data-variant="4" data-i18n="settings.fourSuits">4 Suits</div>
        <div class="global-menu-item" data-game="freecell" data-i18n="games.freecell">FreeCell</div>
        <div class="global-menu-item" data-game="golf" data-i18n="games.golf">Golf</div>
        <div class="global-menu-item" data-game="tripeaks" data-i18n="games.tripeaks">TriPeaks</div>
        <div class="global-menu-item" data-game="pyramid" data-i18n="games.pyramid">Pyramid</div>
        <div class="global-menu-item" data-game="yukon" data-i18n="games.yukon">Yukon</div>
        <div class="global-menu-item" data-game="russian" data-i18n="games.russian">Russian</div>
        <div class="global-menu-item" data-game="fortythieves" data-i18n="games.fortythieves">Forty Thieves</div>
        <div class="global-menu-item" data-game="2048" data-i18n="games.2048">2048</div>
        <div class="global-menu-item" data-game="sudoku" data-i18n="games.sudoku">Sudoku</div>

        <!-- All Games Link -->
        <div class="global-menu-separator"></div>
        <a href="/all-games" class="global-menu-item all-games-link" data-i18n="nav.allGames">All Games</a>
    </div>

    <div class="game-container">
        <div id="game-area">
            <button class="mobile-stats-toggle" id="mobile-stats-toggle">📊</button>
            <!-- Pre-render Klondike structure for faster LCP -->
            <div class="top-piles">
                <div id="stock" class="card-pile stock-pile"></div>
                <div id="waste" class="card-pile waste-pile"></div>
                <div style="flex: 1;"></div>
                <div id="foundation-0" class="card-pile foundation empty">
                    <img src="/assets/Placeholder@1x-DWNesayk.webp"
                         srcset="/assets/Placeholder@1x-DWNesayk.webp 1x, /assets/Placeholder@1.5x-BXklLBKi.webp 1.5x, /assets/Placeholder@2x-CzlVC_hy.webp 2x"
                         alt=""
                         fetchpriority="high"
                         loading="eager"
                         class="foundation-placeholder-img"
                         style="width: 100%; height: 100%; object-fit: contain; filter: grayscale(100%) brightness(0.6) opacity(0.4);">
                </div>
                <div id="foundation-1" class="card-pile foundation empty"></div>
                <div id="foundation-2" class="card-pile foundation empty"></div>
                <div id="foundation-3" class="card-pile foundation empty"></div>
            </div>
            <div class="tableau-piles">
                <div id="tableau-0" class="card-pile tableau-pile"></div>
                <div id="tableau-1" class="card-pile tableau-pile"></div>
                <div id="tableau-2" class="card-pile tableau-pile"></div>
                <div id="tableau-3" class="card-pile tableau-pile"></div>
                <div id="tableau-4" class="card-pile tableau-pile"></div>
                <div id="tableau-5" class="card-pile tableau-pile"></div>
                <div id="tableau-6" class="card-pile tableau-pile"></div>
            </div>
        </div>

        <!-- Game Info Overlay - Outside game-area so it doesn't get cleared by render() -->
        <div class="game-info-overlay" id="game-info-overlay">
            <!-- Left: Time -->
            <div class="info-item time-item">
                <span class="info-value" id="timer">00:00</span>
            </div>

            <!-- Center elements -->
            <div class="center-items">
                <!-- Moves -->
                <div class="info-item vertical-item">
                    <span class="info-value" id="current-moves">0</span>
                    <span class="info-sublabel" data-i18n="stats.moves">Moves</span>
                </div>

                <!-- Stock -->
                <div class="info-item vertical-item" id="stock-display">
                    <span class="info-value" id="stock-count">24</span>
                    <span class="info-sublabel" data-i18n="stats.stock">Stock</span>
                </div>

                <!-- Hint -->
                <button class="info-item info-btn hint-btn" id="hint-btn" data-i18n-title="nav.hint" title="Show hint">
                    <i class="fas fa-lightbulb"></i>
                </button>

                <!-- Undo -->
                <button class="info-item info-btn undo-btn-overlay" id="undo-btn" data-i18n-title="nav.undo" title="Undo last move">
                    <i class="fas fa-undo-alt btn-icon"></i>
                    <span class="btn-label" data-i18n="nav.undo">Undo</span>
                </button>

                <!-- Points -->
                <div class="info-item points-item">
                    <span class="points-label"><span data-i18n="stats.points">Points</span>: <span id="overlay-score">0</span></span>
                </div>

                <!-- Stats -->
                <button class="info-item info-btn stats-btn-overlay" id="stats-btn-overlay" title="View Stats">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
                        <path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/>
                    </svg>
                </button>

                <!-- Settings -->
                <button class="info-item info-btn settings-btn-overlay" id="settings-btn-overlay" title="Game Preferences">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
                        <path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>
                    </svg>
                </button>
            </div>

            <!-- Right: Bookmark & Bug Report -->
            <button class="info-item info-btn bookmark-btn" id="bookmark-btn" title="Bookmark this site">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
                    <path d="M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z"/>
                </svg>
            </button>
            <a class="info-item info-btn bug-report-btn" href="https://forms.gle/RV1DYVA2WAhLQ24F7" target="_blank" rel="noopener noreferrer" title="Report a bug">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor">
                    <path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/>
                </svg>
            </a>
        </div>
    </div>

        <!-- Preferences Modal -->
        <div class="preferences-modal" id="preferences-modal">
            <div class="preferences-content">
                <div class="preferences-header">
                    <h3 data-i18n="settings.preferences">Preferences</h3>
                    <button class="preferences-close" id="preferences-close">✕</button>
                </div>

                <div class="preferences-tabs">
                    <button class="preferences-tab active" data-tab="cards" data-i18n="settings.cards">Cards</button>
                    <button class="preferences-tab" data-tab="display" data-i18n="settings.display">Display</button>
                    <button class="preferences-tab" data-tab="gameplay" data-i18n="settings.gameplay">Gameplay</button>
                    <button class="preferences-tab" data-tab="sound" data-i18n="settings.sound">Sound</button>
                </div>

                <div class="preferences-body">
                    <div class="preferences-tab-content active" id="tab-cards">
                        <div class="preferences-section">
                            <h4 data-i18n="settings.cardStyle">Card Style</h4>
                            <div class="card-style-options" id="card-style-options">
                                <!-- Card style options will be dynamically generated -->
                            </div>
                        </div>

                        <div class="preferences-section">
                            <h4 data-i18n="settings.cardBack">Card Back</h4>
                            <div class="card-back-options" id="card-back-options">
                                <!-- Card back options will be dynamically generated -->
                            </div>
                        </div>
                    </div>

                    <div class="preferences-tab-content" id="tab-display">
                        <div class="preferences-section">
                            <h4 data-i18n="settings.theme">Theme</h4>
                            <div class="theme-options" id="theme-options">
                                <!-- Theme options will be dynamically generated -->
                            </div>
                        </div>
                    </div>

                    <div class="preferences-tab-content" id="tab-gameplay">
                        <div class="preferences-section">
                            <h4 data-i18n="settings.gameDefaults">Game Defaults</h4>
                            <p class="preference-description" data-i18n="settings.gameDefaultsDesc">Set your preferred starting options for each game</p>

                            <!-- Klondike Draw Count -->
                            <div class="game-default-group">
                                <label class="preference-label" data-i18n="settings.klondikeDefaultDraw">Klondike Draw</label>
                                <div class="radio-group">
                                    <label class="radio-label">
                                        <input type="radio" name="klondike-draw" value="1" checked>
                                        <span data-i18n="settings.draw1">Draw 1 Card</span>
                                    </label>
                                    <label class="radio-label">
                                        <input type="radio" name="klondike-draw" value="3">
                                        <span data-i18n="settings.draw3">Draw 3 Cards</span>
                                    </label>
                                </div>
                            </div>

                            <!-- Spider Suit Count -->
                            <div class="game-default-group">
                                <label class="preference-label" data-i18n="settings.spiderDefaultSuits">Spider Suits</label>
                                <div class="radio-group">
                                    <label class="radio-label">
                                        <input type="radio" name="spider-suits" value="1" checked>
                                        <span data-i18n="settings.oneSuit">1 Suit (Easy)</span>
                                    </label>
                                    <label class="radio-label">
                                        <input type="radio" name="spider-suits" value="2">
                                        <span data-i18n="settings.twoSuits">2 Suits (Medium)</span>
                                    </label>
                                    <label class="radio-label">
                                        <input type="radio" name="spider-suits" value="4">
                                        <span data-i18n="settings.fourSuits">4 Suits (Hard)</span>
                                    </label>
                                </div>
                            </div>

                        </div>

                        <div class="preferences-section">
                            <h4 data-i18n="settings.animationSpeed">Animation Speed</h4>
                            <p class="preference-description" data-i18n="settings.animationSpeedDesc">Control how fast cards move and animations play</p>

                            <div class="radio-group">
                                <label class="radio-label">
                                    <input type="radio" name="animation-speed" value="instant">
                                    <span data-i18n="settings.instant">Instant</span>
                                </label>
                                <label class="radio-label">
                                    <input type="radio" name="animation-speed" value="fast">
                                    <span data-i18n="settings.fast">Fast</span>
                                </label>
                                <label class="radio-label">
                                    <input type="radio" name="animation-speed" value="normal">
                                    <span data-i18n="settings.normal">Normal</span>
                                </label>
                                <label class="radio-label">
                                    <input type="radio" name="animation-speed" value="slow">
                                    <span data-i18n="settings.slow">Slow</span>
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="preferences-tab-content" id="tab-sound">
                        <div class="preferences-section">
                            <h4 data-i18n="settings.soundEffects">Sound Effects</h4>
                            <div class="sound-toggle-container">
                                <label class="toggle-switch">
                                    <input type="checkbox" id="sound-toggle-preference" checked>
                                    <span class="toggle-slider"></span>
                                </label>
                                <span class="toggle-label" id="sound-toggle-label" data-i18n="settings.soundOn">On</span>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="preferences-footer">
                    <button class="preferences-done-btn" id="preferences-done" data-i18n="settings.done">Done</button>
                </div>
            </div>
        </div>

        <!-- Stats Sidebar - DISABLED: Now using stats button in overlay for all screen sizes -->
        <!-- TODO: May re-enable in future for desktop-only sidebar experience -->
        <!--
        <div class="stats-sidebar" id="stats-sidebar">
            <button class="stats-close-btn" id="stats-close-btn">✕</button>
            <div class="game-controls-mobile">
                <button class="control-btn-mobile primary" id="new-game-mobile"><span data-i18n="nav.newGame">New Game</span></button>
                <button class="control-btn-mobile" id="restart-game-mobile"><span data-i18n="nav.restart">Restart</span></button>
            </div>
            <h3 id="stats-title" data-i18n="statsModal.topScores">Top 5 Scores</h3>

            <div id="top-scores-container">
            </div>

            <div class="games-summary">
                <div class="summary-item">
                    <span class="summary-label" data-i18n="statsModal.gamesStarted">Games Started:</span>
                    <span class="summary-value" id="games-started">0</span>
                </div>
                <div class="summary-item">
                    <span class="summary-label" data-i18n="statsModal.gamesWon">Games Won:</span>
                    <span class="summary-value" id="games-won">0</span>
                </div>
            </div>
        </div>
        -->
    </div>

    <!-- SEO Content Section - Dynamic Content Based on Game -->
    <div id="game-content" style="max-width: 1200px; margin: 0 auto; padding: 3rem 2rem; background: white; color: #333; line-height: 1.8;">
        <!-- Content will be loaded dynamically based on selected game -->
    </div>

    <!-- Site Footer -->
    <footer class="site-footer">
        <div class="footer-links" id="footer-links">
            <!-- Featured Games -->
            <div class="footer-section">
                <h4 data-i18n="footer.featuredGames">Featured Games</h4>
                <a href="/klondike" data-game="klondike" data-i18n="footer.klondikeSolitaire">Klondike Solitaire</a>
                <a href="/spider" data-game="spider" data-i18n="footer.spiderSolitaire">Spider Solitaire</a>
                <a href="/freecell" data-game="freecell" data-i18n="footer.freecellSolitaire">FreeCell Solitaire</a>
                <a href="/pyramid" data-game="pyramid" data-i18n="footer.pyramidSolitaire">Pyramid Solitaire</a>
                <a href="/tripeaks" data-game="tripeaks" data-i18n="footer.tripeaksSolitaire">TriPeaks Solitaire</a>
                <a href="/yukon" data-game="yukon" data-i18n="footer.yukonSolitaire">Yukon Solitaire</a>
                <a href="/fortythieves" data-game="fortythieves" data-i18n="footer.fortyThievesSolitaire">Forty Thieves</a>
                <a href="/doubleklondike" data-game="doubleklondike" data-i18n="footer.doubleKlondikeSolitaire">Double Klondike</a>
                <a href="/all-games" class="footer-hub-link" data-i18n="footer.browseAllGames">Browse All Games →</a>
            </div>

            <!-- Puzzle Games -->
            <div class="footer-section">
                <h4 data-i18n="footer.puzzleGames">Puzzle Games</h4>
                <a href="/sudoku" data-game="sudoku" data-i18n="games.sudoku">Sudoku</a>
                <a href="/2048" data-game="2048" data-i18n="games.2048">2048</a>
                <a href="/daily-sudoku" data-i18n="footer.dailyChallenge">Daily Sudoku Challenge</a>
                <a href="/sudoku-guide" data-i18n="footer.howToPlaySudoku">How to Play Sudoku</a>
                <a href="/2048-guide" data-i18n="footer.howToPlay2048">How to Play 2048</a>
                <a href="/best-puzzle-games" data-i18n="footer.bestPuzzleGames">Best Puzzle Games</a>
            </div>

            <!-- Learn & Guides -->
            <div class="footer-section">
                <h4 data-i18n="footer.learnAndGuides">Learn & Guides</h4>
                <a href="/how-to-play-solitaire" data-i18n="footer.howToPlaySolitaire">How to Play Solitaire</a>
                <a href="/solitaire-strategy" data-i18n="footer.strategyGuide">Strategy Guide</a>
                <a href="/solitaire-tips-tricks" data-i18n="footer.tipsAndTricks">Tips & Tricks</a>
                <a href="/solitaire-glossary" data-i18n="footer.glossary">Glossary</a>
                <a href="/solitaire-difficulty-ranking" data-i18n="footer.difficultyRankings">Difficulty Rankings</a>
                <a href="/best-solitaire-games" data-i18n="footer.bestSolitaireGames">Best Solitaire Games</a>
                <a href="/solitaire-history" data-i18n="footer.history">History of Solitaire</a>
                <a href="/all-guides" class="footer-hub-link" data-i18n="footer.browseAllGuides">Browse All Guides →</a>
            </div>

            <!-- Game Guides -->
            <div class="footer-section">
                <h4 data-i18n="footer.gameGuides">Game Guides</h4>
                <a href="/klondike-solitaire-guide" data-i18n="footer.klondikeGuide">Klondike Guide</a>
                <a href="/spider-solitaire-guide" data-i18n="footer.spiderGuide">Spider Guide</a>
                <a href="/freecell-solitaire-guide" data-i18n="footer.freecellGuide">FreeCell Guide</a>
                <a href="/pyramid-solitaire-guide" data-i18n="footer.pyramidGuide">Pyramid Guide</a>
                <a href="/yukon-solitaire-guide" data-i18n="footer.yukonGuide">Yukon Guide</a>
                <a href="/forty-thieves-solitaire-guide" data-i18n="footer.fortyThievesGuide">Forty Thieves Guide</a>
            </div>

            <!-- Compare -->
            <div class="footer-section">
                <h4 data-i18n="footer.compare">Compare</h4>
                <a href="/spider-vs-klondike" data-i18n="footer.spiderVsKlondike">Spider vs Klondike</a>
                <a href="/freecell-vs-klondike" data-i18n="footer.freecellVsKlondike">FreeCell vs Klondike</a>
                <a href="/tripeaks-vs-pyramid" data-i18n="footer.tripeaksVsPyramid">TriPeaks vs Pyramid</a>
                <a href="/easiest-solitaire-games" data-i18n="footer.easiestGames">Easiest Games</a>
                <a href="/hardest-solitaire-games" data-i18n="footer.hardestGames">Hardest Games</a>
            </div>

            <!-- About -->
            <div class="footer-section">
                <h4 data-i18n="footer.about">About</h4>
                <a href="/about" data-i18n="footer.aboutUs">About Us</a>
                <a href="/contact" data-i18n="footer.contact">Contact</a>
                <a href="/privacy" data-i18n="footer.privacy">Privacy Policy</a>
                <a href="/terms" data-i18n="footer.terms">Terms of Service</a>
                <a href="/credits" data-i18n="footer.credits">Credits</a>
            </div>
        </div>
        <div class="footer-copyright">
            © <span id="current-year"></span> <span data-i18n="footer.trySolitaire">Try Solitaire</span>. <span data-i18n="footer.allRightsReserved">All rights reserved</span>. | <span data-i18n="footer.tagline">Play free solitaire, sudoku, and puzzle games online with no ads, forever.</span>
        </div>
    </footer>

    <script>
        // Set current year in footer
        document.getElementById('current-year').textContent = new Date().getFullYear();

        // Setup footer game links
        document.addEventListener('DOMContentLoaded', function() {
            const footerLinks = document.querySelectorAll('#footer-links a[data-game]');
            footerLinks.forEach(link => {
                link.addEventListener('click', function(e) {
                    e.preventDefault();
                    const game = this.getAttribute('data-game');

                    // Update game selector dropdown
                    const gameSelect = document.getElementById('game-select');
                    if (gameSelect) {
                        gameSelect.value = game;
                    }

                    // Load the game
                    if (window.gameController) {
                        if (game === 'klondike') {
                            window.gameController.loadGame('klondike', { drawCount: 1 });
                        } else if (game === 'spider') {
                            window.gameController.loadGame('spider', { suitCount: 1 });
                        } else {
                            window.gameController.loadGame(game);
                        }

                        // Scroll to top smoothly
                        window.scrollTo({ top: 0, behavior: 'smooth' });
                    }
                });
            });
        });

        // Social sharing functions
        window.shareToFacebook = function(message, url) {
            const fbUrl = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(url)}&quote=${message}`;
            window.open(fbUrl, '_blank', 'width=600,height=400');
        };

        window.shareToTwitter = function(message, url) {
            const twitterUrl = `https://twitter.com/intent/tweet?text=${message}&url=${encodeURIComponent(url)}`;
            window.open(twitterUrl, '_blank', 'width=600,height=400');
        };

        window.shareToLinkedIn = function(url, message) {
            const linkedInUrl = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(url)}`;
            window.open(linkedInUrl, '_blank', 'width=600,height=400');
        };

        window.shareToWhatsApp = function(message, url) {
            const whatsappUrl = `https://wa.me/?text=${encodeURIComponent(message + ' ' + url)}`;
            window.open(whatsappUrl, '_blank');
        };

        window.copyToClipboard = function(text) {
            navigator.clipboard.writeText(text).then(() => {
                alert('Link copied to clipboard! 📋');
            }).catch(err => {
                console.error('Failed to copy:', err);
            });
        };
    </script>


    <!-- Router (loaded before main.js for availability, minified) -->
    <script src="/js/router.min.js"></script>

    <!-- ES6 Module Entry Point -->

    <!-- Error Tracking & Performance Monitoring (non-critical, deferred, minified) -->
    <script src="/js/errorTracking.min.js" defer></script>
    <script src="/js/performanceMonitor.min.js" defer></script>

    <!-- PWA Initialization (minified) -->
    <script src="/js/pwa-init.min.js" defer></script>

    <script>
        // Legacy global error handler (now handled by errorTracking.js)
        // Kept for backward compatibility
        window.addEventListener('error', function(e) {
            console.error('Global error:', e.message, e.filename, e.lineno, e.colno);
        });

        // Check if game initialized after DOM load
        window.addEventListener('DOMContentLoaded', function() {
            setTimeout(function() {
                if (typeof gameController === 'undefined') {
                    console.error('GameController failed to initialize!');
                    console.log('Available globals:', Object.keys(window).filter(k => k.includes('Game') || k.includes('Utils') || k.includes('Storage')));
                }
            }, 2000);

            // Setup bookmark button
            const bookmarkBtn = document.getElementById('bookmark-btn');
            if (bookmarkBtn) {
                bookmarkBtn.addEventListener('click', function(e) {
                    e.preventDefault();

                    // Try modern bookmark API first
                    if (window.sidebar && window.sidebar.addPanel) {
                        // Firefox
                        window.sidebar.addPanel(document.title, window.location.href, '');
                    } else if (window.external && ('AddFavorite' in window.external)) {
                        // IE
                        window.external.AddFavorite(window.location.href, document.title);
                    } else {
                        // Modern browsers - show instructions
                        const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
                        const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);

                        let message;
                        if (isIOS) {
                            message = 'Tap the Share button and then "Add to Home Screen"';
                        } else if (isMac) {
                            message = 'Press Cmd+D to bookmark this page';
                        } else {
                            message = 'Press Ctrl+D to bookmark this page';
                        }

                        alert(message);
                    }
                });
            }

            // Update overlay score display from ScoreManager
            function updateOverlayScore() {
                const overlayScore = document.getElementById('overlay-score');
                if (overlayScore && window.gameController && window.gameController.currentGame) {
                    const game = window.gameController.currentGame;
                    if (game.score !== undefined) {
                        overlayScore.textContent = game.score.toLocaleString();
                    }
                }
            }

            // Update score every 100ms to keep it in sync
            setInterval(updateOverlayScore, 100);

            // Setup sound toggle in preferences
            const soundTogglePref = document.getElementById('sound-toggle-preference');
            if (soundTogglePref) {
                soundTogglePref.addEventListener('change', function() {
                    if (window.sounds) {
                        window.sounds.toggle();
                    }
                });
            }
        });
    </script>
<!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "066202d40cc44705bf2cbb042a4653d2"}'></script><!-- Cloudflare Pages Analytics --></body>
</html>
