judu/ex-egopublic Fork
⑂ 8a09936
Commits
⬇ Clone ▾
git clone https://git.rickub.com/judu/ex-ego.git
git clone ssh://git@rickub.com/judu/ex-ego.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP

refactor(templates): motifs inline récurrents en classes, reliquats px en remUnverified

Les styles inline répétés des templates deviennent des classes dans
style.css : .section-title (h2 de section), .hint / .hint-sm (textes
atténués), .option-title / .option-sub (lignes des sélecteurs équipe,
thème, graphiques), .link-title / .link-sub (cartes-liens de Réglages),
.btn-lg / .btn-xl (boutons de validation), .field-lg (champs 18px de
login et inscription). Les font-size inline restants passent en rem ;
les min-height de cibles tactiles restent en px (WCAG 2.5.8).
Audit axe (16 écrans) : aucune violation critical/serious.
Julien Durillon committed 2026-09-01T17:42:49+02:00 Browse files
8a09936 parent: dbea23f
modified assets/style.css +12 -0
@@ -161,12 +161,24 @@ input[type=number] { -moz-appearance: textfield; appearance: textfield; }
161161 .btn-icon { width: 36px; height: 36px; padding: 0; }
162162 .btn-icon-sm { width: 32px; height: 32px; padding: 0; }
163163 .btn-block { width: 100%; margin-top: var(--space-2); }
164+.btn-lg { min-height: 52px; font-size: 1rem; }
165+.btn-xl { min-height: 56px; font-size: 1.25rem; }
166+
167+/* — typo utilitaire (ex-styles inline) — */
168+.section-title { font-size: 1rem; margin: var(--space-8) 0 var(--space-2); }
169+.hint { font-size: 0.8125rem; opacity: .7; margin: 0 0 var(--space-3); }
170+.hint-sm { font-size: 0.75rem; opacity: .7; }
171+.option-title { display: block; font-size: 1rem; }
172+.option-sub { display: block; font-size: 0.75rem; opacity: .75; }
173+.link-title { display: block; font-family: var(--font-heading); font-size: 1.0625rem; }
174+.link-sub { display: block; font-size: 0.8125rem; opacity: .7; }
164175
165176 /* — formulaires — */
166177 .field > label {
167178 display: block; font-size: 0.75rem; margin-bottom: 5px;
168179 color: color-mix(in srgb, var(--color-text) 70%, transparent);
169180 }
181+.field-lg > label, .field-lg .input { font-size: 1.125rem; }
170182 .input {
171183 width: 100%; min-height: 36px; padding: 6px 14px; font: inherit;
172184 font-size: 0.875rem; color: var(--color-text); caret-color: var(--color-accent);
@@ -161,12 +161,24 @@ input[type=number] { -moz-appearance: textfield; appearance: textfield; }
161 .btn-icon { width: 36px; height: 36px; padding: 0; }161 .btn-icon { width: 36px; height: 36px; padding: 0; }
162 .btn-icon-sm { width: 32px; height: 32px; padding: 0; }162 .btn-icon-sm { width: 32px; height: 32px; padding: 0; }
163 .btn-block { width: 100%; margin-top: var(--space-2); }163 .btn-block { width: 100%; margin-top: var(--space-2); }
164+.btn-lg { min-height: 52px; font-size: 1rem; }
165+.btn-xl { min-height: 56px; font-size: 1.25rem; }
166+
167+/* — typo utilitaire (ex-styles inline) — */
168+.section-title { font-size: 1rem; margin: var(--space-8) 0 var(--space-2); }
169+.hint { font-size: 0.8125rem; opacity: .7; margin: 0 0 var(--space-3); }
170+.hint-sm { font-size: 0.75rem; opacity: .7; }
171+.option-title { display: block; font-size: 1rem; }
172+.option-sub { display: block; font-size: 0.75rem; opacity: .75; }
173+.link-title { display: block; font-family: var(--font-heading); font-size: 1.0625rem; }
174+.link-sub { display: block; font-size: 0.8125rem; opacity: .7; }
164 175
165 /* — formulaires — */176 /* — formulaires — */
166 .field > label {177 .field > label {
167 display: block; font-size: 0.75rem; margin-bottom: 5px;178 display: block; font-size: 0.75rem; margin-bottom: 5px;
168 color: color-mix(in srgb, var(--color-text) 70%, transparent);179 color: color-mix(in srgb, var(--color-text) 70%, transparent);
169 }180 }
181+.field-lg > label, .field-lg .input { font-size: 1.125rem; }
170 .input {182 .input {
171 width: 100%; min-height: 36px; padding: 6px 14px; font: inherit;183 width: 100%; min-height: 36px; padding: 6px 14px; font: inherit;
172 font-size: 0.875rem; color: var(--color-text); caret-color: var(--color-accent);184 font-size: 0.875rem; color: var(--color-text); caret-color: var(--color-accent);
modified templates/add_step1.html +1 -1
@@ -9,7 +9,7 @@
99 {% if m.warning %}<p class="warn">{{ shell.tr.forgot_timer }}</p>{% endif %}
1010 <form method="post" action="/timer/annuler" style="margin:var(--space-2) 0 0">
1111 <input type="hidden" name="csrf" value="{{ shell.csrf }}">
12- <button type="submit" class="btn btn-ghost" style="font-size:13px;padding-left:0;color:var(--color-accent-900)">{{ shell.tr.cancel_measured }}</button>
12+ <button type="submit" class="btn btn-ghost" style="font-size:0.8125rem;padding-left:0;color:var(--color-accent-900)">{{ shell.tr.cancel_measured }}</button>
1313 </form>
1414 </div>
1515 {% endif %}
@@ -9,7 +9,7 @@
9 {% if m.warning %}<p class="warn">{{ shell.tr.forgot_timer }}</p>{% endif %}9 {% if m.warning %}<p class="warn">{{ shell.tr.forgot_timer }}</p>{% endif %}
10 <form method="post" action="/timer/annuler" style="margin:var(--space-2) 0 0">10 <form method="post" action="/timer/annuler" style="margin:var(--space-2) 0 0">
11 <input type="hidden" name="csrf" value="{{ shell.csrf }}">11 <input type="hidden" name="csrf" value="{{ shell.csrf }}">
12- <button type="submit" class="btn btn-ghost" style="font-size:13px;padding-left:0;color:var(--color-accent-900)">{{ shell.tr.cancel_measured }}</button>12+ <button type="submit" class="btn btn-ghost" style="font-size:0.8125rem;padding-left:0;color:var(--color-accent-900)">{{ shell.tr.cancel_measured }}</button>
13 </form>13 </form>
14 </div>14 </div>
15 {% endif %}15 {% endif %}
modified templates/add_step2.html +1 -1
@@ -28,6 +28,6 @@
2828 {% call c::date_row(shell, "date", "date", date, "", "", day_prev, day_next, false) %}{% endcall %}
2929 <p class="date-label">{{ date_label }}</p>
3030
31- <button type="submit" class="btn btn-primary btn-block" style="min-height:52px;font-size:16px">{{ shell.tr.title_add }}</button>
31+ <button type="submit" class="btn btn-primary btn-block btn-lg">{{ shell.tr.title_add }}</button>
3232 </form>
3333 {% endblock %}
@@ -28,6 +28,6 @@
28 {% call c::date_row(shell, "date", "date", date, "", "", day_prev, day_next, false) %}{% endcall %}28 {% call c::date_row(shell, "date", "date", date, "", "", day_prev, day_next, false) %}{% endcall %}
29 <p class="date-label">{{ date_label }}</p>29 <p class="date-label">{{ date_label }}</p>
30 30
31- <button type="submit" class="btn btn-primary btn-block" style="min-height:52px;font-size:16px">{{ shell.tr.title_add }}</button>31+ <button type="submit" class="btn btn-primary btn-block btn-lg">{{ shell.tr.title_add }}</button>
32 </form>32 </form>
33 {% endblock %}33 {% endblock %}
modified templates/app.html +2 -2
@@ -72,8 +72,8 @@
7272 <button type="submit" class="team-choice{% if t.current %} current{% endif %}">
7373 <span class="team-dot" style="background:{{ t.color }}"></span>
7474 <span style="flex:1;text-align:left">
75- <span style="display:block;font-size:16px">{{ t.name }}</span>
76- <span style="display:block;font-size:12px;opacity:.7">{{ t.meta }}</span>
75+ <span class="option-title">{{ t.name }}</span>
76+ <span class="option-sub">{{ t.meta }}</span>
7777 </span>
7878 {% if t.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}
7979 </button>
@@ -72,8 +72,8 @@
72 <button type="submit" class="team-choice{% if t.current %} current{% endif %}">72 <button type="submit" class="team-choice{% if t.current %} current{% endif %}">
73 <span class="team-dot" style="background:{{ t.color }}"></span>73 <span class="team-dot" style="background:{{ t.color }}"></span>
74 <span style="flex:1;text-align:left">74 <span style="flex:1;text-align:left">
75- <span style="display:block;font-size:16px">{{ t.name }}</span>75+ <span class="option-title">{{ t.name }}</span>
76- <span style="display:block;font-size:12px;opacity:.7">{{ t.meta }}</span>76+ <span class="option-sub">{{ t.meta }}</span>
77 </span>77 </span>
78 {% if t.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}78 {% if t.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}
79 </button>79 </button>
modified templates/categories.html +2 -2
@@ -20,7 +20,7 @@
2020 <input type="hidden" name="csrf" value="{{ csrf }}">
2121 {% if t.archived %}
2222 <input type="hidden" name="restaure" value="1">
23- <button type="submit" class="btn btn-ghost" style="font-size:12px">{{ shell.tr.restore }}</button>
23+ <button type="submit" class="btn btn-ghost" style="font-size:0.75rem">{{ shell.tr.restore }}</button>
2424 {% else %}
2525 <button type="submit" class="btn btn-secondary btn-icon-sm" aria-label="{{ shell.tr.archive_aria }}">
2626 <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="4" rx="1"></rect><path d="M5 8v11a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V8"></path><path d="M10 12h4"></path></svg>
@@ -29,7 +29,7 @@
2929 </form>
3030 </div>
3131 {% endfor %}
32-<p class="text-muted" style="font-size:12px;margin-top:var(--space-3)">{{ shell.tr.rename_help }}</p>
32+<p class="text-muted" style="font-size:0.75rem;margin-top:var(--space-3)">{{ shell.tr.rename_help }}</p>
3333
3434 <h2 class="groups-title">{{ shell.tr.groups_title }}</h2>
3535 <p class="groups-hint">{{ shell.tr.groups_hint }}</p>
@@ -20,7 +20,7 @@
20 <input type="hidden" name="csrf" value="{{ csrf }}">20 <input type="hidden" name="csrf" value="{{ csrf }}">
21 {% if t.archived %}21 {% if t.archived %}
22 <input type="hidden" name="restaure" value="1">22 <input type="hidden" name="restaure" value="1">
23- <button type="submit" class="btn btn-ghost" style="font-size:12px">{{ shell.tr.restore }}</button>23+ <button type="submit" class="btn btn-ghost" style="font-size:0.75rem">{{ shell.tr.restore }}</button>
24 {% else %}24 {% else %}
25 <button type="submit" class="btn btn-secondary btn-icon-sm" aria-label="{{ shell.tr.archive_aria }}">25 <button type="submit" class="btn btn-secondary btn-icon-sm" aria-label="{{ shell.tr.archive_aria }}">
26 <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="4" rx="1"></rect><path d="M5 8v11a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V8"></path><path d="M10 12h4"></path></svg>26 <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="4" rx="1"></rect><path d="M5 8v11a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V8"></path><path d="M10 12h4"></path></svg>
@@ -29,7 +29,7 @@
29 </form>29 </form>
30 </div>30 </div>
31 {% endfor %}31 {% endfor %}
32-<p class="text-muted" style="font-size:12px;margin-top:var(--space-3)">{{ shell.tr.rename_help }}</p>32+<p class="text-muted" style="font-size:0.75rem;margin-top:var(--space-3)">{{ shell.tr.rename_help }}</p>
33 33
34 <h2 class="groups-title">{{ shell.tr.groups_title }}</h2>34 <h2 class="groups-title">{{ shell.tr.groups_title }}</h2>
35 <p class="groups-hint">{{ shell.tr.groups_hint }}</p>35 <p class="groups-hint">{{ shell.tr.groups_hint }}</p>
modified templates/login.html +7 -10
@@ -19,22 +19,19 @@
1919 <h1>Ex Ego</h1>
2020 <p class="tagline">{{ tr.tagline }}</p>
2121 <form method="post" action="/login">
22- <div class="field" style="margin-bottom:var(--space-3)">
23- <label for="username" style="font-size:18px">{{ tr.username_label }}</label>
22+ <div class="field field-lg" style="margin-bottom:var(--space-3)">
23+ <label for="username">{{ tr.username_label }}</label>
2424 {# « webauthn » dans autocomplete : le navigateur/1Password propose la
2525 passkey directement dans le champ (conditional UI). #}
2626 <input class="input" id="username" name="username" autocomplete="username webauthn"
27- autocapitalize="none" autocorrect="off" required autofocus
28- style="font-size: 18px">
27+ autocapitalize="none" autocorrect="off" required autofocus>
2928 </div>
30- <div class="field" style="margin-bottom:var(--space-4)">
31- <label for="password" style="font-size:18px">{{ tr.password_label }}</label>
32- <input class="input" id="password" name="password" type="password" autocomplete="current-password" required
33- style="font-size: 18px">
29+ <div class="field field-lg" style="margin-bottom:var(--space-4)">
30+ <label for="password">{{ tr.password_label }}</label>
31+ <input class="input" id="password" name="password" type="password" autocomplete="current-password" required>
3432 </div>
3533 {% if let Some(e) = error %}<p class="form-error">{{ e }}</p>{% endif %}
36- <button type="submit" class="btn btn-primary btn-block"
37- style="min-height:56px;font-size:20px">{{ tr.sign_in }}</button>
34+ <button type="submit" class="btn btn-primary btn-block btn-xl">{{ tr.sign_in }}</button>
3835 </form>
3936 {% if webauthn %}
4037 <button type="button" class="btn btn-secondary btn-block" id="passkey-login" hidden
@@ -19,22 +19,19 @@
19 <h1>Ex Ego</h1>19 <h1>Ex Ego</h1>
20 <p class="tagline">{{ tr.tagline }}</p>20 <p class="tagline">{{ tr.tagline }}</p>
21 <form method="post" action="/login">21 <form method="post" action="/login">
22- <div class="field" style="margin-bottom:var(--space-3)">22+ <div class="field field-lg" style="margin-bottom:var(--space-3)">
23- <label for="username" style="font-size:18px">{{ tr.username_label }}</label>23+ <label for="username">{{ tr.username_label }}</label>
24 {# « webauthn » dans autocomplete : le navigateur/1Password propose la24 {# « webauthn » dans autocomplete : le navigateur/1Password propose la
25 passkey directement dans le champ (conditional UI). #}25 passkey directement dans le champ (conditional UI). #}
26 <input class="input" id="username" name="username" autocomplete="username webauthn"26 <input class="input" id="username" name="username" autocomplete="username webauthn"
27- autocapitalize="none" autocorrect="off" required autofocus27+ autocapitalize="none" autocorrect="off" required autofocus>
28- style="font-size: 18px">
29 </div>28 </div>
30- <div class="field" style="margin-bottom:var(--space-4)">29+ <div class="field field-lg" style="margin-bottom:var(--space-4)">
31- <label for="password" style="font-size:18px">{{ tr.password_label }}</label>30+ <label for="password">{{ tr.password_label }}</label>
32- <input class="input" id="password" name="password" type="password" autocomplete="current-password" required31+ <input class="input" id="password" name="password" type="password" autocomplete="current-password" required>
33- style="font-size: 18px">
34 </div>32 </div>
35 {% if let Some(e) = error %}<p class="form-error">{{ e }}</p>{% endif %}33 {% if let Some(e) = error %}<p class="form-error">{{ e }}</p>{% endif %}
36- <button type="submit" class="btn btn-primary btn-block"34+ <button type="submit" class="btn btn-primary btn-block btn-xl">{{ tr.sign_in }}</button>
37- style="min-height:56px;font-size:20px">{{ tr.sign_in }}</button>
38 </form>35 </form>
39 {% if webauthn %}36 {% if webauthn %}
40 <button type="button" class="btn btn-secondary btn-block" id="passkey-login" hidden37 <button type="button" class="btn btn-secondary btn-block" id="passkey-login" hidden
modified templates/security.html +6 -6
@@ -3,8 +3,8 @@
33 <p class="step-hint">{{ shell.tr.security_hint }}</p>
44
55 {% if webauthn || !keys.is_empty() %}
6-<h2 style="font-size:16px;margin:0 0 var(--space-2)">{{ shell.tr.passkeys_title }}</h2>
7-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.passkeys_hint }}</p>
6+<h2 class="section-title" style="margin-top:0">{{ shell.tr.passkeys_title }}</h2>
7+<p class="hint">{{ shell.tr.passkeys_hint }}</p>
88 {% if !webauthn %}
99 <p class="form-error" style="margin:0 0 var(--space-3)">{{ shell.tr.passkey_disabled_note }}</p>
1010 {% endif %}
@@ -17,10 +17,10 @@
1717 {# tabindex=-1 : la soumission clavier passe par Entrée dans l'input (cf. categories.html). #}
1818 <button type="submit" class="visually-hidden" tabindex="-1">{{ shell.tr.rename }}</button>
1919 </form>
20- <span class="text-muted" style="font-size:12px;white-space:nowrap">{{ k.created }}</span>
20+ <span class="text-muted" style="font-size:0.75rem;white-space:nowrap">{{ k.created }}</span>
2121 </div>
2222 <details style="margin:0 0 var(--space-3)">
23- <summary class="btn btn-ghost" style="font-size:12px">{{ shell.tr.passkey_delete }}</summary>
23+ <summary class="btn btn-ghost" style="font-size:0.75rem">{{ shell.tr.passkey_delete }}</summary>
2424 <form method="post" action="{{ k.delete_action }}" style="display:flex;gap:var(--space-2);align-items:center;margin-top:var(--space-2)">
2525 <input type="hidden" name="csrf" value="{{ csrf }}">
2626 <input class="input" name="mdp" type="password" autocomplete="current-password" required
@@ -32,7 +32,7 @@
3232 </details>
3333 {% endfor %}
3434 {% if keys.is_empty() && webauthn %}
35-<p class="text-muted" style="font-size:13px;margin:0 0 var(--space-3)">{{ shell.tr.passkey_none }}</p>
35+<p class="text-muted" style="font-size:0.8125rem;margin:0 0 var(--space-3)">{{ shell.tr.passkey_none }}</p>
3636 {% endif %}
3737
3838 {% if webauthn %}
@@ -101,7 +101,7 @@
101101 {% endif %}
102102 {% endif %}
103103
104-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-3)">{{ shell.tr.session }}</h2>
104+<h2 class="section-title" style="margin-bottom:var(--space-3)">{{ shell.tr.session }}</h2>
105105 <form method="post" action="/parametres/mot-de-passe">
106106 <input type="hidden" name="csrf" value="{{ csrf }}">
107107 <div class="field" style="margin-bottom:var(--space-3)">
@@ -3,8 +3,8 @@
3 <p class="step-hint">{{ shell.tr.security_hint }}</p>3 <p class="step-hint">{{ shell.tr.security_hint }}</p>
4 4
5 {% if webauthn || !keys.is_empty() %}5 {% if webauthn || !keys.is_empty() %}
6-<h2 style="font-size:16px;margin:0 0 var(--space-2)">{{ shell.tr.passkeys_title }}</h2>6+<h2 class="section-title" style="margin-top:0">{{ shell.tr.passkeys_title }}</h2>
7-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.passkeys_hint }}</p>7+<p class="hint">{{ shell.tr.passkeys_hint }}</p>
8 {% if !webauthn %}8 {% if !webauthn %}
9 <p class="form-error" style="margin:0 0 var(--space-3)">{{ shell.tr.passkey_disabled_note }}</p>9 <p class="form-error" style="margin:0 0 var(--space-3)">{{ shell.tr.passkey_disabled_note }}</p>
10 {% endif %}10 {% endif %}
@@ -17,10 +17,10 @@
17 {# tabindex=-1 : la soumission clavier passe par Entrée dans l'input (cf. categories.html). #}17 {# tabindex=-1 : la soumission clavier passe par Entrée dans l'input (cf. categories.html). #}
18 <button type="submit" class="visually-hidden" tabindex="-1">{{ shell.tr.rename }}</button>18 <button type="submit" class="visually-hidden" tabindex="-1">{{ shell.tr.rename }}</button>
19 </form>19 </form>
20- <span class="text-muted" style="font-size:12px;white-space:nowrap">{{ k.created }}</span>20+ <span class="text-muted" style="font-size:0.75rem;white-space:nowrap">{{ k.created }}</span>
21 </div>21 </div>
22 <details style="margin:0 0 var(--space-3)">22 <details style="margin:0 0 var(--space-3)">
23- <summary class="btn btn-ghost" style="font-size:12px">{{ shell.tr.passkey_delete }}</summary>23+ <summary class="btn btn-ghost" style="font-size:0.75rem">{{ shell.tr.passkey_delete }}</summary>
24 <form method="post" action="{{ k.delete_action }}" style="display:flex;gap:var(--space-2);align-items:center;margin-top:var(--space-2)">24 <form method="post" action="{{ k.delete_action }}" style="display:flex;gap:var(--space-2);align-items:center;margin-top:var(--space-2)">
25 <input type="hidden" name="csrf" value="{{ csrf }}">25 <input type="hidden" name="csrf" value="{{ csrf }}">
26 <input class="input" name="mdp" type="password" autocomplete="current-password" required26 <input class="input" name="mdp" type="password" autocomplete="current-password" required
@@ -32,7 +32,7 @@
32 </details>32 </details>
33 {% endfor %}33 {% endfor %}
34 {% if keys.is_empty() && webauthn %}34 {% if keys.is_empty() && webauthn %}
35-<p class="text-muted" style="font-size:13px;margin:0 0 var(--space-3)">{{ shell.tr.passkey_none }}</p>35+<p class="text-muted" style="font-size:0.8125rem;margin:0 0 var(--space-3)">{{ shell.tr.passkey_none }}</p>
36 {% endif %}36 {% endif %}
37 37
38 {% if webauthn %}38 {% if webauthn %}
@@ -101,7 +101,7 @@
101 {% endif %}101 {% endif %}
102 {% endif %}102 {% endif %}
103 103
104-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-3)">{{ shell.tr.session }}</h2>104+<h2 class="section-title" style="margin-bottom:var(--space-3)">{{ shell.tr.session }}</h2>
105 <form method="post" action="/parametres/mot-de-passe">105 <form method="post" action="/parametres/mot-de-passe">
106 <input type="hidden" name="csrf" value="{{ csrf }}">106 <input type="hidden" name="csrf" value="{{ csrf }}">
107 <div class="field" style="margin-bottom:var(--space-3)">107 <div class="field" style="margin-bottom:var(--space-3)">
modified templates/settings.html +33 -33
@@ -24,34 +24,34 @@
2424
2525 <div class="card" style="margin-bottom:var(--space-3)">
2626 <div class="card-kicker">{{ shell.tr.account_kicker }}</div>
27- <div style="font-size:19px;font-family:var(--font-heading)">{{ shell.username }}</div>
27+ <div style="font-size:1.1875rem;font-family:var(--font-heading)">{{ shell.username }}</div>
2828 <p class="card-body">{{ account_line }}</p>
2929 {# Pas .card-body : son opacité 0.8 délaverait le lien sous 4.5:1 (axe). #}
30- <p style="margin:var(--space-2) 0 0;font-size:13px">{{ shell.tr.feedback_title }}
30+ <p style="margin:var(--space-2) 0 0;font-size:0.8125rem">{{ shell.tr.feedback_title }}
3131 <a href="{{ feedback_href }}" target="_blank" rel="noopener">{{ shell.tr.feedback_link }} ↗</a></p>
32- <p style="font-size:11px;opacity:.7;margin:var(--space-1) 0 0">{{ version_line }}</p>
32+ <p style="font-size:0.6875rem;opacity:.7;margin:var(--space-1) 0 0">{{ version_line }}</p>
3333 </div>
3434
3535 <a class="card times-link" href="/temps" style="margin-bottom:var(--space-3)">
3636 <span style="flex:1">
37- <span style="display:block;font-family:var(--font-heading);font-size:17px">{{ shell.tr.my_entries }}</span>
38- <span style="display:block;font-size:13px;opacity:.7">{{ shell.tr.my_entries_desc }}</span>
37+ <span class="link-title">{{ shell.tr.my_entries }}</span>
38+ <span class="link-sub">{{ shell.tr.my_entries_desc }}</span>
3939 </span>
4040 {% call c::chevron_right(17) %}{% endcall %}
4141 </a>
4242
4343 <a class="card times-link" href="/parametres/categories" style="margin-bottom:var(--space-3)">
4444 <span style="flex:1">
45- <span style="display:block;font-family:var(--font-heading);font-size:17px">{{ shell.tr.title_categories }}</span>
46- <span style="display:block;font-size:13px;opacity:.7">{{ shell.tr.manage_categories_desc }}</span>
45+ <span class="link-title">{{ shell.tr.title_categories }}</span>
46+ <span class="link-sub">{{ shell.tr.manage_categories_desc }}</span>
4747 </span>
4848 {% call c::chevron_right(17) %}{% endcall %}
4949 </a>
5050
5151 <a class="card times-link" href="/parametres/securite" style="margin-bottom:var(--space-6)">
5252 <span style="flex:1">
53- <span style="display:block;font-family:var(--font-heading);font-size:17px">{{ shell.tr.title_security }}</span>
54- <span style="display:block;font-size:13px;opacity:.7">{{ shell.tr.security_card_desc }}</span>
53+ <span class="link-title">{{ shell.tr.title_security }}</span>
54+ <span class="link-sub">{{ shell.tr.security_card_desc }}</span>
5555 </span>
5656 {% call c::chevron_right(17) %}{% endcall %}
5757 </a>
@@ -66,9 +66,9 @@
6666 </div>
6767 </div>
6868 </form>
69-<p style="font-size:12px;opacity:.7;margin:0 0 var(--space-6)">{{ shell.tr.rename_team_note }}</p>
69+<p class="hint-sm" style="margin:0 0 var(--space-6)">{{ shell.tr.rename_team_note }}</p>
7070
71-<h2 style="font-size:16px;margin:0 0 var(--space-2)">{{ members_title }}</h2>
71+<h2 class="section-title" style="margin-top:0">{{ members_title }}</h2>
7272 <div style="display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-4)">
7373 {% for m in members %}<span class="tag tag-neutral">{{ m }}</span>{% endfor %}
7474 </div>
@@ -84,10 +84,10 @@
8484 </div>
8585 </form>
8686 {% if let Some(e) = invite_error %}<p class="form-error" style="margin:0 0 var(--space-2)">{{ e }}</p>{% endif %}
87-<p style="font-size:12px;opacity:.7;margin:0">{{ shell.tr.invite_note }}</p>
87+<p class="hint-sm" style="margin:0">{{ shell.tr.invite_note }}</p>
8888
89-<h2 style="font-size:16px;margin:var(--space-6) 0 var(--space-2)">{{ shell.tr.invite_link }}</h2>
90-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.invite_link_hint }}</p>
89+<h2 class="section-title" style="margin-top:var(--space-6)">{{ shell.tr.invite_link }}</h2>
90+<p class="hint">{{ shell.tr.invite_link_hint }}</p>
9191 {% if let Some(lien) = invite_link %}
9292 <div class="field" style="margin-bottom:var(--space-2)">
9393 {# Le titre juste au-dessus nomme déjà le champ : aria-label plutôt qu'un
@@ -95,7 +95,7 @@
9595 sélectionnable pour être copié. #}
9696 <input class="input" id="lien-invit" value="{{ lien }}" readonly
9797 aria-label="{{ shell.tr.invite_link }}" aria-describedby="lien-aide"
98- style="min-height:44px;font-size:13px">
98+ style="min-height:44px;font-size:0.8125rem">
9999 </div>
100100 <p class="field-hint" id="lien-aide" style="margin-bottom:var(--space-2)">{{ shell.tr.invite_link_ready }}</p>
101101 {% endif %}
@@ -105,22 +105,22 @@
105105 </form>
106106
107107 {% if !sent.is_empty() %}
108-<h2 style="font-size:16px;margin:var(--space-6) 0 var(--space-2)">{{ shell.tr.pending_invites }}</h2>
108+<h2 class="section-title" style="margin-top:var(--space-6)">{{ shell.tr.pending_invites }}</h2>
109109 {% for si in sent %}
110110 <div class="sent-row">
111111 <div style="flex:1;min-width:0">
112- <div style="font-size:15px">{{ si.name }}</div>
113- <div style="font-size:12px;opacity:.7">{{ si.meta }}</div>
112+ <div style="font-size:0.9375rem">{{ si.name }}</div>
113+ <div class="hint-sm">{{ si.meta }}</div>
114114 </div>
115115 <form method="post" action="{{ si.cancel_action }}" style="margin:0">
116116 <input type="hidden" name="csrf" value="{{ csrf }}">
117- <button type="submit" class="btn btn-ghost" style="font-size:12px">{{ shell.tr.cancel }}</button>
117+ <button type="submit" class="btn btn-ghost" style="font-size:0.75rem">{{ shell.tr.cancel }}</button>
118118 </form>
119119 </div>
120120 {% endfor %}
121121 {% endif %}
122122
123-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.create_team }}</h2>
123+<h2 class="section-title">{{ shell.tr.create_team }}</h2>
124124 <form method="post" action="/equipes">
125125 <input type="hidden" name="csrf" value="{{ csrf }}">
126126 <div style="display:flex;gap:var(--space-2)">
@@ -128,7 +128,7 @@
128128 <button type="submit" class="btn btn-primary" style="min-height:44px">{{ shell.tr.create }}</button>
129129 </div>
130130 </form>
131-<p style="font-size:12px;opacity:.7;margin:var(--space-2) 0 0">{{ shell.tr.create_team_note }}</p>
131+<p class="hint-sm" style="margin:var(--space-2) 0 0">{{ shell.tr.create_team_note }}</p>
132132
133133 {% if can_leave %}
134134 <form method="post" action="/equipes/quitter">
@@ -136,10 +136,10 @@
136136 <button type="submit" class="btn btn-block"
137137 style="min-height:46px;margin-top:var(--space-6);color:var(--color-accent-700);border:1px solid var(--color-accent-300)">{{ leave_label }}</button>
138138 </form>
139-<p style="font-size:11px;opacity:.7;margin-top:var(--space-2);text-align:center">{{ shell.tr.leave_note }}</p>
139+<p style="font-size:0.6875rem;opacity:.7;margin-top:var(--space-2);text-align:center">{{ shell.tr.leave_note }}</p>
140140 {% endif %}
141141
142-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.language }}</h2>
142+<h2 class="section-title">{{ shell.tr.language }}</h2>
143143 <div style="display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-2)">
144144 {% for l in langs %}
145145 <form method="post" action="/parametres/langue" style="margin:0">
@@ -152,8 +152,8 @@
152152 {% endfor %}
153153 </div>
154154
155-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.display }}</h2>
156-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.display_hint }}</p>
155+<h2 class="section-title">{{ shell.tr.display }}</h2>
156+<p class="hint">{{ shell.tr.display_hint }}</p>
157157 <div style="display:grid;gap:var(--space-2);margin-bottom:var(--space-2)">
158158 {% for th in themes %}
159159 <form method="post" action="/parametres/affichage" style="margin:0">
@@ -162,8 +162,8 @@
162162 <button type="submit" class="theme-choice{% if th.current %} current{% endif %}" {% if th.current %}aria-current="true"{% endif %}>
163163 <span class="theme-swatch swatch-{{ th.code }}"></span>
164164 <span style="flex:1;text-align:left">
165- <span style="display:block;font-size:16px">{{ th.name }}</span>
166- <span style="display:block;font-size:12px;opacity:.75">{{ th.desc }}</span>
165+ <span class="option-title">{{ th.name }}</span>
166+ <span class="option-sub">{{ th.desc }}</span>
167167 </span>
168168 {% if th.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}
169169 </button>
@@ -171,8 +171,8 @@
171171 {% endfor %}
172172 </div>
173173
174-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.chart_style }}</h2>
175-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.chart_style_hint }}</p>
174+<h2 class="section-title">{{ shell.tr.chart_style }}</h2>
175+<p class="hint">{{ shell.tr.chart_style_hint }}</p>
176176 <div style="display:grid;gap:var(--space-2);margin-bottom:var(--space-2)">
177177 {% for cs in chart_styles %}
178178 <form method="post" action="/parametres/graphiques" style="margin:0">
@@ -187,8 +187,8 @@
187187 {% endif %}
188188 </span>
189189 <span style="flex:1;text-align:left">
190- <span style="display:block;font-size:16px">{{ cs.name }}</span>
191- <span style="display:block;font-size:12px;opacity:.75">{{ cs.desc }}</span>
190+ <span class="option-title">{{ cs.name }}</span>
191+ <span class="option-sub">{{ cs.desc }}</span>
192192 </span>
193193 {% if cs.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}
194194 </button>
@@ -196,11 +196,11 @@
196196 {% endfor %}
197197 </div>
198198
199-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-3)">{{ shell.tr.session }}</h2>
199+<h2 class="section-title" style="margin-bottom:var(--space-3)">{{ shell.tr.session }}</h2>
200200 <form method="post" action="/logout">
201201 <input type="hidden" name="csrf" value="{{ csrf }}">
202202 <button type="submit" class="btn btn-block"
203203 style="min-height:46px;margin-top:var(--space-4);color:var(--color-accent-700);border:1px solid var(--color-accent-300)">{{ shell.tr.sign_out }}</button>
204204 </form>
205-<p class="text-muted" style="font-size:11px;margin-top:var(--space-3);text-align:center">{{ shell.tr.signout_note }}</p>
205+<p class="text-muted" style="font-size:0.6875rem;margin-top:var(--space-3);text-align:center">{{ shell.tr.signout_note }}</p>
206206 {% endblock %}
@@ -24,34 +24,34 @@
24 24
25 <div class="card" style="margin-bottom:var(--space-3)">25 <div class="card" style="margin-bottom:var(--space-3)">
26 <div class="card-kicker">{{ shell.tr.account_kicker }}</div>26 <div class="card-kicker">{{ shell.tr.account_kicker }}</div>
27- <div style="font-size:19px;font-family:var(--font-heading)">{{ shell.username }}</div>27+ <div style="font-size:1.1875rem;font-family:var(--font-heading)">{{ shell.username }}</div>
28 <p class="card-body">{{ account_line }}</p>28 <p class="card-body">{{ account_line }}</p>
29 {# Pas .card-body : son opacité 0.8 délaverait le lien sous 4.5:1 (axe). #}29 {# Pas .card-body : son opacité 0.8 délaverait le lien sous 4.5:1 (axe). #}
30- <p style="margin:var(--space-2) 0 0;font-size:13px">{{ shell.tr.feedback_title }}30+ <p style="margin:var(--space-2) 0 0;font-size:0.8125rem">{{ shell.tr.feedback_title }}
31 <a href="{{ feedback_href }}" target="_blank" rel="noopener">{{ shell.tr.feedback_link }} ↗</a></p>31 <a href="{{ feedback_href }}" target="_blank" rel="noopener">{{ shell.tr.feedback_link }} ↗</a></p>
32- <p style="font-size:11px;opacity:.7;margin:var(--space-1) 0 0">{{ version_line }}</p>32+ <p style="font-size:0.6875rem;opacity:.7;margin:var(--space-1) 0 0">{{ version_line }}</p>
33 </div>33 </div>
34 34
35 <a class="card times-link" href="/temps" style="margin-bottom:var(--space-3)">35 <a class="card times-link" href="/temps" style="margin-bottom:var(--space-3)">
36 <span style="flex:1">36 <span style="flex:1">
37- <span style="display:block;font-family:var(--font-heading);font-size:17px">{{ shell.tr.my_entries }}</span>37+ <span class="link-title">{{ shell.tr.my_entries }}</span>
38- <span style="display:block;font-size:13px;opacity:.7">{{ shell.tr.my_entries_desc }}</span>38+ <span class="link-sub">{{ shell.tr.my_entries_desc }}</span>
39 </span>39 </span>
40 {% call c::chevron_right(17) %}{% endcall %}40 {% call c::chevron_right(17) %}{% endcall %}
41 </a>41 </a>
42 42
43 <a class="card times-link" href="/parametres/categories" style="margin-bottom:var(--space-3)">43 <a class="card times-link" href="/parametres/categories" style="margin-bottom:var(--space-3)">
44 <span style="flex:1">44 <span style="flex:1">
45- <span style="display:block;font-family:var(--font-heading);font-size:17px">{{ shell.tr.title_categories }}</span>45+ <span class="link-title">{{ shell.tr.title_categories }}</span>
46- <span style="display:block;font-size:13px;opacity:.7">{{ shell.tr.manage_categories_desc }}</span>46+ <span class="link-sub">{{ shell.tr.manage_categories_desc }}</span>
47 </span>47 </span>
48 {% call c::chevron_right(17) %}{% endcall %}48 {% call c::chevron_right(17) %}{% endcall %}
49 </a>49 </a>
50 50
51 <a class="card times-link" href="/parametres/securite" style="margin-bottom:var(--space-6)">51 <a class="card times-link" href="/parametres/securite" style="margin-bottom:var(--space-6)">
52 <span style="flex:1">52 <span style="flex:1">
53- <span style="display:block;font-family:var(--font-heading);font-size:17px">{{ shell.tr.title_security }}</span>53+ <span class="link-title">{{ shell.tr.title_security }}</span>
54- <span style="display:block;font-size:13px;opacity:.7">{{ shell.tr.security_card_desc }}</span>54+ <span class="link-sub">{{ shell.tr.security_card_desc }}</span>
55 </span>55 </span>
56 {% call c::chevron_right(17) %}{% endcall %}56 {% call c::chevron_right(17) %}{% endcall %}
57 </a>57 </a>
@@ -66,9 +66,9 @@
66 </div>66 </div>
67 </div>67 </div>
68 </form>68 </form>
69-<p style="font-size:12px;opacity:.7;margin:0 0 var(--space-6)">{{ shell.tr.rename_team_note }}</p>69+<p class="hint-sm" style="margin:0 0 var(--space-6)">{{ shell.tr.rename_team_note }}</p>
70 70
71-<h2 style="font-size:16px;margin:0 0 var(--space-2)">{{ members_title }}</h2>71+<h2 class="section-title" style="margin-top:0">{{ members_title }}</h2>
72 <div style="display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-4)">72 <div style="display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-4)">
73 {% for m in members %}<span class="tag tag-neutral">{{ m }}</span>{% endfor %}73 {% for m in members %}<span class="tag tag-neutral">{{ m }}</span>{% endfor %}
74 </div>74 </div>
@@ -84,10 +84,10 @@
84 </div>84 </div>
85 </form>85 </form>
86 {% if let Some(e) = invite_error %}<p class="form-error" style="margin:0 0 var(--space-2)">{{ e }}</p>{% endif %}86 {% if let Some(e) = invite_error %}<p class="form-error" style="margin:0 0 var(--space-2)">{{ e }}</p>{% endif %}
87-<p style="font-size:12px;opacity:.7;margin:0">{{ shell.tr.invite_note }}</p>87+<p class="hint-sm" style="margin:0">{{ shell.tr.invite_note }}</p>
88 88
89-<h2 style="font-size:16px;margin:var(--space-6) 0 var(--space-2)">{{ shell.tr.invite_link }}</h2>89+<h2 class="section-title" style="margin-top:var(--space-6)">{{ shell.tr.invite_link }}</h2>
90-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.invite_link_hint }}</p>90+<p class="hint">{{ shell.tr.invite_link_hint }}</p>
91 {% if let Some(lien) = invite_link %}91 {% if let Some(lien) = invite_link %}
92 <div class="field" style="margin-bottom:var(--space-2)">92 <div class="field" style="margin-bottom:var(--space-2)">
93 {# Le titre juste au-dessus nomme déjà le champ : aria-label plutôt qu'un93 {# Le titre juste au-dessus nomme déjà le champ : aria-label plutôt qu'un
@@ -95,7 +95,7 @@
95 sélectionnable pour être copié. #}95 sélectionnable pour être copié. #}
96 <input class="input" id="lien-invit" value="{{ lien }}" readonly96 <input class="input" id="lien-invit" value="{{ lien }}" readonly
97 aria-label="{{ shell.tr.invite_link }}" aria-describedby="lien-aide"97 aria-label="{{ shell.tr.invite_link }}" aria-describedby="lien-aide"
98- style="min-height:44px;font-size:13px">98+ style="min-height:44px;font-size:0.8125rem">
99 </div>99 </div>
100 <p class="field-hint" id="lien-aide" style="margin-bottom:var(--space-2)">{{ shell.tr.invite_link_ready }}</p>100 <p class="field-hint" id="lien-aide" style="margin-bottom:var(--space-2)">{{ shell.tr.invite_link_ready }}</p>
101 {% endif %}101 {% endif %}
@@ -105,22 +105,22 @@
105 </form>105 </form>
106 106
107 {% if !sent.is_empty() %}107 {% if !sent.is_empty() %}
108-<h2 style="font-size:16px;margin:var(--space-6) 0 var(--space-2)">{{ shell.tr.pending_invites }}</h2>108+<h2 class="section-title" style="margin-top:var(--space-6)">{{ shell.tr.pending_invites }}</h2>
109 {% for si in sent %}109 {% for si in sent %}
110 <div class="sent-row">110 <div class="sent-row">
111 <div style="flex:1;min-width:0">111 <div style="flex:1;min-width:0">
112- <div style="font-size:15px">{{ si.name }}</div>112+ <div style="font-size:0.9375rem">{{ si.name }}</div>
113- <div style="font-size:12px;opacity:.7">{{ si.meta }}</div>113+ <div class="hint-sm">{{ si.meta }}</div>
114 </div>114 </div>
115 <form method="post" action="{{ si.cancel_action }}" style="margin:0">115 <form method="post" action="{{ si.cancel_action }}" style="margin:0">
116 <input type="hidden" name="csrf" value="{{ csrf }}">116 <input type="hidden" name="csrf" value="{{ csrf }}">
117- <button type="submit" class="btn btn-ghost" style="font-size:12px">{{ shell.tr.cancel }}</button>117+ <button type="submit" class="btn btn-ghost" style="font-size:0.75rem">{{ shell.tr.cancel }}</button>
118 </form>118 </form>
119 </div>119 </div>
120 {% endfor %}120 {% endfor %}
121 {% endif %}121 {% endif %}
122 122
123-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.create_team }}</h2>123+<h2 class="section-title">{{ shell.tr.create_team }}</h2>
124 <form method="post" action="/equipes">124 <form method="post" action="/equipes">
125 <input type="hidden" name="csrf" value="{{ csrf }}">125 <input type="hidden" name="csrf" value="{{ csrf }}">
126 <div style="display:flex;gap:var(--space-2)">126 <div style="display:flex;gap:var(--space-2)">
@@ -128,7 +128,7 @@
128 <button type="submit" class="btn btn-primary" style="min-height:44px">{{ shell.tr.create }}</button>128 <button type="submit" class="btn btn-primary" style="min-height:44px">{{ shell.tr.create }}</button>
129 </div>129 </div>
130 </form>130 </form>
131-<p style="font-size:12px;opacity:.7;margin:var(--space-2) 0 0">{{ shell.tr.create_team_note }}</p>131+<p class="hint-sm" style="margin:var(--space-2) 0 0">{{ shell.tr.create_team_note }}</p>
132 132
133 {% if can_leave %}133 {% if can_leave %}
134 <form method="post" action="/equipes/quitter">134 <form method="post" action="/equipes/quitter">
@@ -136,10 +136,10 @@
136 <button type="submit" class="btn btn-block"136 <button type="submit" class="btn btn-block"
137 style="min-height:46px;margin-top:var(--space-6);color:var(--color-accent-700);border:1px solid var(--color-accent-300)">{{ leave_label }}</button>137 style="min-height:46px;margin-top:var(--space-6);color:var(--color-accent-700);border:1px solid var(--color-accent-300)">{{ leave_label }}</button>
138 </form>138 </form>
139-<p style="font-size:11px;opacity:.7;margin-top:var(--space-2);text-align:center">{{ shell.tr.leave_note }}</p>139+<p style="font-size:0.6875rem;opacity:.7;margin-top:var(--space-2);text-align:center">{{ shell.tr.leave_note }}</p>
140 {% endif %}140 {% endif %}
141 141
142-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.language }}</h2>142+<h2 class="section-title">{{ shell.tr.language }}</h2>
143 <div style="display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-2)">143 <div style="display:flex;gap:var(--space-2);flex-wrap:wrap;margin-bottom:var(--space-2)">
144 {% for l in langs %}144 {% for l in langs %}
145 <form method="post" action="/parametres/langue" style="margin:0">145 <form method="post" action="/parametres/langue" style="margin:0">
@@ -152,8 +152,8 @@
152 {% endfor %}152 {% endfor %}
153 </div>153 </div>
154 154
155-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.display }}</h2>155+<h2 class="section-title">{{ shell.tr.display }}</h2>
156-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.display_hint }}</p>156+<p class="hint">{{ shell.tr.display_hint }}</p>
157 <div style="display:grid;gap:var(--space-2);margin-bottom:var(--space-2)">157 <div style="display:grid;gap:var(--space-2);margin-bottom:var(--space-2)">
158 {% for th in themes %}158 {% for th in themes %}
159 <form method="post" action="/parametres/affichage" style="margin:0">159 <form method="post" action="/parametres/affichage" style="margin:0">
@@ -162,8 +162,8 @@
162 <button type="submit" class="theme-choice{% if th.current %} current{% endif %}" {% if th.current %}aria-current="true"{% endif %}>162 <button type="submit" class="theme-choice{% if th.current %} current{% endif %}" {% if th.current %}aria-current="true"{% endif %}>
163 <span class="theme-swatch swatch-{{ th.code }}"></span>163 <span class="theme-swatch swatch-{{ th.code }}"></span>
164 <span style="flex:1;text-align:left">164 <span style="flex:1;text-align:left">
165- <span style="display:block;font-size:16px">{{ th.name }}</span>165+ <span class="option-title">{{ th.name }}</span>
166- <span style="display:block;font-size:12px;opacity:.75">{{ th.desc }}</span>166+ <span class="option-sub">{{ th.desc }}</span>
167 </span>167 </span>
168 {% if th.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}168 {% if th.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}
169 </button>169 </button>
@@ -171,8 +171,8 @@
171 {% endfor %}171 {% endfor %}
172 </div>172 </div>
173 173
174-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-2)">{{ shell.tr.chart_style }}</h2>174+<h2 class="section-title">{{ shell.tr.chart_style }}</h2>
175-<p style="font-size:13px;opacity:.7;margin:0 0 var(--space-3)">{{ shell.tr.chart_style_hint }}</p>175+<p class="hint">{{ shell.tr.chart_style_hint }}</p>
176 <div style="display:grid;gap:var(--space-2);margin-bottom:var(--space-2)">176 <div style="display:grid;gap:var(--space-2);margin-bottom:var(--space-2)">
177 {% for cs in chart_styles %}177 {% for cs in chart_styles %}
178 <form method="post" action="/parametres/graphiques" style="margin:0">178 <form method="post" action="/parametres/graphiques" style="margin:0">
@@ -187,8 +187,8 @@
187 {% endif %}187 {% endif %}
188 </span>188 </span>
189 <span style="flex:1;text-align:left">189 <span style="flex:1;text-align:left">
190- <span style="display:block;font-size:16px">{{ cs.name }}</span>190+ <span class="option-title">{{ cs.name }}</span>
191- <span style="display:block;font-size:12px;opacity:.75">{{ cs.desc }}</span>191+ <span class="option-sub">{{ cs.desc }}</span>
192 </span>192 </span>
193 {% if cs.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}193 {% if cs.current %}<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6L9 17l-5-5"></path></svg>{% endif %}
194 </button>194 </button>
@@ -196,11 +196,11 @@
196 {% endfor %}196 {% endfor %}
197 </div>197 </div>
198 198
199-<h2 style="font-size:16px;margin:var(--space-8) 0 var(--space-3)">{{ shell.tr.session }}</h2>199+<h2 class="section-title" style="margin-bottom:var(--space-3)">{{ shell.tr.session }}</h2>
200 <form method="post" action="/logout">200 <form method="post" action="/logout">
201 <input type="hidden" name="csrf" value="{{ csrf }}">201 <input type="hidden" name="csrf" value="{{ csrf }}">
202 <button type="submit" class="btn btn-block"202 <button type="submit" class="btn btn-block"
203 style="min-height:46px;margin-top:var(--space-4);color:var(--color-accent-700);border:1px solid var(--color-accent-300)">{{ shell.tr.sign_out }}</button>203 style="min-height:46px;margin-top:var(--space-4);color:var(--color-accent-700);border:1px solid var(--color-accent-300)">{{ shell.tr.sign_out }}</button>
204 </form>204 </form>
205-<p class="text-muted" style="font-size:11px;margin-top:var(--space-3);text-align:center">{{ shell.tr.signout_note }}</p>205+<p class="text-muted" style="font-size:0.6875rem;margin-top:var(--space-3);text-align:center">{{ shell.tr.signout_note }}</p>
206 {% endblock %}206 {% endblock %}
modified templates/signup.html +10 -11
@@ -29,29 +29,28 @@
2929 Rien en clair à réécrire. #}
3030 <input type="hidden" name="invitation" value="{{ inv.token }}">
3131 {% endif %}
32- <div class="field" style="margin-bottom:var(--space-3)">
33- <label for="username" style="font-size:18px">{{ tr.username_label }}</label>
32+ <div class="field field-lg" style="margin-bottom:var(--space-3)">
33+ <label for="username">{{ tr.username_label }}</label>
3434 <input class="input" id="username" name="username" value="{{ username }}"
3535 autocomplete="username" autocapitalize="none" autocorrect="off"
36- required autofocus maxlength="32" style="font-size:18px">
36+ required autofocus maxlength="32">
3737 </div>
38- <div class="field" style="margin-bottom:var(--space-3)">
39- <label for="password" style="font-size:18px">{{ tr.password_label }}</label>
38+ <div class="field field-lg" style="margin-bottom:var(--space-3)">
39+ <label for="password">{{ tr.password_label }}</label>
4040 <input class="input" id="password" name="password" type="password"
41- autocomplete="new-password" required minlength="8" style="font-size:18px">
41+ autocomplete="new-password" required minlength="8">
4242 </div>
4343 {% if invite.is_none() %}
44- <div class="field" style="margin-bottom:var(--space-2)">
45- <label for="cle" style="font-size:18px">{{ tr.signup_key_label }}</label>
44+ <div class="field field-lg" style="margin-bottom:var(--space-2)">
45+ <label for="cle">{{ tr.signup_key_label }}</label>
4646 <input class="input" id="cle" name="cle" type="password" autocomplete="off"
4747 autocapitalize="none" autocorrect="off" required
48- aria-describedby="cle-aide" style="font-size:18px">
48+ aria-describedby="cle-aide">
4949 </div>
5050 <p class="field-hint" id="cle-aide">{{ tr.signup_key_hint }}</p>
5151 {% endif %}
5252 {% if let Some(e) = error %}<p class="form-error">{{ e }}</p>{% endif %}
53- <button type="submit" class="btn btn-primary btn-block"
54- style="min-height:56px;font-size:20px">{{ tr.signup_submit }}</button>
53+ <button type="submit" class="btn btn-primary btn-block btn-xl">{{ tr.signup_submit }}</button>
5554 </form>
5655 {% if invite.is_none() %}
5756 <p class="field-hint" style="margin-top:var(--space-4)">{{ tr.signup_team_hint }}</p>
@@ -29,29 +29,28 @@
29 Rien en clair à réécrire. #}29 Rien en clair à réécrire. #}
30 <input type="hidden" name="invitation" value="{{ inv.token }}">30 <input type="hidden" name="invitation" value="{{ inv.token }}">
31 {% endif %}31 {% endif %}
32- <div class="field" style="margin-bottom:var(--space-3)">32+ <div class="field field-lg" style="margin-bottom:var(--space-3)">
33- <label for="username" style="font-size:18px">{{ tr.username_label }}</label>33+ <label for="username">{{ tr.username_label }}</label>
34 <input class="input" id="username" name="username" value="{{ username }}"34 <input class="input" id="username" name="username" value="{{ username }}"
35 autocomplete="username" autocapitalize="none" autocorrect="off"35 autocomplete="username" autocapitalize="none" autocorrect="off"
36- required autofocus maxlength="32" style="font-size:18px">36+ required autofocus maxlength="32">
37 </div>37 </div>
38- <div class="field" style="margin-bottom:var(--space-3)">38+ <div class="field field-lg" style="margin-bottom:var(--space-3)">
39- <label for="password" style="font-size:18px">{{ tr.password_label }}</label>39+ <label for="password">{{ tr.password_label }}</label>
40 <input class="input" id="password" name="password" type="password"40 <input class="input" id="password" name="password" type="password"
41- autocomplete="new-password" required minlength="8" style="font-size:18px">41+ autocomplete="new-password" required minlength="8">
42 </div>42 </div>
43 {% if invite.is_none() %}43 {% if invite.is_none() %}
44- <div class="field" style="margin-bottom:var(--space-2)">44+ <div class="field field-lg" style="margin-bottom:var(--space-2)">
45- <label for="cle" style="font-size:18px">{{ tr.signup_key_label }}</label>45+ <label for="cle">{{ tr.signup_key_label }}</label>
46 <input class="input" id="cle" name="cle" type="password" autocomplete="off"46 <input class="input" id="cle" name="cle" type="password" autocomplete="off"
47 autocapitalize="none" autocorrect="off" required47 autocapitalize="none" autocorrect="off" required
48- aria-describedby="cle-aide" style="font-size:18px">48+ aria-describedby="cle-aide">
49 </div>49 </div>
50 <p class="field-hint" id="cle-aide">{{ tr.signup_key_hint }}</p>50 <p class="field-hint" id="cle-aide">{{ tr.signup_key_hint }}</p>
51 {% endif %}51 {% endif %}
52 {% if let Some(e) = error %}<p class="form-error">{{ e }}</p>{% endif %}52 {% if let Some(e) = error %}<p class="form-error">{{ e }}</p>{% endif %}
53- <button type="submit" class="btn btn-primary btn-block"53+ <button type="submit" class="btn btn-primary btn-block btn-xl">{{ tr.signup_submit }}</button>
54- style="min-height:56px;font-size:20px">{{ tr.signup_submit }}</button>
55 </form>54 </form>
56 {% if invite.is_none() %}55 {% if invite.is_none() %}
57 <p class="field-hint" style="margin-top:var(--space-4)">{{ tr.signup_team_hint }}</p>56 <p class="field-hint" style="margin-top:var(--space-4)">{{ tr.signup_team_hint }}</p>
modified templates/stats.html +1 -1
@@ -1,7 +1,7 @@
11 {% extends "app.html" %}
22 {% import "components.html" as c %}
33 {% block content %}
4-<a class="btn btn-ghost" style="margin:0 0 var(--space-4);padding-left:0;font-size:16px;min-height:44px" href="/temps">{{ shell.tr.my_entries_arrow }}</a>
4+<a class="btn btn-ghost" style="margin:0 0 var(--space-4);padding-left:0;font-size:1rem;min-height:44px" href="/temps">{{ shell.tr.my_entries_arrow }}</a>
55
66 {% if show_pills %}
77 <nav class="scope-pills" aria-label="{{ shell.tr.scope_pills_aria }}">
@@ -1,7 +1,7 @@
1 {% extends "app.html" %}1 {% extends "app.html" %}
2 {% import "components.html" as c %}2 {% import "components.html" as c %}
3 {% block content %}3 {% block content %}
4-<a class="btn btn-ghost" style="margin:0 0 var(--space-4);padding-left:0;font-size:16px;min-height:44px" href="/temps">{{ shell.tr.my_entries_arrow }}</a>4+<a class="btn btn-ghost" style="margin:0 0 var(--space-4);padding-left:0;font-size:1rem;min-height:44px" href="/temps">{{ shell.tr.my_entries_arrow }}</a>
5 5
6 {% if show_pills %}6 {% if show_pills %}
7 <nav class="scope-pills" aria-label="{{ shell.tr.scope_pills_aria }}">7 <nav class="scope-pills" aria-label="{{ shell.tr.scope_pills_aria }}">
modified templates/todo_done.html +1 -1
@@ -46,7 +46,7 @@
4646 </div>
4747 </section>
4848
49- <button type="submit" class="btn btn-primary btn-block" style="min-height:52px;font-size:16px;margin-top:var(--space-8)">{{ shell.tr.validate }}</button>
49+ <button type="submit" class="btn btn-primary btn-block btn-lg" style="margin-top:var(--space-8)">{{ shell.tr.validate }}</button>
5050 </form>
5151
5252 {% endblock %}
@@ -46,7 +46,7 @@
46 </div>46 </div>
47 </section>47 </section>
48 48
49- <button type="submit" class="btn btn-primary btn-block" style="min-height:52px;font-size:16px;margin-top:var(--space-8)">{{ shell.tr.validate }}</button>49+ <button type="submit" class="btn btn-primary btn-block btn-lg" style="margin-top:var(--space-8)">{{ shell.tr.validate }}</button>
50 </form>50 </form>
51 51
52 {% endblock %}52 {% endblock %}
modified templates/todo_form.html +3 -3
@@ -39,7 +39,7 @@
3939 </button>
4040 </div>
4141 </div>
42- <p id="todo-date-label" style="font-size:13px;opacity:.7;margin:0 0 var(--space-6)"
42+ <p id="todo-date-label" class="hint" style="margin-bottom:var(--space-6)"
4343 data-pattern="{{ vocab.pattern }}" data-weekdays="{{ vocab.weekdays }}"
4444 data-months="{{ vocab.months }}" data-today="{{ vocab.today }}"
4545 data-today-suffix="{{ vocab.today_suffix }}">{{ date_label }}</p>
@@ -67,9 +67,9 @@
6767 </label>
6868 {% endfor %}
6969 </div>
70- <p style="font-size:12px;opacity:.7;margin:0 0 var(--space-8)">{{ shell.tr.assign_note }}</p>
70+ <p class="hint-sm" style="margin:0 0 var(--space-8)">{{ shell.tr.assign_note }}</p>
7171
72- <button type="submit" class="btn btn-primary btn-block" style="min-height:52px;font-size:16px">
72+ <button type="submit" class="btn btn-primary btn-block btn-lg">
7373 {% if edit_id.is_some() %}{{ shell.tr.save }}{% else %}{{ shell.tr.create_todo }}{% endif %}
7474 </button>
7575 </form>
@@ -39,7 +39,7 @@
39 </button>39 </button>
40 </div>40 </div>
41 </div>41 </div>
42- <p id="todo-date-label" style="font-size:13px;opacity:.7;margin:0 0 var(--space-6)"42+ <p id="todo-date-label" class="hint" style="margin-bottom:var(--space-6)"
43 data-pattern="{{ vocab.pattern }}" data-weekdays="{{ vocab.weekdays }}"43 data-pattern="{{ vocab.pattern }}" data-weekdays="{{ vocab.weekdays }}"
44 data-months="{{ vocab.months }}" data-today="{{ vocab.today }}"44 data-months="{{ vocab.months }}" data-today="{{ vocab.today }}"
45 data-today-suffix="{{ vocab.today_suffix }}">{{ date_label }}</p>45 data-today-suffix="{{ vocab.today_suffix }}">{{ date_label }}</p>
@@ -67,9 +67,9 @@
67 </label>67 </label>
68 {% endfor %}68 {% endfor %}
69 </div>69 </div>
70- <p style="font-size:12px;opacity:.7;margin:0 0 var(--space-8)">{{ shell.tr.assign_note }}</p>70+ <p class="hint-sm" style="margin:0 0 var(--space-8)">{{ shell.tr.assign_note }}</p>
71 71
72- <button type="submit" class="btn btn-primary btn-block" style="min-height:52px;font-size:16px">72+ <button type="submit" class="btn btn-primary btn-block btn-lg">
73 {% if edit_id.is_some() %}{{ shell.tr.save }}{% else %}{{ shell.tr.create_todo }}{% endif %}73 {% if edit_id.is_some() %}{{ shell.tr.save }}{% else %}{{ shell.tr.create_todo }}{% endif %}
74 </button>74 </button>
75 </form>75 </form>
modified templates/todos.html +1 -1
@@ -113,7 +113,7 @@
113113 <div class="later-row">
114114 <span class="team-dot" style="background:{{ t.color }}"></span>
115115 <div style="flex:1;min-width:0">
116- <div style="font-size:15px">{{ t.name }}</div>
116+ <div style="font-size:0.9375rem">{{ t.name }}</div>
117117 <div class="todo-meta">{{ t.meta }}</div>
118118 {% if !t.assignees.is_empty() %}
119119 <div class="asg-chips">
@@ -113,7 +113,7 @@
113 <div class="later-row">113 <div class="later-row">
114 <span class="team-dot" style="background:{{ t.color }}"></span>114 <span class="team-dot" style="background:{{ t.color }}"></span>
115 <div style="flex:1;min-width:0">115 <div style="flex:1;min-width:0">
116- <div style="font-size:15px">{{ t.name }}</div>116+ <div style="font-size:0.9375rem">{{ t.name }}</div>
117 <div class="todo-meta">{{ t.meta }}</div>117 <div class="todo-meta">{{ t.meta }}</div>
118 {% if !t.assignees.is_empty() %}118 {% if !t.assignees.is_empty() %}
119 <div class="asg-chips">119 <div class="asg-chips">