{"id":4696,"date":"2026-09-09T11:46:22","date_gmt":"2026-09-09T09:46:22","guid":{"rendered":"https:\/\/caponord-sports-orientation.fr\/?page_id=4696"},"modified":"2026-09-10T11:50:38","modified_gmt":"2026-09-10T09:50:38","slug":"memory-des-symboles","status":"publish","type":"page","link":"https:\/\/caponord-sports-orientation.fr\/index.php\/memory-des-symboles\/","title":{"rendered":"Memory des symboles"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"4696\" class=\"elementor elementor-4696\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e5d2238 e-flex e-con-boxed wpr-particle-no wpr-jarallax-no wpr-parallax-no wpr-sticky-section-no wpr-column-slider-no wpr-equal-height-no e-con e-parent\" data-id=\"e5d2238\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b5e96db elementor-widget elementor-widget-html\" data-id=\"b5e96db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Memory des symboles \u2014 Jeu CO<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Oswald:wght@400;500;600;700&family=Karla:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n<style>\n  :root{\n    --paper: #F6F3E7;\n    --paper-line: #E3DCC4;\n    --ink: #23301F;\n    --ink-soft: #56604F;\n    --forest: #2F4B3C;\n    --forest-dark: #1D3226;\n    --magenta: #B8005E;\n    --magenta-dark: #8C0048;\n    --brown: #8B5E34;\n    --blue: #1C6FA8;\n    --gold: #C99A2E;\n    --card: #FFFDF6;\n    --error: #A93226;\n  }\n  *{box-sizing:border-box;}\n  html,body{margin:0;padding:0;}\n  body{\n    background:\n      radial-gradient(ellipse at 50% -10%, rgba(139,94,52,0.10), transparent 55%),\n      repeating-linear-gradient(0deg, transparent, transparent 27px, rgba(139,94,52,0.07) 27px, rgba(139,94,52,0.07) 28px),\n      var(--paper);\n    color:var(--ink);\n    font-family:'Karla',sans-serif;\n    min-height:100vh;\n    display:flex; align-items:flex-start; justify-content:center;\n    padding:32px 16px 60px;\n    -webkit-tap-highlight-color:transparent;\n  }\n  .wrap{ width:100%; max-width:600px; }\n\n  .masthead{ display:flex; align-items:center; gap:16px; margin-bottom:18px; }\n  .masthead .compass-badge{\n    flex:0 0 auto; width:52px; height:52px; border-radius:50%;\n    background:var(--card); border:2px solid var(--forest-dark);\n    display:flex; align-items:center; justify-content:center;\n    box-shadow:0 3px 0 var(--forest-dark);\n  }\n  .masthead h1{\n    font-family:'Oswald',sans-serif; font-weight:700;\n    font-size:clamp(24px,5.5vw,34px); letter-spacing:0.3px;\n    color:var(--forest-dark); margin:0; line-height:1.05;\n  }\n  .masthead p{ margin:5px 0 0; color:var(--ink-soft); font-size:14px; }\n  .title-rule{ height:3px; width:64px; background:var(--magenta); margin:10px 0 20px; }\n\n  .sheet{\n    position:relative; background:var(--card); border:2px solid var(--forest-dark);\n    padding:26px 24px 24px;\n    box-shadow:7px 7px 0 rgba(29,50,38,0.10), 0 18px 34px rgba(29,50,38,0.10);\n  }\n  .sheet::before, .sheet::after{ content:\"\"; position:absolute; width:14px;height:14px; border:2px solid var(--magenta); }\n  .sheet::before{ top:-2px; left:-2px; border-right:none; border-bottom:none; }\n  .sheet::after{ bottom:-2px; right:-2px; border-left:none; border-top:none; }\n\n  .grid-ref{ position:absolute; font-family:'Oswald',sans-serif; font-size:11px; letter-spacing:1px; color:var(--brown); opacity:0.75; }\n  .grid-ref.top-right{ top:6px; right:14px; }\n  .grid-ref.bottom-left{ bottom:6px; left:14px; }\n\n  .stats-row{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:14px; }\n  .stat-tile{\n    background:#FCFAF2; border:1.5px solid var(--paper-line);\n    padding:8px 6px; text-align:center;\n  }\n  .stat-tile svg{ width:16px; height:16px; display:block; margin:0 auto 4px; opacity:0.75; }\n  .stat-tile .label{ font-family:'Oswald',sans-serif; font-size:10px; letter-spacing:0.8px; color:var(--ink-soft); }\n  .stat-tile .val{ font-family:'Oswald',sans-serif; font-size:16px; font-weight:700; color:var(--forest-dark); margin-top:1px; }\n  .best-line{ text-align:center; font-size:12.5px; color:var(--ink-soft); margin:0 0 16px; }\n\n  .board{\n    display:grid; grid-template-columns:repeat(4, 1fr); gap:10px;\n    perspective:800px;\n  }\n  .card{\n    aspect-ratio:3\/4; cursor:pointer;\n    opacity:0; transform:translateY(6px) scale(0.94);\n    animation:cardIn .35s ease forwards;\n  }\n  .card-inner{\n    position:relative; width:100%; height:100%;\n    transform-style:preserve-3d; transition:transform .5s cubic-bezier(.2,.7,.3,1);\n  }\n  .card:hover:not(.flipped):not(.matched) .card-inner{ transform:translateY(-2px); }\n  .card.flipped .card-inner{ transform:rotateY(180deg); }\n  .card.flipped:hover .card-inner{ transform:rotateY(180deg); }\n  .card.shake .card-inner{ animation:shake .45s ease; }\n  .card-face{\n    position:absolute; inset:0; backface-visibility:hidden;\n    display:flex; align-items:center; justify-content:center;\n    border:1.5px solid var(--forest-dark);\n    box-shadow:2px 2px 0 rgba(29,50,38,0.08);\n  }\n  .card-front{\n    background:\n      repeating-linear-gradient(45deg, #E9E2CB, #E9E2CB 6px, #DFD6BA 6px, #DFD6BA 12px);\n    border-color:var(--forest-dark);\n  }\n  .card-front .badge{\n    position:absolute; bottom:5px; left:50%; transform:translateX(-50%);\n    font-family:'Oswald',sans-serif; font-size:7.5px; letter-spacing:1px; font-weight:600;\n    padding:1px 6px; border-radius:8px; color:#fff; white-space:nowrap;\n  }\n  .card-front .mascot{\n    position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);\n    width:60%; height:60%; border-radius:50%;\n    border:2px solid #fff; box-shadow:0 0 0 1.5px rgba(29,50,38,0.5), 2px 2px 6px rgba(29,50,38,0.15);\n    overflow:hidden;\n  }\n  .card-front .mascot img{ width:100%; height:100%; object-fit:cover; display:block; }\n  .card-front.type-icon{ border-color:var(--magenta); }\n  .card-front.type-icon .badge{ background:var(--magenta); }\n  .card-front.type-name{\n    border-color:var(--forest);\n    background:\n      repeating-linear-gradient(45deg, #E3EAE0, #E3EAE0 6px, #D7E0D2 6px, #D7E0D2 12px);\n  }\n  .card-front.type-name .badge{ background:var(--forest); }\n  .card-front svg{ width:32%; height:32%; opacity:0.85; }\n  .card-face.card-back{\n    transform:rotateY(180deg);\n    flex-direction:column; gap:4px; padding:6px; text-align:center;\n  }\n  .card-back.type-icon{ background:#fff; border-color:var(--magenta); }\n  .card-back.type-name{ background:#EEF2EA; border-color:var(--forest); }\n  .card-back.type-icon svg{ width:56%; height:56%; }\n  .card-back.type-name{ font-family:'Oswald',sans-serif; font-weight:600; font-size:12px; color:var(--forest-dark); line-height:1.2; }\n  .card.matched .card-inner{ animation:matchPop .4s ease; }\n  .card.matched .card-back{ background:#E8F2E7; border-color:var(--forest); box-shadow:2px 2px 0 rgba(47,75,60,0.15); }\n  .card.mismatch .card-back{ background:#F7E7E3; border-color:var(--error); }\n\n  @keyframes cardIn{ to{ opacity:1; transform:translateY(0) scale(1); } }\n  @keyframes shake{\n    0%,100%{ transform:rotateY(180deg) translateX(0); }\n    20%{ transform:rotateY(180deg) translateX(-5px); }\n    40%{ transform:rotateY(180deg) translateX(5px); }\n    60%{ transform:rotateY(180deg) translateX(-4px); }\n    80%{ transform:rotateY(180deg) translateX(4px); }\n  }\n  @keyframes matchPop{\n    0%{ transform:rotateY(180deg) scale(1); }\n    45%{ transform:rotateY(180deg) scale(1.12); }\n    100%{ transform:rotateY(180deg) scale(1); }\n  }\n\n  .action-row{ display:flex; justify-content:center; margin-top:20px; }\n  .btn{ font-family:'Oswald',sans-serif; font-size:14px; letter-spacing:0.5px; font-weight:600; border:none; padding:12px 26px; cursor:pointer; }\n  .btn-primary{ background:var(--magenta); color:#fff; box-shadow:3px 3px 0 var(--magenta-dark); }\n  .btn-primary:hover{ background:var(--magenta-dark); box-shadow:3px 3px 0 #6b0037; }\n\n  .result{ display:none; text-align:center; }\n  .result.show{ display:block; }\n  .medal{ margin:2px auto 6px; }\n  .stars{ font-size:36px; letter-spacing:8px; margin:2px 0 6px; }\n  .stars span{ display:inline-block; opacity:0; transform:scale(0.3); animation:starPop .4s ease forwards; }\n  .stars span:nth-child(1){ animation-delay:.05s; }\n  .stars span:nth-child(2){ animation-delay:.2s; }\n  .stars span:nth-child(3){ animation-delay:.35s; }\n  .stars .on{ color:var(--gold); }\n  .stars .off{ color:var(--paper-line); }\n  @keyframes starPop{ 60%{ opacity:1; transform:scale(1.25); } 100%{ opacity:1; transform:scale(1); } }\n  .result .big-line{ font-family:'Oswald',sans-serif; font-size:22px; color:var(--forest-dark); margin:6px 0 2px; font-weight:600; }\n  .result .sub-line{ font-size:14px; color:var(--ink-soft); margin:0 0 16px; }\n  .verdict{\n    font-size:14.5px; color:var(--ink-soft); max-width:420px; margin:0 auto 22px;\n    border-left:4px solid var(--forest); background:#F0F3EC; padding:12px 16px; text-align:left; line-height:1.5;\n  }\n  .restart-btn{\n    font-family:'Oswald',sans-serif; font-size:14px; letter-spacing:0.5px; font-weight:600;\n    background:var(--forest); color:#fff; border:none; padding:12px 26px; cursor:pointer;\n    box-shadow:3px 3px 0 var(--forest-dark);\n  }\n  .restart-btn:hover{ background:var(--forest-dark); }\n  .board-wrap.hidden{ display:none; }\n<\/style>\n<\/head>\n<body>\n<div class=\"wrap\">\n\n  <div class=\"masthead\">\n    <div class=\"compass-badge\">\n      <svg width=\"30\" height=\"30\" viewBox=\"0 0 46 46\">\n        <circle cx=\"23\" cy=\"23\" r=\"20\" fill=\"none\" stroke=\"#1D3226\" stroke-width=\"2\"\/>\n        <polygon points=\"23,7 26,23 23,20 20,23\" fill=\"#B8005E\"\/>\n        <polygon points=\"23,39 26,23 23,26 20,23\" fill=\"#1D3226\"\/>\n        <circle cx=\"23\" cy=\"23\" r=\"2.4\" fill=\"#1D3226\"\/>\n      <\/svg>\n    <\/div>\n    <div>\n      <h1>Memory des symboles<\/h1>\n      <p>Retrouve chaque symbole et son nom, le plus vite possible<\/p>\n    <\/div>\n  <\/div>\n  <div class=\"title-rule\"><\/div>\n\n  <div class=\"sheet\">\n    <span class=\"grid-ref top-right\">8 PAIRES<\/span>\n    <span class=\"grid-ref bottom-left\">1 : 10 000<\/span>\n\n    <div class=\"board-wrap\" id=\"boardWrap\">\n      <div class=\"stats-row\">\n        <div class=\"stat-tile\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#56604F\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg>\n          <div class=\"label\">TEMPS<\/div>\n          <div class=\"val\" id=\"timeLabel\">00:00<\/div>\n        <\/div>\n        <div class=\"stat-tile\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#56604F\" stroke-width=\"2\"><path d=\"M4 20l4-9 4 5 4-11 4 15\"\/><\/svg>\n          <div class=\"label\">COUPS<\/div>\n          <div class=\"val\" id=\"movesLabel\">0<\/div>\n        <\/div>\n        <div class=\"stat-tile\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#56604F\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"8\"\/><circle cx=\"12\" cy=\"12\" r=\"3.2\"\/><\/svg>\n          <div class=\"label\">PAIRES<\/div>\n          <div class=\"val\" id=\"pairsLabel\">0 \/ 8<\/div>\n        <\/div>\n      <\/div>\n      <p class=\"best-line\" id=\"bestLine\"><\/p>\n\n      <div class=\"board\" id=\"board\"><\/div>\n    <\/div>\n\n    <div class=\"result\" id=\"result\">\n      <svg class=\"medal\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\">\n        <circle cx=\"20\" cy=\"20\" r=\"16\" fill=\"none\" stroke=\"#C99A2E\" stroke-width=\"2.5\"\/>\n        <circle cx=\"20\" cy=\"20\" r=\"10\" fill=\"none\" stroke=\"#C99A2E\" stroke-width=\"1.4\"\/>\n      <\/svg>\n      <p style=\"font-family:'Oswald',sans-serif;letter-spacing:1px;color:var(--ink-soft);margin-bottom:4px;\">PARCOURS TERMIN\u00c9<\/p>\n      <div class=\"stars\" id=\"stars\"><\/div>\n      <p class=\"big-line\" id=\"finalTime\"><\/p>\n      <p class=\"sub-line\" id=\"finalMoves\"><\/p>\n      <p class=\"verdict\" id=\"verdict\"><\/p>\n      <button class=\"restart-btn\" id=\"restartBtn\">Rejouer<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\nconst ICONS = {\n  boulder: `<svg viewBox=\"0 0 40 40\"><path d=\"M20 15c6 0 11 5 10.5 10.5S25 34 20 33.5s-10-5.5-9.5-11S14 15 20 15z\" fill=\"#1a1a1a\"\/><\/svg>`,\n  cliff: `<svg viewBox=\"0 0 40 40\"><path d=\"M4 16c6-3 12 3 18-1s10-1 14 1\" fill=\"none\" stroke=\"#1a1a1a\" stroke-width=\"2.6\" stroke-linecap=\"round\"\/>${[7,13,19,25,31].map(x=>`<line x1=\"${x}\" y1=\"16\" x2=\"${x-2.5}\" y2=\"24\" stroke=\"#1a1a1a\" stroke-width=\"2\"\/>`).join('')}<\/svg>`,\n  knoll: `<svg viewBox=\"0 0 40 40\"><path d=\"M20 12c5 0 9 3.5 9 8s-4 8-9 8-9-3.5-9-8 4-8 9-8z\" fill=\"#8B5E34\"\/><\/svg>`,\n  depression: `<svg viewBox=\"0 0 40 40\"><path d=\"M9 15c0 8 5 13 11 13s11-5 11-13\" fill=\"none\" stroke=\"#8B5E34\" stroke-width=\"2.6\" stroke-linecap=\"round\"\/><\/svg>`,\n  water: `<svg viewBox=\"0 0 40 40\"><path d=\"M13 9c-5 3-7 10-4 15 3 5 10 7 15 4 5-3 7-10 4-15-3-5-10-7-15-4z\" fill=\"#1C6FA8\"\/><\/svg>`,\n  marsh: `<svg viewBox=\"0 0 40 40\"><line x1=\"6\" y1=\"14\" x2=\"15\" y2=\"14\" stroke=\"#1C6FA8\" stroke-width=\"2.6\"\/><line x1=\"22\" y1=\"14\" x2=\"31\" y2=\"14\" stroke=\"#1C6FA8\" stroke-width=\"2.6\"\/><line x1=\"6\" y1=\"24\" x2=\"15\" y2=\"24\" stroke=\"#1C6FA8\" stroke-width=\"2.6\"\/><line x1=\"22\" y1=\"24\" x2=\"31\" y2=\"24\" stroke=\"#1C6FA8\" stroke-width=\"2.6\"\/><\/svg>`,\n  thicket: `<svg viewBox=\"0 0 40 40\"><path d=\"M12 12c-5 4-6 12-1 17 5 5 14 5 18 0 4-5 3-13-2-17-5-4-11-4-15 0z\" fill=\"#2F4B3C\"\/><circle cx=\"14\" cy=\"16\" r=\"1.6\" fill=\"#F6F3E7\"\/><circle cx=\"24\" cy=\"14\" r=\"1.6\" fill=\"#F6F3E7\"\/><circle cx=\"16\" cy=\"24\" r=\"1.6\" fill=\"#F6F3E7\"\/><circle cx=\"25\" cy=\"24\" r=\"1.6\" fill=\"#F6F3E7\"\/><\/svg>`,\n  building: `<svg viewBox=\"0 0 40 40\"><rect x=\"10\" y=\"10\" width=\"20\" height=\"20\" fill=\"#1a1a1a\"\/><\/svg>`\n};\nconst NAMES = {\n  boulder:'Bloc rocheux', cliff:'Falaise', knoll:'Butte', depression:'D\u00e9pression',\n  water:\"Point d'eau\", marsh:'Marais', thicket:'Fourr\u00e9', building:'B\u00e2timent'\n};\nconst BACK_ART = `<svg viewBox=\"0 0 40 40\"><circle cx=\"20\" cy=\"20\" r=\"16\" fill=\"none\" stroke=\"#8B5E34\" stroke-width=\"1.4\" opacity=\"0.6\"\/><line x1=\"20\" y1=\"4\" x2=\"20\" y2=\"36\" stroke=\"#8B5E34\" stroke-width=\"1\" opacity=\"0.4\"\/><line x1=\"4\" y1=\"20\" x2=\"36\" y2=\"20\" stroke=\"#8B5E34\" stroke-width=\"1\" opacity=\"0.4\"\/><\/svg>`;\nconst MASCOT_SRC = \"data:image\/jpeg;base64,\/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wBDAAYEBAUEBAYFBQUGBgYHCQ4JCQgICRINDQoOFRIWFhUSFBQXGiEcFxgfGRQUHScdHyIjJSUlFhwpLCgkKyEkJST\/2wBDAQYGBgkICREJCREkGBQYJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCT\/wAARCACQAKADASIAAhEBAxEB\/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL\/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6\/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL\/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6\/9oADAMBAAIRAxEAPwD0LAoxS0oFWQGMUYpQKXApDG4orY0\/wzfajEsyhIo26NIcZ98VNd+DtRt4WlQxz7f4Y+uKTYGDS\/hTipBIIII4INWbHAmUFo1ycZkGV\/H29+1AFUrnmkxiunj0IxXSKYibS6\/dyKTkwtjI57juD3FZkOhXB1c2DruaPLNjuo6fnxSuBmqrPnaM4GT9KM13EXhWzijVJXLZO6UJxvb0z2UelV9Y01ynlWGmRmMDl1QZ\/WlcdjkKKlmglgYrLG8Z9GXFR4xVAJRTsUYoAQCloxS0CYlLijFLTJK1LSUtMY4e9aGi2oubwM2zZF8zKwyG9qz6vaPIqSyI2f3i4Bz3pDZoeIfEjaZaNcI2yKMYAz0FUfAfxHh8QTyIku7a+1geMGs3xdatqOhzRxBt6qfl7mvNvhZoutRa9PJFBKIHIBYjAyOh9+9cEm27myStqe\/+IPDMuo3Ud3Yov7z\/AFoBA59afp\/hTyMGezhkPfdcE\/oFrZsJ2it0jk5YAZNW1mU10xk7ambRWitZomURwxRIBtwrZGPTpVbUIZILhruG1dpWjEbMoySAc1q+cvrQbiMDJYAUMZgLdTxAF4JlzycoavWdyJ0yOPrVHWviL4T8PErqevWNu46xmTc\/\/fI5o8M+MvDnjVZ20W8S5MBAkAQoRnoeR0rLZ7lfIo+KrNvK8154yvZCDuz7VyZHOK9PGn2kc5mk+dsceachfpmsXxZpsE9mtzbRx74m+Yxgfd98VupENHFYoxT8UmKskb0oxTsUYoAbg07FGKBxTFYrCgUUopgFbWm6aLeA3dwMkj5I\/wCpqHSNOEzfaJh+7Q8f7RrobS3F5vdmU44C1olZXZnKV3ZHPQ2zXczcOuTyp5FbOnWK26hIolQD04p04hs5SCi59F4qWKcsAViRR9P8a5+VXujRNrRmlCWUAeZn2qcSuO2apRTjvtq3FOh60noWirdaiIATg59K47xRNqXiC3FjbajJp0Dn9\/LCP3zL\/dQnhc9zyfSu9mtbe7XDDFZ0vhhCSY5APqKyctC1E8gn8G\/Dzw+ghv7W0MpG5mu5meRv9o5Ofxr0T4eDQ7C2SPQoLWO2k+YG3xtceuR1rzrxsvi7wt4AbTvDGnahDrzXa\/bri2i8y4nU7i0gfqyk7cY+6OCBXV\/BXw7rWm6HBd+IkMN\/cEySQlQpUn+8BwGPU47molT0TTLUujPT76385Qw\/GvNNe8F3FlrTar4f1m50+7ky7wsTJC7e6n+E9x+VeqbQ647V5r4thu7DxVp8Vv4b1Jo5pkUazBNvjDN1SWMchO2exwRQ4y3QoyXUgkE3lxSXNuttPIv72JTlVcHBwe47j2NR5roPGFmYGs5VUhSpUn3rn+vNdMHpqZPcWkFKKKoQmKATS0UAU8Va0+ya8nCAHaOWPoKr7SSFAyTXTWdsum2QB\/1jcsf6VrGN2ZzlZBPIkEawxjao4Apn2sQxFUkYMewqjeXHzdD1qGe6byiN0a5Xg45p1NjKG48X7rNuJVmz1bnFWBqLk7mOTWBHKyk7iCT0Ap73RI6\/gKzitDRm6NUMZ5dfpnJqVdeC4+Y\/gK5WS5Yd6rSXT46ms5lxZ6Bb+IEx80laVvrkTrkOp\/GvFNX1q5sY2lRZH2jO1TyfYVd8H+KV1e0ivYJGeKQcBhgg9CCOxByDXOots1crHsNxqysoAOfrVWO\/CHrXKjVT1J4oOrAd66lSsjF1LndwasmVBYA1x3iP9oLwR4c1GTTXurm+uYjtkWzi3qjDqpYkAn6Zrgvir42udC8G6lPZStHO0YiR1OChchcg+oBNfKv9rvD8wb8SaHFIqLbPtlfjv4C8SQmzu\/7RtFfpJLb5CH1ypOKaHtp0E1ldQ3ds\/Mc0LZVx\/T6V8daV42urd8CKKdR\/CeDXrHwl+I1vda\/FpawyQm9O1k3ZUtg4I9+OvpS0KPbhS0EUu0dKYhBS4oApaAJ9DtRLdeaeBHz+NaN9PkkAiks4vsViARh35NU7h8ZJ5PpXSlZHLJ3Zm38zBdidWrJ89VlUSu5CnoDWlcEgE4yzVialEyKQpwx54rObuOJL9oLTOeVBORT2mLY5AxWSl\/uUKxIlHBBqYXAI4NYOVjflLbyk96izmovNppkwSe1ZORaiQ6hCsqlTzXHWly3gTXHndiuiahIDM2OLWY8b\/ZW4B9Dg118r55qtc2MGo20lvPGskcilWVhkEehq4MmSOiFyCmQwPGRjvVa4vmXgHFeeR3Gt+AGMIin1bQl5RQc3FoPQf31Hp1Fbmn+LdJ16MvYX0Ux7pnDqfQqeRW3MZ8vYZ4utI\/EGlXOn3BPlzIVJHY9j+Br5u1zQrzSLySyu1KyRk7Wx8si+or6Pupt2cYIz1rH1XTNN1KykTU4I5YVBJLDlfcHqKxlOzNoRPn\/ToTE5kbsOB617j+zd8PZZprvxvqEbLBCTbWAYf6yQ\/fceyjj6n2q34B+C2g3s8M15bT3LudwhkkO0Z6DAxn8a99vbe00y2tdH0+GOC1skCLHGMKp7gUoz5timrblClFLRWhIlLRSUwNq7lBbA6DpWVdSgdeT6Crc7nJ2j8aoScZYjFdEmcaRTmfauSPmPRazpFUtl\/vEEkmtKd1jwznk9B3rOcht80g2jGAD6VmzRHOXtv++MiHa38NVoNQJfa\/ysO1bM6ea6ylcAH9KxNSsgyFlBDdQRWE43NYsvJcBuc04y5ArmBqM1k4jmBZf7wrQt9SjmGQ361yyujdamk8mTRDJtPNV1mDYxUyDJAqedpjcbl94EuY\/mANchr\/w70nVZGmks1Wfr50RKSfmOa7S0jOAK1IrBbn5dvWtVWuTyWPFH8BataMRZeIdVjHQB5N4\/UUD4WeOPETJaweImdW5Kyx7V455x2r3WHwbNKDMUCRDq7dBWhaxx6dC0FvjLcNJ3I9PpVR5pA7IoeGNJm8P2Fut1PDcagsKpLLCpWMPjkqDz+JrQPNFFaxio7EN3EpKWiqASilxRigC7OW6Ku761nT+ecnGT29B9K3JUhfiNwG\/u96y7qPs6ysKPaXM\/Z2MeVVt8sx8yU\/e74qlMhmBaRyFz07VduYXV8Lj61nGRJHIDhljOCR0z7VSlcm1hkwDkgDhRz9ewrOu49kDZ6qyitB7gGTy1x7iqkoG0wkhnPzNQCMTUrFfKJC5LnisG806WJ90BKEgHiuwaIvKC33cYFVbu2BjGRj0x7VnKKZcZHJwazdWUgW4iLL03Cuo0\/UoJYBKXGCM1ny2IkbEij2OKlg0jn5RwfSuaVM2Uzci1uFWAiQuT+Vdd4ViudTnQmMLHntXMaJ4fee4jO35QM9K9Y8L6YtnAoCgGs20jRamjrsCweHmRRjbt\/nXErXouq27XOmTRKNxK8DHWvPpIHhYhlI57iuunsYy3GUUnNLWhKEzSZpSKbigYuaUGkoHWgDWkntrg+XLHsk\/2uD+Bquw8tWBcyL2VqnmSC4jKSRAe2ePwNUnLwqQx81F+4+fmWua5pYo3sSTKdu4eqngn\/wCtXL6hHJBv2ZAU8IuODXU3JW8RlRh8\/r1BrDkt55lkWSNSqDAJPJ9frVxkRKJiwXMkQOVGSMsTSRuFLy7tzSDrUdzbBg2A0agZK55P1qkkhilaQk7QcD0xWqZm0arsWdE6AfMaSRMNuY\/Io6+hpkcnn7JAQTirMkRb92ozjk0NgkVZrZnb5R8w5HvWnpdosxB2lWHUelOtbUsE3AkqATj0rodH09Y7pWYD0P8AtCuepM1hE19H0tbaOMleGyK63T49qrj0rP8AL8pEwOAQa17UKo4+tcy1Zuy8hxxWD4h0VZVNzFwQOR2FbAk5qZSHXB5FdVOfQxlE8zkiKMQc0zFdRruhFXM0CkqecBeBXOOhU4NdBBEabinkUm2gBmeaUUpWjFAGjJhiVuLMKrd1AwfyrOeG1ikws8h6qQRnjrg1ozJdO6oZY41ZvvdSB7e9RQW1vYo7gFjyTnk5PauG5sYk1jHvaKG4LcZAz8ynqKqXEU5KFpSm3PmAfxHtW9e24Zi6RDzQQ2c4\/wA9KoXlv5uZV4EsfP5f41SYM5a5imBImYOHDYAXkYPBrPa3DIAwDLwRiuluLTfGrO2GKFcdMn1qhc2e3YUHynHT6cGt4yMWjn9s1kCV5VfmFaukanFczM7MAcg4P0q9HZebHhkB9sVDN4QkcCaybB9Kic7FRidZptrBKySR7W9R7Vu2+n\/u+mGXp7ivOrR9X0KVGYPsXgg8g16Z4c1OLV7UOvEgHzKa5ZSubxVjRs8y2qhuvQ1eQhQuDyBVOADYycjngirEY9Tz6+tJDJw5zU8b81U3YODx708SbMAmtEyWi+QsqFG6GuR13SzbSsyBQjcjGc108UmT1pbq2S8gMbAE9iRmumnO5jKJ55tpuKv6lYtZ3DISOvaqZFbEjCMU0ipMUm2gD\/\/Z\";\n\nconst SYM_IDS = Object.keys(ICONS);\n\nlet deck = [];\nlet firstCard = null, secondCard = null, lock = false;\nlet matches = 0, moves = 0, seconds = 0, started = false, timerHandle = null;\nlet bestScore = null; \/\/ {seconds, moves}\n\nfunction shuffle(arr){\n  const a = arr.slice();\n  for(let i=a.length-1;i>0;i--){ const j = Math.floor(Math.random()*(i+1)); [a[i],a[j]]=[a[j],a[i]]; }\n  return a;\n}\n\nfunction pad(n){ return String(n).padStart(2,'0'); }\nfunction formatTime(s){ return `${pad(Math.floor(s\/60))}:${pad(s%60)}`; }\n\nfunction buildBoard(){\n  matches = 0; moves = 0; seconds = 0; started = false; lock = false;\n  firstCard = null; secondCard = null;\n  clearInterval(timerHandle);\n\n  deck = [];\n  SYM_IDS.forEach(id => {\n    deck.push({ symId: id, type: 'icon' });\n    deck.push({ symId: id, type: 'name' });\n  });\n  deck = shuffle(deck);\n\n  document.getElementById('timeLabel').textContent = '00:00';\n  document.getElementById('movesLabel').textContent = '0';\n  document.getElementById('pairsLabel').textContent = '0 \/ 8';\n  document.getElementById('bestLine').textContent = bestScore\n    ? `Ton meilleur score cette session : ${formatTime(bestScore.seconds)} \u2014 ${bestScore.moves} coups`\n    : '';\n\n  const board = document.getElementById('board');\n  board.innerHTML = '';\n  deck.forEach((c, idx) => {\n    const card = document.createElement('div');\n    card.className = 'card';\n    card.dataset.index = idx;\n    card.dataset.symId = c.symId;\n    const backContent = c.type === 'icon'\n      ? `<div class=\"card-face card-back type-icon\">${ICONS[c.symId]}<\/div>`\n      : `<div class=\"card-face card-back type-name\">${NAMES[c.symId]}<\/div>`;\n    const badgeText = c.type === 'icon' ? 'SYMBOLE' : 'NOM';\n    card.style.animationDelay = `${idx * 0.03}s`;\n    card.innerHTML = `\n      <div class=\"card-inner\">\n        <div class=\"card-face card-front type-${c.type}\">${BACK_ART}<span class=\"badge\">${badgeText}<\/span><span class=\"mascot\"><img decoding=\"async\" src=\"${MASCOT_SRC}\" alt=\"\"><\/span><\/div>\n        ${backContent}\n      <\/div>`;\n    card.addEventListener('click', () => onCardClick(card));\n    board.appendChild(card);\n  });\n\n  document.getElementById('result').classList.remove('show');\n  document.getElementById('boardWrap').classList.remove('hidden');\n}\n\nfunction onCardClick(card){\n  if(lock) return;\n  if(card.classList.contains('flipped') || card.classList.contains('matched')) return;\n\n  if(!started){\n    started = true;\n    timerHandle = setInterval(() => {\n      seconds++;\n      document.getElementById('timeLabel').textContent = formatTime(seconds);\n    }, 1000);\n  }\n\n  card.classList.add('flipped');\n\n  if(!firstCard){\n    firstCard = card;\n    return;\n  }\n  secondCard = card;\n  lock = true;\n  moves++;\n  document.getElementById('movesLabel').textContent = moves;\n\n  const isMatch = firstCard.dataset.symId === secondCard.dataset.symId;\n\n  if(isMatch){\n    setTimeout(() => {\n      firstCard.classList.add('matched');\n      secondCard.classList.add('matched');\n      matches++;\n      document.getElementById('pairsLabel').textContent = `${matches} \/ 8`;\n      firstCard = null; secondCard = null; lock = false;\n      if(matches === 8) finishGame();\n    }, 350);\n  } else {\n    firstCard.classList.add('mismatch','shake');\n    secondCard.classList.add('mismatch','shake');\n    setTimeout(() => {\n      firstCard.classList.remove('flipped','mismatch','shake');\n      secondCard.classList.remove('flipped','mismatch','shake');\n      firstCard = null; secondCard = null; lock = false;\n    }, 800);\n  }\n}\n\nfunction finishGame(){\n  clearInterval(timerHandle);\n  if(!bestScore || seconds < bestScore.seconds || (seconds === bestScore.seconds && moves < bestScore.moves)){\n    bestScore = { seconds, moves };\n  }\n\n  document.getElementById('boardWrap').classList.add('hidden');\n  document.getElementById('result').classList.add('show');\n\n  let starCount;\n  if(moves <= 10) starCount = 3;\n  else if(moves <= 14) starCount = 2;\n  else starCount = 1;\n\n  document.getElementById('stars').innerHTML = [1,2,3].map(i =>\n    `<span class=\"${i<=starCount?'on':'off'}\">\u2605<\/span>`\n  ).join('');\n\n  document.getElementById('finalTime').textContent = `Termin\u00e9 en ${formatTime(seconds)}`;\n  document.getElementById('finalMoves').textContent = `${moves} coups pour 8 paires`;\n\n  let verdict;\n  if(starCount === 3) verdict = \"M\u00e9moire de champion \u2014 tu associes les symboles \u00e0 leur nom sans h\u00e9siter.\";\n  else if(starCount === 2) verdict = \"Bien jou\u00e9. Encore quelques parties et tu retiendras tous les symboles au premier coup d'\u0153il.\";\n  else verdict = \"Les symboles commencent \u00e0 te devenir familiers \u2014 rejoue pour ancrer la m\u00e9moire.\";\n  document.getElementById('verdict').textContent = verdict;\n}\n\ndocument.getElementById('restartBtn').addEventListener('click', buildBoard);\n\nbuildBoard();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Memory des symboles \u2014 Jeu CO Memory des symboles Retrouve chaque symbole et son nom, le plus vite possible 8 PAIRES 1 : 10 000 TEMPS 00:00 COUPS 0 PAIRES 0 \/ 8 PARCOURS TERMIN\u00c9 Rejouer<\/p>\n","protected":false},"author":27,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"class_list":["post-4696","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/pages\/4696","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/comments?post=4696"}],"version-history":[{"count":7,"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/pages\/4696\/revisions"}],"predecessor-version":[{"id":4742,"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/pages\/4696\/revisions\/4742"}],"wp:attachment":[{"href":"https:\/\/caponord-sports-orientation.fr\/index.php\/wp-json\/wp\/v2\/media?parent=4696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}