@fluid-theme/core 2.1.1 → 2.2.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 +14 -0
- package/dist/fluid-1x.min.css +1 -1
- package/dist/fluid-fonts-archivo.min.css +1 -1
- package/dist/fluid-fonts-bodoni.min.css +1 -1
- package/dist/fluid-fonts.min.css +1 -1
- package/dist/fluid-legacy-1x.css +1 -1
- package/dist/fluid-nav.min.css +1 -1
- package/dist/fluid-people.min.css +3 -0
- package/dist/fluid-places.min.css +3 -0
- package/dist/fluid-toc.min.css +1 -1
- package/dist/fluid-zero.min.css +1 -1
- package/dist/fluid.min.css +1 -1
- package/package.json +3 -1
- package/src/components/people.css +264 -0
- package/src/components/places.css +228 -0
- package/src/fluid.css +1 -1
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluid Framework - Places (opt-in module)
|
|
3
|
+
* @layer components
|
|
4
|
+
*
|
|
5
|
+
* dist/fluid-places.min.css (package export "./places"). Link it after core.
|
|
6
|
+
* Contact lists, opening hours, the outline map with numbered pins, and the
|
|
7
|
+
* numbered list that matches it. Without this file the markup is plain HTML:
|
|
8
|
+
* a definition list, a table, an image and an ordered list.
|
|
9
|
+
*
|
|
10
|
+
* CONTACT LIST
|
|
11
|
+
* <dl class="contact-list">
|
|
12
|
+
* <div><dt>Phone</dt><dd><a href="tel:+351296000000">+351 296 000 000</a></dd></div>
|
|
13
|
+
* </dl>
|
|
14
|
+
*
|
|
15
|
+
* HOURS
|
|
16
|
+
* <table class="hours"><caption>Opening hours</caption>
|
|
17
|
+
* <tbody><tr><th scope="row">Mon to Fri</th><td>09:00 to 18:00</td></tr></tbody>
|
|
18
|
+
* </table>
|
|
19
|
+
*
|
|
20
|
+
* MAP: an outline drawn at build time (scripts/build-map.mjs). No script,
|
|
21
|
+
* no tiles, no request to another site; it follows light and dark because
|
|
22
|
+
* every colour is a token. The pins are HTML (so they stay a readable size
|
|
23
|
+
* at any width) and hidden from assistive tech: the figure carries the
|
|
24
|
+
* description and the numbered list below it carries the places.
|
|
25
|
+
* <figure class="map">
|
|
26
|
+
* <div class="map__frame" role="img" aria-label="..." style="aspect-ratio: 960 / 420">
|
|
27
|
+
* <svg class="map__svg" viewBox="0 0 960 420" aria-hidden="true"><path class="map__land" d="..."/></svg>
|
|
28
|
+
* <span class="map__pin" data-n="1" style="--x: 41.2%; --y: 63.3%" aria-hidden="true"></span>
|
|
29
|
+
* </div>
|
|
30
|
+
* <figcaption>...</figcaption>
|
|
31
|
+
* </figure>
|
|
32
|
+
*
|
|
33
|
+
* PLACE LIST (matches the pins)
|
|
34
|
+
* <ol class="place-list"><li class="place">
|
|
35
|
+
* <span class="place__num" aria-hidden="true">1</span>
|
|
36
|
+
* <div class="place__body"><h3>...</h3><address>...</address><p class="place__links">...</p></div>
|
|
37
|
+
* </li></ol>
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
@layer components {
|
|
41
|
+
/* ========================================
|
|
42
|
+
CONTACT LIST
|
|
43
|
+
======================================== */
|
|
44
|
+
|
|
45
|
+
.contact-list { margin: 0; }
|
|
46
|
+
|
|
47
|
+
.contact-list > div {
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-template-columns: minmax(5.5rem, 0.5fr) minmax(0, 2fr);
|
|
50
|
+
gap: var(--space-xs) var(--space-m);
|
|
51
|
+
align-items: baseline;
|
|
52
|
+
padding-block: var(--space-s);
|
|
53
|
+
border-block-start: var(--border-width) solid var(--color-border);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.contact-list > div:last-child { border-block-end: var(--border-width) solid var(--color-border); }
|
|
57
|
+
|
|
58
|
+
.contact-list dt, .contact-list dd { margin: 0; }
|
|
59
|
+
|
|
60
|
+
.contact-list dd {
|
|
61
|
+
font-size: var(--step-1);
|
|
62
|
+
font-variant-numeric: lining-nums;
|
|
63
|
+
overflow-wrap: anywhere;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.contact-list address { margin: 0; }
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
/* ========================================
|
|
70
|
+
HOURS
|
|
71
|
+
======================================== */
|
|
72
|
+
|
|
73
|
+
.hours {
|
|
74
|
+
inline-size: 100%;
|
|
75
|
+
max-inline-size: 28rem;
|
|
76
|
+
font-size: var(--step-0);
|
|
77
|
+
font-variant-numeric: lining-nums tabular-nums;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.hours caption {
|
|
81
|
+
caption-side: top;
|
|
82
|
+
text-align: start;
|
|
83
|
+
padding-block-end: var(--space-xs);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.hours tbody th {
|
|
87
|
+
text-align: start;
|
|
88
|
+
font-weight: var(--weight-normal);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.hours td { text-align: end; }
|
|
92
|
+
.hours [data-closed] { color: var(--color-text-muted); }
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/* ========================================
|
|
96
|
+
MAP
|
|
97
|
+
======================================== */
|
|
98
|
+
|
|
99
|
+
.map {
|
|
100
|
+
--_pin: 1.75rem;
|
|
101
|
+
color: var(--accent-ink);
|
|
102
|
+
margin: 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/* The coordinates are not text: a right-to-left page does not mirror the pins. */
|
|
106
|
+
.map__frame {
|
|
107
|
+
direction: ltr;
|
|
108
|
+
position: relative;
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
inline-size: 100%;
|
|
111
|
+
background: color-mix(in oklab, currentColor 9%, var(--color-background));
|
|
112
|
+
border: var(--border-width) solid var(--color-border);
|
|
113
|
+
border-radius: var(--radius-card);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.map__svg {
|
|
117
|
+
position: absolute;
|
|
118
|
+
inset: 0;
|
|
119
|
+
inline-size: 100%;
|
|
120
|
+
block-size: 100%;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.map__land {
|
|
124
|
+
fill: color-mix(in oklab, currentColor 24%, var(--color-background));
|
|
125
|
+
stroke: currentColor;
|
|
126
|
+
stroke-width: 1.25;
|
|
127
|
+
stroke-linejoin: round;
|
|
128
|
+
vector-effect: non-scaling-stroke;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* Physical left/top: the map's coordinates do not flip in right-to-left. */
|
|
132
|
+
.map__pin {
|
|
133
|
+
position: absolute;
|
|
134
|
+
left: var(--x);
|
|
135
|
+
top: var(--y);
|
|
136
|
+
translate: -50% -50%;
|
|
137
|
+
display: grid;
|
|
138
|
+
place-items: center;
|
|
139
|
+
inline-size: var(--_pin);
|
|
140
|
+
block-size: var(--_pin);
|
|
141
|
+
border-radius: var(--radius-full);
|
|
142
|
+
background: var(--accent-fill);
|
|
143
|
+
color: var(--on-accent-fill);
|
|
144
|
+
border: var(--border-width-thick) solid var(--color-background);
|
|
145
|
+
font: var(--weight-semibold) var(--step--1) / 1 var(--font-body);
|
|
146
|
+
font-variant-numeric: lining-nums tabular-nums;
|
|
147
|
+
box-shadow: 0 0 0 var(--border-width) var(--accent-fill);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.map__pin::before { content: attr(data-n); }
|
|
151
|
+
|
|
152
|
+
.map figcaption {
|
|
153
|
+
margin-block-start: var(--space-xs);
|
|
154
|
+
font-size: var(--step--1);
|
|
155
|
+
color: var(--color-text-muted);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* ========================================
|
|
159
|
+
DIRECTIONS: plain links to Google Maps and Apple Maps
|
|
160
|
+
======================================== */
|
|
161
|
+
|
|
162
|
+
.directions {
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-wrap: wrap;
|
|
165
|
+
gap: var(--space-xs) var(--space-m);
|
|
166
|
+
margin: var(--space-s) 0 0;
|
|
167
|
+
padding: 0;
|
|
168
|
+
list-style: none;
|
|
169
|
+
font-size: var(--step--1);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.directions li { margin: 0; }
|
|
173
|
+
|
|
174
|
+
/* Plain links are 18px tall: a 2.75rem target, as .team-member__social has. */
|
|
175
|
+
:is(.directions, .place__links) a { display: inline-flex; align-items: center; min-block-size: 2.75rem; }
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
/* ========================================
|
|
179
|
+
PLACE LIST: numbered like the pins
|
|
180
|
+
======================================== */
|
|
181
|
+
|
|
182
|
+
.place-list {
|
|
183
|
+
display: grid;
|
|
184
|
+
gap: 0;
|
|
185
|
+
margin: 0;
|
|
186
|
+
padding: 0;
|
|
187
|
+
list-style: none;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.place {
|
|
191
|
+
display: grid;
|
|
192
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
193
|
+
gap: var(--space-m);
|
|
194
|
+
margin: 0;
|
|
195
|
+
padding-block: var(--space-m);
|
|
196
|
+
border-block-start: var(--border-width) solid var(--color-border);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.place:last-child { border-block-end: var(--border-width) solid var(--color-border); }
|
|
200
|
+
|
|
201
|
+
.place__num {
|
|
202
|
+
display: grid;
|
|
203
|
+
place-items: center;
|
|
204
|
+
inline-size: 1.75rem;
|
|
205
|
+
block-size: 1.75rem;
|
|
206
|
+
border-radius: var(--radius-full);
|
|
207
|
+
background: var(--accent-fill);
|
|
208
|
+
color: var(--on-accent-fill);
|
|
209
|
+
font: var(--weight-semibold) var(--step--1) / 1 var(--font-body);
|
|
210
|
+
font-variant-numeric: lining-nums tabular-nums;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.place__body { display: grid; gap: var(--space-xs); justify-items: start; min-inline-size: 0; }
|
|
214
|
+
.place__body > * { margin: 0; }
|
|
215
|
+
.place__body h3 { font-size: var(--step-1); }
|
|
216
|
+
.place__links { display: flex; flex-wrap: wrap; gap: var(--space-xs) var(--space-m); font-size: var(--step--1); }
|
|
217
|
+
|
|
218
|
+
/* The map and its list side by side when there is room */
|
|
219
|
+
.places {
|
|
220
|
+
display: grid;
|
|
221
|
+
gap: var(--space-l);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@media (min-width: 60rem) {
|
|
225
|
+
.places { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); align-items: start; }
|
|
226
|
+
/* The map column scrolls with the page, not sticky (Neil, 2026-10-31). */
|
|
227
|
+
}
|
|
228
|
+
}
|