{"id":686341,"date":"2026-06-01T13:57:12","date_gmt":"2026-06-01T11:57:12","guid":{"rendered":"https:\/\/www.dynseo.com\/prixcoupdecoeur\/"},"modified":"2026-06-01T15:02:05","modified_gmt":"2026-06-01T13:02:05","slug":"crowdfavoriteprice","status":"publish","type":"page","link":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/","title":{"rendered":"Crowd Favorite Price- TOPCULTURE"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; custom_padding=&#8221;0px|||||&#8221; global_colors_info=&#8221;{}&#8221; locked=&#8221;off&#8221;][et_pb_row _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; max_width=&#8221;2019px&#8221; custom_padding=&#8221;0px|||||&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]<!-- ============================================================<!-- [et_pb_line_break_holder] -->     DYNSEO \u2014 TOP CULTURE 2026 \u2014 PHOTO CONTEST HEADER \u2014 ENGLISH<!-- [et_pb_line_break_holder] -->     To paste in a Divi Code module at the top of the EN page<!-- [et_pb_line_break_holder] -->     ============================================================ &#8211;><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><!-- [et_pb_line_break_holder] --><link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><!-- [et_pb_line_break_holder] --><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700;800;900&#038;family=Poppins:wght@400;500;600&#038;display=swap\" rel=\"stylesheet\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] -->.dtc-header-wrap{font-family:'Poppins',sans-serif;margin:0;padding:0;line-height:1;}<!-- [et_pb_line_break_holder] -->.dtc-header-wrap *{box-sizing:border-box;margin:0;padding:0;}<!-- [et_pb_line_break_holder] -->.dtc-hero{background:linear-gradient(135deg,#a9e2e4 0%,#5e5ed7 55%,#3a3aaa 100%);padding:60px 24px 90px;position:relative;overflow:hidden;}<!-- [et_pb_line_break_holder] -->.dtc-hero::before{content:'';position:absolute;top:-100px;right:-100px;width:500px;height:500px;border-radius:50%;background:rgba(255,236,167,.07);pointer-events:none;}<!-- [et_pb_line_break_holder] -->.dtc-hero::after{content:'';position:absolute;bottom:-80px;left:-60px;width:350px;height:350px;border-radius:50%;background:rgba(255,255,255,.04);pointer-events:none;}<!-- [et_pb_line_break_holder] -->.dtc-hero-inner{max-width:1080px;margin:0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:48px;position:relative;z-index:2;}<!-- [et_pb_line_break_holder] -->.dtc-hero-left{flex:1;min-width:280px;}<!-- [et_pb_line_break_holder] -->.dtc-hero-right{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:16px;}<!-- [et_pb_line_break_holder] -->.dtc-pill{display:inline-flex;align-items:center;gap:8px;background:rgba(255,236,167,.18);border:1px solid rgba(255,236,167,.35);color:#ffeca7;font-family:'Montserrat',sans-serif;font-size:11px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;padding:8px 18px;border-radius:30px;margin-bottom:20px;}<!-- [et_pb_line_break_holder] -->.dtc-hero-title{font-family:'Montserrat',sans-serif;font-size:clamp(30px,5vw,54px);font-weight:900;color:#fff;line-height:1.15;margin-bottom:8px;text-shadow:0 2px 16px rgba(0,0,0,.15);}<!-- [et_pb_line_break_holder] -->.dtc-hero-title .dtc-accent{display:inline-block;background:#ffeca7;color:#5e5ed7;border-radius:12px;padding:2px 18px 5px;}<!-- [et_pb_line_break_holder] -->.dtc-hero-sub{font-family:'Montserrat',sans-serif;font-size:clamp(16px,2.5vw,22px);font-weight:800;color:rgba(255,255,255,.9);margin-bottom:20px;letter-spacing:.3px;}<!-- [et_pb_line_break_holder] -->.dtc-hero-desc{font-size:15px;color:rgba(255,255,255,.82);line-height:1.8;max-width:520px;margin-bottom:28px;}<!-- [et_pb_line_break_holder] -->.dtc-hero-desc strong{color:#fff;font-weight:600;}<!-- [et_pb_line_break_holder] -->.dtc-flags{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:28px;}<!-- [et_pb_line_break_holder] -->.dtc-flag{display:flex;flex-direction:column;align-items:center;gap:4px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);border-radius:10px;padding:8px 10px;transition:background .2s,transform .2s;cursor:default;}<!-- [et_pb_line_break_holder] -->.dtc-flag:hover{background:rgba(255,255,255,.22);transform:translateY(-3px);}<!-- [et_pb_line_break_holder] -->.dtc-flag-emoji{font-size:22px;line-height:1;}<!-- [et_pb_line_break_holder] -->.dtc-flag-name{font-size:9px;font-weight:700;color:rgba(255,255,255,.75);text-transform:uppercase;letter-spacing:.5px;}<!-- [et_pb_line_break_holder] -->.dtc-ctas{display:flex;flex-wrap:wrap;gap:12px;}<!-- [et_pb_line_break_holder] -->.dtc-btn{font-family:'Montserrat',sans-serif;font-size:14px;font-weight:700;padding:13px 28px;border-radius:30px;border:none;cursor:pointer;text-decoration:none;display:inline-block;text-align:center;transition:all .25s ease;}<!-- [et_pb_line_break_holder] -->.dtc-btn-primary{background:#ffeca7;color:#5e5ed7;box-shadow:0 4px 18px rgba(255,236,167,.3);}<!-- [et_pb_line_break_holder] -->.dtc-btn-primary:hover{background:#ffdb7a;transform:translateY(-2px);box-shadow:0 8px 28px rgba(255,236,167,.45);}<!-- [et_pb_line_break_holder] -->.dtc-btn-outline{background:rgba(255,255,255,.15);color:#fff;border:2px solid rgba(255,255,255,.5);}<!-- [et_pb_line_break_holder] -->.dtc-btn-outline:hover{background:rgba(255,255,255,.25);border-color:#fff;transform:translateY(-2px);}<!-- [et_pb_line_break_holder] -->.dtc-trophy-card{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);border-radius:20px;padding:24px 28px;text-align:center;min-width:180px;}<!-- [et_pb_line_break_holder] -->.dtc-trophy-emoji{font-size:52px;line-height:1;display:block;margin-bottom:10px;}<!-- [et_pb_line_break_holder] -->.dtc-trophy-label{font-family:'Montserrat',sans-serif;font-size:13px;font-weight:800;color:#ffeca7;text-transform:uppercase;letter-spacing:1px;display:block;margin-bottom:4px;}<!-- [et_pb_line_break_holder] -->.dtc-trophy-sub{font-size:12px;color:rgba(255,255,255,.7);}<!-- [et_pb_line_break_holder] -->.dtc-vote-counter{background:rgba(255,236,167,.15);border:1px solid rgba(255,236,167,.3);border-radius:14px;padding:14px 20px;display:flex;align-items:center;gap:10px;min-width:180px;justify-content:center;}<!-- [et_pb_line_break_holder] -->.dtc-vote-counter-num{font-family:'Montserrat',sans-serif;font-size:28px;font-weight:900;color:#ffeca7;line-height:1;}<!-- [et_pb_line_break_holder] -->.dtc-vote-counter-txt{font-size:12px;color:rgba(255,255,255,.75);line-height:1.4;}<!-- [et_pb_line_break_holder] -->.dtc-curve{height:70px;background:#fff;border-radius:50% 50% 0 0;margin-top:-2px;}<!-- [et_pb_line_break_holder] -->.dtc-infoband{background:#fff;padding:0 24px 48px;margin-top:-2px;}<!-- [et_pb_line_break_holder] -->.dtc-infoband-inner{max-width:1080px;margin:0 auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:20px;margin-top:-34px;position:relative;z-index:5;}<!-- [et_pb_line_break_holder] -->.dtc-infocard{background:#fff;border-radius:18px;padding:22px 20px;box-shadow:0 4px 24px rgba(94,94,215,.12);display:flex;align-items:flex-start;gap:14px;transition:transform .25s,box-shadow .25s;border:1px solid rgba(94,94,215,.08);}<!-- [et_pb_line_break_holder] -->.dtc-infocard:hover{transform:translateY(-4px);box-shadow:0 10px 36px rgba(94,94,215,.18);}<!-- [et_pb_line_break_holder] -->.dtc-infocard-icon{width:46px;height:46px;border-radius:13px;display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0;}<!-- [et_pb_line_break_holder] -->.dtc-ic-blue{background:#e2e2f9;}.dtc-ic-mint{background:#d9f4f5;}.dtc-ic-yellow{background:#fff8d6;}.dtc-ic-pink{background:#fde0e8;}<!-- [et_pb_line_break_holder] -->.dtc-infocard-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:#94a3b8;margin-bottom:4px;}<!-- [et_pb_line_break_holder] -->.dtc-infocard-value{font-family:'Montserrat',sans-serif;font-size:15px;font-weight:900;color:#1a1a2e;line-height:1.3;}<!-- [et_pb_line_break_holder] -->.dtc-explain{background:linear-gradient(135deg,#f0f0ff 0%,#e8f4f5 100%);padding:52px 24px;}<!-- [et_pb_line_break_holder] -->.dtc-explain-inner{max-width:1080px;margin:0 auto;}<!-- [et_pb_line_break_holder] -->.dtc-explain-title{font-family:'Montserrat',sans-serif;font-size:clamp(20px,3vw,30px);font-weight:900;color:#1a1a2e;text-align:center;margin-bottom:8px;}<!-- [et_pb_line_break_holder] -->.dtc-explain-title .dtc-hl{display:inline-block;background:#ffb600;color:#fff;border-radius:30px;padding:4px 18px;}<!-- [et_pb_line_break_holder] -->.dtc-explain-desc{text-align:center;font-size:15px;color:#64748b;max-width:680px;margin:0 auto 40px;line-height:1.7;}<!-- [et_pb_line_break_holder] -->.dtc-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;}<!-- [et_pb_line_break_holder] -->.dtc-step{background:#fff;border-radius:18px;padding:26px 22px;position:relative;overflow:hidden;box-shadow:0 3px 16px rgba(94,94,215,.09);border:1px solid rgba(94,94,215,.07);transition:transform .25s,box-shadow .25s;}<!-- [et_pb_line_break_holder] -->.dtc-step:hover{transform:translateY(-5px);box-shadow:0 10px 32px rgba(94,94,215,.16);}<!-- [et_pb_line_break_holder] -->.dtc-step-num{font-family:'Montserrat',sans-serif;font-size:48px;font-weight:900;color:rgba(94,94,215,.08);position:absolute;top:-6px;right:14px;line-height:1;pointer-events:none;}<!-- [et_pb_line_break_holder] -->.dtc-step-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:24px;margin-bottom:14px;}<!-- [et_pb_line_break_holder] -->.dtc-step h3{font-family:'Montserrat',sans-serif;font-size:16px;font-weight:900;color:#1a1a2e;margin-bottom:8px;}<!-- [et_pb_line_break_holder] -->.dtc-step p{font-size:13px;color:#64748b;line-height:1.65;}<!-- [et_pb_line_break_holder] -->.dtc-step-badge{display:inline-block;margin-top:12px;font-family:'Montserrat',sans-serif;font-size:11px;font-weight:800;padding:5px 14px;border-radius:20px;letter-spacing:.5px;}<!-- [et_pb_line_break_holder] -->.dtc-rules{background:#1a1a2e;padding:40px 24px;}<!-- [et_pb_line_break_holder] -->.dtc-rules-inner{max-width:1080px;margin:0 auto;display:flex;flex-wrap:wrap;align-items:center;gap:32px;}<!-- [et_pb_line_break_holder] -->.dtc-rules-title{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;color:#ffeca7;flex:0 0 auto;}<!-- [et_pb_line_break_holder] -->.dtc-rules-list{display:flex;flex-wrap:wrap;gap:10px;flex:1;}<!-- [et_pb_line_break_holder] -->.dtc-rule-chip{display:flex;align-items:center;gap:7px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:30px;padding:8px 16px;font-size:13px;color:rgba(255,255,255,.85);font-weight:500;}<!-- [et_pb_line_break_holder] -->.dtc-rule-chip span{font-size:16px;}<!-- [et_pb_line_break_holder] -->@media(max-width:680px){<!-- [et_pb_line_break_holder] -->    .dtc-hero{padding:40px 16px 70px;}<!-- [et_pb_line_break_holder] -->    .dtc-hero-right{width:100%;flex-direction:row;justify-content:center;}<!-- [et_pb_line_break_holder] -->    .dtc-trophy-card,.dtc-vote-counter{min-width:auto;flex:1;}<!-- [et_pb_line_break_holder] -->    .dtc-infoband-inner{grid-template-columns:1fr 1fr;}<!-- [et_pb_line_break_holder] -->    .dtc-steps{grid-template-columns:1fr;}<!-- [et_pb_line_break_holder] -->    .dtc-rules-inner{flex-direction:column;align-items:flex-start;gap:16px;}<!-- [et_pb_line_break_holder] -->    .dtc-explain{padding:36px 16px;}<!-- [et_pb_line_break_holder] -->    .dtc-rules{padding:30px 16px;}<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->@media(max-width:420px){<!-- [et_pb_line_break_holder] -->    .dtc-infoband-inner{grid-template-columns:1fr;}<!-- [et_pb_line_break_holder] -->    .dtc-flags .dtc-flag-name{display:none;}<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"dtc-header-wrap\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<section class=\"dtc-hero\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"dtc-hero-inner\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-hero-left\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-pill\">\ud83d\udcf8 Favourite Photo Award 2026<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<h1 class=\"dtc-hero-title\"><!-- [et_pb_line_break_holder] -->                    Photo contest<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-accent\">TOP CULTURE<\/span><!-- [et_pb_line_break_holder] -->                <\/h1>\n<p><!-- [et_pb_line_break_holder] -->                <pee class=\"dtc-hero-sub\">Vote for your favourite participants!<\/pee><!-- [et_pb_line_break_holder] -->                <pee class=\"dtc-hero-desc\"><!-- [et_pb_line_break_holder] -->                    Every participant can submit their best photos from the 2026 edition.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->                    <strong>Everyone votes. One single winner. A subscription to the programme of their choice!<\/strong><!-- [et_pb_line_break_holder] -->                <\/pee><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-flags\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\uddeb\ud83c\uddf7<\/span><span class=\"dtc-flag-name\">France<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\uddee\ud83c\uddf9<\/span><span class=\"dtc-flag-name\">Italy<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\uddea\ud83c\uddf8<\/span><span class=\"dtc-flag-name\">Spain<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\udde9\ud83c\uddea<\/span><span class=\"dtc-flag-name\">Germany<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\udde7\ud83c\uddea<\/span><span class=\"dtc-flag-name\">Belgium<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\udde8\ud83c\udded<\/span><span class=\"dtc-flag-name\">Switz.<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-flag\"><span class=\"dtc-flag-emoji\">\ud83c\uddf1\ud83c\uddfa<\/span><span class=\"dtc-flag-name\">Luxem.<\/span><\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-ctas\"><!-- [et_pb_line_break_holder] -->                    <a href=\"#dtc-app\" class=\"dtc-btn dtc-btn-primary\">\u2764\ufe0f Vote now<\/a><!-- [et_pb_line_break_holder] -->                    <a href=\"#dtc-app\" class=\"dtc-btn dtc-btn-outline\" onclick=\"document.querySelector('.dtc-tab:last-child')&#038;&#038;document.querySelector('.dtc-tab:last-child').click();return true;\">\ud83d\udce4 Submit my photo<\/a><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-hero-right\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-trophy-card\"><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-trophy-emoji\">\ud83c\udfc6<\/span><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-trophy-label\">Favourite Photo Award<\/span><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-trophy-sub\">Subscription to the programme of their choice<\/span><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-vote-counter\"><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-vote-counter-num\">\u2764\ufe0f<\/span><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-vote-counter-txt\"><!-- [et_pb_line_break_holder] -->                        <strong style=\"color:#fff;font-size:13px;display:block;\">Free vote<\/strong><!-- [et_pb_line_break_holder] -->                        1 vote \/ day \/ email<!-- [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] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/section>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"dtc-curve\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"dtc-infoband\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"dtc-infoband-inner\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-infocard\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-infocard-icon dtc-ic-yellow\">\ud83d\udcc5<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div>\n<div class=\"dtc-infocard-label\">Voting dates<\/div>\n<div class=\"dtc-infocard-value\">22 June \u2014 17 July 2026<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-infocard\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-infocard-icon dtc-ic-blue\">\ud83d\uddf3\ufe0f<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div>\n<div class=\"dtc-infocard-label\">Frequency<\/div>\n<div class=\"dtc-infocard-value\">1 free vote per day<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-infocard\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-infocard-icon dtc-ic-pink\">\ud83c\udf81<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div>\n<div class=\"dtc-infocard-label\">Voter reward<\/div>\n<div class=\"dtc-infocard-value\">\u20ac10 promo code as a gift<\/div>\n<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-infocard\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-infocard-icon dtc-ic-mint\">\ud83c\udf0d<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div>\n<div class=\"dtc-infocard-label\">Participating countries<\/div>\n<div class=\"dtc-infocard-value\">7 countries, 1 single winner<\/div>\n<\/div>\n<p><!-- [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<section class=\"dtc-explain\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"dtc-explain-inner\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 class=\"dtc-explain-title\">How to take part in the <span class=\"dtc-hl\">photo contest<\/span>?<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <pee class=\"dtc-explain-desc\">Two ways to contribute: submit your photos or vote for your favourites. And receive your discount voucher!<\/pee><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-steps\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-step\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-num\">1<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-icon\" style=\"background:#e2e2f9;\">\ud83d\udce4<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<h3>Submit your photo<\/h3>\n<p><!-- [et_pb_line_break_holder] -->                    <pee>Upload one or more photos of your activities, add a comment \u2014 automatic FR\/EN\/IT translation included.<\/pee><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-step-badge\" style=\"background:#e2e2f9;color:#5e5ed7;\">All participants<\/span><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-step\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-num\">2<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-icon\" style=\"background:#fde0e8;\">\u2764\ufe0f<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<h3>Vote every day<\/h3>\n<p><!-- [et_pb_line_break_holder] -->                    <pee>Browse the gallery, vote for your favourite photo with your email. One vote per day, renewable each morning.<\/pee><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-step-badge\" style=\"background:#fde0e8;color:#e73469;\">Everyone votes<\/span><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-step\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-num\">3<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-icon\" style=\"background:#fff8d6;\">\ud83c\udf81<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<h3>Receive your voucher<\/h3>\n<p><!-- [et_pb_line_break_holder] -->                    <pee>After your vote, an email is sent to you with a <strong>\u20ac10 discount code<\/strong> on the DYNSEO catalogue.<\/pee><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-step-badge\" style=\"background:#fff8d6;color:#8b7000;\">Automatic &#038; instant<\/span><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-step\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-num\">4<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"dtc-step-icon\" style=\"background:#d9f4f5;\">\ud83c\udfc6<\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <\/p>\n<h3>Results on 17 July<\/h3>\n<p><!-- [et_pb_line_break_holder] -->                    <pee>The final ranking is published. The participant with the most votes wins the Favourite Photo Award \u2014 <strong>an annual subscription to the DYNSEO programme of their choice<\/strong>.<\/pee><!-- [et_pb_line_break_holder] -->                    <span class=\"dtc-step-badge\" style=\"background:#d9f4f5;color:#2a7577;\">17 July 2026 at 2pm<\/span><!-- [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] -->    <\/section>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"dtc-rules\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"dtc-rules-inner\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-rules-title\">\ud83d\udccb The rules<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"dtc-rules-list\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-rule-chip\"><span>\ud83d\udcf8<\/span> Any participant can submit photos<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-rule-chip\"><span>\ud83d\uddf3\ufe0f<\/span> 1 vote per email per day<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-rule-chip\"><span>\ud83c\udf0d<\/span> Comment displayed in FR, EN and IT<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-rule-chip\"><span>\u2705<\/span> Photos validated before publication<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-rule-chip\"><span>\ud83c\udfc6<\/span> 1 single winner \u2014 subscription to the programme of their choice<\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"dtc-rule-chip\"><span>\ud83c\udf81<\/span> \u20ac10 promo code for every voter<\/div>\n<p><!-- [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] --><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- END PHOTO CONTEST HEADER TOP CULTURE \u2014 ENGLISH -->[\/et_pb_code][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]    <div id=\"dtc-app\" data-rest=\"https:\/\/www.dynseo.com\/en\/wp-json\/dynseo\/v1\/tc-photo\" data-nonce=\"62849ccee6\" data-view=\"all\"><\/div>\n    <script>\n    (function(){\n        const REST   = \"https:\\\/\\\/www.dynseo.com\\\/en\\\/wp-json\\\/dynseo\\\/v1\\\/tc-photo\";\n        const NONCE  = \"62849ccee6\";\n        const VIEW   = \"all\";\n        const OPEN   = true;\n        const APP    = document.getElementById('dtc-app');\n\n        \/\/ \u2500\u2500 i18n \u2014 langue forc\u00e9e par shortcode\/WPML > navigateur > fr \u2500\u2500\n        const FORCED = \"en\";\n        const LANG   = FORCED || (['fr','en','it'].includes((navigator.language||'').substring(0,2)) ? (navigator.language||'').substring(0,2) : 'fr');\n        const I18N = {\n            fr: {\n                tab_vote:'\ud83d\uddf3 Voter pour une photo', tab_submit:'\ud83d\udce4 Soumettre votre photo',\n                name_ph:'Nom de votre r\u00e9sidence *', country_ph:'Pays *', email_ph:'Email *',\n                comment_ph:'D\u00e9crivez votre photo en quelques mots\u2026',\n                translate_btn:'\ud83c\udf10 Traduire automatiquement', translating:'Traduction en cours\u2026',\n                submit_btn:'\ud83d\udce4 Soumettre la photo', submitting:'Envoi\u2026',\n                vote_btn:'\u2764\ufe0f Voter', voting:'Envoi du vote\u2026',\n                email_vote_ph:'Votre email pour recevoir votre bon de r\u00e9duction',\n                votes_label:'votes', your_country:'Votre pays',\n                photo_label:'Choisir une photo (max 8 Mo)',\n                comment_fr_label:'Commentaire en fran\u00e7ais',\n                comment_en_label:'Commentaire en anglais',\n                comment_it_label:'Commentario in italiano',\n                caption_hint:'\u270d\ufe0f \u00c9crivez votre commentaire dans une seule langue, puis cliquez sur \u00ab Traduire automatiquement \u00bb en bas pour remplir les autres.',\n                already_voted:\"Vous avez d\u00e9j\u00e0 vot\u00e9 aujourd\\'hui ! Revenez demain \ud83d\ude0a\",\n                closed:'Le concours est actuellement ferm\u00e9.',\n                all_countries:'Tous les pays',\n                no_photos:'Aucune photo pour le moment. Soyez le premier \u00e0 soumettre la v\u00f4tre !',\n                filter_label:'Filtrer par pays :',\n            },\n            en: {\n                tab_vote:'\ud83d\uddf3 Vote for a photo', tab_submit:'\ud83d\udce4 Submit your photo',\n                name_ph:'Your residence name *', country_ph:'Country *', email_ph:'Email *',\n                comment_ph:'Describe your photo in a few words\u2026',\n                translate_btn:'\ud83c\udf10 Auto-translate', translating:'Translating\u2026',\n                submit_btn:'\ud83d\udce4 Submit photo', submitting:'Sending\u2026',\n                vote_btn:'\u2764\ufe0f Vote', voting:'Voting\u2026',\n                email_vote_ph:'Your email to receive your discount code',\n                votes_label:'votes', your_country:'Your country',\n                photo_label:'Choose a photo (max 8 MB)',\n                comment_fr_label:'Comment in French',\n                comment_en_label:'Comment in English',\n                comment_it_label:'Comment in Italian',\n                caption_hint:'\u270d\ufe0f Write your caption in just one language, then click \u201cAuto-translate\u201d below to fill in the others.',\n                already_voted:'You already voted today! Come back tomorrow \ud83d\ude0a',\n                closed:'The contest is currently closed.',\n                all_countries:'All countries',\n                no_photos:'No photos yet. Be the first to submit yours!',\n                filter_label:'Filter by country:',\n            },\n            it: {\n                tab_vote:'\ud83d\uddf3 Vota una foto', tab_submit:'\ud83d\udce4 Invia la tua foto',\n                name_ph:'Nome della tua struttura *', country_ph:'Paese *', email_ph:'Email *',\n                comment_ph:'Descrivi la tua foto in poche parole\u2026',\n                translate_btn:'\ud83c\udf10 Traduzione automatica', translating:'Traduzione\u2026',\n                submit_btn:'\ud83d\udce4 Invia la foto', submitting:'Invio\u2026',\n                vote_btn:'\u2764\ufe0f Vota', voting:'Invio voto\u2026',\n                email_vote_ph:'La tua email per ricevere il codice sconto',\n                votes_label:'voti', your_country:'Il tuo paese',\n                photo_label:'Scegli una foto (max 8 MB)',\n                comment_fr_label:'Commento in francese',\n                comment_en_label:'Commento in inglese',\n                comment_it_label:'Commento in italiano',\n                caption_hint:'\u270d\ufe0f Scrivi la didascalia in una sola lingua, poi clicca su \u201cTraduzione automatica\u201d in basso per compilare le altre.',\n                already_voted:\"Hai gi\u00e0 votato oggi! Torna domani \ud83d\ude0a\",\n                closed:'Il concorso \u00e8 attualmente chiuso.',\n                all_countries:'Tutti i paesi',\n                no_photos:'Nessuna foto per ora. Sii il primo a inviare la tua!',\n                filter_label:'Filtra per paese:',\n            },\n        };\n        const T = I18N[LANG] || I18N.fr;\n\n        \/\/ \u2500\u2500 Pays \u2500\u2500\n        const COUNTRIES = [\n            {v:'fr',f:'\ud83c\uddeb\ud83c\uddf7',l:{fr:'France',en:'France',it:'Francia'}},\n            {v:'be',f:'\ud83c\udde7\ud83c\uddea',l:{fr:'Belgique',en:'Belgium',it:'Belgio'}},\n            {v:'ch',f:'\ud83c\udde8\ud83c\udded',l:{fr:'Suisse',en:'Switzerland',it:'Svizzera'}},\n            {v:'it',f:'\ud83c\uddee\ud83c\uddf9',l:{fr:'Italie',en:'Italy',it:'Italia'}},\n            {v:'es',f:'\ud83c\uddea\ud83c\uddf8',l:{fr:'Espagne',en:'Spain',it:'Spagna'}},\n            {v:'pt',f:'\ud83c\uddf5\ud83c\uddf9',l:{fr:'Portugal',en:'Portugal',it:'Portogallo'}},\n            {v:'de',f:'\ud83c\udde9\ud83c\uddea',l:{fr:'Allemagne',en:'Germany',it:'Germania'}},\n            {v:'nl',f:'\ud83c\uddf3\ud83c\uddf1',l:{fr:'Pays-Bas',en:'Netherlands',it:'Paesi Bassi'}},\n            {v:'lu',f:'\ud83c\uddf1\ud83c\uddfa',l:{fr:'Luxembourg',en:'Luxembourg',it:'Lussemburgo'}},\n            {v:'ca',f:'\ud83c\udde8\ud83c\udde6',l:{fr:'Canada',en:'Canada',it:'Canada'}},\n            {v:'ma',f:'\ud83c\uddf2\ud83c\udde6',l:{fr:'Maroc',en:'Morocco',it:'Marocco'}},\n            {v:'sn',f:'\ud83c\uddf8\ud83c\uddf3',l:{fr:'S\u00e9n\u00e9gal',en:'Senegal',it:'Senegal'}},\n            {v:'other',f:'\ud83c\udf0d',l:{fr:'Autre',en:'Other',it:'Altro'}},\n        ];\n        function cName(c){ return (c.l[LANG]||c.l.fr); }\n\n        \/\/ \u2500\u2500 \u00c9tat \u2500\u2500\n        let tab = (VIEW==='submit') ? 'submit' : 'vote';\n        let gallery = [], filterCountry='', votedToday=false;\n        let photoFile=null, photoData=null, photoMime=null;\n        let translating=false, submitting=false;\n        let form={ residence:'', country:'', email:'', comment_fr:'', comment_en:'', comment_it:'' };\n        let voteEmail='';\n\n        function css(){ return `<style>\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700;800;900&family=Poppins:wght@400;500;600&display=swap');\n        #dtc-app *{box-sizing:border-box;}\n        #dtc-app{font-family:'Poppins',sans-serif;}\n        .dtc-wrap{max-width:1100px;margin:0 auto;padding:32px 20px 48px;}\n        .dtc-tabs{display:flex;gap:6px;margin-bottom:32px;background:#f0f0fb;border-radius:50px;padding:5px;width:fit-content;}\n        .dtc-tab{padding:11px 28px;cursor:pointer;font-family:'Montserrat',sans-serif;font-size:13px;font-weight:800;color:#888;border-radius:50px;transition:all .25s;border:none;background:transparent;letter-spacing:.3px;}\n        .dtc-tab.active{background:#5e5ed7;color:#fff;box-shadow:0 4px 14px rgba(94,94,215,.35);}\n        .dtc-tab:hover:not(.active){background:#e2e2f9;color:#5e5ed7;}\n        .dtc-filter{display:flex;align-items:center;gap:12px;margin-bottom:28px;flex-wrap:wrap;}\n        .dtc-filter label{font-family:'Montserrat',sans-serif;font-weight:800;color:#1a1a2e;font-size:13px;text-transform:uppercase;letter-spacing:.8px;}\n        .dtc-filter-pills{display:flex;flex-wrap:wrap;gap:8px;}\n        .dtc-pill-btn{padding:7px 16px;border-radius:50px;border:1.5px solid #e2e2f9;background:#fff;font-size:12px;font-weight:700;color:#888;cursor:pointer;transition:all .2s;font-family:'Poppins',sans-serif;}\n        .dtc-pill-btn.active{background:#5e5ed7;border-color:#5e5ed7;color:#fff;box-shadow:0 3px 10px rgba(94,94,215,.25);}\n        .dtc-pill-btn:hover:not(.active){background:#e2e2f9;border-color:#c5c5f0;color:#5e5ed7;}\n        .dtc-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:24px;}\n        .dtc-card{background:#fff;border-radius:20px;overflow:hidden;box-shadow:0 4px 20px rgba(94,94,215,.09);transition:transform .25s,box-shadow .25s;border:1px solid rgba(94,94,215,.07);}\n        .dtc-card:hover{transform:translateY(-6px);box-shadow:0 14px 40px rgba(94,94,215,.17);}\n        .dtc-card-img-wrap{position:relative;overflow:hidden;}\n        .dtc-card img{width:100%;height:210px;object-fit:cover;display:block;transition:transform .4s ease;}\n        .dtc-card:hover img{transform:scale(1.04);}\n        .dtc-card-rank{position:absolute;top:10px;left:10px;background:rgba(26,26,46,.72);color:#ffeca7;font-family:'Montserrat',sans-serif;font-size:12px;font-weight:900;padding:4px 11px;border-radius:20px;}\n        .dtc-card-flag{position:absolute;top:10px;right:10px;font-size:22px;background:rgba(255,255,255,.92);border-radius:8px;padding:2px 6px;line-height:1.4;}\n        .dtc-card-body{padding:18px;}\n        .dtc-card h3{margin:0 0 6px;font-family:'Montserrat',sans-serif;font-size:15px;font-weight:900;color:#1a1a2e;line-height:1.3;}\n        .dtc-card p{margin:0 0 12px;font-size:13px;color:#64748b;line-height:1.6;}\n        .dtc-langs-badge{display:inline-flex;gap:4px;margin-bottom:12px;}\n        .dtc-lang-dot{font-size:10px;background:#e2e2f9;color:#5e5ed7;border-radius:8px;padding:2px 8px;font-weight:700;}\n        .dtc-vote-zone{background:#f8f8ff;border-radius:14px;padding:14px;}\n        .dtc-vote-top{display:flex;align-items:center;gap:10px;margin-bottom:10px;}\n        .dtc-vote-bubble{background:#5e5ed7;color:#fff;border-radius:50px;padding:6px 14px;display:inline-flex;align-items:center;gap:6px;}\n        .dtc-vote-bubble-num{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;}\n        .dtc-vote-bubble-lbl{font-size:11px;opacity:.85;}\n        .dtc-vote-row{display:flex;gap:8px;align-items:stretch;}\n        .dtc-vote-input{flex:1;padding:9px 13px;border:1.5px solid #dde;border-radius:10px;font-size:13px;outline:none;font-family:'Poppins',sans-serif;transition:border .2s;min-width:0;}\n        .dtc-vote-input:focus{border-color:#5e5ed7;}\n        .dtc-btn{padding:9px 18px;border:none;border-radius:10px;font-size:13px;font-family:'Montserrat',sans-serif;font-weight:800;cursor:pointer;transition:all .2s;}\n        .dtc-btn-vote{background:linear-gradient(135deg,#e73469,#ff6b95);color:#fff;white-space:nowrap;}\n        .dtc-btn-vote:hover{opacity:.88;transform:translateY(-1px);box-shadow:0 4px 14px rgba(231,52,105,.3);}\n        .dtc-btn-vote:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none;}\n        .dtc-promo-box{background:linear-gradient(135deg,#fff8d6,#fffbef);border:2px dashed #ffb600;border-radius:14px;padding:18px;text-align:center;margin-top:12px;}\n        .dtc-promo-label{font-size:12px;color:#8b7000;margin-bottom:4px;font-weight:600;}\n        .dtc-promo-code{font-family:'Montserrat',sans-serif;font-size:24px;font-weight:900;color:#5e5ed7;letter-spacing:4px;}\n        .dtc-promo-sub{font-size:11px;color:#aaa;margin-top:4px;}\n        .dtc-empty{text-align:center;padding:70px 20px;}\n        .dtc-empty-icon{font-size:56px;margin-bottom:16px;display:block;}\n        .dtc-empty-title{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;color:#1a1a2e;margin-bottom:8px;}\n        .dtc-empty-sub{font-size:14px;color:#94a3b8;margin-bottom:24px;}\n        .dtc-empty-btn{background:#5e5ed7;color:#fff;border:none;padding:12px 28px;border-radius:30px;font-family:'Montserrat',sans-serif;font-size:14px;font-weight:800;cursor:pointer;}\n        .dtc-form-wrap{max-width:660px;margin:0 auto;}\n        .dtc-form-header{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);border-radius:20px 20px 0 0;padding:28px 32px;}\n        .dtc-form-header h2{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#fff;margin:0 0 4px;}\n        .dtc-form-header p{font-size:13px;color:rgba(255,255,255,.8);margin:0;}\n        .dtc-form{background:#fff;border-radius:0 0 20px 20px;padding:32px;box-shadow:0 8px 32px rgba(94,94,215,.12);}\n        .dtc-field{margin-bottom:18px;}\n        .dtc-field label{display:block;font-size:12px;font-weight:700;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:.6px;}\n        .dtc-field input,.dtc-field select,.dtc-field textarea{width:100%;padding:11px 15px;border:1.5px solid #e2e8f0;border-radius:10px;font-size:14px;font-family:'Poppins',sans-serif;outline:none;transition:border .2s,box-shadow .2s;background:#fff;}\n        .dtc-field input:focus,.dtc-field select:focus,.dtc-field textarea:focus{border-color:#5e5ed7;box-shadow:0 0 0 3px rgba(94,94,215,.1);}\n        .dtc-field textarea{min-height:90px;resize:vertical;}\n        .dtc-photo-zone{border:2px dashed #c5c5f0;border-radius:12px;padding:28px;text-align:center;cursor:pointer;transition:all .2s;background:#fafaff;}\n        .dtc-photo-zone:hover{border-color:#5e5ed7;background:#f0f0ff;}\n        .dtc-photo-zone-icon{font-size:36px;margin-bottom:8px;}\n        .dtc-photo-zone-txt{font-size:13px;color:#94a3b8;}\n        .dtc-photo-preview{width:100%;height:200px;object-fit:cover;border-radius:10px;margin-top:12px;display:none;}\n        .dtc-btn-translate{background:#f0f0ff;color:#5e5ed7;border:1.5px solid #c5c5f0;width:100%;margin-bottom:4px;padding:11px;border-radius:10px;font-size:13px;font-family:'Montserrat',sans-serif;font-weight:800;}\n        .dtc-btn-translate:hover{background:#5e5ed7;color:#fff;border-color:#5e5ed7;}\n        .dtc-btn-submit{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);color:#fff;width:100%;padding:15px;font-size:15px;border-radius:30px;margin-top:12px;letter-spacing:.3px;}\n        .dtc-btn-submit:hover{opacity:.9;transform:translateY(-2px);box-shadow:0 6px 20px rgba(94,94,215,.35);}\n        .dtc-btn-submit:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none;}\n        .dtc-alert{padding:14px 18px;border-radius:12px;margin-bottom:18px;font-size:14px;}\n        .dtc-alert-success{background:#e8fff3;color:#0a6e36;border-left:4px solid #28a745;}\n        .dtc-alert-error{background:#fff0f0;color:#a00;border-left:4px solid #dc3545;}\n        @media(max-width:640px){\n            .dtc-gallery{grid-template-columns:1fr;}\n            .dtc-tabs{width:100%;}\n            .dtc-tab{flex:1;text-align:center;padding:10px 8px;font-size:11px;}\n            .dtc-form-header,.dtc-form{padding:20px;}\n            .dtc-wrap{padding:20px 14px 36px;}\n        }\n        <\/style>`; }\n\n\n        \/\/ \u2500\u2500 Render principal \u2500\u2500\n        function render(){\n            let html = css();\n            html += `<div class=\"dtc-wrap\">`;\n            if (!OPEN){ html += `<div class=\"dtc-alert dtc-alert-error\">${T.closed}<\/div><\/div>`; APP.innerHTML=html; return; }\n            if(VIEW==='all'){\n                html += `<div class=\"dtc-tabs\">`;\n                html += `<div class=\"dtc-tab${tab==='vote'?' active':''}\" onclick=\"dtcSetTab('vote')\">${T.tab_vote}<\/div>`;\n                html += `<div class=\"dtc-tab${tab==='submit'?' active':''}\" onclick=\"dtcSetTab('submit')\">${T.tab_submit}<\/div>`;\n                html += `<\/div>`;\n            }\n            if(tab==='vote' && VIEW!=='submit') html += renderGallery();\n            if(tab==='submit' && VIEW!=='vote') html += renderForm();\n            html += `<\/div>`;\n            APP.innerHTML = html;\n            if(tab==='submit') bindFormEvents();\n        }\n\n        function renderGallery(){\n            const allCountriesUsed = [...new Set(gallery.map(p=>p.country))];\n            const countryPills = allCountriesUsed.map(cv=>{\n                const co = COUNTRIES.find(c=>c.v===cv);\n                return `<button class=\"dtc-pill-btn${filterCountry===cv?' active':''}\" onclick=\"dtcFilter('${cv}')\">${co?co.f:''} ${co?cName(co):cv}<\/button>`;\n            }).join('');\n            let html = `<div class=\"dtc-filter\">\n                <label>${T.filter_label}<\/label>\n                <div class=\"dtc-filter-pills\">\n                    <button class=\"dtc-pill-btn${!filterCountry?' active':''}\" onclick=\"dtcFilter('')\">${T.all_countries}<\/button>\n                    ${countryPills}\n                <\/div>\n            <\/div>`;\n            const filtered = filterCountry ? gallery.filter(p=>p.country===filterCountry) : gallery;\n            if(!filtered.length){\n                return html+`<div class=\"dtc-empty\">\n                    <span class=\"dtc-empty-icon\">\ud83d\udcf8<\/span>\n                    <div class=\"dtc-empty-title\">${T.no_photos}<\/div>\n                    <div class=\"dtc-empty-sub\">${LANG==='fr'?'Les photos appara\u00eetront ici apr\u00e8s validation.':LANG==='it'?'Le foto appariranno qui dopo la convalida.':'Photos will appear here after validation.'}<\/div>\n                    <button class=\"dtc-empty-btn\" onclick=\"dtcSetTab('submit')\">\ud83d\udce4 ${T.tab_submit}<\/button>\n                <\/div>`; }\n            html += `<div class=\"dtc-gallery\">`;\n            filtered.forEach((p,idx)=>{\n                const comment = LANG==='en'?(p.comment_en||p.comment_fr): LANG==='it'?(p.comment_it||p.comment_fr):p.comment_fr;\n                const flag = COUNTRIES.find(c=>c.v===p.country);\n                const rank = idx+1;\n                const medal = rank===1?'\ud83e\udd47':rank===2?'\ud83e\udd48':rank===3?'\ud83e\udd49':'#'+rank;\n                html += `<div class=\"dtc-card\">\n                    <div class=\"dtc-card-img-wrap\">\n                        <img decoding=\"async\" src=\"${p.photo_url}\" alt=\"${p.residence}\" loading=\"lazy\">\n                        <div class=\"dtc-card-rank\">${medal}<\/div>\n                        <div class=\"dtc-card-flag\">${flag?flag.f:'\ud83c\udf0d'}<\/div>\n                    <\/div>\n                    <div class=\"dtc-card-body\">\n                        <h3>${p.residence}<\/h3>\n                        <p>${comment}<\/p>\n                        <div class=\"dtc-langs-badge\">\n                            <span class=\"dtc-lang-dot\">FR<\/span>\n                            <span class=\"dtc-lang-dot\">EN<\/span>\n                            <span class=\"dtc-lang-dot\">IT<\/span>\n                        <\/div>\n                        <div class=\"dtc-vote-zone\">\n                            <div class=\"dtc-vote-top\">\n                                <div class=\"dtc-vote-bubble\">\n                                    <span class=\"dtc-vote-bubble-num\">${p.vote_count}<\/span>\n                                    <span class=\"dtc-vote-bubble-lbl\">${T.votes_label}<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"dtc-vote-row\">\n                                <input class=\"dtc-vote-input\" type=\"email\" id=\"ve-${p.id}\" placeholder=\"${T.email_vote_ph}\">\n                                <button class=\"dtc-btn dtc-btn-vote\" onclick=\"dtcVote(${p.id},'${p.residence}')\">${T.vote_btn}<\/button>\n                            <\/div>\n                            <div id=\"vote-msg-${p.id}\"><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>`;\n            });\n            html += `<\/div>`;\n            return html;\n        }\n\n        function renderForm(){\n            const copts = COUNTRIES.map(c=>`<option value=\"${c.v}\"${form.country===c.v?' selected':''}>${c.f} ${cName(c)}<\/option>`).join('');\n            return `<div class=\"dtc-form-wrap\">\n                <div class=\"dtc-form-header\">\n                    <h2>\ud83d\udcf8 ${T.tab_submit}<\/h2>\n                    <p>${LANG==='fr'?'Partagez vos photos et faites voter la communaut\u00e9 !':LANG==='it'?'Condividi le tue foto e fai votare la community!':'Share your photos and let the community vote!'}<\/p>\n                <\/div>\n                <div class=\"dtc-form\">\n                    <div id=\"submit-alert\"><\/div>\n                    <div class=\"dtc-field\"><label>${T.name_ph}<\/label>\n                        <input type=\"text\" id=\"f-residence\" value=\"${form.residence}\" placeholder=\"${LANG==='fr'?'Ex : R\u00e9sidence Les Lilas, Paris':LANG==='it'?'Es: Residenza Le Rose, Milano':'E.g. Sunrise Care Home, London'}\"><\/div>\n                    <div class=\"dtc-field\"><label>${T.country_ph}<\/label>\n                        <select id=\"f-country\"><option value=\"\">${T.country_ph}<\/option>${copts}<\/select><\/div>\n                    <div class=\"dtc-field\"><label>${T.email_ph}<\/label>\n                        <input type=\"email\" id=\"f-email\" value=\"${form.email}\" placeholder=\"contact@maresidence.fr\"><\/div>\n                    <div class=\"dtc-field\"><label>${T.photo_label}<\/label>\n                        <div class=\"dtc-photo-zone\" onclick=\"document.getElementById('f-photo').click()\">\n                            <div class=\"dtc-photo-zone-icon\">\ud83d\uddbc\ufe0f<\/div>\n                            <div class=\"dtc-photo-zone-txt\">${LANG==='fr'?'Cliquer pour choisir une photo (JPG\/PNG, max 8 Mo)':LANG==='it'?'Clicca per scegliere una foto (JPG\/PNG, max 8 MB)':'Click to choose a photo (JPG\/PNG, max 8 MB)'}<\/div>\n                        <\/div>\n                        <input type=\"file\" id=\"f-photo\" accept=\"image\/*\" style=\"display:none;\">\n                        <img id=\"f-preview\" class=\"dtc-photo-preview\">\n                    <\/div>\n                    <p style=\"font-size:13px;color:#5e5ed7;background:#f0f0ff;border-radius:10px;padding:10px 14px;margin:0 0 14px;line-height:1.5;\">${T.caption_hint}<\/p>\n                    <div class=\"dtc-field\"><label>${T.comment_fr_label}<\/label>\n                        <textarea id=\"f-comment-fr\" placeholder=\"D\u00e9crivez votre photo en quelques mots...\">${form.comment_fr}<\/textarea><\/div>\n                    <div class=\"dtc-field\"><label>${T.comment_en_label}<\/label>\n                        <textarea id=\"f-comment-en\" placeholder=\"Describe your photo in a few words...\">${form.comment_en}<\/textarea><\/div>\n                    <div class=\"dtc-field\"><label>${T.comment_it_label}<\/label>\n                        <textarea id=\"f-comment-it\" placeholder=\"Descrivi la tua foto in poche parole...\">${form.comment_it}<\/textarea><\/div>\n                    <button class=\"dtc-btn dtc-btn-translate\" id=\"btn-translate\" onclick=\"dtcTranslate()\">${translating?T.translating:T.translate_btn}<\/button>\n                    <button class=\"dtc-btn dtc-btn-submit\" id=\"btn-submit\" onclick=\"dtcSubmit()\">${submitting?T.submitting:T.submit_btn}<\/button>\n                <\/div>\n            <\/div>`;\n        }\n\n\n        function bindFormEvents(){\n            const photo = document.getElementById('f-photo');\n            if(photo) photo.onchange = function(){\n                const file = this.files[0]; if(!file) return;\n                photoFile = file; photoMime = file.type;\n                const reader = new FileReader();\n                reader.onload = e => {\n                    photoData = e.target.result;\n                    const prev = document.getElementById('f-preview');\n                    if(prev){ prev.src=photoData; prev.style.display='block'; }\n                };\n                reader.readAsDataURL(file);\n            };\n\n            \/\/ restore a photo if one was chosen after translation\n            if(photoData){\n                const prev = document.getElementById('f-preview');\n                if(prev){ prev.src = photoData; prev.style.display = 'block'; }\n            }\n        }\n\n        \/\/ \u2500\u2500 Actions globales \u2500\u2500\n        window.dtcSetTab = t => { tab=t; render(); };\n        window.dtcFilter = v => { filterCountry=v; render(); };\n\n        window.dtcTranslate = async function(){\n            \/\/saves any previously entered information so the translation doesnt erase it\n            form.residence = document.getElementById('f-residence')?.value?.trim()||'';\n            form.country = document.getElementById('f-country')?.value||'';\n            form.email = document.getElementById('f-email')?.value?.trim()||'';\n            \n            \/\/ Read all three fields first so nothing typed is lost on re-render\n            form.comment_fr = document.getElementById('f-comment-fr')?.value?.trim()||'';\n            form.comment_en = document.getElementById('f-comment-en')?.value?.trim()||'';\n            form.comment_it = document.getElementById('f-comment-it')?.value?.trim()||'';\n            \/\/ Detect the source: first non-empty field wins (fr > en > it)\n            let from='', txt='';\n            if(form.comment_fr){ from='fr'; txt=form.comment_fr; }\n            else if(form.comment_en){ from='en'; txt=form.comment_en; }\n            else if(form.comment_it){ from='it'; txt=form.comment_it; }\n            if(!txt) return;\n            translating=true; render();\n            try {\n                const r = await fetch(REST+'\/translate',{method:'POST',headers:{'Content-Type':'application\/json','X-WP-Nonce':NONCE},body:JSON.stringify({text:txt,from:from})});\n                const d = await r.json();\n                form.comment_fr = d.fr || form.comment_fr || txt;\n                form.comment_en = d.en || form.comment_en || txt;\n                form.comment_it = d.it || form.comment_it || txt;\n            } catch(e){}\n            translating=false; render();\n        };\n\n        window.dtcSubmit = async function(){\n            form.residence = document.getElementById('f-residence')?.value?.trim()||'';\n            form.country   = document.getElementById('f-country')?.value||'';\n            form.email     = document.getElementById('f-email')?.value?.trim()||'';\n            form.comment_fr= document.getElementById('f-comment-fr')?.value?.trim()||'';\n            form.comment_en= document.getElementById('f-comment-en')?.value?.trim()||'';\n            form.comment_it= document.getElementById('f-comment-it')?.value?.trim()||'';\n            const alert = document.getElementById('submit-alert');\n            const hasCaption = form.comment_fr || form.comment_en || form.comment_it;\n            if(!form.residence||!form.country||!form.email||!hasCaption||!photoData){\n                const errMsg = LANG==='en'?'\u26a0\ufe0f Please fill in all required fields, add a caption in at least one language, and choose a photo.'\n                    : LANG==='it'?'\u26a0\ufe0f Compila tutti i campi obbligatori, aggiungi una didascalia in almeno una lingua e scegli una foto.'\n                    : '\u26a0\ufe0f Veuillez remplir tous les champs obligatoires, ajouter un commentaire dans au moins une langue et choisir une photo.';\n                alert.innerHTML=`<div class=\"dtc-alert dtc-alert-error\">${errMsg}<\/div>`; return;\n            }\n            submitting=true; render();\n            try {\n                const r = await fetch(REST+'\/submit',{method:'POST',headers:{'Content-Type':'application\/json','X-WP-Nonce':NONCE},\n                    body:JSON.stringify({...form,lang:LANG,photo_data:photoData,photo_mime:photoMime})});\n                const d = await r.json();\n                if(d.success){\n                    form={residence:'',country:'',email:'',comment_fr:'',comment_en:'',comment_it:''}; photoData=null;\n                    submitting=false;\n                    APP.innerHTML=css()+`<div class=\"dtc-wrap\"><div class=\"dtc-alert dtc-alert-success\" style=\"font-size:16px;\">\u2705 ${d.message}<\/div><\/div>`;\n                    return;\n                } else {\n                    submitting=false; render();\n                    document.getElementById('submit-alert').innerHTML=`<div class=\"dtc-alert dtc-alert-error\">\u26a0\ufe0f ${d.message||'Erreur'}<\/div>`;\n                }\n            } catch(e){ submitting=false; render(); }\n        };\n\n        window.dtcVote = async function(id, residence){\n            const emailEl = document.getElementById('ve-'+id);\n            const msgEl   = document.getElementById('vote-msg-'+id);\n            const email   = emailEl?.value?.trim();\n            if(!email||!email.includes('@')){ if(msgEl) msgEl.innerHTML=`<div class=\"dtc-alert dtc-alert-error\" style=\"margin-top:8px;\">\u26a0\ufe0f Email requis<\/div>`; return; }\n            if(msgEl) msgEl.innerHTML=`<div style=\"color:#aaa;font-size:13px;margin-top:6px;\">\u23f3 ${T.voting}<\/div>`;\n            try {\n                const r = await fetch(REST+'\/vote',{method:'POST',headers:{'Content-Type':'application\/json','X-WP-Nonce':NONCE},\n                    body:JSON.stringify({submission_id:id,voter_email:email,voter_country:'',voter_lang:LANG})});\n                const d = await r.json();\n                if(d.success){\n                    \/\/ Mettre \u00e0 jour le compteur local\n                    const p = gallery.find(x=>x.id==id); if(p) p.vote_count++;\n                    if(msgEl) msgEl.innerHTML=`<div class=\"dtc-promo-box\"><p style=\"margin:0 0 4px;font-size:13px;color:#555;\">\ud83c\udf89 ${d.message}<\/p><div class=\"dtc-promo-code\">${d.promo_code}<\/div><\/div>`;\n                    if(emailEl) emailEl.disabled=true;\n                    document.querySelectorAll('.dtc-btn-vote').forEach(b=>b.disabled=true);\n                } else {\n                    if(msgEl) msgEl.innerHTML=`<div class=\"dtc-alert dtc-alert-error\" style=\"margin-top:8px;\">${d.message||T.already_voted}<\/div>`;\n                }\n            } catch(e){ if(msgEl) msgEl.innerHTML=`<div class=\"dtc-alert dtc-alert-error\" style=\"margin-top:8px;\">Erreur r\u00e9seau.<\/div>`; }\n        };\n\n        \/\/ \u2500\u2500 Init \u2500\u2500\n        async function loadGallery(){\n            try {\n                const url = filterCountry ? REST+'\/gallery?country='+filterCountry : REST+'\/gallery';\n                const r = await fetch(url);\n                gallery = await r.json();\n            } catch(e){ gallery=[]; }\n            render();\n        }\n        loadGallery();\n    })();\n    <\/script>\n    [\/et_pb_code][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700;800;900&family=Poppins:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n    <div id=\"dtc-ranking-widget\" data-rest=\"https:\/\/www.dynseo.com\/en\/wp-json\/dynseo\/v1\/tc-photo\"><\/div>\n    <script>\n    (function(){\n        const W    = document.getElementById('dtc-ranking-widget');\n        const REST = W.dataset.rest;\n        const FORCED = \"en\";\n        const LANG   = FORCED || (['fr','en','it'].includes((navigator.language||'').substring(0,2)) ? (navigator.language||'').substring(0,2) : 'fr');\n\n        const T = {\n            fr: { title:'\ud83c\udfc6 Classement des photos', participant:'Participant', country:'Pays', votes:'Votes', empty_title:'Le classement arrive bient\u00f4t !', empty_sub:'Les votes s\\'ouvrent d\u00e8s que les premi\u00e8res photos sont soumises et valid\u00e9es. Soyez le premier \u00e0 participer !', loading:'Chargement\u2026', error:'Erreur de chargement.' },\n            en: { title:'\ud83c\udfc6 Photo rankings', participant:'Participant', country:'Country', votes:'Votes', empty_title:'Rankings coming soon!', empty_sub:'Votes open as soon as the first photos are submitted and validated. Be the first to take part!', loading:'Loading\u2026', error:'Loading error.' },\n            it: { title:'\ud83c\udfc6 Classifica delle foto', participant:'Partecipante', country:'Paese', votes:'Voti', empty_title:'La classifica arriva presto!', empty_sub:'Le votazioni si aprono non appena le prime foto vengono inviate e validate. Sii il primo a partecipare!', loading:'Caricamento\u2026', error:'Errore di caricamento.' },\n        };\n        const t = T[LANG] || T.fr;\n\n        const FLAGS = {fr:'\ud83c\uddeb\ud83c\uddf7',be:'\ud83c\udde7\ud83c\uddea',ch:'\ud83c\udde8\ud83c\udded',it:'\ud83c\uddee\ud83c\uddf9',es:'\ud83c\uddea\ud83c\uddf8',pt:'\ud83c\uddf5\ud83c\uddf9',de:'\ud83c\udde9\ud83c\uddea',nl:'\ud83c\uddf3\ud83c\uddf1',lu:'\ud83c\uddf1\ud83c\uddfa',ca:'\ud83c\udde8\ud83c\udde6',ma:'\ud83c\uddf2\ud83c\udde6',sn:'\ud83c\uddf8\ud83c\uddf3'};\n\n        \/\/ \u00c9tat vide styl\u00e9\n        function renderEmpty(){\n            return `<style>\n            .dtc-rank-wrap{font-family:'Poppins',sans-serif;max-width:800px;margin:0 auto;padding:20px 0;}\n            .dtc-rank-header{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);border-radius:20px 20px 0 0;padding:24px 32px;display:flex;align-items:center;gap:14px;}\n            .dtc-rank-header-title{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#fff;margin:0;}\n            .dtc-rank-empty{background:#fff;border-radius:0 0 20px 20px;box-shadow:0 8px 32px rgba(94,94,215,.1);padding:60px 32px;text-align:center;}\n            .dtc-rank-empty-icon{font-size:60px;display:block;margin-bottom:20px;}\n            .dtc-rank-empty-title{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#1a1a2e;margin-bottom:10px;}\n            .dtc-rank-empty-sub{font-size:14px;color:#94a3b8;max-width:420px;margin:0 auto 32px;line-height:1.7;}\n            .dtc-rank-empty-rows{display:flex;flex-direction:column;gap:10px;max-width:480px;margin:0 auto;}\n            .dtc-rank-empty-row{background:#f8f8ff;border-radius:12px;padding:14px 18px;display:flex;align-items:center;gap:14px;border:1px solid rgba(94,94,215,.07);}\n            .dtc-rank-empty-medal{font-size:24px;width:36px;text-align:center;flex-shrink:0;}\n            .dtc-rank-empty-bar{flex:1;height:12px;background:#e8e8f5;border-radius:6px;overflow:hidden;}\n            .dtc-rank-empty-fill{height:100%;background:linear-gradient(90deg,#d0d0f0,#e8e8fa);border-radius:6px;}\n            .dtc-rank-empty-num{font-family:'Montserrat',sans-serif;font-size:13px;font-weight:900;color:#c5c5e8;min-width:28px;text-align:right;}\n            <\/style>\n            <div class=\"dtc-rank-wrap\">\n                <div class=\"dtc-rank-header\"><h2 class=\"dtc-rank-header-title\">${t.title}<\/h2><\/div>\n                <div class=\"dtc-rank-empty\">\n                    <span class=\"dtc-rank-empty-icon\">\ud83c\udfc6<\/span>\n                    <div class=\"dtc-rank-empty-title\">${t.empty_title}<\/div>\n                    <p class=\"dtc-rank-empty-sub\">${t.empty_sub}<\/p>\n                    <div class=\"dtc-rank-empty-rows\">\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\">\ud83e\udd47<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:90%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\">\ud83e\udd48<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:65%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\">\ud83e\udd49<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:45%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\" style=\"color:#c5c5e8;font-size:16px;font-weight:900;font-family:'Montserrat',sans-serif;\">4<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:28%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\" style=\"color:#c5c5e8;font-size:16px;font-weight:900;font-family:'Montserrat',sans-serif;\">5<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:14%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>`;\n        }\n\n        function renderRanking(sorted){\n            const max = sorted[0].vote_count || 1;\n            return `<style>\n            .dtc-rank-wrap{font-family:'Poppins',sans-serif;max-width:800px;margin:0 auto;padding:20px 0;}\n            .dtc-rank-header{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);border-radius:20px 20px 0 0;padding:24px 32px;}\n            .dtc-rank-header-title{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#fff;margin:0;}\n            .dtc-rank-table{background:#fff;border-radius:0 0 20px 20px;box-shadow:0 8px 32px rgba(94,94,215,.1);overflow:hidden;}\n            .dtc-rank-row{display:grid;grid-template-columns:56px 1fr 60px 80px 140px;align-items:center;padding:14px 20px;border-bottom:1px solid rgba(94,94,215,.06);transition:background .15s;}\n            .dtc-rank-row:last-child{border-bottom:none;}\n            .dtc-rank-row:hover{background:#fafaff;}\n            .dtc-rank-thead{background:#f4f4fd;font-family:'Montserrat',sans-serif;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:#94a3b8;}\n            .dtc-rank-thead .dtc-rank-row{padding:10px 20px;}\n            .dtc-rank-medal{font-size:22px;text-align:center;}\n            .dtc-rank-num{font-family:'Montserrat',sans-serif;font-size:14px;font-weight:900;color:#c5c5e8;text-align:center;}\n            .dtc-rank-name{font-family:'Montserrat',sans-serif;font-size:14px;font-weight:800;color:#1a1a2e;}\n            .dtc-rank-flag{font-size:22px;text-align:center;}\n            .dtc-rank-count{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;color:#5e5ed7;text-align:center;}\n            .dtc-rank-bar-wrap{padding-right:8px;}\n            .dtc-rank-bar{background:#e8e8f5;border-radius:6px;height:10px;overflow:hidden;}\n            .dtc-rank-bar-fill{height:100%;background:linear-gradient(90deg,#5e5ed7,#a9e2e4);border-radius:6px;transition:width .4s ease;}\n            @media(max-width:540px){\n                .dtc-rank-row{grid-template-columns:44px 1fr 44px 60px;}\n                .dtc-rank-bar-wrap{display:none;}\n                .dtc-rank-thead .dtc-rank-bar-wrap{display:none;}\n            }\n            <\/style>\n            <div class=\"dtc-rank-wrap\">\n                <div class=\"dtc-rank-header\"><h2 class=\"dtc-rank-header-title\">${t.title}<\/h2><\/div>\n                <div class=\"dtc-rank-table\">\n                    <div class=\"dtc-rank-thead\">\n                        <div class=\"dtc-rank-row\">\n                            <div>#<\/div>\n                            <div>${t.participant}<\/div>\n                            <div style=\"text-align:center;\">${t.country}<\/div>\n                            <div style=\"text-align:center;\">${t.votes}<\/div>\n                            <div class=\"dtc-rank-bar-wrap\"><\/div>\n                        <\/div>\n                    <\/div>\n                    ${sorted.map((p,i)=>{\n                        const medal = i===0?'\ud83e\udd47':i===1?'\ud83e\udd48':i===2?'\ud83e\udd49':'';\n                        const num   = medal ? `<div class=\"dtc-rank-medal\">${medal}<\/div>` : `<div class=\"dtc-rank-num\">${i+1}<\/div>`;\n                        const flag  = FLAGS[p.country] || '\ud83c\udf0d';\n                        const pct   = Math.round(p.vote_count\/max*100);\n                        return `<div class=\"dtc-rank-row\">\n                            ${num}\n                            <div class=\"dtc-rank-name\">${p.residence}<\/div>\n                            <div class=\"dtc-rank-flag\">${flag}<\/div>\n                            <div class=\"dtc-rank-count\">${p.vote_count}<\/div>\n                            <div class=\"dtc-rank-bar-wrap\"><div class=\"dtc-rank-bar\"><div class=\"dtc-rank-bar-fill\" style=\"width:${pct}%\"><\/div><\/div><\/div>\n                        <\/div>`;\n                    }).join('')}\n                <\/div>\n            <\/div>`;\n        }\n\n        \/\/ Afficher l'\u00e9tat vide pendant le chargement\n        W.innerHTML = renderEmpty();\n\n        fetch(REST+'\/gallery')\n            .then(r=>r.json())\n            .then(data=>{\n                const approved = data.filter(p=>parseInt(p.vote_count)>=0);\n                if(!approved.length){ return; } \/\/ garde l'\u00e9tat vide\n                const sorted = approved.sort((a,b)=>b.vote_count-a.vote_count).slice(0,10);\n                W.innerHTML = renderRanking(sorted);\n            })\n            .catch(()=>{ W.innerHTML = `<p style=\"color:#aaa;text-align:center;padding:40px;\">${t.error}<\/p>`; });\n    })();\n    <\/script>\n    [\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>    <div id=\"dtc-app\" data-rest=\"https:\/\/www.dynseo.com\/en\/wp-json\/dynseo\/v1\/tc-photo\" data-nonce=\"62849ccee6\" data-view=\"all\"><\/div>\n    <script>\n    (function(){\n        const REST   = \"https:\\\/\\\/www.dynseo.com\\\/en\\\/wp-json\\\/dynseo\\\/v1\\\/tc-photo\";\n        const NONCE  = \"62849ccee6\";\n        const VIEW   = \"all\";\n        const OPEN   = true;\n        const APP    = document.getElementById('dtc-app');\n\n        \/\/ \u2500\u2500 i18n \u2014 langue forc\u00e9e par shortcode\/WPML > navigateur > fr \u2500\u2500\n        const FORCED = \"en\";\n        const LANG   = FORCED || (['fr','en','it'].includes((navigator.language||'').substring(0,2)) ? (navigator.language||'').substring(0,2) : 'fr');\n        const I18N = {\n            fr: {\n                tab_vote:'\ud83d\uddf3 Voter pour une photo', tab_submit:'\ud83d\udce4 Soumettre votre photo',\n                name_ph:'Nom de votre r\u00e9sidence *', country_ph:'Pays *', email_ph:'Email *',\n                comment_ph:'D\u00e9crivez votre photo en quelques mots\u2026',\n                translate_btn:'\ud83c\udf10 Traduire automatiquement', translating:'Traduction en cours\u2026',\n                submit_btn:'\ud83d\udce4 Soumettre la photo', submitting:'Envoi\u2026',\n                vote_btn:'\u2764\ufe0f Voter', voting:'Envoi du vote\u2026',\n                email_vote_ph:'Votre email pour recevoir votre bon de r\u00e9duction',\n                votes_label:'votes', your_country:'Votre pays',\n                photo_label:'Choisir une photo (max 8 Mo)',\n                comment_fr_label:'Commentaire en fran\u00e7ais',\n                comment_en_label:'Commentaire en anglais',\n                comment_it_label:'Commentario in italiano',\n                caption_hint:'\u270d\ufe0f \u00c9crivez votre commentaire dans une seule langue, puis cliquez sur \u00ab Traduire automatiquement \u00bb en bas pour remplir les autres.',\n                already_voted:\"Vous avez d\u00e9j\u00e0 vot\u00e9 aujourd\\'hui ! Revenez demain \ud83d\ude0a\",\n                closed:'Le concours est actuellement ferm\u00e9.',\n                all_countries:'Tous les pays',\n                no_photos:'Aucune photo pour le moment. Soyez le premier \u00e0 soumettre la v\u00f4tre !',\n                filter_label:'Filtrer par pays :',\n            },\n            en: {\n                tab_vote:'\ud83d\uddf3 Vote for a photo', tab_submit:'\ud83d\udce4 Submit your photo',\n                name_ph:'Your residence name *', country_ph:'Country *', email_ph:'Email *',\n                comment_ph:'Describe your photo in a few words\u2026',\n                translate_btn:'\ud83c\udf10 Auto-translate', translating:'Translating\u2026',\n                submit_btn:'\ud83d\udce4 Submit photo', submitting:'Sending\u2026',\n                vote_btn:'\u2764\ufe0f Vote', voting:'Voting\u2026',\n                email_vote_ph:'Your email to receive your discount code',\n                votes_label:'votes', your_country:'Your country',\n                photo_label:'Choose a photo (max 8 MB)',\n                comment_fr_label:'Comment in French',\n                comment_en_label:'Comment in English',\n                comment_it_label:'Comment in Italian',\n                caption_hint:'\u270d\ufe0f Write your caption in just one language, then click \u201cAuto-translate\u201d below to fill in the others.',\n                already_voted:'You already voted today! Come back tomorrow \ud83d\ude0a',\n                closed:'The contest is currently closed.',\n                all_countries:'All countries',\n                no_photos:'No photos yet. Be the first to submit yours!',\n                filter_label:'Filter by country:',\n            },\n            it: {\n                tab_vote:'\ud83d\uddf3 Vota una foto', tab_submit:'\ud83d\udce4 Invia la tua foto',\n                name_ph:'Nome della tua struttura *', country_ph:'Paese *', email_ph:'Email *',\n                comment_ph:'Descrivi la tua foto in poche parole\u2026',\n                translate_btn:'\ud83c\udf10 Traduzione automatica', translating:'Traduzione\u2026',\n                submit_btn:'\ud83d\udce4 Invia la foto', submitting:'Invio\u2026',\n                vote_btn:'\u2764\ufe0f Vota', voting:'Invio voto\u2026',\n                email_vote_ph:'La tua email per ricevere il codice sconto',\n                votes_label:'voti', your_country:'Il tuo paese',\n                photo_label:'Scegli una foto (max 8 MB)',\n                comment_fr_label:'Commento in francese',\n                comment_en_label:'Commento in inglese',\n                comment_it_label:'Commento in italiano',\n                caption_hint:'\u270d\ufe0f Scrivi la didascalia in una sola lingua, poi clicca su \u201cTraduzione automatica\u201d in basso per compilare le altre.',\n                already_voted:\"Hai gi\u00e0 votato oggi! Torna domani \ud83d\ude0a\",\n                closed:'Il concorso \u00e8 attualmente chiuso.',\n                all_countries:'Tutti i paesi',\n                no_photos:'Nessuna foto per ora. Sii il primo a inviare la tua!',\n                filter_label:'Filtra per paese:',\n            },\n        };\n        const T = I18N[LANG] || I18N.fr;\n\n        \/\/ \u2500\u2500 Pays \u2500\u2500\n        const COUNTRIES = [\n            {v:'fr',f:'\ud83c\uddeb\ud83c\uddf7',l:{fr:'France',en:'France',it:'Francia'}},\n            {v:'be',f:'\ud83c\udde7\ud83c\uddea',l:{fr:'Belgique',en:'Belgium',it:'Belgio'}},\n            {v:'ch',f:'\ud83c\udde8\ud83c\udded',l:{fr:'Suisse',en:'Switzerland',it:'Svizzera'}},\n            {v:'it',f:'\ud83c\uddee\ud83c\uddf9',l:{fr:'Italie',en:'Italy',it:'Italia'}},\n            {v:'es',f:'\ud83c\uddea\ud83c\uddf8',l:{fr:'Espagne',en:'Spain',it:'Spagna'}},\n            {v:'pt',f:'\ud83c\uddf5\ud83c\uddf9',l:{fr:'Portugal',en:'Portugal',it:'Portogallo'}},\n            {v:'de',f:'\ud83c\udde9\ud83c\uddea',l:{fr:'Allemagne',en:'Germany',it:'Germania'}},\n            {v:'nl',f:'\ud83c\uddf3\ud83c\uddf1',l:{fr:'Pays-Bas',en:'Netherlands',it:'Paesi Bassi'}},\n            {v:'lu',f:'\ud83c\uddf1\ud83c\uddfa',l:{fr:'Luxembourg',en:'Luxembourg',it:'Lussemburgo'}},\n            {v:'ca',f:'\ud83c\udde8\ud83c\udde6',l:{fr:'Canada',en:'Canada',it:'Canada'}},\n            {v:'ma',f:'\ud83c\uddf2\ud83c\udde6',l:{fr:'Maroc',en:'Morocco',it:'Marocco'}},\n            {v:'sn',f:'\ud83c\uddf8\ud83c\uddf3',l:{fr:'S\u00e9n\u00e9gal',en:'Senegal',it:'Senegal'}},\n            {v:'other',f:'\ud83c\udf0d',l:{fr:'Autre',en:'Other',it:'Altro'}},\n        ];\n        function cName(c){ return (c.l[LANG]||c.l.fr); }\n\n        \/\/ \u2500\u2500 \u00c9tat \u2500\u2500\n        let tab = (VIEW==='submit') ? 'submit' : 'vote';\n        let gallery = [], filterCountry='', votedToday=false;\n        let photoFile=null, photoData=null, photoMime=null;\n        let translating=false, submitting=false;\n        let form={ residence:'', country:'', email:'', comment_fr:'', comment_en:'', comment_it:'' };\n        let voteEmail='';\n\n        function css(){ return `<style>\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700;800;900&family=Poppins:wght@400;500;600&display=swap');\n        #dtc-app *{box-sizing:border-box;}\n        #dtc-app{font-family:'Poppins',sans-serif;}\n        .dtc-wrap{max-width:1100px;margin:0 auto;padding:32px 20px 48px;}\n        .dtc-tabs{display:flex;gap:6px;margin-bottom:32px;background:#f0f0fb;border-radius:50px;padding:5px;width:fit-content;}\n        .dtc-tab{padding:11px 28px;cursor:pointer;font-family:'Montserrat',sans-serif;font-size:13px;font-weight:800;color:#888;border-radius:50px;transition:all .25s;border:none;background:transparent;letter-spacing:.3px;}\n        .dtc-tab.active{background:#5e5ed7;color:#fff;box-shadow:0 4px 14px rgba(94,94,215,.35);}\n        .dtc-tab:hover:not(.active){background:#e2e2f9;color:#5e5ed7;}\n        .dtc-filter{display:flex;align-items:center;gap:12px;margin-bottom:28px;flex-wrap:wrap;}\n        .dtc-filter label{font-family:'Montserrat',sans-serif;font-weight:800;color:#1a1a2e;font-size:13px;text-transform:uppercase;letter-spacing:.8px;}\n        .dtc-filter-pills{display:flex;flex-wrap:wrap;gap:8px;}\n        .dtc-pill-btn{padding:7px 16px;border-radius:50px;border:1.5px solid #e2e2f9;background:#fff;font-size:12px;font-weight:700;color:#888;cursor:pointer;transition:all .2s;font-family:'Poppins',sans-serif;}\n        .dtc-pill-btn.active{background:#5e5ed7;border-color:#5e5ed7;color:#fff;box-shadow:0 3px 10px rgba(94,94,215,.25);}\n        .dtc-pill-btn:hover:not(.active){background:#e2e2f9;border-color:#c5c5f0;color:#5e5ed7;}\n        .dtc-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:24px;}\n        .dtc-card{background:#fff;border-radius:20px;overflow:hidden;box-shadow:0 4px 20px rgba(94,94,215,.09);transition:transform .25s,box-shadow .25s;border:1px solid rgba(94,94,215,.07);}\n        .dtc-card:hover{transform:translateY(-6px);box-shadow:0 14px 40px rgba(94,94,215,.17);}\n        .dtc-card-img-wrap{position:relative;overflow:hidden;}\n        .dtc-card img{width:100%;height:210px;object-fit:cover;display:block;transition:transform .4s ease;}\n        .dtc-card:hover img{transform:scale(1.04);}\n        .dtc-card-rank{position:absolute;top:10px;left:10px;background:rgba(26,26,46,.72);color:#ffeca7;font-family:'Montserrat',sans-serif;font-size:12px;font-weight:900;padding:4px 11px;border-radius:20px;}\n        .dtc-card-flag{position:absolute;top:10px;right:10px;font-size:22px;background:rgba(255,255,255,.92);border-radius:8px;padding:2px 6px;line-height:1.4;}\n        .dtc-card-body{padding:18px;}\n        .dtc-card h3{margin:0 0 6px;font-family:'Montserrat',sans-serif;font-size:15px;font-weight:900;color:#1a1a2e;line-height:1.3;}\n        .dtc-card p{margin:0 0 12px;font-size:13px;color:#64748b;line-height:1.6;}\n        .dtc-langs-badge{display:inline-flex;gap:4px;margin-bottom:12px;}\n        .dtc-lang-dot{font-size:10px;background:#e2e2f9;color:#5e5ed7;border-radius:8px;padding:2px 8px;font-weight:700;}\n        .dtc-vote-zone{background:#f8f8ff;border-radius:14px;padding:14px;}\n        .dtc-vote-top{display:flex;align-items:center;gap:10px;margin-bottom:10px;}\n        .dtc-vote-bubble{background:#5e5ed7;color:#fff;border-radius:50px;padding:6px 14px;display:inline-flex;align-items:center;gap:6px;}\n        .dtc-vote-bubble-num{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;}\n        .dtc-vote-bubble-lbl{font-size:11px;opacity:.85;}\n        .dtc-vote-row{display:flex;gap:8px;align-items:stretch;}\n        .dtc-vote-input{flex:1;padding:9px 13px;border:1.5px solid #dde;border-radius:10px;font-size:13px;outline:none;font-family:'Poppins',sans-serif;transition:border .2s;min-width:0;}\n        .dtc-vote-input:focus{border-color:#5e5ed7;}\n        .dtc-btn{padding:9px 18px;border:none;border-radius:10px;font-size:13px;font-family:'Montserrat',sans-serif;font-weight:800;cursor:pointer;transition:all .2s;}\n        .dtc-btn-vote{background:linear-gradient(135deg,#e73469,#ff6b95);color:#fff;white-space:nowrap;}\n        .dtc-btn-vote:hover{opacity:.88;transform:translateY(-1px);box-shadow:0 4px 14px rgba(231,52,105,.3);}\n        .dtc-btn-vote:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none;}\n        .dtc-promo-box{background:linear-gradient(135deg,#fff8d6,#fffbef);border:2px dashed #ffb600;border-radius:14px;padding:18px;text-align:center;margin-top:12px;}\n        .dtc-promo-label{font-size:12px;color:#8b7000;margin-bottom:4px;font-weight:600;}\n        .dtc-promo-code{font-family:'Montserrat',sans-serif;font-size:24px;font-weight:900;color:#5e5ed7;letter-spacing:4px;}\n        .dtc-promo-sub{font-size:11px;color:#aaa;margin-top:4px;}\n        .dtc-empty{text-align:center;padding:70px 20px;}\n        .dtc-empty-icon{font-size:56px;margin-bottom:16px;display:block;}\n        .dtc-empty-title{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;color:#1a1a2e;margin-bottom:8px;}\n        .dtc-empty-sub{font-size:14px;color:#94a3b8;margin-bottom:24px;}\n        .dtc-empty-btn{background:#5e5ed7;color:#fff;border:none;padding:12px 28px;border-radius:30px;font-family:'Montserrat',sans-serif;font-size:14px;font-weight:800;cursor:pointer;}\n        .dtc-form-wrap{max-width:660px;margin:0 auto;}\n        .dtc-form-header{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);border-radius:20px 20px 0 0;padding:28px 32px;}\n        .dtc-form-header h2{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#fff;margin:0 0 4px;}\n        .dtc-form-header p{font-size:13px;color:rgba(255,255,255,.8);margin:0;}\n        .dtc-form{background:#fff;border-radius:0 0 20px 20px;padding:32px;box-shadow:0 8px 32px rgba(94,94,215,.12);}\n        .dtc-field{margin-bottom:18px;}\n        .dtc-field label{display:block;font-size:12px;font-weight:700;color:#64748b;margin-bottom:6px;text-transform:uppercase;letter-spacing:.6px;}\n        .dtc-field input,.dtc-field select,.dtc-field textarea{width:100%;padding:11px 15px;border:1.5px solid #e2e8f0;border-radius:10px;font-size:14px;font-family:'Poppins',sans-serif;outline:none;transition:border .2s,box-shadow .2s;background:#fff;}\n        .dtc-field input:focus,.dtc-field select:focus,.dtc-field textarea:focus{border-color:#5e5ed7;box-shadow:0 0 0 3px rgba(94,94,215,.1);}\n        .dtc-field textarea{min-height:90px;resize:vertical;}\n        .dtc-photo-zone{border:2px dashed #c5c5f0;border-radius:12px;padding:28px;text-align:center;cursor:pointer;transition:all .2s;background:#fafaff;}\n        .dtc-photo-zone:hover{border-color:#5e5ed7;background:#f0f0ff;}\n        .dtc-photo-zone-icon{font-size:36px;margin-bottom:8px;}\n        .dtc-photo-zone-txt{font-size:13px;color:#94a3b8;}\n        .dtc-photo-preview{width:100%;height:200px;object-fit:cover;border-radius:10px;margin-top:12px;display:none;}\n        .dtc-btn-translate{background:#f0f0ff;color:#5e5ed7;border:1.5px solid #c5c5f0;width:100%;margin-bottom:4px;padding:11px;border-radius:10px;font-size:13px;font-family:'Montserrat',sans-serif;font-weight:800;}\n        .dtc-btn-translate:hover{background:#5e5ed7;color:#fff;border-color:#5e5ed7;}\n        .dtc-btn-submit{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);color:#fff;width:100%;padding:15px;font-size:15px;border-radius:30px;margin-top:12px;letter-spacing:.3px;}\n        .dtc-btn-submit:hover{opacity:.9;transform:translateY(-2px);box-shadow:0 6px 20px rgba(94,94,215,.35);}\n        .dtc-btn-submit:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none;}\n        .dtc-alert{padding:14px 18px;border-radius:12px;margin-bottom:18px;font-size:14px;}\n        .dtc-alert-success{background:#e8fff3;color:#0a6e36;border-left:4px solid #28a745;}\n        .dtc-alert-error{background:#fff0f0;color:#a00;border-left:4px solid #dc3545;}\n        @media(max-width:640px){\n            .dtc-gallery{grid-template-columns:1fr;}\n            .dtc-tabs{width:100%;}\n            .dtc-tab{flex:1;text-align:center;padding:10px 8px;font-size:11px;}\n            .dtc-form-header,.dtc-form{padding:20px;}\n            .dtc-wrap{padding:20px 14px 36px;}\n        }\n        <\/style>`; }\n\n\n        \/\/ \u2500\u2500 Render principal \u2500\u2500\n        function render(){\n            let html = css();\n            html += `<div class=\"dtc-wrap\">`;\n            if (!OPEN){ html += `<div class=\"dtc-alert dtc-alert-error\">${T.closed}<\/div><\/div>`; APP.innerHTML=html; return; }\n            if(VIEW==='all'){\n                html += `<div class=\"dtc-tabs\">`;\n                html += `<div class=\"dtc-tab${tab==='vote'?' active':''}\" onclick=\"dtcSetTab('vote')\">${T.tab_vote}<\/div>`;\n                html += `<div class=\"dtc-tab${tab==='submit'?' active':''}\" onclick=\"dtcSetTab('submit')\">${T.tab_submit}<\/div>`;\n                html += `<\/div>`;\n            }\n            if(tab==='vote' && VIEW!=='submit') html += renderGallery();\n            if(tab==='submit' && VIEW!=='vote') html += renderForm();\n            html += `<\/div>`;\n            APP.innerHTML = html;\n            if(tab==='submit') bindFormEvents();\n        }\n\n        function renderGallery(){\n            const allCountriesUsed = [...new Set(gallery.map(p=>p.country))];\n            const countryPills = allCountriesUsed.map(cv=>{\n                const co = COUNTRIES.find(c=>c.v===cv);\n                return `<button class=\"dtc-pill-btn${filterCountry===cv?' active':''}\" onclick=\"dtcFilter('${cv}')\">${co?co.f:''} ${co?cName(co):cv}<\/button>`;\n            }).join('');\n            let html = `<div class=\"dtc-filter\">\n                <label>${T.filter_label}<\/label>\n                <div class=\"dtc-filter-pills\">\n                    <button class=\"dtc-pill-btn${!filterCountry?' active':''}\" onclick=\"dtcFilter('')\">${T.all_countries}<\/button>\n                    ${countryPills}\n                <\/div>\n            <\/div>`;\n            const filtered = filterCountry ? gallery.filter(p=>p.country===filterCountry) : gallery;\n            if(!filtered.length){\n                return html+`<div class=\"dtc-empty\">\n                    <span class=\"dtc-empty-icon\">\ud83d\udcf8<\/span>\n                    <div class=\"dtc-empty-title\">${T.no_photos}<\/div>\n                    <div class=\"dtc-empty-sub\">${LANG==='fr'?'Les photos appara\u00eetront ici apr\u00e8s validation.':LANG==='it'?'Le foto appariranno qui dopo la convalida.':'Photos will appear here after validation.'}<\/div>\n                    <button class=\"dtc-empty-btn\" onclick=\"dtcSetTab('submit')\">\ud83d\udce4 ${T.tab_submit}<\/button>\n                <\/div>`; }\n            html += `<div class=\"dtc-gallery\">`;\n            filtered.forEach((p,idx)=>{\n                const comment = LANG==='en'?(p.comment_en||p.comment_fr): LANG==='it'?(p.comment_it||p.comment_fr):p.comment_fr;\n                const flag = COUNTRIES.find(c=>c.v===p.country);\n                const rank = idx+1;\n                const medal = rank===1?'\ud83e\udd47':rank===2?'\ud83e\udd48':rank===3?'\ud83e\udd49':'#'+rank;\n                html += `<div class=\"dtc-card\">\n                    <div class=\"dtc-card-img-wrap\">\n                        <img decoding=\"async\" src=\"${p.photo_url}\" alt=\"${p.residence}\" loading=\"lazy\">\n                        <div class=\"dtc-card-rank\">${medal}<\/div>\n                        <div class=\"dtc-card-flag\">${flag?flag.f:'\ud83c\udf0d'}<\/div>\n                    <\/div>\n                    <div class=\"dtc-card-body\">\n                        <h3>${p.residence}<\/h3>\n                        <p>${comment}<\/p>\n                        <div class=\"dtc-langs-badge\">\n                            <span class=\"dtc-lang-dot\">FR<\/span>\n                            <span class=\"dtc-lang-dot\">EN<\/span>\n                            <span class=\"dtc-lang-dot\">IT<\/span>\n                        <\/div>\n                        <div class=\"dtc-vote-zone\">\n                            <div class=\"dtc-vote-top\">\n                                <div class=\"dtc-vote-bubble\">\n                                    <span class=\"dtc-vote-bubble-num\">${p.vote_count}<\/span>\n                                    <span class=\"dtc-vote-bubble-lbl\">${T.votes_label}<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"dtc-vote-row\">\n                                <input class=\"dtc-vote-input\" type=\"email\" id=\"ve-${p.id}\" placeholder=\"${T.email_vote_ph}\">\n                                <button class=\"dtc-btn dtc-btn-vote\" onclick=\"dtcVote(${p.id},'${p.residence}')\">${T.vote_btn}<\/button>\n                            <\/div>\n                            <div id=\"vote-msg-${p.id}\"><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>`;\n            });\n            html += `<\/div>`;\n            return html;\n        }\n\n        function renderForm(){\n            const copts = COUNTRIES.map(c=>`<option value=\"${c.v}\"${form.country===c.v?' selected':''}>${c.f} ${cName(c)}<\/option>`).join('');\n            return `<div class=\"dtc-form-wrap\">\n                <div class=\"dtc-form-header\">\n                    <h2>\ud83d\udcf8 ${T.tab_submit}<\/h2>\n                    <p>${LANG==='fr'?'Partagez vos photos et faites voter la communaut\u00e9 !':LANG==='it'?'Condividi le tue foto e fai votare la community!':'Share your photos and let the community vote!'}<\/p>\n                <\/div>\n                <div class=\"dtc-form\">\n                    <div id=\"submit-alert\"><\/div>\n                    <div class=\"dtc-field\"><label>${T.name_ph}<\/label>\n                        <input type=\"text\" id=\"f-residence\" value=\"${form.residence}\" placeholder=\"${LANG==='fr'?'Ex : R\u00e9sidence Les Lilas, Paris':LANG==='it'?'Es: Residenza Le Rose, Milano':'E.g. Sunrise Care Home, London'}\"><\/div>\n                    <div class=\"dtc-field\"><label>${T.country_ph}<\/label>\n                        <select id=\"f-country\"><option value=\"\">${T.country_ph}<\/option>${copts}<\/select><\/div>\n                    <div class=\"dtc-field\"><label>${T.email_ph}<\/label>\n                        <input type=\"email\" id=\"f-email\" value=\"${form.email}\" placeholder=\"contact@maresidence.fr\"><\/div>\n                    <div class=\"dtc-field\"><label>${T.photo_label}<\/label>\n                        <div class=\"dtc-photo-zone\" onclick=\"document.getElementById('f-photo').click()\">\n                            <div class=\"dtc-photo-zone-icon\">\ud83d\uddbc\ufe0f<\/div>\n                            <div class=\"dtc-photo-zone-txt\">${LANG==='fr'?'Cliquer pour choisir une photo (JPG\/PNG, max 8 Mo)':LANG==='it'?'Clicca per scegliere una foto (JPG\/PNG, max 8 MB)':'Click to choose a photo (JPG\/PNG, max 8 MB)'}<\/div>\n                        <\/div>\n                        <input type=\"file\" id=\"f-photo\" accept=\"image\/*\" style=\"display:none;\">\n                        <img id=\"f-preview\" class=\"dtc-photo-preview\">\n                    <\/div>\n                    <p style=\"font-size:13px;color:#5e5ed7;background:#f0f0ff;border-radius:10px;padding:10px 14px;margin:0 0 14px;line-height:1.5;\">${T.caption_hint}<\/p>\n                    <div class=\"dtc-field\"><label>${T.comment_fr_label}<\/label>\n                        <textarea id=\"f-comment-fr\" placeholder=\"D\u00e9crivez votre photo en quelques mots...\">${form.comment_fr}<\/textarea><\/div>\n                    <div class=\"dtc-field\"><label>${T.comment_en_label}<\/label>\n                        <textarea id=\"f-comment-en\" placeholder=\"Describe your photo in a few words...\">${form.comment_en}<\/textarea><\/div>\n                    <div class=\"dtc-field\"><label>${T.comment_it_label}<\/label>\n                        <textarea id=\"f-comment-it\" placeholder=\"Descrivi la tua foto in poche parole...\">${form.comment_it}<\/textarea><\/div>\n                    <button class=\"dtc-btn dtc-btn-translate\" id=\"btn-translate\" onclick=\"dtcTranslate()\">${translating?T.translating:T.translate_btn}<\/button>\n                    <button class=\"dtc-btn dtc-btn-submit\" id=\"btn-submit\" onclick=\"dtcSubmit()\">${submitting?T.submitting:T.submit_btn}<\/button>\n                <\/div>\n            <\/div>`;\n        }\n\n\n        function bindFormEvents(){\n            const photo = document.getElementById('f-photo');\n            if(photo) photo.onchange = function(){\n                const file = this.files[0]; if(!file) return;\n                photoFile = file; photoMime = file.type;\n                const reader = new FileReader();\n                reader.onload = e => {\n                    photoData = e.target.result;\n                    const prev = document.getElementById('f-preview');\n                    if(prev){ prev.src=photoData; prev.style.display='block'; }\n                };\n                reader.readAsDataURL(file);\n            };\n\n            \/\/ restore a photo if one was chosen after translation\n            if(photoData){\n                const prev = document.getElementById('f-preview');\n                if(prev){ prev.src = photoData; prev.style.display = 'block'; }\n            }\n        }\n\n        \/\/ \u2500\u2500 Actions globales \u2500\u2500\n        window.dtcSetTab = t => { tab=t; render(); };\n        window.dtcFilter = v => { filterCountry=v; render(); };\n\n        window.dtcTranslate = async function(){\n            \/\/saves any previously entered information so the translation doesnt erase it\n            form.residence = document.getElementById('f-residence')?.value?.trim()||'';\n            form.country = document.getElementById('f-country')?.value||'';\n            form.email = document.getElementById('f-email')?.value?.trim()||'';\n            \n            \/\/ Read all three fields first so nothing typed is lost on re-render\n            form.comment_fr = document.getElementById('f-comment-fr')?.value?.trim()||'';\n            form.comment_en = document.getElementById('f-comment-en')?.value?.trim()||'';\n            form.comment_it = document.getElementById('f-comment-it')?.value?.trim()||'';\n            \/\/ Detect the source: first non-empty field wins (fr > en > it)\n            let from='', txt='';\n            if(form.comment_fr){ from='fr'; txt=form.comment_fr; }\n            else if(form.comment_en){ from='en'; txt=form.comment_en; }\n            else if(form.comment_it){ from='it'; txt=form.comment_it; }\n            if(!txt) return;\n            translating=true; render();\n            try {\n                const r = await fetch(REST+'\/translate',{method:'POST',headers:{'Content-Type':'application\/json','X-WP-Nonce':NONCE},body:JSON.stringify({text:txt,from:from})});\n                const d = await r.json();\n                form.comment_fr = d.fr || form.comment_fr || txt;\n                form.comment_en = d.en || form.comment_en || txt;\n                form.comment_it = d.it || form.comment_it || txt;\n            } catch(e){}\n            translating=false; render();\n        };\n\n        window.dtcSubmit = async function(){\n            form.residence = document.getElementById('f-residence')?.value?.trim()||'';\n            form.country   = document.getElementById('f-country')?.value||'';\n            form.email     = document.getElementById('f-email')?.value?.trim()||'';\n            form.comment_fr= document.getElementById('f-comment-fr')?.value?.trim()||'';\n            form.comment_en= document.getElementById('f-comment-en')?.value?.trim()||'';\n            form.comment_it= document.getElementById('f-comment-it')?.value?.trim()||'';\n            const alert = document.getElementById('submit-alert');\n            const hasCaption = form.comment_fr || form.comment_en || form.comment_it;\n            if(!form.residence||!form.country||!form.email||!hasCaption||!photoData){\n                const errMsg = LANG==='en'?'\u26a0\ufe0f Please fill in all required fields, add a caption in at least one language, and choose a photo.'\n                    : LANG==='it'?'\u26a0\ufe0f Compila tutti i campi obbligatori, aggiungi una didascalia in almeno una lingua e scegli una foto.'\n                    : '\u26a0\ufe0f Veuillez remplir tous les champs obligatoires, ajouter un commentaire dans au moins une langue et choisir une photo.';\n                alert.innerHTML=`<div class=\"dtc-alert dtc-alert-error\">${errMsg}<\/div>`; return;\n            }\n            submitting=true; render();\n            try {\n                const r = await fetch(REST+'\/submit',{method:'POST',headers:{'Content-Type':'application\/json','X-WP-Nonce':NONCE},\n                    body:JSON.stringify({...form,lang:LANG,photo_data:photoData,photo_mime:photoMime})});\n                const d = await r.json();\n                if(d.success){\n                    form={residence:'',country:'',email:'',comment_fr:'',comment_en:'',comment_it:''}; photoData=null;\n                    submitting=false;\n                    APP.innerHTML=css()+`<div class=\"dtc-wrap\"><div class=\"dtc-alert dtc-alert-success\" style=\"font-size:16px;\">\u2705 ${d.message}<\/div><\/div>`;\n                    return;\n                } else {\n                    submitting=false; render();\n                    document.getElementById('submit-alert').innerHTML=`<div class=\"dtc-alert dtc-alert-error\">\u26a0\ufe0f ${d.message||'Erreur'}<\/div>`;\n                }\n            } catch(e){ submitting=false; render(); }\n        };\n\n        window.dtcVote = async function(id, residence){\n            const emailEl = document.getElementById('ve-'+id);\n            const msgEl   = document.getElementById('vote-msg-'+id);\n            const email   = emailEl?.value?.trim();\n            if(!email||!email.includes('@')){ if(msgEl) msgEl.innerHTML=`<div class=\"dtc-alert dtc-alert-error\" style=\"margin-top:8px;\">\u26a0\ufe0f Email requis<\/div>`; return; }\n            if(msgEl) msgEl.innerHTML=`<div style=\"color:#aaa;font-size:13px;margin-top:6px;\">\u23f3 ${T.voting}<\/div>`;\n            try {\n                const r = await fetch(REST+'\/vote',{method:'POST',headers:{'Content-Type':'application\/json','X-WP-Nonce':NONCE},\n                    body:JSON.stringify({submission_id:id,voter_email:email,voter_country:'',voter_lang:LANG})});\n                const d = await r.json();\n                if(d.success){\n                    \/\/ Mettre \u00e0 jour le compteur local\n                    const p = gallery.find(x=>x.id==id); if(p) p.vote_count++;\n                    if(msgEl) msgEl.innerHTML=`<div class=\"dtc-promo-box\"><p style=\"margin:0 0 4px;font-size:13px;color:#555;\">\ud83c\udf89 ${d.message}<\/p><div class=\"dtc-promo-code\">${d.promo_code}<\/div><\/div>`;\n                    if(emailEl) emailEl.disabled=true;\n                    document.querySelectorAll('.dtc-btn-vote').forEach(b=>b.disabled=true);\n                } else {\n                    if(msgEl) msgEl.innerHTML=`<div class=\"dtc-alert dtc-alert-error\" style=\"margin-top:8px;\">${d.message||T.already_voted}<\/div>`;\n                }\n            } catch(e){ if(msgEl) msgEl.innerHTML=`<div class=\"dtc-alert dtc-alert-error\" style=\"margin-top:8px;\">Erreur r\u00e9seau.<\/div>`; }\n        };\n\n        \/\/ \u2500\u2500 Init \u2500\u2500\n        async function loadGallery(){\n            try {\n                const url = filterCountry ? REST+'\/gallery?country='+filterCountry : REST+'\/gallery';\n                const r = await fetch(url);\n                gallery = await r.json();\n            } catch(e){ gallery=[]; }\n            render();\n        }\n        loadGallery();\n    })();\n    <\/script>\n        <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@700;800;900&family=Poppins:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n    <div id=\"dtc-ranking-widget\" data-rest=\"https:\/\/www.dynseo.com\/en\/wp-json\/dynseo\/v1\/tc-photo\"><\/div>\n    <script>\n    (function(){\n        const W    = document.getElementById('dtc-ranking-widget');\n        const REST = W.dataset.rest;\n        const FORCED = \"en\";\n        const LANG   = FORCED || (['fr','en','it'].includes((navigator.language||'').substring(0,2)) ? (navigator.language||'').substring(0,2) : 'fr');\n\n        const T = {\n            fr: { title:'\ud83c\udfc6 Classement des photos', participant:'Participant', country:'Pays', votes:'Votes', empty_title:'Le classement arrive bient\u00f4t !', empty_sub:'Les votes s\\'ouvrent d\u00e8s que les premi\u00e8res photos sont soumises et valid\u00e9es. Soyez le premier \u00e0 participer !', loading:'Chargement\u2026', error:'Erreur de chargement.' },\n            en: { title:'\ud83c\udfc6 Photo rankings', participant:'Participant', country:'Country', votes:'Votes', empty_title:'Rankings coming soon!', empty_sub:'Votes open as soon as the first photos are submitted and validated. Be the first to take part!', loading:'Loading\u2026', error:'Loading error.' },\n            it: { title:'\ud83c\udfc6 Classifica delle foto', participant:'Partecipante', country:'Paese', votes:'Voti', empty_title:'La classifica arriva presto!', empty_sub:'Le votazioni si aprono non appena le prime foto vengono inviate e validate. Sii il primo a partecipare!', loading:'Caricamento\u2026', error:'Errore di caricamento.' },\n        };\n        const t = T[LANG] || T.fr;\n\n        const FLAGS = {fr:'\ud83c\uddeb\ud83c\uddf7',be:'\ud83c\udde7\ud83c\uddea',ch:'\ud83c\udde8\ud83c\udded',it:'\ud83c\uddee\ud83c\uddf9',es:'\ud83c\uddea\ud83c\uddf8',pt:'\ud83c\uddf5\ud83c\uddf9',de:'\ud83c\udde9\ud83c\uddea',nl:'\ud83c\uddf3\ud83c\uddf1',lu:'\ud83c\uddf1\ud83c\uddfa',ca:'\ud83c\udde8\ud83c\udde6',ma:'\ud83c\uddf2\ud83c\udde6',sn:'\ud83c\uddf8\ud83c\uddf3'};\n\n        \/\/ \u00c9tat vide styl\u00e9\n        function renderEmpty(){\n            return `<style>\n            .dtc-rank-wrap{font-family:'Poppins',sans-serif;max-width:800px;margin:0 auto;padding:20px 0;}\n            .dtc-rank-header{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);border-radius:20px 20px 0 0;padding:24px 32px;display:flex;align-items:center;gap:14px;}\n            .dtc-rank-header-title{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#fff;margin:0;}\n            .dtc-rank-empty{background:#fff;border-radius:0 0 20px 20px;box-shadow:0 8px 32px rgba(94,94,215,.1);padding:60px 32px;text-align:center;}\n            .dtc-rank-empty-icon{font-size:60px;display:block;margin-bottom:20px;}\n            .dtc-rank-empty-title{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#1a1a2e;margin-bottom:10px;}\n            .dtc-rank-empty-sub{font-size:14px;color:#94a3b8;max-width:420px;margin:0 auto 32px;line-height:1.7;}\n            .dtc-rank-empty-rows{display:flex;flex-direction:column;gap:10px;max-width:480px;margin:0 auto;}\n            .dtc-rank-empty-row{background:#f8f8ff;border-radius:12px;padding:14px 18px;display:flex;align-items:center;gap:14px;border:1px solid rgba(94,94,215,.07);}\n            .dtc-rank-empty-medal{font-size:24px;width:36px;text-align:center;flex-shrink:0;}\n            .dtc-rank-empty-bar{flex:1;height:12px;background:#e8e8f5;border-radius:6px;overflow:hidden;}\n            .dtc-rank-empty-fill{height:100%;background:linear-gradient(90deg,#d0d0f0,#e8e8fa);border-radius:6px;}\n            .dtc-rank-empty-num{font-family:'Montserrat',sans-serif;font-size:13px;font-weight:900;color:#c5c5e8;min-width:28px;text-align:right;}\n            <\/style>\n            <div class=\"dtc-rank-wrap\">\n                <div class=\"dtc-rank-header\"><h2 class=\"dtc-rank-header-title\">${t.title}<\/h2><\/div>\n                <div class=\"dtc-rank-empty\">\n                    <span class=\"dtc-rank-empty-icon\">\ud83c\udfc6<\/span>\n                    <div class=\"dtc-rank-empty-title\">${t.empty_title}<\/div>\n                    <p class=\"dtc-rank-empty-sub\">${t.empty_sub}<\/p>\n                    <div class=\"dtc-rank-empty-rows\">\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\">\ud83e\udd47<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:90%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\">\ud83e\udd48<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:65%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\">\ud83e\udd49<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:45%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\" style=\"color:#c5c5e8;font-size:16px;font-weight:900;font-family:'Montserrat',sans-serif;\">4<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:28%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                        <div class=\"dtc-rank-empty-row\"><div class=\"dtc-rank-empty-medal\" style=\"color:#c5c5e8;font-size:16px;font-weight:900;font-family:'Montserrat',sans-serif;\">5<\/div><div class=\"dtc-rank-empty-bar\"><div class=\"dtc-rank-empty-fill\" style=\"width:14%\"><\/div><\/div><div class=\"dtc-rank-empty-num\">\u2014<\/div><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>`;\n        }\n\n        function renderRanking(sorted){\n            const max = sorted[0].vote_count || 1;\n            return `<style>\n            .dtc-rank-wrap{font-family:'Poppins',sans-serif;max-width:800px;margin:0 auto;padding:20px 0;}\n            .dtc-rank-header{background:linear-gradient(135deg,#5e5ed7,#a9e2e4);border-radius:20px 20px 0 0;padding:24px 32px;}\n            .dtc-rank-header-title{font-family:'Montserrat',sans-serif;font-size:20px;font-weight:900;color:#fff;margin:0;}\n            .dtc-rank-table{background:#fff;border-radius:0 0 20px 20px;box-shadow:0 8px 32px rgba(94,94,215,.1);overflow:hidden;}\n            .dtc-rank-row{display:grid;grid-template-columns:56px 1fr 60px 80px 140px;align-items:center;padding:14px 20px;border-bottom:1px solid rgba(94,94,215,.06);transition:background .15s;}\n            .dtc-rank-row:last-child{border-bottom:none;}\n            .dtc-rank-row:hover{background:#fafaff;}\n            .dtc-rank-thead{background:#f4f4fd;font-family:'Montserrat',sans-serif;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;color:#94a3b8;}\n            .dtc-rank-thead .dtc-rank-row{padding:10px 20px;}\n            .dtc-rank-medal{font-size:22px;text-align:center;}\n            .dtc-rank-num{font-family:'Montserrat',sans-serif;font-size:14px;font-weight:900;color:#c5c5e8;text-align:center;}\n            .dtc-rank-name{font-family:'Montserrat',sans-serif;font-size:14px;font-weight:800;color:#1a1a2e;}\n            .dtc-rank-flag{font-size:22px;text-align:center;}\n            .dtc-rank-count{font-family:'Montserrat',sans-serif;font-size:18px;font-weight:900;color:#5e5ed7;text-align:center;}\n            .dtc-rank-bar-wrap{padding-right:8px;}\n            .dtc-rank-bar{background:#e8e8f5;border-radius:6px;height:10px;overflow:hidden;}\n            .dtc-rank-bar-fill{height:100%;background:linear-gradient(90deg,#5e5ed7,#a9e2e4);border-radius:6px;transition:width .4s ease;}\n            @media(max-width:540px){\n                .dtc-rank-row{grid-template-columns:44px 1fr 44px 60px;}\n                .dtc-rank-bar-wrap{display:none;}\n                .dtc-rank-thead .dtc-rank-bar-wrap{display:none;}\n            }\n            <\/style>\n            <div class=\"dtc-rank-wrap\">\n                <div class=\"dtc-rank-header\"><h2 class=\"dtc-rank-header-title\">${t.title}<\/h2><\/div>\n                <div class=\"dtc-rank-table\">\n                    <div class=\"dtc-rank-thead\">\n                        <div class=\"dtc-rank-row\">\n                            <div>#<\/div>\n                            <div>${t.participant}<\/div>\n                            <div style=\"text-align:center;\">${t.country}<\/div>\n                            <div style=\"text-align:center;\">${t.votes}<\/div>\n                            <div class=\"dtc-rank-bar-wrap\"><\/div>\n                        <\/div>\n                    <\/div>\n                    ${sorted.map((p,i)=>{\n                        const medal = i===0?'\ud83e\udd47':i===1?'\ud83e\udd48':i===2?'\ud83e\udd49':'';\n                        const num   = medal ? `<div class=\"dtc-rank-medal\">${medal}<\/div>` : `<div class=\"dtc-rank-num\">${i+1}<\/div>`;\n                        const flag  = FLAGS[p.country] || '\ud83c\udf0d';\n                        const pct   = Math.round(p.vote_count\/max*100);\n                        return `<div class=\"dtc-rank-row\">\n                            ${num}\n                            <div class=\"dtc-rank-name\">${p.residence}<\/div>\n                            <div class=\"dtc-rank-flag\">${flag}<\/div>\n                            <div class=\"dtc-rank-count\">${p.vote_count}<\/div>\n                            <div class=\"dtc-rank-bar-wrap\"><div class=\"dtc-rank-bar\"><div class=\"dtc-rank-bar-fill\" style=\"width:${pct}%\"><\/div><\/div><\/div>\n                        <\/div>`;\n                    }).join('')}\n                <\/div>\n            <\/div>`;\n        }\n\n        \/\/ Afficher l'\u00e9tat vide pendant le chargement\n        W.innerHTML = renderEmpty();\n\n        fetch(REST+'\/gallery')\n            .then(r=>r.json())\n            .then(data=>{\n                const approved = data.filter(p=>parseInt(p.vote_count)>=0);\n                if(!approved.length){ return; } \/\/ garde l'\u00e9tat vide\n                const sorted = approved.sort((a,b)=>b.vote_count-a.vote_count).slice(0,10);\n                W.innerHTML = renderRanking(sorted);\n            })\n            .catch(()=>{ W.innerHTML = `<p style=\"color:#aaa;text-align:center;padding:40px;\">${t.error}<\/p>`; });\n    })();\n    <\/script>\n    <\/p>\n","protected":false},"author":4,"featured_media":376182,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-686341","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Crowd Favorite Price- TOPCULTURE - DYNSEO - Educational apps &amp; brain training apps for all<\/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\/en\/crowdfavoriteprice\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crowd Favorite Price- TOPCULTURE - DYNSEO - Educational apps &amp; brain training apps for all\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/\" \/>\n<meta property=\"og:site_name\" content=\"DYNSEO - Educational apps &amp; brain training apps for all\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-01T13:02:05+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=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/\",\"name\":\"Crowd Favorite Price- TOPCULTURE - DYNSEO - Educational apps &amp; brain training apps for all\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/#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-06-01T11:57:12+00:00\",\"dateModified\":\"2026-06-01T13:02:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/#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\":\"Maintain your mental agility with our fun and enriching activities\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/crowdfavoriteprice\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Crowd Favorite Price- TOPCULTURE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/\",\"name\":\"Jeux de m\u00e9moire et stimulation cognitive\",\"description\":\"DYNSEO, and your brain is a new hero!\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/#organization\",\"name\":\"DYNSEO\",\"url\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dynseo.com\\\/en\\\/#\\\/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\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crowd Favorite Price- TOPCULTURE - DYNSEO - Educational apps &amp; brain training apps for all","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\/en\/crowdfavoriteprice\/","og_locale":"en_US","og_type":"article","og_title":"Crowd Favorite Price- TOPCULTURE - DYNSEO - Educational apps &amp; brain training apps for all","og_url":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/","og_site_name":"DYNSEO - Educational apps &amp; brain training apps for all","article_modified_time":"2026-06-01T13:02:05+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":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/","url":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/","name":"Crowd Favorite Price- TOPCULTURE - DYNSEO - Educational apps &amp; brain training apps for all","isPartOf":{"@id":"https:\/\/www.dynseo.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/#primaryimage"},"image":{"@id":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/#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-06-01T11:57:12+00:00","dateModified":"2026-06-01T13:02:05+00:00","breadcrumb":{"@id":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/#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":"Maintain your mental agility with our fun and enriching activities"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dynseo.com\/en\/crowdfavoriteprice\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dynseo.com\/en\/"},{"@type":"ListItem","position":2,"name":"Crowd Favorite Price- TOPCULTURE"}]},{"@type":"WebSite","@id":"https:\/\/www.dynseo.com\/en\/#website","url":"https:\/\/www.dynseo.com\/en\/","name":"Jeux de m\u00e9moire et stimulation cognitive","description":"DYNSEO, and your brain is a new hero!","publisher":{"@id":"https:\/\/www.dynseo.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dynseo.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dynseo.com\/en\/#organization","name":"DYNSEO","url":"https:\/\/www.dynseo.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dynseo.com\/en\/#\/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\/en\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/pages\/686341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/comments?post=686341"}],"version-history":[{"count":2,"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/pages\/686341\/revisions"}],"predecessor-version":[{"id":686472,"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/pages\/686341\/revisions\/686472"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/media\/376182"}],"wp:attachment":[{"href":"https:\/\/www.dynseo.com\/en\/wp-json\/wp\/v2\/media?parent=686341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}