Remplace le terme block par partie

This commit is contained in:
2026-04-12 14:37:32 +02:00
parent 7d0be5baa5
commit a90b1b6d8a
7 changed files with 69 additions and 69 deletions

View File

@@ -6,14 +6,14 @@ Application web mobile-first pour téléphone et tablette, pensée comme applica
- configure une rencontre `Twice` ou `Time` - configure une rencontre `Twice` ou `Time`
- sépare l'application en pages dédiées : configuration, phase chrono, phase cube - sépare l'application en pages dédiées : configuration, phase chrono, phase cube
- permet de définir librement le temps de block et le temps par coup - permet de définir librement le temps de partie et le temps par coup
- suit les quotas `FAST`, `FREEZE` et `MASTERS` - suit les quotas `FAST`, `FREEZE` et `MASTERS`
- orchestre la phase cube avec désignation du cube, capture des temps et préparation du block suivant - orchestre la phase cube avec désignation du cube, capture des temps et préparation de la partie suivante
- applique la logique du double coup V2 en `Twice` - applique la logique du double coup V2 en `Twice`
- applique les ajustements `bloc -` et `bloc +` en `Time` avec plafond de 120 s pris en compte - applique les ajustements `bloc -` et `bloc +` en `Time` avec plafond de 120 s pris en compte
- conserve un historique local dans le navigateur - conserve un historique local dans le navigateur
- propose une page chrono pensée pour le téléphone avec deux grandes zones tactiles, une par joueur - propose une page chrono pensée pour le téléphone avec deux grandes zones tactiles, une par joueur
- ouvre automatiquement la page cube dès que la phase chess du block est terminée - ouvre automatiquement la page cube dès que la phase chess de la partie est terminée
## Hypothèse de produit ## Hypothèse de produit

54
app.js
View File

@@ -12,24 +12,24 @@ const PRESETS = {
fast: { fast: {
label: "FAST", label: "FAST",
quota: 6, quota: 6,
description: "6 coups par joueur et par block.", description: "6 coups par joueur et par partie.",
}, },
freeze: { freeze: {
label: "FREEZE", label: "FREEZE",
quota: 8, quota: 8,
description: "8 coups par joueur et par block.", description: "8 coups par joueur et par partie.",
}, },
masters: { masters: {
label: "MASTERS", label: "MASTERS",
quota: 10, quota: 10,
description: "10 coups par joueur et par block.", description: "10 coups par joueur et par partie.",
}, },
}; };
const MODES = { const MODES = {
twice: { twice: {
label: "ChessCubing Twice", label: "ChessCubing Twice",
subtitle: "Le gagnant du cube ouvre le block suivant.", subtitle: "Le gagnant du cube ouvre la partie suivante.",
}, },
time: { time: {
label: "ChessCubing Time", label: "ChessCubing Time",
@@ -98,12 +98,12 @@ function initSetupPage() {
const timeImpact = const timeImpact =
mode === "time" mode === "time"
? "Chronos cumules de 10 minutes, ajustes apres chaque phase cube avec plafond de 120 s pris en compte." ? "Chronos cumules de 10 minutes, ajustes apres chaque phase cube avec plafond de 120 s pris en compte."
: "Le gagnant du cube commence le block suivant, avec double coup V2 possible."; : "Le gagnant du cube commence la partie suivante, avec double coup V2 possible.";
summary.innerHTML = ` summary.innerHTML = `
<strong>${MODES[mode].label}</strong> <strong>${MODES[mode].label}</strong>
<span>${PRESETS[preset].description}</span> <span>${PRESETS[preset].description}</span>
<span>Temps configures : block ${formatClock(blockDurationMs)}, coup ${formatClock(moveLimitMs)}.</span> <span>Temps configures : partie ${formatClock(blockDurationMs)}, coup ${formatClock(moveLimitMs)}.</span>
<span>${timeImpact}</span> <span>${timeImpact}</span>
<span>Quota actif : ${quota} coups par joueur.</span> <span>Quota actif : ${quota} coups par joueur.</span>
`; `;
@@ -263,7 +263,7 @@ function initChronoPage() {
return; return;
} }
requestBlockClosure(match, "Cloture manuelle du block demandee par l'arbitre."); requestBlockClosure(match, "Cloture manuelle de la partie demandee par l'arbitre.");
dirty = true; dirty = true;
render(); render();
}); });
@@ -392,10 +392,10 @@ function initChronoPage() {
} }
if (!match.running) { if (!match.running) {
button.textContent = "Block en pause"; button.textContent = "Partie en pause";
button.disabled = true; button.disabled = true;
hint.textContent = active hint.textContent = active
? "Le block n'a pas encore demarre ou a ete mis en pause." ? "La partie n'a pas encore demarre ou a ete mise en pause."
: `${playerName(match, match.currentTurn)} reprendra au demarrage.`; : `${playerName(match, match.currentTurn)} reprendra au demarrage.`;
return; return;
} }
@@ -438,7 +438,7 @@ function initChronoPage() {
} }
refs.title.textContent = match.config.matchLabel; refs.title.textContent = match.config.matchLabel;
refs.subtitle.textContent = `Block ${match.blockNumber} - ${MODES[match.config.mode].label} - ${renderModeContext(match)}`; refs.subtitle.textContent = `Partie ${match.blockNumber} - ${MODES[match.config.mode].label} - ${renderModeContext(match)}`;
refs.blockTimer.textContent = formatClock(match.blockRemainingMs); refs.blockTimer.textContent = formatClock(match.blockRemainingMs);
refs.moveTimer.textContent = formatClock(match.moveRemainingMs); refs.moveTimer.textContent = formatClock(match.moveRemainingMs);
refs.arbiterTimeoutButton.textContent = `Depassement ${formatClock(getMoveLimitMs(match))}`; refs.arbiterTimeoutButton.textContent = `Depassement ${formatClock(getMoveLimitMs(match))}`;
@@ -455,20 +455,20 @@ function initChronoPage() {
refs.centerLabel.textContent = "Trait"; refs.centerLabel.textContent = "Trait";
refs.centerValue.textContent = playerName(match, match.currentTurn); refs.centerValue.textContent = playerName(match, match.currentTurn);
refs.spineLabel.textContent = "Chrono en cours"; refs.spineLabel.textContent = "Chrono en cours";
refs.spineHeadline.textContent = `Block ${match.blockNumber} actif`; refs.spineHeadline.textContent = `Partie ${match.blockNumber} active`;
refs.spineText.textContent = refs.spineText.textContent =
"Chaque joueur tape sur sa grande zone quand son coup est termine. La page cube s'ouvrira automatiquement a la fin de la phase chess."; "Chaque joueur tape sur sa grande zone quand son coup est termine. La page cube s'ouvrira automatiquement a la fin de la phase chess.";
refs.primaryButton.textContent = "Pause arbitre"; refs.primaryButton.textContent = "Pause arbitre";
refs.arbiterStatus.textContent = `Block en cours. Joueur au trait : ${playerName(match, match.currentTurn)}.`; refs.arbiterStatus.textContent = `Partie en cours. Joueur au trait : ${playerName(match, match.currentTurn)}.`;
} else { } else {
refs.centerLabel.textContent = "Trait"; refs.centerLabel.textContent = "Trait";
refs.centerValue.textContent = playerName(match, match.currentTurn); refs.centerValue.textContent = playerName(match, match.currentTurn);
refs.spineLabel.textContent = "Pret"; refs.spineLabel.textContent = "Pret";
refs.spineHeadline.textContent = `Block ${match.blockNumber}`; refs.spineHeadline.textContent = `Partie ${match.blockNumber}`;
refs.spineText.textContent = refs.spineText.textContent =
"Demarrez le block, puis laissez uniquement les deux grandes zones aux joueurs. La page cube prendra automatiquement le relais."; "Demarrez la partie, puis laissez uniquement les deux grandes zones aux joueurs. La page cube prendra automatiquement le relais.";
refs.primaryButton.textContent = "Demarrer le block"; refs.primaryButton.textContent = "Demarrer la partie";
refs.arbiterStatus.textContent = `Block pret. ${playerName(match, match.currentTurn)} commencera.`; refs.arbiterStatus.textContent = `Partie prete. ${playerName(match, match.currentTurn)} commencera.`;
} }
refs.arbiterCloseBlockButton.textContent = "Passer au cube"; refs.arbiterCloseBlockButton.textContent = "Passer au cube";
@@ -666,7 +666,7 @@ function initCubePage() {
function render() { function render() {
refs.title.textContent = match.cube.number ? `Cube n${match.cube.number}` : "Phase cube"; refs.title.textContent = match.cube.number ? `Cube n${match.cube.number}` : "Phase cube";
refs.subtitle.textContent = `Block ${match.blockNumber} - ${MODES[match.config.mode].label} - ${renderModeContext(match)}`; refs.subtitle.textContent = `Partie ${match.blockNumber} - ${MODES[match.config.mode].label} - ${renderModeContext(match)}`;
refs.blockLabel.textContent = `${match.blockNumber}`; refs.blockLabel.textContent = `${match.blockNumber}`;
refs.elapsed.textContent = renderCubeElapsed(match); refs.elapsed.textContent = renderCubeElapsed(match);
@@ -696,7 +696,7 @@ function initCubePage() {
refs.centerValue.textContent = "Phase cube complete"; refs.centerValue.textContent = "Phase cube complete";
refs.spineLabel.textContent = "Suite"; refs.spineLabel.textContent = "Suite";
refs.spineHeadline.textContent = "Ouvrir la page chrono"; refs.spineHeadline.textContent = "Ouvrir la page chrono";
refs.spineText.textContent = "Appliquer le resultat du cube pour preparer le block suivant."; refs.spineText.textContent = "Appliquer le resultat du cube pour preparer la partie suivante.";
refs.primaryButton.textContent = "Appliquer et ouvrir la page chrono"; refs.primaryButton.textContent = "Appliquer et ouvrir la page chrono";
refs.helpStatus.textContent = refs.spineText.textContent; refs.helpStatus.textContent = refs.spineText.textContent;
} else if (match.cube.running) { } else if (match.cube.running) {
@@ -806,9 +806,9 @@ function createMatch(config) {
logEvent( logEvent(
newMatch, newMatch,
`Match cree en mode ${MODES[config.mode].label}, cadence ${PRESETS[config.preset].label}, block ${formatClock(config.blockDurationMs)} et coup ${formatClock(config.moveLimitMs)}.`, `Match cree en mode ${MODES[config.mode].label}, cadence ${PRESETS[config.preset].label}, partie ${formatClock(config.blockDurationMs)} et coup ${formatClock(config.moveLimitMs)}.`,
); );
logEvent(newMatch, "Les Blancs commencent le block 1."); logEvent(newMatch, "Les Blancs commencent la partie 1.");
return newMatch; return newMatch;
} }
@@ -945,7 +945,7 @@ function syncRunningState(storedMatch) {
if (storedMatch.blockRemainingMs === 0) { if (storedMatch.blockRemainingMs === 0) {
requestBlockClosure( requestBlockClosure(
storedMatch, storedMatch,
`Le temps de block ${formatClock(getBlockDurationMs(storedMatch))} est ecoule.`, `Le temps de partie ${formatClock(getBlockDurationMs(storedMatch))} est ecoule.`,
); );
} else if (storedMatch.moveRemainingMs === 0) { } else if (storedMatch.moveRemainingMs === 0) {
registerMoveTimeout(storedMatch, true); registerMoveTimeout(storedMatch, true);
@@ -966,8 +966,8 @@ function startBlock(storedMatch) {
logEvent( logEvent(
storedMatch, storedMatch,
storedMatch.blockNumber === 1 && storedMatch.moves.white === 0 && storedMatch.moves.black === 0 storedMatch.blockNumber === 1 && storedMatch.moves.white === 0 && storedMatch.moves.black === 0
? "Block 1 demarre." ? "Partie 1 demarre."
: `Block ${storedMatch.blockNumber} relance.`, : `Partie ${storedMatch.blockNumber} relance.`,
); );
} }
@@ -978,7 +978,7 @@ function pauseBlock(storedMatch) {
storedMatch.running = false; storedMatch.running = false;
storedMatch.lastTickAt = null; storedMatch.lastTickAt = null;
logEvent(storedMatch, `Block ${storedMatch.blockNumber} mis en pause.`); logEvent(storedMatch, `Partie ${storedMatch.blockNumber} mise en pause.`);
} }
function requestBlockClosure(storedMatch, reason) { function requestBlockClosure(storedMatch, reason) {
@@ -1105,7 +1105,7 @@ function applyCubeOutcome(storedMatch) {
function prepareNextTwiceBlock(storedMatch, winner) { function prepareNextTwiceBlock(storedMatch, winner) {
const hadDouble = storedMatch.lastMover !== winner && storedMatch.lastMover !== null; const hadDouble = storedMatch.lastMover !== winner && storedMatch.lastMover !== null;
logEvent(storedMatch, `${playerName(storedMatch, winner)} gagne la phase cube et ouvrira le block suivant.`); logEvent(storedMatch, `${playerName(storedMatch, winner)} gagne la phase cube et ouvrira la partie suivante.`);
storedMatch.blockNumber += 1; storedMatch.blockNumber += 1;
storedMatch.phase = "block"; storedMatch.phase = "block";
@@ -1161,7 +1161,7 @@ function prepareNextTimeBlock(storedMatch) {
storedMatch.cube.number = null; storedMatch.cube.number = null;
logEvent( logEvent(
storedMatch, storedMatch,
`Block ${storedMatch.blockNumber} pret. Le trait est conserve : ${playerName( `Partie ${storedMatch.blockNumber} prete. Le trait est conserve : ${playerName(
storedMatch, storedMatch,
storedMatch.currentTurn, storedMatch.currentTurn,
)} reprend.`, )} reprend.`,
@@ -1333,7 +1333,7 @@ function renderModeContext(storedMatch) {
return "Deuxieme coup du double en attente"; return "Deuxieme coup du double en attente";
} }
return "Le gagnant du cube ouvrira le prochain block"; return "Le gagnant du cube ouvrira la prochaine partie";
} }
function renderLastCube(storedMatch, color) { function renderLastCube(storedMatch, color) {

View File

@@ -37,7 +37,7 @@
<li>Configurer la rencontre</li> <li>Configurer la rencontre</li>
<li>Passer à la page chrono</li> <li>Passer à la page chrono</li>
<li>Basculer automatiquement sur la page cube</li> <li>Basculer automatiquement sur la page cube</li>
<li>Revenir sur la page chrono pour le block suivant</li> <li>Revenir sur la page chrono pour la partie suivante</li>
</ol> </ol>
</div> </div>
</aside> </aside>
@@ -73,7 +73,7 @@
<input type="radio" name="mode" value="twice" checked /> <input type="radio" name="mode" value="twice" checked />
<strong>ChessCubing Twice</strong> <strong>ChessCubing Twice</strong>
<span> <span>
Le gagnant du cube ouvre le block suivant et peut obtenir un Le gagnant du cube ouvre la partie suivante et peut obtenir un
double coup V2. double coup V2.
</span> </span>
</label> </label>
@@ -81,7 +81,7 @@
<input type="radio" name="mode" value="time" /> <input type="radio" name="mode" value="time" />
<strong>ChessCubing Time</strong> <strong>ChessCubing Time</strong>
<span> <span>
Même structure de blocks, avec chronos cumulés et alternance Même structure de parties, avec chronos cumulés et alternance
bloc - / bloc +. bloc - / bloc +.
</span> </span>
</label> </label>
@@ -89,7 +89,7 @@
</fieldset> </fieldset>
<fieldset class="field span-2"> <fieldset class="field span-2">
<legend>Cadence du block</legend> <legend>Cadence de la partie</legend>
<div class="option-grid preset-grid"> <div class="option-grid preset-grid">
<label class="option-card"> <label class="option-card">
<input type="radio" name="preset" value="fast" checked /> <input type="radio" name="preset" value="fast" checked />
@@ -113,7 +113,7 @@
<legend>Temps personnalisés</legend> <legend>Temps personnalisés</legend>
<div class="timing-grid"> <div class="timing-grid">
<label class="field"> <label class="field">
<span>Temps block (secondes)</span> <span>Temps partie (secondes)</span>
<input <input
name="blockSeconds" name="blockSeconds"
type="number" type="number"
@@ -209,7 +209,7 @@
<p> <p>
Chaque joueur dispose d'une grande zone tactile pour signaler la Chaque joueur dispose d'une grande zone tactile pour signaler la
fin de son coup, puis l'app ouvre automatiquement la phase cube fin de son coup, puis l'app ouvre automatiquement la phase cube
quand le block chess est terminé. quand la partie d'échecs est terminée.
</p> </p>
</article> </article>
<article class="rule-card"> <article class="rule-card">

View File

@@ -20,7 +20,7 @@
</a> </a>
<div class="phase-title"> <div class="phase-title">
<p class="eyebrow">Phase chrono</p> <p class="eyebrow">Phase chrono</p>
<h1 id="chronoTitle">Block 1</h1> <h1 id="chronoTitle">Partie 1</h1>
<p id="chronoSubtitle" class="phase-subtitle"></p> <p id="chronoSubtitle" class="phase-subtitle"></p>
</div> </div>
<button class="button ghost small utility-button" id="openArbiterButton" type="button"> <button class="button ghost small utility-button" id="openArbiterButton" type="button">
@@ -30,7 +30,7 @@
<section class="status-strip"> <section class="status-strip">
<article class="status-card"> <article class="status-card">
<span>Temps block</span> <span>Temps partie</span>
<strong id="blockTimer">03:00</strong> <strong id="blockTimer">03:00</strong>
</article> </article>
<article class="status-card"> <article class="status-card">
@@ -67,13 +67,13 @@
<article class="phase-spine"> <article class="phase-spine">
<div class="spine-card"> <div class="spine-card">
<p class="micro-label" id="spineLabel">État du block</p> <p class="micro-label" id="spineLabel">État de la partie</p>
<strong id="spineHeadline">Prêt à démarrer</strong> <strong id="spineHeadline">Prêt à démarrer</strong>
<p id="spineText"></p> <p id="spineText"></p>
</div> </div>
<button class="button primary spine-button" id="primaryChronoButton" type="button"> <button class="button primary spine-button" id="primaryChronoButton" type="button">
Démarrer le block Démarrer la partie
</button> </button>
</article> </article>

View File

@@ -30,7 +30,7 @@
<section class="status-strip"> <section class="status-strip">
<article class="status-card"> <article class="status-card">
<span>Block</span> <span>Partie</span>
<strong id="cubeBlockLabel">1</strong> <strong id="cubeBlockLabel">1</strong>
</article> </article>
<article class="status-card"> <article class="status-card">

View File

@@ -26,7 +26,7 @@
<h1>Les échecs rencontrent le Rubik's Cube</h1> <h1>Les échecs rencontrent le Rubik's Cube</h1>
<p class="lead"> <p class="lead">
ChessCubing propose un jeu hybride simple à comprendre, intense à ChessCubing propose un jeu hybride simple à comprendre, intense à
vivre et très plaisant à regarder. On joue un block d'échecs, on vivre et très plaisant à regarder. On joue une partie d'échecs, on
passe par une phase cube obligatoire, puis la partie repart avec un passe par une phase cube obligatoire, puis la partie repart avec un
nouveau rythme. nouveau rythme.
</p> </p>
@@ -47,7 +47,7 @@
<div class="preview-card"> <div class="preview-card">
<p class="micro-label">Le principe</p> <p class="micro-label">Le principe</p>
<ol class="phase-list"> <ol class="phase-list">
<li>Deux joueurs disputent un block d'échecs court et nerveux.</li> <li>Deux joueurs disputent une partie d'échecs courte et nerveuse.</li>
<li>Une phase cube coupe le rythme et relance la tension.</li> <li>Une phase cube coupe le rythme et relance la tension.</li>
<li>Le résultat du cube influence immédiatement la suite du match.</li> <li>Le résultat du cube influence immédiatement la suite du match.</li>
</ol> </ol>
@@ -117,7 +117,7 @@
<div class="home-mini-grid"> <div class="home-mini-grid">
<article class="mini-panel"> <article class="mini-panel">
<span class="micro-label">1</span> <span class="micro-label">1</span>
<strong>On joue un block d'échecs</strong> <strong>On joue une partie d'échecs</strong>
<p> <p>
La partie avance par séquences courtes, ce qui garde un très bon La partie avance par séquences courtes, ce qui garde un très bon
rythme et rend l'action facile à suivre. rythme et rend l'action facile à suivre.
@@ -188,8 +188,8 @@
<span class="mini-chip">ChessCubing Twice</span> <span class="mini-chip">ChessCubing Twice</span>
<h3>Le cube donne l'élan</h3> <h3>Le cube donne l'élan</h3>
<p> <p>
Le joueur le plus rapide sur la phase cube prend le départ du Le joueur le plus rapide sur la phase cube prend le départ de
block suivant et peut même obtenir un double coup dans la partie suivante et peut même obtenir un double coup dans
certaines situations. certaines situations.
</p> </p>
</div> </div>

View File

@@ -47,7 +47,7 @@
<p class="micro-label">Repères rapides</p> <p class="micro-label">Repères rapides</p>
<div class="rule-metrics"> <div class="rule-metrics">
<article class="metric-chip"> <article class="metric-chip">
<span>Block</span> <span>Partie</span>
<strong>180 s</strong> <strong>180 s</strong>
</article> </article>
<article class="metric-chip"> <article class="metric-chip">
@@ -86,7 +86,7 @@
</div> </div>
<p class="section-copy"> <p class="section-copy">
Les deux règlements partagent la même colonne vertébrale : un Les deux règlements partagent la même colonne vertébrale : un
match en blocks successifs, interrompus par une phase cube match en parties successives, interrompues par une phase cube
obligatoire. obligatoire.
</p> </p>
</div> </div>
@@ -101,10 +101,10 @@
</p> </p>
</article> </article>
<article class="stage-card"> <article class="stage-card">
<span class="micro-label">2. Block chess</span> <span class="micro-label">2. Partie d'échecs</span>
<strong>180 secondes de jeu</strong> <strong>180 secondes de jeu</strong>
<p> <p>
Chaque block comporte une phase d'échecs limitée par une durée Chaque partie comporte une phase d'échecs limitée par une durée
fixe et par un quota de coups selon le format FAST, FREEZE ou fixe et par un quota de coups selon le format FAST, FREEZE ou
MASTERS. MASTERS.
</p> </p>
@@ -123,7 +123,7 @@
<strong>Jamais au temps</strong> <strong>Jamais au temps</strong>
<p> <p>
La partie se termine uniquement par échec et mat ou abandon, La partie se termine uniquement par échec et mat ou abandon,
jamais par simple chute au temps ou dépassement d'un block. jamais par simple chute au temps ou dépassement d'une partie.
</p> </p>
</article> </article>
</div> </div>
@@ -159,7 +159,7 @@
<li>Vérifier la présence des huit cubes et des caches numérotés.</li> <li>Vérifier la présence des huit cubes et des caches numérotés.</li>
<li>Confirmer des mélanges identiques sous chaque numéro.</li> <li>Confirmer des mélanges identiques sous chaque numéro.</li>
<li>Préparer l'échiquier et la variante dans l'application.</li> <li>Préparer l'échiquier et la variante dans l'application.</li>
<li>Contrôler le tirage au sort avant le premier block.</li> <li>Contrôler le tirage au sort avant la première partie.</li>
<li>Déclencher chaque phase cube au bon moment.</li> <li>Déclencher chaque phase cube au bon moment.</li>
<li>Surveiller le respect du plafond de 120 s en mode Time.</li> <li>Surveiller le respect du plafond de 120 s en mode Time.</li>
</ul> </ul>
@@ -172,7 +172,7 @@
<h2>Twice et Time, côte à côte</h2> <h2>Twice et Time, côte à côte</h2>
</div> </div>
<p class="section-copy"> <p class="section-copy">
Les deux formats partagent les blocks et la phase cube, mais leur Les deux formats partagent les parties et la phase cube, mais leur
logique d'avantage diffère complètement. logique d'avantage diffère complètement.
</p> </p>
</div> </div>
@@ -183,24 +183,24 @@
<span class="mini-chip">Version V2</span> <span class="mini-chip">Version V2</span>
<h3>ChessCubing Twice</h3> <h3>ChessCubing Twice</h3>
<p> <p>
Le gagnant du cube obtient l'initiative sur le block suivant, Le gagnant du cube obtient l'initiative sur la partie suivante,
avec une règle de double coup encadrée. avec une règle de double coup encadrée.
</p> </p>
</div> </div>
<div class="format-badges"> <div class="format-badges">
<span>Block : 180 s</span> <span>Partie : 180 s</span>
<span>Temps par coup : 20 s max</span> <span>Temps par coup : 20 s max</span>
<span>FAST / FREEZE / MASTERS : 6 / 8 / 10</span> <span>FAST / FREEZE / MASTERS : 6 / 8 / 10</span>
</div> </div>
<div class="format-section"> <div class="format-section">
<h4>Début et fin des blocks</h4> <h4>Début et fin des parties</h4>
<ul class="rule-list compact"> <ul class="rule-list compact">
<li>Les Blancs commencent le block 1.</li> <li>Les Blancs commencent la partie 1.</li>
<li>Aucun double coup n'est possible au block 1.</li> <li>Aucun double coup n'est possible à la partie 1.</li>
<li>Un block s'arrête à 180 s ou quand les deux quotas sont atteints.</li> <li>Une partie s'arrête à 180 s ou quand les deux quotas sont atteints.</li>
<li>Il est interdit de finir un block avec un roi en échec.</li> <li>Il est interdit de finir une partie avec un roi en échec.</li>
<li> <li>
Si le dernier coup donne échec, les coups nécessaires pour Si le dernier coup donne échec, les coups nécessaires pour
parer sont joués hors quota. parer sont joués hors quota.
@@ -215,7 +215,7 @@
<li>Les deux joueurs reçoivent un mélange identique.</li> <li>Les deux joueurs reçoivent un mélange identique.</li>
<li>Le joueur le plus rapide gagne la phase cube.</li> <li>Le joueur le plus rapide gagne la phase cube.</li>
<li>En cas d'égalité parfaite, la phase cube est rejouée.</li> <li>En cas d'égalité parfaite, la phase cube est rejouée.</li>
<li>Le gagnant du cube commence le block suivant.</li> <li>Le gagnant du cube commence la partie suivante.</li>
</ul> </ul>
</div> </div>
@@ -223,10 +223,10 @@
<span class="micro-label">Double coup V2</span> <span class="micro-label">Double coup V2</span>
<strong>Condition stricte</strong> <strong>Condition stricte</strong>
<p> <p>
Le gagnant du cube ne doit pas avoir joué le dernier coup du Le gagnant du cube ne doit pas avoir joué le dernier coup de
block précédent. Le premier coup est gratuit, non compté, la partie précédente. Le premier coup est gratuit, non compté,
peut capturer mais ne peut pas donner échec. Le second compte peut capturer mais ne peut pas donner échec. Le second compte
comme premier coup du block, peut donner échec, mais ne peut comme premier coup de la partie, peut donner échec, mais ne peut
capturer qu'un pion ou une pièce mineure. capturer qu'un pion ou une pièce mineure.
</p> </p>
</div> </div>
@@ -255,16 +255,16 @@
<div class="format-badges"> <div class="format-badges">
<span>Temps initial : 10 min / joueur</span> <span>Temps initial : 10 min / joueur</span>
<span>Block : 180 s</span> <span>Partie : 180 s</span>
<span>Cap cube pris en compte : 120 s</span> <span>Cap cube pris en compte : 120 s</span>
</div> </div>
<div class="format-section"> <div class="format-section">
<h4>Structure temporelle</h4> <h4>Structure temporelle</h4>
<ul class="rule-list compact"> <ul class="rule-list compact">
<li>La structure des blocks est identique à celle du Twice.</li> <li>La structure des parties est identique à celle du Twice.</li>
<li>Les quotas de coups restent les mêmes : 6, 8 ou 10.</li> <li>Les quotas de coups restent les mêmes : 6, 8 ou 10.</li>
<li>Chaque block est suivi d'une phase cube obligatoire.</li> <li>Chaque partie est suivie d'une phase cube obligatoire.</li>
<li>Le trait est conservé après la phase cube.</li> <li>Le trait est conservé après la phase cube.</li>
<li>Aucun système de priorité ou de double coup n'existe.</li> <li>Aucun système de priorité ou de double coup n'existe.</li>
</ul> </ul>
@@ -272,7 +272,7 @@
<div class="split-callouts"> <div class="split-callouts">
<article class="split-card minus-card"> <article class="split-card minus-card">
<span class="micro-label">Block impair</span> <span class="micro-label">Partie impaire</span>
<strong>Bloc -</strong> <strong>Bloc -</strong>
<p> <p>
Le temps de résolution du cube est retiré du chrono du Le temps de résolution du cube est retiré du chrono du
@@ -280,7 +280,7 @@
</p> </p>
</article> </article>
<article class="split-card plus-card"> <article class="split-card plus-card">
<span class="micro-label">Block pair</span> <span class="micro-label">Partie paire</span>
<strong>Bloc +</strong> <strong>Bloc +</strong>
<p> <p>
Le temps de résolution du cube est ajouté au chrono adverse, Le temps de résolution du cube est ajouté au chrono adverse,