{"id":18,"date":"2025-07-07T09:18:06","date_gmt":"2025-07-07T09:18:06","guid":{"rendered":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/?page_id=18"},"modified":"2026-03-06T10:48:06","modified_gmt":"2026-03-06T10:48:06","slug":"accueil","status":"publish","type":"page","link":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/","title":{"rendered":"Accueil"},"content":{"rendered":"<p>import { useState, useRef, useEffect } from \u00ab\u00a0react\u00a0\u00bb;<\/p>\n<p>const SYSTEM_PROMPT = `Tu es un formateur expert et p\u00e9dagogue en P\u00f4le 2 &#8211; N\u00e9gociation \u00e0 distance et digitalisation du BTS NDRC (Brevet de Technicien Sup\u00e9rieur en N\u00e9gociation \u00e0 Distance et Relation client). Tu connais parfaitement le r\u00e9f\u00e9rentiel du BTS NDRC ainsi que la progression p\u00e9dagogique du P\u00f4le 2. Tu es aussi un expert en WordPress avec le th\u00e8me Astra et les extensions Spectra et Yoast SEO ainsi qu&rsquo;en Prestashop.<\/p>\n<p>MISSION : Tu accompagnes les \u00e9tudiants en BTS NDRC dans leurs r\u00e9visions de la mati\u00e8re P\u00f4le 2 tout au long des deux ann\u00e9es d&rsquo;\u00e9tudes pour les pr\u00e9parer aux examens. Tu r\u00e9ponds \u00e0 leurs questions, proposes des quiz et des exercices. Quand tu ne sais pas, tu les rediriges vers leurs formateurs.<\/p>\n<p>TONALIT\u00c9 : P\u00e9dagogique, bienveillant, encourageant. Tu utilises le vouvoiement. Tu expliques toujours les notions utilis\u00e9es. Tu cherches \u00e0 accro\u00eetre la motivation de l&rsquo;apprenant.<\/p>\n<p>FORMAT DES R\u00c9PONSES :<br \/>\n&#8211; R\u00e9sum\u00e9 avec notions importantes en gras<br \/>\n&#8211; Listes \u00e0 puces<br \/>\n&#8211; Propositions de quiz et exercices pour v\u00e9rifier l&rsquo;ancrage des savoirs<br \/>\n&#8211; Tableaux si utile<\/p>\n<p>PROCESSUS :<br \/>\n1. Comprendre la question (th\u00e9orie, pratique, exercice ?)<br \/>\n2. Adapter au niveau de l&rsquo;\u00e9tudiant (1\u00e8re ou 2\u00e8me ann\u00e9e)<br \/>\n3. Structurer : introduction courte \u2192 d\u00e9veloppement \u2192 exemple concret \u2192 r\u00e9sum\u00e9<br \/>\n4. Toujours v\u00e9rifier la compr\u00e9hension avec une question ou un mini-exercice<br \/>\n5. Feedback bienveillant et adaptatif<\/p>\n<p>CONTRAINTES ABSOLUES :<br \/>\n&#8211; Respecter strictement le r\u00e9f\u00e9rentiel BTS NDRC P\u00f4le 2<br \/>\n&#8211; Ne jamais faire le travail \u00e0 la place de l&rsquo;\u00e9tudiant pour un devoir \u00e9valu\u00e9<br \/>\n&#8211; Ne jamais inventer des sources, r\u00e9f\u00e9rentiels ou fonctionnalit\u00e9s<br \/>\n&#8211; Ne jamais juger l&rsquo;apprenant<br \/>\n&#8211; Toujours contextualiser dans des situations professionnelles r\u00e9elles (prospection, n\u00e9gociation \u00e0 distance, CRM, e-commerce, relation client digitale)<br \/>\n&#8211; Favoriser l&rsquo;apprentissage actif : toujours inclure une question, un exercice ou une mise en situation<br \/>\n&#8211; Si incertain \u2192 demander clarification. Si hors comp\u00e9tence \u2192 rediriger vers le formateur<\/p>\n<p>AMORCE : \u00c0 la premi\u00e8re prise de contact, saluer l&rsquo;apprenant, lui demander o\u00f9 il se situe dans le programme, et lui proposer un quiz r\u00e9capitulatif ou des exercices.`;<\/p>\n<p>const STORAGE_KEY = \u00ab\u00a0bts_ndrc_sessions\u00a0\u00bb;<\/p>\n<p>function loadSessions() {<br \/>\n  try {<br \/>\n    const raw = localStorage.getItem(STORAGE_KEY);<br \/>\n    return raw ? JSON.parse(raw) : [];<br \/>\n  } catch { return []; }<br \/>\n}<\/p>\n<p>function saveSessions(sessions) {<br \/>\n  try { localStorage.setItem(STORAGE_KEY, JSON.stringify(sessions)); } catch {}<br \/>\n}<\/p>\n<p>function formatDate(iso) {<br \/>\n  const d = new Date(iso);<br \/>\n  return d.toLocaleDateString(\u00ab\u00a0fr-FR\u00a0\u00bb, { day: \u00ab\u00a02-digit\u00a0\u00bb, month: \u00ab\u00a0short\u00a0\u00bb, hour: \u00ab\u00a02-digit\u00a0\u00bb, minute: \u00ab\u00a02-digit\u00a0\u00bb });<br \/>\n}<\/p>\n<p>function getPreview(messages) {<br \/>\n  const first = messages.find(m => m.role === \u00ab\u00a0user\u00a0\u00bb);<br \/>\n  return first ? first.content.slice(0, 48) + (first.content.length > 48 ? \u00ab\u00a0\u2026\u00a0\u00bb : \u00ab\u00a0\u00a0\u00bb) : \u00ab\u00a0Session vide\u00a0\u00bb;<br \/>\n}<\/p>\n<p>export default function App() {<br \/>\n  const [sessions, setSessions] = useState(loadSessions);<br \/>\n  const [activeId, setActiveId] = useState(null);<br \/>\n  const [messages, setMessages] = useState([]);<br \/>\n  const [input, setInput] = useState(\u00ab\u00a0\u00a0\u00bb);<br \/>\n  const [loading, setLoading] = useState(false);<br \/>\n  const [sidebarOpen, setSidebarOpen] = useState(true);<br \/>\n  const bottomRef = useRef(null);<br \/>\n  const fileRef = useRef(null);<\/p>\n<p>  useEffect(() => { bottomRef.current?.scrollIntoView({ behavior: \u00ab\u00a0smooth\u00a0\u00bb }); }, [messages, loading]);<\/p>\n<p>  const persistSession = (id, msgs) => {<br \/>\n    setSessions(prev => {<br \/>\n      const existing = prev.find(s => s.id === id);<br \/>\n      let updated;<br \/>\n      if (existing) {<br \/>\n        updated = prev.map(s => s.id === id ? { &#8230;s, messages: msgs, updatedAt: new Date().toISOString() } : s);<br \/>\n      } else {<br \/>\n        updated = [{ id, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), messages: msgs }, &#8230;prev];<br \/>\n      }<br \/>\n      saveSessions(updated);<br \/>\n      return updated;<br \/>\n    });<br \/>\n  };<\/p>\n<p>  const newSession = async () => {<br \/>\n    const id = Date.now().toString();<br \/>\n    setActiveId(id);<br \/>\n    setMessages([]);<br \/>\n    setLoading(true);<br \/>\n    setSidebarOpen(false);<br \/>\n    try {<br \/>\n      const res = await fetch(\u00ab\u00a0https:\/\/api.anthropic.com\/v1\/messages\u00a0\u00bb, {<br \/>\n        method: \u00ab\u00a0POST\u00a0\u00bb,<br \/>\n        headers: { \u00ab\u00a0Content-Type\u00a0\u00bb: \u00ab\u00a0application\/json\u00a0\u00bb },<br \/>\n        body: JSON.stringify({<br \/>\n          model: \u00ab\u00a0claude-sonnet-4-20250514\u00a0\u00bb,<br \/>\n          max_tokens: 1000,<br \/>\n          system: SYSTEM_PROMPT,<br \/>\n          messages: [{ role: \u00ab\u00a0user\u00a0\u00bb, content: \u00ab\u00a0Bonjour, commence la session.\u00a0\u00bb }]<br \/>\n        })<br \/>\n      });<br \/>\n      const data = await res.json();<br \/>\n      const text = data.content?.map(b => b.text || \u00ab\u00a0\u00a0\u00bb).join(\u00ab\u00a0\u00a0\u00bb) || \u00ab\u00a0Bonjour !\u00a0\u00bb;<br \/>\n      const initMsgs = [{ role: \u00ab\u00a0assistant\u00a0\u00bb, content: text }];<br \/>\n      setMessages(initMsgs);<br \/>\n      persistSession(id, initMsgs);<br \/>\n    } catch {<br \/>\n      const errMsgs = [{ role: \u00ab\u00a0assistant\u00a0\u00bb, content: \u00ab\u00a0Une erreur est survenue. Veuillez r\u00e9essayer.\u00a0\u00bb }];<br \/>\n      setMessages(errMsgs);<br \/>\n      persistSession(id, errMsgs);<br \/>\n    }<br \/>\n    setLoading(false);<br \/>\n  };<\/p>\n<p>  const openSession = (s) => {<br \/>\n    setActiveId(s.id);<br \/>\n    setMessages(s.messages);<br \/>\n    setSidebarOpen(false);<br \/>\n  };<\/p>\n<p>  const deleteSession = (e, id) => {<br \/>\n    e.stopPropagation();<br \/>\n    setSessions(prev => { const u = prev.filter(s => s.id !== id); saveSessions(u); return u; });<br \/>\n    if (activeId === id) { setActiveId(null); setMessages([]); }<br \/>\n  };<\/p>\n<p>  const sendMessage = async () => {<br \/>\n    if (!input.trim() || loading || !activeId) return;<br \/>\n    const userMsg = { role: \u00ab\u00a0user\u00a0\u00bb, content: input.trim() };<br \/>\n    const newMessages = [&#8230;messages, userMsg];<br \/>\n    setMessages(newMessages);<br \/>\n    setInput(\u00ab\u00a0\u00a0\u00bb);<br \/>\n    setLoading(true);<br \/>\n    try {<br \/>\n      const res = await fetch(\u00ab\u00a0https:\/\/api.anthropic.com\/v1\/messages\u00a0\u00bb, {<br \/>\n        method: \u00ab\u00a0POST\u00a0\u00bb,<br \/>\n        headers: { \u00ab\u00a0Content-Type\u00a0\u00bb: \u00ab\u00a0application\/json\u00a0\u00bb },<br \/>\n        body: JSON.stringify({<br \/>\n          model: \u00ab\u00a0claude-sonnet-4-20250514\u00a0\u00bb,<br \/>\n          max_tokens: 1000,<br \/>\n          system: SYSTEM_PROMPT,<br \/>\n          messages: newMessages<br \/>\n        })<br \/>\n      });<br \/>\n      const data = await res.json();<br \/>\n      const text = data.content?.map(b => b.text || \u00ab\u00a0\u00a0\u00bb).join(\u00ab\u00a0\u00a0\u00bb) || \u00ab\u00a0Je n&rsquo;ai pas pu r\u00e9pondre.\u00a0\u00bb;<br \/>\n      const finalMsgs = [&#8230;newMessages, { role: \u00ab\u00a0assistant\u00a0\u00bb, content: text }];<br \/>\n      setMessages(finalMsgs);<br \/>\n      persistSession(activeId, finalMsgs);<br \/>\n    } catch {<br \/>\n      const errMsgs = [&#8230;newMessages, { role: \u00ab\u00a0assistant\u00a0\u00bb, content: \u00ab\u00a0Une erreur est survenue.\u00a0\u00bb }];<br \/>\n      setMessages(errMsgs);<br \/>\n      persistSession(activeId, errMsgs);<br \/>\n    }<br \/>\n    setLoading(false);<br \/>\n  };<\/p>\n<p>  const handleKey = (e) => {<br \/>\n    if (e.key === \u00ab\u00a0Enter\u00a0\u00bb &#038;&#038; !e.shiftKey) { e.preventDefault(); sendMessage(); }<br \/>\n  };<\/p>\n<p>  const formatText = (text) => {<br \/>\n    return text.split(\u00ab\u00a0\\n\u00a0\u00bb).map((line, i) => {<br \/>\n      line = line.replace(\/\\*\\*(.*?)\\*\\*\/g, (_, m) => `<strong>${m}<\/strong>`);<br \/>\n      if (\/^[-\u2022]\\s\/.test(line)) return <\/p>\n<li key={i} style={{ marginLeft: 18, marginBottom: 4 }} dangerouslySetInnerHTML={{ __html: line.replace(\/^[-\u2022]\\s\/, \"\") }} \/>;<br \/>\n      if (\/^\\d+\\.\\s\/.test(line)) return <\/p>\n<li key={i} style={{ marginLeft: 18, marginBottom: 4, listStyleType: \"decimal\" }} dangerouslySetInnerHTML={{ __html: line.replace(\/^\\d+\\.\\s\/, \"\") }} \/>;<br \/>\n      if (line.trim() === \u00ab\u00a0\u00a0\u00bb) return <br key={i} \/>;<br \/>\n      return <\/p>\n<p key={i} style={{ margin: \"3px 0\" }} dangerouslySetInnerHTML={{ __html: line }} \/>;<br \/>\n    });<br \/>\n  };<\/p>\n<p>  const blue = \u00ab\u00a0#1a237e\u00a0\u00bb, lightBlue = \u00ab\u00a0#1565c0\u00a0\u00bb;<\/p>\n<p>  return (<\/p>\n<div style={{ display: \"flex\", height: \"100vh\", fontFamily: \"'Segoe UI', sans-serif\", background: \"#f0f2ff\" }}>\n<p>      {\/* Sidebar *\/}<\/p>\n<div style={{ width: sidebarOpen ? 260 : 0, minWidth: sidebarOpen ? 260 : 0, background: blue, color: \"#fff\", display: \"flex\", flexDirection: \"column\", transition: \"all 0.3s\", overflow: \"hidden\" }}>\n<div style={{ padding: \"18px 16px 10px\", borderBottom: \"1px solid rgba(255,255,255,0.1)\" }}>\n<div style={{ fontWeight: 700, fontSize: 14, marginBottom: 2 }}>\ud83c\udf93 BTS NDRC \u2013 P\u00f4le 2<\/div>\n<div style={{ fontSize: 11, opacity: 0.6 }}>Assistant de r\u00e9vision<\/div>\n<\/p><\/div>\n<div style={{ padding: \"10px 12px\" }}>\n          <button onClick={newSession} style={{ width: \"100%\", background: \"rgba(255,255,255,0.15)\", border: \"1px solid rgba(255,255,255,0.3)\", color: \"#fff\", borderRadius: 10, padding: \"9px 12px\", fontSize: 13, cursor: \"pointer\", display: \"flex\", alignItems: \"center\", gap: 8, fontWeight: 600 }}><br \/>\n            \uff0b Nouvelle session<br \/>\n          <\/button>\n        <\/div>\n<p>        {\/* Sessions list *\/}<\/p>\n<div style={{ flex: 1, overflowY: \"auto\", padding: \"0 12px 12px\" }}>\n          {sessions.length === 0 ? (<\/p>\n<div style={{ fontSize: 12, opacity: 0.5, textAlign: \"center\", marginTop: 20 }}>Aucune session<\/div>\n<p>          ) : (<br \/>\n            sessions.map(s => (<\/p>\n<div key={s.id} onClick={() => openSession(s)} style={{ background: activeId === s.id ? \u00ab\u00a0rgba(255,255,255,0.2)\u00a0\u00bb : \u00ab\u00a0rgba(255,255,255,0.06)\u00a0\u00bb, borderRadius: 10, padding: \u00ab\u00a09px 10px\u00a0\u00bb, marginBottom: 6, cursor: \u00ab\u00a0pointer\u00a0\u00bb, display: \u00ab\u00a0flex\u00a0\u00bb, justifyContent: \u00ab\u00a0space-between\u00a0\u00bb, alignItems: \u00ab\u00a0flex-start\u00a0\u00bb, border: activeId === s.id ? \u00ab\u00a01px solid rgba(255,255,255,0.3)\u00a0\u00bb : \u00ab\u00a01px solid transparent\u00a0\u00bb }}><\/p>\n<div style={{ flex: 1, minWidth: 0 }}>\n<div style={{ fontSize: 12, fontWeight: 600, whiteSpace: \"nowrap\", overflow: \"hidden\", textOverflow: \"ellipsis\" }}>{getPreview(s.messages)}<\/div>\n<div style={{ fontSize: 10, opacity: 0.55, marginTop: 2 }}>{formatDate(s.updatedAt)}<\/div>\n<\/p><\/div>\n<p>                <button onClick={e => deleteSession(e, s.id)} style={{ background: \u00ab\u00a0none\u00a0\u00bb, border: \u00ab\u00a0none\u00a0\u00bb, color: \u00ab\u00a0rgba(255,255,255,0.4)\u00a0\u00bb, cursor: \u00ab\u00a0pointer\u00a0\u00bb, fontSize: 14, marginLeft: 6, padding: 0 }}>\u2715<\/button>\n              <\/div>\n<p>            ))<br \/>\n          )}\n        <\/p><\/div>\n<\/p><\/div>\n<p>      {\/* Main *\/}<\/p>\n<div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", overflow: \"hidden\" }}>\n        {\/* Topbar *\/}<\/p>\n<div style={{ background: \"#fff\", borderBottom: \"1px solid #e0e4ff\", padding: \"12px 20px\", display: \"flex\", alignItems: \"center\", gap: 12 }}>\n          <button onClick={() => setSidebarOpen(!sidebarOpen)} style={{ background: \u00ab\u00a0none\u00a0\u00bb, border: \u00ab\u00a0none\u00a0\u00bb, cursor: \u00ab\u00a0pointer\u00a0\u00bb, fontSize: 20, color: blue }}>\u2630<\/button><\/p>\n<div style={{ fontWeight: 700, color: blue, fontSize: 15 }}>P\u00f4le 2 \u2013 N\u00e9gociation \u00e0 distance &#038; Digitalisation<\/div>\n<p>          {activeId &#038;&#038; <\/p>\n<div style={{ marginLeft: \"auto\", fontSize: 11, color: \"#888\" }}>{messages.length} message{messages.length > 1 ? \u00ab\u00a0s\u00a0\u00bb : \u00ab\u00a0\u00a0\u00bb}<\/div>\n<p>}\n        <\/p><\/div>\n<p>        {\/* Chat *\/}<\/p>\n<div style={{ flex: 1, overflowY: \"auto\", padding: 20, display: \"flex\", flexDirection: \"column\", gap: 14 }}>\n          {!activeId ? (<\/p>\n<div style={{ flex: 1, display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", gap: 20 }}>\n<div style={{ fontSize: 60 }}>\ud83d\udcda<\/div>\n<div style={{ textAlign: \"center\" }}>\n<div style={{ fontWeight: 700, fontSize: 22, color: blue }}>Bienvenue dans votre assistant de r\u00e9vision<\/div>\n<div style={{ color: \"#666\", fontSize: 14, marginTop: 8, maxWidth: 400 }}>Cr\u00e9ez une nouvelle session ou reprenez une session pr\u00e9c\u00e9dente depuis l&rsquo;historique.<\/div>\n<\/p><\/div>\n<p>              <button onClick={newSession} style={{ background: `linear-gradient(90deg,${blue},${lightBlue})`, color: \"#fff\", border: \"none\", borderRadius: 12, padding: \"14px 36px\", fontSize: 15, fontWeight: 600, cursor: \"pointer\", boxShadow: \"0 4px 15px rgba(26,35,126,0.3)\" }}><br \/>\n                Commencer une session<br \/>\n              <\/button>\n            <\/div>\n<p>          ) : (<br \/>\n            <><br \/>\n              {messages.map((m, i) => (<\/p>\n<div key={i} style={{ display: \"flex\", justifyContent: m.role === \"user\" ? \"flex-end\" : \"flex-start\" }}>\n                  {m.role === \u00ab\u00a0assistant\u00a0\u00bb &#038;&#038; (<\/p>\n<div style={{ width: 34, height: 34, borderRadius: \"50%\", background: blue, color: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 15, marginRight: 8, flexShrink: 0, alignSelf: \"flex-start\", marginTop: 2 }}>\ud83c\udf93<\/div>\n<p>                  )}<\/p>\n<div style={{ maxWidth: \"75%\", background: m.role === \"user\" ? `linear-gradient(90deg,${blue},${lightBlue})` : \"#fff\", color: m.role === \"user\" ? \"#fff\" : \"#222\", borderRadius: m.role === \"user\" ? \"18px 18px 4px 18px\" : \"18px 18px 18px 4px\", padding: \"11px 15px\", fontSize: 14, lineHeight: 1.65, boxShadow: \"0 2px 8px rgba(0,0,0,0.07)\" }}>\n                    {m.role === \u00ab\u00a0assistant\u00a0\u00bb ? formatText(m.content) : m.content}\n                  <\/div>\n<\/p><\/div>\n<p>              ))}<br \/>\n              {loading &#038;&#038; (<\/p>\n<div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n<div style={{ width: 34, height: 34, borderRadius: \"50%\", background: blue, color: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", fontSize: 15 }}>\ud83c\udf93<\/div>\n<div style={{ background: \"#fff\", borderRadius: \"18px 18px 18px 4px\", padding: \"12px 18px\", boxShadow: \"0 2px 8px rgba(0,0,0,0.07)\" }}>\n                    <span style={{ display: \"inline-flex\", gap: 5 }}><br \/>\n                      {[0,1,2].map(j => <span key={j} style={{ width: 7, height: 7, borderRadius: \"50%\", background: blue, display: \"inline-block\", animation: `bounce 1s ${j*0.2}s infinite` }} \/>)}<br \/>\n                    <\/span>\n                  <\/div>\n<\/p><\/div>\n<p>              )}<\/p>\n<div ref={bottomRef} \/>\n            <\/><br \/>\n          )}\n        <\/div>\n<p>        {\/* Input *\/}<br \/>\n        {activeId &#038;&#038; (<\/p>\n<div style={{ padding: \"14px 20px\", background: \"#fff\", borderTop: \"1px solid #e0e4ff\", display: \"flex\", gap: 10 }}>\n            <textarea\n              value={input}\n              onChange={e => setInput(e.target.value)}<br \/>\n              onKeyDown={handleKey}<br \/>\n              placeholder=\u00a0\u00bbPosez votre question sur le P\u00f4le 2\u2026 (Entr\u00e9e pour envoyer)\u00a0\u00bb<br \/>\n              rows={2}<br \/>\n              style={{ flex: 1, border: \u00ab\u00a01.5px solid #c5cae9\u00a0\u00bb, borderRadius: 12, padding: \u00ab\u00a010px 14px\u00a0\u00bb, fontSize: 14, fontFamily: \u00ab\u00a0inherit\u00a0\u00bb, resize: \u00ab\u00a0none\u00a0\u00bb, outline: \u00ab\u00a0none\u00a0\u00bb, lineHeight: 1.5 }}<br \/>\n            \/><br \/>\n            <button onClick={sendMessage} disabled={loading || !input.trim()} style={{ background: loading || !input.trim() ? \"#c5cae9\" : `linear-gradient(90deg,${blue},${lightBlue})`, color: \"#fff\", border: \"none\", borderRadius: 12, padding: \"0 20px\", fontSize: 20, cursor: loading || !input.trim() ? \"not-allowed\" : \"pointer\" }}><br \/>\n              \u27a4<br \/>\n            <\/button>\n          <\/div>\n<p>        )}\n      <\/p><\/div>\n<style>{`@keyframes bounce{0%,80%,100%{transform:translateY(0)}40%{transform:translateY(-6px)}}`}<\/style>\n<\/p><\/div>\n<p>  );<br \/>\n}<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-18","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"ArnaudRivoal","author_link":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/author\/arnaudrivoal\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/pages\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":4,"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/pages\/18\/revisions"}],"predecessor-version":[{"id":39,"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/pages\/18\/revisions\/39"}],"wp:attachment":[{"href":"https:\/\/www.ndrc2324.cfa-ia-projetweb.fr\/sitedereference\/wp-json\/wp\/v2\/media?parent=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}