@neuravision/construct 2.2.0 → 2.3.1
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 +60 -0
- package/README.md +5 -3
- package/aperture.demo.html +21 -0
- package/components/README.md +42 -1
- package/components/_datum-shared.css +16 -7
- package/components/alert.css +4 -1
- package/components/aperture.css +441 -0
- package/components/card.css +6 -0
- package/components/drawer.css +3 -0
- package/components/field.css +3 -0
- package/components/index.css +3 -0
- package/components/modal.css +7 -1
- package/docs/aperture-review.md +55 -0
- package/docs/aperture.md +114 -0
- package/docs/assets/aperture-review/after-desktop.png +0 -0
- package/docs/assets/aperture-review/after-mobile.png +0 -0
- package/docs/assets/aperture-review/after-monochrome.png +0 -0
- package/docs/assets/aperture-review/before-desktop.png +0 -0
- package/docs/guidelines.md +3 -1
- package/examples/aperture/showcase.css +363 -0
- package/examples/aperture/showcase.js +145 -0
- package/package.json +4 -1
- package/schemas/components.schema.json +19 -1
- package/schemas/semantic.schema.json +18 -2
- package/scripts/build-tokens.mjs +20 -0
- package/standalone/aperture.css +3 -0
- package/tokens/components.json +13 -0
- package/tokens/primitives.json +14 -0
- package/tokens/semantic.dark.json +9 -0
- package/tokens/semantic.high-contrast-dark.json +9 -0
- package/tokens/semantic.high-contrast.json +9 -0
- package/tokens/semantic.light.json +10 -0
- package/tokens/tokens.css +150 -0
- package/tokens/tokens.js +166 -0
- package/tokens/tokens.json +166 -0
- package/tokens/tokens.ts +166 -0
package/components/drawer.css
CHANGED
|
@@ -131,6 +131,9 @@
|
|
|
131
131
|
.ct-drawer__body {
|
|
132
132
|
padding: var(--space-6) var(--space-7);
|
|
133
133
|
display: grid;
|
|
134
|
+
/* Clamped content track: projected content wraps or scrolls inside the
|
|
135
|
+
slot instead of widening the surface. See `.ct-card__body`. */
|
|
136
|
+
grid-template-columns: minmax(0, 1fr);
|
|
134
137
|
gap: var(--space-4);
|
|
135
138
|
overflow-y: auto;
|
|
136
139
|
flex: 1;
|
package/components/field.css
CHANGED
package/components/index.css
CHANGED
package/components/modal.css
CHANGED
|
@@ -52,6 +52,9 @@
|
|
|
52
52
|
.ct-modal__body {
|
|
53
53
|
padding: var(--space-6) var(--space-7);
|
|
54
54
|
display: grid;
|
|
55
|
+
/* Clamped content track: projected content wraps or scrolls inside the
|
|
56
|
+
slot instead of widening the surface. See `.ct-card__body`. */
|
|
57
|
+
grid-template-columns: minmax(0, 1fr);
|
|
55
58
|
gap: var(--space-4);
|
|
56
59
|
}
|
|
57
60
|
|
|
@@ -116,7 +119,9 @@
|
|
|
116
119
|
--ct-confirmation-icon-color: var(--color-text-secondary);
|
|
117
120
|
|
|
118
121
|
display: grid;
|
|
119
|
-
|
|
122
|
+
/* The content column is clamped so long words or wide embedded content
|
|
123
|
+
stay inside the dialog instead of stretching it. */
|
|
124
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
120
125
|
gap: var(--space-4);
|
|
121
126
|
align-items: start;
|
|
122
127
|
}
|
|
@@ -135,6 +140,7 @@
|
|
|
135
140
|
|
|
136
141
|
.ct-confirmation__content {
|
|
137
142
|
display: grid;
|
|
143
|
+
grid-template-columns: minmax(0, 1fr);
|
|
138
144
|
gap: var(--space-2);
|
|
139
145
|
}
|
|
140
146
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Aperture – Review und Politur
|
|
2
|
+
|
|
3
|
+
Stand: 16. September 2026. Grundlage ist die vorhandene Aperture-Fassung im
|
|
4
|
+
Arbeitsverzeichnis, visuell geprüft in der lokalen Vorschau und in Storybook.
|
|
5
|
+
|
|
6
|
+
## Einschätzung
|
|
7
|
+
|
|
8
|
+
Das geteilte, versetzte Oval ist der stärkste Identitätsträger. Die Kombination
|
|
9
|
+
aus Papier, Kobalt und großer Groteskschrift gibt ihm einen überzeugenden Rahmen.
|
|
10
|
+
Der ursprüngliche Einstieg funktioniert bereits gut. Im weiteren Seitenverlauf
|
|
11
|
+
wird die Formidee jedoch kaum fortgeführt: gleichförmige runde Karten, ein üblicher
|
|
12
|
+
Pillen-Button und ein kleiner Footer schwächen die Eigenständigkeit.
|
|
13
|
+
|
|
14
|
+
Die Politur macht **Fuge und Versatz** zu einer wiederkehrenden Gestaltungsregel.
|
|
15
|
+
Die Einschätzung zur Wiedererkennung ist ein Designurteil; eine Messung mit
|
|
16
|
+
Nutzern oder ein Vergleich mit anderen Marken war nicht Teil dieses Durchgangs.
|
|
17
|
+
|
|
18
|
+
## Befunde und Änderungen
|
|
19
|
+
|
|
20
|
+
| Befund | Umsetzung |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| Die Signatur steckt hauptsächlich im großen Signet. | Geteilte Trennlinien übernehmen die 46/8/46-Proportion; zweite Überschriftszeilen treten wiederkehrend aus der Achse. |
|
|
23
|
+
| Der Pfeil wirkt wie ein Standarddetail innerhalb einer Pille. | Beschriftung und Pfeilscheibe erhalten eine echte Fuge und einen vertikalen Versatz. Beides bleibt eine gemeinsame Klickfläche und ein Tastaturziel. |
|
|
24
|
+
| Drei gleich ausgerichtete, stark gerundete Karten wirken austauschbar. | Ruhigere 4-px-Radien, gestaffelte Musterflächen, größere monochrome Formstudie und präzisere Typografie innerhalb der jeweiligen Fläche. Auf kleinen Breiten entfällt die Staffelung. |
|
|
25
|
+
| Der Abschluss besitzt wenig visuelles Gewicht. | Eine große Wort-Bild-Marke und ein kurzer Leitsatz schließen die Komposition ab. |
|
|
26
|
+
| Globale Link-Hover-Farben können die helle Beschriftung auf dunklen Aktionen überschreiben. | Aperture erhält explizite Hover-/Aktivfarben; ein Storybook-Test prüft den Kontrasterhalt. |
|
|
27
|
+
| Versetzte Aktionen benötigen eine saubere Spiegelung in RTL. | Logische Innenabstände halten die Fuge offen; ein Geometrietest sichert sie ab. Disclosure-Pfeile zeigen auch in RTL nach unten beziehungsweise oben. |
|
|
28
|
+
| Der fokussierte Sprunglink-Zielbereich übernimmt die orange Foundation-Markierung. | Der Inhaltsfokus folgt jetzt der Aperture-Tintenfarbe. |
|
|
29
|
+
|
|
30
|
+
Das Oval selbst, seine Fuge und seine Proportionen bleiben erhalten. Kobalt
|
|
31
|
+
konzentriert sich auf die Hauptfläche. Die neue monochrome Story zeigt, wie die
|
|
32
|
+
Komposition ohne den Farbakzent funktioniert. Neue öffentliche Bausteine sind
|
|
33
|
+
`ct-aperture-line` und `ct-aperture-rule`; die Komposition bleibt im Beispiel-CSS.
|
|
34
|
+
|
|
35
|
+
## Bildvergleich
|
|
36
|
+
|
|
37
|
+
| Vorher, 1440 px | Nachher, 1440 px |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
|  |  |
|
|
40
|
+
|
|
41
|
+
Weitere Ansichten: [Mobil, 390 px](assets/aperture-review/after-mobile.png) ·
|
|
42
|
+
[Monochrom](assets/aperture-review/after-monochrome.png).
|
|
43
|
+
|
|
44
|
+
## Verifikation
|
|
45
|
+
|
|
46
|
+
- `npm run build` und `npm run check`: erfolgreich, einschließlich Token-, Kontrast-, CSS- und Exportprüfungen.
|
|
47
|
+
- `npm test`: 447 bestandene Tests – 56 Behavior-, 378 Storybook-, 6 Touch- und 7 Forced-Colors-Tests; darunter 10 Aperture-Stories.
|
|
48
|
+
- `npm run storybook:build`: erfolgreich. Vite meldet Hinweise zu Chunk-Größen und Plugin-Laufzeiten.
|
|
49
|
+
- Zusätzliche Chromium-Prüfung: 320, 360, 390, 600, 850, 851, 900, 1024, 1440 und 1920 px in allen vier Themes; kein horizontaler Überlauf in diesen 40 Kombinationen.
|
|
50
|
+
- Zusätzlich geprüft: RTL-Layout, lange Aktionsbeschriftungen, Sprunglink und Tastaturfokus, unbewegter Pfeil bei reduzierter Bewegung sowie 200 % Textgröße bei 720 px Fensterbreite.
|
|
51
|
+
- Visuell kontrolliert: Desktop, Mobil, Zwischenbreite, Dark, High Contrast Dark, Forced Colors, RTL, Monochrom und vergrößerter Text.
|
|
52
|
+
|
|
53
|
+
Screenshots dokumentieren den lokalen Chromium-Stand. Die automatisierten
|
|
54
|
+
Accessibility-Prüfungen ersetzen keine vollständige manuelle Prüfung mit
|
|
55
|
+
Screenreader oder in weiteren Browsern.
|
package/docs/aperture.md
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Aperture
|
|
2
|
+
|
|
3
|
+
Aperture is Construct's additional signature look. Its identifying shape is an oval
|
|
4
|
+
split into two halves, separated by an eight-percent seam and shifted vertically.
|
|
5
|
+
That silhouette repeats at wordmark and poster scale. Oversized, tightly set grotesk
|
|
6
|
+
type and a displaced second line give the composition its rhythm. Paper, dark ink
|
|
7
|
+
and one cobalt field keep the hierarchy clear. The seam also separates action labels
|
|
8
|
+
from their lowered arrow discs and interrupts the composition's horizontal rules.
|
|
9
|
+
The identity should remain legible in monochrome.
|
|
10
|
+
|
|
11
|
+
Datum uses measured lines, technical annotations and orange registration marks.
|
|
12
|
+
Aperture uses a bold silhouette, editorial scale and open space. Choose a grammar
|
|
13
|
+
for a composition; avoid stacking both signatures on the same surface.
|
|
14
|
+
|
|
15
|
+
## Preview
|
|
16
|
+
|
|
17
|
+
Run `npm run storybook` and open **Patterns → Aperture Grammar → Aperture / The Full Look**.
|
|
18
|
+
Stories also cover dark, high contrast, a compact container, native theme switching,
|
|
19
|
+
individual primitives, all four theme scopes, right-to-left layout, a monochrome
|
|
20
|
+
composition and long action labels. See the [polish review](aperture-review.md)
|
|
21
|
+
for the visual findings and before/after comparison.
|
|
22
|
+
|
|
23
|
+
For the standalone specimen, run `npx vite --host 127.0.0.1 --port 4173` from the
|
|
24
|
+
repository and open `http://127.0.0.1:4173/aperture.demo.html`.
|
|
25
|
+
Run `npm run build` first after a fresh checkout. Serve the page over HTTP so its
|
|
26
|
+
shared ES module can load. The page needs no hosted fonts or image services.
|
|
27
|
+
|
|
28
|
+
## Integration
|
|
29
|
+
|
|
30
|
+
```css
|
|
31
|
+
@import '@neuravision/construct/foundations.css';
|
|
32
|
+
@import '@neuravision/construct/components/aperture.css';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<section class="ct-aperture" data-theme="light">
|
|
37
|
+
<p class="ct-aperture-label">A new perspective</p>
|
|
38
|
+
<h2 class="ct-aperture-heading">Room for character.</h2>
|
|
39
|
+
<a class="ct-aperture-action" href="/work">
|
|
40
|
+
Explore the work
|
|
41
|
+
<span class="ct-aperture-action__icon" aria-hidden="true">↗</span>
|
|
42
|
+
</a>
|
|
43
|
+
</section>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The full component bundle includes Aperture too. Classes opt in explicitly;
|
|
47
|
+
existing Datum components keep their styles. Theme scopes inherit normally:
|
|
48
|
+
omit `data-theme` to follow the parent or the system preference.
|
|
49
|
+
|
|
50
|
+
The composition in `examples/aperture/showcase.css` is example page layout.
|
|
51
|
+
The reusable component contract lives in `components/aperture.css`. The native
|
|
52
|
+
radio handler in `examples/aperture/showcase.js` only changes the preview's theme;
|
|
53
|
+
the signature primitives themselves require no JavaScript.
|
|
54
|
+
|
|
55
|
+
## Vocabulary
|
|
56
|
+
|
|
57
|
+
| Primitive | Use |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `ct-aperture` | Scoped typography, palette, selection, focus and query container |
|
|
60
|
+
| `ct-aperture-mark` | Decorative split oval; set `aria-hidden="true"` |
|
|
61
|
+
| `ct-aperture-wordmark` | Mark and name on a shared baseline |
|
|
62
|
+
| `ct-aperture-label` | Small section label with restrained spacing |
|
|
63
|
+
| `ct-aperture-display` / `ct-aperture-heading` | Fluid display and section typography |
|
|
64
|
+
| `ct-aperture-line` | Block line within a heading; subsequent lines step out by 0.24em |
|
|
65
|
+
| `ct-aperture-rule` | Decorative split rule with a 46 / 8 / 46 rhythm; set `aria-hidden="true"` |
|
|
66
|
+
| `ct-aperture-poster` | A strong field for one mark and a caption |
|
|
67
|
+
| `ct-aperture-action` / `--quiet` | Native action with detached circular arrow |
|
|
68
|
+
| `ct-aperture-panel` | A quiet supporting surface |
|
|
69
|
+
| `ct-aperture-choices` / `ct-aperture-choice` | Fieldset and labels around native radios |
|
|
70
|
+
| `ct-aperture-disclosure` | Native `details` and `summary` content |
|
|
71
|
+
|
|
72
|
+
Put `ct-aperture-poster__art` around the mark and
|
|
73
|
+
`ct-aperture-poster__caption` on the caption. Set
|
|
74
|
+
`--ct-aperture-mark-size` to a CSS length or percentage to resize a mark.
|
|
75
|
+
Use a link for navigation and a button for an action; disable buttons with the
|
|
76
|
+
native `disabled` attribute. Supply actual destinations and product behavior.
|
|
77
|
+
|
|
78
|
+
Action text and `ct-aperture-action__icon` belong inside the same native control.
|
|
79
|
+
The six-pixel visual seam is part of its clickable area; the disc is lowered eight
|
|
80
|
+
pixels and aligns with the label on hover. Keep the icon decorative, never a second
|
|
81
|
+
button. Inline SVG provides a consistent arrow shape; a text arrow also works.
|
|
82
|
+
|
|
83
|
+
Use `ct-aperture-line` on spans inside a single heading, with whitespace between
|
|
84
|
+
the spans. The offset follows the reading direction and allows wrapping. Split
|
|
85
|
+
rules are decorative composition breaks, not semantic `hr` replacements.
|
|
86
|
+
|
|
87
|
+
## Design constraints
|
|
88
|
+
|
|
89
|
+
- Use one dominant mark per composition. Smaller repetitions establish continuity.
|
|
90
|
+
- Keep the seam and offset proportional. Do not stretch the individual halves.
|
|
91
|
+
- Use typography and space for hierarchy. Reserve cobalt for the main focal area.
|
|
92
|
+
- Keep content text out of decorative cutouts. Let long labels and translated copy wrap.
|
|
93
|
+
- Keep the giant display for short headlines. Use the heading scale for longer text.
|
|
94
|
+
- Repeat the seam and offset in a few purposeful places. Avoid turning every edge into a motif.
|
|
95
|
+
- Keep supporting panels restrained; the default four-pixel radius leaves the oval as the dominant curve.
|
|
96
|
+
|
|
97
|
+
Colors resolve from cobalt/graphite primitives through `color.aperture.*` semantic
|
|
98
|
+
roles to `aperture.*` component tokens. The heading family uses the local Arial /
|
|
99
|
+
Helvetica / sans-serif stack, independent of Construct's optional Lato font import.
|
|
100
|
+
Customize token sources and regenerate outputs with `npm run build`.
|
|
101
|
+
|
|
102
|
+
## Accessibility and verification
|
|
103
|
+
|
|
104
|
+
The token pipeline gates ink and secondary text against paper and surface, and
|
|
105
|
+
poster text against its accent, at 4.5:1 in each theme. Keyboard focus uses a visible
|
|
106
|
+
outline; selected radios also change border and weight. Actions and theme labels
|
|
107
|
+
have at least 44-pixel targets. Radio groups and disclosures use browser-native
|
|
108
|
+
keyboard behavior. Hover motion is disabled for reduced-motion preferences.
|
|
109
|
+
Forced colors preserves the silhouette with system colors, control borders and
|
|
110
|
+
an underlined selected radio label.
|
|
111
|
+
|
|
112
|
+
Storybook includes interaction and automated accessibility checks. Touch and
|
|
113
|
+
forced-colors suites cover the new controls. These are bounded automated checks,
|
|
114
|
+
not a claim that any consuming page is completely WCAG conformant.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/guidelines.md
CHANGED
|
@@ -185,7 +185,9 @@ Rules that keep the signature strong and accessible:
|
|
|
185
185
|
reference element. Never let two orange edges compete; if everything is highlighted, nothing is.
|
|
186
186
|
- **The component that owns the border owns the datum.** Use `ct-frame ct-frame--datum` for framed
|
|
187
187
|
exhibits and put clipping on `ct-frame__content`. Do not attach overflow clipping to the outer frame
|
|
188
|
-
or rebuild the corner in product CSS.
|
|
188
|
+
or rebuild the corner in product CSS. The registration mark absorbs the owner's hairline — it is
|
|
189
|
+
painted one border width further out — so the corner reads as one orange arc on strong borders as
|
|
190
|
+
well as subtle ones.
|
|
189
191
|
- **Orange is never text.** Labels and values stay on `--color-text-*` neutrals; orange is carried by
|
|
190
192
|
non-text ticks, edges, rules, and lines.
|
|
191
193
|
- **Edges are `--color-brand-accent`; meaning-bearing fills are `--color-brand-accent-strong`**
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/* Composition for the Aperture specimen. Public primitives live in
|
|
2
|
+
components/aperture.css; this file contains only page layout. */
|
|
3
|
+
.aperture-demo {
|
|
4
|
+
inline-size: 100%;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.aperture-demo__page {
|
|
8
|
+
max-inline-size: 1600px;
|
|
9
|
+
margin-inline: auto;
|
|
10
|
+
padding-inline: clamp(1.25rem, 4.5cqi, 5rem);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.aperture-demo__header {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: space-between;
|
|
17
|
+
flex-wrap: wrap;
|
|
18
|
+
gap: var(--space-6);
|
|
19
|
+
padding-block: var(--space-7);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.aperture-demo__header .ct-aperture-wordmark {
|
|
23
|
+
font-size: 28px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.aperture-demo__nav {
|
|
27
|
+
display: flex;
|
|
28
|
+
align-items: center;
|
|
29
|
+
flex-wrap: wrap;
|
|
30
|
+
gap: clamp(1rem, 3cqi, 3rem);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.aperture-demo__link {
|
|
34
|
+
display: inline-flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
min-block-size: 44px;
|
|
37
|
+
color: inherit;
|
|
38
|
+
font-size: var(--font-size-sm);
|
|
39
|
+
text-decoration: underline;
|
|
40
|
+
text-decoration-thickness: 1px;
|
|
41
|
+
text-underline-offset: 0.3em;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.aperture-demo__link:is(:hover, :active) {
|
|
45
|
+
color: inherit;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.aperture-demo__skip {
|
|
49
|
+
position: absolute;
|
|
50
|
+
inset-block-start: 0;
|
|
51
|
+
inset-inline-start: var(--space-6);
|
|
52
|
+
z-index: 1;
|
|
53
|
+
padding: var(--space-5);
|
|
54
|
+
background: var(--component-aperture-paper);
|
|
55
|
+
color: inherit;
|
|
56
|
+
transform: translateY(-150%);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.aperture-demo__skip:focus {
|
|
60
|
+
transform: none;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.aperture-demo__hero {
|
|
64
|
+
display: grid;
|
|
65
|
+
grid-template-columns: 1.15fr 0.85fr;
|
|
66
|
+
gap: 4cqi;
|
|
67
|
+
padding-block: clamp(2.5rem, 5cqi, 5rem) var(--space-10);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.aperture-demo__intro {
|
|
71
|
+
display: flex;
|
|
72
|
+
flex-direction: column;
|
|
73
|
+
align-items: start;
|
|
74
|
+
min-inline-size: 0;
|
|
75
|
+
padding-block: var(--space-5) var(--space-4);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.aperture-demo__intro .ct-aperture-display {
|
|
79
|
+
margin-block: clamp(2.5rem, 4.6cqi, 5rem) clamp(2rem, 3.5cqi, 4rem);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.aperture-demo__eyebrow {
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-wrap: wrap;
|
|
85
|
+
gap: var(--space-4) var(--space-7);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.aperture-demo__eyebrow span:last-child {
|
|
89
|
+
color: var(--component-aperture-muted);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.aperture-demo__poster-heading {
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: start;
|
|
95
|
+
justify-content: space-between;
|
|
96
|
+
gap: var(--space-5);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.aperture-demo__poster-heading > :last-child {
|
|
100
|
+
font-size: var(--font-size-xs);
|
|
101
|
+
font-variant-numeric: tabular-nums;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.aperture-demo__description {
|
|
105
|
+
max-inline-size: 29ch;
|
|
106
|
+
font-size: clamp(1rem, 0.75rem + 0.7cqi, 1.4rem);
|
|
107
|
+
line-height: 1.55;
|
|
108
|
+
color: var(--component-aperture-muted);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.aperture-demo__intro .ct-aperture-action {
|
|
112
|
+
margin-block-start: var(--space-8);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.aperture-demo__hero .ct-aperture-poster {
|
|
116
|
+
min-block-size: 540px;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.aperture-demo__hero .ct-aperture-poster__art .ct-aperture-mark {
|
|
120
|
+
--ct-aperture-mark-size: 86%;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.aperture-demo__edition {
|
|
124
|
+
display: flex;
|
|
125
|
+
align-items: center;
|
|
126
|
+
justify-content: space-between;
|
|
127
|
+
flex-wrap: wrap;
|
|
128
|
+
gap: var(--space-5);
|
|
129
|
+
padding-block: var(--space-6);
|
|
130
|
+
font-size: var(--font-size-xs);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.aperture-demo__edition span:last-child {
|
|
134
|
+
color: var(--component-aperture-muted);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.aperture-demo__section {
|
|
138
|
+
padding-block: clamp(4rem, 8cqi, 8rem);
|
|
139
|
+
scroll-margin-block-start: var(--space-7);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.aperture-demo__section-head {
|
|
143
|
+
display: grid;
|
|
144
|
+
grid-template-columns: 1.35fr 0.65fr;
|
|
145
|
+
gap: var(--space-9);
|
|
146
|
+
align-items: end;
|
|
147
|
+
margin-block-end: var(--space-10);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.aperture-demo__section-head .ct-aperture-label {
|
|
151
|
+
margin-block-end: var(--space-7);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.aperture-demo__section-head > p {
|
|
155
|
+
max-inline-size: 36ch;
|
|
156
|
+
color: var(--component-aperture-muted);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.aperture-demo__specimens {
|
|
160
|
+
display: grid;
|
|
161
|
+
grid-template-columns: 1fr 1.2fr 1fr;
|
|
162
|
+
align-items: start;
|
|
163
|
+
gap: var(--space-6);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.aperture-demo__specimen {
|
|
167
|
+
display: flex;
|
|
168
|
+
flex-direction: column;
|
|
169
|
+
gap: var(--space-6);
|
|
170
|
+
min-inline-size: 0;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.aperture-demo__specimen:nth-child(2) {
|
|
174
|
+
margin-block-start: var(--space-8);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.aperture-demo__specimen:nth-child(3) {
|
|
178
|
+
margin-block-start: var(--space-10);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.aperture-demo__specimen h3 {
|
|
182
|
+
display: flex;
|
|
183
|
+
align-items: baseline;
|
|
184
|
+
gap: var(--space-4);
|
|
185
|
+
font-size: var(--font-size-xl);
|
|
186
|
+
letter-spacing: -0.035em;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.aperture-demo__index {
|
|
190
|
+
color: var(--component-aperture-muted);
|
|
191
|
+
font-size: var(--font-size-xs);
|
|
192
|
+
font-weight: var(--font-weight-regular);
|
|
193
|
+
letter-spacing: 0;
|
|
194
|
+
font-variant-numeric: tabular-nums;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.aperture-demo__specimen p {
|
|
198
|
+
margin-block-start: var(--space-3);
|
|
199
|
+
font-size: var(--font-size-sm);
|
|
200
|
+
color: var(--component-aperture-muted);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.aperture-demo__sample {
|
|
204
|
+
position: relative;
|
|
205
|
+
container-type: inline-size;
|
|
206
|
+
display: flex;
|
|
207
|
+
align-items: center;
|
|
208
|
+
justify-content: center;
|
|
209
|
+
min-block-size: 260px;
|
|
210
|
+
padding: var(--space-10) var(--space-6) var(--space-6);
|
|
211
|
+
border: 1px solid var(--component-aperture-border);
|
|
212
|
+
border-radius: var(--component-aperture-panel-radius);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.aperture-demo__sample-label {
|
|
216
|
+
position: absolute;
|
|
217
|
+
inset-block-start: var(--space-5);
|
|
218
|
+
inset-inline: var(--space-6);
|
|
219
|
+
font-size: 10px;
|
|
220
|
+
font-weight: var(--font-weight-regular);
|
|
221
|
+
letter-spacing: 0.06em;
|
|
222
|
+
line-height: 1.5;
|
|
223
|
+
text-transform: uppercase;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.aperture-demo__sample--mark {
|
|
227
|
+
color: var(--component-aperture-ink);
|
|
228
|
+
background: var(--component-aperture-surface);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.aperture-demo__marks {
|
|
232
|
+
display: flex;
|
|
233
|
+
align-items: end;
|
|
234
|
+
justify-content: center;
|
|
235
|
+
gap: clamp(1.5rem, 12cqi, 3rem);
|
|
236
|
+
inline-size: 100%;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.aperture-demo__sample--mark .ct-aperture-mark:first-child {
|
|
240
|
+
--ct-aperture-mark-size: clamp(80px, 40cqi, 120px);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.aperture-demo__sample--mark .ct-aperture-mark:last-child {
|
|
244
|
+
--ct-aperture-mark-size: 32px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.aperture-demo__sample--type {
|
|
248
|
+
justify-content: start;
|
|
249
|
+
color: var(--component-aperture-paper);
|
|
250
|
+
background: var(--component-aperture-ink);
|
|
251
|
+
font-weight: var(--font-weight-bold);
|
|
252
|
+
letter-spacing: -0.07em;
|
|
253
|
+
line-height: 1;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.aperture-demo__sample--type > div {
|
|
257
|
+
font-size: clamp(2rem, 20cqi, 5.5rem);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.aperture-demo__sample--action {
|
|
261
|
+
flex-direction: column;
|
|
262
|
+
gap: var(--space-5);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.aperture-demo__note {
|
|
266
|
+
display: grid;
|
|
267
|
+
grid-template-columns: 0.75fr 1.25fr;
|
|
268
|
+
align-items: start;
|
|
269
|
+
gap: clamp(2rem, 6cqi, 6rem);
|
|
270
|
+
padding-block: var(--space-8) clamp(4rem, 8cqi, 8rem);
|
|
271
|
+
scroll-margin-block-start: var(--space-7);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.aperture-demo__note .ct-aperture-label {
|
|
275
|
+
margin-block-end: var(--space-6);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.aperture-demo__footer {
|
|
279
|
+
padding-block-end: var(--space-7);
|
|
280
|
+
font-size: var(--font-size-xs);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.aperture-demo__signoff {
|
|
284
|
+
display: flex;
|
|
285
|
+
align-items: end;
|
|
286
|
+
justify-content: space-between;
|
|
287
|
+
flex-wrap: wrap;
|
|
288
|
+
gap: var(--space-7);
|
|
289
|
+
padding-block: clamp(2.5rem, 5cqi, 5rem);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.aperture-demo__signature {
|
|
293
|
+
--ct-aperture-mark-size: 0.8em;
|
|
294
|
+
gap: 0.2em;
|
|
295
|
+
font-size: clamp(3.5rem, 10.5cqi, 10rem);
|
|
296
|
+
letter-spacing: -0.075em;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.aperture-demo__signoff > p {
|
|
300
|
+
padding-block-end: 0.25em;
|
|
301
|
+
font-size: clamp(1.25rem, 2.5cqi, 2rem);
|
|
302
|
+
font-weight: var(--font-weight-bold);
|
|
303
|
+
letter-spacing: -0.035em;
|
|
304
|
+
line-height: 1.2;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.aperture-demo__colophon {
|
|
308
|
+
display: flex;
|
|
309
|
+
align-items: center;
|
|
310
|
+
justify-content: space-between;
|
|
311
|
+
flex-wrap: wrap;
|
|
312
|
+
gap: var(--space-6);
|
|
313
|
+
color: var(--component-aperture-muted);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
@container (max-width: 850px) {
|
|
317
|
+
.aperture-demo__hero,
|
|
318
|
+
.aperture-demo__section-head,
|
|
319
|
+
.aperture-demo__note {
|
|
320
|
+
grid-template-columns: 1fr;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.aperture-demo__hero {
|
|
324
|
+
gap: var(--space-9);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.aperture-demo__intro .ct-aperture-display {
|
|
328
|
+
font-size: clamp(3.25rem, 0.75rem + 15cqi, 8.5rem);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.aperture-demo__hero .ct-aperture-poster {
|
|
332
|
+
min-block-size: 0;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.aperture-demo__hero .ct-aperture-poster__art .ct-aperture-mark {
|
|
336
|
+
--ct-aperture-mark-size: min(65%, 320px);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.aperture-demo__specimens {
|
|
340
|
+
grid-template-columns: 1fr;
|
|
341
|
+
gap: var(--space-9);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.aperture-demo__specimen:nth-child(n) {
|
|
345
|
+
margin-block-start: 0;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.aperture-demo__sample {
|
|
349
|
+
min-block-size: 240px;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.aperture-demo__sample--type > div {
|
|
353
|
+
font-size: clamp(2rem, 20cqi, 6rem);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
@media (forced-colors: active) {
|
|
358
|
+
.aperture-demo__sample {
|
|
359
|
+
color: CanvasText;
|
|
360
|
+
background: Canvas;
|
|
361
|
+
border-color: CanvasText;
|
|
362
|
+
}
|
|
363
|
+
}
|