Skip to content

Commit 5b34d76

Browse files
Update header and footer - responsive
1 parent 8856d5b commit 5b34d76

5 files changed

Lines changed: 411 additions & 219 deletions

File tree

AGENTS.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,6 @@ fractal:
105105
- The mock context captures `moveTo` / `lineTo`; make sure your drawing function does not rely
106106
on `arc`, `fillRect`, or other non-path primitives (those are silently ignored in the mock).
107107

108-
### Julia coupling canvas
109-
110-
The `#julia-coupling-canvas` (200×200) shows a live Julia preview when the active fractal is
111-
Mandelbrot. It uses the cursor's complex coordinates as the `c` parameter.
112-
113-
- Only activate the mousemove listener when `params.fractal === "mandelbrot"`.
114-
- The coupling canvas renders at reduced iteration count for performance.
115-
- New Mandelbrot-family fractals (e.g. `mandelbrot_lisse`) should be added to the activation
116-
condition if a live Julia preview is meaningful for them.
117-
118108
### Fractal-specific settings
119109

120110
Fractal-only controls must live in the dedicated `Options spécifiques` group in the footer, not

public/css/style.css

Lines changed: 107 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,32 @@ body {
8484
display: flex;
8585
align-items: center;
8686
gap: 10px;
87+
min-width: 0;
8788
font-weight: 600;
8889
font-size: 15px;
8990
letter-spacing: 0.03em;
9091
color: var(--text-bright);
9192
}
9293

94+
.header-brand-text {
95+
display: flex;
96+
flex-direction: column;
97+
min-width: 0;
98+
}
99+
100+
.header-title {
101+
min-width: 0;
102+
white-space: nowrap;
103+
}
104+
105+
.header-subtitle {
106+
color: var(--text-dim);
107+
font-weight: 400;
108+
font-size: 12px;
109+
line-height: 1.2;
110+
white-space: nowrap;
111+
}
112+
93113
.header-brand .logo-icon {
94114
width: 28px;
95115
height: 28px;
@@ -381,10 +401,21 @@ body {
381401
". bas .";
382402
}
383403

384-
#btn-pan-up { grid-area: haut; }
385-
#btn-pan-left { grid-area: gauche; }
386-
#btn-pan-right { grid-area: droite; }
387-
#btn-pan-down { grid-area: bas; }
404+
#btn-pan-up {
405+
grid-area: haut;
406+
}
407+
408+
#btn-pan-left {
409+
grid-area: gauche;
410+
}
411+
412+
#btn-pan-right {
413+
grid-area: droite;
414+
}
415+
416+
#btn-pan-down {
417+
grid-area: bas;
418+
}
388419

389420
.pan-btn {
390421
border: 1px solid var(--border);
@@ -609,6 +640,7 @@ pre {
609640
#controls {
610641
grid-area: controls;
611642
display: flex;
643+
flex-direction: column;
612644
align-items: flex-start;
613645
justify-content: space-between;
614646
gap: 16px;
@@ -621,6 +653,59 @@ pre {
621653
z-index: 10;
622654
}
623655

656+
.controls-summary {
657+
width: 100%;
658+
display: flex;
659+
align-items: center;
660+
justify-content: space-between;
661+
gap: 12px;
662+
padding: 10px 12px;
663+
border: 1px solid rgba(255, 255, 255, 0.06);
664+
border-radius: var(--radius-lg);
665+
background: rgba(255, 255, 255, 0.03);
666+
}
667+
668+
.controls-summary-main {
669+
min-width: 0;
670+
display: flex;
671+
flex-direction: column;
672+
gap: 2px;
673+
}
674+
675+
.controls-summary-fractal {
676+
font-size: 12px;
677+
font-weight: 600;
678+
color: var(--text-bright);
679+
text-transform: none;
680+
}
681+
682+
.controls-summary-details {
683+
min-width: 0;
684+
font-family: var(--font-code);
685+
font-size: 11px;
686+
color: var(--text-dim);
687+
white-space: nowrap;
688+
overflow: hidden;
689+
text-overflow: ellipsis;
690+
}
691+
692+
.controls-toggle-btn {
693+
flex: 0 0 auto;
694+
}
695+
696+
#controls.collapsed .controls-summary {
697+
display: flex;
698+
}
699+
700+
#controls:not(.collapsed) .controls-summary {
701+
display: none;
702+
}
703+
704+
#controls.collapsed .controls-main,
705+
#controls.collapsed .controls-actions {
706+
display: none;
707+
}
708+
624709
.controls-main {
625710
display: flex;
626711
align-items: flex-start;
@@ -1112,6 +1197,10 @@ select:focus {
11121197
flex: 1 1 260px;
11131198
}
11141199

1200+
.header-brand-text {
1201+
min-width: 0;
1202+
}
1203+
11151204
.header-actions {
11161205
width: 100%;
11171206
justify-content: flex-end;
@@ -1169,6 +1258,20 @@ select:focus {
11691258
--controls-h: 116px;
11701259
}
11711260

1261+
.header-title,
1262+
.header-subtitle {
1263+
white-space: normal;
1264+
}
1265+
1266+
.header-actions {
1267+
justify-content: stretch;
1268+
}
1269+
1270+
.header-actions .btn {
1271+
flex: 1 1 140px;
1272+
justify-content: center;
1273+
}
1274+
11721275
#controls {
11731276
flex-wrap: wrap;
11741277
gap: 6px 10px;
@@ -1246,25 +1349,6 @@ select:focus {
12461349
z-index: 1;
12471350
}
12481351

1249-
/* ============================================================
1250-
CANVAS JULIA COUPLÉ
1251-
============================================================ */
1252-
1253-
#julia-coupling-canvas {
1254-
position: absolute;
1255-
top: 10px;
1256-
right: 10px;
1257-
border: 1px solid #555;
1258-
background: #000;
1259-
border-radius: var(--radius);
1260-
z-index: 3;
1261-
pointer-events: none;
1262-
}
1263-
1264-
#julia-coupling-canvas.hidden {
1265-
display: none;
1266-
}
1267-
12681352
/* ============================================================
12691353
PANNEAU SIGNETS
12701354
============================================================ */

public/index.html

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@
3434
<circle cx="22" cy="14" r="1.5" stroke="#9d4edd" stroke-width="1" opacity="0.8" />
3535
<line x1="1" y1="14" x2="27" y2="14" stroke="#00d4ff" stroke-width="0.5" opacity="0.3" />
3636
</svg>
37-
Explorateur de <span>Fractales</span>
38-
<span class="header-subtitle" style="color:var(--text-dim);font-weight:400;font-size:12px;margin-left:4px">
39-
· multilingual → WebAssembly
40-
</span>
37+
<div class="header-brand-text">
38+
<div class="header-title">Explorateur de <span>Fractales</span></div>
39+
<div class="header-subtitle">· multilingual → WebAssembly</div>
40+
</div>
4141
</div>
4242

4343
<div class="header-actions">
@@ -63,7 +63,6 @@
6363
<canvas id="fractal-canvas-3d" class="canvas-masque" aria-label="Vue 3D WebGL">
6464
Votre navigateur ne supporte pas WebGL.
6565
</canvas>
66-
<canvas id="julia-coupling-canvas" class="hidden" aria-label="Aperçu Julia couplé" width="200" height="200"></canvas>
6766

6867
<!-- Indicateur de statut du rendu -->
6968
<div id="render-overlay">
@@ -77,13 +76,15 @@
7776

7877
<!-- Astuce de zoom (disparaît automatiquement) -->
7978
<div id="zoom-hint" role="status" aria-live="polite">
80-
Glisser : déplacement &nbsp;·&nbsp; Clic : zoom ×2 &nbsp;·&nbsp; Double-clic : dézoom &nbsp;·&nbsp; Molette : zoom libre
79+
Glisser : déplacement &nbsp;·&nbsp; Clic : zoom ×2 &nbsp;·&nbsp; Double-clic : dézoom &nbsp;·&nbsp; Molette :
80+
zoom libre
8181
</div>
8282

8383
<div id="pan-controls" aria-label="Contrôles de déplacement">
8484
<div class="pan-header">
8585
<div class="pan-title">Déplacement</div>
86-
<button id="btn-toggle-pan" class="pan-toggle-btn" type="button" aria-label="Masquer les contrôles de déplacement"></button>
86+
<button id="btn-toggle-pan" class="pan-toggle-btn" type="button"
87+
aria-label="Masquer les contrôles de déplacement"></button>
8788
</div>
8889
<div class="zoom-row" aria-label="Contrôles de zoom">
8990
<button id="btn-zoom-in" class="pan-btn zoom-btn" type="button" aria-label="Zoom avant">+</button>
@@ -100,7 +101,8 @@
100101
<section id="export-panel" class="hidden" aria-label="Panneau d'export">
101102
<div class="export-header">
102103
<h3>Export</h3>
103-
<button id="btn-close-export" class="btn export-close-btn" type="button" aria-label="Fermer le panneau d'export"></button>
104+
<button id="btn-close-export" class="btn export-close-btn" type="button"
105+
aria-label="Fermer le panneau d'export"></button>
104106
</div>
105107

106108
<div class="export-section">
@@ -156,7 +158,8 @@ <h3>Export</h3>
156158
<section id="bookmark-panel" class="hidden" aria-label="Signets">
157159
<div class="export-header">
158160
<h3>Signets</h3>
159-
<button id="btn-close-bookmarks" class="btn export-close-btn" type="button" aria-label="Fermer les signets"></button>
161+
<button id="btn-close-bookmarks" class="btn export-close-btn" type="button"
162+
aria-label="Fermer les signets"></button>
160163
</div>
161164
<div id="bookmark-list" class="bookmark-list">
162165
<p class="bookmark-empty">Aucun signet. Naviguez vers une vue intéressante et appuyez sur ★ Signet.</p>
@@ -174,7 +177,8 @@ <h3>Signets</h3>
174177
<!-- Titre -->
175178
<div class="sidebar-header">
176179
<h2>Source &amp; Performances</h2>
177-
<button id="btn-close-sidebar" type="button" class="btn sidebar-close-btn" aria-label="Fermer le panneau"></button>
180+
<button id="btn-close-sidebar" type="button" class="btn sidebar-close-btn"
181+
aria-label="Fermer le panneau"></button>
178182
</div>
179183

180184
<!-- Badge benchmark -->
@@ -215,7 +219,14 @@ <h2>Source &amp; Performances</h2>
215219
BARRE DE CONTRÔLES
216220
============================================================ -->
217221
<footer id="controls" role="toolbar" aria-label="Contrôles de rendu">
218-
<div class="controls-main">
222+
<div id="controls-summary" class="controls-summary hidden">
223+
<div class="controls-summary-main">
224+
<span id="controls-summary-fractal" class="controls-summary-fractal">mandelbrot</span>
225+
<span id="controls-summary-details" class="controls-summary-details">256 itérations · Aurora</span>
226+
</div>
227+
<button id="btn-toggle-controls" class="btn btn-secondary controls-toggle-btn" type="button" aria-expanded="true" aria-controls="controls-main">Réduire</button>
228+
</div>
229+
<div id="controls-main" class="controls-main">
219230
<section id="controls-global" class="controls-section" aria-label="Options globales">
220231
<div class="controls-section-header">Options globales</div>
221232

@@ -264,29 +275,36 @@ <h2>Source &amp; Performances</h2>
264275
<option value="infrared">Mineral</option>
265276
<option value="personnalisee">🎨 Personnalisée</option>
266277
</select>
267-
<button id="btn-toggle-custom-palette" class="btn btn-secondary hidden" type="button" aria-expanded="false" aria-controls="custom-palette-controls">Editer</button>
278+
<button id="btn-toggle-custom-palette" class="btn btn-secondary hidden" type="button"
279+
aria-expanded="false" aria-controls="custom-palette-controls">Editer</button>
268280
</div>
269281

270-
<section id="custom-palette-controls" class="custom-palette-panel hidden" aria-label="Éditeur de palette personnalisée">
282+
<section id="custom-palette-controls" class="custom-palette-panel hidden"
283+
aria-label="Éditeur de palette personnalisée">
271284
<div class="custom-palette-header">
272285
<span class="custom-palette-title">Palette personnalisée</span>
273286
<div class="custom-palette-actions">
274-
<button id="btn-add-palette-stop" class="btn custom-palette-add" type="button">Ajouter un stop</button>
275-
<button id="btn-close-custom-palette" class="btn btn-secondary custom-palette-close" type="button" aria-label="Reduire l'editeur de palette">Reduire</button>
287+
<button id="btn-add-palette-stop" class="btn custom-palette-add" type="button">Ajouter un
288+
stop</button>
289+
<button id="btn-close-custom-palette" class="btn btn-secondary custom-palette-close" type="button"
290+
aria-label="Reduire l'editeur de palette">Reduire</button>
276291
</div>
277292
</div>
278293
<div id="custom-palette-preview" class="custom-palette-preview" aria-hidden="true"></div>
279294
<div class="custom-palette-basics">
280295
<label class="color-control" for="palette-background">
281296
<span class="control-label">Fond</span>
282-
<input id="palette-background" type="color" value="#020008" aria-label="Choisir la couleur de fond" />
297+
<input id="palette-background" type="color" value="#020008"
298+
aria-label="Choisir la couleur de fond" />
283299
</label>
284300
<label class="color-control" for="palette-interior">
285301
<span class="control-label">Intérieur</span>
286-
<input id="palette-interior" type="color" value="#fff5b4" aria-label="Choisir la couleur intérieure" />
302+
<input id="palette-interior" type="color" value="#fff5b4"
303+
aria-label="Choisir la couleur intérieure" />
287304
</label>
288305
</div>
289-
<div id="custom-palette-stops" class="custom-palette-stops" role="list" aria-label="Stops de gradient"></div>
306+
<div id="custom-palette-stops" class="custom-palette-stops" role="list"
307+
aria-label="Stops de gradient"></div>
290308
</section>
291309
</div>
292310
</section>
@@ -300,13 +318,15 @@ <h2>Source &amp; Performances</h2>
300318
<span id="fractal-options-summary" class="control-value fractal-options-summary">Aucune</span>
301319
</div>
302320

303-
<section id="fractal-options-panel" class="fractal-options-panel" aria-label="Réglages spécifiques de la fractale">
321+
<section id="fractal-options-panel" class="fractal-options-panel"
322+
aria-label="Réglages spécifiques de la fractale">
304323
<div class="custom-palette-header">
305324
<span class="custom-palette-title">Options spécifiques</span>
306325
</div>
307326

308327
<div class="fractal-options-list">
309-
<div id="multibrot-power-group" class="fractal-option-card hidden" role="group" aria-label="Puissance Multibrot">
328+
<div id="multibrot-power-group" class="fractal-option-card hidden" role="group"
329+
aria-label="Puissance Multibrot">
310330
<div class="fractal-option-title">Multibrot</div>
311331
<div class="control-subgroup">
312332
<label class="control-label" for="multibrot-power">Puissance :</label>
@@ -321,16 +341,19 @@ <h2>Source &amp; Performances</h2>
321341
</div>
322342
</div>
323343

324-
<div id="julia-c-controls" class="fractal-option-card hidden" role="group" aria-label="Paramètre c de Julia">
344+
<div id="julia-c-controls" class="fractal-option-card hidden" role="group"
345+
aria-label="Paramètre c de Julia">
325346
<div class="fractal-option-title">Julia</div>
326347
<div class="control-subgroup">
327348
<label class="control-label">c réel :</label>
328-
<input type="range" id="julia-c-re" min="-2.0" max="2.0" step="0.001" value="-0.8" aria-label="Partie réelle de c" />
349+
<input type="range" id="julia-c-re" min="-2.0" max="2.0" step="0.001" value="-0.8"
350+
aria-label="Partie réelle de c" />
329351
<span id="julia-c-re-value" class="control-value">-0.800</span>
330352
</div>
331353
<div class="control-subgroup">
332354
<label class="control-label julia-c-im-label">c imag :</label>
333-
<input type="range" id="julia-c-im" min="-2.0" max="2.0" step="0.001" value="0.156" aria-label="Partie imaginaire de c" />
355+
<input type="range" id="julia-c-im" min="-2.0" max="2.0" step="0.001" value="0.156"
356+
aria-label="Partie imaginaire de c" />
334357
<span id="julia-c-im-value" class="control-value">0.156</span>
335358
</div>
336359
</div>
@@ -348,7 +371,8 @@ <h2>Source &amp; Performances</h2>
348371
<span>Réinitialiser</span>
349372
</button>
350373

351-
<button id="btn-bookmark" class="btn" type="button" aria-label="Enregistrer un signet" title="Signet (touche B)">
374+
<button id="btn-bookmark" class="btn" type="button" aria-label="Enregistrer un signet"
375+
title="Signet (touche B)">
352376
<span class="btn-icon"></span>
353377
<span>Signet</span>
354378
</button>

0 commit comments

Comments
 (0)