@medquantis/design-system 1.0.1 → 1.1.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/README.md +57 -1
- package/css/base.css +2 -2
- package/css/components.css +2 -2
- package/css/kit/document.css +91 -0
- package/css/kit/print.css +81 -0
- package/css/kit/slide-frame.css +99 -0
- package/css/slide.css +1 -1
- package/dist/DESIGN.md +891 -0
- package/dist/kit/brand.css +12 -0
- package/dist/kit/core.css +69 -0
- package/dist/kit/dataviz.css +16 -0
- package/dist/kit/document.css +104 -0
- package/dist/kit/guidance.md +310 -0
- package/dist/kit/print.css +95 -0
- package/dist/kit/slide-frame.css +114 -0
- package/dist/kit/space-shape.css +13 -0
- package/dist/kit/type.css +17 -0
- package/dist/llms-full.txt +5 -1
- package/dist/llms.txt +23 -23
- package/dist/tokens.css +4 -0
- package/dist/tokens.json +44 -0
- package/kit-manifest.json +14 -0
- package/package.json +11 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*! @medquantis/design-system | © 2026 MedQuantis SA | MIT License, see LICENSE */
|
|
2
|
+
/*
|
|
3
|
+
* MedQuantis values for the dataviz module of the homemade-claude-kit design contract 2.0.0,
|
|
4
|
+
* generated from tokens/kit/ by the design-system build. Do not edit. kit-manifest.json lists it.
|
|
5
|
+
* For kit renderers only: the unprefixed names collide with app and Tailwind variables.
|
|
6
|
+
*/
|
|
7
|
+
:root {
|
|
8
|
+
--chart-1: #0a2463;
|
|
9
|
+
--chart-2: #5d6f91;
|
|
10
|
+
--chart-3: #8795b3;
|
|
11
|
+
--chart-4: #c3cbdc;
|
|
12
|
+
--chart-rest: #dde3ee;
|
|
13
|
+
--chart-axis: #8c8c8c;
|
|
14
|
+
--chart-grid: #dddbd6;
|
|
15
|
+
--chart-highlight: #0a2463;
|
|
16
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*! @medquantis/design-system | © 2026 MedQuantis SA | MIT License, see LICENSE */
|
|
2
|
+
/*
|
|
3
|
+
* MedQuantis document module of the homemade-claude-kit design contract 2.0.0. The roles are
|
|
4
|
+
* generated from tokens/kit/ by the design-system build; the class rules after them are copied
|
|
5
|
+
* from css/kit/document.css, written by hand against contract roles. Do not edit this file.
|
|
6
|
+
* kit-manifest.json lists it. For kit renderers only: the unprefixed names collide with app and
|
|
7
|
+
* Tailwind variables.
|
|
8
|
+
*/
|
|
9
|
+
:root {
|
|
10
|
+
--doc-page-bg: #fafaf8;
|
|
11
|
+
--doc-text-size: 16.5px;
|
|
12
|
+
--doc-rule: #dddbd6;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* Class rules of the MedQuantis document module for the homemade-claude-kit renderers
|
|
17
|
+
* (com-slide-deck mode: document; Plan-0002 increment 02). Written by hand against contract roles
|
|
18
|
+
* only: core, type, space-shape, dataviz and the document roles, which tokens/kit/ maps. The
|
|
19
|
+
* build copies these rules into dist/kit/document.css after the roles. build/kit-classes.md names
|
|
20
|
+
* the MedQuantis rule each class reproduces: the A4 sheet of css/print.css (mq-page) with the
|
|
21
|
+
* body text of css/base.css (mq-doc).
|
|
22
|
+
*
|
|
23
|
+
* Cascade: com-slide-deck adds its document baseline (doc.baseline.css) after the design layer,
|
|
24
|
+
* so the rules it also writes carry one more element in their selector. The page box and the
|
|
25
|
+
* print margins stay the deck's config.yaml page: block.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/* mq-page and mq-doc: the sheet on the canvas colour (owner ruling 9), Newsreader body. */
|
|
29
|
+
body .doc {
|
|
30
|
+
background: var(--doc-page-bg);
|
|
31
|
+
color: var(--ink);
|
|
32
|
+
font-family: var(--font-body);
|
|
33
|
+
font-size: var(--doc-text-size);
|
|
34
|
+
font-weight: var(--font-weight-regular);
|
|
35
|
+
line-height: var(--line-height-body);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* Headings in Outfit 500, never 700 (owner ruling 4, guidelines/typography.md). */
|
|
39
|
+
.doc h1,
|
|
40
|
+
.doc h2,
|
|
41
|
+
.doc h3 {
|
|
42
|
+
margin: var(--space-lg) 0 var(--space-sm);
|
|
43
|
+
color: var(--ink);
|
|
44
|
+
font-family: var(--font-heading);
|
|
45
|
+
font-weight: var(--font-weight-bold);
|
|
46
|
+
line-height: var(--line-height-tight);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.doc h1 {
|
|
50
|
+
font-size: var(--title-size);
|
|
51
|
+
letter-spacing: -0.015em;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.doc h2 {
|
|
55
|
+
font-size: var(--font-size-lg);
|
|
56
|
+
letter-spacing: -0.01em;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.doc h3 {
|
|
60
|
+
font-size: var(--font-size-md);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.doc p {
|
|
64
|
+
margin: 0 0 var(--space-md);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* A section opens with its own head; its first element keeps no top margin. */
|
|
68
|
+
.doc-section > :first-child {
|
|
69
|
+
margin-top: 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* A section that follows on the same page: a hairline rule and the space between sections. */
|
|
73
|
+
body .doc-section.doc-section--flow {
|
|
74
|
+
margin-top: var(--space-xl);
|
|
75
|
+
padding-top: var(--space-lg);
|
|
76
|
+
border-top: var(--border-width) solid var(--doc-rule);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* mq-eyebrow: Geist Mono 500 capitals in navy above a heading. */
|
|
80
|
+
.doc-label {
|
|
81
|
+
margin: 0 0 var(--space-sm);
|
|
82
|
+
color: var(--accent);
|
|
83
|
+
font-family: var(--font-mono);
|
|
84
|
+
font-size: var(--font-size-xs);
|
|
85
|
+
font-weight: var(--font-weight-bold);
|
|
86
|
+
letter-spacing: 0.16em;
|
|
87
|
+
text-transform: uppercase;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* A block that never splits across pages (guidelines/layout.md, Print and PDF). */
|
|
91
|
+
body .doc-keep {
|
|
92
|
+
break-inside: avoid;
|
|
93
|
+
page-break-inside: avoid;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* In a document the source bar flows as a footnote: the kit's base slide-frame positions it on
|
|
97
|
+
a slide canvas, which a document does not have. */
|
|
98
|
+
.doc .slide-source-bar {
|
|
99
|
+
position: static;
|
|
100
|
+
color: var(--muted);
|
|
101
|
+
font-family: var(--font-body);
|
|
102
|
+
font-size: var(--font-size-sm);
|
|
103
|
+
font-style: italic;
|
|
104
|
+
}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
# MedQuantis guidance for the delivery-comms kit
|
|
2
|
+
|
|
3
|
+
Generated from guidelines/ by the design-system build. Do not edit. The MedQuantis guideline sections behind each module this package provides; token names are the --mq-* names of tokens.css, which the kit roles of each module alias. The kit treats this file as informational.
|
|
4
|
+
|
|
5
|
+
## core
|
|
6
|
+
|
|
7
|
+
Source: guidelines/colour.md, guidelines/typography.md, guidelines/layout.md, guidelines/accessibility.md.
|
|
8
|
+
|
|
9
|
+
### Colour: The medium split
|
|
10
|
+
|
|
11
|
+
| Medium | Colours allowed | How a state is shown |
|
|
12
|
+
| :-- | :-- | :-- |
|
|
13
|
+
| Documents: slides, A4 reports, papers, newsletters, the website | Navy, the neutrals, the blue-grey family, the chart tokens | By mark style: solid, ring, pale, outline, quiet, dashed, struck through |
|
|
14
|
+
| Interactive apps | Everything documents use, plus `--mq-success`, `--mq-warning`, `--mq-danger`, `--mq-info` | Status colour for genuine system status only (errors, validation, alerts, confirmations), always with an icon or a word |
|
|
15
|
+
|
|
16
|
+
Documents never carry green, orange, red, sky blue, pink, purple or turquoise, not even to say good or bad (ADR-0004). They never load `css/app.css`. A callout in a document is always navy; there is no warning-orange or success-green callout.
|
|
17
|
+
|
|
18
|
+
### Colour: Accent
|
|
19
|
+
|
|
20
|
+
| Token | Value | Use |
|
|
21
|
+
| :-- | :-- | :-- |
|
|
22
|
+
| `--mq-accent` | `#0a2463` | The single accent: key figures, links, active states, the key column of a table, top and edge rules, series 1, navy panels |
|
|
23
|
+
| `--mq-accent-hover` | `#061a4d` | Hover and pressed state of a link or an accent control, nothing else |
|
|
24
|
+
| `--mq-accent-pale` | `#eaeef7` | Icon pills and chips, a deviating value, the highlighted table row, the pale state |
|
|
25
|
+
| `--mq-accent-pale-2` | `#f2f4f9` | Progress tracks, the quiet state, callout background |
|
|
26
|
+
| `--mq-on-accent` | `#ffffff` | Text and icons on an accent fill (14.53:1) |
|
|
27
|
+
|
|
28
|
+
Navy carries emphasis on its own. Status colours never replace it for emphasis, in any medium.
|
|
29
|
+
|
|
30
|
+
### Colour: Neutrals
|
|
31
|
+
|
|
32
|
+
The neutrals are warm greys tuned to the warm canvas, never blue-tinted greys.
|
|
33
|
+
|
|
34
|
+
| Token | Value | Use | Contrast |
|
|
35
|
+
| :-- | :-- | :-- | :-- |
|
|
36
|
+
| `--mq-ink` | `#1a1a1a` | Primary text and values | 16.65:1 on canvas |
|
|
37
|
+
| `--mq-muted` | `#555555` | Secondary text, leads, captions | 7.13:1 on canvas |
|
|
38
|
+
| `--mq-tertiary` | `#707070` | Tertiary text: notes, footers, axis labels, placeholders (owner ruling 1) | 4.74:1 on canvas, 4.95:1 on surface |
|
|
39
|
+
| `--mq-decoration` | `#8c8c8c` | Non-text decoration only: axis lines, ticks, an icon beside its label. Never text (owner ruling 1) | 3.22:1 on canvas |
|
|
40
|
+
| `--mq-canvas` | `#fafaf8` | Background of every document page: A4 report, paper, slide (owner ruling 9) | |
|
|
41
|
+
| `--mq-surface` | `#ffffff` | Cards, panels, tables, figures, inputs | |
|
|
42
|
+
| `--mq-surface-alt` | `#f5f4f1` | Recessed areas: table headers, tab bars, grouped areas, hover | |
|
|
43
|
+
| `--mq-desk` | `#e9e8e4` | On screen only, around a page preview; never inside a document, so a printed page is never grey (owner ruling 9) | |
|
|
44
|
+
| `--mq-border` | `#dddbd6` | Borders, dividers, chart baselines | decorative |
|
|
45
|
+
| `--mq-border-light` | `#ebeae6` | Hairlines between rows and columns, card borders | decorative |
|
|
46
|
+
| `--mq-border-strong` | `#5d6f91` | Outline of outlined and dashed state marks | 4.84:1 on canvas, non-text |
|
|
47
|
+
|
|
48
|
+
Why a warm canvas: pure white reads clinical and generic; the warm off-white reads institutional while white cards still stand out on it. Tertiary text sits exactly at 4.50:1 on `--mq-surface-alt`, so put it on canvas or surface, not on the recessed grey.
|
|
49
|
+
|
|
50
|
+
### Typography: Three families, three roles
|
|
51
|
+
|
|
52
|
+
| Family | Token | Role |
|
|
53
|
+
| :-- | :-- | :-- |
|
|
54
|
+
| Outfit | `--mq-font-family-heading`, `--mq-font-family-ui` | Headings, column titles, hero figures, labels, table text, takeaways; the whole UI of apps (navigation, buttons, badges, UI body text) |
|
|
55
|
+
| Newsreader | `--mq-font-family-body` | Reading text: body of documents and slides, leads, captions, notes, quoted official text, and regulatory text in apps. The only serif (owner ruling 10) |
|
|
56
|
+
| Geist Mono | `--mq-font-family-mono` | Codes, figures in tables, dates in tables, eyebrows, axis labels, identifiers |
|
|
57
|
+
|
|
58
|
+
Georgia and Times New Roman appear only as fallbacks. The three families are self-hosted (`fonts/fonts.css`, variable woff2 with latin and latin-ext); no page loads a font from a remote service. Newsreader ships its true italic, so leads and notes are never a slanted roman.
|
|
59
|
+
|
|
60
|
+
Outfit was chosen because it reads cleanly from a display title down to an 11 px badge, with a geometric, contemporary character that stays distinct from the generic interface sans-serifs.
|
|
61
|
+
|
|
62
|
+
### Layout: Elevation and navy blocks
|
|
63
|
+
|
|
64
|
+
- Cards, figures and tables: `--mq-shadow-small`. Raised panels, menus and a page or slide previewed on the desk: `--mq-shadow-medium`. Navy panels: `--mq-shadow-panel`. No shadow in print and none on chart marks.
|
|
65
|
+
- One large navy block per screen, slide or page area. In a report, keep the header, a navy KPI band and a navy panel apart with light content.
|
|
66
|
+
|
|
67
|
+
### Accessibility: Colour is never alone
|
|
68
|
+
|
|
69
|
+
Colour never carries meaning on its own (WCAG 1.4.1):
|
|
70
|
+
|
|
71
|
+
- documents show states by mark style (solid, ring, pale, outline, quiet, dashed, struck through) and a page that uses these marks gives their key once, in a legend or a note;
|
|
72
|
+
- apps pair every status colour with an icon or a word;
|
|
73
|
+
- charts label the marks that use series 3 or 4, or give them an outline, since those colours are below 3:1 on the page (charts);
|
|
74
|
+
- a change in a figure is shown by its sign, not by a colour or an arrow alone.
|
|
75
|
+
|
|
76
|
+
## dataviz
|
|
77
|
+
|
|
78
|
+
Source: guidelines/charts.md.
|
|
79
|
+
|
|
80
|
+
### Charts: The ordered palette
|
|
81
|
+
|
|
82
|
+
Four categorical series plus a remainder fill (owner, 2026-10-10), always used in this order, darkest first:
|
|
83
|
+
|
|
84
|
+
| Order | Token | Value | Contrast on canvas | Typical role |
|
|
85
|
+
| :-- | :-- | :-- | :-- | :-- |
|
|
86
|
+
| 1 | `--mq-chart-series-1` | `#0a2463` | 13.90:1 | The main series, the current period, the value the text discusses |
|
|
87
|
+
| 2 | `--mq-chart-series-2` | `#5d6f91` | 4.84:1 | The second share of a whole |
|
|
88
|
+
| 3 | `--mq-chart-series-3` | `#8795b3` | 2.88:1 | Other values, projections, "upcoming" dashed marks, struck values |
|
|
89
|
+
| 4 | `--mq-chart-series-4` | `#c3cbdc` | 1.56:1 | Previous period, reference, neutral outline |
|
|
90
|
+
| Remainder | `--mq-chart-rest` | `#dde3ee` | | What is left, empty or not yet: never a categorical series |
|
|
91
|
+
|
|
92
|
+
The pairs between the four series stay at least CIEDE2000 10 apart under normal vision and under protan, deutan, tritan and achromatic simulation; the remainder fill is too close to series 4, so it is drawn with a series 4 outline.
|
|
93
|
+
|
|
94
|
+
**Series 3 and 4 are below 3:1 against the page** (WCAG 1.4.11). A chart that uses them must not rely on their colour alone: label those marks directly, give them a separating outline or stroke, or add a pattern. Series 1 and 2 meet 3:1 on their own.
|
|
95
|
+
|
|
96
|
+
Rules:
|
|
97
|
+
|
|
98
|
+
- Never more than four series at once. Group the rest as "Other" in the remainder fill.
|
|
99
|
+
- Fix colours per series when the order means something (reference before current); never let a charting library rotate through its palette.
|
|
100
|
+
- Only one element is navy when the others are there for comparison.
|
|
101
|
+
|
|
102
|
+
### Charts: Highlight on grey
|
|
103
|
+
|
|
104
|
+
To point at one item among many (a ranking, one insurer among peers), draw the item the text discusses in series 1 and every other item in series 3. When the context should recede further, such as a reference period behind the current one, use series 4. Label the highlighted item directly; the others need a label or an outline because series 3 and 4 are below 3:1.
|
|
105
|
+
|
|
106
|
+
### Charts: Marks
|
|
107
|
+
|
|
108
|
+
- **Grid and axes:** no background grid. One baseline in `--mq-chart-baseline`, 1 px. No drawn vertical axis: at most three value labels on the left, without lines. Axis lines and ticks, where drawn, use `--mq-chart-axis` (non-text).
|
|
109
|
+
- **Axis labels:** Geist Mono at `--mq-font-size-axis`, in tertiary text (`--mq-tertiary`), three to five ticks. Dates as `2024` or `10.2026` (data patterns).
|
|
110
|
+
- **Value labels:** write only the value the text discusses (the peak, the latest value), in navy; leave about 18 % headroom above the tallest mark for it.
|
|
111
|
+
- **Vertical bars:** rounded at the top with the small radius (3 px), square at the base, with a narrow gap between bars of a monthly series.
|
|
112
|
+
- **Horizontal bars:** about 8 px thick, the far end rounded with the small radius, the value in Geist Mono at the end of the bar.
|
|
113
|
+
- **Ring:** for parts of a whole, a thick stroke starting at the top, small gaps between arcs, no text in the centre, the legend beside it. Never a pie of more than four parts.
|
|
114
|
+
- **Lines:** the main series in series 1 at 2 px with round caps; a reference in series 4 at 1.5 px; a projection in series 3 at 1.5 px dashed; an end dot in navy with its value above it. No area fill under a line and no smoothing.
|
|
115
|
+
- **Annotations:** a dotted vertical marker in series 3 with a short sentence in Newsreader italic, muted; or a numeric note under the chart (the number in navy, then a sentence).
|
|
116
|
+
- **Progress bar** (`mq-progress`): a quiet pale track (`--mq-accent-pale-2`), a navy fill, the value in Geist Mono beside it; a secondary value in series 3.
|
|
117
|
+
- **Distribution bar** (`mq-distribution`, `mq-segment`): segments in palette order, the remainder dashed or in the remainder fill.
|
|
118
|
+
- **Tooltips**, where a library draws them: navy background, white text, title in Outfit, values in Geist Mono, the small radius.
|
|
119
|
+
|
|
120
|
+
Never: background grids, zebra bands, 3D, shadows on marks, area fills under lines, pies of more than four parts.
|
|
121
|
+
|
|
122
|
+
## type
|
|
123
|
+
|
|
124
|
+
Source: guidelines/typography.md.
|
|
125
|
+
|
|
126
|
+
### Typography: Weights
|
|
127
|
+
|
|
128
|
+
| Weight | Token | Use |
|
|
129
|
+
| :-- | :-- | :-- |
|
|
130
|
+
| Outfit 500 | `--mq-font-weight-heading` | Every heading, column title, hero figure, KPI value, label, button label and badge (owner ruling 4) |
|
|
131
|
+
| Outfit 600 | `--mq-font-weight-emphasis` | Only a short highlighted word inside body text, as the "Med" of the wordmark. Bold inside Newsreader prose switches to Outfit 600 at about 0.94 em |
|
|
132
|
+
| Outfit 400 | `--mq-font-weight-body` | App UI body text |
|
|
133
|
+
| Outfit 300 | `--mq-font-weight-light` | Only the "Quantis" half of the wordmark |
|
|
134
|
+
| Newsreader 400 | `--mq-font-weight-body` | Reading text, with its italic for leads and notes |
|
|
135
|
+
| Geist Mono 400 and 500 | | Table figures and codes 400, eyebrows 500 |
|
|
136
|
+
|
|
137
|
+
Weights 700 and 800 appear only inside the monogram files; no heading, button or table uses them.
|
|
138
|
+
|
|
139
|
+
### Typography: Roles and sizes
|
|
140
|
+
|
|
141
|
+
Every size is a token. The print column gives the A4 scale for reports printed from a browser; it is not yet a token (open point).
|
|
142
|
+
|
|
143
|
+
| Role | Family and style | Screen token | Screen | Print (A4) |
|
|
144
|
+
| :-- | :-- | :-- | :-- | :-- |
|
|
145
|
+
| Hero title (`mq-display`) | Outfit 500, line height 1.04 to 1.08, letter spacing about -0.025 em | `--mq-font-size-hero-min` to `--mq-font-size-hero-max` | 34 to 56 px | 26 pt |
|
|
146
|
+
| Slide title (`mq-slide-title`) | Outfit 500, line height 1.15 | `--mq-font-size-slide-title` | 36 px | |
|
|
147
|
+
| Section title (`mq-title`) | Outfit 500, line height 1.15, about -0.015 em | `--mq-font-size-h2` | 32 px | 17 pt |
|
|
148
|
+
| Subsection, card and column title (`mq-subtitle`, `mq-card-title`) | Outfit 500, about -0.01 em | `--mq-font-size-h3` | 20 px | 12.5 pt |
|
|
149
|
+
| Lead (`mq-lead`) | Newsreader italic, muted, line height 1.5 | `--mq-font-size-lead` | 18 px | 11.5 pt |
|
|
150
|
+
| Body (`mq-doc`, `mq-prose`) | Newsreader 400, line height 1.6 | `--mq-font-size-body` | 16.5 px | 10 pt |
|
|
151
|
+
| Small text, figure caption | Newsreader | `--mq-font-size-small` | 15 px | 9.5 pt |
|
|
152
|
+
| Label (`mq-label`) | Outfit 500, muted | `--mq-font-size-label` | 13 px | 8.5 pt |
|
|
153
|
+
| Eyebrow (`mq-eyebrow`) | Geist Mono 500, capitals, letter spacing 0.16 to 0.18 em, navy | `--mq-font-size-eyebrow` | 11 px | 7.5 pt |
|
|
154
|
+
| Hero figure (`mq-figure`) | Outfit 500, tabular figures, navy | `--mq-font-size-figure` | 50 px | 28 pt |
|
|
155
|
+
| KPI value (`mq-kpi-value`) | Outfit 500, tabular figures | `--mq-font-size-kpi` | 30 px | 17 pt |
|
|
156
|
+
| Counter value | Outfit 500, tabular figures, navy | `--mq-font-size-stat` | 24 px | 14 pt |
|
|
157
|
+
| Table header | Geist Mono, capitals, small letter spacing | `--mq-font-size-table-header` | 11 px | 7 pt |
|
|
158
|
+
| Table figure (`mq-num`) | Geist Mono 400, tabular figures, right-aligned | `--mq-font-size-table-cell` | 13 px | 8.5 pt |
|
|
159
|
+
| Table text | Outfit 500 (first column) or Newsreader | `--mq-font-size-table-text` | 14 px | 8.5 pt |
|
|
160
|
+
| Takeaway (`mq-takeaway`) | Outfit 500 | `--mq-font-size-takeaway` | 16 px | 10.5 pt |
|
|
161
|
+
| Note, source, illustrative mention (`mq-note`, `mq-foot`) | Newsreader italic, tertiary | `--mq-font-size-note` | 12.5 px | 8 pt |
|
|
162
|
+
| Chart axis label | Geist Mono, tertiary | `--mq-font-size-axis` | 11 px | about 8 pt on paper |
|
|
163
|
+
|
|
164
|
+
Rules:
|
|
165
|
+
|
|
166
|
+
- **Floor:** no text below 11 px on screen, in any medium, including table headers and badges.
|
|
167
|
+
- **Letter spacing** is negative on titles and tightens as the size grows: about -0.01 em near 20 px, -0.015 em near 32 to 38 px, -0.025 em at 56 px and above. Body text keeps the font's own spacing.
|
|
168
|
+
- **Figures** always use tabular figures (`font-variant-numeric: tabular-nums`, or `mq-mono`), so columns of numbers align.
|
|
169
|
+
- **Eyebrows and section labels** are typed in normal case and set in capitals by CSS; a middle dot separates their parts: "02 · Amounts by year".
|
|
170
|
+
|
|
171
|
+
### Typography: Line height
|
|
172
|
+
|
|
173
|
+
| Context | Line height |
|
|
174
|
+
| :-- | :-- |
|
|
175
|
+
| Hero titles | 1.04 to 1.08 |
|
|
176
|
+
| Headings, counters, stat figures | 1.15 to 1.3 |
|
|
177
|
+
| Leads | 1.5 |
|
|
178
|
+
| App UI text, labels, descriptions | 1.55 |
|
|
179
|
+
| Reading text in documents | 1.6 |
|
|
180
|
+
| Help text and longer descriptions in apps | 1.75 |
|
|
181
|
+
| Regulatory text in apps (dense legal prose read under time pressure) | 2.2, and 2.0 on phones |
|
|
182
|
+
|
|
183
|
+
Long regulatory text is set in Newsreader at about 15 px with that generous line height, so long German compounds stay separable line by line. Codes inside it are set in Geist Mono at 12 px on the recessed surface with the small radius. Dense tables keep tight padding; the breathing room goes to the text people read word by word.
|
|
184
|
+
|
|
185
|
+
## space-shape
|
|
186
|
+
|
|
187
|
+
Source: guidelines/layout.md.
|
|
188
|
+
|
|
189
|
+
### Layout: Widths and spacing
|
|
190
|
+
|
|
191
|
+
All spacing comes from the 4 and 8 px scale (`--mq-space-1` to `--mq-space-8`: 4, 8, 12, 16, 24, 32, 48, 72 px). No other spacing value.
|
|
192
|
+
|
|
193
|
+
| Measure | Token | Value |
|
|
194
|
+
| :-- | :-- | :-- |
|
|
195
|
+
| Page width | `--mq-page-width` | 1040 px |
|
|
196
|
+
| Reading measure: prose, leads, in-brief, callouts stop here | `--mq-page-measure` | 760 px |
|
|
197
|
+
| Side gutter | `--mq-space-6` | 32 px, 16 px (`--mq-space-4`) on phones |
|
|
198
|
+
| Between cards | `--mq-space-5` | 24 px |
|
|
199
|
+
| Between calm columns | `--mq-space-7` | 48 px |
|
|
200
|
+
| From a section head to its content | `--mq-space-6` | 32 px |
|
|
201
|
+
| Between sections | `--mq-space-8` | 72 px, 48 px on phones |
|
|
202
|
+
|
|
203
|
+
Figures, tables and grids take the full page width; running text never does.
|
|
204
|
+
|
|
205
|
+
Grids: calm columns (three columns separated by thin rules, no boxes, one hero figure each), two-column and three-column grids of cards or figures. On phones every grid becomes one column, and a band of four tiles becomes two by two.
|
|
206
|
+
|
|
207
|
+
### Layout: Radius
|
|
208
|
+
|
|
209
|
+
Owner ruling 3, as amended on 2026-10-10:
|
|
210
|
+
|
|
211
|
+
| Token | Value | For |
|
|
212
|
+
| :-- | :-- | :-- |
|
|
213
|
+
| `--mq-radius-small` | 3 px | Small items: tags, chips, badges, inputs, buttons, progress tracks, bar ends, tooltips |
|
|
214
|
+
| `--mq-radius-medium` | 6 px | Cards, panels, KPI tiles, figures, icon pills, slide frames. The maximum anywhere else |
|
|
215
|
+
| `--mq-radius-overlay` | 12 px | Apps only: dialogs and modals, side drawers and command palettes. Never in documents, slides, cards or website media |
|
|
216
|
+
|
|
217
|
+
- No pill shapes, ever: no fully rounded buttons, tags, chips or tabs.
|
|
218
|
+
- A circle is allowed only for something that is genuinely round: a status dot, a numbered marker, an avatar. In Tailwind that is `rounded-full`, and only there.
|
|
219
|
+
- In `dist/tailwind.css` the steps `rounded`, `rounded-xs` and `rounded-sm` resolve to 3 px, `rounded-md` to `rounded-4xl` to 6 px, and `rounded-overlay` to 12 px, so no utility class can exceed the ruling. The shared stylelint config rejects any other radius.
|
|
220
|
+
|
|
221
|
+
Squared-off corners read professional and institutional; pills read consumer.
|
|
222
|
+
|
|
223
|
+
## document
|
|
224
|
+
|
|
225
|
+
Source: guidelines/layout.md.
|
|
226
|
+
|
|
227
|
+
### Layout: Print and PDF
|
|
228
|
+
|
|
229
|
+
- `css/print.css` prints colours exactly (`print-color-adjust: exact`), so navy headers and panels do not print white, and stops all animation.
|
|
230
|
+
- Every document page uses the canvas colour (owner ruling 9); the desk never reaches paper.
|
|
231
|
+
- Figures, cards, panels, KPI bands, callouts, takeaways, table rows and source items never split across pages, and a heading is never left alone at the foot of a page.
|
|
232
|
+
- Before sending a PDF, check it page by page.
|
|
233
|
+
|
|
234
|
+
## slide-frame
|
|
235
|
+
|
|
236
|
+
Source: guidelines/layout.md.
|
|
237
|
+
|
|
238
|
+
### Layout: Media
|
|
239
|
+
|
|
240
|
+
| Medium | Canvas | Layout |
|
|
241
|
+
| :-- | :-- | :-- |
|
|
242
|
+
| Slide | 1280 by 720 px (`--mq-slide-width`, `--mq-slide-height`, `css/slide.css`) | Fixed canvas, 72 px side margins (`--mq-space-8`), section label top left, title under it, and a footer row (`mq-slide-foot`) with the legal line bottom left and the slide number bottom right, both in tertiary mono (owner ruling 11) |
|
|
243
|
+
| Screen report or paper | A page that scrolls, centred, `--mq-page-width` (1040 px) wide | Flow layout: no absolute positions, no fixed heights. It is not a deck: no slide canvas inside a report |
|
|
244
|
+
| A4 print | 210 by 297 mm (`--mq-a4-width`, `--mq-a4-height`, `css/print.css`) | One `mq-page` per sheet on the canvas colour; on screen the pages sit on the desk |
|
|
245
|
+
|
|
246
|
+
## print
|
|
247
|
+
|
|
248
|
+
Source: guidelines/layout.md.
|
|
249
|
+
|
|
250
|
+
### Layout: Report skeleton
|
|
251
|
+
|
|
252
|
+
1. A navy header: navy gradient, the on-navy wordmark, a mono kicker preceded by a short rule, the title in white Outfit 500, one sentence that carries the message (its first clause in white, the rest in on-navy secondary), and a row of metadata (author, scope, date) separated by on-navy rules. The header is a pattern, not yet a shared component.
|
|
253
|
+
2. "In brief": three or four self-contained sentences with the figure that matters, under a 2 px navy rule.
|
|
254
|
+
3. Sections. Each opens with a head (numbered eyebrow such as "02 · Amounts by year", title, one-sentence lead), then its blocks, then, when useful, one takeaway line (`mq-takeaway`).
|
|
255
|
+
4. The footer (`mq-foot`): a rule, the numbered sources, then the legal line and the date (brand).
|
|
256
|
+
|
|
257
|
+
A source is cited in the text with a small superscript number in Geist Mono, navy, pointing to the numbered source list.
|
|
258
|
+
|
|
259
|
+
## brand
|
|
260
|
+
|
|
261
|
+
Source: guidelines/brand.md.
|
|
262
|
+
|
|
263
|
+
### Brand: Legal line
|
|
264
|
+
|
|
265
|
+
The footer of every document sent outside carries the legal line and the date of the document:
|
|
266
|
+
|
|
267
|
+
`MedQuantis SA · CH-1095 Lutry · medquantis.ch`
|
|
268
|
+
|
|
269
|
+
Set it in Geist Mono at the note size, tertiary text colour (`--mq-tertiary`), with the date at the right end of the same line.
|
|
270
|
+
|
|
271
|
+
On slides the legal line appears on every slide, bottom left, small and in tertiary grey, with the slide number bottom right (owner ruling 11). Use the slide footer row `mq-slide-foot` of `css/slide.css`, never `mq-foot`, which flows from the top of a slide canvas.
|
|
272
|
+
|
|
273
|
+
Material left with a reader (a deck after a meeting, a report sent outside) also carries a confidentiality mention and its date, in the document's language:
|
|
274
|
+
|
|
275
|
+
| Medium | French | German | English | Italian |
|
|
276
|
+
| :-- | :-- | :-- | :-- | :-- |
|
|
277
|
+
| Presentation | Présentation confidentielle | Präsentation vertraulich | Confidential presentation | Not yet defined, owner to provide |
|
|
278
|
+
| Report | Rapport confidentiel | Vertraulicher Bericht (proposed, owner to confirm) | Confidential report (proposed, owner to confirm) | Not yet defined, owner to provide |
|
|
279
|
+
|
|
280
|
+
### Brand: Wordmark
|
|
281
|
+
|
|
282
|
+
The wordmark is the logo; no icon is required next to it. "Med" is set in Outfit 600 and "Quantis" in Outfit 300, in navy (`#0a2463`) on light backgrounds and in white on navy, at every size (owner ruling 6).
|
|
283
|
+
|
|
284
|
+
Each background has two files in `brand/`:
|
|
285
|
+
|
|
286
|
+
| File | Use |
|
|
287
|
+
| :-- | :-- |
|
|
288
|
+
| `wordmark-on-light.svg`, `wordmark-on-navy.svg` | Live text. Inline the SVG in a page that loads `fonts/fonts.css`, so the letters render in Outfit and stay selectable. |
|
|
289
|
+
| `wordmark-on-light-print.svg`, `wordmark-on-navy-print.svg` | Outlined letters. Use for images (`<img>` cannot load web fonts), documents, PDFs, email and anything sent to a printer. |
|
|
290
|
+
|
|
291
|
+
Rules:
|
|
292
|
+
|
|
293
|
+
- Use the on-navy file on navy and the on-light file on light backgrounds. Never recolour, stretch, outline, shadow or rearrange the wordmark.
|
|
294
|
+
- Inline the SVG rather than linking an external image, and remove its `width` and `height` so the page sizes it. On a report header the wordmark sits at about 198 by 44 px on screen and 162 by 36 px in print.
|
|
295
|
+
- A full stop in the on-navy accent (`--mq-on-navy-accent`) after a name is reserved for a one-word name on a navy cover. It is never added to the wordmark.
|
|
296
|
+
|
|
297
|
+
### Brand: Monogram and favicon
|
|
298
|
+
|
|
299
|
+
Where the wordmark does not fit (favicon, app icon, avatar, app tile), use the monogram: a white M and Q on a navy (`#0a2463`) square with rounded corners of 8/64 of its side, M in Outfit 700 and Q in Outfit 400, centred on the cap height (owner ruling 7). The letters are outlined in every file.
|
|
300
|
+
|
|
301
|
+
| File | Use |
|
|
302
|
+
| :-- | :-- |
|
|
303
|
+
| `brand/monogram.svg` | The monogram with its rounded corners |
|
|
304
|
+
| `brand/monogram-square.svg` | For platforms that round icons themselves |
|
|
305
|
+
| `brand/monogram-small.svg` | 16 px and smaller: larger letters, M 800 and Q 600 |
|
|
306
|
+
| `brand/favicon/` | `favicon.svg`, `favicon.ico` (16, 32, 48), `apple-touch-icon.png` (180), `icon-192.png`, `icon-512.png` |
|
|
307
|
+
|
|
308
|
+
### Brand: No combined logo yet
|
|
309
|
+
|
|
310
|
+
There is no lockup of the monogram and the wordmark in v1, and no on-navy variant of the monogram. Do not compose one locally: the combined logo is deferred until a real surface needs it ([issue #2](https://github.com/MedQuantis/design-system/issues/2)). Older lockups with a strapline under the wordmark are retired.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/*! @medquantis/design-system | © 2026 MedQuantis SA | MIT License, see LICENSE */
|
|
2
|
+
/*
|
|
3
|
+
* MedQuantis print module of the homemade-claude-kit design contract 2.0.0. The roles are
|
|
4
|
+
* generated from tokens/kit/ by the design-system build; the class rules after them are copied
|
|
5
|
+
* from css/kit/print.css, written by hand against contract roles. Do not edit this file.
|
|
6
|
+
* kit-manifest.json lists it. For kit renderers only: the unprefixed names collide with app and
|
|
7
|
+
* Tailwind variables.
|
|
8
|
+
*/
|
|
9
|
+
:root {
|
|
10
|
+
--print-bg: #fafaf8;
|
|
11
|
+
--print-margin: 48px 72px;
|
|
12
|
+
--print-page-size: A4;
|
|
13
|
+
--print-breaking: #0a2463;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Class rules of the MedQuantis print module for the homemade-claude-kit renderers (the
|
|
18
|
+
* com-release-note report; Plan-0002 increment 02). Written by hand against contract roles only.
|
|
19
|
+
* The report inlines the core, dataviz, type, space-shape and print modules (render_pdf.py
|
|
20
|
+
* REPORT_MODULES, kit #149). The sizes are the A4 print column of guidelines/typography.md, which
|
|
21
|
+
* is not yet a token, and the weight is the heading weight 500 (owner ruling 4); the template's
|
|
22
|
+
* own bold text and chips read --font-weight-bold and --radius-pill from the design. The build
|
|
23
|
+
* copies these rules into dist/kit/print.css after the roles.
|
|
24
|
+
* build/kit-classes.md names the MedQuantis rule each class reproduces: css/print.css (mq-page)
|
|
25
|
+
* and the typography roles of css/base.css.
|
|
26
|
+
*
|
|
27
|
+
* Cascade: the report template's own rules come before the design layer, so these rules, of
|
|
28
|
+
* the same specificity, replace them. The page box is --print-page-size and --print-margin.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/* mq-page: the A4 sheet on the canvas colour (owner ruling 9), ink text. */
|
|
32
|
+
.report {
|
|
33
|
+
background: var(--print-bg);
|
|
34
|
+
color: var(--ink);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* mq-eyebrow: Geist Mono 500 capitals in navy, 7.5 pt in print. */
|
|
38
|
+
.report-kicker {
|
|
39
|
+
color: var(--accent);
|
|
40
|
+
font-family: var(--font-mono);
|
|
41
|
+
font-size: 7.5pt;
|
|
42
|
+
font-weight: 500;
|
|
43
|
+
letter-spacing: 0.16em;
|
|
44
|
+
text-transform: uppercase;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* mq-display: the document title in Outfit 500, 26 pt in print. */
|
|
48
|
+
.report-title {
|
|
49
|
+
color: var(--ink);
|
|
50
|
+
font-family: var(--font-heading);
|
|
51
|
+
font-size: 26pt;
|
|
52
|
+
font-weight: 500;
|
|
53
|
+
line-height: 1.08;
|
|
54
|
+
letter-spacing: -0.025em;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* mq-lead: Newsreader italic in the secondary text colour, 11.5 pt in print. */
|
|
58
|
+
.report-framing {
|
|
59
|
+
color: var(--muted);
|
|
60
|
+
font-family: var(--font-body);
|
|
61
|
+
font-size: 11.5pt;
|
|
62
|
+
font-style: italic;
|
|
63
|
+
line-height: 1.5;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* The space between sections (guidelines/layout.md, Widths and spacing). */
|
|
67
|
+
.section {
|
|
68
|
+
margin-top: var(--space-lg);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* A section label: Outfit 500 capitals, 12.5 pt, under a 2 px navy rule like "In brief"
|
|
72
|
+
(guidelines/layout.md, Report skeleton). */
|
|
73
|
+
.section-label {
|
|
74
|
+
padding-bottom: var(--space-sm);
|
|
75
|
+
border-bottom: 2px solid var(--accent);
|
|
76
|
+
color: var(--ink);
|
|
77
|
+
font-family: var(--font-heading);
|
|
78
|
+
font-size: 12.5pt;
|
|
79
|
+
font-weight: 500;
|
|
80
|
+
letter-spacing: 0.04em;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* A section that leads a fresh page (guidelines/layout.md, Print and PDF). */
|
|
84
|
+
.section--page-break {
|
|
85
|
+
break-before: page;
|
|
86
|
+
page-break-before: always;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Documents are navy only (ADR-0004, guidelines/colour.md): the breaking-changes label reads by
|
|
90
|
+
its words and a navy rule, never by a status hue. --print-breaking is the navy accent, and the
|
|
91
|
+
kit's template washes the breaking-changes panel with it too. */
|
|
92
|
+
.section--breaking .section-label {
|
|
93
|
+
border-bottom-color: var(--print-breaking);
|
|
94
|
+
color: var(--print-breaking);
|
|
95
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/*! @medquantis/design-system | © 2026 MedQuantis SA | MIT License, see LICENSE */
|
|
2
|
+
/*
|
|
3
|
+
* MedQuantis slide-frame module of the homemade-claude-kit design contract 2.0.0. The roles are
|
|
4
|
+
* generated from tokens/kit/ by the design-system build; the class rules after them are copied
|
|
5
|
+
* from css/kit/slide-frame.css, written by hand against contract roles. Do not edit this file.
|
|
6
|
+
* kit-manifest.json lists it. For kit renderers only: the unprefixed names collide with app and
|
|
7
|
+
* Tailwind variables.
|
|
8
|
+
*/
|
|
9
|
+
:root {
|
|
10
|
+
--slide-bg: #fafaf8;
|
|
11
|
+
--slide-fg: #1a1a1a;
|
|
12
|
+
--slide-padding: 72px;
|
|
13
|
+
--slide-width: 1280px;
|
|
14
|
+
--slide-height: 720px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* Class rules of the MedQuantis slide-frame module for the homemade-claude-kit renderers
|
|
19
|
+
* (Plan-0002 increment 02). Written by hand against contract roles only: core, type, space-shape,
|
|
20
|
+
* dataviz and the slide-frame roles, which tokens/kit/ maps. The build copies these rules into
|
|
21
|
+
* dist/kit/slide-frame.css after the roles. build/kit-classes.md names the MedQuantis rule each
|
|
22
|
+
* class reproduces: css/slide.css, with the legal line bottom left and the slide number bottom
|
|
23
|
+
* right (owner ruling 11, guidelines/brand.md).
|
|
24
|
+
*
|
|
25
|
+
* Cascade: the kit inlines its base slide-frame.css before this module, so these rules restyle
|
|
26
|
+
* it; com-slide-deck adds its baseline (controls hint, presentation mode) after the design layer,
|
|
27
|
+
* so the rules for those classes carry one more element in their selector.
|
|
28
|
+
* The footer row and the source line use --tertiary, the tertiary grey of owner ruling 1.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/* mq-slide: the canvas, body text in Newsreader. The kit's render.py drops the shadow in the PDF. */
|
|
32
|
+
.slide {
|
|
33
|
+
border-radius: 0;
|
|
34
|
+
box-shadow: var(--shadow);
|
|
35
|
+
font-family: var(--font-body);
|
|
36
|
+
font-size: var(--font-size-md);
|
|
37
|
+
line-height: var(--line-height-body);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* mq-slide-label: mono capitals in navy, 48 px from the top, at the side margin. */
|
|
41
|
+
.slide-label {
|
|
42
|
+
top: var(--space-xl);
|
|
43
|
+
left: var(--slide-padding);
|
|
44
|
+
margin: 0;
|
|
45
|
+
font-weight: var(--font-weight-bold);
|
|
46
|
+
letter-spacing: 0.18em;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* mq-slide-foot: one row, the legal line at the left and the number at the right, 24 px above
|
|
50
|
+
the bottom edge, at the side margins. */
|
|
51
|
+
.slide-footer {
|
|
52
|
+
right: var(--slide-padding);
|
|
53
|
+
bottom: calc(var(--space-md) + var(--space-sm));
|
|
54
|
+
left: var(--slide-padding);
|
|
55
|
+
height: auto;
|
|
56
|
+
align-items: baseline;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
gap: calc(var(--space-md) + var(--space-sm));
|
|
59
|
+
color: var(--tertiary);
|
|
60
|
+
font-family: var(--font-mono);
|
|
61
|
+
font-size: var(--font-size-sm);
|
|
62
|
+
line-height: var(--line-height-tight);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* MedQuantis slides carry no logo in the footer row (owner ruling 11, guidelines/layout.md). */
|
|
66
|
+
.slide-logo {
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.slide-legal {
|
|
71
|
+
margin: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* mq-slide-number: the eyebrow size, tabular figures. */
|
|
75
|
+
.slide-number {
|
|
76
|
+
font-size: var(--font-size-xs);
|
|
77
|
+
font-variant-numeric: tabular-nums;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* A cited source on a slide: the note style of guidelines/typography.md, above the footer row. */
|
|
81
|
+
.slide .slide-source-bar {
|
|
82
|
+
right: var(--slide-padding);
|
|
83
|
+
bottom: calc(var(--space-md) + var(--space-sm) + var(--space-lg));
|
|
84
|
+
left: var(--slide-padding);
|
|
85
|
+
color: var(--tertiary);
|
|
86
|
+
font-family: var(--font-body);
|
|
87
|
+
font-size: var(--font-size-sm);
|
|
88
|
+
font-style: italic;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* The controls hint above the deck: a hint in Geist Mono, as in an empty state (guidelines/layout.md, App patterns). */
|
|
92
|
+
body .controls-hint {
|
|
93
|
+
color: var(--muted);
|
|
94
|
+
font-family: var(--font-mono);
|
|
95
|
+
font-size: var(--font-size-xs);
|
|
96
|
+
letter-spacing: 0.04em;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
body .controls-hint kbd {
|
|
100
|
+
border-color: var(--border);
|
|
101
|
+
border-radius: var(--radius-sm);
|
|
102
|
+
background: var(--surface);
|
|
103
|
+
color: var(--ink);
|
|
104
|
+
font-family: var(--font-mono);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* Presentation mode: the slide alone on an ink surround, without the desk shadow. */
|
|
108
|
+
html body.presenting {
|
|
109
|
+
background: var(--ink);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
html body.presenting .slide.active {
|
|
113
|
+
box-shadow: none;
|
|
114
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/*! @medquantis/design-system | © 2026 MedQuantis SA | MIT License, see LICENSE */
|
|
2
|
+
/*
|
|
3
|
+
* MedQuantis values for the space-shape module of the homemade-claude-kit design contract 2.0.0,
|
|
4
|
+
* generated from tokens/kit/ by the design-system build. Do not edit. kit-manifest.json lists it.
|
|
5
|
+
* For kit renderers only: the unprefixed names collide with app and Tailwind variables.
|
|
6
|
+
*/
|
|
7
|
+
:root {
|
|
8
|
+
--space-xs: 4px;
|
|
9
|
+
--space-xl: 48px;
|
|
10
|
+
--radius-sm: 3px;
|
|
11
|
+
--radius-pill: 6px;
|
|
12
|
+
--border-width: 1px;
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*! @medquantis/design-system | © 2026 MedQuantis SA | MIT License, see LICENSE */
|
|
2
|
+
/*
|
|
3
|
+
* MedQuantis values for the type module of the homemade-claude-kit design contract 2.0.0,
|
|
4
|
+
* generated from tokens/kit/ by the design-system build. Do not edit. kit-manifest.json lists it.
|
|
5
|
+
* For kit renderers only: the unprefixed names collide with app and Tailwind variables.
|
|
6
|
+
*/
|
|
7
|
+
:root {
|
|
8
|
+
--font-size-xs: 11px;
|
|
9
|
+
--font-size-sm: 13px;
|
|
10
|
+
--font-size-md: 16.5px;
|
|
11
|
+
--font-size-lg: 20px;
|
|
12
|
+
--font-size-xl: 56px;
|
|
13
|
+
--line-height-body: 1.55;
|
|
14
|
+
--line-height-tight: 1.15;
|
|
15
|
+
--font-weight-regular: 400;
|
|
16
|
+
--font-weight-bold: 500;
|
|
17
|
+
}
|