{"id":515555,"date":"2026-03-12T10:29:04","date_gmt":"2026-03-12T09:29:04","guid":{"rendered":"https:\/\/www.dynseo.com\/jeu-du-mahjong-dynseo\/"},"modified":"2026-03-12T10:32:37","modified_gmt":"2026-03-12T09:32:37","slug":"majiang-youxi-dynseo","status":"publish","type":"page","link":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/","title":{"rendered":"\u9ebb\u5c06\u6e38\u620f &#8211; DYNSEO"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;section&#8221; _builder_version=&#8221;4.16&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_row admin_label=&#8221;row&#8221; _builder_version=&#8221;4.16&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_code _builder_version=&#8221;4.27.5&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; sticky_enabled=&#8221;0&#8243;]<!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"fr\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] -->    <meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] -->    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] -->    <title>Mahjong Solitaire | DYNSEO<\/title><!-- [et_pb_line_break_holder] -->    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->        * {<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        html, body {<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        body {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            background: #ffffff;<!-- [et_pb_line_break_holder] -->            min-height: 100vh;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header {<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #a9e2e4 0%, #5e5ed7 100%);<!-- [et_pb_line_break_holder] -->            padding: 20px 25px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header::before {<!-- [et_pb_line_break_holder] -->            content: \"\";<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: -50%;<!-- [et_pb_line_break_holder] -->            right: -20%;<!-- [et_pb_line_break_holder] -->            width: 400px;<!-- [et_pb_line_break_holder] -->            height: 400px;<!-- [et_pb_line_break_holder] -->            background: radial-gradient(circle, #ffeca7 0%, transparent 70%);<!-- [et_pb_line_break_holder] -->            opacity: 0.4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo {<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo-icon {<!-- [et_pb_line_break_holder] -->            width: 40px;<!-- [et_pb_line_break_holder] -->            height: 40px;<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box {<!-- [et_pb_line_break_holder] -->            background: rgba(255, 255, 255, 0.9);<!-- [et_pb_line_break_holder] -->            border-radius: 15px;<!-- [et_pb_line_break_holder] -->            padding: 10px 20px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            min-width: 90px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 15px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) { border: 2px solid #ffeca7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) { border: 2px solid #a9e2e4; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) { border: 2px solid #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.7rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-transform: uppercase;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.4rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) .stat-value { color: #d4a000; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) .stat-value { color: #5e5ed7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) .stat-value { color: #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-container {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #gameBoard {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            margin: 20px auto;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #f0feff 0%, #e5f9fa 100%);<!-- [et_pb_line_break_holder] -->            border-radius: 20px;<!-- [et_pb_line_break_holder] -->            padding: 30px;<!-- [et_pb_line_break_holder] -->            border: 2px solid #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            width: 48px;<!-- [et_pb_line_break_holder] -->            height: 62px;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(145deg, #ffffff, #f0f0f0);<!-- [et_pb_line_break_holder] -->            border-radius: 6px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.85rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.15s, box-shadow 0.15s;<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 8px rgba(0,0,0,0.3);<!-- [et_pb_line_break_holder] -->            user-select: none;<!-- [et_pb_line_break_holder] -->            border: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            line-height: 1.1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile:hover:not(.blocked) {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 15px rgba(0,0,0,0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.selected {<!-- [et_pb_line_break_holder] -->            border: 3px solid #e73469;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 20px #e73469;<!-- [et_pb_line_break_holder] -->            transform: translateY(-5px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.blocked {<!-- [et_pb_line_break_holder] -->            opacity: 0.5;<!-- [et_pb_line_break_holder] -->            cursor: not-allowed;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.hint {<!-- [et_pb_line_break_holder] -->            animation: pulse 0.5s infinite;<!-- [et_pb_line_break_holder] -->            border-color: #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes pulse {<!-- [et_pb_line_break_holder] -->            0%, 100% { box-shadow: 0 0 10px #a9e2e4; }<!-- [et_pb_line_break_holder] -->            50% { box-shadow: 0 0 25px #a9e2e4; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.bamboo { background: linear-gradient(145deg, #e8f5e9, #c8e6c9); color: #2e7d32; }<!-- [et_pb_line_break_holder] -->        .tile.circle { background: linear-gradient(145deg, #e3f2fd, #bbdefb); color: #1565c0; }<!-- [et_pb_line_break_holder] -->        .tile.character { background: linear-gradient(145deg, #fff3e0, #ffe0b2); color: #e65100; }<!-- [et_pb_line_break_holder] -->        .tile.wind { background: linear-gradient(145deg, #f3e5f5, #e1bee7); color: #7b1fa2; }<!-- [et_pb_line_break_holder] -->        .tile.dragon { background: linear-gradient(145deg, #ffebee, #ffcdd2); color: #c62828; }<!-- [et_pb_line_break_holder] -->        .tile.flower { background: linear-gradient(145deg, #fffde7, #fff9c4); color: #f57f17; }<!-- [et_pb_line_break_holder] -->        .tile.season { background: linear-gradient(145deg, #e0f7fa, #b2ebf2); color: #00838f; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-controls {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 1rem;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border: none;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.2s, box-shadow 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-primary {<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-secondary {<!-- [et_pb_line_break_holder] -->            background: #a9e2e4;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-danger {<!-- [et_pb_line_break_holder] -->            background: #e73469;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn:hover {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info {<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.9rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info a {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            bottom: 30px;<!-- [et_pb_line_break_holder] -->            left: 50%;<!-- [et_pb_line_break_holder] -->            transform: translateX(-50%) translateY(100px);<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            transition: transform 0.3s;<!-- [et_pb_line_break_holder] -->            z-index: 100;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message.show { transform: translateX(-50%) translateY(0); }<!-- [et_pb_line_break_holder] -->        .message.error { background: #e73469; color: white; }<!-- [et_pb_line_break_holder] -->        .message.success { background: #a9e2e4; color: #1a1a3e; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0; left: 0; right: 0; bottom: 0;<!-- [et_pb_line_break_holder] -->            background: rgba(26, 26, 62, 0.9);<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            z-index: 1000;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            visibility: hidden;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay.active {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            visibility: visible;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal {<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            border-radius: 25px;<!-- [et_pb_line_break_holder] -->            padding: 40px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            max-width: 400px;<!-- [et_pb_line_break_holder] -->            width: 90%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal h2 {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal p {<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-icon {<!-- [et_pb_line_break_holder] -->            font-size: 3.5rem;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            gap: 30px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.8rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.8rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 800px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.7); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 500px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.5); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->            .game-header { justify-content: center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] -->    <\/p>\n<header class=\"game-header\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"logo\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"logo-icon\">\ud83c\udc04<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <span>DYNSEO \u9ebb\u5c06<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"game-stats\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-label\">\u5f97\u5206<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-value\" id=\"score\">0<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-label\">\u65f6\u95f4<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-value\" id=\"timer\">00:00<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-label\">\u724c<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-value\" id=\"remaining\">144<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/header>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <main class=\"game-container\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"gameBoard\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"game-controls\"><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-secondary\" onclick=\"showHint()\">\ud83d\udca1 \u63d0\u793a<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-danger\" onclick=\"shuffleTiles()\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"game-info\"><!-- [et_pb_line_break_holder] -->            <pee>\u7528 DYNSEO \u8bad\u7ec3\u4f60\u7684\u5927\u8111 \ud83e\udde0<\/pee><!-- [et_pb_line_break_holder] -->            <pee><a href=\"https:\/\/www.dynseo.com\" target=\"_blank\">\u53d1\u73b0\u6211\u4eec\u7684\u5e94\u7528\u7a0b\u5e8f \u2192<\/a><\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"modal-overlay\" id=\"winModal\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"modal-icon\">\ud83c\udf89<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2>\u606d\u559c\uff01<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee>\u4f60\u5b8c\u6210\u4e86\u62fc\u56fe\uff01<\/pee><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"modal-stats\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-value\" id=\"finalScore\">0<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-label\">\u79ef\u5206<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-value\" id=\"finalTime\">00:00<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-label\">\u65f6\u95f4<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u518d\u6765\u4e00\u5c40<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"modal-overlay\" id=\"gameOverModal\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"modal-icon\">\ud83e\udd14<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2>\u6ca1\u6709\u66f4\u591a\u7684\u52a8\u4f5c\uff01<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee>\u6d17\u724c\u6216\u91cd\u65b0\u5f00\u59cb\u3002<\/pee><!-- [et_pb_line_break_holder] -->            <\/p>\n<div style=\"display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;\"><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-secondary\" onclick=\"shuffleTiles(); document.getElementById('gameOverModal').classList.remove('active')\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"message\" id=\"message\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        \/\/ \u914d\u7f6e<!-- [et_pb_line_break_holder] -->        const TILE_W = 48;<!-- [et_pb_line_break_holder] -->        const TILE_H = 62;<!-- [et_pb_line_break_holder] -->        const LAYER_OFFSET = 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u74f7\u7816\u7b26\u53f7<!-- [et_pb_line_break_holder] -->        const SYMBOLS = {<!-- [et_pb_line_break_holder] -->            bamboo: ['B1','B2','B3','B4','B5','B6','B7','B8','B9'],<!-- [et_pb_line_break_holder] -->            circle: ['C1','C2','C3','C4','C5','C6','C7','C8','C9'],<!-- [et_pb_line_break_holder] -->            character: ['M1','M2','M3','M4','M5','M6','M7','M8','M9'],<!-- [et_pb_line_break_holder] -->            wind: ['\u4e1c','\u5357','\u897f','\u5317'],<!-- [et_pb_line_break_holder] -->            dragon: ['\u4e2d','\u53d1','\u767d'],<!-- [et_pb_line_break_holder] -->            flower: ['\ud83c\udf38','\ud83c\udf3a','\ud83c\udf3c','\ud83c\udf3b'],<!-- [et_pb_line_break_holder] -->            season: ['\ud83c\udf37','\u2600\ufe0f','\ud83c\udf42','\u2744\ufe0f']<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6e38\u620f\u72b6\u6001<!-- [et_pb_line_break_holder] -->        let tiles = [];<!-- [et_pb_line_break_holder] -->        let selected = null;<!-- [et_pb_line_break_holder] -->        let score = 0;<!-- [et_pb_line_break_holder] -->        let timer = null;<!-- [et_pb_line_break_holder] -->        let startTime = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u521b\u5efa\u5e03\u5c40<!-- [et_pb_line_break_holder] -->        function createLayout() {<!-- [et_pb_line_break_holder] -->            const pos = [];<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 0: 12x6 = 72<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 6; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 12; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x, y, z: 0});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 1: 10x4 = 40<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 4; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 10; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+1, y: y+1, z: 1});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 2: 8x2 = 16<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 8; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+2, y: y+2, z: 2});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 3: 6x2 = 12<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 6; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+3, y: y+2, z: 3});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 4: 2x2 = 4<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 2; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+5, y: y+2, z: 4});<!-- [et_pb_line_break_holder] -->            return pos; \/\/ \u603b\u5171 144<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u521b\u5efa\u74f7\u7816<!-- [et_pb_line_break_holder] -->        function createTiles() {<!-- [et_pb_line_break_holder] -->            const list = [];<!-- [et_pb_line_break_holder] -->            \/\/ \u6bcf\u79cd 4 \u4e2a bamboo, circle, character<!-- [et_pb_line_break_holder] -->            ['bamboo','circle','character'].forEach(cat => {<!-- [et_pb_line_break_holder] -->                SYMBOLS[cat].forEach(s => {<!-- [et_pb_line_break_holder] -->                    for (let i = 0; i < 4; i++) list.push({symbol: s, cat, group: s});<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ \u6bcf\u79cd 4 \u4e2a\u98ce<!-- [et_pb_line_break_holder] -->            SYMBOLS.wind.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'wind', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ \u6bcf\u79cd 4 \u4e2a\u9f99<!-- [et_pb_line_break_holder] -->            SYMBOLS.dragon.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'dragon', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ \u82b1\uff08\u76f8\u4e92\u5339\u914d\uff09<!-- [et_pb_line_break_holder] -->            SYMBOLS.flower.forEach(s => list.push({symbol: s, cat: 'flower', group: 'flower'}));<!-- [et_pb_line_break_holder] -->            \/\/ \u5b63\u8282\uff08\u76f8\u4e92\u5339\u914d\uff09<!-- [et_pb_line_break_holder] -->            SYMBOLS.season.forEach(s => list.push({symbol: s, cat: 'season', group: 'season'}));<!-- [et_pb_line_break_holder] -->            return list;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6d17\u724c<!-- [et_pb_line_break_holder] -->        function shuffle(arr) {<!-- [et_pb_line_break_holder] -->            for (let i = arr.length - 1; i > 0; i--) {<!-- [et_pb_line_break_holder] -->                const j = Math.floor(Math.random() * (i + 1));<!-- [et_pb_line_break_holder] -->                [arr[i], arr[j]] = [arr[j], arr[i]];<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return arr;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u68c0\u67e5\u662f\u5426\u7a7a\u95f2<!-- [et_pb_line_break_holder] -->        function isFree(tile) {<!-- [et_pb_line_break_holder] -->            if (tile.matched) return false;<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched && t !== tile);<!-- [et_pb_line_break_holder] -->            \/\/ \u88ab\u4e0a\u9762\u963b\u6321\uff1f<!-- [et_pb_line_break_holder] -->            if (active.some(t => t.z > tile.z && Math.abs(t.x - tile.x) < 1 &#038;&#038; Math.abs(t.y - tile.y) < 1)) return false;<!-- [et_pb_line_break_holder] -->            \/\/ \u4e24\u4fa7\u88ab\u963b\u6321\uff1f<!-- [et_pb_line_break_holder] -->            const left = active.some(t => t.z === tile.z && t.x === tile.x - 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            const right = active.some(t => t.z === tile.z && t.x === tile.x + 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            return !(left && right);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u67e5\u627e\u53ef\u80fd\u7684\u5339\u914d<!-- [et_pb_line_break_holder] -->        function findMatches() {<!-- [et_pb_line_break_holder] -->            const free = tiles.filter(t => !t.matched && isFree(t));<!-- [et_pb_line_break_holder] -->            const matches = [];<!-- [et_pb_line_break_holder] -->            for (let i = 0; i < free.length; i++) {<!-- [et_pb_line_break_holder] -->                for (let j = i + 1; j < free.length; j++) {<!-- [et_pb_line_break_holder] -->                    if (free[i].group === free[j].group) matches.push([free[i], free[j]]);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return matches;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u663e\u793a<!-- [et_pb_line_break_holder] -->        function render() {<!-- [et_pb_line_break_holder] -->            const board = document.getElementById('gameBoard');<!-- [et_pb_line_break_holder] -->            board.innerHTML = '';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const activeTiles = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            if (activeTiles.length === 0) {<!-- [et_pb_line_break_holder] -->                board.style.width = '200px';<!-- [et_pb_line_break_holder] -->                board.style.height = '100px';<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const maxX = Math.max(...activeTiles.map(t => t.x));<!-- [et_pb_line_break_holder] -->            const maxY = Math.max(...activeTiles.map(t => t.y));<!-- [et_pb_line_break_holder] -->            const maxZ = Math.max(...activeTiles.map(t => t.z));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            board.style.width = ((maxX + 1) * TILE_W + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] -->            board.style.height = ((maxY + 1) * TILE_H + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ \u6309 z, y, x \u6392\u5e8f<!-- [et_pb_line_break_holder] -->            const sorted = [...activeTiles].sort((a, b) => a.z - b.z || a.y - b.y || a.x - b.x);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            sorted.forEach(tile => {<!-- [et_pb_line_break_holder] -->                const div = document.createElement('div');<!-- [et_pb_line_break_holder] -->                div.className = 'tile ' + tile.cat;<!-- [et_pb_line_break_holder] -->                div.textContent = tile.symbol;<!-- [et_pb_line_break_holder] -->                div.style.left = (tile.x * TILE_W + tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.top = (tile.y * TILE_H - tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.zIndex = tile.z * 100 + tile.y * 10 + tile.x;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (!isFree(tile)) div.classList.add('blocked');<!-- [et_pb_line_break_holder] -->                if (tile === selected) div.classList.add('selected');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                div.onclick = () => clickTile(tile);<!-- [et_pb_line_break_holder] -->                board.appendChild(div);<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('remaining').textContent = activeTiles.length;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u70b9\u51fb\u74f7\u7816<!-- [et_pb_line_break_holder] -->        function clickTile(tile) {<!-- [et_pb_line_break_holder] -->            if (!isFree(tile)) {<!-- [et_pb_line_break_holder] -->                showMsg('\u74f7\u7816\u88ab\u963b\u6321\uff01', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile.hint').forEach(t => t.classList.remove('hint'));<!-- [et_pb_line_break_holder] -->            if (!selected) {<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            } else if (selected === tile) {<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] -->            } else if (selected.group === tile.group) {<!-- [et_pb_line_break_holder] -->                \/\/ \u5339\u914d\uff01<!-- [et_pb_line_break_holder] -->                selected.matched = true;<!-- [et_pb_line_break_holder] -->                tile.matched = true;<!-- [et_pb_line_break_holder] -->                score += 10;<!-- [et_pb_line_break_holder] -->                document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    render();<!-- [et_pb_line_break_holder] -->                    const remaining = tiles.filter(t => !t.matched).length;<!-- [et_pb_line_break_holder] -->                    if (remaining === 0) {<!-- [et_pb_line_break_holder] -->                        clearInterval(timer);<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalScore').textContent = score;<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalTime').textContent = document.getElementById('timer').textContent;<!-- [et_pb_line_break_holder] -->                        document.getElementById('winModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    } else if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                        document.getElementById('gameOverModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }, 100);<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            } else {<!-- [et_pb_line_break_holder] -->                showMsg('\u6ca1\u6709\u5339\u914d', 'error');<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u63d0\u793a<!-- [et_pb_line_break_holder] -->        function showHint() {<!-- [et_pb_line_break_holder] -->            const matches = findMatches();<!-- [et_pb_line_break_holder] -->            if (matches.length === 0) {<!-- [et_pb_line_break_holder] -->                showMsg('\u6ca1\u6709\u53ef\u7528\u7684\u79fb\u52a8\uff01', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 5);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            const [t1, t2] = matches[0];<!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile').forEach(div => {<!-- [et_pb_line_break_holder] -->                const left = parseInt(div.style.left);<!-- [et_pb_line_break_holder] -->                const top = parseInt(div.style.top);<!-- [et_pb_line_break_holder] -->                const z = parseInt(div.style.zIndex);<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                [t1, t2].forEach(tile => {<!-- [et_pb_line_break_holder] -->                    const tileLeft = tile.x * TILE_W + tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    const tileTop = tile.y * TILE_H - tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    if (Math.abs(left - tileLeft) < 5 &#038;&#038; Math.abs(top - tileTop) < 5) {<!-- [et_pb_line_break_holder] -->                        div.classList.add('hint');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            showMsg('\u63d0\u793a\uff01 (-5 \u5206)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6d17\u724c<!-- [et_pb_line_break_holder] -->        function shuffleTiles() {<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            const positions = active.map(t => ({x: t.x, y: t.y, z: t.z}));<!-- [et_pb_line_break_holder] -->            shuffle(positions);<!-- [et_pb_line_break_holder] -->            active.forEach((t, i) => {<!-- [et_pb_line_break_holder] -->                t.x = positions[i].x;<!-- [et_pb_line_break_holder] -->                t.y = positions[i].y;<!-- [et_pb_line_break_holder] -->                t.z = positions[i].z;<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 20);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            showMsg('\u5df2\u6d17\u724c\uff01 (-20 \u5206)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6d88\u606f<!-- [et_pb_line_break_holder] -->        function showMsg(text, type) {<!-- [et_pb_line_break_holder] -->            const msg = document.getElementById('message');<!-- [et_pb_line_break_holder] -->            msg.textContent = text;<!-- [et_pb_line_break_holder] -->            msg.className = 'message show ' + type;<!-- [et_pb_line_break_holder] -->            setTimeout(() => msg.classList.remove('show'), 2000);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u8ba1\u65f6\u5668<!-- [et_pb_line_break_holder] -->        function updateTimer() {<!-- [et_pb_line_break_holder] -->            const s = Math.floor((Date.now() - startTime) \/ 1000);<!-- [et_pb_line_break_holder] -->            const m = Math.floor(s \/ 60);<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = <!-- [et_pb_line_break_holder] -->                String(m).padStart(2, '0') + ':' + String(s % 60).padStart(2, '0');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u65b0\u6e38\u620f<!-- [et_pb_line_break_holder] -->        function newGame() {<!-- [et_pb_line_break_holder] -->            document.getElementById('winModal').classList.remove('active');<!-- [et_pb_line_break_holder] -->            document.getElementById('gameOverModal').classList.remove('active');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            clearInterval(timer);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const layout = createLayout();<!-- [et_pb_line_break_holder] -->            const tileData = shuffle(createTiles());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            tiles = layout.map((pos, i) => ({<!-- [et_pb_line_break_holder] -->                ...tileData[i],<!-- [et_pb_line_break_holder] -->                x: pos.x,<!-- [et_pb_line_break_holder] -->                y: pos.y,<!-- [et_pb_line_break_holder] -->                z: pos.z,<!-- [et_pb_line_break_holder] -->                matched: false<!-- [et_pb_line_break_holder] -->            }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            score = 0;<!-- [et_pb_line_break_holder] -->            startTime = Date.now();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = '0';<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = '00:00';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            timer = setInterval(updateTimer, 1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] --><!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"zh\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] -->    <meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] -->    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] -->    <title>\u9ebb\u5c06\u63a5\u9f99 | DYNSEO<\/title><!-- [et_pb_line_break_holder] -->    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->        * {<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        html, body {<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        body {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            background: #ffffff;<!-- [et_pb_line_break_holder] -->            min-height: 100vh;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header {<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #a9e2e4 0%, #5e5ed7 100%);<!-- [et_pb_line_break_holder] -->            padding: 20px 25px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header::before {<!-- [et_pb_line_break_holder] -->            content: \"\";<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: -50%;<!-- [et_pb_line_break_holder] -->            right: -20%;<!-- [et_pb_line_break_holder] -->            width: 400px;<!-- [et_pb_line_break_holder] -->            height: 400px;<!-- [et_pb_line_break_holder] -->            background: radial-gradient(circle, #ffeca7 0%, transparent 70%);<!-- [et_pb_line_break_holder] -->            opacity: 0.4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo {<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo-icon {<!-- [et_pb_line_break_holder] -->            width: 40px;<!-- [et_pb_line_break_holder] -->            height: 40px;<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box {<!-- [et_pb_line_break_holder] -->            background: rgba(255, 255, 255, 0.9);<!-- [et_pb_line_break_holder] -->            border-radius: 15px;<!-- [et_pb_line_break_holder] -->            padding: 10px 20px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            min-width: 90px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 15px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) { border: 2px solid #ffeca7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) { border: 2px solid #a9e2e4; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) { border: 2px solid #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.7rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-transform: uppercase;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.4rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) .stat-value { color: #d4a000; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) .stat-value { color: #5e5ed7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) .stat-value { color: #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-container {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #gameBoard {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            margin: 20px auto;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #f0feff 0%, #e5f9fa 100%);<!-- [et_pb_line_break_holder] -->            border-radius: 20px;<!-- [et_pb_line_break_holder] -->            padding: 30px;<!-- [et_pb_line_break_holder] -->            border: 2px solid #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            width: 48px;<!-- [et_pb_line_break_holder] -->            height: 62px;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(145deg, #ffffff, #f0f0f0);<!-- [et_pb_line_break_holder] -->            border-radius: 6px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.85rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.15s, box-shadow 0.15s;<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 8px rgba(0,0,0,0.3);<!-- [et_pb_line_break_holder] -->            user-select: none;<!-- [et_pb_line_break_holder] -->            border: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            line-height: 1.1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile:hover:not(.blocked) {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 15px rgba(0,0,0,0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.selected {<!-- [et_pb_line_break_holder] -->            border: 3px solid #e73469;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 20px #e73469;<!-- [et_pb_line_break_holder] -->            transform: translateY(-5px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.blocked {<!-- [et_pb_line_break_holder] -->            opacity: 0.5;<!-- [et_pb_line_break_holder] -->            cursor: not-allowed;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.hint {<!-- [et_pb_line_break_holder] -->            animation: pulse 0.5s infinite;<!-- [et_pb_line_break_holder] -->            border-color: #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes pulse {<!-- [et_pb_line_break_holder] -->            0%, 100% { box-shadow: 0 0 10px #a9e2e4; }<!-- [et_pb_line_break_holder] -->            50% { box-shadow: 0 0 25px #a9e2e4; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.bamboo { background: linear-gradient(145deg, #e8f5e9, #c8e6c9); color: #2e7d32; }<!-- [et_pb_line_break_holder] -->        .tile.circle { background: linear-gradient(145deg, #e3f2fd, #bbdefb); color: #1565c0; }<!-- [et_pb_line_break_holder] -->        .tile.character { background: linear-gradient(145deg, #fff3e0, #ffe0b2); color: #e65100; }<!-- [et_pb_line_break_holder] -->        .tile.wind { background: linear-gradient(145deg, #f3e5f5, #e1bee7); color: #7b1fa2; }<!-- [et_pb_line_break_holder] -->        .tile.dragon { background: linear-gradient(145deg, #ffebee, #ffcdd2); color: #c62828; }<!-- [et_pb_line_break_holder] -->        .tile.flower { background: linear-gradient(145deg, #fffde7, #fff9c4); color: #f57f17; }<!-- [et_pb_line_break_holder] -->        .tile.season { background: linear-gradient(145deg, #e0f7fa, #b2ebf2); color: #00838f; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-controls {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 1rem;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border: none;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.2s, box-shadow 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-primary {<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-secondary {<!-- [et_pb_line_break_holder] -->            background: #a9e2e4;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-danger {<!-- [et_pb_line_break_holder] -->            background: #e73469;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn:hover {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info {<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.9rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info a {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            bottom: 30px;<!-- [et_pb_line_break_holder] -->            left: 50%;<!-- [et_pb_line_break_holder] -->            transform: translateX(-50%) translateY(100px);<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            transition: transform 0.3s;<!-- [et_pb_line_break_holder] -->            z-index: 100;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message.show { transform: translateX(-50%) translateY(0); }<!-- [et_pb_line_break_holder] -->        .message.error { background: #e73469; color: white; }<!-- [et_pb_line_break_holder] -->        .message.success { background: #a9e2e4; color: #1a1a3e; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0; left: 0; right: 0; bottom: 0;<!-- [et_pb_line_break_holder] -->            background: rgba(26, 26, 62, 0.9);<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            z-index: 1000;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            visibility: hidden;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay.active {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            visibility: visible;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal {<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            border-radius: 25px;<!-- [et_pb_line_break_holder] -->            padding: 40px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            max-width: 400px;<!-- [et_pb_line_break_holder] -->            width: 90%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal h2 {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal p {<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-icon {<!-- [et_pb_line_break_holder] -->            font-size: 3.5rem;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            gap: 30px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.8rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.8rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 800px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.7); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 500px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.5); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->            .game-header { justify-content: center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] -->    <\/p>\n<header class=\"game-header\"><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"logo\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"logo-icon\">\ud83c\udc04<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <span>DYNSEO \u9ebb\u5c06<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"game-stats\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-label\">\u5f97\u5206<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-value\" id=\"score\">0<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-label\">\u65f6\u95f4<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-value\" id=\"timer\">00:00<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-label\">\u724c<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"stat-value\" id=\"remaining\">144<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/header>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <main class=\"game-container\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"gameBoard\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"game-controls\"><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-secondary\" onclick=\"showHint()\">\ud83d\udca1 \u63d0\u793a<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-danger\" onclick=\"shuffleTiles()\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"game-info\"><!-- [et_pb_line_break_holder] -->            <pee>\u7528 DYNSEO \u8bad\u7ec3\u4f60\u7684\u5927\u8111 \ud83e\udde0<\/pee><!-- [et_pb_line_break_holder] -->            <pee><a href=\"https:\/\/www.dynseo.com\" target=\"_blank\">\u53d1\u73b0\u6211\u4eec\u7684\u5e94\u7528\u7a0b\u5e8f \u2192<\/a><\/pee><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"modal-overlay\" id=\"winModal\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"modal-icon\">\ud83c\udf89<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2>\u606d\u559c\uff01<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee>\u4f60\u5b8c\u6210\u4e86\u62fc\u56fe\uff01<\/pee><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"modal-stats\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-value\" id=\"finalScore\">0<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-label\">\u79ef\u5206<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-value\" id=\"finalTime\">00:00<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"modal-stat-label\">\u65f6\u95f4<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u518d\u6765\u4e00\u5c40<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"modal-overlay\" id=\"gameOverModal\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"modal-icon\">\ud83e\udd14<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2>\u6ca1\u6709\u66f4\u591a\u7684\u52a8\u4f5c\uff01<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee>\u6d17\u724c\u6216\u91cd\u65b0\u5f00\u59cb\u3002<\/pee><!-- [et_pb_line_break_holder] -->            <\/p>\n<div style=\"display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;\"><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-secondary\" onclick=\"shuffleTiles(); document.getElementById('gameOverModal').classList.remove('active')\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"message\" id=\"message\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        \/\/ Configuration<!-- [et_pb_line_break_holder] -->        const TILE_W = 48;<!-- [et_pb_line_break_holder] -->        const TILE_H = 62;<!-- [et_pb_line_break_holder] -->        const LAYER_OFFSET = 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Symboles des tuiles<!-- [et_pb_line_break_holder] -->        const SYMBOLS = {<!-- [et_pb_line_break_holder] -->            bamboo: ['B1','B2','B3','B4','B5','B6','B7','B8','B9'],<!-- [et_pb_line_break_holder] -->            circle: ['C1','C2','C3','C4','C5','C6','C7','C8','C9'],<!-- [et_pb_line_break_holder] -->            character: ['M1','M2','M3','M4','M5','M6','M7','M8','M9'],<!-- [et_pb_line_break_holder] -->            wind: ['\u6771','\u5357','\u897f','\u5317'],<!-- [et_pb_line_break_holder] -->            dragon: ['\u4e2d','\u767c','\u767d'],<!-- [et_pb_line_break_holder] -->            flower: ['\ud83c\udf38','\ud83c\udf3a','\ud83c\udf3c','\ud83c\udf3b'],<!-- [et_pb_line_break_holder] -->            season: ['\ud83c\udf37','\u2600\ufe0f','\ud83c\udf42','\u2744\ufe0f']<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u00c9tat du jeu<!-- [et_pb_line_break_holder] -->        let tiles = [];<!-- [et_pb_line_break_holder] -->        let selected = null;<!-- [et_pb_line_break_holder] -->        let score = 0;<!-- [et_pb_line_break_holder] -->        let timer = null;<!-- [et_pb_line_break_holder] -->        let startTime = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Cr\u00e9er le layout<!-- [et_pb_line_break_holder] -->        function createLayout() {<!-- [et_pb_line_break_holder] -->            const pos = [];<!-- [et_pb_line_break_holder] -->            \/\/ Layer 0: 12x6 = 72<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 6; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 12; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x, y, z: 0});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 1: 10x4 = 40<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 4; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 10; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+1, y: y+1, z: 1});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 2: 8x2 = 16<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 8; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+2, y: y+2, z: 2});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 3: 6x2 = 12<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 6; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+3, y: y+2, z: 3});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 4: 2x2 = 4<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 2; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+5, y: y+2, z: 4});<!-- [et_pb_line_break_holder] -->            return pos; \/\/ 144 total<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Cr\u00e9er les tuiles<!-- [et_pb_line_break_holder] -->        function createTiles() {<!-- [et_pb_line_break_holder] -->            const list = [];<!-- [et_pb_line_break_holder] -->            \/\/ 4 de chaque pour bamboo, circle, character<!-- [et_pb_line_break_holder] -->            ['bamboo','circle','character'].forEach(cat => {<!-- [et_pb_line_break_holder] -->                SYMBOLS[cat].forEach(s => {<!-- [et_pb_line_break_holder] -->                    for (let i = 0; i < 4; i++) list.push({symbol: s, cat, group: s});<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ 4 de chaque vent<!-- [et_pb_line_break_holder] -->            SYMBOLS.wind.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'wind', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ 4 de chaque dragon<!-- [et_pb_line_break_holder] -->            SYMBOLS.dragon.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'dragon', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ Fleurs (matchent entre elles)<!-- [et_pb_line_break_holder] -->            SYMBOLS.flower.forEach(s => list.push({symbol: s, cat: 'flower', group: 'flower'}));<!-- [et_pb_line_break_holder] -->            \/\/ Saisons (matchent entre elles)<!-- [et_pb_line_break_holder] -->            SYMBOLS.season.forEach(s => list.push({symbol: s, cat: 'season', group: 'season'}));<!-- [et_pb_line_break_holder] -->            return list;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ M\u00e9langer<!-- [et_pb_line_break_holder] -->        function shuffle(arr) {<!-- [et_pb_line_break_holder] -->            for (let i = arr.length - 1; i > 0; i--) {<!-- [et_pb_line_break_holder] -->                const j = Math.floor(Math.random() * (i + 1));<!-- [et_pb_line_break_holder] -->                [arr[i], arr[j]] = [arr[j], arr[i]];<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return arr;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ V\u00e9rifier si libre<!-- [et_pb_line_break_holder] -->        function isFree(tile) {<!-- [et_pb_line_break_holder] -->            if (tile.matched) return false;<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched && t !== tile);<!-- [et_pb_line_break_holder] -->            \/\/ Bloqu\u00e9 par dessus ?<!-- [et_pb_line_break_holder] -->            if (active.some(t => t.z > tile.z && Math.abs(t.x - tile.x) < 1 &#038;&#038; Math.abs(t.y - tile.y) < 1)) return false;<!-- [et_pb_line_break_holder] -->            \/\/ Bloqu\u00e9 des deux c\u00f4t\u00e9s ?<!-- [et_pb_line_break_holder] -->            const left = active.some(t => t.z === tile.z && t.x === tile.x - 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            const right = active.some(t => t.z === tile.z && t.x === tile.x + 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            return !(left && right);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Trouver les matchs possibles<!-- [et_pb_line_break_holder] -->        function findMatches() {<!-- [et_pb_line_break_holder] -->            const free = tiles.filter(t => !t.matched && isFree(t));<!-- [et_pb_line_break_holder] -->            const matches = [];<!-- [et_pb_line_break_holder] -->            for (let i = 0; i < free.length; i++) {<!-- [et_pb_line_break_holder] -->                for (let j = i + 1; j < free.length; j++) {<!-- [et_pb_line_break_holder] -->                    if (free[i].group === free[j].group) matches.push([free[i], free[j]]);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return matches;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Afficher<!-- [et_pb_line_break_holder] -->        function render() {<!-- [et_pb_line_break_holder] -->            const board = document.getElementById('gameBoard');<!-- [et_pb_line_break_holder] -->            board.innerHTML = '';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const activeTiles = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            if (activeTiles.length === 0) {<!-- [et_pb_line_break_holder] -->                board.style.width = '200px';<!-- [et_pb_line_break_holder] -->                board.style.height = '100px';<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const maxX = Math.max(...activeTiles.map(t => t.x));<!-- [et_pb_line_break_holder] -->            const maxY = Math.max(...activeTiles.map(t => t.y));<!-- [et_pb_line_break_holder] -->            const maxZ = Math.max(...activeTiles.map(t => t.z));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            board.style.width = ((maxX + 1) * TILE_W + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] -->            board.style.height = ((maxY + 1) * TILE_H + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Trier par z, y, x<!-- [et_pb_line_break_holder] -->            const sorted = [...activeTiles].sort((a, b) => a.z - b.z || a.y - b.y || a.x - b.x);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            sorted.forEach(tile => {<!-- [et_pb_line_break_holder] -->                const div = document.createElement('div');<!-- [et_pb_line_break_holder] -->                div.className = 'tile ' + tile.cat;<!-- [et_pb_line_break_holder] -->                div.textContent = tile.symbol;<!-- [et_pb_line_break_holder] -->                div.style.left = (tile.x * TILE_W + tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.top = (tile.y * TILE_H - tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.zIndex = tile.z * 100 + tile.y * 10 + tile.x;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (!isFree(tile)) div.classList.add('blocked');<!-- [et_pb_line_break_holder] -->                if (tile === selected) div.classList.add('selected');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                div.onclick = () => clickTile(tile);<!-- [et_pb_line_break_holder] -->                board.appendChild(div);<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('remaining').textContent = activeTiles.length;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Clic sur tuile<!-- [et_pb_line_break_holder] -->        function clickTile(tile) {<!-- [et_pb_line_break_holder] -->            if (!isFree(tile)) {<!-- [et_pb_line_break_holder] -->                showMsg('Tuile bloqu\u00e9e !', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile.hint').forEach(t => t.classList.remove('hint'));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            if (!selected) {<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            } else if (selected === tile) {<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] -->            } else if (selected.group === tile.group) {<!-- [et_pb_line_break_holder] -->                \/\/ Match !<!-- [et_pb_line_break_holder] -->                selected.matched = true;<!-- [et_pb_line_break_holder] -->                tile.matched = true;<!-- [et_pb_line_break_holder] -->                score += 10;<!-- [et_pb_line_break_holder] -->                document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    render();<!-- [et_pb_line_break_holder] -->                    const remaining = tiles.filter(t => !t.matched).length;<!-- [et_pb_line_break_holder] -->                    if (remaining === 0) {<!-- [et_pb_line_break_holder] -->                        clearInterval(timer);<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalScore').textContent = score;<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalTime').textContent = document.getElementById('timer').textContent;<!-- [et_pb_line_break_holder] -->                        document.getElementById('winModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    } else if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                        document.getElementById('gameOverModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }, 100);<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            } else {<!-- [et_pb_line_break_holder] -->                showMsg('Pas de correspondance', 'error');<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Indice<!-- [et_pb_line_break_holder] -->        function showHint() {<!-- [et_pb_line_break_holder] -->            const matches = findMatches();<!-- [et_pb_line_break_holder] -->            if (matches.length === 0) {<!-- [et_pb_line_break_holder] -->                showMsg('Aucun coup possible !', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 5);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            const [t1, t2] = matches[0];<!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile').forEach(div => {<!-- [et_pb_line_break_holder] -->                const left = parseInt(div.style.left);<!-- [et_pb_line_break_holder] -->                const top = parseInt(div.style.top);<!-- [et_pb_line_break_holder] -->                const z = parseInt(div.style.zIndex);<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                [t1, t2].forEach(tile => {<!-- [et_pb_line_break_holder] -->                    const tileLeft = tile.x * TILE_W + tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    const tileTop = tile.y * TILE_H - tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    if (Math.abs(left - tileLeft) < 5 &#038;&#038; Math.abs(top - tileTop) < 5) {<!-- [et_pb_line_break_holder] -->                        div.classList.add('hint');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            showMsg('Indice ! (-5 pts)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ M\u00e9langer<!-- [et_pb_line_break_holder] -->        function shuffleTiles() {<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            const positions = active.map(t => ({x: t.x, y: t.y, z: t.z}));<!-- [et_pb_line_break_holder] -->            shuffle(positions);<!-- [et_pb_line_break_holder] -->            active.forEach((t, i) => {<!-- [et_pb_line_break_holder] -->                t.x = positions[i].x;<!-- [et_pb_line_break_holder] -->                t.y = positions[i].y;<!-- [et_pb_line_break_holder] -->                t.z = positions[i].z;<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 20);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            showMsg('M\u00e9lang\u00e9 ! (-20 pts)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Message<!-- [et_pb_line_break_holder] -->        function showMsg(text, type) {<!-- [et_pb_line_break_holder] -->            const msg = document.getElementById('message');<!-- [et_pb_line_break_holder] -->            msg.textContent = text;<!-- [et_pb_line_break_holder] -->            msg.className = 'message show ' + type;<!-- [et_pb_line_break_holder] -->            setTimeout(() => msg.classList.remove('show'), 2000);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Timer<!-- [et_pb_line_break_holder] -->        function updateTimer() {<!-- [et_pb_line_break_holder] -->            const s = Math.floor((Date.now() - startTime) \/ 1000);<!-- [et_pb_line_break_holder] -->            const m = Math.floor(s \/ 60);<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = <!-- [et_pb_line_break_holder] -->                String(m).padStart(2, '0') + ':' + String(s % 60).padStart(2, '0');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Nouvelle partie<!-- [et_pb_line_break_holder] -->        function newGame() {<!-- [et_pb_line_break_holder] -->            document.getElementById('winModal').classList.remove('active');<!-- [et_pb_line_break_holder] -->            document.getElementById('gameOverModal').classList.remove('active');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            clearInterval(timer);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const layout = createLayout();<!-- [et_pb_line_break_holder] -->            const tileData = shuffle(createTiles());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            tiles = layout.map((pos, i) => ({<!-- [et_pb_line_break_holder] -->                ...tileData[i],<!-- [et_pb_line_break_holder] -->                x: pos.x,<!-- [et_pb_line_break_holder] -->                y: pos.y,<!-- [et_pb_line_break_holder] -->                z: pos.z,<!-- [et_pb_line_break_holder] -->                matched: false<!-- [et_pb_line_break_holder] -->            }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            score = 0;<!-- [et_pb_line_break_holder] -->            startTime = Date.now();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = '0';<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = '00:00';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            timer = setInterval(updateTimer, 1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ V\u00e9rifier si jouable<!-- [et_pb_line_break_holder] -->            setTimeout(() => {<!-- [et_pb_line_break_holder] -->                if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                    showMsg('M\u00e9lange auto...', 'success');<!-- [et_pb_line_break_holder] -->                    shuffleTiles();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }, 200);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ D\u00e9marrer<!-- [et_pb_line_break_holder] -->        newGame();<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html><!-- [et_pb_line_break_holder] -->            \/\/ V\u00e9rifier si jouable<!-- [et_pb_line_break_holder] -->            setTimeout(() => {<!-- [et_pb_line_break_holder] -->                if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                    showMsg('M\u00e9lange auto...', 'success');<!-- [et_pb_line_break_holder] -->                    shuffleTiles();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }, 200);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ D\u00e9marrer<!-- [et_pb_line_break_holder] -->        newGame();<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n<p>[et_pb_code]<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Qu'est-ce que le Mahjong Solitaire de DYNSEO ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le Mahjong Solitaire de DYNSEO est un jeu de puzzle en ligne qui permet d'entra\u00eener votre cerveau. Il utilise 144 tuiles traditionnelles du Mahjong et propose un syst\u00e8me de score avec chronom\u00e8tre pour mesurer vos performances.\"}},{\"@type\":\"Question\",\"name\":\"Combien de tuiles sont utilis\u00e9es dans ce jeu de Mahjong ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le jeu utilise 144 tuiles, ce qui correspond au nombre standard de tuiles dans un set complet de Mahjong traditionnel.\"}},{\"@type\":\"Question\",\"name\":\"Quelles fonctionnalit\u00e9s d'aide sont disponibles pendant le jeu ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le jeu propose plusieurs aides : un bouton 'Indice' (\ud83d\udca1) pour obtenir des conseils, un bouton 'M\u00e9langer' (\ud83d\udd00) pour redistribuer les tuiles, et la possibilit\u00e9 de d\u00e9marrer une 'Nouvelle partie' (\ud83d\udd04) \u00e0 tout moment.\"}},{\"@type\":\"Question\",\"name\":\"Comment le jeu mesure-t-il les performances du joueur ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le jeu mesure vos performances avec un syst\u00e8me de score (affich\u00e9 en points) et un chronom\u00e8tre qui enregistre le temps n\u00e9cessaire pour terminer la partie (format 00:00).\"}},{\"@type\":\"Question\",\"name\":\"Que se passe-t-il quand il n'y a plus de coups possibles ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Quand il n'y a plus de coups possibles, le jeu affiche le message '\ud83e\udd14 Plus de coups ! M\u00e9langez les tuiles ou recommencez.' Vous pouvez alors choisir de m\u00e9langer les tuiles ou de commencer une nouvelle partie.\"}},{\"@type\":\"Question\",\"name\":\"Quel est l'objectif principal de ce jeu de Mahjong ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"L'objectif principal est d'entra\u00eener votre cerveau tout en vous divertissant. Le jeu fait partie des applications DYNSEO d\u00e9di\u00e9es \u00e0 la stimulation cognitive et \u00e0 l'exercice mental.\"}}]}<\/script>[\/et_pb_code]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":4,"featured_media":130227,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"[et_pb_section fb_built=\"1\" admin_label=\"section\" _builder_version=\"4.16\" global_colors_info=\"{}\"][et_pb_row admin_label=\"row\" _builder_version=\"4.16\" background_size=\"initial\" background_position=\"top_left\" background_repeat=\"repeat\" global_colors_info=\"{}\"][et_pb_column type=\"4_4\" _builder_version=\"4.16\" custom_padding=\"|||\" global_colors_info=\"{}\" custom_padding__hover=\"|||\"][et_pb_code _builder_version=\"4.27.5\" _module_preset=\"default\" hover_enabled=\"0\" sticky_enabled=\"0\"]<!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"fr\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] -->    <meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] -->    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] -->    <title>Mahjong Solitaire | DYNSEO<\/title><!-- [et_pb_line_break_holder] -->    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700&display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] -->    <style><!-- [et_pb_line_break_holder] -->        * {<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        html, body {<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        body {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            background: #ffffff;<!-- [et_pb_line_break_holder] -->            min-height: 100vh;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header {<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #a9e2e4 0%, #5e5ed7 100%);<!-- [et_pb_line_break_holder] -->            padding: 20px 25px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header::before {<!-- [et_pb_line_break_holder] -->            content: \"\";<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: -50%;<!-- [et_pb_line_break_holder] -->            right: -20%;<!-- [et_pb_line_break_holder] -->            width: 400px;<!-- [et_pb_line_break_holder] -->            height: 400px;<!-- [et_pb_line_break_holder] -->            background: radial-gradient(circle, #ffeca7 0%, transparent 70%);<!-- [et_pb_line_break_holder] -->            opacity: 0.4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo {<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo-icon {<!-- [et_pb_line_break_holder] -->            width: 40px;<!-- [et_pb_line_break_holder] -->            height: 40px;<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box {<!-- [et_pb_line_break_holder] -->            background: rgba(255, 255, 255, 0.9);<!-- [et_pb_line_break_holder] -->            border-radius: 15px;<!-- [et_pb_line_break_holder] -->            padding: 10px 20px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            min-width: 90px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 15px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) { border: 2px solid #ffeca7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) { border: 2px solid #a9e2e4; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) { border: 2px solid #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.7rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-transform: uppercase;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.4rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) .stat-value { color: #d4a000; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) .stat-value { color: #5e5ed7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) .stat-value { color: #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-container {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #gameBoard {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            margin: 20px auto;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #f0feff 0%, #e5f9fa 100%);<!-- [et_pb_line_break_holder] -->            border-radius: 20px;<!-- [et_pb_line_break_holder] -->            padding: 30px;<!-- [et_pb_line_break_holder] -->            border: 2px solid #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            width: 48px;<!-- [et_pb_line_break_holder] -->            height: 62px;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(145deg, #ffffff, #f0f0f0);<!-- [et_pb_line_break_holder] -->            border-radius: 6px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.85rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.15s, box-shadow 0.15s;<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 8px rgba(0,0,0,0.3);<!-- [et_pb_line_break_holder] -->            user-select: none;<!-- [et_pb_line_break_holder] -->            border: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            line-height: 1.1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile:hover:not(.blocked) {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 15px rgba(0,0,0,0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.selected {<!-- [et_pb_line_break_holder] -->            border: 3px solid #e73469;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 20px #e73469;<!-- [et_pb_line_break_holder] -->            transform: translateY(-5px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.blocked {<!-- [et_pb_line_break_holder] -->            opacity: 0.5;<!-- [et_pb_line_break_holder] -->            cursor: not-allowed;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.hint {<!-- [et_pb_line_break_holder] -->            animation: pulse 0.5s infinite;<!-- [et_pb_line_break_holder] -->            border-color: #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes pulse {<!-- [et_pb_line_break_holder] -->            0%, 100% { box-shadow: 0 0 10px #a9e2e4; }<!-- [et_pb_line_break_holder] -->            50% { box-shadow: 0 0 25px #a9e2e4; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.bamboo { background: linear-gradient(145deg, #e8f5e9, #c8e6c9); color: #2e7d32; }<!-- [et_pb_line_break_holder] -->        .tile.circle { background: linear-gradient(145deg, #e3f2fd, #bbdefb); color: #1565c0; }<!-- [et_pb_line_break_holder] -->        .tile.character { background: linear-gradient(145deg, #fff3e0, #ffe0b2); color: #e65100; }<!-- [et_pb_line_break_holder] -->        .tile.wind { background: linear-gradient(145deg, #f3e5f5, #e1bee7); color: #7b1fa2; }<!-- [et_pb_line_break_holder] -->        .tile.dragon { background: linear-gradient(145deg, #ffebee, #ffcdd2); color: #c62828; }<!-- [et_pb_line_break_holder] -->        .tile.flower { background: linear-gradient(145deg, #fffde7, #fff9c4); color: #f57f17; }<!-- [et_pb_line_break_holder] -->        .tile.season { background: linear-gradient(145deg, #e0f7fa, #b2ebf2); color: #00838f; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-controls {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 1rem;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border: none;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.2s, box-shadow 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-primary {<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-secondary {<!-- [et_pb_line_break_holder] -->            background: #a9e2e4;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-danger {<!-- [et_pb_line_break_holder] -->            background: #e73469;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn:hover {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info {<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.9rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info a {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            bottom: 30px;<!-- [et_pb_line_break_holder] -->            left: 50%;<!-- [et_pb_line_break_holder] -->            transform: translateX(-50%) translateY(100px);<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            transition: transform 0.3s;<!-- [et_pb_line_break_holder] -->            z-index: 100;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message.show { transform: translateX(-50%) translateY(0); }<!-- [et_pb_line_break_holder] -->        .message.error { background: #e73469; color: white; }<!-- [et_pb_line_break_holder] -->        .message.success { background: #a9e2e4; color: #1a1a3e; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0; left: 0; right: 0; bottom: 0;<!-- [et_pb_line_break_holder] -->            background: rgba(26, 26, 62, 0.9);<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            z-index: 1000;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            visibility: hidden;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay.active {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            visibility: visible;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal {<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            border-radius: 25px;<!-- [et_pb_line_break_holder] -->            padding: 40px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            max-width: 400px;<!-- [et_pb_line_break_holder] -->            width: 90%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal h2 {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal p {<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-icon {<!-- [et_pb_line_break_holder] -->            font-size: 3.5rem;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            gap: 30px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.8rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.8rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 800px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.7); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 500px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.5); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->            .game-header { justify-content: center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] -->    <header class=\"game-header\"><!-- [et_pb_line_break_holder] -->        <div class=\"logo\"><!-- [et_pb_line_break_holder] -->            <div class=\"logo-icon\">\ud83c\udc04<\/div><!-- [et_pb_line_break_holder] -->            <span>DYNSEO \u9ebb\u5c06<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"game-stats\"><!-- [et_pb_line_break_holder] -->            <div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <div class=\"stat-label\">\u5f97\u5206<\/div><!-- [et_pb_line_break_holder] -->                <div class=\"stat-value\" id=\"score\">0<\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->            <div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <div class=\"stat-label\">\u65f6\u95f4<\/div><!-- [et_pb_line_break_holder] -->                <div class=\"stat-value\" id=\"timer\">00:00<\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->            <div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <div class=\"stat-label\">\u724c<\/div><!-- [et_pb_line_break_holder] -->                <div class=\"stat-value\" id=\"remaining\">144<\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/header><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <main class=\"game-container\"><!-- [et_pb_line_break_holder] -->        <div id=\"gameBoard\"><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <div class=\"game-controls\"><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-secondary\" onclick=\"showHint()\">\ud83d\udca1 \u63d0\u793a<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-danger\" onclick=\"shuffleTiles()\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <div class=\"game-info\"><!-- [et_pb_line_break_holder] -->            <p>\u7528 DYNSEO \u8bad\u7ec3\u4f60\u7684\u5927\u8111 \ud83e\udde0<\/p><!-- [et_pb_line_break_holder] -->            <p><a href=\"https:\/\/www.dynseo.com\" target=\"_blank\">\u53d1\u73b0\u6211\u4eec\u7684\u5e94\u7528\u7a0b\u5e8f \u2192<\/a><\/p><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"modal-overlay\" id=\"winModal\"><!-- [et_pb_line_break_holder] -->        <div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <div class=\"modal-icon\">\ud83c\udf89<\/div><!-- [et_pb_line_break_holder] -->            <h2>\u606d\u559c\uff01<\/h2><!-- [et_pb_line_break_holder] -->            <p>\u4f60\u5b8c\u6210\u4e86\u62fc\u56fe\uff01<\/p><!-- [et_pb_line_break_holder] -->            <div class=\"modal-stats\"><!-- [et_pb_line_break_holder] -->                <div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-value\" id=\"finalScore\">0<\/div><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-label\">\u79ef\u5206<\/div><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] -->                <div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-value\" id=\"finalTime\">00:00<\/div><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-label\">\u65f6\u95f4<\/div><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u518d\u6765\u4e00\u5c40<\/button><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"modal-overlay\" id=\"gameOverModal\"><!-- [et_pb_line_break_holder] -->        <div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <div class=\"modal-icon\">\ud83e\udd14<\/div><!-- [et_pb_line_break_holder] -->            <h2>\u6ca1\u6709\u66f4\u591a\u7684\u52a8\u4f5c\uff01<\/h2><!-- [et_pb_line_break_holder] -->            <p>\u6d17\u724c\u6216\u91cd\u65b0\u5f00\u59cb\u3002<\/p><!-- [et_pb_line_break_holder] -->            <div style=\"display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;\"><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-secondary\" onclick=\"shuffleTiles(); document.getElementById('gameOverModal').classList.remove('active')\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\n<div class=\"message\" id=\"message\"><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        \/\/ \u914d\u7f6e<!-- [et_pb_line_break_holder] -->        const TILE_W = 48;<!-- [et_pb_line_break_holder] -->        const TILE_H = 62;<!-- [et_pb_line_break_holder] -->        const LAYER_OFFSET = 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u74f7\u7816\u7b26\u53f7<!-- [et_pb_line_break_holder] -->        const SYMBOLS = {<!-- [et_pb_line_break_holder] -->            bamboo: ['B1','B2','B3','B4','B5','B6','B7','B8','B9'],<!-- [et_pb_line_break_holder] -->            circle: ['C1','C2','C3','C4','C5','C6','C7','C8','C9'],<!-- [et_pb_line_break_holder] -->            character: ['M1','M2','M3','M4','M5','M6','M7','M8','M9'],<!-- [et_pb_line_break_holder] -->            wind: ['\u4e1c','\u5357','\u897f','\u5317'],<!-- [et_pb_line_break_holder] -->            dragon: ['\u4e2d','\u53d1','\u767d'],<!-- [et_pb_line_break_holder] -->            flower: ['\ud83c\udf38','\ud83c\udf3a','\ud83c\udf3c','\ud83c\udf3b'],<!-- [et_pb_line_break_holder] -->            season: ['\ud83c\udf37','\u2600\ufe0f','\ud83c\udf42','\u2744\ufe0f']<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6e38\u620f\u72b6\u6001<!-- [et_pb_line_break_holder] -->        let tiles = [];<!-- [et_pb_line_break_holder] -->        let selected = null;<!-- [et_pb_line_break_holder] -->        let score = 0;<!-- [et_pb_line_break_holder] -->        let timer = null;<!-- [et_pb_line_break_holder] -->        let startTime = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u521b\u5efa\u5e03\u5c40<!-- [et_pb_line_break_holder] -->        function createLayout() {<!-- [et_pb_line_break_holder] -->            const pos = [];<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 0: 12x6 = 72<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 6; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 12; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x, y, z: 0});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 1: 10x4 = 40<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 4; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 10; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+1, y: y+1, z: 1});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 2: 8x2 = 16<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 8; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+2, y: y+2, z: 2});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 3: 6x2 = 12<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 6; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+3, y: y+2, z: 3});<!-- [et_pb_line_break_holder] -->            \/\/ \u5c42 4: 2x2 = 4<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 2; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+5, y: y+2, z: 4});<!-- [et_pb_line_break_holder] -->            return pos; \/\/ \u603b\u5171 144<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u521b\u5efa\u74f7\u7816<!-- [et_pb_line_break_holder] -->        function createTiles() {<!-- [et_pb_line_break_holder] -->            const list = [];<!-- [et_pb_line_break_holder] -->            \/\/ \u6bcf\u79cd 4 \u4e2a bamboo, circle, character<!-- [et_pb_line_break_holder] -->            ['bamboo','circle','character'].forEach(cat => {<!-- [et_pb_line_break_holder] -->                SYMBOLS[cat].forEach(s => {<!-- [et_pb_line_break_holder] -->                    for (let i = 0; i < 4; i++) list.push({symbol: s, cat, group: s});<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ \u6bcf\u79cd 4 \u4e2a\u98ce<!-- [et_pb_line_break_holder] -->            SYMBOLS.wind.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'wind', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ \u6bcf\u79cd 4 \u4e2a\u9f99<!-- [et_pb_line_break_holder] -->            SYMBOLS.dragon.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'dragon', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ \u82b1\uff08\u76f8\u4e92\u5339\u914d\uff09<!-- [et_pb_line_break_holder] -->            SYMBOLS.flower.forEach(s => list.push({symbol: s, cat: 'flower', group: 'flower'}));<!-- [et_pb_line_break_holder] -->            \/\/ \u5b63\u8282\uff08\u76f8\u4e92\u5339\u914d\uff09<!-- [et_pb_line_break_holder] -->            SYMBOLS.season.forEach(s => list.push({symbol: s, cat: 'season', group: 'season'}));<!-- [et_pb_line_break_holder] -->            return list;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6d17\u724c<!-- [et_pb_line_break_holder] -->        function shuffle(arr) {<!-- [et_pb_line_break_holder] -->            for (let i = arr.length - 1; i > 0; i--) {<!-- [et_pb_line_break_holder] -->                const j = Math.floor(Math.random() * (i + 1));<!-- [et_pb_line_break_holder] -->                [arr[i], arr[j]] = [arr[j], arr[i]];<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return arr;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u68c0\u67e5\u662f\u5426\u7a7a\u95f2<!-- [et_pb_line_break_holder] -->        function isFree(tile) {<!-- [et_pb_line_break_holder] -->            if (tile.matched) return false;<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched && t !== tile);<!-- [et_pb_line_break_holder] -->            \/\/ \u88ab\u4e0a\u9762\u963b\u6321\uff1f<!-- [et_pb_line_break_holder] -->            if (active.some(t => t.z > tile.z && Math.abs(t.x - tile.x) < 1 && Math.abs(t.y - tile.y) < 1)) return false;<!-- [et_pb_line_break_holder] -->            \/\/ \u4e24\u4fa7\u88ab\u963b\u6321\uff1f<!-- [et_pb_line_break_holder] -->            const left = active.some(t => t.z === tile.z && t.x === tile.x - 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            const right = active.some(t => t.z === tile.z && t.x === tile.x + 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            return !(left && right);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u67e5\u627e\u53ef\u80fd\u7684\u5339\u914d<!-- [et_pb_line_break_holder] -->        function findMatches() {<!-- [et_pb_line_break_holder] -->            const free = tiles.filter(t => !t.matched && isFree(t));<!-- [et_pb_line_break_holder] -->            const matches = [];<!-- [et_pb_line_break_holder] -->            for (let i = 0; i < free.length; i++) {<!-- [et_pb_line_break_holder] -->                for (let j = i + 1; j < free.length; j++) {<!-- [et_pb_line_break_holder] -->                    if (free[i].group === free[j].group) matches.push([free[i], free[j]]);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return matches;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u663e\u793a<!-- [et_pb_line_break_holder] -->        function render() {<!-- [et_pb_line_break_holder] -->            const board = document.getElementById('gameBoard');<!-- [et_pb_line_break_holder] -->            board.innerHTML = '';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const activeTiles = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            if (activeTiles.length === 0) {<!-- [et_pb_line_break_holder] -->                board.style.width = '200px';<!-- [et_pb_line_break_holder] -->                board.style.height = '100px';<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const maxX = Math.max(...activeTiles.map(t => t.x));<!-- [et_pb_line_break_holder] -->            const maxY = Math.max(...activeTiles.map(t => t.y));<!-- [et_pb_line_break_holder] -->            const maxZ = Math.max(...activeTiles.map(t => t.z));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            board.style.width = ((maxX + 1) * TILE_W + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] -->            board.style.height = ((maxY + 1) * TILE_H + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ \u6309 z, y, x \u6392\u5e8f<!-- [et_pb_line_break_holder] -->            const sorted = [...activeTiles].sort((a, b) => a.z - b.z || a.y - b.y || a.x - b.x);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            sorted.forEach(tile => {<!-- [et_pb_line_break_holder] -->                const div = document.createElement('div');<!-- [et_pb_line_break_holder] -->                div.className = 'tile ' + tile.cat;<!-- [et_pb_line_break_holder] -->                div.textContent = tile.symbol;<!-- [et_pb_line_break_holder] -->                div.style.left = (tile.x * TILE_W + tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.top = (tile.y * TILE_H - tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.zIndex = tile.z * 100 + tile.y * 10 + tile.x;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (!isFree(tile)) div.classList.add('blocked');<!-- [et_pb_line_break_holder] -->                if (tile === selected) div.classList.add('selected');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                div.onclick = () => clickTile(tile);<!-- [et_pb_line_break_holder] -->                board.appendChild(div);<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('remaining').textContent = activeTiles.length;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u70b9\u51fb\u74f7\u7816<!-- [et_pb_line_break_holder] -->        function clickTile(tile) {<!-- [et_pb_line_break_holder] -->            if (!isFree(tile)) {<!-- [et_pb_line_break_holder] -->                showMsg('\u74f7\u7816\u88ab\u963b\u6321\uff01', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile.hint').forEach(t => t.classList.remove('hint'));<!-- [et_pb_line_break_holder] -->            if (!selected) {<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            } else if (selected === tile) {<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] -->            } else if (selected.group === tile.group) {<!-- [et_pb_line_break_holder] -->                \/\/ \u5339\u914d\uff01<!-- [et_pb_line_break_holder] -->                selected.matched = true;<!-- [et_pb_line_break_holder] -->                tile.matched = true;<!-- [et_pb_line_break_holder] -->                score += 10;<!-- [et_pb_line_break_holder] -->                document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    render();<!-- [et_pb_line_break_holder] -->                    const remaining = tiles.filter(t => !t.matched).length;<!-- [et_pb_line_break_holder] -->                    if (remaining === 0) {<!-- [et_pb_line_break_holder] -->                        clearInterval(timer);<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalScore').textContent = score;<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalTime').textContent = document.getElementById('timer').textContent;<!-- [et_pb_line_break_holder] -->                        document.getElementById('winModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    } else if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                        document.getElementById('gameOverModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }, 100);<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            } else {<!-- [et_pb_line_break_holder] -->                showMsg('\u6ca1\u6709\u5339\u914d', 'error');<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u63d0\u793a<!-- [et_pb_line_break_holder] -->        function showHint() {<!-- [et_pb_line_break_holder] -->            const matches = findMatches();<!-- [et_pb_line_break_holder] -->            if (matches.length === 0) {<!-- [et_pb_line_break_holder] -->                showMsg('\u6ca1\u6709\u53ef\u7528\u7684\u79fb\u52a8\uff01', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 5);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            const [t1, t2] = matches[0];<!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile').forEach(div => {<!-- [et_pb_line_break_holder] -->                const left = parseInt(div.style.left);<!-- [et_pb_line_break_holder] -->                const top = parseInt(div.style.top);<!-- [et_pb_line_break_holder] -->                const z = parseInt(div.style.zIndex);<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                [t1, t2].forEach(tile => {<!-- [et_pb_line_break_holder] -->                    const tileLeft = tile.x * TILE_W + tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    const tileTop = tile.y * TILE_H - tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    if (Math.abs(left - tileLeft) < 5 && Math.abs(top - tileTop) < 5) {<!-- [et_pb_line_break_holder] -->                        div.classList.add('hint');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            showMsg('\u63d0\u793a\uff01 (-5 \u5206)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6d17\u724c<!-- [et_pb_line_break_holder] -->        function shuffleTiles() {<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            const positions = active.map(t => ({x: t.x, y: t.y, z: t.z}));<!-- [et_pb_line_break_holder] -->            shuffle(positions);<!-- [et_pb_line_break_holder] -->            active.forEach((t, i) => {<!-- [et_pb_line_break_holder] -->                t.x = positions[i].x;<!-- [et_pb_line_break_holder] -->                t.y = positions[i].y;<!-- [et_pb_line_break_holder] -->                t.z = positions[i].z;<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 20);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            showMsg('\u5df2\u6d17\u724c\uff01 (-20 \u5206)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u6d88\u606f<!-- [et_pb_line_break_holder] -->        function showMsg(text, type) {<!-- [et_pb_line_break_holder] -->            const msg = document.getElementById('message');<!-- [et_pb_line_break_holder] -->            msg.textContent = text;<!-- [et_pb_line_break_holder] -->            msg.className = 'message show ' + type;<!-- [et_pb_line_break_holder] -->            setTimeout(() => msg.classList.remove('show'), 2000);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u8ba1\u65f6\u5668<!-- [et_pb_line_break_holder] -->        function updateTimer() {<!-- [et_pb_line_break_holder] -->            const s = Math.floor((Date.now() - startTime) \/ 1000);<!-- [et_pb_line_break_holder] -->            const m = Math.floor(s \/ 60);<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = <!-- [et_pb_line_break_holder] -->                String(m).padStart(2, '0') + ':' + String(s % 60).padStart(2, '0');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u65b0\u6e38\u620f<!-- [et_pb_line_break_holder] -->        function newGame() {<!-- [et_pb_line_break_holder] -->            document.getElementById('winModal').classList.remove('active');<!-- [et_pb_line_break_holder] -->            document.getElementById('gameOverModal').classList.remove('active');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            clearInterval(timer);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const layout = createLayout();<!-- [et_pb_line_break_holder] -->            const tileData = shuffle(createTiles());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            tiles = layout.map((pos, i) => ({<!-- [et_pb_line_break_holder] -->                ...tileData[i],<!-- [et_pb_line_break_holder] -->                x: pos.x,<!-- [et_pb_line_break_holder] -->                y: pos.y,<!-- [et_pb_line_break_holder] -->                z: pos.z,<!-- [et_pb_line_break_holder] -->                matched: false<!-- [et_pb_line_break_holder] -->            }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            score = 0;<!-- [et_pb_line_break_holder] -->            startTime = Date.now();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = '0';<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = '00:00';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            timer = setInterval(updateTimer, 1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] --><!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"zh\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] -->    <meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] -->    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] -->    <title>\u9ebb\u5c06\u63a5\u9f99 | DYNSEO<\/title><!-- [et_pb_line_break_holder] -->    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700&display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] -->    <style><!-- [et_pb_line_break_holder] -->        * {<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        html, body {<!-- [et_pb_line_break_holder] -->            height: 100%;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        body {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            background: #ffffff;<!-- [et_pb_line_break_holder] -->            min-height: 100vh;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header {<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #a9e2e4 0%, #5e5ed7 100%);<!-- [et_pb_line_break_holder] -->            padding: 20px 25px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            overflow: hidden;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-header::before {<!-- [et_pb_line_break_holder] -->            content: \"\";<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            top: -50%;<!-- [et_pb_line_break_holder] -->            right: -20%;<!-- [et_pb_line_break_holder] -->            width: 400px;<!-- [et_pb_line_break_holder] -->            height: 400px;<!-- [et_pb_line_break_holder] -->            background: radial-gradient(circle, #ffeca7 0%, transparent 70%);<!-- [et_pb_line_break_holder] -->            opacity: 0.4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo {<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            gap: 10px;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .logo-icon {<!-- [et_pb_line_break_holder] -->            width: 40px;<!-- [et_pb_line_break_holder] -->            height: 40px;<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            border-radius: 12px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 1.5rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            z-index: 1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box {<!-- [et_pb_line_break_holder] -->            background: rgba(255, 255, 255, 0.9);<!-- [et_pb_line_break_holder] -->            border-radius: 15px;<!-- [et_pb_line_break_holder] -->            padding: 10px 20px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            min-width: 90px;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 4px 15px rgba(0,0,0,0.1);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) { border: 2px solid #ffeca7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) { border: 2px solid #a9e2e4; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) { border: 2px solid #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.7rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-transform: uppercase;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.4rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(1) .stat-value { color: #d4a000; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(2) .stat-value { color: #5e5ed7; }<!-- [et_pb_line_break_holder] -->        .stat-box:nth-child(3) .stat-value { color: #e73469; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-container {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #gameBoard {<!-- [et_pb_line_break_holder] -->            position: relative;<!-- [et_pb_line_break_holder] -->            margin: 20px auto;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(135deg, #f0feff 0%, #e5f9fa 100%);<!-- [et_pb_line_break_holder] -->            border-radius: 20px;<!-- [et_pb_line_break_holder] -->            padding: 30px;<!-- [et_pb_line_break_holder] -->            border: 2px solid #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile {<!-- [et_pb_line_break_holder] -->            position: absolute;<!-- [et_pb_line_break_holder] -->            width: 48px;<!-- [et_pb_line_break_holder] -->            height: 62px;<!-- [et_pb_line_break_holder] -->            background: linear-gradient(145deg, #ffffff, #f0f0f0);<!-- [et_pb_line_break_holder] -->            border-radius: 6px;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.85rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.15s, box-shadow 0.15s;<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 8px rgba(0,0,0,0.3);<!-- [et_pb_line_break_holder] -->            user-select: none;<!-- [et_pb_line_break_holder] -->            border: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            line-height: 1.1;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile:hover:not(.blocked) {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->            box-shadow: 3px 3px 0 #aaa, 5px 5px 15px rgba(0,0,0,0.4);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.selected {<!-- [et_pb_line_break_holder] -->            border: 3px solid #e73469;<!-- [et_pb_line_break_holder] -->            box-shadow: 0 0 20px #e73469;<!-- [et_pb_line_break_holder] -->            transform: translateY(-5px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.blocked {<!-- [et_pb_line_break_holder] -->            opacity: 0.5;<!-- [et_pb_line_break_holder] -->            cursor: not-allowed;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.hint {<!-- [et_pb_line_break_holder] -->            animation: pulse 0.5s infinite;<!-- [et_pb_line_break_holder] -->            border-color: #a9e2e4;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes pulse {<!-- [et_pb_line_break_holder] -->            0%, 100% { box-shadow: 0 0 10px #a9e2e4; }<!-- [et_pb_line_break_holder] -->            50% { box-shadow: 0 0 25px #a9e2e4; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .tile.bamboo { background: linear-gradient(145deg, #e8f5e9, #c8e6c9); color: #2e7d32; }<!-- [et_pb_line_break_holder] -->        .tile.circle { background: linear-gradient(145deg, #e3f2fd, #bbdefb); color: #1565c0; }<!-- [et_pb_line_break_holder] -->        .tile.character { background: linear-gradient(145deg, #fff3e0, #ffe0b2); color: #e65100; }<!-- [et_pb_line_break_holder] -->        .tile.wind { background: linear-gradient(145deg, #f3e5f5, #e1bee7); color: #7b1fa2; }<!-- [et_pb_line_break_holder] -->        .tile.dragon { background: linear-gradient(145deg, #ffebee, #ffcdd2); color: #c62828; }<!-- [et_pb_line_break_holder] -->        .tile.flower { background: linear-gradient(145deg, #fffde7, #fff9c4); color: #f57f17; }<!-- [et_pb_line_break_holder] -->        .tile.season { background: linear-gradient(145deg, #e0f7fa, #b2ebf2); color: #00838f; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-controls {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 15px;<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn {<!-- [et_pb_line_break_holder] -->            font-family: 'Montserrat', sans-serif;<!-- [et_pb_line_break_holder] -->            font-size: 1rem;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border: none;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            cursor: pointer;<!-- [et_pb_line_break_holder] -->            transition: transform 0.2s, box-shadow 0.2s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-primary {<!-- [et_pb_line_break_holder] -->            background: #ffeca7;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-secondary {<!-- [et_pb_line_break_holder] -->            background: #a9e2e4;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-danger {<!-- [et_pb_line_break_holder] -->            background: #e73469;<!-- [et_pb_line_break_holder] -->            color: white;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn:hover {<!-- [et_pb_line_break_holder] -->            transform: translateY(-3px);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info {<!-- [et_pb_line_break_holder] -->            margin-top: 20px;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            font-size: 0.9rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .game-info a {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            bottom: 30px;<!-- [et_pb_line_break_holder] -->            left: 50%;<!-- [et_pb_line_break_holder] -->            transform: translateX(-50%) translateY(100px);<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            padding: 15px 30px;<!-- [et_pb_line_break_holder] -->            border-radius: 50px;<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            color: #1a1a3e;<!-- [et_pb_line_break_holder] -->            transition: transform 0.3s;<!-- [et_pb_line_break_holder] -->            z-index: 100;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .message.show { transform: translateX(-50%) translateY(0); }<!-- [et_pb_line_break_holder] -->        .message.error { background: #e73469; color: white; }<!-- [et_pb_line_break_holder] -->        .message.success { background: #a9e2e4; color: #1a1a3e; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay {<!-- [et_pb_line_break_holder] -->            position: fixed;<!-- [et_pb_line_break_holder] -->            top: 0; left: 0; right: 0; bottom: 0;<!-- [et_pb_line_break_holder] -->            background: rgba(26, 26, 62, 0.9);<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            z-index: 1000;<!-- [et_pb_line_break_holder] -->            opacity: 0;<!-- [et_pb_line_break_holder] -->            visibility: hidden;<!-- [et_pb_line_break_holder] -->            transition: all 0.3s;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-overlay.active {<!-- [et_pb_line_break_holder] -->            opacity: 1;<!-- [et_pb_line_break_holder] -->            visibility: visible;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal {<!-- [et_pb_line_break_holder] -->            background: white;<!-- [et_pb_line_break_holder] -->            border-radius: 25px;<!-- [et_pb_line_break_holder] -->            padding: 40px;<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->            max-width: 400px;<!-- [et_pb_line_break_holder] -->            width: 90%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal h2 {<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal p {<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-icon {<!-- [et_pb_line_break_holder] -->            font-size: 3.5rem;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stats {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            gap: 30px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 25px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-value {<!-- [et_pb_line_break_holder] -->            font-size: 1.8rem;<!-- [et_pb_line_break_holder] -->            font-weight: 700;<!-- [et_pb_line_break_holder] -->            color: #5e5ed7;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .modal-stat-label {<!-- [et_pb_line_break_holder] -->            font-size: 0.8rem;<!-- [et_pb_line_break_holder] -->            color: #64748b;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 800px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.7); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @media (max-width: 500px) {<!-- [et_pb_line_break_holder] -->            #gameBoard { transform: scale(0.5); transform-origin: top center; }<!-- [et_pb_line_break_holder] -->            .game-header { justify-content: center; }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] -->    <header class=\"game-header\"><!-- [et_pb_line_break_holder] -->\n<div class=\"logo\"><!-- [et_pb_line_break_holder] -->            <div class=\"logo-icon\">\ud83c\udc04<\/div><!-- [et_pb_line_break_holder] -->            <span>DYNSEO \u9ebb\u5c06<\/span><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->        <div class=\"game-stats\"><!-- [et_pb_line_break_holder] -->            <div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <div class=\"stat-label\">\u5f97\u5206<\/div><!-- [et_pb_line_break_holder] -->                <div class=\"stat-value\" id=\"score\">0<\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->            <div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <div class=\"stat-label\">\u65f6\u95f4<\/div><!-- [et_pb_line_break_holder] -->                <div class=\"stat-value\" id=\"timer\">00:00<\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->            <div class=\"stat-box\"><!-- [et_pb_line_break_holder] -->                <div class=\"stat-label\">\u724c<\/div><!-- [et_pb_line_break_holder] -->                <div class=\"stat-value\" id=\"remaining\">144<\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/header><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <main class=\"game-container\"><!-- [et_pb_line_break_holder] -->        <div id=\"gameBoard\"><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <div class=\"game-controls\"><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-secondary\" onclick=\"showHint()\">\ud83d\udca1 \u63d0\u793a<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-danger\" onclick=\"shuffleTiles()\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <div class=\"game-info\"><!-- [et_pb_line_break_holder] -->            <p>\u7528 DYNSEO \u8bad\u7ec3\u4f60\u7684\u5927\u8111 \ud83e\udde0<\/p><!-- [et_pb_line_break_holder] -->            <p><a href=\"https:\/\/www.dynseo.com\" target=\"_blank\">\u53d1\u73b0\u6211\u4eec\u7684\u5e94\u7528\u7a0b\u5e8f \u2192<\/a><\/p><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"modal-overlay\" id=\"winModal\"><!-- [et_pb_line_break_holder] -->        <div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <div class=\"modal-icon\">\ud83c\udf89<\/div><!-- [et_pb_line_break_holder] -->            <h2>\u606d\u559c\uff01<\/h2><!-- [et_pb_line_break_holder] -->            <p>\u4f60\u5b8c\u6210\u4e86\u62fc\u56fe\uff01<\/p><!-- [et_pb_line_break_holder] -->            <div class=\"modal-stats\"><!-- [et_pb_line_break_holder] -->                <div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-value\" id=\"finalScore\">0<\/div><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-label\">\u79ef\u5206<\/div><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] -->                <div class=\"modal-stat\"><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-value\" id=\"finalTime\">00:00<\/div><!-- [et_pb_line_break_holder] -->                    <div class=\"modal-stat-label\">\u65f6\u95f4<\/div><!-- [et_pb_line_break_holder] -->                <\/div><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->            <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u518d\u6765\u4e00\u5c40<\/button><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <div class=\"modal-overlay\" id=\"gameOverModal\"><!-- [et_pb_line_break_holder] -->        <div class=\"modal\"><!-- [et_pb_line_break_holder] -->            <div class=\"modal-icon\">\ud83e\udd14<\/div><!-- [et_pb_line_break_holder] -->            <h2>\u6ca1\u6709\u66f4\u591a\u7684\u52a8\u4f5c\uff01<\/h2><!-- [et_pb_line_break_holder] -->            <p>\u6d17\u724c\u6216\u91cd\u65b0\u5f00\u59cb\u3002<\/p><!-- [et_pb_line_break_holder] -->            <div style=\"display: flex; gap: 15px; justify-content: center; flex-wrap: wrap;\"><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-secondary\" onclick=\"shuffleTiles(); document.getElementById('gameOverModal').classList.remove('active')\">\ud83d\udd00 \u6d17\u724c<\/button><!-- [et_pb_line_break_holder] -->                <button class=\"btn btn-primary\" onclick=\"newGame()\">\ud83d\udd04 \u65b0\u6e38\u620f<\/button><!-- [et_pb_line_break_holder] -->            <\/div><!-- [et_pb_line_break_holder] -->        <\/div><!-- [et_pb_line_break_holder] -->    <\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\n<div class=\"message\" id=\"message\"><\/div><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        \/\/ Configuration<!-- [et_pb_line_break_holder] -->        const TILE_W = 48;<!-- [et_pb_line_break_holder] -->        const TILE_H = 62;<!-- [et_pb_line_break_holder] -->        const LAYER_OFFSET = 4;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Symboles des tuiles<!-- [et_pb_line_break_holder] -->        const SYMBOLS = {<!-- [et_pb_line_break_holder] -->            bamboo: ['B1','B2','B3','B4','B5','B6','B7','B8','B9'],<!-- [et_pb_line_break_holder] -->            circle: ['C1','C2','C3','C4','C5','C6','C7','C8','C9'],<!-- [et_pb_line_break_holder] -->            character: ['M1','M2','M3','M4','M5','M6','M7','M8','M9'],<!-- [et_pb_line_break_holder] -->            wind: ['\u6771','\u5357','\u897f','\u5317'],<!-- [et_pb_line_break_holder] -->            dragon: ['\u4e2d','\u767c','\u767d'],<!-- [et_pb_line_break_holder] -->            flower: ['\ud83c\udf38','\ud83c\udf3a','\ud83c\udf3c','\ud83c\udf3b'],<!-- [et_pb_line_break_holder] -->            season: ['\ud83c\udf37','\u2600\ufe0f','\ud83c\udf42','\u2744\ufe0f']<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ \u00c9tat du jeu<!-- [et_pb_line_break_holder] -->        let tiles = [];<!-- [et_pb_line_break_holder] -->        let selected = null;<!-- [et_pb_line_break_holder] -->        let score = 0;<!-- [et_pb_line_break_holder] -->        let timer = null;<!-- [et_pb_line_break_holder] -->        let startTime = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Cr\u00e9er le layout<!-- [et_pb_line_break_holder] -->        function createLayout() {<!-- [et_pb_line_break_holder] -->            const pos = [];<!-- [et_pb_line_break_holder] -->            \/\/ Layer 0: 12x6 = 72<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 6; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 12; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x, y, z: 0});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 1: 10x4 = 40<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 4; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 10; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+1, y: y+1, z: 1});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 2: 8x2 = 16<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 8; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+2, y: y+2, z: 2});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 3: 6x2 = 12<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 6; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+3, y: y+2, z: 3});<!-- [et_pb_line_break_holder] -->            \/\/ Layer 4: 2x2 = 4<!-- [et_pb_line_break_holder] -->            for (let y = 0; y < 2; y++)<!-- [et_pb_line_break_holder] -->                for (let x = 0; x < 2; x++)<!-- [et_pb_line_break_holder] -->                    pos.push({x: x+5, y: y+2, z: 4});<!-- [et_pb_line_break_holder] -->            return pos; \/\/ 144 total<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Cr\u00e9er les tuiles<!-- [et_pb_line_break_holder] -->        function createTiles() {<!-- [et_pb_line_break_holder] -->            const list = [];<!-- [et_pb_line_break_holder] -->            \/\/ 4 de chaque pour bamboo, circle, character<!-- [et_pb_line_break_holder] -->            ['bamboo','circle','character'].forEach(cat => {<!-- [et_pb_line_break_holder] -->                SYMBOLS[cat].forEach(s => {<!-- [et_pb_line_break_holder] -->                    for (let i = 0; i < 4; i++) list.push({symbol: s, cat, group: s});<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ 4 de chaque vent<!-- [et_pb_line_break_holder] -->            SYMBOLS.wind.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'wind', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ 4 de chaque dragon<!-- [et_pb_line_break_holder] -->            SYMBOLS.dragon.forEach(s => {<!-- [et_pb_line_break_holder] -->                for (let i = 0; i < 4; i++) list.push({symbol: s, cat: 'dragon', group: s});<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            \/\/ Fleurs (matchent entre elles)<!-- [et_pb_line_break_holder] -->            SYMBOLS.flower.forEach(s => list.push({symbol: s, cat: 'flower', group: 'flower'}));<!-- [et_pb_line_break_holder] -->            \/\/ Saisons (matchent entre elles)<!-- [et_pb_line_break_holder] -->            SYMBOLS.season.forEach(s => list.push({symbol: s, cat: 'season', group: 'season'}));<!-- [et_pb_line_break_holder] -->            return list;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ M\u00e9langer<!-- [et_pb_line_break_holder] -->        function shuffle(arr) {<!-- [et_pb_line_break_holder] -->            for (let i = arr.length - 1; i > 0; i--) {<!-- [et_pb_line_break_holder] -->                const j = Math.floor(Math.random() * (i + 1));<!-- [et_pb_line_break_holder] -->                [arr[i], arr[j]] = [arr[j], arr[i]];<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return arr;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ V\u00e9rifier si libre<!-- [et_pb_line_break_holder] -->        function isFree(tile) {<!-- [et_pb_line_break_holder] -->            if (tile.matched) return false;<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched && t !== tile);<!-- [et_pb_line_break_holder] -->            \/\/ Bloqu\u00e9 par dessus ?<!-- [et_pb_line_break_holder] -->            if (active.some(t => t.z > tile.z && Math.abs(t.x - tile.x) < 1 && Math.abs(t.y - tile.y) < 1)) return false;<!-- [et_pb_line_break_holder] -->            \/\/ Bloqu\u00e9 des deux c\u00f4t\u00e9s ?<!-- [et_pb_line_break_holder] -->            const left = active.some(t => t.z === tile.z && t.x === tile.x - 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            const right = active.some(t => t.z === tile.z && t.x === tile.x + 1 && Math.abs(t.y - tile.y) < 1);<!-- [et_pb_line_break_holder] -->            return !(left && right);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Trouver les matchs possibles<!-- [et_pb_line_break_holder] -->        function findMatches() {<!-- [et_pb_line_break_holder] -->            const free = tiles.filter(t => !t.matched && isFree(t));<!-- [et_pb_line_break_holder] -->            const matches = [];<!-- [et_pb_line_break_holder] -->            for (let i = 0; i < free.length; i++) {<!-- [et_pb_line_break_holder] -->                for (let j = i + 1; j < free.length; j++) {<!-- [et_pb_line_break_holder] -->                    if (free[i].group === free[j].group) matches.push([free[i], free[j]]);<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            return matches;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Afficher<!-- [et_pb_line_break_holder] -->        function render() {<!-- [et_pb_line_break_holder] -->            const board = document.getElementById('gameBoard');<!-- [et_pb_line_break_holder] -->            board.innerHTML = '';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const activeTiles = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            if (activeTiles.length === 0) {<!-- [et_pb_line_break_holder] -->                board.style.width = '200px';<!-- [et_pb_line_break_holder] -->                board.style.height = '100px';<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const maxX = Math.max(...activeTiles.map(t => t.x));<!-- [et_pb_line_break_holder] -->            const maxY = Math.max(...activeTiles.map(t => t.y));<!-- [et_pb_line_break_holder] -->            const maxZ = Math.max(...activeTiles.map(t => t.z));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            board.style.width = ((maxX + 1) * TILE_W + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] -->            board.style.height = ((maxY + 1) * TILE_H + maxZ * LAYER_OFFSET + 60) + 'px';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Trier par z, y, x<!-- [et_pb_line_break_holder] -->            const sorted = [...activeTiles].sort((a, b) => a.z - b.z || a.y - b.y || a.x - b.x);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            sorted.forEach(tile => {<!-- [et_pb_line_break_holder] -->                const div = document.createElement('div');<!-- [et_pb_line_break_holder] -->                div.className = 'tile ' + tile.cat;<!-- [et_pb_line_break_holder] -->                div.textContent = tile.symbol;<!-- [et_pb_line_break_holder] -->                div.style.left = (tile.x * TILE_W + tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.top = (tile.y * TILE_H - tile.z * LAYER_OFFSET + 15) + 'px';<!-- [et_pb_line_break_holder] -->                div.style.zIndex = tile.z * 100 + tile.y * 10 + tile.x;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                if (!isFree(tile)) div.classList.add('blocked');<!-- [et_pb_line_break_holder] -->                if (tile === selected) div.classList.add('selected');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                div.onclick = () => clickTile(tile);<!-- [et_pb_line_break_holder] -->                board.appendChild(div);<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('remaining').textContent = activeTiles.length;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Clic sur tuile<!-- [et_pb_line_break_holder] -->        function clickTile(tile) {<!-- [et_pb_line_break_holder] -->            if (!isFree(tile)) {<!-- [et_pb_line_break_holder] -->                showMsg('Tuile bloqu\u00e9e !', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile.hint').forEach(t => t.classList.remove('hint'));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            if (!selected) {<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            } else if (selected === tile) {<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] -->            } else if (selected.group === tile.group) {<!-- [et_pb_line_break_holder] -->                \/\/ Match !<!-- [et_pb_line_break_holder] -->                selected.matched = true;<!-- [et_pb_line_break_holder] -->                tile.matched = true;<!-- [et_pb_line_break_holder] -->                score += 10;<!-- [et_pb_line_break_holder] -->                document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->                selected = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                setTimeout(() => {<!-- [et_pb_line_break_holder] -->                    render();<!-- [et_pb_line_break_holder] -->                    const remaining = tiles.filter(t => !t.matched).length;<!-- [et_pb_line_break_holder] -->                    if (remaining === 0) {<!-- [et_pb_line_break_holder] -->                        clearInterval(timer);<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalScore').textContent = score;<!-- [et_pb_line_break_holder] -->                        document.getElementById('finalTime').textContent = document.getElementById('timer').textContent;<!-- [et_pb_line_break_holder] -->                        document.getElementById('winModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    } else if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                        document.getElementById('gameOverModal').classList.add('active');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }, 100);<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            } else {<!-- [et_pb_line_break_holder] -->                showMsg('Pas de correspondance', 'error');<!-- [et_pb_line_break_holder] -->                selected = tile;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Indice<!-- [et_pb_line_break_holder] -->        function showHint() {<!-- [et_pb_line_break_holder] -->            const matches = findMatches();<!-- [et_pb_line_break_holder] -->            if (matches.length === 0) {<!-- [et_pb_line_break_holder] -->                showMsg('Aucun coup possible !', 'error');<!-- [et_pb_line_break_holder] -->                return;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 5);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            const [t1, t2] = matches[0];<!-- [et_pb_line_break_holder] -->            document.querySelectorAll('.tile').forEach(div => {<!-- [et_pb_line_break_holder] -->                const left = parseInt(div.style.left);<!-- [et_pb_line_break_holder] -->                const top = parseInt(div.style.top);<!-- [et_pb_line_break_holder] -->                const z = parseInt(div.style.zIndex);<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                [t1, t2].forEach(tile => {<!-- [et_pb_line_break_holder] -->                    const tileLeft = tile.x * TILE_W + tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    const tileTop = tile.y * TILE_H - tile.z * LAYER_OFFSET + 15;<!-- [et_pb_line_break_holder] -->                    if (Math.abs(left - tileLeft) < 5 && Math.abs(top - tileTop) < 5) {<!-- [et_pb_line_break_holder] -->                        div.classList.add('hint');<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            showMsg('Indice ! (-5 pts)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ M\u00e9langer<!-- [et_pb_line_break_holder] -->        function shuffleTiles() {<!-- [et_pb_line_break_holder] -->            const active = tiles.filter(t => !t.matched);<!-- [et_pb_line_break_holder] -->            const positions = active.map(t => ({x: t.x, y: t.y, z: t.z}));<!-- [et_pb_line_break_holder] -->            shuffle(positions);<!-- [et_pb_line_break_holder] -->            active.forEach((t, i) => {<!-- [et_pb_line_break_holder] -->                t.x = positions[i].x;<!-- [et_pb_line_break_holder] -->                t.y = positions[i].y;<!-- [et_pb_line_break_holder] -->                t.z = positions[i].z;<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->            score = Math.max(0, score - 20);<!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = score;<!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] -->            showMsg('M\u00e9lang\u00e9 ! (-20 pts)', 'success');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Message<!-- [et_pb_line_break_holder] -->        function showMsg(text, type) {<!-- [et_pb_line_break_holder] -->            const msg = document.getElementById('message');<!-- [et_pb_line_break_holder] -->            msg.textContent = text;<!-- [et_pb_line_break_holder] -->            msg.className = 'message show ' + type;<!-- [et_pb_line_break_holder] -->            setTimeout(() => msg.classList.remove('show'), 2000);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Timer<!-- [et_pb_line_break_holder] -->        function updateTimer() {<!-- [et_pb_line_break_holder] -->            const s = Math.floor((Date.now() - startTime) \/ 1000);<!-- [et_pb_line_break_holder] -->            const m = Math.floor(s \/ 60);<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = <!-- [et_pb_line_break_holder] -->                String(m).padStart(2, '0') + ':' + String(s % 60).padStart(2, '0');<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Nouvelle partie<!-- [et_pb_line_break_holder] -->        function newGame() {<!-- [et_pb_line_break_holder] -->            document.getElementById('winModal').classList.remove('active');<!-- [et_pb_line_break_holder] -->            document.getElementById('gameOverModal').classList.remove('active');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            clearInterval(timer);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            const layout = createLayout();<!-- [et_pb_line_break_holder] -->            const tileData = shuffle(createTiles());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            tiles = layout.map((pos, i) => ({<!-- [et_pb_line_break_holder] -->                ...tileData[i],<!-- [et_pb_line_break_holder] -->                x: pos.x,<!-- [et_pb_line_break_holder] -->                y: pos.y,<!-- [et_pb_line_break_holder] -->                z: pos.z,<!-- [et_pb_line_break_holder] -->                matched: false<!-- [et_pb_line_break_holder] -->            }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            selected = null;<!-- [et_pb_line_break_holder] -->            score = 0;<!-- [et_pb_line_break_holder] -->            startTime = Date.now();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            document.getElementById('score').textContent = '0';<!-- [et_pb_line_break_holder] -->            document.getElementById('timer').textContent = '00:00';<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            timer = setInterval(updateTimer, 1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            render();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ V\u00e9rifier si jouable<!-- [et_pb_line_break_holder] -->            setTimeout(() => {<!-- [et_pb_line_break_holder] -->                if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                    showMsg('M\u00e9lange auto...', 'success');<!-- [et_pb_line_break_holder] -->                    shuffleTiles();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }, 200);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ D\u00e9marrer<!-- [et_pb_line_break_holder] -->        newGame();<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html><!-- [et_pb_line_break_holder] -->            \/\/ V\u00e9rifier si jouable<!-- [et_pb_line_break_holder] -->            setTimeout(() => {<!-- [et_pb_line_break_holder] -->                if (findMatches().length === 0) {<!-- [et_pb_line_break_holder] -->                    showMsg('M\u00e9lange auto...', 'success');<!-- [et_pb_line_break_holder] -->                    shuffleTiles();<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }, 200);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ D\u00e9marrer<!-- [et_pb_line_break_holder] -->        newGame();<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]\n\n[et_pb_code]<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Qu'est-ce que le Mahjong Solitaire de DYNSEO ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le Mahjong Solitaire de DYNSEO est un jeu de puzzle en ligne qui permet d'entra\u00eener votre cerveau. Il utilise 144 tuiles traditionnelles du Mahjong et propose un syst\u00e8me de score avec chronom\u00e8tre pour mesurer vos performances.\"}},{\"@type\":\"Question\",\"name\":\"Combien de tuiles sont utilis\u00e9es dans ce jeu de Mahjong ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le jeu utilise 144 tuiles, ce qui correspond au nombre standard de tuiles dans un set complet de Mahjong traditionnel.\"}},{\"@type\":\"Question\",\"name\":\"Quelles fonctionnalit\u00e9s d'aide sont disponibles pendant le jeu ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le jeu propose plusieurs aides : un bouton 'Indice' (\ud83d\udca1) pour obtenir des conseils, un bouton 'M\u00e9langer' (\ud83d\udd00) pour redistribuer les tuiles, et la possibilit\u00e9 de d\u00e9marrer une 'Nouvelle partie' (\ud83d\udd04) \u00e0 tout moment.\"}},{\"@type\":\"Question\",\"name\":\"Comment le jeu mesure-t-il les performances du joueur ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le jeu mesure vos performances avec un syst\u00e8me de score (affich\u00e9 en points) et un chronom\u00e8tre qui enregistre le temps n\u00e9cessaire pour terminer la partie (format 00:00).\"}},{\"@type\":\"Question\",\"name\":\"Que se passe-t-il quand il n'y a plus de coups possibles ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Quand il n'y a plus de coups possibles, le jeu affiche le message '\ud83e\udd14 Plus de coups ! M\u00e9langez les tuiles ou recommencez.' Vous pouvez alors choisir de m\u00e9langer les tuiles ou de commencer une nouvelle partie.\"}},{\"@type\":\"Question\",\"name\":\"Quel est l'objectif principal de ce jeu de Mahjong ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"L'objectif principal est d'entra\u00eener votre cerveau tout en vous divertissant. Le jeu fait partie des applications DYNSEO d\u00e9di\u00e9es \u00e0 la stimulation cognitive et \u00e0 l'exercice mental.\"}}]}<\/script>[\/et_pb_code]","_et_gb_content_width":"","footnotes":""},"class_list":["post-515555","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u9ebb\u5c06\u6e38\u620f - DYNSEO - \u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528<\/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:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u9ebb\u5c06\u6e38\u620f - DYNSEO - \u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/\" \/>\n<meta property=\"og:site_name\" content=\"\u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-12T09:32:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dynseo.com\/wp-content\/uploads\/2024\/07\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:label1\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/\",\"name\":\"\u9ebb\u5c06\u6e38\u620f - DYNSEO - \u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dynseo.com\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png\",\"datePublished\":\"2026-03-12T09:29:04+00:00\",\"dateModified\":\"2026-03-12T09:32:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png\",\"contentUrl\":\"https:\\\/\\\/www.dynseo.com\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png\",\"width\":2000,\"height\":1500,\"caption\":\"\u901a\u8fc7\u6211\u4eec\u6709\u8da3\u800c\u6709\u76ca\u7684\u6d3b\u52a8\u4fdd\u6301\u601d\u7ef4\u654f\u6377\u6027\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/majiang-youxi-dynseo\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u9ebb\u5c06\u6e38\u620f &#8211; DYNSEO\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/#website\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/\",\"name\":\"Jeux de m\u00e9moire et stimulation cognitive\",\"description\":\"Entra\u00eenez votre m\u00e9moire et votre cerveau avec DYNSEO\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/#organization\",\"name\":\"DYNSEO\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/logo-dynseo-new.png\",\"contentUrl\":\"https:\\\/\\\/www.dynseo.com\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/logo-dynseo-new.png\",\"width\":5073,\"height\":1397,\"caption\":\"DYNSEO\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/zh-hans\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u9ebb\u5c06\u6e38\u620f - DYNSEO - \u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/","og_locale":"zh_CN","og_type":"article","og_title":"\u9ebb\u5c06\u6e38\u620f - DYNSEO - \u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528","og_url":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/","og_site_name":"\u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528","article_modified_time":"2026-03-12T09:32:37+00:00","og_image":[{"width":2000,"height":1500,"url":"https:\/\/www.dynseo.com\/wp-content\/uploads\/2024\/07\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png","type":"image\/png"}],"twitter_misc":{"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/","url":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/","name":"\u9ebb\u5c06\u6e38\u620f - DYNSEO - \u6559\u80b2\u8f6f\u4ef6\u3001\u8bb0\u5fc6\u6e38\u620f\u548c\u5927\u8111\u8bad\u7ec3\u5e94\u7528","isPartOf":{"@id":"https:\/\/www.dynseo.com\/zh-hans\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/#primaryimage"},"image":{"@id":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dynseo.com\/wp-content\/uploads\/2024\/07\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png","datePublished":"2026-03-12T09:29:04+00:00","dateModified":"2026-03-12T09:32:37+00:00","breadcrumb":{"@id":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/"]}]},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/#primaryimage","url":"https:\/\/www.dynseo.com\/wp-content\/uploads\/2024\/07\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png","contentUrl":"https:\/\/www.dynseo.com\/wp-content\/uploads\/2024\/07\/Article-pour-jeux-de-memoire-et-services-educatifs-sur-tablette-1.png","width":2000,"height":1500,"caption":"\u901a\u8fc7\u6211\u4eec\u6709\u8da3\u800c\u6709\u76ca\u7684\u6d3b\u52a8\u4fdd\u6301\u601d\u7ef4\u654f\u6377\u6027"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dynseo.com\/zh-hans\/majiang-youxi-dynseo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dynseo.com\/zh-hans\/"},{"@type":"ListItem","position":2,"name":"\u9ebb\u5c06\u6e38\u620f &#8211; DYNSEO"}]},{"@type":"WebSite","@id":"https:\/\/www.dynseo.com\/zh-hans\/#website","url":"https:\/\/www.dynseo.com\/zh-hans\/","name":"Jeux de m\u00e9moire et stimulation cognitive","description":"Entra\u00eenez votre m\u00e9moire et votre cerveau avec DYNSEO","publisher":{"@id":"https:\/\/www.dynseo.com\/zh-hans\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dynseo.com\/zh-hans\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":"Organization","@id":"https:\/\/www.dynseo.com\/zh-hans\/#organization","name":"DYNSEO","url":"https:\/\/www.dynseo.com\/zh-hans\/","logo":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.dynseo.com\/zh-hans\/#\/schema\/logo\/image\/","url":"https:\/\/www.dynseo.com\/wp-content\/uploads\/2022\/05\/logo-dynseo-new.png","contentUrl":"https:\/\/www.dynseo.com\/wp-content\/uploads\/2022\/05\/logo-dynseo-new.png","width":5073,"height":1397,"caption":"DYNSEO"},"image":{"@id":"https:\/\/www.dynseo.com\/zh-hans\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/pages\/515555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=515555"}],"version-history":[{"count":5,"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/pages\/515555\/revisions"}],"predecessor-version":[{"id":515581,"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/pages\/515555\/revisions\/515581"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/media\/130227"}],"wp:attachment":[{"href":"https:\/\/www.dynseo.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=515555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}