@conciso/design-system 0.0.0-bootstrap.0
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.
- package/CHANGELOG.md +1786 -0
- package/LICENSE +21 -0
- package/NOTICE +15 -0
- package/README.md +134 -0
- package/assets/brand/LICENSE +11 -0
- package/assets/brand/README.md +45 -0
- package/assets/brand/logo-conciso-dark.svg +4 -0
- package/assets/brand/logo-conciso-light.svg +4 -0
- package/assets/brand/logo-conciso.svg +4 -0
- package/css/base.css +303 -0
- package/css/components.css +1633 -0
- package/css/dark-mode.css +716 -0
- package/css/fonts.css +20 -0
- package/css/tokens.css +209 -0
- package/dist/conciso-ds.css +2891 -0
- package/fonts/LibreBaskerville-OFL.txt +93 -0
- package/fonts/Montserrat-OFL.txt +93 -0
- package/fonts/libre-baskerville-400-latin-ext.woff2 +0 -0
- package/fonts/libre-baskerville-400-latin.woff2 +0 -0
- package/fonts/libre-baskerville-400i-latin-ext.woff2 +0 -0
- package/fonts/libre-baskerville-400i-latin.woff2 +0 -0
- package/fonts/libre-baskerville-700-latin-ext.woff2 +0 -0
- package/fonts/libre-baskerville-700-latin.woff2 +0 -0
- package/fonts/montserrat-300-latin-ext.woff2 +0 -0
- package/fonts/montserrat-300-latin.woff2 +0 -0
- package/fonts/montserrat-400-latin-ext.woff2 +0 -0
- package/fonts/montserrat-400-latin.woff2 +0 -0
- package/fonts/montserrat-400i-latin-ext.woff2 +0 -0
- package/fonts/montserrat-400i-latin.woff2 +0 -0
- package/fonts/montserrat-500-latin-ext.woff2 +0 -0
- package/fonts/montserrat-500-latin.woff2 +0 -0
- package/fonts/montserrat-700-latin-ext.woff2 +0 -0
- package/fonts/montserrat-700-latin.woff2 +0 -0
- package/icons/LICENSE-heroicons +21 -0
- package/icons/README.md +186 -0
- package/icons/icons.js +1156 -0
- package/icons/icons.json +1152 -0
- package/icons/manifest.json +595 -0
- package/icons/source/co-building.svg +1 -0
- package/icons/source/co-mark.svg +1 -0
- package/icons/source/es-window-check.svg +1 -0
- package/icons/source/ki-bot.svg +1 -0
- package/icons/source/ui-academic-cap.svg +1 -0
- package/icons/source/ui-adjustments-horizontal.svg +1 -0
- package/icons/source/ui-arrow-down-tray-2.svg +1 -0
- package/icons/source/ui-arrow-down-tray.svg +1 -0
- package/icons/source/ui-arrow-path.svg +1 -0
- package/icons/source/ui-arrow-trending-up.svg +1 -0
- package/icons/source/ui-banknotes.svg +1 -0
- package/icons/source/ui-bars-3-center-left.svg +1 -0
- package/icons/source/ui-bars-3.svg +1 -0
- package/icons/source/ui-bolt-2.svg +1 -0
- package/icons/source/ui-bolt.svg +1 -0
- package/icons/source/ui-book-open.svg +1 -0
- package/icons/source/ui-briefcase-2.svg +1 -0
- package/icons/source/ui-briefcase.svg +1 -0
- package/icons/source/ui-building-office.svg +1 -0
- package/icons/source/ui-calendar-days.svg +1 -0
- package/icons/source/ui-calendar.svg +1 -0
- package/icons/source/ui-caret-down.svg +1 -0
- package/icons/source/ui-chart-bar.svg +1 -0
- package/icons/source/ui-chat-bubble-left-right.svg +1 -0
- package/icons/source/ui-chat-bubble-oval-left-ellipsis.svg +1 -0
- package/icons/source/ui-chat-bubble-oval.svg +1 -0
- package/icons/source/ui-check-badge.svg +1 -0
- package/icons/source/ui-check-circle-2.svg +1 -0
- package/icons/source/ui-check-circle.svg +1 -0
- package/icons/source/ui-check.svg +1 -0
- package/icons/source/ui-chevron-down.svg +1 -0
- package/icons/source/ui-chevron-up-down.svg +1 -0
- package/icons/source/ui-circle-stack.svg +1 -0
- package/icons/source/ui-clock.svg +1 -0
- package/icons/source/ui-code-bracket-2.svg +1 -0
- package/icons/source/ui-code-bracket-square.svg +1 -0
- package/icons/source/ui-code-bracket.svg +1 -0
- package/icons/source/ui-cog-6tooth.svg +1 -0
- package/icons/source/ui-cog.svg +1 -0
- package/icons/source/ui-computer-desktop.svg +1 -0
- package/icons/source/ui-cpu-chip-2.svg +1 -0
- package/icons/source/ui-cpu-chip.svg +1 -0
- package/icons/source/ui-cube-2.svg +1 -0
- package/icons/source/ui-cube-transparent.svg +1 -0
- package/icons/source/ui-cube.svg +1 -0
- package/icons/source/ui-currency-euro.svg +1 -0
- package/icons/source/ui-cursor-arrow-rays.svg +1 -0
- package/icons/source/ui-device-phone-mobile.svg +1 -0
- package/icons/source/ui-document-text.svg +1 -0
- package/icons/source/ui-face-smile.svg +1 -0
- package/icons/source/ui-flag.svg +1 -0
- package/icons/source/ui-folder.svg +1 -0
- package/icons/source/ui-hand-raised.svg +1 -0
- package/icons/source/ui-heart.svg +1 -0
- package/icons/source/ui-information-circle.svg +1 -0
- package/icons/source/ui-language.svg +1 -0
- package/icons/source/ui-link.svg +1 -0
- package/icons/source/ui-list-bullet.svg +1 -0
- package/icons/source/ui-lock-closed-2.svg +1 -0
- package/icons/source/ui-lock-closed.svg +1 -0
- package/icons/source/ui-magnifying-glass.svg +1 -0
- package/icons/source/ui-map-pin-2.svg +1 -0
- package/icons/source/ui-map-pin.svg +1 -0
- package/icons/source/ui-megaphone.svg +1 -0
- package/icons/source/ui-newspaper-2.svg +1 -0
- package/icons/source/ui-newspaper.svg +1 -0
- package/icons/source/ui-pause.svg +1 -0
- package/icons/source/ui-pencil-square.svg +1 -0
- package/icons/source/ui-photo.svg +1 -0
- package/icons/source/ui-play.svg +1 -0
- package/icons/source/ui-puzzle-piece.svg +1 -0
- package/icons/source/ui-quote.svg +1 -0
- package/icons/source/ui-rectangle-stack.svg +1 -0
- package/icons/source/ui-rocket-launch.svg +1 -0
- package/icons/source/ui-shield-check-2.svg +1 -0
- package/icons/source/ui-shield-check.svg +1 -0
- package/icons/source/ui-sparkles-2.svg +1 -0
- package/icons/source/ui-sparkles-3.svg +1 -0
- package/icons/source/ui-sparkles-4.svg +1 -0
- package/icons/source/ui-sparkles.svg +1 -0
- package/icons/source/ui-square-2-stack.svg +1 -0
- package/icons/source/ui-squares-2x2.svg +1 -0
- package/icons/source/ui-squares-plus.svg +1 -0
- package/icons/source/ui-star-2.svg +1 -0
- package/icons/source/ui-star.svg +1 -0
- package/icons/source/ui-sun.svg +1 -0
- package/icons/source/ui-swatch.svg +1 -0
- package/icons/source/ui-table-cells.svg +1 -0
- package/icons/source/ui-tag.svg +1 -0
- package/icons/source/ui-trophy-2.svg +1 -0
- package/icons/source/ui-trophy.svg +1 -0
- package/icons/source/ui-user-group-2.svg +1 -0
- package/icons/source/ui-user-group.svg +1 -0
- package/icons/source/ui-users-2.svg +1 -0
- package/icons/source/ui-users.svg +1 -0
- package/icons/source/ui-viewfinder-circle.svg +1 -0
- package/icons/source/ui-window.svg +1 -0
- package/icons/source/ui-wrench-screwdriver.svg +1 -0
- package/icons/source/wo-network.svg +1 -0
- package/package.json +87 -0
- package/tokens/tokens.js +229 -0
- package/tokens/tokens.json +227 -0
- package/tokens/tokens.scss +228 -0
package/css/fonts.css
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* Conciso Design System — Self-Host-Fonts (DSGVO: keine Google-CDN-Anfrage).
|
|
2
|
+
Montserrat + Libre Baskerville, Subsets latin + latin-ext, font-display:swap.
|
|
3
|
+
Lizenz: SIL Open Font License 1.1 (siehe fonts/*-OFL.txt). Generiert. */
|
|
4
|
+
|
|
5
|
+
@font-face{font-family:'Libre Baskerville';font-style:italic;font-weight:400;font-display:swap;src:url('../fonts/libre-baskerville-400i-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
6
|
+
@font-face{font-family:'Libre Baskerville';font-style:italic;font-weight:400;font-display:swap;src:url('../fonts/libre-baskerville-400i-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
7
|
+
@font-face{font-family:'Libre Baskerville';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/libre-baskerville-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
8
|
+
@font-face{font-family:'Libre Baskerville';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/libre-baskerville-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
9
|
+
@font-face{font-family:'Libre Baskerville';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/libre-baskerville-700-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
10
|
+
@font-face{font-family:'Libre Baskerville';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/libre-baskerville-700-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
11
|
+
@font-face{font-family:'Montserrat';font-style:italic;font-weight:400;font-display:swap;src:url('../fonts/montserrat-400i-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
12
|
+
@font-face{font-family:'Montserrat';font-style:italic;font-weight:400;font-display:swap;src:url('../fonts/montserrat-400i-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
13
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:300;font-display:swap;src:url('../fonts/montserrat-300-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
14
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:300;font-display:swap;src:url('../fonts/montserrat-300-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
15
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/montserrat-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
16
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/montserrat-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
17
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/montserrat-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
18
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/montserrat-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
|
19
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/montserrat-700-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
|
|
20
|
+
@font-face{font-family:'Montserrat';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/montserrat-700-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
|
package/css/tokens.css
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/* ── Design Tokens ── */
|
|
2
|
+
:root {
|
|
3
|
+
/* ── Corporate (Global Brand) ── */
|
|
4
|
+
--co-500:#00BEBE; --co-50:#E0F7F7; --co-100:#B3ECEC; --co-200:#80DEDE;
|
|
5
|
+
--co-300:#4DD0D0; --co-400:#26C2C2; --co-600:#009E9E; --co-700:#007575;
|
|
6
|
+
--co-800:#004F4F; --co-900:#002B2B; --co-ink:var(--co-700);
|
|
7
|
+
|
|
8
|
+
/* ── AI.Applied ── */
|
|
9
|
+
--ki-500:#B5E61C; --ki-50:#F4FCD5; --ki-100:#E6F8A0; --ki-200:#D6F06D;
|
|
10
|
+
--ki-300:#C8EA42; --ki-400:#BEE82D; --ki-600:#8FAF0E; --ki-700:#6B8208;
|
|
11
|
+
--ki-800:#475705; --ki-900:#242C02; --ki-ink:var(--ki-800); /* farbiger ki-Text/Icons; flippt im Dark auf --ki-200 (dark-mode.css), da ki-800 dunkel-auf-dunkel wäre */
|
|
12
|
+
|
|
13
|
+
/* ── Wirksame Organisationen ── */
|
|
14
|
+
--wo-500:#44A030; --wo-50:#EBF5E6; --wo-100:#CEEAC3; --wo-200:#A3D48E;
|
|
15
|
+
--wo-300:#72BD58; --wo-400:#55AD3F; --wo-600:#347A22; --wo-700:#285E1A;
|
|
16
|
+
--wo-800:#183A0E; --wo-900:#0A1F05; --wo-ink:var(--wo-700);
|
|
17
|
+
|
|
18
|
+
/* ── Effektive Software ── */
|
|
19
|
+
--es-500:#2F5FD4; --es-50:#EAF0FB; --es-100:#C8D9F5; --es-200:#98B7EE;
|
|
20
|
+
--es-300:#6593E5; --es-400:#4677DC; --es-600:#2249B2; --es-700:#1B3D9A;
|
|
21
|
+
--es-800:#112568; --es-900:#071035; --es-ink:var(--es-700);
|
|
22
|
+
|
|
23
|
+
/* ── Bereichs-Akzenttext ──
|
|
24
|
+
--XX-ink ist farbiger Text und farbige Icons, die in BEIDEN Modi lesbar bleiben müssen:
|
|
25
|
+
Light der dunkle Ton (-700, ki -800 weil ki-700 nur 4,05:1 trägt), Dark der helle (-200,
|
|
26
|
+
es -100). Bisher gab es das nur für ki, und genau deshalb ist bei jeder Korrektur die Gefahr,
|
|
27
|
+
eine Light-Farbe zu setzen, die im Dark dunkel-auf-dunkel läuft: co-700 trägt auf Weiß 5,52:1
|
|
28
|
+
und auf der dunklen Seite nur 3,17:1. Wer farbigen Text setzt, nimmt --XX-ink. */
|
|
29
|
+
|
|
30
|
+
/* ── Rosé ── */
|
|
31
|
+
--ro-500:#C23060; --ro-50:#FDEDF2; --ro-100:#F9CEDD; --ro-200:#F0A0BE;
|
|
32
|
+
--ro-300:#E06898; --ro-400:#CF4478; --ro-600:#A02050; --ro-700:#7E1639;
|
|
33
|
+
--ro-800:#560E26; --ro-900:#2E0513;
|
|
34
|
+
|
|
35
|
+
/* ── Bereichs-Bänder ──
|
|
36
|
+
--XX-band ist die Fläche großer getönter Sektionen (Hero, CTA-Band). Im Light identisch mit
|
|
37
|
+
--XX-50, es gibt also nichts zu unterscheiden. Getrennt wird es erst im Dark: dort muss ein
|
|
38
|
+
Band dunkler bleiben als die Karten, die darauf sitzen, während eine Badge- oder Kachel-Füllung
|
|
39
|
+
umgekehrt heller als ihr Grund sein muss, um überhaupt als Fläche zu lesen. Ein Wert kann
|
|
40
|
+
beides nicht leisten, deshalb zwei Token. */
|
|
41
|
+
--co-band:var(--co-50); --ki-band:var(--ki-50); --es-band:var(--es-50); --wo-band:var(--wo-50);
|
|
42
|
+
|
|
43
|
+
/* ── Bauteil-Füllungen ──
|
|
44
|
+
--XX-fill ist die Füllung von Pill und Bereichs-Badge. Im Light ist das der ruhige Tint, also
|
|
45
|
+
dasselbe Rezept wie bei den Icon-Kacheln: zarte Fläche, kräftige dunkle Schrift darauf
|
|
46
|
+
(7,5 bis 11,4:1). WCAG verlangt für diese Fläche nichts, das Label trägt die Aussage, und
|
|
47
|
+
darüber entscheidet das Markenrad: „Ruhig“. Die Schrift wirkt auf dem zarten Grund kräftiger,
|
|
48
|
+
weil sie nicht mit der Fläche konkurriert.
|
|
49
|
+
Getrennt wird es erst im Dark: dort liegt helle Schrift auf dunklem Tint, und wenn der Tint
|
|
50
|
+
fast die Helligkeit der Karte hat, hält nichts mehr die Pill zusammen. Deshalb dort eigene,
|
|
51
|
+
gehobene Werte (siehe dark-mode.css). Gleiche Rolle, zwei Werte, wie bei --XX-band.
|
|
52
|
+
Kein --ro-fill: Rosé ist Akzent- und Statusfarbe, es gibt weder ro-Pill noch ro-Badge.
|
|
53
|
+
|
|
54
|
+
Abgrenzung nach oben und unten: --XX-50 bleibt der RUHIGE Tint, in beiden Modi. Er trägt
|
|
55
|
+
dekorative Flächen (Icon-Kachel, Timeline-Marker, Hover-Füllung des Chips, Inline-Code), die
|
|
56
|
+
nicht als Fläche lesen müssen: WCAG verlangt dort nichts, und das Markenrad sagt „Ruhig“.
|
|
57
|
+
--XX-band ist die große Sektionsfläche. Drei Rollen, drei Namen. */
|
|
58
|
+
--co-fill:var(--co-50); --ki-fill:var(--ki-50); --es-fill:var(--es-50); --wo-fill:var(--wo-50);
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
/* ── Neutrals ── */
|
|
62
|
+
--n-0:#FFFFFF; --n-50:#F5F7F7; --n-100:#E8EDED; --n-200:#C9D3D3;
|
|
63
|
+
--n-300:#A0B0B0; --n-400:#6E8585; --n-500:#4A6565; --n-600:#2E4545;
|
|
64
|
+
--n-700:#1A2E2E; --n-800:#0D1F1F; --n-900:#060F0F;
|
|
65
|
+
|
|
66
|
+
/* ── Semantic ──
|
|
67
|
+
--c-* sind Text-Farben (Required-Asterisk, Inline-Fehlertext, Do/Don't-Marker).
|
|
68
|
+
Werte sind in beiden Modi auf AA-Lesbarkeit auf der jeweiligen page-bg ausgelegt.
|
|
69
|
+
Light: dunklere/gedeckte Sättigung für Kontrast auf weiß. Dark-Overrides in dark-mode.css.
|
|
70
|
+
--c-*-bg sind Tint-Hintergründe für Callouts; Text darauf via --badge-*-text. */
|
|
71
|
+
/* Die -bg-Tints sind Bauteil-Füllungen (Callout, Status-Badge, Trend-Chip) und müssen als FLÄCHE
|
|
72
|
+
lesen: 1,3:1 gegen Weiß UND gegen n-50 (CONTRIBUTING § 3). Die alten Werte lagen bei 1,02 bis
|
|
73
|
+
1,16:1, das Element las nur noch als farbiger Text. Neu gemessen Fläche Weiß / n-50 und Text
|
|
74
|
+
darauf: success 1,43 / 1,33 mit 4,91:1 · warning 1,47 / 1,37 mit 4,84:1 · error 1,60 / 1,49
|
|
75
|
+
mit 4,99:1. Beim Warnton musste der Text mitwandern (--badge-warn-text), auf der kräftigeren
|
|
76
|
+
Füllung trug #8A5E0A nur 3,87:1. */
|
|
77
|
+
--c-success:#0E6644; --c-success-bg:#A9E5C8; /* Text auf #fff: 6.99:1 ✓ AAA */
|
|
78
|
+
--c-warning:#785008; --c-warning-bg:#F5D08C; /* Text auf #fff 7,12:1, auf dem eigenen Tint 4,84:1 (vorher #8A5E0A: 5,70 bzw. nur 3,87:1) */
|
|
79
|
+
--c-error:#9B2020; --c-error-bg:#F5BFBF; /* Text auf #fff 8,01:1, auf dem eigenen Tint 4,99:1 (vorher #B22020: 6,73 bzw. nur 4,19:1) */
|
|
80
|
+
|
|
81
|
+
/* ── Component color tokens (theme-overridable) ── */
|
|
82
|
+
--badge-ok-text:var(--c-success); --badge-warn-text:var(--c-warning); --badge-err-text:var(--c-error); /* dieselben Töne wie die semantischen Textfarben: sie stehen auf denselben Tints, zwei Werte dafür wären zwei Quellen der Wahrheit */
|
|
83
|
+
--badge-neu-bg:var(--n-200); --badge-neu-text:var(--n-600); /* n-200 statt n-100: als Füllung trug n-100 nur 1,18:1 gegen Weiß und 1,10:1 gegen n-50, n-200 gibt 1,53 / 1,42:1. Text darauf 6,69:1 */
|
|
84
|
+
--cbadge-aa-bg:#E6F9F1; --cbadge-aa-text:#0a5c38;
|
|
85
|
+
--cbadge-aaa-bg:#D0F0FF; --cbadge-aaa-text:#004466;
|
|
86
|
+
--cbadge-fail-bg:#FDEAEA; --cbadge-fail-text:#9b2020;
|
|
87
|
+
|
|
88
|
+
/* ── Surfaces & Text ── */
|
|
89
|
+
--bg-page:#FFFFFF; --bg-surface:var(--n-0); --bg-overlay:rgba(0,94,94,.06); --bg-code:var(--n-800);
|
|
90
|
+
/* --bg-surface-hover: gehobene Fläche interaktiver Elemente im Hover. Light bewusst gleich
|
|
91
|
+
--bg-surface: auf weißem Grund trägt die Tiefe der Schatten (--e3), eine Aufhellung gäbe es
|
|
92
|
+
nicht. Im Dark trägt der Schatten weniger, dort hebt der Zustand zusätzlich die Fläche.
|
|
93
|
+
Es ist ein Zustand, keine dritte statische Flächen-Stufe. */
|
|
94
|
+
--bg-surface-hover:var(--bg-surface);
|
|
95
|
+
/* --bg-plate: helle Platte unter Fremd-Assets, die nur in einer dunklen Fassung vorliegen
|
|
96
|
+
(Kundenlogos). Im Dark gedämpft statt reinweiß, weil eine reinweiße Fläche dieser Größe
|
|
97
|
+
auf dunklem Grund blendet. */
|
|
98
|
+
--bg-plate:#FFFFFF;
|
|
99
|
+
--tx-brand:#333E48; --tx-primary:#333E48; --tx-secondary:var(--n-500); --tx-muted:#5A7171; /* Auf Weiß 5,20:1, auf n-50 4,84:1, auf getönten Hellflächen 4,66 bis 4,73:1.
|
|
100
|
+
Vorher #5E7676: auf Weiß 4,85:1 ✓, aber auf n-50 und getönten Gründen nur 4,35 bis 4,51:1, also
|
|
101
|
+
genau dort unter AA, wo gedämpfter Text meist sitzt (Meta-Zeilen, Annotationen, Specimen-Labels).
|
|
102
|
+
Bleibt klar heller als --tx-secondary (#4A6565, 5,63 bis 6,29:1), die Hierarchie bleibt also. */
|
|
103
|
+
|
|
104
|
+
/* ── Typography ── */
|
|
105
|
+
--font:'Montserrat','Segoe UI',system-ui,-apple-system,sans-serif;
|
|
106
|
+
--font-display:'Libre Baskerville','Georgia',serif;
|
|
107
|
+
/* --font-mono: dritte Schriftrolle des Systems (Code/Werte), bisher zehnmal hart im CSS.
|
|
108
|
+
Wert unverändert übernommen, reiner Struktur-Schritt, keine gerenderte Änderung. */
|
|
109
|
+
--font-mono:'Courier New',monospace;
|
|
110
|
+
|
|
111
|
+
/* ── Typography Scale ──
|
|
112
|
+
Einheiten rem-basiert (Juli 2026, WCAG 1.4.4 "Resize Text"): 1rem = 16px bei Default-Root
|
|
113
|
+
(body: font-size:16px). Umrechnung px→rem = px/16. rem respektiert die vom Nutzer im Browser
|
|
114
|
+
eingestellte Standardschriftgröße; px täte das nicht.
|
|
115
|
+
Minimum-Font-Size systemweit: 12 px = 0.75rem. Das Minimum gilt bei Default-Root und skaliert
|
|
116
|
+
bei größerer Nutzereinstellung nach oben. Tokens darunter wurden eliminiert oder angehoben,
|
|
117
|
+
damit Inhalte unter allen Bedingungen gut lesbar bleiben (Bildschirm, Mobile, Print). */
|
|
118
|
+
/* Sans-serif (Montserrat)
|
|
119
|
+
Body-Skala (Mai 2026): 16 / 14 / 12 px. Body Md ist Standard-Fließtext (war 14, jetzt 16
|
|
120
|
+
für bessere Lesbarkeit auf C-Level-Mittelstand-Zielgruppe und iOS-Auto-Zoom-Fix bei Form-Inputs).
|
|
121
|
+
Body Sm = 14 px für Meta-Daten/Card-Meta. Body Xs = 12 px für Captions. */
|
|
122
|
+
--ty-caption: 400 0.75rem/1rem var(--font);
|
|
123
|
+
--ty-body-xs: 400 0.75rem/1rem var(--font);
|
|
124
|
+
--ty-body-sm: 400 0.875rem/1.25rem var(--font);
|
|
125
|
+
--ty-body-md: 400 1rem/1.5rem var(--font);
|
|
126
|
+
/* label-xs und label-sm haben dieselben Metriken — label-xs ist die "Eyebrow"-Variante,
|
|
127
|
+
mit text-transform:uppercase + letter-spacing am Use-Site. label-sm ist für Mixed-Case-Labels. */
|
|
128
|
+
--ty-label-xs: 500 0.75rem/1rem var(--font);
|
|
129
|
+
--ty-label-sm: 500 0.75rem/1rem var(--font);
|
|
130
|
+
--ty-label-md: 500 0.875rem/1.25rem var(--font);
|
|
131
|
+
/* Title-Sm (Mai 2026): 20 px statt 18 px, damit Card-Titel mit klarer 4-px-Stufe über
|
|
132
|
+
dem neuen 16-px-Body-Md sitzen. Title-Lg ist entfallen, das Logo nutzt jetzt eine eigene
|
|
133
|
+
Klasse .nav-logo-text mit fest verdrahteten Metriken. */
|
|
134
|
+
--ty-title-sm: 500 1.25rem/1.75rem var(--font);
|
|
135
|
+
--ty-label-xs-strong: 600 0.75rem/1rem var(--font);
|
|
136
|
+
--ty-name: 600 0.875rem/1.25rem var(--font);
|
|
137
|
+
/* Display / serif (Libre Baskerville) */
|
|
138
|
+
--ty-serif-sm: 400 1.0625rem/1.75rem var(--font-display);
|
|
139
|
+
--ty-serif-md: 400 1.25rem/1.75rem var(--font-display);
|
|
140
|
+
--ty-serif-lg: 400 1.25rem/2rem var(--font-display);
|
|
141
|
+
/* Headline/Display fluid: font-size via clamp(), Zeilenhöhe als unitless Ratio
|
|
142
|
+
(skaliert proportional zur gerechneten Größe, nie < 1 — siehe line-height-Konvention).
|
|
143
|
+
rem-basiert (Juli 2026, WCAG 1.4.4 "Resize Text"): Min/Max in rem, Mittel-Term als
|
|
144
|
+
rem + vw, damit die Schrift auch die Browser-Standardschriftgröße respektiert (px+vw
|
|
145
|
+
reagierte nur auf Seiten-Zoom). Mittel-Term = Zwei-Anker-Fluid-Kurve (Anker 360 px → Min,
|
|
146
|
+
1240 px → Max); rem-Anteil trägt die Basis (resize-fähig), vw fügt fluides Wachstum hinzu.
|
|
147
|
+
Max = bisheriger Fixwert → Desktop unverändert; Min greift am Phone (alle ≥ 1.25rem =
|
|
148
|
+
20 px @ Default, also ≥ Font-Size-Minimum). Mirror von --ty-display-lg. */
|
|
149
|
+
--ty-headline-xs: 400 clamp(1.25rem, 1.2rem + 0.23vw, 1.375rem)/1.35 var(--font-display);
|
|
150
|
+
--ty-headline-sm: 400 clamp(1.3125rem, 1.236rem + 0.34vw, 1.5rem)/1.33 var(--font-display);
|
|
151
|
+
--ty-headline-md: 400 clamp(1.4375rem, 1.31rem + 0.57vw, 1.75rem)/1.3 var(--font-display);
|
|
152
|
+
--ty-display-sm: 400 clamp(1.75rem, 1.546rem + 0.91vw, 2.25rem)/1.22 var(--font-display);
|
|
153
|
+
--ty-display-md: 400 clamp(1.875rem, 1.619rem + 1.14vw, 2.5rem)/1.2 var(--font-display);
|
|
154
|
+
--ty-display-lg: 400 clamp(1.75rem, 1.29rem + 2.05vw, 2.875rem)/1.15 var(--font-display);
|
|
155
|
+
|
|
156
|
+
/* ── Spacing ── */
|
|
157
|
+
--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--s8:32px;--s10:40px;--s12:48px;--s16:64px;
|
|
158
|
+
|
|
159
|
+
/* ── Shape (5 Stufen) ── */
|
|
160
|
+
--r-xs:4px; --r-sm:8px; --r-md:12px; --r-lg:16px; --r-xl:28px; --r-full:9999px;
|
|
161
|
+
|
|
162
|
+
/* ── Elevation (Shadow + Tonal Overlay) ── */
|
|
163
|
+
--e0:none;
|
|
164
|
+
--e1:0 1px 2px rgba(0,0,0,.30),0 1px 3px 1px rgba(0,0,0,.15);
|
|
165
|
+
--e2:0 1px 2px rgba(0,0,0,.30),0 2px 6px 2px rgba(0,0,0,.15);
|
|
166
|
+
--e3:0 1px 3px rgba(0,0,0,.30),0 4px 8px 3px rgba(0,0,0,.15);
|
|
167
|
+
--e4:0 2px 3px rgba(0,0,0,.30),0 6px 10px 4px rgba(0,0,0,.15);
|
|
168
|
+
--e5:0 4px 4px rgba(0,0,0,.30),0 8px 12px 6px rgba(0,0,0,.15);
|
|
169
|
+
/* Tonal overlay: primärfarbe auf Oberfläche aufgebracht */
|
|
170
|
+
--tonal-1:rgba(0,190,190,.05); --tonal-2:rgba(0,190,190,.08);
|
|
171
|
+
--tonal-3:rgba(0,190,190,.11); --tonal-4:rgba(0,190,190,.12);
|
|
172
|
+
--tonal-5:rgba(0,190,190,.14);
|
|
173
|
+
|
|
174
|
+
/* ── Motion ── */
|
|
175
|
+
--m-fast:150ms cubic-bezier(.4,0,.2,1); --m-std:250ms cubic-bezier(.4,0,.2,1);
|
|
176
|
+
|
|
177
|
+
/* ── Icon Stroke-Width ── */
|
|
178
|
+
--icon-stroke-micro:1;
|
|
179
|
+
--icon-stroke-sm:1.25;
|
|
180
|
+
--icon-stroke-md:1.5;
|
|
181
|
+
--icon-stroke-lg:2;
|
|
182
|
+
--icon-stroke-xl:2.5;
|
|
183
|
+
|
|
184
|
+
/* ── Borders ──
|
|
185
|
+
Zwei Rollen, nicht zwei Stärken: --bd ist die Trennlinie INNERHALB eines Bauteils
|
|
186
|
+
(Card-Footer, Tabellenzeile, Caption-Kante), --bd-strong die AUSSENKANTE einer Fläche
|
|
187
|
+
(Karte, Kasten, schwebendes Panel). Beide sind 1px; die Kante muss nur mehr tragen, weil sie
|
|
188
|
+
eine Fläche gegen ihren Grund abgrenzt, während die Trennlinie innerhalb einer schon
|
|
189
|
+
abgegrenzten Fläche liegt.
|
|
190
|
+
--bd-strong-c war n-200 und trug im Light nur 1,53:1 gegen Weiß und 1,42:1 gegen eine
|
|
191
|
+
n-50-Sektion; eine weiße Karte auf weißem Grund war damit praktisch randlos, obwohl genau
|
|
192
|
+
dieser Rand sie laut Konvention zur Fläche macht. n-300 gibt 2,25:1 bzw. 2,09:1 und bleibt
|
|
193
|
+
ruhig. Der Dark-Wert (#8694A5, 4,21:1) war nie das Problem und ändert sich nicht.
|
|
194
|
+
--bd-c / --bd-strong-c halten die reine Farbe. --bd und --bd-strong sind Shorthand-Werte und
|
|
195
|
+
lassen sich nicht in border-color einsetzen; Regeln, die nur die Farbe brauchen (z. B. der
|
|
196
|
+
verstärkte Rand schwebender Panels im Dark), greifen deshalb auf die -c-Variante zu, statt den
|
|
197
|
+
Hexwert ein zweites Mal zu führen. */
|
|
198
|
+
--bd-c:var(--n-100); --bd-strong-c:var(--n-300);
|
|
199
|
+
--bd:1px solid var(--bd-c); --bd-strong:1px solid var(--bd-strong-c);
|
|
200
|
+
--field-border:var(--n-400); /* Formularfeld-Rahmen: 4.13:1 auf bg-surface (#fff) → WCAG 1.4.11 ✓. n-200 (#C9D3D3) verfehlte mit 1.5:1. */
|
|
201
|
+
|
|
202
|
+
/* ── Focus ── */
|
|
203
|
+
/* Sichtbarer Ring co-700 (nicht co-500): co-500 #00BEBE erreicht auf Weiß nur 2,3:1 und verfehlt
|
|
204
|
+
die 3:1-Schwelle für Fokus-Indikatoren (WCAG 2.4.11). co-700 #007575 = 5,5:1. Gilt global (alle
|
|
205
|
+
:focus-visible-Ringe im DS nutzen diese Tokens). Dark bleibt co-500 (dort 4,7:1 auf dunklem Grund,
|
|
206
|
+
co-700 wäre dunkel-auf-dunkel) — s. dark-mode.css. */
|
|
207
|
+
--focus-ring:0 0 0 3px var(--co-50),0 0 0 5px var(--co-700);
|
|
208
|
+
--focus-aa:0 0 0 2px var(--bg-surface),0 0 0 4px var(--co-700);
|
|
209
|
+
}
|