422 lines
44 KiB
HTML
422 lines
44 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>WEVIA — Agent Avatar Picker (SSOT)</title>
|
||
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@700;900&family=Nunito:wght@600;700;800&display=swap" rel="stylesheet">
|
||
<script src="https://cdn.jsdelivr.net/npm/@twemoji/api@latest/dist/twemoji.min.js" crossorigin="anonymous"></script>
|
||
<style>
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
body{background:#050a18;color:#e2e8f0;font-family:Nunito,sans-serif;min-height:100vh}
|
||
.hdr{background:linear-gradient(135deg,#0f1629,#1a2035);padding:14px 20px;border-bottom:1px solid rgba(6,182,212,.2);position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px}
|
||
.hdr h1{font:900 15px Orbitron;color:#06b6d4;letter-spacing:1px}
|
||
.nav{display:flex;gap:8px;font-size:11px;flex-wrap:wrap}
|
||
.nav a{color:#94a3b8;text-decoration:none;padding:4px 10px;border-radius:6px;border:1px solid rgba(255,255,255,.08)}
|
||
.nav a:hover{color:#06b6d4;border-color:#06b6d4}
|
||
.bar{padding:10px 20px;background:#0a0f1e;border-bottom:1px solid rgba(255,255,255,.04);display:flex;gap:8px;align-items:center;flex-wrap:wrap}
|
||
.fb{padding:5px 14px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:none;color:#94a3b8;font:700 10px Nunito;cursor:pointer;letter-spacing:1px;transition:.15s}
|
||
.fb.ac{border-color:#06b6d4;background:rgba(6,182,212,.12);color:#06b6d4}
|
||
.search{flex:1;min-width:200px;padding:6px 12px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.3);color:#e2e8f0;font:600 11px Nunito;outline:none}
|
||
.stats{font-size:10px;color:#64748b}
|
||
.stats b{color:#06b6d4}
|
||
.grid{padding:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}
|
||
.card{background:#0f1629;border:1.5px solid rgba(255,255,255,.06);border-radius:12px;padding:14px;display:flex;flex-direction:column;align-items:center;gap:8px;transition:.15s;cursor:pointer}
|
||
.card:hover{transform:translateY(-2px);border-color:#06b6d4;box-shadow:0 4px 16px rgba(6,182,212,.15)}
|
||
.card.master{border-color:rgba(255,215,0,.5);background:linear-gradient(135deg,#1a1410,#0f1629)}
|
||
.card.human{border-color:rgba(74,222,128,.3)}
|
||
.card.tool{border-color:rgba(139,92,246,.3)}
|
||
.card.gap{box-shadow:0 0 14px rgba(34,211,238,.15);border-color:#22d3ee}
|
||
.av{width:72px;height:72px;display:flex;align-items:center;justify-content:center;font-size:42px;line-height:1;border-radius:50%;background:rgba(255,255,255,.05);border:2.5px solid;flex-shrink:0;overflow:hidden}
|
||
.av img.emoji{width:46px;height:46px;object-fit:contain;margin:0}
|
||
.card.master .av img.emoji{width:56px;height:56px}
|
||
.modal .pav img.emoji{width:44px;height:44px;object-fit:contain;margin:0}
|
||
.modal .emo-grid button img.emoji{width:22px;height:22px;object-fit:contain;margin:0}
|
||
.card.master .av{border-color:rgba(255,215,0,.65);background:rgba(255,215,0,.08);width:84px;height:84px;font-size:50px}
|
||
.card.human .av{border-color:rgba(74,222,128,.5);background:rgba(74,222,128,.06)}
|
||
.card.tool .av{border-color:rgba(139,92,246,.5);background:rgba(139,92,246,.08)}
|
||
.nm{font-weight:800;font-size:12px;text-align:center;color:#e2e8f0;line-height:1.2;max-width:160px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
|
||
.meta{display:flex;gap:4px;align-items:center;font-size:9px;color:#64748b;flex-wrap:wrap;justify-content:center}
|
||
.tag{padding:1px 6px;border-radius:3px;background:rgba(255,255,255,.06);font-weight:700;letter-spacing:.5px;text-transform:uppercase}
|
||
.tag.gap{background:rgba(34,211,238,.15);color:#22d3ee}
|
||
.tag.role{background:rgba(255,255,255,.04);color:#94a3b8}
|
||
.empty{text-align:center;padding:40px;color:#64748b;font-size:12px}
|
||
/* === WAVE-273 AVATAR EDIT MODE (doctrine UX zero chevauchement) === */
|
||
.card.editmode{cursor:pointer;position:relative}
|
||
.card.editmode::after{content:'✎';position:absolute;top:6px;right:6px;background:rgba(255,193,7,.18);color:#ffc107;border-radius:50%;width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;border:1px solid rgba(255,193,7,.4);opacity:0;transition:.15s}
|
||
.card.editmode:hover::after{opacity:1}
|
||
.fb#editToggle[data-edit=on]{border-color:#ffc107!important;background:rgba(255,193,7,.14);color:#ffc107}
|
||
.editbanner{display:none;background:linear-gradient(90deg,rgba(255,193,7,.08),transparent);border-bottom:1px solid rgba(255,193,7,.25);padding:8px 20px;font-size:11px;color:#ffc107;font-weight:700;letter-spacing:.5px}
|
||
.editbanner.on{display:block}
|
||
.editbanner small{color:#94a3b8;font-weight:500;letter-spacing:0;margin-left:10px}
|
||
/* Modal overlay centré (doctrine zero chevauchement top/bottom right) */
|
||
.modal-bd{position:fixed;inset:0;background:rgba(3,7,18,.8);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:1000;padding:20px}
|
||
.modal-bd.open{display:flex}
|
||
.modal{background:linear-gradient(135deg,#0f1629,#1a2035);border:1.5px solid rgba(6,182,212,.35);border-radius:16px;padding:20px;max-width:560px;width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.6)}
|
||
.modal h2{font:800 14px Orbitron,sans-serif;color:#06b6d4;margin-bottom:14px;letter-spacing:.8px;display:flex;align-items:center;gap:10px;justify-content:space-between}
|
||
.modal .mclose{background:none;border:none;color:#94a3b8;font-size:22px;cursor:pointer;line-height:1;padding:0 6px}
|
||
.modal .mclose:hover{color:#ef4444}
|
||
.modal .preview{display:flex;align-items:center;gap:12px;padding:14px;background:rgba(6,182,212,.04);border-radius:10px;margin-bottom:14px;border:1px solid rgba(6,182,212,.15)}
|
||
.modal .preview .pav{width:64px;height:64px;border-radius:50%;background:rgba(255,255,255,.06);border:2px solid rgba(6,182,212,.45);display:flex;align-items:center;justify-content:center;font-size:38px;line-height:1;overflow:hidden;flex-shrink:0}
|
||
.modal .preview .pav img{width:100%;height:100%;object-fit:cover;border-radius:50%}
|
||
.modal .preview .pinfo{flex:1;min-width:0}
|
||
.modal .preview .pname{font-weight:800;font-size:13px;color:#e2e8f0;word-break:break-word}
|
||
.modal .preview .pmeta{font-size:10px;color:#94a3b8;margin-top:3px}
|
||
.modal .sec{margin-bottom:12px}
|
||
.modal .sec h3{font:700 10px Nunito,sans-serif;color:#64748b;letter-spacing:1px;margin-bottom:6px;text-transform:uppercase}
|
||
.modal .emo-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:4px;max-height:200px;overflow-y:auto;padding:6px;background:rgba(0,0,0,.3);border-radius:8px;border:1px solid rgba(255,255,255,.05)}
|
||
.modal .emo-grid button{background:rgba(255,255,255,.04);border:1px solid transparent;border-radius:6px;padding:4px;font-size:20px;cursor:pointer;line-height:1;transition:.1s}
|
||
.modal .emo-grid button:hover{background:rgba(6,182,212,.15);border-color:rgba(6,182,212,.4);transform:scale(1.1)}
|
||
.modal .emo-grid button.sel{background:rgba(6,182,212,.25);border-color:#06b6d4}
|
||
.modal .emo-input{width:100%;padding:8px 12px;border-radius:8px;border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.3);color:#e2e8f0;font-size:14px;outline:none}
|
||
.modal .emo-input:focus{border-color:#06b6d4}
|
||
.modal .url-input{width:100%;padding:7px 10px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.3);color:#e2e8f0;font:600 10px monospace;outline:none}
|
||
.modal .url-input:focus{border-color:#06b6d4}
|
||
.modal .actions{display:flex;gap:8px;margin-top:16px;justify-content:flex-end;flex-wrap:wrap}
|
||
.modal .actions .btn{padding:8px 16px;border-radius:8px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);color:#94a3b8;font:700 11px Nunito,sans-serif;cursor:pointer;letter-spacing:.5px}
|
||
.modal .actions .btn:hover{background:rgba(255,255,255,.08)}
|
||
.modal .actions .btn.primary{background:linear-gradient(135deg,#06b6d4,#8b5cf6);color:#fff;border-color:transparent}
|
||
.modal .actions .btn.primary:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(6,182,212,.4)}
|
||
.modal .actions .btn.primary:disabled{opacity:.5;cursor:wait}
|
||
.modal .status{font-size:11px;padding:6px 10px;border-radius:6px;margin-top:8px;display:none}
|
||
.modal .status.ok{display:block;background:rgba(34,197,94,.12);color:#4ade80;border:1px solid rgba(34,197,94,.3)}
|
||
.modal .status.err{display:block;background:rgba(239,68,68,.12);color:#f87171;border:1px solid rgba(239,68,68,.3)}
|
||
.modal .status.loading{display:block;background:rgba(6,182,212,.12);color:#06b6d4;border:1px solid rgba(6,182,212,.3)}
|
||
.modal .cat-tabs{display:flex;gap:4px;margin-bottom:6px;flex-wrap:wrap}
|
||
.modal .cat-tabs button{padding:3px 8px;font-size:9px;font-weight:700;border-radius:4px;border:1px solid rgba(255,255,255,.08);background:none;color:#64748b;cursor:pointer;letter-spacing:.5px}
|
||
.modal .cat-tabs button.ac{background:rgba(6,182,212,.12);border-color:#06b6d4;color:#06b6d4}
|
||
</style> <script src="/js/wevia-a11y-auto.js" defer></script>
|
||
</head><body>
|
||
<!-- BETON-DOCTRINE-101 dual-dummy block (pages pub) -->
|
||
<div id="weval-global-logout" style="display:none!important;visibility:hidden!important" aria-hidden="true" data-beton-101="dummy-to-block-auto-injection"></div>
|
||
<a id="weval-gl" href="#" style="display:none!important;visibility:hidden!important" aria-hidden="true" data-beton-101="dummy-to-block-auto-injection" tabindex="-1"></a>
|
||
|
||
<div class="hdr">
|
||
<h1>🎨 AGENT AVATAR PICKER · SSOT v2.json</h1>
|
||
<div class="nav">
|
||
<a href="/agents-archi.html">← Architecture 3D</a>
|
||
<a href="/wevia-meeting-rooms.html">Meeting Rooms</a>
|
||
<a href="/enterprise-model.html">Enterprise</a>
|
||
<a href="/agents-fleet.html">Fleet</a>
|
||
</div>
|
||
</div>
|
||
<div class="bar">
|
||
<button class="fb ac" data-f="all">ALL</button>
|
||
<button class="fb" data-f="master">MASTER</button>
|
||
<button class="fb" data-f="human">HUMAN</button>
|
||
<button class="fb" data-f="tool">TOOL</button>
|
||
<button class="fb" data-f="gap">GAP ONLY</button>
|
||
<button class="fb" id="editToggle" data-edit="off" style="border-color:rgba(255,193,7,.35);color:#ffc107" title="Active l'édition : clique sur un agent pour changer son avatar">✎ ÉDITION</button>
|
||
<input class="search" id="srch" placeholder="🔍 Search agent...">
|
||
<div class="stats" id="stats">Loading...</div>
|
||
</div>
|
||
<div class="editbanner" id="editBanner">MODE ÉDITION ACTIF <small>Clique sur un agent pour changer son avatar · ESC pour fermer</small></div>
|
||
<div class="grid" id="G"><div class="empty">Loading SSOT (agent-avatars-v2.json)...</div></div>
|
||
|
||
<!-- Modal picker (WAVE-273 zero chevauchement top/bottom-right) -->
|
||
<div class="modal-bd" id="modalBd" role="dialog" aria-labelledby="mTitle" aria-modal="true">
|
||
<div class="modal">
|
||
<h2 id="mTitle">✎ Changer l'avatar <button class="mclose" onclick="closeModal()" aria-label="Fermer">×</button></h2>
|
||
<div class="preview">
|
||
<div class="pav" id="pav">?</div>
|
||
<div class="pinfo">
|
||
<div class="pname" id="pname">—</div>
|
||
<div class="pmeta" id="pmeta"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sec">
|
||
<h3>Emoji libre</h3>
|
||
<input class="emo-input" id="emoInput" placeholder="Tape un emoji ou colle un caractère" maxlength="20"/>
|
||
</div>
|
||
<div class="sec">
|
||
<h3>Ou choisir dans la grille</h3>
|
||
<div class="cat-tabs" id="catTabs"></div>
|
||
<div class="emo-grid" id="emoGrid"></div>
|
||
</div>
|
||
<div class="sec">
|
||
<h3>URL Dicebear (avancé, optionnel)</h3>
|
||
<input class="url-input" id="urlInput" placeholder="https://api.dicebear.com/9.x/..." />
|
||
</div>
|
||
<div class="status" id="mStatus"></div>
|
||
<div class="actions">
|
||
<button class="btn" onclick="closeModal()">Annuler</button>
|
||
<button class="btn primary" id="saveBtn" onclick="saveAvatar()">Enregistrer</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script>
|
||
let DATA = {};
|
||
let activeFilter = 'all';
|
||
let activeSearch = '';
|
||
|
||
async function load(){
|
||
try {
|
||
const r = await fetch('/api/agent-avatars-v2.json?t=' + Date.now());
|
||
DATA = await r.json();
|
||
render();
|
||
} catch(e) {
|
||
document.getElementById('G').innerHTML = '<div class="empty">ERR loading SSOT: ' + e.message + '</div>';
|
||
}
|
||
}
|
||
|
||
function render(){
|
||
const G = document.getElementById('G');
|
||
const entries = Object.entries(DATA);
|
||
const filtered = entries.filter(([n, a]) => {
|
||
if (activeSearch && !n.toLowerCase().includes(activeSearch)) return false;
|
||
if (activeFilter === 'all') return true;
|
||
if (activeFilter === 'gap') return a.isGap;
|
||
return a.persona === activeFilter;
|
||
});
|
||
|
||
if (!filtered.length) {
|
||
G.innerHTML = '<div class="empty">No agent matches</div>';
|
||
document.getElementById('stats').innerHTML = '<b>0</b> / ' + entries.length;
|
||
return;
|
||
}
|
||
|
||
G.innerHTML = filtered.map(([n, a]) => {
|
||
const cls = ['card', a.persona || 'human'];
|
||
if (a.isGap) cls.push('gap');
|
||
const safeN = n.replace(/[<>"']/g, c => ({'<':'<','>':'>','"':'"',"'":'''})[c]);
|
||
return `<div class="${cls.join(' ')}" title="${safeN}">
|
||
<div class="av">${a.emoji || '👤'}</div>
|
||
<div class="nm">${safeN}</div>
|
||
<div class="meta">
|
||
${a.isGap ? '<span class="tag gap">GAP</span>' : ''}
|
||
${a.role ? '<span class="tag role">' + a.role + '</span>' : ''}
|
||
</div>
|
||
</div>`;
|
||
}).join('');
|
||
|
||
document.getElementById('stats').innerHTML = '<b>' + filtered.length + '</b> / ' + entries.length + ' agents';
|
||
}
|
||
|
||
document.querySelectorAll('.fb').forEach(b => b.onclick = () => {
|
||
document.querySelectorAll('.fb').forEach(x => x.classList.remove('ac'));
|
||
b.classList.add('ac');
|
||
activeFilter = b.dataset.f;
|
||
render();
|
||
});
|
||
|
||
document.getElementById('srch').oninput = e => { activeSearch = e.target.value.toLowerCase().trim(); render(); };
|
||
|
||
// ============================================================
|
||
// WAVE-273 : MODE ÉDITION AVATAR (enrichir pas écraser)
|
||
// ============================================================
|
||
let editMode = false;
|
||
let currentAgent = null;
|
||
|
||
// Emoji library (catégorisée, pas d'API externe)
|
||
const EMOJI_CATS = {
|
||
'Humains': ['\u{1F464}','\u{1F465}','\u{1F46A}','\u{1F46B}','\u{1F46C}','\u{1F46D}','\u{1F468}','\u{1F469}','\u{1F9D1}','\u{1F471}','\u{1F474}','\u{1F475}','\u{1F476}','\u{1F466}','\u{1F467}','\u{1F9D2}','\u{1F9D3}','\u{1F9D4}','\u{1F9D5}','\u{1F9D6}','\u{1F9D7}','\u{1F9D8}','\u{1F9D9}','\u{1F9DA}','\u{1F9DB}','\u{1F9DC}','\u{1F9DD}','\u{1F9DE}','\u{1F9DF}','\u{1F470}','\u{1F935}','\u{1F478}','\u{1F934}','\u{1F9D1}\u{200D}\u{1F384}','\u{1F385}','\u{1F936}','\u{1F9B8}','\u{1F9B9}','\u{1F930}','\u{1F931}','\u{1F47C}','\u{1F46F}','\u{1F486}','\u{1F487}','\u{1F64B}','\u{1F645}','\u{1F646}','\u{1F647}','\u{1F481}','\u{1F64E}','\u{1F64D}','\u{1F642}','\u{1F643}','\u{1F600}','\u{1F603}','\u{1F604}','\u{1F60A}','\u{1F60D}','\u{1F970}','\u{1F914}','\u{1F634}','\u{1F637}','\u{1F44B}','\u{1F44C}','\u{1F44D}','\u{1F44E}','\u{270A}','\u{1F44A}','\u{1F44F}','\u{1F64C}','\u{1F64F}','\u{1F91D}','\u{1F4AA}','\u{1F9BE}','\u{1F9BF}','\u{1F9B5}','\u{1F9B6}','\u{1F9E0}','\u{1FAC0}','\u{1FAC1}','\u{1F468}\u{200D}\u{1F9B0}','\u{1F469}\u{200D}\u{1F9B0}','\u{1F468}\u{200D}\u{1F9B1}','\u{1F469}\u{200D}\u{1F9B1}','\u{1F468}\u{200D}\u{1F9B2}','\u{1F469}\u{200D}\u{1F9B2}','\u{1F468}\u{200D}\u{1F9B3}','\u{1F469}\u{200D}\u{1F9B3}','\u{1F3C3}','\u{1F483}','\u{1F57A}','\u{1F574}\u{FE0F}','\u{1F3C7}','\u{26F7}\u{FE0F}','\u{1F3C2}','\u{1F3CC}\u{FE0F}','\u{1F3C4}','\u{1F6A3}','\u{1F3CA}','\u{26F9}\u{FE0F}','\u{1F3CB}\u{FE0F}','\u{1F6B4}','\u{1F6B5}','\u{1F938}','\u{1F93C}','\u{1F93D}','\u{1F93E}','\u{1F939}','\u{1F470}\u{200D}\u{2642}\u{FE0F}','\u{1F470}\u{200D}\u{2640}\u{FE0F}','\u{1F935}\u{200D}\u{2642}\u{FE0F}','\u{1F935}\u{200D}\u{2640}\u{FE0F}','\u{1FAC3}','\u{1FAC4}','\u{1FAC5}','\u{1F91F}','\u{1F918}','\u{1F919}','\u{1F590}\u{FE0F}','\u{1F596}','\u{1F91E}','\u{1F44C}','\u{1F90C}','\u{1F90F}','\u{270C}\u{FE0F}','\u{1F91A}','\u{270B}','\u{1F446}','\u{1F447}','\u{1F448}','\u{1F449}','\u{261D}\u{FE0F}','\u{1F595}','\u{1F91B}','\u{1F91C}','\u{1F450}','\u{1F932}','\u{270D}\u{FE0F}','\u{1F485}'],
|
||
|
||
'Mains_Gestes': ['\u{1F44B}','\u{1F91A}','\u{1F590}\u{FE0F}','\u{270B}','\u{1F596}','\u{1F44C}','\u{1F90C}','\u{1F90F}','\u{270C}\u{FE0F}','\u{1F91E}','\u{1F91F}','\u{1F918}','\u{1F919}','\u{1F448}','\u{1F449}','\u{1F446}','\u{1F595}','\u{1F447}','\u{261D}\u{FE0F}','\u{1F44D}','\u{1F44E}','\u{270A}','\u{1F44A}','\u{1F91B}','\u{1F91C}','\u{1F44F}','\u{1F64C}','\u{1F450}','\u{1F932}','\u{1F91D}','\u{1F64F}','\u{270D}\u{FE0F}','\u{1F485}','\u{1F933}','\u{1F4AA}','\u{1F9BE}','\u{1F9BF}','\u{1F9B5}','\u{1F9B6}','\u{1F442}','\u{1F9BB}','\u{1F443}','\u{1F9E0}','\u{1F9D4}','\u{1FAC0}','\u{1FAC1}','\u{1F9B7}','\u{1F9B4}','\u{1F440}','\u{1F441}\u{FE0F}','\u{1F445}','\u{1F444}'],
|
||
|
||
'Sentiments': ['\u{1F600}','\u{1F603}','\u{1F604}','\u{1F601}','\u{1F606}','\u{1F605}','\u{1F923}','\u{1F602}','\u{1F642}','\u{1F643}','\u{1FAE0}','\u{1F609}','\u{1F60A}','\u{1F607}','\u{1F970}','\u{1F60D}','\u{1F929}','\u{1F618}','\u{1F617}','\u{263A}\u{FE0F}','\u{1F61A}','\u{1F619}','\u{1F972}','\u{1F60B}','\u{1F61B}','\u{1F61C}','\u{1F92A}','\u{1F61D}','\u{1F911}','\u{1F917}','\u{1F92D}','\u{1FAE2}','\u{1FAE3}','\u{1F92B}','\u{1F914}','\u{1FAE1}','\u{1F910}','\u{1F928}','\u{1F610}','\u{1F611}','\u{1F636}','\u{1FAE5}','\u{1F636}\u{200D}\u{1F32B}\u{FE0F}','\u{1F60F}','\u{1F612}','\u{1F644}','\u{1F62C}','\u{1F62E}\u{200D}\u{1F4A8}','\u{1F925}','\u{1F60C}','\u{1F614}','\u{1F62A}','\u{1F924}','\u{1F634}','\u{1F637}','\u{1F912}','\u{1F915}','\u{1F922}','\u{1F92E}','\u{1F927}','\u{1F975}','\u{1F976}','\u{1F974}','\u{1F635}','\u{1F635}\u{200D}\u{1F4AB}','\u{1F92F}','\u{1F920}','\u{1F973}','\u{1F978}','\u{1F60E}','\u{1F913}','\u{1F9D0}','\u{1F615}','\u{1FAE4}','\u{1F61F}','\u{1F641}','\u{2639}\u{FE0F}','\u{1F62E}','\u{1F62F}','\u{1F632}','\u{1F633}','\u{1F97A}','\u{1F979}','\u{1F626}','\u{1F627}','\u{1F628}','\u{1F630}','\u{1F625}','\u{1F622}','\u{1F62D}','\u{1F631}','\u{1F616}','\u{1F623}','\u{1F61E}','\u{1F613}','\u{1F629}','\u{1F62B}','\u{1F971}','\u{1F624}','\u{1F621}','\u{1F620}','\u{1F92C}','\u{1F608}','\u{1F47F}','\u{1F480}','\u{2620}\u{FE0F}','\u{1F4A9}','\u{1F921}','\u{1F479}','\u{1F47A}','\u{1F47B}','\u{1F47D}','\u{1F47E}','\u{1F916}','\u{1F63A}','\u{1F638}','\u{1F639}','\u{1F63B}','\u{1F63C}','\u{1F63D}','\u{1F640}','\u{1F63F}','\u{1F63E}','\u{1F648}','\u{1F649}','\u{1F64A}'],
|
||
|
||
'Coeurs': ['\u{2764}\u{FE0F}','\u{1F9E1}','\u{1F49B}','\u{1F49A}','\u{1F499}','\u{1F49C}','\u{1F5A4}','\u{1FA76}','\u{1FA75}','\u{1FA77}','\u{1F90E}','\u{1F90D}','\u{1F494}','\u{2763}\u{FE0F}','\u{1F495}','\u{1F493}','\u{1F48C}','\u{1F496}','\u{1F497}','\u{1F498}','\u{1F49D}','\u{1F49E}','\u{1F49F}','\u{2665}\u{FE0F}','\u{2661}','\u{1F491}','\u{1F48F}','\u{1F48B}','\u{1F48D}','\u{1F48E}','\u{1F482}','\u{1F48A}','\u{1F3F3}\u{FE0F}\u{200D}\u{26A7}\u{FE0F}'],
|
||
|
||
'Tech': ['\u{1F4BB}','\u{1F5A5}\u{FE0F}','\u{1F5A8}\u{FE0F}','\u{2328}\u{FE0F}','\u{1F5B1}\u{FE0F}','\u{1F5B2}\u{FE0F}','\u{1F4BE}','\u{1F4BF}','\u{1F4C0}','\u{1F9EE}','\u{1F4F1}','\u{1F4F2}','\u{260E}\u{FE0F}','\u{1F4DE}','\u{1F4DF}','\u{1F4E0}','\u{1F50B}','\u{1FAAB}','\u{1F50C}','\u{1F4A1}','\u{1F526}','\u{1F56F}\u{FE0F}','\u{1FAAA}','\u{1F4F7}','\u{1F4F8}','\u{1F4F9}','\u{1F4FD}\u{FE0F}','\u{1F3A5}','\u{1F3AC}','\u{1F4FA}','\u{1F4FB}','\u{1F399}\u{FE0F}','\u{1F39A}\u{FE0F}','\u{1F39B}\u{FE0F}','\u{1F4F6}','\u{1F50D}','\u{1F50E}','\u{1F4A1}','\u{1F4A1}','\u{1F4E1}','\u{1F680}','\u{1F6F0}\u{FE0F}','\u{1F6F8}','\u{1F4AC}','\u{1F5E8}\u{FE0F}','\u{1F5EF}\u{FE0F}','\u{1F4AD}','\u{1F4E2}','\u{1F4E3}','\u{1F4EF}','\u{1F514}','\u{1F515}','\u{1F3B5}','\u{1F3B6}','\u{1F3BC}','\u{1F3A4}','\u{1F3A7}','\u{1F3B7}','\u{1F3B8}','\u{1F3B9}','\u{1F3BA}','\u{1F3BB}','\u{1FA95}','\u{1F941}','\u{231B}','\u{23F3}','\u{231A}','\u{23F0}','\u{23F1}\u{FE0F}','\u{23F2}\u{FE0F}','\u{1F570}\u{FE0F}','\u{1F5A5}\u{FE0F}','\u{1F4BB}','\u{1F3AE}','\u{1F579}\u{FE0F}','\u{1F579}\u{FE0F}','\u{1F5DD}\u{FE0F}','\u{1F511}','\u{1F510}','\u{1F512}','\u{1F513}','\u{1F50F}','\u{1F50D}','\u{1F9F2}'],
|
||
|
||
'AI_Robots': ['\u{1F916}','\u{1F47E}','\u{1F47D}','\u{1F47B}','\u{1F479}','\u{1F47A}','\u{1F480}','\u{2620}\u{FE0F}','\u{1F383}','\u{1F3AD}','\u{1F381}','\u{1F3B2}','\u{1F3AF}','\u{1F3AA}','\u{1F3A8}','\u{1F9E9}','\u{1F52E}','\u{1F4AB}','\u{2728}','\u{1F525}','\u{26A1}','\u{2604}\u{FE0F}','\u{1F4A5}','\u{1F9EA}','\u{1F9EB}','\u{1F9EC}','\u{1F9A0}','\u{1F52C}','\u{1F52D}','\u{1FA7B}','\u{1FA7C}','\u{1F9E0}','\u{1F5A5}\u{FE0F}','\u{1F310}','\u{1F6F0}\u{FE0F}','\u{1FAA9}','\u{1F321}\u{FE0F}','\u{1F9EE}','\u{1F4A1}','\u{1F50D}','\u{26D3}\u{FE0F}','\u{1F680}','\u{1F6F8}','\u{1F4BB}','\u{1F5A5}\u{FE0F}','\u{2328}\u{FE0F}','\u{1F5B1}\u{FE0F}','\u{1F5B2}\u{FE0F}','\u{1F4BE}','\u{1F4BF}','\u{1F4C0}','\u{1F4F1}','\u{1F4F2}','\u{1F4DF}','\u{1F4E1}','\u{1F4E0}','\u{1F50B}','\u{1FAAB}','\u{1F50C}','\u{1F526}','\u{1F56F}\u{FE0F}','\u{1FAAA}','\u{1F4F7}','\u{1F4F8}','\u{1F4F9}','\u{1F4FD}\u{FE0F}','\u{1F3A5}','\u{1F3AC}','\u{1F399}\u{FE0F}','\u{1F39A}\u{FE0F}','\u{1F39B}\u{FE0F}','\u{1F4F6}','\u{1F30C}','\u{1F6F8}','\u{1F6F0}\u{FE0F}','\u{1FAE7}','\u{1F30D}','\u{1F30E}','\u{1F30F}','\u{1F3AE}','\u{1F579}\u{FE0F}','\u{1F5DD}\u{FE0F}','\u{1F511}','\u{1F510}','\u{1F512}','\u{1F513}','\u{1F50F}','\u{1F9F2}','\u{1F4BB}','\u{1F4DD}','\u{1F4CA}','\u{1F4C8}','\u{1F4C9}','\u{1F4BC}','\u{1F4C1}','\u{1F4C2}','\u{1F5C2}\u{FE0F}','\u{1F6A8}','\u{1F6A6}','\u{1F6A5}','\u{1F69C}'],
|
||
|
||
'Metiers_Pro': ['\u{1F468}\u{200D}\u{1F393}','\u{1F469}\u{200D}\u{1F393}','\u{1F9D1}\u{200D}\u{1F393}','\u{1F468}\u{200D}\u{1F3EB}','\u{1F469}\u{200D}\u{1F3EB}','\u{1F9D1}\u{200D}\u{1F3EB}','\u{1F468}\u{200D}\u{2695}\u{FE0F}','\u{1F469}\u{200D}\u{2695}\u{FE0F}','\u{1F9D1}\u{200D}\u{2695}\u{FE0F}','\u{1F468}\u{200D}\u{2696}\u{FE0F}','\u{1F469}\u{200D}\u{2696}\u{FE0F}','\u{1F9D1}\u{200D}\u{2696}\u{FE0F}','\u{1F468}\u{200D}\u{1F33E}','\u{1F469}\u{200D}\u{1F33E}','\u{1F9D1}\u{200D}\u{1F33E}','\u{1F468}\u{200D}\u{1F373}','\u{1F469}\u{200D}\u{1F373}','\u{1F9D1}\u{200D}\u{1F373}','\u{1F468}\u{200D}\u{1F527}','\u{1F469}\u{200D}\u{1F527}','\u{1F9D1}\u{200D}\u{1F527}','\u{1F468}\u{200D}\u{1F3ED}','\u{1F469}\u{200D}\u{1F3ED}','\u{1F9D1}\u{200D}\u{1F3ED}','\u{1F468}\u{200D}\u{1F4BC}','\u{1F469}\u{200D}\u{1F4BC}','\u{1F9D1}\u{200D}\u{1F4BC}','\u{1F468}\u{200D}\u{1F52C}','\u{1F469}\u{200D}\u{1F52C}','\u{1F9D1}\u{200D}\u{1F52C}','\u{1F468}\u{200D}\u{1F4BB}','\u{1F469}\u{200D}\u{1F4BB}','\u{1F9D1}\u{200D}\u{1F4BB}','\u{1F468}\u{200D}\u{1F3A4}','\u{1F469}\u{200D}\u{1F3A4}','\u{1F9D1}\u{200D}\u{1F3A4}','\u{1F468}\u{200D}\u{1F3A8}','\u{1F469}\u{200D}\u{1F3A8}','\u{1F9D1}\u{200D}\u{1F3A8}','\u{1F468}\u{200D}\u{2708}\u{FE0F}','\u{1F469}\u{200D}\u{2708}\u{FE0F}','\u{1F9D1}\u{200D}\u{2708}\u{FE0F}','\u{1F468}\u{200D}\u{1F680}','\u{1F469}\u{200D}\u{1F680}','\u{1F9D1}\u{200D}\u{1F680}','\u{1F468}\u{200D}\u{1F692}','\u{1F469}\u{200D}\u{1F692}','\u{1F9D1}\u{200D}\u{1F692}','\u{1F46E}','\u{1F46E}\u{200D}\u{2642}\u{FE0F}','\u{1F46E}\u{200D}\u{2640}\u{FE0F}','\u{1F575}\u{FE0F}','\u{1F575}\u{FE0F}\u{200D}\u{2642}\u{FE0F}','\u{1F575}\u{FE0F}\u{200D}\u{2640}\u{FE0F}','\u{1F482}','\u{1F482}\u{200D}\u{2642}\u{FE0F}','\u{1F482}\u{200D}\u{2640}\u{FE0F}','\u{1F977}','\u{1F933}','\u{1F477}','\u{1F477}\u{200D}\u{2642}\u{FE0F}','\u{1F477}\u{200D}\u{2640}\u{FE0F}','\u{1F9D1}\u{200D}\u{2695}\u{FE0F}','\u{1F9D1}\u{200D}\u{1F4BB}','\u{1F9D1}\u{200D}\u{1F393}','\u{1F9D1}\u{200D}\u{1F3EB}','\u{1F9D1}\u{200D}\u{2696}\u{FE0F}','\u{1F9D1}\u{200D}\u{1F33E}','\u{1F9D1}\u{200D}\u{1F373}','\u{1F9D1}\u{200D}\u{1F527}','\u{1F9D1}\u{200D}\u{1F3ED}','\u{1F9D1}\u{200D}\u{1F4BC}','\u{1F9D1}\u{200D}\u{1F52C}','\u{1F9D1}\u{200D}\u{1F3A4}','\u{1F9D1}\u{200D}\u{1F3A8}','\u{1F9D1}\u{200D}\u{2708}\u{FE0F}','\u{1F9D1}\u{200D}\u{1F680}','\u{1F9D1}\u{200D}\u{1F692}','\u{1F9BC}','\u{1F9BD}','\u{1F9AF}','\u{1F4BC}','\u{1F4CA}','\u{1F4C8}','\u{1F4C9}','\u{1F4C5}','\u{1F4C6}','\u{1F5D3}\u{FE0F}','\u{1F4CB}','\u{1F4CE}','\u{1F587}\u{FE0F}','\u{270F}\u{FE0F}','\u{1F58A}\u{FE0F}','\u{1F4DD}','\u{1F4B0}','\u{1F4B3}','\u{1F4B0}','\u{1F3E6}','\u{1F3E2}','\u{1F3ED}','\u{1F3EB}','\u{1F3E5}','\u{1F3E8}','\u{1F3EA}','\u{1F3EF}','\u{26EA}','\u{1F3DB}\u{FE0F}','\u{1F9D1}\u{200D}\u{1F9BC}','\u{1F9D1}\u{200D}\u{1F9BD}','\u{1F9D1}\u{200D}\u{1F9AF}'],
|
||
|
||
'Travail': ['\u{1F4BC}','\u{1F4C1}','\u{1F4C2}','\u{1F5C2}\u{FE0F}','\u{1F5C3}\u{FE0F}','\u{1F5C4}\u{FE0F}','\u{1F4CB}','\u{1F4CE}','\u{1F587}\u{FE0F}','\u{1F4CF}','\u{1F4D0}','\u{2702}\u{FE0F}','\u{1F58A}\u{FE0F}','\u{1F58B}\u{FE0F}','\u{2712}\u{FE0F}','\u{1F4DD}','\u{270F}\u{FE0F}','\u{1F4CA}','\u{1F4C8}','\u{1F4C9}','\u{1F4C5}','\u{1F4C6}','\u{1F5D3}\u{FE0F}','\u{1F4C7}','\u{1F5D2}\u{FE0F}','\u{1F5DE}\u{FE0F}','\u{1F4F0}','\u{1F4D3}','\u{1F4D4}','\u{1F4D2}','\u{1F4D5}','\u{1F4D7}','\u{1F4D8}','\u{1F4D9}','\u{1F4DA}','\u{1F4D6}','\u{1F516}','\u{1F3F7}\u{FE0F}','\u{1F4B0}','\u{1FA99}','\u{1F4B4}','\u{1F4B5}','\u{1F4B6}','\u{1F4B7}','\u{1F4B8}','\u{1F4B3}','\u{1F9FE}','\u{1F3E6}','\u{1F3E2}','\u{1F3ED}','\u{1F3EC}','\u{1F3DB}\u{FE0F}','\u{1F4B9}','\u{1F4E4}','\u{1F4E5}','\u{1F4E6}','\u{1F4E7}','\u{1F4E8}','\u{1F4E9}','\u{1F4EA}','\u{1F4EB}','\u{1F4EC}','\u{1F4ED}','\u{1F4EE}','\u{2709}\u{FE0F}','\u{1F4DC}','\u{1F4C3}','\u{1F9FE}','\u{1F50F}','\u{1F511}','\u{1F510}','\u{1F5DD}\u{FE0F}','\u{1F5F3}\u{FE0F}','\u{1F4A1}','\u{1F4DE}','\u{1F4F0}'],
|
||
|
||
'Animaux': ['\u{1F436}','\u{1F431}','\u{1F42D}','\u{1F439}','\u{1F430}','\u{1F98A}','\u{1F43B}','\u{1F43B}\u{200D}\u{2744}\u{FE0F}','\u{1F43C}','\u{1F428}','\u{1F42F}','\u{1F981}','\u{1F42E}','\u{1F437}','\u{1F43D}','\u{1F438}','\u{1F435}','\u{1F648}','\u{1F649}','\u{1F64A}','\u{1F412}','\u{1F9A7}','\u{1F414}','\u{1F427}','\u{1F426}','\u{1F424}','\u{1F423}','\u{1F425}','\u{1F986}','\u{1F985}','\u{1F989}','\u{1F987}','\u{1FABF}','\u{1FAB6}','\u{1F9A9}','\u{1F9A2}','\u{1F9AB}','\u{1F99A}','\u{1F99C}','\u{1F985}','\u{1F9A4}','\u{1F43A}','\u{1F417}','\u{1F434}','\u{1F984}','\u{1FACE}','\u{1F41D}','\u{1FAB1}','\u{1F41B}','\u{1F98B}','\u{1F40C}','\u{1F41E}','\u{1F41C}','\u{1FAB0}','\u{1F577}\u{FE0F}','\u{1F578}\u{FE0F}','\u{1F982}','\u{1FAB3}','\u{1F422}','\u{1F40D}','\u{1F98E}','\u{1F996}','\u{1F995}','\u{1F419}','\u{1F991}','\u{1F990}','\u{1F980}','\u{1F99E}','\u{1F421}','\u{1F420}','\u{1F41F}','\u{1F42C}','\u{1F433}','\u{1F40B}','\u{1F988}','\u{1F9AD}','\u{1F40A}','\u{1F405}','\u{1F406}','\u{1F993}','\u{1F98C}','\u{1F98D}','\u{1F9A7}','\u{1F9A3}','\u{1F418}','\u{1F9A1}','\u{1F992}','\u{1F42A}','\u{1F42B}','\u{1F999}','\u{1F998}','\u{1F403}','\u{1F402}','\u{1F404}','\u{1F40E}','\u{1F416}','\u{1F40F}','\u{1F411}','\u{1F410}','\u{1FACF}','\u{1F415}','\u{1F9AE}','\u{1F429}','\u{1F408}','\u{1F408}\u{200D}\u{2B1B}','\u{1F413}','\u{1F983}','\u{1F99A}','\u{1F9A2}','\u{1F9A9}','\u{1F54A}\u{FE0F}','\u{1F407}','\u{1F9AB}','\u{1F99D}','\u{1F9A8}','\u{1F9A1}','\u{1F9AB}','\u{1F9A6}','\u{1F400}','\u{1F401}','\u{1F43F}\u{FE0F}','\u{1F9D4}','\u{1F43E}','\u{1F994}','\u{1F987}'],
|
||
|
||
'Plantes': ['\u{1F335}','\u{1F384}','\u{1F332}','\u{1F333}','\u{1F334}','\u{1F331}','\u{1FAB4}','\u{1F33F}','\u{2618}\u{FE0F}','\u{1F340}','\u{1F38D}','\u{1F38B}','\u{1F343}','\u{1F342}','\u{1F341}','\u{1F344}','\u{1F9C4}','\u{1F33E}','\u{1F490}','\u{1F337}','\u{1F339}','\u{1F940}','\u{1F33A}','\u{1F338}','\u{1F33C}','\u{1F33B}','\u{1FAB7}','\u{1FABB}','\u{1FAB8}','\u{1FABA}'],
|
||
|
||
'Nourriture': ['\u{1F34E}','\u{1F350}','\u{1F34A}','\u{1F34B}','\u{1F34B}\u{200D}\u{1F7E9}','\u{1F34C}','\u{1F349}','\u{1F347}','\u{1FAD0}','\u{1F353}','\u{1F348}','\u{1F352}','\u{1F351}','\u{1F96D}','\u{1F34D}','\u{1F965}','\u{1F95D}','\u{1F345}','\u{1F346}','\u{1F951}','\u{1F966}','\u{1F96C}','\u{1F952}','\u{1F33D}','\u{1F955}','\u{1F336}\u{FE0F}','\u{1FAD1}','\u{1F952}','\u{1F954}','\u{1F360}','\u{1F950}','\u{1F956}','\u{1FAD3}','\u{1F35E}','\u{1F968}','\u{1F96F}','\u{1F9C0}','\u{1F95A}','\u{1F373}','\u{1F9C8}','\u{1F95E}','\u{1F953}','\u{1F969}','\u{1F357}','\u{1F356}','\u{1F9B4}','\u{1F32D}','\u{1F354}','\u{1F35F}','\u{1F355}','\u{1F96A}','\u{1F959}','\u{1F32E}','\u{1F32F}','\u{1FAD4}','\u{1F957}','\u{1F958}','\u{1FAD5}','\u{1F96B}','\u{1F35D}','\u{1F35C}','\u{1F372}','\u{1F35B}','\u{1F363}','\u{1F371}','\u{1F95F}','\u{1F364}','\u{1F359}','\u{1F358}','\u{1F35A}','\u{1F365}','\u{1F96E}','\u{1F361}','\u{1F95F}','\u{1F95F}','\u{1F9AA}','\u{1F980}','\u{1F990}','\u{1F991}','\u{1F95C}','\u{1F367}','\u{1F368}','\u{1F366}','\u{1F967}','\u{1F370}','\u{1F382}','\u{1F9C1}','\u{1F967}','\u{1F9C1}','\u{1F36E}','\u{1F36D}','\u{1F36C}','\u{1F36B}','\u{1F37F}','\u{1F369}','\u{1F36A}','\u{1F330}','\u{1F95C}','\u{1F36F}','\u{1F95B}','\u{1F37C}','\u{2615}','\u{1FAD6}','\u{1F375}','\u{1F964}','\u{1F9CB}','\u{1F376}','\u{1F37A}','\u{1F37B}','\u{1F942}','\u{1F377}','\u{1F943}','\u{1F378}','\u{1F379}','\u{1F37E}','\u{1F9CA}','\u{1F944}','\u{1F374}','\u{1F37D}\u{FE0F}','\u{1F963}','\u{1F961}','\u{1F961}','\u{1F9C3}','\u{1F9C9}','\u{1F962}'],
|
||
|
||
'Objets_Outils': ['\u{1F9F0}','\u{1F9F2}','\u{1F6E0}\u{FE0F}','\u{2699}\u{FE0F}','\u{1F527}','\u{1F528}','\u{26CF}\u{FE0F}','\u{2692}\u{FE0F}','\u{1F5E1}\u{FE0F}','\u{2694}\u{FE0F}','\u{1F4A3}','\u{1F3F9}','\u{1F6E1}\u{FE0F}','\u{1F529}','\u{1F52C}','\u{1F52D}','\u{1F4E1}','\u{1F48A}','\u{1F489}','\u{1FA78}','\u{1FA79}','\u{1FA7A}','\u{1FAAE}','\u{1FAAF}','\u{1F6AA}','\u{1F6CF}\u{FE0F}','\u{1F6CB}\u{FE0F}','\u{1FA91}','\u{1F6BD}','\u{1F6BF}','\u{1F6C1}','\u{1F4FF}','\u{1F48E}','\u{1F514}','\u{1F4E2}','\u{1F4E3}','\u{1F3EE}','\u{1F6D2}','\u{1F381}','\u{1F380}','\u{1F38A}','\u{1F389}','\u{1F38E}','\u{1F38F}','\u{1F390}','\u{1F9F8}','\u{1F52E}','\u{1F3AE}','\u{1F579}\u{FE0F}','\u{1F3B2}','\u{1F9E9}','\u{1FA84}','\u{1FA85}','\u{1FA86}','\u{1F9F8}','\u{1FA80}','\u{1FA81}','\u{1FAA9}','\u{1F9F5}','\u{1FAA1}','\u{1F9F6}','\u{1F9E4}','\u{1F9E5}','\u{1F9E6}','\u{1F97C}','\u{1F9BA}','\u{1F454}','\u{1F455}','\u{1F456}','\u{1F457}','\u{1F458}','\u{1F459}','\u{1F45A}','\u{1F45B}','\u{1F45C}','\u{1F45D}','\u{1F6CD}\u{FE0F}','\u{1F392}','\u{1F45E}','\u{1F45F}','\u{1F97E}','\u{1F97F}','\u{1F460}','\u{1F461}','\u{1FA70}','\u{1F462}','\u{1F451}','\u{1F452}','\u{1F3A9}','\u{1F393}','\u{1F9E2}','\u{26D1}\u{FE0F}','\u{1FA96}','\u{1F4FF}','\u{1F484}','\u{1F48D}','\u{1F48E}'],
|
||
|
||
'Symboles': ['\u{2764}\u{FE0F}','\u{1F494}','\u{2763}\u{FE0F}','\u{1F48C}','\u{1F4A4}','\u{1F4A2}','\u{1F4A5}','\u{1F4AB}','\u{1F4A6}','\u{1F4A8}','\u{1F573}\u{FE0F}','\u{1F4A3}','\u{1F4AC}','\u{1F5E8}\u{FE0F}','\u{1F5EF}\u{FE0F}','\u{1F4AD}','\u{1F4AE}','\u{267B}\u{FE0F}','\u{2692}\u{FE0F}','\u{2695}\u{FE0F}','\u{2696}\u{FE0F}','\u{1F531}','\u{269C}\u{FE0F}','\u{1F4DB}','\u{1F530}','\u{2B55}','\u{2705}','\u{2611}\u{FE0F}','\u{2714}\u{FE0F}','\u{2795}','\u{2796}','\u{2797}','\u{2716}\u{FE0F}','\u{267E}\u{FE0F}','\u{203C}\u{FE0F}','\u{2049}\u{FE0F}','\u{2753}','\u{2754}','\u{2755}','\u{2757}','\u{3030}\u{FE0F}','\u{00A9}\u{FE0F}','\u{00AE}\u{FE0F}','\u{2122}\u{FE0F}','\u{2B50}','\u{1F31F}','\u{2728}','\u{1F4AB}','\u{26A1}','\u{262E}\u{FE0F}','\u{271D}\u{FE0F}','\u{262A}\u{FE0F}','\u{1F549}\u{FE0F}','\u{2638}\u{FE0F}','\u{2721}\u{FE0F}','\u{1F52F}','\u{1F54E}','\u{262F}\u{FE0F}','\u{2626}\u{FE0F}','\u{1F6D0}','\u{26CE}','\u{2648}','\u{2649}','\u{264A}','\u{264B}','\u{264C}','\u{264D}','\u{264E}','\u{264F}','\u{2650}','\u{2651}','\u{2652}','\u{2653}','\u{1F3E7}','\u{1F6AE}','\u{1F6B0}','\u{267F}','\u{1F6B9}','\u{1F6BA}','\u{1F6BB}','\u{1F6BC}','\u{1F6BE}','\u{1F6C2}','\u{1F6C3}','\u{1F6C4}','\u{1F6C5}','\u{26A0}\u{FE0F}','\u{1F6B8}','\u{26D4}','\u{1F6AB}','\u{1F6B3}','\u{1F6AD}','\u{1F6AF}','\u{1F6B7}','\u{1F4F5}','\u{1F51E}','\u{2622}\u{FE0F}','\u{2623}\u{FE0F}','\u{2B06}\u{FE0F}','\u{2197}\u{FE0F}','\u{27A1}\u{FE0F}','\u{2198}\u{FE0F}','\u{2B07}\u{FE0F}','\u{2199}\u{FE0F}','\u{2B05}\u{FE0F}','\u{2196}\u{FE0F}','\u{2195}\u{FE0F}','\u{2194}\u{FE0F}','\u{21A9}\u{FE0F}','\u{21AA}\u{FE0F}','\u{2934}\u{FE0F}','\u{2935}\u{FE0F}','\u{1F503}','\u{1F504}','\u{1F519}','\u{1F51A}','\u{1F51B}','\u{1F51C}','\u{1F51D}','\u{1F3B6}','\u{1F3B5}','\u{27B0}','\u{27BF}','\u{303D}\u{FE0F}','\u{2733}\u{FE0F}','\u{2734}\u{FE0F}','\u{2747}\u{FE0F}','\u{00A9}\u{FE0F}','\u{1F192}','\u{1F193}','\u{1F194}','\u{1F195}','\u{1F196}','\u{1F197}','\u{1F198}','\u{1F199}','\u{1F19A}','\u{1F201}','\u{1F202}\u{FE0F}','\u{1F237}\u{FE0F}','\u{1F236}','\u{1F22F}','\u{1F250}','\u{1F239}','\u{1F21A}','\u{1F232}','\u{1F251}','\u{1F238}','\u{1F234}','\u{1F233}','\u{3299}\u{FE0F}','\u{3297}\u{FE0F}','\u{1F23A}','\u{1F235}','\u{1F534}','\u{1F7E0}','\u{1F7E1}','\u{1F7E2}','\u{1F535}','\u{1F7E3}','\u{1F7E4}','\u{26AB}','\u{26AA}','\u{1F7E5}','\u{1F7E7}','\u{1F7E8}','\u{1F7E9}','\u{1F7E6}','\u{1F7EA}','\u{1F7EB}','\u{2B1B}','\u{2B1C}'],
|
||
|
||
'Meteo_Espace': ['\u{2600}\u{FE0F}','\u{26C5}','\u{2601}\u{FE0F}','\u{1F324}\u{FE0F}','\u{1F325}\u{FE0F}','\u{1F326}\u{FE0F}','\u{1F327}\u{FE0F}','\u{26C8}\u{FE0F}','\u{1F329}\u{FE0F}','\u{1F328}\u{FE0F}','\u{2744}\u{FE0F}','\u{2603}\u{FE0F}','\u{26C4}','\u{1F32C}\u{FE0F}','\u{1F4A8}','\u{1F4A7}','\u{1F4A6}','\u{2614}','\u{2602}\u{FE0F}','\u{1F30A}','\u{1F32B}\u{FE0F}','\u{1F308}','\u{1F305}','\u{1F304}','\u{1F320}','\u{1F387}','\u{1F386}','\u{1F307}','\u{1F306}','\u{1F3D9}\u{FE0F}','\u{1F303}','\u{1F30C}','\u{1F680}','\u{1F6F8}','\u{1F6F0}\u{FE0F}','\u{1F315}','\u{1F316}','\u{1F317}','\u{1F318}','\u{1F311}','\u{1F312}','\u{1F313}','\u{1F314}','\u{1F319}','\u{1F30E}','\u{1F30D}','\u{1F30F}','\u{2B50}','\u{1F31F}','\u{1F31B}','\u{1F31C}','\u{1F31D}','\u{1F31E}','\u{1F31A}','\u{2604}\u{FE0F}','\u{1FA90}','\u{1F321}\u{FE0F}','\u{26F1}\u{FE0F}','\u{2622}\u{FE0F}','\u{2623}\u{FE0F}','\u{1F9EF}','\u{1F30B}','\u{26F0}\u{FE0F}','\u{1F3D4}\u{FE0F}','\u{1F5FB}'],
|
||
|
||
'Batiments_Lieux': ['\u{1F3E0}','\u{1F3E1}','\u{1F3D8}\u{FE0F}','\u{1F3DA}\u{FE0F}','\u{1F3D7}\u{FE0F}','\u{1F3ED}','\u{1F3E2}','\u{1F3EC}','\u{1F3E3}','\u{1F3E4}','\u{1F3E5}','\u{1F3E6}','\u{1F3E8}','\u{1F3EA}','\u{1F3EB}','\u{1F3E9}','\u{1F492}','\u{1F3DB}\u{FE0F}','\u{26EA}','\u{1F54C}','\u{1F54D}','\u{26E9}\u{FE0F}','\u{1F54B}','\u{26F2}','\u{26FA}','\u{1F301}','\u{1F5FC}','\u{1F3F0}','\u{1F3EF}','\u{1F3DF}\u{FE0F}','\u{1F3A1}','\u{1F3A2}','\u{1F3A0}','\u{26F1}\u{FE0F}','\u{1F3D6}\u{FE0F}','\u{1F3DD}\u{FE0F}','\u{1F3DC}\u{FE0F}','\u{1F30B}','\u{26F0}\u{FE0F}','\u{1F3D4}\u{FE0F}','\u{1F5FB}','\u{1F3D5}\u{FE0F}','\u{1F3DE}\u{FE0F}','\u{1F6E3}\u{FE0F}','\u{1F6E4}\u{FE0F}','\u{1F5FA}\u{FE0F}','\u{1F5FE}','\u{1F9ED}','\u{1F6D5}','\u{1FA92}','\u{1F3AA}','\u{1F396}\u{FE0F}','\u{1F3C6}','\u{26F4}\u{FE0F}','\u{1F6F3}\u{FE0F}','\u{1F30D}','\u{1F30E}','\u{1F30F}','\u{1F310}','\u{1F5FD}'],
|
||
|
||
'Transport': ['\u{1F697}','\u{1F695}','\u{1F699}','\u{1F68C}','\u{1F68E}','\u{1F3CE}\u{FE0F}','\u{1F693}','\u{1F691}','\u{1F692}','\u{1F690}','\u{1F69A}','\u{1F69B}','\u{1F69C}','\u{1F6F4}','\u{1F6B2}','\u{1F6F5}','\u{1F3CD}\u{FE0F}','\u{1F6A8}','\u{1F694}','\u{1F68D}','\u{1F698}','\u{1F696}','\u{1F6A1}','\u{1F6A0}','\u{1F69F}','\u{1F683}','\u{1F68B}','\u{1F69E}','\u{1F69D}','\u{1F684}','\u{1F685}','\u{1F688}','\u{1F682}','\u{1F686}','\u{1F687}','\u{1F68A}','\u{1F689}','\u{2708}\u{FE0F}','\u{1F6EB}','\u{1F6EC}','\u{1F6E9}\u{FE0F}','\u{1F4BA}','\u{1F6F0}\u{FE0F}','\u{1F680}','\u{1F6F8}','\u{1F681}','\u{1F6F6}','\u{26F5}','\u{1F6A4}','\u{1F6E5}\u{FE0F}','\u{1F6F3}\u{FE0F}','\u{26F4}\u{FE0F}','\u{1F6A2}','\u{2693}','\u{1F6F9}','\u{1F6F7}','\u{1F6FA}','\u{1F6FB}','\u{1F6FC}','\u{1F9AF}','\u{1F9BD}','\u{1F9BC}','\u{1F6B8}','\u{1F6A6}','\u{1F6A5}','\u{1F6A7}','\u{1F6A9}','\u{1F3C1}','\u{1F6D6}','\u{1F6E2}\u{FE0F}','\u{1F6E6}\u{FE0F}','\u{1F6E7}\u{FE0F}','\u{1F6EE}\u{FE0F}','\u{1F6EF}\u{FE0F}','\u{1F6F1}\u{FE0F}','\u{1F6F2}\u{FE0F}'],
|
||
|
||
'Sports': ['\u{26BD}','\u{1F3C0}','\u{1F3C8}','\u{26BE}','\u{1F94E}','\u{1F3BE}','\u{1F3D0}','\u{1F3C9}','\u{1F94F}','\u{1F3B1}','\u{1F3D3}','\u{1F3F8}','\u{1F3D2}','\u{1F3D1}','\u{1F94D}','\u{1F3CF}','\u{1F945}','\u{26F3}','\u{1F3F9}','\u{1F3A3}','\u{1F93F}','\u{1F94A}','\u{1F94B}','\u{1F3BD}','\u{1F6F9}','\u{1F6F7}','\u{26F8}\u{FE0F}','\u{1F94C}','\u{1F3BF}','\u{26F7}\u{FE0F}','\u{1F3C2}','\u{1F3CB}\u{FE0F}','\u{1F93C}','\u{1F938}','\u{26F9}\u{FE0F}','\u{1F93A}','\u{1F93E}','\u{1F3CC}\u{FE0F}','\u{1F3C7}','\u{1F9D8}','\u{1F3C4}','\u{1F3CA}','\u{1F93D}','\u{1F6A3}','\u{1F9D7}','\u{1F6B5}','\u{1F6B4}','\u{1F3C6}','\u{1F947}','\u{1F948}','\u{1F949}','\u{1F3C5}','\u{1F396}\u{FE0F}','\u{1F3F5}\u{FE0F}','\u{1F397}\u{FE0F}','\u{1F3AB}','\u{1F39F}\u{FE0F}','\u{1F3AE}','\u{1F579}\u{FE0F}','\u{1F3B2}','\u{1F3B0}','\u{1F9E9}','\u{1F9F8}','\u{1FA81}','\u{1F3AF}','\u{1F52B}','\u{1F3AA}','\u{1F3AD}','\u{1F3BC}','\u{1F3AB}','\u{1F94A}','\u{1F94B}'],
|
||
|
||
'Drapeaux': ['\u{1F3C1}','\u{1F6A9}','\u{1F38C}','\u{1F3F4}','\u{1F3F3}\u{FE0F}','\u{1F3F3}\u{FE0F}\u{200D}\u{1F308}','\u{1F3F3}\u{FE0F}\u{200D}\u{26A7}\u{FE0F}','\u{1F3F4}\u{200D}\u{2620}\u{FE0F}','\u{1F1EB}\u{1F1F7}','\u{1F1F2}\u{1F1E6}','\u{1F1F9}\u{1F1F3}','\u{1F1E9}\u{1F1FF}','\u{1F1EA}\u{1F1FA}','\u{1F1FA}\u{1F1F8}','\u{1F1EC}\u{1F1E7}','\u{1F1E8}\u{1F1F3}','\u{1F1EF}\u{1F1F5}','\u{1F1E9}\u{1F1EA}','\u{1F1EE}\u{1F1F9}','\u{1F1EA}\u{1F1F8}','\u{1F1F5}\u{1F1F9}','\u{1F1E8}\u{1F1ED}','\u{1F1E7}\u{1F1EA}','\u{1F1F3}\u{1F1F1}','\u{1F1F1}\u{1F1FA}','\u{1F1E6}\u{1F1F9}','\u{1F1F8}\u{1F1EA}','\u{1F1F3}\u{1F1F4}','\u{1F1E9}\u{1F1F0}','\u{1F1EB}\u{1F1EE}','\u{1F1EE}\u{1F1EA}','\u{1F1F7}\u{1F1FA}','\u{1F1FA}\u{1F1E6}','\u{1F1F5}\u{1F1F1}','\u{1F1E8}\u{1F1FF}','\u{1F1ED}\u{1F1FA}','\u{1F1EC}\u{1F1F7}','\u{1F1F9}\u{1F1F7}','\u{1F1EE}\u{1F1F3}','\u{1F1F0}\u{1F1F7}','\u{1F1EE}\u{1F1F1}','\u{1F1F8}\u{1F1E6}','\u{1F1E6}\u{1F1EA}','\u{1F1EA}\u{1F1EC}','\u{1F1FF}\u{1F1E6}','\u{1F1E7}\u{1F1F7}','\u{1F1E6}\u{1F1F7}','\u{1F1F2}\u{1F1FD}','\u{1F1E8}\u{1F1E6}','\u{1F1E6}\u{1F1FA}','\u{1F1F3}\u{1F1FF}','\u{1F1F0}\u{1F1EA}','\u{1F1F0}\u{1F1FF}','\u{1F1F0}\u{1F1EC}','\u{1F1F0}\u{1F1ED}','\u{1F1EE}\u{1F1F6}','\u{1F1F1}\u{1F1E7}','\u{1F1F1}\u{1F1FE}','\u{1F1F8}\u{1F1FE}','\u{1F1FE}\u{1F1EA}','\u{1F1F2}\u{1F1F1}','\u{1F1F2}\u{1F1F7}','\u{1F1F8}\u{1F1F3}','\u{1F1F3}\u{1F1EC}','\u{1F1EC}\u{1F1ED}','\u{1F1F0}\u{1F1F2}','\u{1F1E8}\u{1F1EE}','\u{1F1F8}\u{1F1F4}','\u{1F1F8}\u{1F1F1}','\u{1F1EA}\u{1F1F9}','\u{1F1F0}\u{1F1EA}','\u{1F1EC}\u{1F1ED}','\u{1F1FC}\u{1F1F8}','\u{1F1F8}\u{1F1F7}','\u{1F1E8}\u{1F1E9}','\u{1F1EC}\u{1F1F6}','\u{1F1ED}\u{1F1F3}','\u{1F1EC}\u{1F1F2}','\u{1F1F8}\u{1F1FB}','\u{1F1F1}\u{1F1F7}','\u{1F1EA}\u{1F1E8}','\u{1F1E9}\u{1F1F2}','\u{1F1EC}\u{1F1F3}','\u{1F1EC}\u{1F1E6}','\u{1F1ED}\u{1F1F9}','\u{1F1EC}\u{1F1FE}','\u{1F1F0}\u{1F1FE}','\u{1F1F1}\u{1F1F8}','\u{1F1F1}\u{1F1F7}','\u{1F1F9}\u{1F1E9}']
|
||
};
|
||
|
||
function setEditMode(on){
|
||
editMode = !!on;
|
||
const btn = document.getElementById('editToggle');
|
||
btn.dataset.edit = editMode ? 'on' : 'off';
|
||
btn.textContent = editMode ? '✎ ÉDITION ON' : '✎ ÉDITION';
|
||
document.getElementById('editBanner').classList.toggle('on', editMode);
|
||
render();
|
||
}
|
||
|
||
function render(){
|
||
const G = document.getElementById('G');
|
||
const entries = Object.entries(DATA);
|
||
const filtered = entries.filter(([n, a]) => {
|
||
if (activeSearch && !n.toLowerCase().includes(activeSearch)) return false;
|
||
if (activeFilter === 'all') return true;
|
||
if (activeFilter === 'gap') return a.isGap;
|
||
return a.persona === activeFilter;
|
||
});
|
||
|
||
if (!filtered.length) {
|
||
G.innerHTML = '<div class="empty">No agent matches</div>';
|
||
document.getElementById('stats').innerHTML = '<b>0</b> / ' + entries.length;
|
||
return;
|
||
}
|
||
|
||
G.innerHTML = filtered.map(([n, a]) => {
|
||
const cls = ['card', a.persona || 'human'];
|
||
if (a.isGap) cls.push('gap');
|
||
if (editMode) cls.push('editmode');
|
||
const safeN = n.replace(/[<>"']/g, c => ({'<':'<','>':'>','"':'"',"'":'''})[c]);
|
||
return `<div class="${cls.join(' ')}" data-name="${safeN}" title="${safeN}${editMode ? ' — Click pour éditer' : ''}">
|
||
<div class="av">${a.emoji ? a.emoji : (a.url ? '<img src="' + a.url + '" alt="" style="width:100%;height:100%;border-radius:50%;object-fit:cover" onerror="this.replaceWith(document.createTextNode(\'\\u{2753}\'))"/>' : '?')}</div>
|
||
<div class="nm">${safeN}</div>
|
||
<div class="meta">
|
||
${a.isGap ? '<span class="tag gap">GAP</span>' : ''}
|
||
${a.role ? '<span class="tag role">' + a.role + '</span>' : ''}
|
||
</div>
|
||
</div>`;
|
||
}).join('');
|
||
|
||
if (window.twemoji) {
|
||
try { twemoji.parse(G, { folder: 'svg', ext: '.svg' }); } catch(e) {}
|
||
}
|
||
|
||
document.getElementById('stats').innerHTML = '<b>' + filtered.length + '</b> / ' + entries.length + ' agents';
|
||
|
||
// Attach click handlers to cards when edit mode is ON
|
||
if (editMode) {
|
||
document.querySelectorAll('#G .card').forEach(c => {
|
||
c.onclick = () => openModal(c.dataset.name);
|
||
});
|
||
}
|
||
}
|
||
|
||
function openModal(agentName){
|
||
// Decode HTML entities (name was escaped)
|
||
const temp = document.createElement('textarea');
|
||
temp.innerHTML = agentName;
|
||
const realName = temp.value;
|
||
|
||
if (!DATA[realName]) return;
|
||
currentAgent = realName;
|
||
const a = DATA[realName];
|
||
|
||
document.getElementById('pname').textContent = realName;
|
||
document.getElementById('pmeta').textContent = [a.persona, a.role, a.isGap ? 'GAP' : ''].filter(Boolean).join(' · ');
|
||
document.getElementById('pav').innerHTML = a.emoji || (a.url ? `<img src="${a.url}" alt="">` : '?');
|
||
if (window.twemoji) { try { twemoji.parse(document.getElementById('pav'), { folder: 'svg', ext: '.svg' }); } catch(e) {} }
|
||
document.getElementById('emoInput').value = a.emoji || '';
|
||
document.getElementById('urlInput').value = a.url || '';
|
||
document.getElementById('mStatus').className = 'status';
|
||
document.getElementById('mStatus').textContent = '';
|
||
document.getElementById('saveBtn').disabled = false;
|
||
|
||
// Build emoji categorized grid
|
||
const tabs = document.getElementById('catTabs');
|
||
const grid = document.getElementById('emoGrid');
|
||
const cats = Object.keys(EMOJI_CATS);
|
||
tabs.innerHTML = cats.map((c,i) => `<button data-cat="${c}" class="${i===0?'ac':''}">${c}</button>`).join('');
|
||
const showCat = (c) => {
|
||
grid.innerHTML = EMOJI_CATS[c].map(e => `<button data-emo="${e}">${e}</button>`).join('');
|
||
if (window.twemoji) { try { twemoji.parse(grid, { folder: 'svg', ext: '.svg' }); } catch(e) {} }
|
||
grid.querySelectorAll('button').forEach(b => {
|
||
b.onclick = () => {
|
||
grid.querySelectorAll('button').forEach(x => x.classList.remove('sel'));
|
||
b.classList.add('sel');
|
||
document.getElementById('emoInput').value = b.dataset.emo;
|
||
document.getElementById('pav').innerHTML = b.dataset.emo;
|
||
if (window.twemoji) { try { twemoji.parse(document.getElementById('pav'), { folder: 'svg', ext: '.svg' }); } catch(e) {} }
|
||
};
|
||
});
|
||
};
|
||
showCat(cats[0]);
|
||
tabs.querySelectorAll('button').forEach(b => {
|
||
b.onclick = () => {
|
||
tabs.querySelectorAll('button').forEach(x => x.classList.remove('ac'));
|
||
b.classList.add('ac');
|
||
showCat(b.dataset.cat);
|
||
};
|
||
});
|
||
|
||
// Live preview update
|
||
document.getElementById('emoInput').oninput = e => {
|
||
const v = e.target.value;
|
||
document.getElementById('pav').innerHTML = v || (a.url ? `<img src="${a.url}" alt="">` : '?');
|
||
if (window.twemoji) { try { twemoji.parse(document.getElementById('pav'), { folder: 'svg', ext: '.svg' }); } catch(e) {} }
|
||
};
|
||
|
||
document.getElementById('modalBd').classList.add('open');
|
||
}
|
||
|
||
function closeModal(){
|
||
document.getElementById('modalBd').classList.remove('open');
|
||
currentAgent = null;
|
||
}
|
||
|
||
async function saveAvatar(){
|
||
if (!currentAgent) return;
|
||
const emoji = document.getElementById('emoInput').value.trim();
|
||
const url = document.getElementById('urlInput').value.trim();
|
||
const stat = document.getElementById('mStatus');
|
||
const btn = document.getElementById('saveBtn');
|
||
|
||
const body = { agent: currentAgent };
|
||
if (emoji) body.emoji = emoji;
|
||
if (url) body.url = url;
|
||
|
||
if (!emoji && !url) {
|
||
stat.className = 'status err';
|
||
stat.textContent = 'Au moins un champ (emoji ou URL) doit être rempli';
|
||
return;
|
||
}
|
||
|
||
btn.disabled = true;
|
||
stat.className = 'status loading';
|
||
stat.textContent = 'Enregistrement...';
|
||
|
||
try {
|
||
const r = await fetch('/api/agent-avatar-update.php', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify(body)
|
||
});
|
||
const j = await r.json();
|
||
if (!j.ok) {
|
||
stat.className = 'status err';
|
||
stat.textContent = 'Erreur : ' + (j.error || 'unknown');
|
||
btn.disabled = false;
|
||
return;
|
||
}
|
||
// Update local DATA
|
||
if (emoji) DATA[currentAgent].emoji = emoji;
|
||
if (url) DATA[currentAgent].url = url;
|
||
stat.className = 'status ok';
|
||
stat.textContent = '✓ Sauvegardé · backup : ' + j.backup;
|
||
render();
|
||
setTimeout(closeModal, 900);
|
||
} catch (e) {
|
||
stat.className = 'status err';
|
||
stat.textContent = 'Erreur réseau : ' + e.message;
|
||
btn.disabled = false;
|
||
}
|
||
}
|
||
|
||
// Bindings
|
||
document.getElementById('editToggle').onclick = () => setEditMode(!editMode);
|
||
document.addEventListener('keydown', e => { if (e.key === 'Escape') closeModal(); });
|
||
document.getElementById('modalBd').onclick = (e) => { if (e.target.id === 'modalBd') closeModal(); };
|
||
|
||
load();
|
||
</script>
|
||
|
||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||
<!-- WTP_UDOCK_V1 (Opus 21-avr t34final) --><script src="/wtp-unified-dock.js" defer></script>
|
||
<script src="/opus-antioverlap-doctrine.js?v=1776776094" defer></script>
|
||
</body></html>
|