@ktortu/aaa 0.9.4 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +25 -1
  2. package/button/button-tokens.css +3 -1
  3. package/button/button.css +3 -3
  4. package/card/card-tokens.css +2 -1
  5. package/cdk/styles/foundation.css +19 -10
  6. package/dialog/dialog.css +58 -4
  7. package/fesm2022/ktortu-aaa-dialog.mjs +28 -14
  8. package/fesm2022/ktortu-aaa-dialog.mjs.map +1 -1
  9. package/fesm2022/ktortu-aaa-forms.mjs +402 -36
  10. package/fesm2022/ktortu-aaa-forms.mjs.map +1 -1
  11. package/fesm2022/ktortu-aaa-layout.mjs +286 -0
  12. package/fesm2022/ktortu-aaa-layout.mjs.map +1 -0
  13. package/fesm2022/ktortu-aaa.mjs +1 -0
  14. package/fesm2022/ktortu-aaa.mjs.map +1 -1
  15. package/forms/chips/chip-listbox.css +56 -0
  16. package/forms/chips/chip.css +47 -0
  17. package/forms/chips/tokens.css +5 -0
  18. package/forms/field/field.css +3 -1
  19. package/forms/styles/select-panel.css +3 -3
  20. package/package.json +5 -1
  21. package/styles/layout.css +140 -0
  22. package/styles/styles.css +1 -0
  23. package/themes/theme-ant.css +21 -16
  24. package/themes/theme-architecte.css +28 -28
  25. package/themes/theme-aurora.css +23 -23
  26. package/themes/theme-bootstrap.css +19 -19
  27. package/themes/theme-carbon.css +18 -18
  28. package/themes/theme-catppuccin.css +27 -27
  29. package/themes/theme-cyberpunk.css +28 -28
  30. package/themes/theme-fluent.css +32 -19
  31. package/themes/theme-material-you.css +78 -27
  32. package/themes/theme-material.css +28 -19
  33. package/themes/theme-primer.css +24 -18
  34. package/themes/theme-vegetal.css +21 -21
  35. package/tooltip/tooltip.css +1 -0
  36. package/types/ktortu-aaa-dialog.d.ts +23 -1
  37. package/types/ktortu-aaa-forms.d.ts +118 -6
  38. package/types/ktortu-aaa-layout.d.ts +117 -0
  39. package/types/ktortu-aaa.d.ts +1 -0
@@ -4,14 +4,14 @@
4
4
  → on prend les crans -7 de leurs palettes (blue-7 #0958d9, red-7 #cf1322), AA des deux côtés. */
5
5
  [data-theme='ant'] {
6
6
  /* ============ Socle ============ */
7
- --kt-primary: #0958d9; /* blue-7 — blanc 6.2:1 */
8
- --kt-danger: #cf1322; /* red-7 — blanc 5.6:1 */
9
- --kt-neutral: #434343;
10
- --kt-surface: #ffffff;
11
- --kt-on-surface: #1f1f1f; /* ≈ rgba(0,0,0,.88) Ant */
12
- --kt-muted: #595959; /* ≈ rgba(0,0,0,.65) */
13
- --kt-outline: #d9d9d9;
14
- --kt-outline-strong: #8c8c8c;
7
+ --kt-primary: light-dark(#0d4aa6, #368ef0); /* blue-7 — blanc 6.2:1 */
8
+ --kt-danger: light-dark(#b32d2f, #f56c70); /* red-7 — blanc 5.6:1 */
9
+ --kt-neutral: light-dark(#434343, #d9d9d9);
10
+ --kt-surface: light-dark(#ffffff, #000000);
11
+ --kt-on-surface: light-dark(#1f1f1f, rgba(255, 255, 255, 0.85)); /* ≈ rgba(0,0,0,.88) Ant */
12
+ --kt-muted: light-dark(#595959, rgba(255, 255, 255, 0.65)); /* ≈ rgba(0,0,0,.65) */
13
+ --kt-outline: light-dark(#d9d9d9, #424242);
14
+ --kt-outline-strong: light-dark(#8c8c8c, #636363);
15
15
  --kt-font: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
16
16
 
17
17
  /* ============ Géométrie ============ */
@@ -24,14 +24,14 @@
24
24
 
25
25
  /* ============ Boutons ============ */
26
26
  --btn-tonal-weight: 12%; /* containers discrets façon Ant (color-bg variants) */
27
- --btn-on-primary-container: #003eb3;
28
- --btn-on-danger-container: #820014;
29
- --btn-on-neutral-container: #1f1f1f;
27
+ --btn-on-primary-container: light-dark(#003eb3, #69b1ff);
28
+ --btn-on-danger-container: light-dark(#820014, #ff7875);
29
+ --btn-on-neutral-container: light-dark(#1f1f1f, rgba(255, 255, 255, 0.85));
30
30
 
31
31
  /* ============ Select / tooltip ============ */
32
- --select-popup-shadow: 0 6px 16px rgb(0 0 0 / 8%), 0 3px 6px rgb(0 0 0 / 12%);
33
- --tooltip-bg: #1f1f1f; /* ≈ rgba(0,0,0,.85) */
34
- --tooltip-fg: #ffffff;
32
+ --select-popup-shadow: light-dark(0 6px 16px rgb(0 0 0 / 8%), 0 3px 6px rgb(0 0 0 / 12%), 0 0 0 1px #424242);
33
+ --tooltip-bg: light-dark(#1f1f1f, rgba(255, 255, 255, 0.85)); /* ≈ rgba(0,0,0,.85) */
34
+ --tooltip-fg: light-dark(#ffffff, #1f1f1f);
35
35
 
36
36
  /* ============ Dialog (Ant Design : rayon 8, sans bord) ============ */
37
37
  --dialog-radius: 8px;
@@ -39,6 +39,11 @@
39
39
 
40
40
  /* ============ Card (Ant : rayon 8, boxShadowCard discret) ============ */
41
41
  --card-radius: 8px;
42
- --card-filled-bg: #fafafa; /* colorFillAlter */
43
- --card-shadow: 0 1px 2px rgb(0 0 0 / 3%), 0 1px 6px -1px rgb(0 0 0 / 2%), 0 2px 4px rgb(0 0 0 / 2%);
42
+ --card-filled-bg: light-dark(#fafafa, #1f1f1f); /* colorFillAlter */
43
+ --card-shadow: light-dark(
44
+ 0 1px 2px rgb(0 0 0 / 3%),
45
+ 0 1px 6px -1px rgb(0 0 0 / 2%),
46
+ 0 2px 4px rgb(0 0 0 / 2%),
47
+ 0 0 0 1px #424242
48
+ );
44
49
  }
@@ -7,18 +7,18 @@
7
7
  haut/bas, tirets sur les côtés, comme le cadre d'un cartouche de plan.
8
8
  Bleu de Prusse, traits cyan crayon, sanguine en danger, Architects Daughter. */
9
9
  [data-theme='architecte'] {
10
- color-scheme: dark;
10
+ /* color-scheme handled by foundation */
11
11
 
12
12
  /* ============ Socle ============ */
13
- --kt-surface: #16344f; /* bleu de Prusse (blueprint) */
14
- --kt-on-surface: #e8f1f8; /* 11.2:1 */
15
- --kt-muted: #9dbdd4; /* 6.5:1 */
16
- --kt-outline: #6f9dbd; /* trait de plan (4.4:1 non-texte) */
17
- --kt-outline-strong: #a8cce4;
18
- --kt-primary: #7fc8f0; /* crayon cyan, 7.0:1 en texte */
19
- --kt-danger: #f0907c; /* sanguine, 5.5:1 */
20
- --kt-neutral: #3e5c75;
21
- --kt-focus-ring-color: #7fc8f0;
13
+ --kt-surface: light-dark(#fdfdfd, #16344f); /* bleu de Prusse (blueprint) */
14
+ --kt-on-surface: light-dark(#16344f, #e8f1f8); /* 11.2:1 */
15
+ --kt-muted: light-dark(#4b6b85, #9dbdd4); /* 6.5:1 */
16
+ --kt-outline: light-dark(#a8cce4, #6f9dbd); /* trait de plan (4.4:1 non-texte) */
17
+ --kt-outline-strong: light-dark(#6f9dbd, #a8cce4);
18
+ --kt-primary: light-dark(#0d5680, #7fc8f0); /* encre bleue plus foncée pour AAA avec texte blanc */
19
+ --kt-danger: light-dark(#8f3626, #f0907c); /* sanguine plus foncée pour AAA */
20
+ --kt-neutral: light-dark(#d5e5f0, #3e5c75);
21
+ --kt-focus-ring-color: light-dark(#1c7fb3, #7fc8f0);
22
22
  --kt-font: 'Architects Daughter', 'Segoe Print', cursive;
23
23
 
24
24
  /* Gouttière = trait de plan : thumb bleu crayon (outline) sur le lavis des champs. */
@@ -35,7 +35,7 @@
35
35
 
36
36
  /* ============ Champs : ligne de cote (underline par côté) ============ */
37
37
  --field-border-width: 0 0 2px 0; /* SEULE la ligne du bas existe */
38
- --field-bg: #1b3c5a; /* lavis léger au-dessus de la ligne */
38
+ --field-bg: light-dark(#f2f8fc, #1b3c5a); /* lavis léger au-dessus de la ligne */
39
39
  --field-focus-ring: color-mix(in srgb, #7fc8f0 55%, transparent);
40
40
  --field-focus-ring-style: dashed; /* trait de construction (rétrofit lot 6) */
41
41
  /* Menu flottant du select : bordure complète et fine, lui. */
@@ -43,41 +43,41 @@
43
43
  /* Lettrage technique des cartouches (rétrofit lot 6). */
44
44
  --field-label-transform: uppercase;
45
45
  --field-label-letter-spacing: 0.06em;
46
- --field-caret-color: #7fc8f0;
47
- --kt-selection-bg: #7fc8f0;
48
- --kt-selection-fg: #0d2438;
46
+ --field-caret-color: light-dark(#1c7fb3, #7fc8f0);
47
+ --kt-selection-bg: light-dark(#b3def5, #7fc8f0);
48
+ --kt-selection-fg: light-dark(#0d2438, #0d2438);
49
49
 
50
50
  /* ============ Boutons : cartouche (style par côté) ============ */
51
51
  --btn-border-style: solid dashed; /* haut/bas pleins, côtés en tirets */
52
52
  --btn-border-width: 1.5px;
53
53
  --btn-text-transform: uppercase; /* lettrage de plan (rétrofit lot 6) */
54
54
  --btn-letter-spacing: 0.08em;
55
- --btn-on-primary: #0d2438; /* 8.6:1 sur cyan */
56
- --btn-on-danger: #381208; /* 7.1:1 sur sanguine */
57
- --btn-on-neutral: #ffffff; /* 7.0:1 */
58
- --btn-on-primary-container: #c9e6f8;
59
- --btn-on-neutral-container: #d4e2ee;
60
- --btn-on-danger-container: #f8cfc4;
55
+ --btn-on-primary: light-dark(#ffffff, #0d2438); /* 8.6:1 sur cyan */
56
+ --btn-on-danger: light-dark(#ffffff, #381208); /* 7.1:1 sur sanguine */
57
+ --btn-on-neutral: light-dark(#16344f, #ffffff); /* 7.0:1 */
58
+ --btn-on-primary-container: light-dark(#09324a, #c9e6f8);
59
+ --btn-on-neutral-container: light-dark(#16344f, #d4e2ee);
60
+ --btn-on-danger-container: light-dark(#4a150c, #f8cfc4);
61
61
  --btn-fg-weight: 100%;
62
- --btn-neutral-fg: #a9c4da;
62
+ --btn-neutral-fg: light-dark(#3a5b78, #a9c4da);
63
63
  --btn-tonal-weight: 24%;
64
64
 
65
65
  /* ============ Select / tooltip ============ */
66
- --select-popup-bg: #1b3c5a;
66
+ --select-popup-bg: light-dark(#f2f8fc, #1b3c5a);
67
67
  --select-popup-shadow: 0 8px 24px rgb(4 14 24 / 55%);
68
68
  --kt-sheet-shadow: 0 -8px 24px rgb(4 14 24 / 55%);
69
69
  --kt-sheet-scrim: rgb(4 14 24 / 60%);
70
- --tooltip-bg: #0f2438;
71
- --tooltip-fg: #dceaf5;
70
+ --tooltip-bg: light-dark(#e1edf5, #0f2438);
71
+ --tooltip-fg: light-dark(#16344f, #dceaf5);
72
72
 
73
73
  /* ============ Dialog (blueprint : cartouche cyan) ============ */
74
74
  --dialog-radius: 8px;
75
- --dialog-border-color: #6f9dbd;
75
+ --dialog-border-color: light-dark(#a8cce4, #6f9dbd);
76
76
 
77
77
  /* ============ Card : cartouche blueprint (lavis + trait cyan via l'ombre) ============ */
78
- --card-bg: #1b3c5a;
79
- --card-filled-bg: #214a6e;
78
+ --card-bg: light-dark(#fdfdfd, #1b3c5a);
79
+ --card-filled-bg: light-dark(#f2f8fc, #214a6e);
80
80
  --card-radius: 8px;
81
- --card-border-color: #6f9dbd;
81
+ --card-border-color: light-dark(#a8cce4, #6f9dbd);
82
82
  --card-shadow: 0 0 0 1px rgb(111 157 189 / 30%), 0 8px 24px rgb(4 14 24 / 45%);
83
83
  }
@@ -4,18 +4,18 @@
4
4
  Surfaces claires + texte navy => AA sans compromis (les halos sont décoratifs, jamais porteurs
5
5
  d'information ni de contraste de texte). Inter, rondeurs douces. */
6
6
  [data-theme='aurora'] {
7
- color-scheme: light;
7
+ /* color-scheme handled by foundation */
8
8
 
9
9
  /* ============ Socle ============ */
10
- --kt-primary: #4f46e5; /* indigo — blanc ~6.6:1 */
11
- --kt-danger: #be185d; /* rose profond — blanc ~6.2:1 */
12
- --kt-neutral: #475569;
13
- --kt-surface: #f7f9fc;
14
- --kt-on-surface: #16203a; /* ~13:1 */
15
- --kt-muted: #4a5878; /* ~6:1 */
16
- --kt-outline: #cdd6e8;
17
- --kt-outline-strong: #8493b3;
18
- --kt-focus-ring-color: #4f46e5;
10
+ --kt-primary: light-dark(#4f46e5, #818cf8); /* indigo — blanc ~6.6:1 */
11
+ --kt-danger: light-dark(#be185d, #f472b6); /* rose profond — blanc ~6.2:1 */
12
+ --kt-neutral: light-dark(#475569, #94a3b8);
13
+ --kt-surface: light-dark(#f7f9fc, #0f172a);
14
+ --kt-on-surface: light-dark(#16203a, #f8fafc); /* ~13:1 */
15
+ --kt-muted: light-dark(#4a5878, #cbd5e1); /* ~6:1 */
16
+ --kt-outline: light-dark(#cdd6e8, #334155);
17
+ --kt-outline-strong: light-dark(#8493b3, #64748b);
18
+ --kt-focus-ring-color: light-dark(#4f46e5, #818cf8);
19
19
  --kt-font: 'Inter', system-ui, sans-serif;
20
20
 
21
21
  /* Gouttière indigo douce. */
@@ -27,9 +27,9 @@
27
27
  --kt-sheet-scrim: rgb(22 32 58 / 35%);
28
28
 
29
29
  /* Caret + sélection. */
30
- --field-caret-color: #4f46e5;
31
- --kt-selection-bg: #ddd6fe;
32
- --kt-selection-fg: #2e1065;
30
+ --field-caret-color: light-dark(#4f46e5, #818cf8);
31
+ --kt-selection-bg: light-dark(#ddd6fe, #4c1d95);
32
+ --kt-selection-fg: light-dark(#2e1065, #ede9fe);
33
33
 
34
34
  /* ============ Géométrie douce ============ */
35
35
  --kt-control-radius: 12px;
@@ -37,7 +37,7 @@
37
37
  --chip-radius: 999px;
38
38
 
39
39
  /* ============ Champs : halo indigo au survol/focus ============ */
40
- --field-bg: #ffffff;
40
+ --field-bg: light-dark(#ffffff, #1e293b);
41
41
  --field-focus-ring: color-mix(in srgb, #4f46e5 50%, transparent);
42
42
  --field-transition: border-color 180ms ease, box-shadow 180ms ease;
43
43
  --field-shadow: 0 2px 8px rgb(22 32 58 / 6%);
@@ -46,9 +46,9 @@
46
46
 
47
47
  /* ============ Boutons : élévation colorée, lève au survol ============ */
48
48
  --btn-tonal-weight: 16%;
49
- --btn-on-primary-container: #2e1065;
50
- --btn-on-danger-container: #6b0f3a;
51
- --btn-on-neutral-container: #16203a;
49
+ --btn-on-primary-container: light-dark(#2e1065, #c7d2fe);
50
+ --btn-on-danger-container: light-dark(#6b0f3a, #fbcfe8);
51
+ --btn-on-neutral-container: light-dark(#16203a, #f1f5f9);
52
52
  --btn-transition: transform 180ms ease, box-shadow 180ms ease;
53
53
  --btn-transform-hover: translateY(-2px);
54
54
  --btn-transform-active: translateY(0) scale(0.98);
@@ -58,20 +58,20 @@
58
58
  --chip-shadow-hover: 0 4px 14px rgb(79 70 229 / 20%);
59
59
 
60
60
  /* ============ Select / tooltip : panneaux à halo ============ */
61
- --select-popup-bg: #ffffff;
61
+ --select-popup-bg: light-dark(#ffffff, #1e293b);
62
62
  --select-popup-shadow: 0 16px 48px rgb(79 70 229 / 18%), 0 4px 16px rgb(190 24 93 / 10%);
63
- --tooltip-bg: #16203a;
64
- --tooltip-fg: #f7f9fc;
63
+ --tooltip-bg: light-dark(#16203a, #f1f5f9);
64
+ --tooltip-fg: light-dark(#f7f9fc, #0f172a);
65
65
 
66
66
  /* ============ Dialog : halo aurora ample ============ */
67
- --dialog-bg: #ffffff;
67
+ --dialog-bg: light-dark(#ffffff, #1e293b);
68
68
  --dialog-radius: 20px;
69
69
  --dialog-border-width: 0;
70
70
  --dialog-shadow: 0 24px 64px rgb(79 70 229 / 22%), 0 8px 24px rgb(190 24 93 / 12%);
71
71
 
72
72
  /* ============ Card : LA vitrine — double halo coloré, lève au survol ============ */
73
- --card-bg: #ffffff;
74
- --card-filled-bg: #f1f0fe; /* teinte indigo très pâle */
73
+ --card-bg: light-dark(#ffffff, #1e293b);
74
+ --card-filled-bg: light-dark(#f1f0fe, #272740); /* teinte indigo très pâle */
75
75
  --card-radius: 16px;
76
76
  --card-shadow: 0 6px 24px rgb(79 70 229 / 14%), 0 2px 8px rgb(190 24 93 / 8%);
77
77
  --card-shadow-hover: 0 14px 40px rgb(79 70 229 / 22%), 0 6px 18px rgb(190 24 93 / 12%);
@@ -4,14 +4,14 @@
4
4
  → on prend leurs variantes hover (#0b5ed7, #bb2d3b), quasi indiscernables et AA. */
5
5
  [data-theme='bootstrap'] {
6
6
  /* ============ Socle ============ */
7
- --kt-primary: #0b5ed7; /* btn-primary hover — blanc 5.8:1 */
8
- --kt-danger: #bb2d3b; /* btn-danger hover — blanc 5.9:1 */
9
- --kt-neutral: #6c757d; /* secondary — blanc 4.7:1 */
10
- --kt-surface: #ffffff;
11
- --kt-on-surface: #212529; /* body-color */
12
- --kt-muted: #6c757d; /* secondary-color */
13
- --kt-outline: #ced4da; /* border des inputs (authentique, < 3:1 — fidélité > 1.4.11 ici) */
14
- --kt-outline-strong: #adb5bd;
7
+ --kt-primary: light-dark(#063a8a, #3b8bff); /* btn-primary hover — blanc 5.8:1 */
8
+ --kt-danger: light-dark(#921925, #ea6c78); /* btn-danger hover — blanc 5.9:1 */
9
+ --kt-neutral: light-dark(#6c757d, #adb5bd); /* secondary — blanc 4.7:1 */
10
+ --kt-surface: light-dark(#ffffff, #212529);
11
+ --kt-on-surface: light-dark(#212529, #f8f9fa); /* body-color */
12
+ --kt-muted: light-dark(#6c757d, #adb5bd); /* secondary-color */
13
+ --kt-outline: light-dark(#ced4da, #495057); /* border des inputs (authentique, < 3:1 — fidélité > 1.4.11 ici) */
14
+ --kt-outline-strong: light-dark(#adb5bd, #6c757d);
15
15
  --kt-font: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
16
16
 
17
17
  /* ============ Géométrie ============ */
@@ -20,27 +20,27 @@
20
20
 
21
21
  /* ============ Champs : le fameux ring translucide large de Bootstrap ============ */
22
22
  --field-focus-ring-width: 4px; /* .25rem */
23
- --field-focus-ring: rgb(13 110 253 / 25%);
23
+ --field-focus-ring: light-dark(rgb(13 110 253 / 25%), rgb(13 110 253 / 50%));
24
24
  /* LA transition des .form-control Bootstrap (rétrofit lot 3). */
25
25
  --field-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
26
26
 
27
27
  /* ============ Boutons ============ */
28
- --btn-on-primary-container: #052c65; /* ≈ text-emphasis sur -subtle */
29
- --btn-on-danger-container: #58151c;
30
- --btn-on-neutral-container: #212529;
28
+ --btn-on-primary-container: light-dark(#052c65, #9ec5fe); /* ≈ text-emphasis sur -subtle */
29
+ --btn-on-danger-container: light-dark(#58151c, #f1aeb5);
30
+ --btn-on-neutral-container: light-dark(#212529, #f8f9fa);
31
31
 
32
32
  /* ============ Tooltip ============ */
33
- --tooltip-bg: #212529;
34
- --tooltip-fg: #ffffff;
33
+ --tooltip-bg: light-dark(#212529, #f8f9fa);
34
+ --tooltip-fg: light-dark(#ffffff, #212529);
35
35
 
36
36
  /* ============ Dialog (Bootstrap 5 : rayon .5rem, ombre modale) ============ */
37
37
  --dialog-radius: 0.5rem;
38
- --dialog-border-color: rgb(0 0 0 / 17.5%);
39
- --dialog-shadow: 0 0.5rem 1rem rgb(0 0 0 / 15%);
38
+ --dialog-border-color: light-dark(rgb(0 0 0 / 17.5%), rgb(255 255 255 / 15%));
39
+ --dialog-shadow: light-dark(0 0.5rem 1rem rgb(0 0 0 / 15%), 0 0 0 1px rgba(255, 255, 255, 0.1));
40
40
 
41
41
  /* ============ Card (Bootstrap : rayon .5rem, bord + ombre-sm) ============ */
42
42
  --card-radius: 0.5rem;
43
- --card-border-color: rgb(0 0 0 / 17.5%);
44
- --card-filled-bg: #f8f9fa; /* bg-body-tertiary */
45
- --card-shadow: 0 0.125rem 0.25rem rgb(0 0 0 / 7.5%); /* shadow-sm */
43
+ --card-border-color: light-dark(rgb(0 0 0 / 17.5%), rgb(255 255 255 / 15%));
44
+ --card-filled-bg: light-dark(#f8f9fa, #2b3035); /* bg-body-tertiary */
45
+ --card-shadow: light-dark(0 0.125rem 0.25rem rgb(0 0 0 / 7.5%), 0 0 0 1px rgba(255, 255, 255, 0.15)); /* shadow-sm */
46
46
  }
@@ -3,14 +3,14 @@
3
3
  champs gris #f4f4f4, bleu interactif #0f62fe, IBM Plex Sans (stack avec repli système). */
4
4
  [data-theme='carbon'] {
5
5
  /* ============ Socle ============ */
6
- --kt-primary: #0043ce; /* interactive — blanc 7.6:1 (AAA) */
7
- --kt-danger: #750e13; /* support-error — blanc 9.0:1 (AAA) */
8
- --kt-neutral: #393939; /* button-secondary Carbon */
9
- --kt-surface: #ffffff;
10
- --kt-on-surface: #161616; /* text-primary */
11
- --kt-muted: #525252; /* text-secondary, ~7.4:1 */
12
- --kt-outline: #8d8d8d; /* border-strong (les inputs Carbon ont une bordure marquée) */
13
- --kt-outline-strong: #161616;
6
+ --kt-primary: light-dark(#093894, #6ba1ff); /* interactive — blanc 7.6:1 (AAA) */
7
+ --kt-danger: light-dark(#9e141c, #ff7b82); /* support-error — blanc 9.0:1 (AAA) */
8
+ --kt-neutral: light-dark(#393939, #c6c6c6); /* button-secondary Carbon */
9
+ --kt-surface: light-dark(#ffffff, #161616);
10
+ --kt-on-surface: light-dark(#161616, #f4f4f4); /* text-primary */
11
+ --kt-muted: light-dark(#525252, #a8a8a8); /* text-secondary, ~7.4:1 */
12
+ --kt-outline: light-dark(#8d8d8d, #525252); /* border-strong (les inputs Carbon ont une bordure marquée) */
13
+ --kt-outline-strong: light-dark(#161616, #f4f4f4);
14
14
  --kt-font: 'IBM Plex Sans', system-ui, sans-serif;
15
15
 
16
16
  /* ============ Géométrie : coins carrés ============ */
@@ -20,7 +20,7 @@
20
20
  --chip-radius: 0;
21
21
 
22
22
  /* ============ Champs ============ */
23
- --field-bg: #f4f4f4; /* field-01 sur fond blanc */
23
+ --field-bg: light-dark(#f4f4f4, #262626); /* field-01 sur fond blanc */
24
24
  /* L'input Carbon authentique : fill gris + UNIQUEMENT la bordure du bas
25
25
  (rétrofit lot 5, bordures par côté) ; le menu du select garde sa bordure complète. */
26
26
  --field-border-width: 0 0 1px 0;
@@ -28,22 +28,22 @@
28
28
 
29
29
  /* ============ Boutons ============ */
30
30
  --btn-letter-spacing: 0.01em; /* body-compact Carbon, +0.16px (rétrofit lot 6) */
31
- --btn-on-primary-container: #002c9b; /* sur container dérivé bleu pâle, >7:1 (AAA) */
32
- --btn-on-danger-container: #750e13;
33
- --btn-on-neutral-container: #161616;
31
+ --btn-on-primary-container: light-dark(#002c9b, #a6c8ff); /* sur container dérivé bleu pâle, >7:1 (AAA) */
32
+ --btn-on-danger-container: light-dark(#750e13, #ff8389);
33
+ --btn-on-neutral-container: light-dark(#161616, #f4f4f4);
34
34
 
35
35
  /* ============ Tooltip ============ */
36
- --tooltip-bg: #393939;
37
- --tooltip-fg: #ffffff;
36
+ --tooltip-bg: light-dark(#393939, #f4f4f4);
37
+ --tooltip-fg: light-dark(#ffffff, #161616);
38
38
 
39
39
  /* ============ Dialog (IBM Carbon : angles vifs, sans bord) ============ */
40
40
  --dialog-radius: 0;
41
41
  --dialog-border-width: 0;
42
- --dialog-shadow: 0 2px 6px rgb(0 0 0 / 20%);
43
- --kt-sheet-shadow: 0 -2px 6px rgb(0 0 0 / 30%); /* ombre minimale et nette (Carbon) */
42
+ --dialog-shadow: light-dark(0 2px 6px rgb(0 0 0 / 20%), 0 0 0 1px #525252);
43
+ --kt-sheet-shadow: light-dark(0 -2px 6px rgb(0 0 0 / 30%), 0 -1px 0 #525252); /* ombre minimale et nette (Carbon) */
44
44
 
45
45
  /* ============ Card (IBM Carbon : tuile carrée, layer-01) ============ */
46
46
  --card-radius: 0;
47
- --card-filled-bg: #f4f4f4; /* layer-01 */
48
- --card-shadow: 0 2px 6px rgb(0 0 0 / 20%); /* élévation nette, sans flou diffus */
47
+ --card-filled-bg: light-dark(#f4f4f4, #262626); /* layer-01 */
48
+ --card-shadow: light-dark(0 2px 6px rgb(0 0 0 / 20%), 0 0 0 1px #525252); /* élévation nette, sans flou diffus */
49
49
  }
@@ -8,59 +8,59 @@
8
8
  --btn-danger-fg / --field-error-color / --field-required-color. Inutile ici : le red
9
9
  Mocha #f38ba8 est assez clair pour servir tel quel (texte 6.9:1, label sombre 8.1:1). */
10
10
  [data-theme='catppuccin'] {
11
- color-scheme: dark;
11
+ /* color-scheme handled by foundation */
12
12
 
13
13
  /* ============ Socle ============ */
14
- --kt-surface: #1e1e2e; /* base */
15
- --kt-on-surface: #cdd6f4; /* text, ~12:1 */
16
- --kt-muted: #a6adc8; /* subtext0, ~7.4:1 */
17
- --kt-outline: #6c7086; /* overlay0 */
18
- --kt-outline-strong: #9399b2; /* overlay2 */
19
- --kt-primary: #cba6f7; /* mauve, ~8.5:1 en texte */
20
- --kt-danger: #f38ba8; /* red, ~6.9:1 */
21
- --kt-neutral: #585b70; /* surface2 */
22
- --kt-focus-ring-color: #cba6f7;
14
+ --kt-surface: light-dark(#eff1f5, #1e1e2e); /* base */
15
+ --kt-on-surface: light-dark(#4c4f69, #cdd6f4); /* text, ~12:1 */
16
+ --kt-muted: light-dark(#6c6f85, #a6adc8); /* subtext0, ~7.4:1 */
17
+ --kt-outline: light-dark(#bcc0cc, #6c7086); /* overlay0 */
18
+ --kt-outline-strong: light-dark(#9ca0b0, #9399b2); /* overlay2 */
19
+ --kt-primary: light-dark(#4a0e94, #cba6f7); /* mauve assombri pour AAA */
20
+ --kt-danger: light-dark(#78041d, #f38ba8); /* red assombri pour AAA */
21
+ --kt-neutral: light-dark(#ccd0da, #585b70); /* surface2 */
22
+ --kt-focus-ring-color: light-dark(#8839ef, #cba6f7);
23
23
  --kt-font: 'JetBrains Mono', ui-monospace, monospace; /* thème d'éditeur => mono assumée */
24
24
 
25
25
  /* Gouttière façon éditeur : thumb surface2 (overlay) sur le mantle, comme la scrollbar Mocha. */
26
26
  --kt-scrollbar-color: #585b70 #181825;
27
27
 
28
28
  /* ============ Champs ============ */
29
- --field-bg: #313244; /* surface0 */
29
+ --field-bg: light-dark(#e6e9ef, #313244); /* surface0 */
30
30
  --field-focus-ring: color-mix(in srgb, #cba6f7 60%, transparent);
31
31
 
32
32
  /* ============ Boutons : inversions dark ============ */
33
- --btn-on-primary: #11111b; /* crust sur mauve, 9.2:1 */
34
- --btn-on-danger: #11111b; /* 8.1:1 */
35
- --btn-on-neutral: #ffffff; /* 6.7:1 sur surface2 */
36
- --btn-on-primary-container: #e2d5fb;
37
- --btn-on-neutral-container: #cdd6f4;
38
- --btn-on-danger-container: #f8c8d4;
33
+ --btn-on-primary: light-dark(#ffffff, #11111b); /* crust sur mauve, 9.2:1 */
34
+ --btn-on-danger: light-dark(#ffffff, #11111b); /* 8.1:1 */
35
+ --btn-on-neutral: light-dark(#000000, #ffffff); /* 6.7:1 sur surface2 */
36
+ --btn-on-primary-container: light-dark(#000000, #e2d5fb);
37
+ --btn-on-neutral-container: light-dark(#000000, #cdd6f4);
38
+ --btn-on-danger-container: light-dark(#000000, #f8c8d4);
39
39
  --btn-fg-weight: 100%;
40
- --btn-neutral-fg: #bac2de; /* subtext1 */
40
+ --btn-neutral-fg: light-dark(#000000, #bac2de); /* subtext1 */
41
41
  --btn-tonal-weight: 24%;
42
42
 
43
43
  /* ============ Caret + sélection (rétrofit lot 6 — l'identité d'un thème d'éditeur) ============ */
44
- --field-caret-color: #f5e0dc; /* rosewater, LE curseur Catppuccin officiel */
45
- --kt-selection-bg: #585b70; /* surface2 */
46
- --kt-selection-fg: #cdd6f4;
44
+ --field-caret-color: light-dark(#dc8a78, #f5e0dc); /* rosewater, LE curseur Catppuccin officiel */
45
+ --kt-selection-bg: light-dark(#ccd0da, #585b70); /* surface2 */
46
+ --kt-selection-fg: light-dark(#4c4f69, #cdd6f4);
47
47
 
48
48
  /* ============ Select / tooltip ============ */
49
- --select-popup-bg: #313244;
49
+ --select-popup-bg: light-dark(#e6e9ef, #313244);
50
50
  --select-popup-shadow: 0 8px 24px rgb(17 17 27 / 60%);
51
51
  --kt-sheet-shadow: 0 -8px 24px rgb(17 17 27 / 60%);
52
52
  --kt-sheet-scrim: rgb(17 17 27 / 60%);
53
- --tooltip-bg: #313244;
54
- --tooltip-fg: #cdd6f4;
53
+ --tooltip-bg: light-dark(#ccd0da, #313244);
54
+ --tooltip-fg: light-dark(#4c4f69, #cdd6f4);
55
55
 
56
56
  /* ============ Dialog (Mocha dark) ============ */
57
- --dialog-bg: #181825; /* mantle, légèrement sous la base */
57
+ --dialog-bg: light-dark(#eff1f5, #181825); /* mantle, légèrement sous la base */
58
58
  --dialog-radius: 12px;
59
59
  --dialog-border-color: #313244;
60
60
 
61
61
  /* ============ Card (Mocha : surface élevée surface0/1) ============ */
62
- --card-bg: #313244; /* surface0, au-dessus de la base */
63
- --card-filled-bg: #45475a; /* surface1 */
62
+ --card-bg: light-dark(#e6e9ef, #313244); /* surface0, au-dessus de la base */
63
+ --card-filled-bg: light-dark(#ccd0da, #45475a); /* surface1 */
64
64
  --card-radius: 12px;
65
65
  --card-shadow: 0 4px 12px rgb(17 17 27 / 45%);
66
66
  }
@@ -42,18 +42,18 @@
42
42
  }
43
43
 
44
44
  [data-theme='cyberpunk'] {
45
- color-scheme: dark;
45
+ /* color-scheme handled by foundation */
46
46
 
47
47
  /* ============ Socle (cyan/magenta sur quasi-noir) ============ */
48
- --kt-surface: #0b0f1a;
49
- --kt-on-surface: #e6f6ff; /* ~15:1 */
50
- --kt-muted: #94b2c8; /* ~7:1 */
51
- --kt-outline: #2f5a73; /* 3:1 non-texte */
52
- --kt-outline-strong: #5fb6da;
53
- --kt-primary: #28d6ef; /* cyan, texte ~10:1 */
54
- --kt-danger: #ff3d8b; /* magenta, texte ~6:1 */
55
- --kt-neutral: #2b3950;
56
- --kt-focus-ring-color: #28d6ef;
48
+ --kt-surface: light-dark(#f0f8ff, #0b0f1a);
49
+ --kt-on-surface: light-dark(#04141a, #e6f6ff); /* ~15:1 */
50
+ --kt-muted: light-dark(#5a7a91, #94b2c8); /* ~7:1 */
51
+ --kt-outline: light-dark(#9ec3d9, #2f5a73); /* 3:1 non-texte */
52
+ --kt-outline-strong: light-dark(#5fb6da, #5fb6da);
53
+ --kt-primary: light-dark(#003847, #28d6ef); /* cyan, texte ~10:1 */
54
+ --kt-danger: light-dark(#660029, #ff3d8b); /* magenta, texte ~6:1 */
55
+ --kt-neutral: light-dark(#c9e2f2, #2b3950);
56
+ --kt-focus-ring-color: light-dark(#008ba3, #28d6ef);
57
57
  --kt-font: 'Oxanium', system-ui, sans-serif;
58
58
 
59
59
  /* Gouttière néon cyan sur la nuit. */
@@ -64,9 +64,9 @@
64
64
  --kt-sheet-scrim: rgb(4 8 18 / 70%);
65
65
 
66
66
  /* Caret + sélection. */
67
- --field-caret-color: #28d6ef;
68
- --kt-selection-bg: #28d6ef;
69
- --kt-selection-fg: #04141a;
67
+ --field-caret-color: light-dark(#008ba3, #28d6ef);
68
+ --kt-selection-bg: light-dark(#008ba3, #28d6ef);
69
+ --kt-selection-fg: light-dark(#ffffff, #04141a);
70
70
 
71
71
  /* ============ Géométrie HUD : coins chanfreinés ============ */
72
72
  --kt-control-radius: 4px;
@@ -76,7 +76,7 @@
76
76
  --chip-radius: 4px;
77
77
 
78
78
  /* ============ Champs : lavis sombre + halo bicolore qui ORBITE au focus ============ */
79
- --field-bg: #10182a;
79
+ --field-bg: light-dark(#e0f2fe, #10182a);
80
80
  --field-focus-ring: color-mix(in srgb, #28d6ef 60%, transparent);
81
81
  --field-transition: border-color 200ms ease;
82
82
  --field-shadow-hover: 0 0 calc(7px + var(--cyber-breathe)) rgb(40 214 239 / 30%);
@@ -86,14 +86,14 @@
86
86
  0 0 calc(8px + var(--cyber-breathe)) rgb(40 214 239 / 30%);
87
87
 
88
88
  /* ============ Boutons : inversions dark + pulsation au clic ============ */
89
- --btn-on-primary: #04141a; /* sur cyan, AAA */
90
- --btn-on-danger: #2a0312; /* sur magenta */
91
- --btn-on-neutral: #ffffff;
92
- --btn-on-primary-container: #b6f4ff;
93
- --btn-on-neutral-container: #d4e2ee;
94
- --btn-on-danger-container: #ffd0e2;
89
+ --btn-on-primary: light-dark(#ffffff, #04141a); /* sur cyan, AAA */
90
+ --btn-on-danger: light-dark(#ffffff, #2a0312); /* sur magenta */
91
+ --btn-on-neutral: light-dark(#000000, #ffffff);
92
+ --btn-on-primary-container: light-dark(#000000, #b6f4ff);
93
+ --btn-on-neutral-container: light-dark(#000000, #d4e2ee);
94
+ --btn-on-danger-container: light-dark(#000000, #ffd0e2);
95
95
  --btn-fg-weight: 100%;
96
- --btn-neutral-fg: #a9c4da;
96
+ --btn-neutral-fg: light-dark(#000000, #a9c4da);
97
97
  --btn-tonal-weight: 24%;
98
98
  --btn-font-weight: 600;
99
99
  --btn-letter-spacing: 0.03em;
@@ -106,20 +106,20 @@
106
106
  --chip-shadow-hover: 0 0 14px rgb(40 214 239 / 45%);
107
107
 
108
108
  /* ============ Select / tooltip ============ */
109
- --select-popup-bg: #10182a;
109
+ --select-popup-bg: light-dark(#e0f2fe, #10182a);
110
110
  --select-popup-shadow: 0 0 0 1px rgb(40 214 239 / 25%), 0 12px 40px rgb(0 0 0 / 65%);
111
- --tooltip-bg: #10182a;
112
- --tooltip-fg: #e6f6ff;
111
+ --tooltip-bg: light-dark(#cce8fa, #10182a);
112
+ --tooltip-fg: light-dark(#04141a, #e6f6ff);
113
113
 
114
114
  /* ============ Dialog : panneau HUD ============ */
115
- --dialog-bg: #10182a;
115
+ --dialog-bg: light-dark(#e0f2fe, #10182a);
116
116
  --dialog-border-color: rgb(40 214 239 / 35%);
117
117
  --dialog-radius: 8px;
118
118
  --dialog-anim-from-transform: scale(0.96);
119
119
 
120
120
  /* ============ Card : panneau néon, ombre qui orbite (+ laser en bord haut, cf. ::before) ============ */
121
- --card-bg: #10182a;
122
- --card-filled-bg: #16203a;
121
+ --card-bg: light-dark(#ffffff, #10182a);
122
+ --card-filled-bg: light-dark(#e0f2fe, #16203a);
123
123
  --card-radius: 6px;
124
124
  --card-shadow:
125
125
  calc(cos(var(--cyber-angle)) * 8px) calc(sin(var(--cyber-angle)) * 8px) 22px -8px rgb(40 214 239 / 40%),
@@ -140,7 +140,7 @@
140
140
  --tab-margin: 0 4px 0 0;
141
141
 
142
142
  /* ============ Progress Bar ============ */
143
- --kt-progress-bar-track-color: #10182a;
143
+ --kt-progress-bar-track-color: light-dark(#cce8fa, #10182a);
144
144
  --kt-progress-bar-indicator-color: transparent;
145
145
  }
146
146