« Demander à une IA » : bouton, feuille du prompt à son adresse, copie

Le bouton, secondaire, dans la feuille du maître, sur le bilan, dans
l'analyse et sur la fiche ouverte du glossaire. Il ouvre la feuille du
prompt (…/ia, amendement de l'ADR 0013), où le texte se relit avant la
copie : navigator.clipboard, repli par sélection du texte, bandeau
« Prompt copié » (2 s). Gabarits copiés par make site (amendement de
l'ADR 0008), scénario « Demander à une IA », 1f marquée faite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-10 20:56:56 +01:00
co-authored by Claude Opus 5.5
parent 4f0611c24c
commit 2a1fe1b04c
27 changed files with 1593 additions and 48 deletions
+125
View File
@@ -3406,3 +3406,128 @@ html.landscape .analysis-board {
.summary-board .point-number {
display: none;
}
/* ------------------------------------------- Demander à une IA (1f) */
/* Le bouton : secondaire partout, avec l'icône de copie (charte, 1f). */
a.button.ask-ai .icon,
#prompt-copy .icon {
flex: none;
width: 20px;
height: 20px;
}
.ask-ai-slot .ask-ai {
width: 100%;
}
.explain-actions {
gap: var(--space-2);
flex-wrap: wrap;
}
.term-card .ask-ai {
margin-top: var(--space-2);
}
/* La feuille du prompt passe devant la feuille du maître et le bilan. */
.prompt-veil {
z-index: 12;
}
.prompt-sheet {
display: flex;
flex-direction: column;
gap: var(--space-2);
}
.prompt-lead {
margin: 0;
color: var(--muted);
}
/* Le texte du prompt, à relire avant de le copier : une zone en creux qui
* défile, en chasse fixe pour que le diagramme garde ses colonnes. */
.prompt-text {
min-height: 0;
max-height: 50vh;
max-height: 50dvh;
margin: 0;
padding: var(--space-3);
overflow: auto;
font-family: ui-monospace, "DejaVu Sans Mono", "Roboto Mono", monospace;
font-size: 13px;
line-height: 18px;
white-space: pre-wrap;
overflow-wrap: anywhere;
color: var(--text);
background: var(--surface-sunken);
border: 1px solid var(--border);
border-radius: var(--radius-md);
user-select: text;
}
.prompt-status {
margin: 0;
color: var(--muted);
}
.prompt-status:empty {
display: none;
}
.prompt-actions {
display: flex;
gap: var(--space-2);
justify-content: flex-end;
}
.prompt-actions button {
display: inline-flex;
gap: 6px;
align-items: center;
justify-content: center;
min-width: 120px;
}
html.landscape .prompt-text {
max-height: calc(100vh - 190px);
max-height: calc(100dvh - 190px);
}
/* « Prompt copié » : le bandeau des autres, en verdict-good, 2 s, devant
* la feuille du prompt ; en haut de l'écran, pour ne pas couvrir les
* boutons de la feuille. */
.prompt-banner,
html.landscape .prompt-banner {
top: var(--space-4);
bottom: auto;
z-index: 13;
color: var(--verdict-good);
font-weight: 700;
}
.prompt-banner > span:not(.banner-timer) {
flex: 1;
}
.prompt-banner .icon {
flex: none;
width: 20px;
height: 20px;
}
.prompt-banner .banner-timer {
background: var(--verdict-good);
}
.prompt-banner .banner-timer.running {
animation-duration: 2s;
}
/* Le bouton ne se coupe pas : trop étroit à côté de « Revoir ce coup » ou
* « Rejouer d'ici », il passe à la ligne. */
.summary-review-actions,
.viewer-actions {
flex-wrap: wrap;
}
+8
View File
@@ -166,6 +166,10 @@
construit par app/src/ui/summary-view.ts. -->
<div id="summary-veil" class="veil summary-veil" hidden></div>
<!-- Le prompt pour une IA (…/ia) : une feuille, au-dessus de l'écran d'où
on le demande, construite par app/src/ui/ask-ai.ts. -->
<div id="prompt-veil" class="veil sheet-veil prompt-veil" hidden></div>
<!-- La marche à suivre pour installer (#/installer) : une feuille. -->
<div id="install-veil" class="veil sheet-veil" hidden>
<div id="install-sheet" class="sheet" role="dialog" aria-modal="true" aria-labelledby="install-title">
@@ -214,6 +218,10 @@
<span class="banner-timer" aria-hidden="true"></span>
</div>
<!-- « Prompt copié », 2 s, au-dessus de la feuille du prompt (contenu
construit par app/src/ui/ask-ai.ts). -->
<div id="prompt-banner" class="banner prompt-banner" role="status" hidden></div>
<!-- « Nouvelle version prête. » : en bas, comme « Reprendre l'ancienne »,
seulement entre deux tours. -->
<div id="update-banner" class="banner update-banner" role="status" hidden>