Tableau de bord thermique du calendrier de la permanence des archives
Dans un scénario de poste de surveillance des archives, réalisez un panneau de chaleur du calendrier : contenu réel, contrôles actionnables, retour d’état clair et mise en page adaptative selon les tailles.
Après activation de JavaScript, ce cas peut être modifié, exécuté et enregistré. Code source fixe ci-dessous :
<!doctype html>
<html lang="fr" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tableau de bord thermique du calendrier de la permanence des archives</title>
<style>
:root { --ink:#ecf7f3; --paper:#071310; --accent:#c66a2d; --secondary:#b5c88d; --line:color-mix(in srgb, var(--ink) 18%, transparent); --shadow:0 24px 60px color-mix(in srgb, var(--ink) 16%, transparent); color-scheme:light; }
* { box-sizing:border-box; }
html { min-width:320px; background:var(--paper); }
body { min-height:100vh; margin:0; overflow-x:hidden; color:var(--ink); font-family:ui-monospace,"SFMono-Regular",Consolas,monospace; background:linear-gradient(color-mix(in srgb,var(--secondary) 5%,transparent) 1px,transparent 1px),linear-gradient(90deg,color-mix(in srgb,var(--secondary) 5%,transparent) 1px,transparent 1px),var(--paper);background-size:24px 24px; }
button,input,select,textarea { color:inherit; font:inherit; }
button,[role="button"],input,select,textarea { accent-color:var(--accent); }
button { cursor:pointer; }
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible { outline:3px solid var(--accent); outline-offset:3px; }
[hidden] { display:none !important; }
@media (max-width:700px) { .mast h1 { line-height:1.08 !important; letter-spacing:-.035em !important; overflow-wrap:anywhere; } }
@media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto !important; animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; } }
.page{width:min(1080px,calc(100% - 30px));margin:auto;padding:48px 0}.eyebrow{color:var(--secondary);font:700 12px/1.3 ui-monospace,monospace}.eyebrow::before{content:"> ";color:var(--accent)}.mast{display:grid;grid-template-columns:1fr auto;border:1px solid var(--secondary);padding:18px;gap:24px;align-items:center;margin-bottom:16px}.mast h1{font-family:ui-monospace,"SFMono-Regular",monospace;font-weight:700;font-size:clamp(34px,7vw,72px);letter-spacing:-.055em;margin:12px 0;line-height:1.05}.intro{margin:0;color:color-mix(in srgb,var(--ink) 72%,transparent);font:400 14px/1.7 ui-monospace,monospace}.scenario{padding:7px 10px;border:1px dashed var(--secondary);font:700 11px/1 ui-monospace,monospace}.demo{border-color:var(--secondary);border-radius:8px;box-shadow:0 0 50px color-mix(in srgb,var(--secondary) 15%,transparent);position:relative;min-height:390px;padding:26px;background:color-mix(in srgb,var(--paper) 94%,#000)}@media(max-width:700px){.page{width:calc(100% - 18px);padding:20px 0}.mast{grid-template-columns:1fr}.demo{padding:14px}}
.panel{padding:16px;border:3px double var(--accent);background:var(--paper)}.stack{display:grid;gap:14px}.row{display:grid;grid-auto-flow:column;grid-auto-columns:max-content;gap:10px;overflow:auto}.action{padding:10px 15px;border:1px solid var(--accent);background:transparent;font-family:Didot,serif;letter-spacing:.06em}.action.primary,.action.is-active{color:var(--paper);background:var(--ink)}.metric{font-family:Didot,serif;font-size:clamp(36px,8vw,74px);letter-spacing:.04em}.status{min-height:24px;padding:9px;border-inline:1px solid var(--accent);text-align:center}.muted{line-height:1.8}.chip{padding:5px 14px;border-inline:1px solid var(--accent);letter-spacing:.1em}.meter{height:5px;background:var(--line)}.meter>i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--secondary))}
.composition-index{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px}.index-mark{display:grid;align-content:space-between;width:76px;padding:16px 10px;border:1px solid var(--line);color:var(--accent);background:color-mix(in srgb,var(--paper) 82%,transparent);text-align:center}.index-mark strong{font:900 34px/1 ui-monospace,monospace}.index-mark span{writing-mode:vertical-rl;font:800 10px/1.2 ui-monospace,monospace;letter-spacing:.18em}.composition-index .demo{grid-column:1;grid-row:1}.composition-index::before{content:"";position:absolute;left:-12px;top:38px;width:5px;height:45%;background:linear-gradient(var(--accent),var(--secondary))}@media(max-width:700px){.composition-index{grid-template-columns:1fr}.index-mark{grid-row:1;width:auto;grid-template-columns:auto 1fr}.index-mark span{writing-mode:horizontal-tb}.composition-index .demo{grid-row:2}}
.calendar-heatmap-studio{display:grid;gap:12px;max-width:860px;margin:auto}.calendar-heatmap-studio header{display:flex;justify-content:space-between;gap:18px;align-items:end}.calendar-heatmap-studio h2{margin:.3em 0}.heatmap-layout{display:grid;grid-template-columns:minmax(0,1.2fr) 220px;gap:14px}.weekday-row,.calendar-heatmap{display:grid;grid-template-columns:repeat(7,1fr);gap:7px}.weekday-row{text-align:center;font-size:12px}.calendar-heatmap button{aspect-ratio:1;border:0;border-radius:8px;background:color-mix(in srgb,var(--accent) calc(var(--heat)*20%),var(--paper))}.calendar-heatmap [data-heat="0"]{--heat:0}.calendar-heatmap [data-heat="1"]{--heat:1}.calendar-heatmap [data-heat="2"]{--heat:2}.calendar-heatmap [data-heat="3"]{--heat:3}.calendar-heatmap [data-heat="4"]{--heat:4;color:var(--paper)}.calendar-heatmap button[aria-selected="true"]{outline:3px solid var(--ink);outline-offset:2px}.calendar-heatmap-studio footer{display:flex;gap:5px;justify-content:flex-end;align-items:center}.calendar-heatmap-studio footer i{width:16px;height:16px;border-radius:4px;background:var(--line)}.calendar-heatmap-studio footer i:nth-of-type(2){background:color-mix(in srgb,var(--accent) 25%,var(--paper))}.calendar-heatmap-studio footer i:nth-of-type(3){background:color-mix(in srgb,var(--accent) 50%,var(--paper))}.calendar-heatmap-studio footer i:nth-of-type(4){background:color-mix(in srgb,var(--accent) 75%,var(--paper))}.calendar-heatmap-studio footer i:nth-of-type(5){background:var(--accent)}.heatmap-layout aside{display:grid;align-content:start;gap:10px;padding:16px;border-left:4px solid var(--accent);background:color-mix(in srgb,var(--secondary) 12%,transparent)}.heatmap-layout aside ol{display:grid;gap:8px;padding-left:18px;margin:0}@media(max-width:700px){.calendar-heatmap-studio header{align-items:stretch;flex-direction:column}.heatmap-layout{grid-template-columns:1fr}}.workflow-guide{display:grid;grid-template-columns:190px minmax(0,1fr);grid-template-areas:"rail core" "rail evidence";gap:14px 18px}.guide-rail{grid-area:rail;display:grid;align-content:start;gap:15px;padding:18px;border-right:1px solid var(--line)}.guide-rail ol{display:grid;gap:8px;padding:0;margin:0;list-style:none}.guide-rail li{display:grid;grid-template-columns:30px 1fr;gap:8px;align-items:center;padding:9px;opacity:.5}.guide-rail li[aria-current="step"]{opacity:1;color:var(--paper);background:var(--ink)}.guide-rail li.is-complete{opacity:1;color:var(--accent)}.guide-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px}.guide-actions .action{padding-inline:8px}#workflowGuideProgress{height:6px;background:var(--line)}#workflowGuideProgress i{display:block;width:0;height:100%;background:var(--accent)}.guide-core{grid-area:core;min-width:0;padding:16px;border:1px solid var(--line)}.guide-core>p{margin:0 0 14px;padding:10px;border-left:4px solid var(--accent);background:color-mix(in srgb,var(--secondary) 12%,transparent)}.guide-core[data-guide-step="1"]{border-radius:28px}.guide-core[data-guide-step="2"]{box-shadow:inset 0 0 0 4px color-mix(in srgb,var(--accent) 35%,transparent)}.guide-evidence{grid-area:evidence;display:grid;grid-template-columns:1fr 1fr auto;gap:12px;align-items:start}.guide-evidence details,.guide-evidence form{padding:12px;border:1px solid var(--line)}.guide-evidence label{display:grid;gap:7px}.guide-evidence textarea{width:100%;padding:9px;border:1px solid var(--line);background:var(--paper)}@media(max-width:900px){.workflow-guide{grid-template-columns:1fr;grid-template-areas:"core" "rail" "evidence"}.guide-rail{border-right:0;border-bottom:1px solid var(--line)}.guide-rail ol{grid-template-columns:repeat(3,1fr)}.guide-evidence{grid-template-columns:1fr}}
</style>
</head>
<body data-aesthetic="terminal" data-composition="field-index">
<main class="page">
<header class="mast"><div><span class="eyebrow">terminal / tableau de chaleur du calendrier / INTERMEDIATE</span><h1>Tableau de bord thermique du calendrier de la permanence des archives</h1><p class="intro">Dans un scénario de poste de surveillance des archives, réalisez un panneau de chaleur du calendrier : contenu réel, contrôles actionnables, retour d’état clair et mise en page adaptative selon les tailles.</p></div><span class="scenario">Poste de garde des archives</span></header>
<div class="composition-index"><section class="demo" aria-label="Zone d’interaction du tableau de bord thermique du calendrier de la permanence des archives"><div class="workflow-guide"><nav class="guide-rail" aria-label="Guide du poste de garde des archives"><span class="eyebrow">Poste de veille des archives GUIDE</span><ol><li data-workflow-guide-step="0" aria-current="step"><b>1</b><span>Vue de surveillance du poste de garde des archives</span></li><li data-workflow-guide-step="1"><b>2</b><span>Vue de gestion du poste de garde des archives</span></li><li data-workflow-guide-step="2"><b>3</b><span>vue de bilan du poste de garde des archives</span></li></ol><div class="guide-actions"><button id="workflowGuideBack" class="action" type="button" disabled>Étape précédente</button><button id="workflowGuideNext" class="action primary" type="button">Terminer cette étape</button></div><div id="workflowGuideProgress" role="progressbar" aria-label="Avancement du poste de surveillance des archives" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><i></i></div></nav><section id="workflowCore" class="workflow-core guide-core" data-guide-step="0" aria-describedby="workflowGuideInstruction"><p id="workflowGuideInstruction">Veuillez effectuer les opérations liées à « Vue de surveillance du poste de garde des archives » dans le cas principal.</p><!-- 11DZ_CORE_START:dashboards-admin-calendar-heatmap --><div class="calendar-heatmap-studio"><header><div><span class="eyebrow">CALENDAR HEATMAP</span><h2>Calendrier d’activité du poste de garde des archives</h2></div><output id="heatmapSelection">Sélectionnez une date pour voir le niveau d’activité</output></header><div class="heatmap-layout"><section><div class="weekday-row"><span>Un</span><span>Deux</span><span>trois</span><span>quatre</span><span>Cinq</span><span>Six</span><span>Jour</span></div><div class="calendar-heatmap" role="grid" aria-label="7 activité mensuelle"><button type="button" role="gridcell" data-heat="2" aria-label="7 mois 1 jour, activité 2" data-core-bridge="dashboards-admin-calendar-heatmap">1</button><button type="button" role="gridcell" data-heat="4" aria-label="7 mois 2 jour, activité 4">2</button><button type="button" role="gridcell" data-heat="1" aria-label="7 mois 3 jour, activité 1">3</button><button type="button" role="gridcell" data-heat="3" aria-label="7 mois 4 jour, activité 3">4</button><button type="button" role="gridcell" data-heat="0" aria-label="7 mois 5 jour, activité 0">5</button><button type="button" role="gridcell" data-heat="2" aria-label="7 du mois 6, activité 2">6</button><button type="button" role="gridcell" data-heat="4" aria-label="7 mois 7 jour, activité 4">7</button><button type="button" role="gridcell" data-heat="1" aria-label="7 mois 8 jour, activité 1">8</button><button type="button" role="gridcell" data-heat="3" aria-label="7 mois 9 jour, activité 3">9</button><button type="button" role="gridcell" data-heat="0" aria-label="7 mois 10 jour, activité 0">10</button><button type="button" role="gridcell" data-heat="2" aria-label="7 mois 11 jour, niveau d’activité 2">11</button><button type="button" role="gridcell" data-heat="4" aria-label="7 mois 12 jour, niveau d’activité 4">12</button><button type="button" role="gridcell" data-heat="1" aria-label="7 mois 13 jour, activité 1">13</button><button type="button" role="gridcell" data-heat="3" aria-label="7 mois 14 jour, activité 3">14</button><button type="button" role="gridcell" data-heat="0" aria-label="7 mois 15 jour, activité 0">15</button><button type="button" role="gridcell" data-heat="2" aria-label="7 mois 16 jour, activité 2">16</button><button type="button" role="gridcell" data-heat="4" aria-label="7 mois 17 jour, activité 4">17</button><button type="button" role="gridcell" data-heat="1" aria-label="7 mois 18 jour, activité 1">18</button><button type="button" role="gridcell" data-heat="3" aria-label="7 mois 19 jour, activité 3">19</button><button type="button" role="gridcell" data-heat="0" aria-label="7 mois 20 jour, activité 0">20</button><button type="button" role="gridcell" data-heat="2" aria-label="7 mois 21 jour, activité 2">21</button><button type="button" role="gridcell" data-heat="4" aria-label="7 mois 22 jour, activité 4">22</button><button type="button" role="gridcell" data-heat="1" aria-label="7 mois 23 jour, niveau d’activité 1">23</button><button type="button" role="gridcell" data-heat="3" aria-label="7 mois 24 jour, activité 3">24</button><button type="button" role="gridcell" data-heat="0" aria-label="7 mois 25 jour, activité 0">25</button><button type="button" role="gridcell" data-heat="2" aria-label="7 le 26 du mois, activité 2">26</button><button type="button" role="gridcell" data-heat="4" aria-label="7 mois 27 jour, activité 4">27</button><button type="button" role="gridcell" data-heat="1" aria-label="7 mois 28 jour, activité 1">28</button><button type="button" role="gridcell" data-heat="3" aria-label="7 mois 29 jour, activité 3">29</button><button type="button" role="gridcell" data-heat="0" aria-label="7 mois 30 jour, activité 0">30</button><button type="button" role="gridcell" data-heat="2" aria-label="7 mois 31 jour, activité 2">31</button></div><footer><span>Peu</span><i data-heat="0"></i><i data-heat="1"></i><i data-heat="2"></i><i data-heat="3"></i><i data-heat="4"></i><span>plusieurs</span></footer></section><aside><strong id="heatmapWeekSummary">Cumul de la première semaine 0</strong><ol id="heatmapWeeks"><li>Semaine 1</li><li>Semaine 2</li><li>Semaine 3</li><li>Semaine 4</li><li>Semaine 5</li></ol></aside></div></div><!-- 11DZ_CORE_END --></section><aside class="guide-evidence"><details id="workflowGuideDetails"><summary>Voir les exigences d’acceptation</summary><ul><li>La vue de surveillance du poste de garde des archives nécessite un changement d’état visible unique</li><li>La vue d’intervention du poste de garde des archives nécessite un changement d’état visible</li><li>La vue de récapitulation du poste de veille des archives nécessite un changement d’état visible unique</li></ul></details><form id="workflowGuideEvidenceForm"><label>Preuve de cette étape<textarea id="workflowGuideEvidence" rows="3" placeholder="Enregistrer l’état observé"></textarea></label><input class="action" type="submit" value="Enregistrer la preuve"></form><output id="workflowGuideSummary">0 / 3 étapes terminées</output></aside></div><p id="status" class="status" role="status" aria-live="polite"></p></section><aside class="index-mark" aria-hidden="true"><strong>05</strong><span>Poste de veille des archives FIELD INDEX</span></aside></div>
</main>
<script>
'use strict';
const statusOutput = document.querySelector('#status');
const announce = message => { statusOutput.textContent = message; };
/* 11DZ_CORE_SCRIPT_START:dashboards-admin-calendar-heatmap */
const heatValues=[2,4,1,3,0,2,4,1,3,0,2,4,1,3,0,2,4,1,3,0,2,4,1,3,0,2,4,1,3,0,2];const heatCells=[...document.querySelectorAll('.calendar-heatmap button')];function renderHeatWeeks(){const weeks=Array.from({length:5},(_,week)=>heatValues.slice(week*7,week===4?31:(week+1)*7).reduce((sum,value)=>sum+value,0));document.querySelector('#heatmapWeeks').replaceChildren(...weeks.map((value,index)=>{const item=document.createElement('li');item.textContent='Deuxième '+(index+1)+' Semaine · cumul '+value;return item;}));document.querySelector('#heatmapWeekSummary').textContent='Cumul de la première semaine '+weeks[0];}heatCells.forEach((cell,index)=>cell.addEventListener('click',()=>{heatCells.forEach(item=>item.removeAttribute('aria-selected'));cell.setAttribute('aria-selected','true');const week=Math.min(4,Math.floor(index/7));document.querySelector('#heatmapSelection').textContent='7 mois '+(index+1)+' Jour · activité '+cell.dataset.heat;document.querySelector('#heatmapWeekSummary').textContent='Deuxième '+(week+1)+' Cumul hebdomadaire '+heatValues.slice(week*7,week===4?31:(week+1)*7).reduce((sum,value)=>sum+value,0);announce(document.querySelector('#heatmapSelection').textContent);}));renderHeatWeeks();
/* 11DZ_CORE_SCRIPT_END */
const workflowBridgeSpec={"name":"dashboards-admin-calendar-heatmap","selector":"[data-core-bridge=\"dashboards-admin-calendar-heatmap\"]","mode":"click","key":"Enter"};const workflowBridgeCore=document.querySelector('#workflowCore');const workflowBridgeControl=workflowBridgeCore.querySelector(workflowBridgeSpec.selector);if(!workflowBridgeControl)throw new Error('Missing core bridge: '+workflowBridgeSpec.name);const workflowBridgeControlledId=workflowBridgeControl.getAttribute('aria-controls');const workflowBridgeControlled=workflowBridgeControlledId?document.getElementById(workflowBridgeControlledId):null;workflowBridgeCore.dataset.workflowBridge=workflowBridgeSpec.name;workflowBridgeCore.dataset.workflowVersion='0';function workflowBridgeSerialize(){const visualNode=workflowBridgeCore.firstElementChild||workflowBridgeCore;const visual=getComputedStyle(visualNode);const outputs=[...workflowBridgeCore.querySelectorAll('output,[role="status"],[aria-live],meter,progress')].map(node=>node.textContent.trim()+'|'+node.getAttribute('aria-valuenow')+'|'+node.getAttribute('value'));const canvas=[...workflowBridgeCore.querySelectorAll('canvas')].map(node=>{try{return node.toDataURL().slice(-160);}catch{return 'canvas-unavailable';}});return JSON.stringify({html:workflowBridgeCore.innerHTML,status:statusOutput.textContent,outputs,canvas,visual:[visual.display,visual.visibility,visual.opacity,visual.transform,visual.filter,visual.backgroundColor,visual.width,visual.height],scroll:workflowBridgeSpec.mode==='scroll'?workflowBridgeControl.scrollTop:null});}let workflowBridgeLastEffect=workflowBridgeSerialize();function workflowBridgeSummary(){const label=(workflowBridgeControl.getAttribute('aria-label')||workflowBridgeControl.textContent||workflowBridgeControl.value||workflowBridgeSpec.name).trim().replace(/\s+/g,' ').slice(0,72);return label+' · Version de base '+workflowBridgeCore.dataset.workflowVersion;}function workflowBridgeCommit(){const effect=workflowBridgeSerialize();if(effect===workflowBridgeLastEffect)return {changed:false,summary:workflowBridgeSummary()};workflowBridgeLastEffect=effect;workflowBridgeCore.dataset.workflowVersion=String(Number(workflowBridgeCore.dataset.workflowVersion||0)+1);return {changed:true,summary:workflowBridgeSummary()};}function workflowBridgeScheduleCommit(){queueMicrotask(workflowBridgeCommit);setTimeout(workflowBridgeCommit,0);}workflowBridgeControl.addEventListener("click",workflowBridgeScheduleCommit);const workflowBridgeStateTargets=new Set(workflowBridgeCore.querySelectorAll('dialog'));if(workflowBridgeControlled&&workflowBridgeCore.contains(workflowBridgeControlled))workflowBridgeStateTargets.add(workflowBridgeControlled);workflowBridgeStateTargets.forEach(target=>['close','cancel','toggle'].forEach(eventName=>target.addEventListener(eventName,workflowBridgeScheduleCommit)));function workflowBridgeActivate(){workflowBridgeControl.focus();workflowBridgeControl.click();const result=workflowBridgeCommit();setTimeout(workflowBridgeCommit,0);return result;}function workflowBridgeReset(){workflowBridgeCore.dataset.workflowVersion='0';workflowBridgeLastEffect=workflowBridgeSerialize();}
const workflowGuideCore=document.querySelector('#workflowCore');const workflowGuideStages=["Vue de surveillance du poste de garde des archives","Vue de gestion du poste de garde des archives","vue de bilan du poste de garde des archives"];const workflowGuideState={step:0,completed:new Set(),evidence:new Map(),consumedVersion:0};function workflowGuideDrive(){const step=workflowGuideState.step;workflowGuideCore.dataset.guideStep=String(step);document.querySelector('#workflowGuideInstruction').textContent='Veuillez terminer «'+workflowGuideStages[step]+'Opérations associées à « ».';document.querySelectorAll('[data-workflow-guide-step]').forEach((item,index)=>{item.classList.toggle('is-complete',workflowGuideState.completed.has(index));if(index===step)item.setAttribute('aria-current','step');else item.removeAttribute('aria-current');});document.querySelector('#workflowGuideBack').disabled=step===0;document.querySelector('#workflowGuideNext').textContent=step===workflowGuideStages.length-1?'Panneau d’application':'Terminer cette étape';const percent=Math.round(workflowGuideState.completed.size/workflowGuideStages.length*100);const progress=document.querySelector('#workflowGuideProgress');progress.setAttribute('aria-valuenow',String(percent));progress.querySelector('i').style.width=percent+'%';document.querySelector('#workflowGuideSummary').textContent=workflowGuideState.completed.size+' / '+workflowGuideStages.length+' Étapes complétées · '+workflowBridgeSummary();announce('Étape actuelle du poste de garde des archives :'+workflowGuideStages[step]);}function workflowGuideAdvance(direction){if(direction>0){const bridge=workflowBridgeActivate();const version=Number(workflowGuideCore.dataset.workflowVersion||0);if(version<=workflowGuideState.consumedVersion){announce('Veuillez d’abord effectuer la modification d’état visible du cas principal');return;}workflowGuideState.consumedVersion=version;workflowGuideState.completed.add(workflowGuideState.step);announce('Variation du cas principal enregistrée · '+bridge.summary);}workflowGuideState.step=Math.max(0,Math.min(workflowGuideStages.length-1,workflowGuideState.step+direction));workflowGuideDrive();}document.querySelector('#workflowGuideBack').addEventListener('click',()=>workflowGuideAdvance(-1));document.querySelector('#workflowGuideNext').addEventListener('click',()=>workflowGuideAdvance(1));document.querySelector('#workflowGuideEvidenceForm').addEventListener('submit',event=>{event.preventDefault();const version=Number(workflowGuideCore.dataset.workflowVersion||0);if(version<=workflowGuideState.consumedVersion){announce('La preuve n’a pas été enregistrée : le cas principal n’a encore subi aucun changement nouveau');return;}const text=document.querySelector('#workflowGuideEvidence').value.trim();workflowGuideState.evidence.set(workflowGuideState.step,text||'Vérification de l’état visible terminée');workflowGuideState.completed.add(workflowGuideState.step);workflowGuideState.consumedVersion=version;workflowGuideDrive();announce('Les preuves de cette étape ont été enregistrées · '+workflowBridgeSummary());});document.querySelector('#workflowGuideDetails').addEventListener('toggle',event=>announce(event.currentTarget.open?'Exigences d’acceptation développées':'Exigences d’acceptation repliées'));workflowGuideDrive();
workflowBridgeReset();
</script>
</body>
</html>