{"id":17325,"date":"2026-09-25T17:37:48","date_gmt":"2026-09-25T09:37:48","guid":{"rendered":"https:\/\/tiffanysmandarin.com\/?p=17325"},"modified":"2026-10-01T14:19:10","modified_gmt":"2026-10-01T06:19:10","slug":"meats-and-seafood","status":"publish","type":"post","link":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/","title":{"rendered":"\u8089\u985e\u55ae\u8a5e"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/#%F0%9F%A5%A9_Meat_Seafood_Food_Flashcards_Click_to_Flip_%C2%B7_Click_%F0%9F%94%8A_to_Listen\" >\ud83e\udd69 Meat, Seafood &#038; Food Flashcards (Click to Flip \u00b7 Click \ud83d\udd0a to Listen)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/#%F0%9F%A6%80_Crazy_Market_Fresh_Food_Challenge\" >\ud83e\udd80 Crazy Market: Fresh Food Challenge<\/a><\/li><\/ul><\/nav><\/div>\n\n<div style=\"height:4px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Meat, Seafood &#038; Staples Flashcards &#038; Market Game<\/title>\n    <style>\n        :root {\n            --bg-color: #ffffff;\n            --card-bg: #ffffff;\n            --border-color: #eaeaea;\n            --accent-blue: #7a9cb5; \/* Morandi Blue *\/\n            --accent-hover: #65849d;\n            --text-main: #333333;\n            --text-sub: #777777;\n            --danger: #d9534f;\n            --success: #3c763d;\n        }\n\n        html {\n            scroll-behavior: smooth;\n        }\n\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'PingFang TC', 'Microsoft JhengHei', sans-serif;\n            background-color: var(--bg-color);\n            color: var(--text-main);\n            margin: 0;\n            padding: 20px 15px 60px 15px;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n        }\n\n        .main-wrapper {\n            width: 100%;\n            max-width: 1050px;\n        }\n\n        \/* Top Global Toolbar *\/\n        #global-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            padding-bottom: 15px;\n            border-bottom: 2px solid var(--border-color);\n            margin-bottom: 25px;\n        }\n\n        .nav-links {\n            display: flex;\n            gap: 12px;\n        }\n\n        .btn-link {\n            text-decoration: none;\n            color: var(--accent-blue);\n            font-size: 15px;\n            font-weight: 500;\n            padding: 6px 14px;\n            border: 1px solid var(--accent-blue);\n            border-radius: 20px;\n            transition: all 0.2s;\n        }\n\n        .btn-link:hover {\n            background-color: var(--accent-blue);\n            color: #ffffff;\n        }\n\n        .btn-primary {\n            background-color: var(--card-bg);\n            border: 1px solid var(--accent-blue);\n            color: var(--accent-blue);\n            padding: 6px 16px;\n            border-radius: 20px;\n            cursor: pointer;\n            font-size: 14px;\n            font-weight: bold;\n            transition: all 0.2s;\n        }\n\n        .btn-primary:hover {\n            background-color: var(--accent-blue);\n            color: #ffffff;\n        }\n\n        \/* Section Headers *\/\n        .section-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 18px;\n            flex-wrap: wrap;\n            gap: 10px;\n        }\n\n        .section-title {\n            font-size: 22px;\n            font-weight: bold;\n            color: var(--accent-blue);\n            margin: 0;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n\n        .header-actions {\n            display: flex;\n            gap: 8px;\n        }\n\n        \/* ================= Flashcard Section (3D Flip) ================= *\/\n        #flashcard-section {\n            margin-bottom: 45px;\n        }\n\n        #flashcard-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(145px, 1fr));\n            gap: 16px;\n            transition: all 0.3s ease;\n        }\n\n        .flashcard {\n            background-color: transparent;\n            perspective: 1000px;\n            height: 205px;\n            cursor: pointer;\n            user-select: none;\n        }\n\n        .card-inner {\n            position: relative;\n            width: 100%;\n            height: 100%;\n            text-align: center;\n            transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1);\n            transform-style: preserve-3d;\n        }\n\n        .flashcard.is-flipped .card-inner {\n            transform: rotateY(180deg);\n        }\n\n        .card-front, .card-back {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n            border-radius: 12px;\n            box-sizing: border-box;\n            background-color: var(--card-bg);\n            border: 1px solid var(--border-color);\n            box-shadow: 0 2px 6px rgba(0,0,0,0.04);\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: space-between;\n            padding: 10px 8px 8px 8px;\n            transition: border-color 0.2s, box-shadow 0.2s;\n        }\n\n        .card-front:hover, .card-back:hover {\n            border-color: var(--accent-blue);\n            box-shadow: 0 6px 14px rgba(122,156,181,0.2);\n        }\n\n        .card-badge {\n            position: absolute;\n            top: 7px;\n            left: 7px;\n            font-size: 11px;\n            color: #ffffff;\n            background-color: var(--accent-blue);\n            border-radius: 50%;\n            width: 18px;\n            height: 18px;\n            line-height: 18px;\n            text-align: center;\n            font-weight: bold;\n        }\n\n        \/* Audio button *\/\n        .audio-btn {\n            position: absolute;\n            top: 7px;\n            right: 7px;\n            width: 22px;\n            height: 22px;\n            border-radius: 50%;\n            background-color: #ffffff;\n            border: 1px solid var(--accent-blue);\n            color: var(--accent-blue);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 11px;\n            cursor: pointer;\n            transition: all 0.2s ease;\n            z-index: 10;\n        }\n\n        .audio-btn:hover {\n            background-color: var(--accent-blue);\n            color: #ffffff;\n            transform: scale(1.15);\n        }\n\n        .audio-btn:active {\n            transform: scale(0.95);\n        }\n\n        .audio-btn-inline {\n            background: none;\n            border: none;\n            cursor: pointer;\n            color: var(--accent-blue);\n            font-size: 14px;\n            padding: 0 0 0 4px;\n            vertical-align: middle;\n            transition: transform 0.15s;\n        }\n\n        .audio-btn-inline:hover {\n            transform: scale(1.25);\n        }\n\n        \/* Front Card Layout *\/\n        .image-wrapper {\n            width: 76px;\n            height: 76px;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            font-size: 44px;\n            margin-top: 10px;\n        }\n\n        .image-wrapper img {\n            max-width: 100%;\n            max-height: 100%;\n            object-fit: contain;\n            border-radius: 6px;\n            pointer-events: none;\n        }\n\n        .text-wrapper {\n            text-align: center;\n            width: 100%;\n            border-top: 1px dashed var(--border-color);\n            padding-top: 5px;\n        }\n\n        .hanzi {\n            font-size: 18px;\n            font-weight: bold;\n            color: var(--text-main);\n            margin-bottom: 2px;\n        }\n\n        .pinyin {\n            font-size: 12px;\n            color: var(--text-sub);\n            font-family: Arial, sans-serif;\n        }\n\n        .flip-hint {\n            font-size: 10px;\n            color: #aaaaaa;\n            margin-top: 2px;\n        }\n\n        \/* Back Card Layout (Translations) *\/\n        .card-back {\n            transform: rotateY(180deg);\n            background-color: #fafbfc;\n            justify-content: flex-start;\n            padding: 12px 8px 8px 8px;\n        }\n\n        .trans-list {\n            width: 100%;\n            display: flex;\n            flex-direction: column;\n            gap: 5px;\n            margin-top: 20px;\n            margin-bottom: 6px;\n            text-align: left;\n        }\n\n        .trans-item {\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            font-size: 12px;\n            line-height: 1.25;\n        }\n\n        .lang-pill {\n            font-size: 9px;\n            font-weight: bold;\n            background-color: #edf2f7;\n            color: var(--accent-blue);\n            padding: 2px 4px;\n            border-radius: 4px;\n            flex-shrink: 0;\n        }\n\n        .trans-text {\n            font-weight: 600;\n            color: var(--text-main);\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n        }\n\n        .back-sub {\n            font-size: 11px;\n            color: var(--text-sub);\n            margin-top: auto;\n            border-top: 1px dashed var(--border-color);\n            padding-top: 4px;\n            width: 100%;\n            text-align: center;\n        }\n\n        .divider {\n            border: 0;\n            height: 1px;\n            background: linear-gradient(to right, transparent, var(--accent-blue), transparent);\n            margin: 25px 0 40px 0;\n        }\n\n        \/* ================= Market Game Section ================= *\/\n        #game-section {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            text-align: center;\n        }\n\n        .game-panel {\n            width: 100%;\n            max-width: 820px;\n        }\n\n        \/* Mode Selector Buttons *\/\n        .mode-selector-wrapper {\n            display: flex;\n            justify-content: center;\n            gap: 12px;\n            margin-bottom: 20px;\n        }\n\n        .mode-btn {\n            background-color: var(--card-bg);\n            border: 1px solid var(--accent-blue);\n            color: var(--accent-blue);\n            padding: 8px 24px;\n            border-radius: 20px;\n            font-size: 14px;\n            font-weight: bold;\n            cursor: pointer;\n            transition: all 0.2s;\n        }\n\n        .mode-btn.active {\n            background-color: var(--accent-blue);\n            color: #ffffff;\n            box-shadow: 0 4px 8px rgba(122,156,181,0.25);\n        }\n\n        #game-dashboard {\n            display: flex;\n            justify-content: space-between;\n            font-size: 20px;\n            font-weight: bold;\n            padding-bottom: 12px;\n            border-bottom: 2px solid var(--border-color);\n            margin-bottom: 18px;\n        }\n\n        #customer-bubble {\n            background-color: var(--card-bg);\n            border: 2px solid var(--accent-blue);\n            border-radius: 16px;\n            padding: 20px;\n            margin-bottom: 20px;\n            box-shadow: 0 4px 12px rgba(122,156,181,0.1);\n            min-height: 54px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        #order-display {\n            font-size: 24px;\n            font-weight: bold;\n            color: var(--text-main);\n            width: 100%;\n            line-height: 1.4;\n        }\n\n        #order-display strong {\n            color: var(--accent-blue);\n            border-bottom: 2px solid var(--accent-blue);\n            padding-bottom: 2px;\n        }\n\n        \/* Game Over Layout *\/\n        .game-over-title {\n            font-size: 28px !important;\n            font-weight: bold !important;\n            color: var(--text-main) !important;\n            margin-bottom: 24px !important;\n            line-height: 1.4 !important;\n        }\n\n        .game-over-revenue {\n            font-size: 26px !important;\n            font-weight: bold !important;\n            color: var(--text-main) !important;\n            margin-top: 0 !important;\n            line-height: 1.4 !important;\n        }\n\n        #feedback-msg {\n            font-size: 18px;\n            height: 26px;\n            margin-bottom: 14px;\n            font-weight: bold;\n        }\n\n        #stall-grid {\n            display: grid;\n            grid-template-columns: repeat(7, 1fr);\n            gap: 10px;\n            margin-bottom: 22px;\n        }\n\n        \/* Mode 1: Item card *\/\n        .stall-item {\n            position: relative;\n            background-color: var(--card-bg);\n            border: 1px solid var(--border-color);\n            border-radius: 10px;\n            padding: 6px;\n            font-size: 32px;\n            cursor: pointer;\n            transition: all 0.15s ease;\n            box-shadow: 0 2px 5px rgba(0,0,0,0.03);\n            user-select: none;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            height: 72px;\n            overflow: hidden;\n        }\n\n        .stall-item img {\n            max-width: 90%;\n            max-height: 90%;\n            object-fit: contain;\n            pointer-events: none;\n            border-radius: 4px;\n        }\n\n        .stall-item:hover, .stall-item:active {\n            background-color: var(--accent-blue);\n            border-color: var(--accent-blue);\n            color: #ffffff;\n            transform: scale(1.05);\n            box-shadow: 0 4px 10px rgba(122,156,181,0.25);\n        }\n\n        .stall-item .item-id {\n            position: absolute;\n            top: 3px;\n            left: 3px;\n            font-size: 11px;\n            color: #999999;\n            background: rgba(255,255,255,0.85);\n            border-radius: 50%;\n            width: 16px;\n            height: 16px;\n            line-height: 16px;\n            text-align: center;\n            z-index: 5;\n        }\n\n        \/* Mode 2: Memory card styles *\/\n        .mem-card {\n            position: relative;\n            height: 74px;\n            perspective: 800px;\n            cursor: pointer;\n            user-select: none;\n        }\n\n        .mem-card-inner {\n            position: relative;\n            width: 100%;\n            height: 100%;\n            border-radius: 10px;\n            transition: transform 0.4s ease;\n            transform-style: preserve-3d;\n        }\n\n        .mem-card.is-open .mem-card-inner {\n            transform: rotateY(180deg);\n        }\n\n        .mem-front, .mem-back {\n            position: absolute;\n            width: 100%;\n            height: 100%;\n            border-radius: 10px;\n            box-sizing: border-box;\n            -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            box-shadow: 0 2px 5px rgba(0,0,0,0.04);\n        }\n\n        .mem-back {\n            background-color: var(--card-bg);\n            border: 2px dashed var(--accent-blue);\n            color: var(--accent-blue);\n            font-size: 22px;\n            font-weight: bold;\n        }\n\n        .mem-card:hover .mem-back {\n            background-color: #f7fafc;\n            transform: scale(1.03);\n        }\n\n        .mem-front {\n            background-color: var(--card-bg);\n            border: 2px solid var(--accent-blue);\n            transform: rotateY(180deg);\n            padding: 4px;\n        }\n\n        .mem-front.is-text {\n            font-size: 17px;\n            font-weight: bold;\n            color: var(--text-main);\n            background-color: #fdfdfd;\n        }\n\n        .mem-front.is-pic {\n            font-size: 32px;\n        }\n\n        .mem-front img {\n            max-width: 90%;\n            max-height: 90%;\n            object-fit: contain;\n            pointer-events: none;\n            border-radius: 4px;\n        }\n\n        .mem-card.is-matched {\n            pointer-events: none;\n            opacity: 0.45;\n            cursor: default;\n        }\n\n        .mem-card.is-matched .mem-front {\n            border-color: #5cb85c;\n            background-color: #f6fff6;\n        }\n\n        .btn-action {\n            background-color: var(--accent-blue);\n            color: #ffffff;\n            border: none;\n            padding: 13px 32px;\n            font-size: 19px;\n            font-weight: bold;\n            border-radius: 30px;\n            cursor: pointer;\n            transition: background-color 0.2s, transform 0.1s;\n            box-shadow: 0 4px 8px rgba(122,156,181,0.25);\n        }\n\n        .btn-action:hover {\n            background-color: var(--accent-hover);\n            transform: scale(1.02);\n        }\n\n        @media (max-width: 768px) {\n            #stall-grid {\n                grid-template-columns: repeat(4, 1fr);\n            }\n            #order-display {\n                font-size: 19px;\n            }\n            .game-over-title {\n                font-size: 22px !important;\n                margin-bottom: 18px !important;\n            }\n            .game-over-revenue {\n                font-size: 20px !important;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"main-wrapper\">\n    <!-- Top Global Header -->\n    <header id=\"global-header\">\n        <div class=\"nav-links\">\n            <a href=\"#flashcard-section\" class=\"btn-link\">\ud83d\udcd6 Flashcards<\/a>\n            <a href=\"#game-section\" class=\"btn-link\">\ud83c\udfae Market Game<\/a>\n        <\/div>\n        <div>\n            <button class=\"btn-primary\" id=\"lang-btn\" onclick=\"toggleLanguage()\">Switch to Simplified<\/button>\n        <\/div>\n    <\/header>\n\n    <!-- Flashcard Section -->\n    <section id=\"flashcard-section\">\n        <div class=\"section-header\">\n            <h2 class=\"section-title\" id=\"fc-title\"><span class=\"ez-toc-section\" id=\"%F0%9F%A5%A9_Meat_Seafood_Food_Flashcards_Click_to_Flip_%C2%B7_Click_%F0%9F%94%8A_to_Listen\"><\/span>\ud83e\udd69 Meat, Seafood &#038; Food Flashcards (Click to Flip \u00b7 Click \ud83d\udd0a to Listen)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n            <div class=\"header-actions\">\n                <button class=\"btn-primary\" id=\"flip-all-btn\" onclick=\"toggleFlipAll()\">\ud83d\udd04 Flip All<\/button>\n                <button class=\"btn-primary\" id=\"toggle-fc-btn\" onclick=\"toggleFlashcardDisplay()\">Hide Cards (Blind Mode)<\/button>\n            <\/div>\n        <\/div>\n        <div id=\"flashcard-grid\">\n            <!-- Flashcards generated dynamically -->\n        <\/div>\n    <\/section>\n\n    <hr class=\"divider\">\n\n    <!-- Market Game Section -->\n    <section id=\"game-section\">\n        <div class=\"game-panel\">\n            <div class=\"section-header\" style=\"justify-content: center; margin-bottom: 15px;\">\n                <h2 class=\"section-title\" id=\"gm-title\"><span class=\"ez-toc-section\" id=\"%F0%9F%A6%80_Crazy_Market_Fresh_Food_Challenge\"><\/span>\ud83e\udd80 Crazy Market: Fresh Food Challenge<span class=\"ez-toc-section-end\"><\/span><\/h2>\n            <\/div>\n\n            <!-- Mode Selector Buttons -->\n            <div class=\"mode-selector-wrapper\">\n                <button class=\"mode-btn active\" id=\"mode-btn-speed\" onclick=\"switchMode('speed')\">\u26a1 Mode 1: Speed Order<\/button>\n                <button class=\"mode-btn\" id=\"mode-btn-memory\" onclick=\"switchMode('memory')\">\ud83c\udccf Mode 2: 14-Pair Memory Match<\/button>\n            <\/div>\n\n            <div id=\"game-dashboard\">\n                <div>\u23f3 <span id=\"time-label\">Time<\/span>: <span id=\"time\">90<\/span>s<\/div>\n                <div>\ud83d\udcb0 <span id=\"revenue-label\">Revenue<\/span>: $<span id=\"score\">0<\/span><\/div>\n            <\/div>\n\n            <div id=\"feedback-msg\"><\/div>\n\n            <div id=\"customer-bubble\">\n                <div id=\"order-display\">Select a mode and click the button below to start!<\/div>\n            <\/div>\n\n            <div id=\"stall-grid\">\n                <!-- Game cards generated dynamically -->\n            <\/div>\n\n            <div>\n                <button class=\"btn-action\" id=\"start-btn\" onclick=\"startGame()\">Start Game<\/button>\n                <button class=\"btn-action\" id=\"restart-btn\" onclick=\"startGame()\" style=\"display: none;\">Play Again<\/button>\n            <\/div>\n        <\/div>\n    <\/section>\n<\/div>\n\n<script>\n    \/\/ 33 Food Items Database (Tofu pinyin updated to d\u00f2uf\u01d4)\n    const foodDatabase = [\n        \/\/ Meat (1-11)\n        { id: 1, tc: \"\u725b\u8089\", sc: \"\u725b\u8089\", pinyin: \"ni\u00far\u00f2u\", en: \"Beef\", ja: \"\u725b\u8089\", ko: \"\uc18c\uace0\uae30\", emoji: \"\ud83d\udc2e\", imgUrl: \"\" },\n        { id: 2, tc: \"\u8c6c\u8089\", sc: \"\u732a\u8089\", pinyin: \"zh\u016br\u00f2u\", en: \"Pork\", ja: \"\u8c5a\u8089\", ko: \"\ub3fc\uc9c0\uace0\uae30\", emoji: \"\ud83d\udc37\", imgUrl: \"\" },\n        { id: 3, tc: \"\u96de\u8089\", sc: \"\u9e21\u8089\", pinyin: \"j\u012br\u00f2u\", en: \"Chicken\", ja: \"\u9d8f\u8089\", ko: \"\ub2ed\uace0\uae30\", emoji: \"\ud83d\udc14\", imgUrl: \"\" },\n        { id: 4, tc: \"\u7f8a\u8089\", sc: \"\u7f8a\u8089\", pinyin: \"y\u00e1ngr\u00f2u\", en: \"Lamb \/ Mutton\", ja: \"\u7f8a\u8089\", ko: \"\uc591\uace0\uae30\", emoji: \"\ud83d\udc11\", imgUrl: \"\" },\n        { id: 5, tc: \"\u9d28\u8089\", sc: \"\u9e2d\u8089\", pinyin: \"y\u0101r\u00f2u\", en: \"Duck\", ja: \"\u9d28\u8089\", ko: \"\uc624\ub9ac\uace0\uae30\", emoji: \"\ud83e\udd86\", imgUrl: \"\" },\n        { id: 6, tc: \"\u6392\u9aa8\", sc: \"\u6392\u9aa8\", pinyin: \"p\u00e1ig\u01d4\", en: \"Pork Ribs\", ja: \"\u30b9\u30da\u30a2\u30ea\u30d6\", ko: \"\uac08\ube44\", emoji: \"\ud83c\udf56\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u6392\u9aa8.jpg\" },\n        { id: 7, tc: \"\u7d5e\u8089\", sc: \"\u7ede\u8089\", pinyin: \"ji\u01ceor\u00f2u\", en: \"Ground Meat\", ja: \"\u3072\u304d\u8089\", ko: \"\ub2e4\uc9c4 \uace0\uae30\", emoji: \"\ud83e\udd69\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u7d5e\u8089.jpg\" },\n        { id: 8, tc: \"\u725b\u6392\", sc: \"\u725b\u6392\", pinyin: \"ni\u00fap\u00e1i\", en: \"Steak\", ja: \"\u30b9\u30c6\u30fc\u30ad\", ko: \"\uc2a4\ud14c\uc774\ud06c\", emoji: \"\ud83e\udd69\", imgUrl: \"\" },\n        { id: 9, tc: \"\u706b\u817f\", sc: \"\u706b\u817f\", pinyin: \"hu\u01d2tu\u01d0\", en: \"Ham\", ja: \"\u30cf\u30e0\", ko: \"\ud584\", emoji: \"\ud83e\udd53\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u706b\u817f.jpg\" },\n        { id: 10, tc: \"\u9999\u8178\", sc: \"\u9999\u80a0\", pinyin: \"xi\u0101ngch\u00e1ng\", en: \"Sausage\", ja: \"\u30bd\u30fc\u30bb\u30fc\u30b8\", ko: \"\uc18c\uc2dc\uc9c0\", emoji: \"\ud83c\udf2d\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u9999\u8178.jpg\" },\n        { id: 11, tc: \"\u57f9\u6839\", sc: \"\u57f9\u6839\", pinyin: \"p\u00e9ig\u0113n\", en: \"Bacon\", ja: \"\u30d9\u30fc\u30b3\u30f3\", ko: \"\ubca0\uc774\ucee8\", emoji: \"\ud83e\udd53\", imgUrl: \"\" },\n\n        \/\/ Seafood (12-24)\n        { id: 12, tc: \"\u5433\u90ed\u9b5a\", sc: \"\u5434\u90ed\u9c7c\", pinyin: \"w\u00fagu\u014dy\u00fa\", en: \"Tilapia\", ja: \"\u30c6\u30a3\u30e9\u30d4\u30a2\", ko: \"\ud2f8\ub77c\ud53c\uc544\", emoji: \"\ud83d\udc1f\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u5433\u90ed\u9b5a.jpg\" },\n        { id: 13, tc: \"\u9bad\u9b5a\", sc: \"\u9c91\u9c7c\", pinyin: \"gu\u012by\u00fa\", en: \"Salmon\", ja: \"\u30b5\u30fc\u30e2\u30f3\", ko: \"\uc5f0\uc5b4\", emoji: \"\ud83c\udf63\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u9bad\u9b5a.jpg\" },\n        { id: 14, tc: \"\u9baa\u9b5a\", sc: \"\u9c94\u9c7c\", pinyin: \"w\u011biy\u00fa\", en: \"Tuna\", ja: \"\u30de\u30b0\u30ed\", ko: \"\ucc38\uce58\", emoji: \"\ud83d\udc1f\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u9baa\u9b5a.jpg\" },\n        { id: 15, tc: \"\u9c3b\u9b5a\", sc: \"\u9cd7\u9c7c\", pinyin: \"m\u00e1ny\u00fa\", en: \"Eel\", ja: \"\u3046\u306a\u304e\", ko: \"\uc7a5\uc5b4\", emoji: \"\ud83d\udc1f\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u9c3b\u9b5a.jpg\" },\n        { id: 16, tc: \"\u8766\u5b50\", sc: \"\u867e\u5b50\", pinyin: \"xi\u0101zi\", en: \"Shrimp \/ Prawn\", ja: \"\u30a8\u30d3\", ko: \"\uc0c8\uc6b0\", emoji: \"\ud83e\udd90\", imgUrl: \"\" },\n        { id: 17, tc: \"\u8783\u87f9\", sc: \"\u8783\u87f9\", pinyin: \"p\u00e1ngxi\u00e8\", en: \"Crab\", ja: \"\u30ab\u30cb\", ko: \"\uac8c\", emoji: \"\ud83e\udd80\", imgUrl: \"\" },\n        { id: 18, tc: \"\u86e4\u870a\", sc: \"\u86e4\u870a\", pinyin: \"g\u00e9l\u00ed\", en: \"Clam\", ja: \"\u30a2\u30b5\u30ea\", ko: \"\uc870\uac1c\", emoji: \"\ud83e\uddaa\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u86e4\u870a.jpg\" },\n        { id: 19, tc: \"\u7261\u8823\", sc: \"\u7261\u86ce\", pinyin: \"m\u01d4l\u00ec\", en: \"Oyster\", ja: \"\u7261\u8823\", ko: \"\uad74\", emoji: \"\ud83e\uddaa\", imgUrl: \"\" },\n        { id: 20, tc: \"\u6247\u8c9d\", sc: \"\u6247\u8d1d\", pinyin: \"sh\u00e0nb\u00e8i\", en: \"Scallop\", ja: \"\u30db\u30bf\u30c6\", ko: \"\uac00\ub9ac\ube44\", emoji: \"\ud83d\udc1a\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u6247\u8c9d.jpg\" },\n        { id: 21, tc: \"\u9b77\u9b5a\", sc: \"\u9c7f\u9c7c\", pinyin: \"y\u00f3uy\u00fa\", en: \"Squid\", ja: \"\u30a4\u30ab\", ko: \"\uc624\uc9d5\uc5b4\", emoji: \"\ud83e\udd91\", imgUrl: \"\" },\n        { id: 22, tc: \"\u82b1\u679d\", sc: \"\u82b1\u679d\", pinyin: \"hu\u0101zh\u012b\", en: \"Cuttlefish\", ja: \"\u30b3\u30a6\u30a4\u30ab\", ko: \"\uac11\uc624\uc9d5\uc5b4\", emoji: \"\ud83e\udd91\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u82b1\u679d.jpg\" },\n        { id: 23, tc: \"\u7ae0\u9b5a\", sc: \"\u7ae0\u9c7c\", pinyin: \"zh\u0101ngy\u00fa\", en: \"Octopus\", ja: \"\u30bf\u30b3\", ko: \"\ubb38\uc5b4\", emoji: \"\ud83d\udc19\", imgUrl: \"\" },\n        { id: 24, tc: \"\u9f8d\u8766\", sc: \"\u9f99\u867e\", pinyin: \"l\u00f3ngxi\u0101\", en: \"Lobster\", ja: \"\u30ed\u30d6\u30b9\u30bf\u30fc\", ko: \"\ubc14\ub2f7\uac00\uc7ac\", emoji: \"\ud83e\udd9e\", imgUrl: \"\" },\n\n        \/\/ Staples & Ingredients (25-33)\n        { id: 25, tc: \"\u8c46\u8150\", sc: \"\u8c46\u8150\", pinyin: \"d\u00f2uf\u01d4\", en: \"Tofu\", ja: \"\u8c46\u8150\", ko: \"\ub450\ubd80\", emoji: \"\ud83e\uddca\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u8c46\u8150.jpg\" },\n        { id: 26, tc: \"\u8c46\u4e7e\", sc: \"\u8c46\u5e72\", pinyin: \"d\u00f2ug\u0101n\", en: \"Dried Tofu\", ja: \"\u8c46\u8150\u5e72\", ko: \"\uac74\ub450\ubd80\", emoji: \"\ud83d\udfeb\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u8c46\u4e7e.jpg\" },\n        { id: 27, tc: \"\u6d77\u5e36\", sc: \"\u6d77\u5e26\", pinyin: \"h\u01ceid\u00e0i\", en: \"Kelp \/ Seaweed\", ja: \"\u6606\u5e03\", ko: \"\ub2e4\uc2dc\ub9c8\", emoji: \"\ud83c\udf3f\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u6d77\u5e36.jpg\" },\n        { id: 28, tc: \"\u9999\u83c7\", sc: \"\u9999\u83c7\", pinyin: \"xi\u0101ngg\u016b\", en: \"Shiitake Mushroom\", ja: \"\u690e\u8338\", ko: \"\ud45c\uace0\ubc84\uc12f\", emoji: \"\ud83c\udf44\", imgUrl: \"https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/09\/\u9999\u83c7.jpg\" },\n        { id: 29, tc: \"\u9eb5\", sc: \"\u9762\", pinyin: \"mi\u00e0n\", en: \"Noodles\", ja: \"\u9eba\", ko: \"\uad6d\uc218 \/ \uba74\", emoji: \"\ud83c\udf5c\", imgUrl: \"\" },\n        { id: 30, tc: \"\u98ef\", sc: \"\u996d\", pinyin: \"f\u00e0n\", en: \"Rice\", ja: \"\u3054\u98ef\", ko: \"\ubc25\", emoji: \"\ud83c\udf5a\", imgUrl: \"\" },\n        { id: 31, tc: \"\u6e6f\", sc: \"\u6c64\", pinyin: \"t\u0101ng\", en: \"Soup\", ja: \"\u30b9\u30fc\u30d7\", ko: \"\uad6d \/ \ud0d5\", emoji: \"\ud83e\udd63\", imgUrl: \"\" },\n        { id: 32, tc: \"\u852c\u83dc\", sc: \"\u852c\u83dc\", pinyin: \"sh\u016bc\u00e0i\", en: \"Vegetables\", ja: \"\u91ce\u83dc\", ko: \"\ucc44\uc18c\", emoji: \"\ud83e\udd6c\", imgUrl: \"\" },\n        { id: 33, tc: \"\u6c99\u62c9\", sc: \"\u6c99\u62c9\", pinyin: \"sh\u0101l\u0101\", en: \"Salad\", ja: \"\u30b5\u30e9\u30c0\", ko: \"\uc0d0\ub7ec\ub4dc\", emoji: \"\ud83e\udd57\", imgUrl: \"\" }\n    ];\n\n    let currentMode = 'speed'; \/\/ 'speed' or 'memory'\n    let isSimplified = false;\n    let areCardsVisible = true;\n    let isAllFlipped = false;\n\n    let score = 0;\n    let timeLeft = 90;\n    let timerInterval = null;\n    let isPlaying = false;\n\n    \/\/ Mode 1: Speed Order\n    let currentTarget = null;\n\n    \/\/ Mode 2: Memory Match\n    let memoryCards = [];\n    let flippedCards = [];\n    let matchedPairsCount = 0;\n    let isLockingBoard = false;\n\n    \/\/ Audio Controller (2026\/10 folder format)\n    let currentAudio = null;\n\n    function getAudioUrl(food) {\n        return food.audioUrl || `https:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2026\/10\/${encodeURIComponent(food.tc)}.m4a`;\n    }\n\n    function playAudio(url, event) {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (currentAudio) {\n            currentAudio.pause();\n            currentAudio.currentTime = 0;\n        }\n        currentAudio = new Audio(url);\n        currentAudio.play().catch(e => {\n            console.warn(\"Audio playback failed:\", url, e);\n        });\n    }\n\n    \/\/ DOM Elements Cache\n    const langBtn = document.getElementById('lang-btn');\n    const flashcardGrid = document.getElementById('flashcard-grid');\n    const toggleFcBtn = document.getElementById('toggle-fc-btn');\n    const flipAllBtn = document.getElementById('flip-all-btn');\n    const scoreEl = document.getElementById('score');\n    const timeEl = document.getElementById('time');\n    const orderDisplay = document.getElementById('order-display');\n    const feedbackEl = document.getElementById('feedback-msg');\n    const stallGrid = document.getElementById('stall-grid');\n    const startBtn = document.getElementById('start-btn');\n    const restartBtn = document.getElementById('restart-btn');\n\n    function checkCookieLang() {\n        const cookies = document.cookie.split(';');\n        for (let c of cookies) {\n            if (c.trim().startsWith(\"lang=sc\")) {\n                isSimplified = true;\n                break;\n            }\n        }\n    }\n\n    function switchMode(newMode) {\n        if (isPlaying) {\n            if (!confirm(\"A game is currently in progress. Switching modes will restart the game. Proceed?\")) {\n                return;\n            }\n            endGame(false);\n        }\n        currentMode = newMode;\n        document.querySelectorAll('.mode-btn').forEach(btn => btn.classList.remove('active'));\n        document.getElementById(`mode-btn-${newMode}`).classList.add('active');\n\n        if (!isPlaying) {\n            if (currentMode === 'speed') {\n                orderDisplay.innerHTML = \"\u3010Speed Order\u3011: The customer orders in Chinese characters. Click the matching picture!<br>Click the button below to start!\";\n            } else {\n                orderDisplay.innerHTML = \"\u3010Memory Match\u3011: 14 pairs of [Chinese Characters] & [Pictures] are hidden. Match them!<br>Click the button below to start!\";\n            }\n        }\n    }\n\n    function updateUITexts() {\n        langBtn.innerText = isSimplified ? \"Switch to Traditional\" : \"Switch to Simplified\";\n        \n        toggleFcBtn.innerText = areCardsVisible \n            ? \"Hide Cards (Blind Mode)\"\n            : \"Show Cards\";\n\n        flipAllBtn.innerText = isAllFlipped\n            ? \"\ud83d\udd04 Reset Front\"\n            : \"\ud83d\udd04 Flip All\";\n\n        startBtn.innerText = \"Start Game\";\n        restartBtn.innerText = \"Play Again\";\n\n        document.getElementById('mode-btn-speed').innerText = \"\u26a1 Mode 1: Speed Order\";\n        document.getElementById('mode-btn-memory').innerText = \"\ud83c\udccf Mode 2: 14-Pair Memory Match\";\n\n        if (isPlaying) {\n            refreshOrderText();\n        }\n\n        \/\/ Update Flashcards\n        foodDatabase.forEach(item => {\n            const hanziEl = document.getElementById(`hanzi-${item.id}`);\n            const backHanziEl = document.getElementById(`back-hanzi-${item.id}`);\n            if (hanziEl) hanziEl.innerText = isSimplified ? item.sc : item.tc;\n            if (backHanziEl) backHanziEl.innerText = isSimplified ? item.sc : item.tc;\n        });\n\n        \/\/ Update revealed Memory Match cards\n        if (currentMode === 'memory' && isPlaying) {\n            memoryCards.forEach(c => {\n                if (c.type === 'text') {\n                    const textEl = document.getElementById(`mem-text-${c.uid}`);\n                    if (textEl) {\n                        const itemObj = foodDatabase.find(f => f.id === c.id);\n                        textEl.innerText = isSimplified ? itemObj.sc : itemObj.tc;\n                    }\n                }\n            });\n        }\n    }\n\n    function toggleLanguage() {\n        isSimplified = !isSimplified;\n        document.cookie = \"lang=\" + (isSimplified ? \"sc\" : \"tc\") + \"; path=\/; max-age=31536000\";\n        updateUITexts();\n    }\n\n    function toggleFlashcardDisplay() {\n        areCardsVisible = !areCardsVisible;\n        flashcardGrid.style.display = areCardsVisible ? \"grid\" : \"none\";\n        toggleFcBtn.innerText = areCardsVisible \n            ? \"Hide Cards (Blind Mode)\"\n            : \"Show Cards\";\n    }\n\n    function toggleCardFlip(cardEl) {\n        cardEl.classList.toggle('is-flipped');\n    }\n\n    function toggleFlipAll() {\n        isAllFlipped = !isAllFlipped;\n        const cards = document.querySelectorAll('.flashcard');\n        cards.forEach(card => {\n            if (isAllFlipped) {\n                card.classList.add('is-flipped');\n            } else {\n                card.classList.remove('is-flipped');\n            }\n        });\n        flipAllBtn.innerText = isAllFlipped\n            ? \"\ud83d\udd04 Reset Front\"\n            : \"\ud83d\udd04 Flip All\";\n    }\n\n    \/* Render Flashcards *\/\n    function renderFlashcards() {\n        flashcardGrid.innerHTML = '';\n        foodDatabase.forEach(item => {\n            const card = document.createElement('div');\n            card.className = 'flashcard';\n            card.onclick = () => toggleCardFlip(card);\n            \n            const media = item.imgUrl \n                ? `<img decoding=\"async\" src=\"${item.imgUrl}\" alt=\"${item.tc}\">` \n                : item.emoji;\n            const name = isSimplified ? item.sc : item.tc;\n            const audioUrl = getAudioUrl(item);\n\n            card.innerHTML = `\n                <div class=\"card-inner\">\n                    <!-- Front -->\n                    <div class=\"card-front\">\n                        <div class=\"card-badge\">${item.id}<\/div>\n                        <div class=\"audio-btn\" title=\"Listen\" onclick=\"playAudio('${audioUrl}', event)\">\ud83d\udd0a<\/div>\n                        <div class=\"image-wrapper\">${media}<\/div>\n                        <div class=\"text-wrapper\">\n                            <div class=\"hanzi\" id=\"hanzi-${item.id}\">${name}<\/div>\n                            <div class=\"pinyin\">${item.pinyin}<\/div>\n                            <div class=\"flip-hint\">\ud83d\udc46 Click to flip<\/div>\n                        <\/div>\n                    <\/div>\n                    <!-- Back (Translations) -->\n                    <div class=\"card-back\">\n                        <div class=\"card-badge\">${item.id}<\/div>\n                        <div class=\"audio-btn\" title=\"Listen\" onclick=\"playAudio('${audioUrl}', event)\">\ud83d\udd0a<\/div>\n                        <div class=\"trans-list\">\n                            <div class=\"trans-item\">\n                                <span class=\"lang-pill\">EN<\/span>\n                                <span class=\"trans-text\" title=\"${item.en}\">${item.en}<\/span>\n                            <\/div>\n                            <div class=\"trans-item\">\n                                <span class=\"lang-pill\">JA<\/span>\n                                <span class=\"trans-text\" title=\"${item.ja}\">${item.ja}<\/span>\n                            <\/div>\n                            <div class=\"trans-item\">\n                                <span class=\"lang-pill\">KO<\/span>\n                                <span class=\"trans-text\" title=\"${item.ko}\">${item.ko}<\/span>\n                            <\/div>\n                        <\/div>\n                        <div class=\"back-sub\">\n                            <span id=\"back-hanzi-${item.id}\">${name}<\/span> \u00b7 ${item.pinyin}\n                            <button class=\"audio-btn-inline\" title=\"Listen\" onclick=\"playAudio('${audioUrl}', event)\">\ud83d\udd0a<\/button>\n                        <\/div>\n                        <div class=\"flip-hint\">\u21ba Click to flip back<\/div>\n                    <\/div>\n                <\/div>\n            `;\n            flashcardGrid.appendChild(card);\n        });\n    }\n\n    \/* ================= Mode 1: Speed Order ================= *\/\n    function renderSpeedStall() {\n        stallGrid.innerHTML = '';\n        const shuffled = [...foodDatabase].sort(() => 0.5 - Math.random());\n        \n        shuffled.forEach(item => {\n            const cell = document.createElement('div');\n            cell.className = 'stall-item';\n            \n            let content = `<span class=\"item-id\">${item.id}<\/span>`;\n            if (item.imgUrl) {\n                content += `<img decoding=\"async\" src=\"${item.imgUrl}\" alt=\"${item.tc}\">`;\n            } else {\n                content += item.emoji;\n            }\n            cell.innerHTML = content;\n            cell.onclick = () => checkSpeedAnswer(item.id);\n            stallGrid.appendChild(cell);\n        });\n    }\n\n    function newSpeedOrder() {\n        if (!isPlaying) return;\n        const randomIdx = Math.floor(Math.random() * foodDatabase.length);\n        currentTarget = foodDatabase[randomIdx];\n        refreshOrderText();\n    }\n\n    function refreshOrderText() {\n        if (!isPlaying) return;\n\n        if (currentMode === 'speed') {\n            if (!currentTarget) return;\n            const vName = isSimplified ? currentTarget.sc : currentTarget.tc;\n            const audioUrl = getAudioUrl(currentTarget);\n            orderDisplay.innerHTML = `Customer: \"\u8001\u95c6\uff0c\u6211\u8981\u8cb7 <strong>\u3010${vName}\u3011<\/strong>\uff01\" <button class=\"audio-btn-inline\" style=\"font-size: 20px;\" title=\"Listen to Customer\" onclick=\"playAudio('${audioUrl}', event)\">\ud83d\udd0a<\/button>`;\n        } else if (currentMode === 'memory') {\n            orderDisplay.innerHTML = `\ud83c\udccf Match the [Chinese Character] with the [Picture]!<br><span style=\"font-size: 20px; color: var(--accent-blue);\">Matched: <strong>${matchedPairsCount} \/ 14<\/strong> Pairs<\/span>`;\n        }\n    }\n\n    function checkSpeedAnswer(clickedId) {\n        if (!isPlaying) return;\n\n        if (clickedId === currentTarget.id) {\n            score += 10;\n            scoreEl.innerText = score;\n            feedbackEl.innerText = \"\u2705 Great job! Correct item! (+10)\";\n            feedbackEl.style.color = \"var(--success)\";\n            newSpeedOrder();\n        } else {\n            const correctName = isSimplified ? currentTarget.sc : currentTarget.tc;\n            feedbackEl.innerText = `\u274c Oops! The customer wanted ${correctName} (-3s)`;\n            feedbackEl.style.color = \"var(--danger)\";\n            timeLeft = Math.max(0, timeLeft - 3);\n            timeEl.innerText = timeLeft;\n        }\n\n        setTimeout(() => {\n            if (feedbackEl.innerText.includes(\"\u2705\")) feedbackEl.innerText = \"\";\n        }, 800);\n    }\n\n    \/* ================= Mode 2: 14-Pair Memory Match ================= *\/\n    function initMemoryGame() {\n        matchedPairsCount = 0;\n        flippedCards = [];\n        isLockingBoard = false;\n        stallGrid.innerHTML = '';\n\n        \/\/ 1. Pick 14 random items from the 33 food items\n        const pickedFoods = [...foodDatabase].sort(() => 0.5 - Math.random()).slice(0, 14);\n\n        \/\/ 2. Generate 28 cards (14 picture cards + 14 text cards)\n        memoryCards = [];\n        let uidCounter = 0;\n\n        pickedFoods.forEach(food => {\n            memoryCards.push({\n                uid: ++uidCounter,\n                id: food.id,\n                type: 'pic',\n                food: food\n            });\n            memoryCards.push({\n                uid: ++uidCounter,\n                id: food.id,\n                type: 'text',\n                food: food\n            });\n        });\n\n        \/\/ 3. Shuffle cards\n        memoryCards.sort(() => 0.5 - Math.random());\n\n        \/\/ 4. Render 7x4 grid\n        memoryCards.forEach(c => {\n            const cardEl = document.createElement('div');\n            cardEl.className = 'mem-card';\n            cardEl.id = `mem-card-${c.uid}`;\n            cardEl.onclick = () => handleMemoryCardClick(c, cardEl);\n\n            let frontContent = \"\";\n            if (c.type === 'pic') {\n                frontContent = `<div class=\"mem-front is-pic\">` + \n                    (c.food.imgUrl ? `<img decoding=\"async\" src=\"${c.food.imgUrl}\">` : c.food.emoji) + \n                    `<\/div>`;\n            } else {\n                const name = isSimplified ? c.food.sc : c.food.tc;\n                frontContent = `<div class=\"mem-front is-text\" id=\"mem-text-${c.uid}\">${name}<\/div>`;\n            }\n\n            cardEl.innerHTML = `\n                <div class=\"mem-card-inner\">\n                    <div class=\"mem-back\">?<\/div>\n                    ${frontContent}\n                <\/div>\n            `;\n            stallGrid.appendChild(cardEl);\n        });\n\n        refreshOrderText();\n    }\n\n    function handleMemoryCardClick(cardData, cardEl) {\n        if (!isPlaying || isLockingBoard) return;\n        if (cardEl.classList.contains('is-open') || cardEl.classList.contains('is-matched')) return;\n\n        cardEl.classList.add('is-open');\n        flippedCards.push({ data: cardData, el: cardEl });\n\n        if (flippedCards.length === 2) {\n            checkMemoryMatch();\n        }\n    }\n\n    function checkMemoryMatch() {\n        isLockingBoard = true;\n        const [c1, c2] = flippedCards;\n\n        \/\/ Match condition: same item id, one is picture and one is text\n        if (c1.data.id === c2.data.id && c1.data.type !== c2.data.type) {\n            setTimeout(() => {\n                c1.el.classList.add('is-matched');\n                c2.el.classList.add('is-matched');\n                \n                score += 20;\n                scoreEl.innerText = score;\n                matchedPairsCount++;\n\n                const matchedName = isSimplified ? c1.data.food.sc : c1.data.food.tc;\n                feedbackEl.innerText = `\u2705 Matched: ${matchedName}! (+20)`;\n                feedbackEl.style.color = \"var(--success)\";\n\n                refreshOrderText();\n                flippedCards = [];\n                isLockingBoard = false;\n\n                if (matchedPairsCount === 14) {\n                    endGame(true, true);\n                }\n            }, 350);\n        } else {\n            setTimeout(() => {\n                c1.el.classList.remove('is-open');\n                c2.el.classList.remove('is-open');\n                flippedCards = [];\n                isLockingBoard = false;\n            }, 850);\n        }\n\n        setTimeout(() => {\n            if (feedbackEl.innerText.includes(\"\u2705\")) feedbackEl.innerText = \"\";\n        }, 1200);\n    }\n\n    \/* ================= Core Game Control ================= *\/\n    function updateTimer() {\n        timeLeft--;\n        timeEl.innerText = timeLeft;\n        if (timeLeft <= 0) {\n            endGame(true, false);\n        }\n    }\n\n    function startGame() {\n        score = 0;\n        timeLeft = 90;\n        scoreEl.innerText = score;\n        timeEl.innerText = timeLeft;\n        feedbackEl.innerText = \"\";\n        isPlaying = true;\n\n        startBtn.style.display = 'none';\n        restartBtn.style.display = 'none';\n\n        if (currentMode === 'speed') {\n            renderSpeedStall();\n            newSpeedOrder();\n        } else {\n            initMemoryGame();\n        }\n\n        if (timerInterval) clearInterval(timerInterval);\n        timerInterval = setInterval(updateTimer, 1000);\n    }\n\n    function endGame(showScore = true, isWin = false) {\n        isPlaying = false;\n        clearInterval(timerInterval);\n\n        if (showScore) {\n            const titleText = isWin \n                ? \"\ud83c\udf89 Amazing! All 14 pairs matched!\" \n                : \"\u23f0 Time's up! Store is closed!\";\n            \n            orderDisplay.innerHTML = `\n                <div class=\"game-over-title\">${titleText}<\/div>\n                <div class=\"game-over-revenue\">Total Revenue: <span style=\"color: var(--accent-blue);\">$${score}<\/span><\/div>\n            `;\n        }\n        stallGrid.innerHTML = '';\n        restartBtn.style.display = 'inline-block';\n    }\n\n    checkCookieLang();\n    renderFlashcards();\n    updateUITexts();\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meat, Seafood &#038; Staples Flashcards &#038; Market Game \ud83d\udcd6 Flashcards \ud83c\udfae Market Game Switch to Simplified \ud83e\udd69 Meat, Seafood &#038; Food Flashcards (Click to Flip \u00b7 Click \ud83d\udd0a to Listen) \ud83d\udd04 Flip All Hide Cards (Blind Mode) \ud83e\udd80 Crazy Market: Fresh Food Challenge \u26a1 Mode 1: Speed Order \ud83c\udccf Mode 2: 14-Pair Memory Match \u23f3&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_wp_convertkit_post_meta":{"form":"-1","landing_page":"0","tag":"0","restrict_content":"0"},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1238],"tags":[],"class_list":["post-17325","post","type-post","status-publish","format-standard","hentry","category-food"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u8089\u985e\u55ae\u8a5e - OneDotDot Chinese<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u8089\u985e\u55ae\u8a5e - OneDotDot Chinese\" \/>\n<meta property=\"og:description\" content=\"Meat, Seafood &#038; Staples Flashcards &#038; Market Game \ud83d\udcd6 Flashcards \ud83c\udfae Market Game Switch to Simplified \ud83e\udd69 Meat, Seafood &#038; Food Flashcards (Click to Flip \u00b7 Click \ud83d\udd0a to Listen) \ud83d\udd04 Flip All Hide Cards (Blind Mode) \ud83e\udd80 Crazy Market: Fresh Food Challenge \u26a1 Mode 1: Speed Order \ud83c\udccf Mode 2: 14-Pair Memory Match \u23f3...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/\" \/>\n<meta property=\"og:site_name\" content=\"OneDotDot Chinese\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-25T09:37:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-01T06:19:10+00:00\" \/>\n<meta name=\"author\" content=\"tiffany\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"tiffany\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/\"},\"author\":{\"name\":\"tiffany\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"headline\":\"\u8089\u985e\u55ae\u8a5e\",\"datePublished\":\"2026-09-25T09:37:48+00:00\",\"dateModified\":\"2026-10-01T06:19:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/\"},\"wordCount\":57,\"publisher\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"articleSection\":[\"food\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/\",\"name\":\"\u8089\u985e\u55ae\u8a5e - OneDotDot Chinese\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#website\"},\"datePublished\":\"2026-09-25T09:37:48+00:00\",\"dateModified\":\"2026-10-01T06:19:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/2026\\\/09\\\/25\\\/meats-and-seafood\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9801\",\"item\":\"https:\\\/\\\/tiffanysmandarin.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u8089\u985e\u55ae\u8a5e\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#website\",\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/\",\"name\":\"OneDotDot Chinese\",\"description\":\"Learn a little Chinese every day\",\"publisher\":{\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tiffanysmandarin.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/tiffanysmandarin.com\\\/#\\\/schema\\\/person\\\/3556e1160fac98b190d03b8aa8604d99\",\"name\":\"tiffany\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\",\"url\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\",\"contentUrl\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\",\"width\":214,\"height\":214,\"caption\":\"tiffany\"},\"logo\":{\"@id\":\"http:\\\/\\\/tiffanysmandarin.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/cropped-logo_tiffany2-1.png\"},\"sameAs\":[\"https:\\\/\\\/www.instagram.com\\\/tiffanys_talk\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tiffany-huang-mandarin\\\/\"],\"url\":\"https:\\\/\\\/tiffanysmandarin.com\\\/index.php\\\/author\\\/tiffany\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u8089\u985e\u55ae\u8a5e - OneDotDot Chinese","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/","og_locale":"en_US","og_type":"article","og_title":"\u8089\u985e\u55ae\u8a5e - OneDotDot Chinese","og_description":"Meat, Seafood &#038; Staples Flashcards &#038; Market Game \ud83d\udcd6 Flashcards \ud83c\udfae Market Game Switch to Simplified \ud83e\udd69 Meat, Seafood &#038; Food Flashcards (Click to Flip \u00b7 Click \ud83d\udd0a to Listen) \ud83d\udd04 Flip All Hide Cards (Blind Mode) \ud83e\udd80 Crazy Market: Fresh Food Challenge \u26a1 Mode 1: Speed Order \ud83c\udccf Mode 2: 14-Pair Memory Match \u23f3...","og_url":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/","og_site_name":"OneDotDot Chinese","article_published_time":"2026-09-25T09:37:48+00:00","article_modified_time":"2026-10-01T06:19:10+00:00","author":"tiffany","twitter_card":"summary_large_image","twitter_misc":{"Written by":"tiffany"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/#article","isPartOf":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/"},"author":{"name":"tiffany","@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"headline":"\u8089\u985e\u55ae\u8a5e","datePublished":"2026-09-25T09:37:48+00:00","dateModified":"2026-10-01T06:19:10+00:00","mainEntityOfPage":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/"},"wordCount":57,"publisher":{"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"articleSection":["food"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/","url":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/","name":"\u8089\u985e\u55ae\u8a5e - OneDotDot Chinese","isPartOf":{"@id":"https:\/\/tiffanysmandarin.com\/#website"},"datePublished":"2026-09-25T09:37:48+00:00","dateModified":"2026-10-01T06:19:10+00:00","breadcrumb":{"@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tiffanysmandarin.com\/index.php\/2026\/09\/25\/meats-and-seafood\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9801","item":"https:\/\/tiffanysmandarin.com\/"},{"@type":"ListItem","position":2,"name":"\u8089\u985e\u55ae\u8a5e"}]},{"@type":"WebSite","@id":"https:\/\/tiffanysmandarin.com\/#website","url":"https:\/\/tiffanysmandarin.com\/","name":"OneDotDot Chinese","description":"Learn a little Chinese every day","publisher":{"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tiffanysmandarin.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/tiffanysmandarin.com\/#\/schema\/person\/3556e1160fac98b190d03b8aa8604d99","name":"tiffany","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png","url":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png","contentUrl":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png","width":214,"height":214,"caption":"tiffany"},"logo":{"@id":"http:\/\/tiffanysmandarin.com\/wp-content\/uploads\/2022\/06\/cropped-logo_tiffany2-1.png"},"sameAs":["https:\/\/www.instagram.com\/tiffanys_talk\/","https:\/\/www.linkedin.com\/in\/tiffany-huang-mandarin\/"],"url":"https:\/\/tiffanysmandarin.com\/index.php\/author\/tiffany\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/17325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/comments?post=17325"}],"version-history":[{"count":4,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/17325\/revisions"}],"predecessor-version":[{"id":17790,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/posts\/17325\/revisions\/17790"}],"wp:attachment":[{"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/media?parent=17325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/categories?post=17325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tiffanysmandarin.com\/index.php\/wp-json\/wp\/v2\/tags?post=17325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}