ferst-core 0.7.4 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,161 +1,172 @@
1
- // Pure Zod schemas for the site-settings collections the chrome reads (identity +
2
- // contact, logos, navigation, footer, theme tokens). Separated from config.ts so
3
- // they can be unit-tested without `astro:content`. The page CONTENT model is the
4
- // block palette in `content/blocks.ts` — a page is an ordered list of typed
5
- // blocks, not a bespoke per-page-type schema.
6
- import { z } from 'zod';
7
-
8
- const navLinkSchema = z.object({
9
- label: z.string(),
10
- href: z.string(),
11
- });
12
-
13
- /** One item inside a nav dropdown / mega panel (client-configured, generic). */
14
- const navGroupItemSchema = z.object({
15
- title: z.string(),
16
- desc: z.string().optional(),
17
- href: z.string(),
18
- });
19
-
20
- /** An optional dropdown group in the primary nav (e.g. an "About" mega-menu
21
- * or a "Services" menu). Entirely client-configured — the core ships none. */
22
- const navGroupSchema = z.object({
23
- label: z.string(),
24
- href: z.string(),
25
- items: z.array(navGroupItemSchema).default([]),
26
- });
27
-
28
- const siteIdentitySchema = z
29
- .object({
30
- /** Used in <title> as " — {siteTitle}" and the description fallback. */
31
- siteTitle: z.string().default('Your Site'),
32
- /** Short brand label — used in alt text and the footer. */
33
- shortName: z.string().default('Your Site'),
34
- /** Default <meta name="description"> when a page doesn't supply its own. */
35
- description: z.string().default('A website built with Ferst.'),
36
- /** Town / city — appended to the brand in alt text. */
37
- location: z.string().default(''),
38
- })
39
- .default({});
40
-
41
- const siteContactSchema = z
42
- .object({
43
- /** Human-readable phone number. Blank by default — client provides. */
44
- phoneDisplay: z.string().default(''),
45
- /** Digits-only form used in a `tel:` href. */
46
- phoneTel: z.string().default(''),
47
- email: z.string().default(''),
48
- facebookUrl: z.string().default(''),
49
- })
50
- .default({});
51
-
52
- /** Site identity + contact details. Logos, navigation, footer and theme tokens
53
- * each have their own collection (below) so each is a focused CMS pane. */
54
- export const siteSettingsSchema = z.object({
55
- identity: siteIdentitySchema,
56
- contact: siteContactSchema,
57
- });
58
-
59
- export const logoSettingsSchema = z.object({
60
- /** Primary/header logo — light theme variant. Optional (SiteHeader falls back to a wordmark). */
61
- primaryLogoLight: z.string().optional(),
62
- /** Primary/header logo — dark theme variant. Optional. */
63
- primaryLogoDark: z.string().optional(),
64
- /** Secondary/footer logo — light theme variant (optional). */
65
- secondaryLogoLight: z.string().optional(),
66
- /** Secondary/footer logo — dark theme variant (optional). */
67
- secondaryLogoDark: z.string().optional(),
68
- /** Display name + target URL for the secondary/footer logo's link (optional). */
69
- secondaryLogoLink: z
70
- .object({
71
- name: z.string().default(''),
72
- url: z.string().default(''),
73
- })
74
- .default({}),
75
- });
76
-
77
- export const navbarSettingsSchema = z.object({
78
- /** Simple top-level links. Empty by default — every client defines its own nav. */
79
- primary: z.array(navLinkSchema).default([]),
80
- /** Optional dropdown / mega-menu group. Rendered by SiteHeader only when present. */
81
- dropdown: navGroupSchema.optional(),
82
- });
83
-
84
- export const footerSettingsSchema = z.object({
85
- /** Footer legal/info nav. Empty by default — every client defines its own. */
86
- footer: z.array(navLinkSchema).default([]),
87
- });
88
-
89
- /**
90
- * The brand — a client's design tokens, set in the CMS. The whole system is
91
- * built to derive from just THREE source colours: `brand` (interactive accent),
92
- * `ink` (text) and `surface` (background). `lib/themeTokens.ts` expands those
93
- * into ~40 working tokens (light via `color-mix`, dark via an OKLCH translation
94
- * — lightness flipped, hue kept, chroma damped so nothing turns neon), and
95
- * `Base.astro` emits the result as a `<style>` that layers over the core's
96
- * NEUTRAL defaults in `styles/theme.css`. Fonts and the four surface "knobs"
97
- * (corners / elevation / stroke / fields) are the rest of the site-wide look —
98
- * each set once, applied everywhere. `advanced.light/.dark` are a raw
99
- * per-token escape hatch (power users / AI composition / back-compat) layered
100
- * LAST. The core ships none of this — a brand lives in the client's repo (or
101
- * the CMS), never baked into the shared core.
102
- *
103
- * This shape is what the Sveltia token pane edits (apps/showcase/public/admin):
104
- * a client picks three colours + a font pairing + four knobs, not 40 tokens.
105
- */
106
- export const themeSettingsSchema = z.object({
107
- /** Interactive accent — buttons, links, icons, highlights. Blank ⇒ neutral. */
108
- brand: z.string().default(''),
109
- /** Text colour — headings & body. Blank ⇒ neutral. */
110
- ink: z.string().default(''),
111
- /** Background — page, cards, sections (tints derived from it). Blank ⇒ neutral. */
112
- surface: z.string().default(''),
113
- /** Site-wide font pairing (role → CSS font-family stack). Blank ⇒ core default. */
114
- fonts: z
115
- .object({
116
- heading: z.string().default(''),
117
- body: z.string().default(''),
118
- display: z.string().default(''),
119
- })
120
- .default({}),
121
- /** Corner radius applied to every card / tile / input / button. */
122
- corners: z.enum(['sharp', 'rounded', 'soft']).default('rounded'),
123
- /** Card/tile elevation — `flat` removes the soft shadow site-wide. */
124
- elevation: z.enum(['raised', 'flat']).default('raised'),
125
- /** Card/tile stroke — `off` removes the 1px border site-wide. */
126
- stroke: z.enum(['on', 'off']).default('on'),
127
- /** Input treatment — a single site-wide choice (a `data-field` attr on <html>). */
128
- fields: z.enum(['boxed', 'filled', 'underline']).default('boxed'),
129
- /** Dark-mode formula knobs (root-derivation model). `darkDepth` = how light the
130
- * dark page background sits (OKLCH L); `darkChroma` = the cap on how much colour
131
- * the dark ground may carry. Both feed the AUTOMATIC dark roots. */
132
- darkDepth: z.number().min(0.12).max(0.4).default(0.21),
133
- darkChroma: z.number().min(0).max(0.15).default(0.05),
134
- /** Explicit overrides for the three dark ROOTS. Each blank ⇒ the root is derived
135
- * from its light source by the formula; set ⇒ every dark token in that role
136
- * re-derives from this colour. Roots only (ground / text / accent) — never a
137
- * lone downstream token — so the palette can never fall out of sync. */
138
- darkOverrides: z
139
- .object({
140
- ground: z.string().default(''),
141
- text: z.string().default(''),
142
- accent: z.string().default(''),
143
- })
144
- .default({}),
145
- /** Raw per-token overrides, layered last. Rarely needed. */
146
- advanced: z
147
- .object({
148
- light: z.record(z.string()).default({}),
149
- dark: z.record(z.string()).default({}),
150
- })
151
- .default({}),
152
- });
153
-
154
- export type SiteSettings = z.infer<typeof siteSettingsSchema>;
155
- export type LogoSettings = z.infer<typeof logoSettingsSchema>;
156
- export type NavbarSettings = z.infer<typeof navbarSettingsSchema>;
157
- export type FooterSettings = z.infer<typeof footerSettingsSchema>;
158
- export type ThemeSettings = z.infer<typeof themeSettingsSchema>;
159
- export type NavLink = z.infer<typeof navLinkSchema>;
160
- export type NavGroup = z.infer<typeof navGroupSchema>;
161
- export type NavGroupItem = z.infer<typeof navGroupItemSchema>;
1
+ // Pure Zod schemas for the site-settings collections the chrome reads (identity +
2
+ // contact, logos, navigation, footer, theme tokens). Separated from config.ts so
3
+ // they can be unit-tested without `astro:content`. The page CONTENT model is the
4
+ // block palette in `content/blocks.ts` — a page is an ordered list of typed
5
+ // blocks, not a bespoke per-page-type schema.
6
+ import { z } from 'zod';
7
+
8
+ const navLinkSchema = z.object({
9
+ label: z.string(),
10
+ href: z.string(),
11
+ });
12
+
13
+ /** One item inside a nav dropdown / mega panel (client-configured, generic). */
14
+ const navGroupItemSchema = z.object({
15
+ title: z.string(),
16
+ desc: z.string().optional(),
17
+ href: z.string(),
18
+ });
19
+
20
+ /** An optional dropdown group in the primary nav (e.g. an "About" mega-menu
21
+ * or a "Services" menu). Entirely client-configured — the core ships none. */
22
+ const navGroupSchema = z.object({
23
+ label: z.string(),
24
+ href: z.string(),
25
+ items: z.array(navGroupItemSchema).default([]),
26
+ });
27
+
28
+ const siteIdentitySchema = z
29
+ .object({
30
+ /** Used in <title> as " — {siteTitle}" and the description fallback. */
31
+ siteTitle: z.string().default('Your Site'),
32
+ /** Short brand label — used in alt text and the footer. */
33
+ shortName: z.string().default('Your Site'),
34
+ /** Default <meta name="description"> when a page doesn't supply its own. */
35
+ description: z.string().default('A website built with Ferst.'),
36
+ /** Town / city — appended to the brand in alt text. */
37
+ location: z.string().default(''),
38
+ })
39
+ .default({});
40
+
41
+ const siteContactSchema = z
42
+ .object({
43
+ /** Human-readable phone number. Blank by default — client provides. */
44
+ phoneDisplay: z.string().default(''),
45
+ /** Digits-only form used in a `tel:` href. */
46
+ phoneTel: z.string().default(''),
47
+ email: z.string().default(''),
48
+ facebookUrl: z.string().default(''),
49
+ })
50
+ .default({});
51
+
52
+ /** Site identity + contact details. Logos, navigation, footer and theme tokens
53
+ * each have their own collection (below) so each is a focused CMS pane. */
54
+ export const siteSettingsSchema = z.object({
55
+ identity: siteIdentitySchema,
56
+ contact: siteContactSchema,
57
+ });
58
+
59
+ export const logoSettingsSchema = z.object({
60
+ /** Primary/header logo — light theme variant. Optional (SiteHeader falls back to a wordmark). */
61
+ primaryLogoLight: z.string().optional(),
62
+ /** Primary/header logo — dark theme variant. Optional. */
63
+ primaryLogoDark: z.string().optional(),
64
+ /** Secondary/footer logo — light theme variant (optional). */
65
+ secondaryLogoLight: z.string().optional(),
66
+ /** Secondary/footer logo — dark theme variant (optional). */
67
+ secondaryLogoDark: z.string().optional(),
68
+ /** Display name + target URL for the secondary/footer logo's link (optional). */
69
+ secondaryLogoLink: z
70
+ .object({
71
+ name: z.string().default(''),
72
+ url: z.string().default(''),
73
+ })
74
+ .default({}),
75
+ });
76
+
77
+ export const navbarSettingsSchema = z.object({
78
+ /** Simple top-level links. Empty by default — every client defines its own nav. */
79
+ primary: z.array(navLinkSchema).default([]),
80
+ /** Optional dropdown / mega-menu group. Rendered by SiteHeader only when present. */
81
+ dropdown: navGroupSchema.optional(),
82
+ /** The call-to-action button in the header (and footer). Contact → /contact/ unless set;
83
+ * `null` hides it. */
84
+ cta: z
85
+ .object({ label: z.string(), href: z.string() })
86
+ .nullable()
87
+ .default({ label: 'Contact', href: '/contact/' }),
88
+ });
89
+
90
+ export const footerSettingsSchema = z.object({
91
+ /** Footer legal/info nav. Empty by default — every client defines its own. */
92
+ footer: z.array(navLinkSchema).default([]),
93
+ /** Headed footer columns for reference material (policies, safeguarding, documents,
94
+ * forms) — where it belongs, so the main menu stays short and clear. */
95
+ groups: z
96
+ .array(z.object({ heading: z.string(), links: z.array(navLinkSchema).min(1) }))
97
+ .default([]),
98
+ });
99
+
100
+ /**
101
+ * The brand — a client's design tokens, set in the CMS. The whole system is
102
+ * built to derive from just THREE source colours: `brand` (interactive accent),
103
+ * `ink` (text) and `surface` (background). `lib/themeTokens.ts` expands those
104
+ * into ~40 working tokens (light via `color-mix`, dark via an OKLCH translation
105
+ * — lightness flipped, hue kept, chroma damped so nothing turns neon), and
106
+ * `Base.astro` emits the result as a `<style>` that layers over the core's
107
+ * NEUTRAL defaults in `styles/theme.css`. Fonts and the four surface "knobs"
108
+ * (corners / elevation / stroke / fields) are the rest of the site-wide look —
109
+ * each set once, applied everywhere. `advanced.light/.dark` are a raw
110
+ * per-token escape hatch (power users / AI composition / back-compat) layered
111
+ * LAST. The core ships none of this — a brand lives in the client's repo (or
112
+ * the CMS), never baked into the shared core.
113
+ *
114
+ * This shape is what the Sveltia token pane edits (apps/showcase/public/admin):
115
+ * a client picks three colours + a font pairing + four knobs, not 40 tokens.
116
+ */
117
+ export const themeSettingsSchema = z.object({
118
+ /** Interactive accent — buttons, links, icons, highlights. Blank ⇒ neutral. */
119
+ brand: z.string().default(''),
120
+ /** Text colour — headings & body. Blank ⇒ neutral. */
121
+ ink: z.string().default(''),
122
+ /** Background — page, cards, sections (tints derived from it). Blank ⇒ neutral. */
123
+ surface: z.string().default(''),
124
+ /** Site-wide font pairing (role → CSS font-family stack). Blank ⇒ core default. */
125
+ fonts: z
126
+ .object({
127
+ heading: z.string().default(''),
128
+ body: z.string().default(''),
129
+ display: z.string().default(''),
130
+ })
131
+ .default({}),
132
+ /** Corner radius applied to every card / tile / input / button. */
133
+ corners: z.enum(['sharp', 'rounded', 'soft']).default('rounded'),
134
+ /** Card/tile elevation — `flat` removes the soft shadow site-wide. */
135
+ elevation: z.enum(['raised', 'flat']).default('raised'),
136
+ /** Card/tile stroke — `off` removes the 1px border site-wide. */
137
+ stroke: z.enum(['on', 'off']).default('on'),
138
+ /** Input treatment — a single site-wide choice (a `data-field` attr on <html>). */
139
+ fields: z.enum(['boxed', 'filled', 'underline']).default('boxed'),
140
+ /** Dark-mode formula knobs (root-derivation model). `darkDepth` = how light the
141
+ * dark page background sits (OKLCH L); `darkChroma` = the cap on how much colour
142
+ * the dark ground may carry. Both feed the AUTOMATIC dark roots. */
143
+ darkDepth: z.number().min(0.12).max(0.4).default(0.21),
144
+ darkChroma: z.number().min(0).max(0.15).default(0.05),
145
+ /** Explicit overrides for the three dark ROOTS. Each blank ⇒ the root is derived
146
+ * from its light source by the formula; set ⇒ every dark token in that role
147
+ * re-derives from this colour. Roots only (ground / text / accent) — never a
148
+ * lone downstream token — so the palette can never fall out of sync. */
149
+ darkOverrides: z
150
+ .object({
151
+ ground: z.string().default(''),
152
+ text: z.string().default(''),
153
+ accent: z.string().default(''),
154
+ })
155
+ .default({}),
156
+ /** Raw per-token overrides, layered last. Rarely needed. */
157
+ advanced: z
158
+ .object({
159
+ light: z.record(z.string()).default({}),
160
+ dark: z.record(z.string()).default({}),
161
+ })
162
+ .default({}),
163
+ });
164
+
165
+ export type SiteSettings = z.infer<typeof siteSettingsSchema>;
166
+ export type LogoSettings = z.infer<typeof logoSettingsSchema>;
167
+ export type NavbarSettings = z.infer<typeof navbarSettingsSchema>;
168
+ export type FooterSettings = z.infer<typeof footerSettingsSchema>;
169
+ export type ThemeSettings = z.infer<typeof themeSettingsSchema>;
170
+ export type NavLink = z.infer<typeof navLinkSchema>;
171
+ export type NavGroup = z.infer<typeof navGroupSchema>;
172
+ export type NavGroupItem = z.infer<typeof navGroupItemSchema>;
@@ -39,4 +39,6 @@ export const recipes: GalleryEntry[] = [
39
39
  { type: 'document', description: 'A policy or legal text as one block: sections numbered automatically, a contents list linking to each (sticky beside the text on wide screens), a “last updated” date, prose formatting in each section, print-friendly.', block: { type: 'document', intro: 'These conditions apply to every booking.', updated: '2026-10-04', sections: [{ title: 'Use of the hall', body: 'The hall may be used only for the purpose stated on the booking form.' }, { title: 'Bookings', body: 'Bookings are confirmed once the deposit is received.', items: ['Book through the office.', 'Bookings can’t be transferred.'] }, { title: 'Cancellation', body: 'Cancellations made less than **seven days** before the event forfeit the deposit.' }] } },
40
40
  { type: 'timetable', description: 'Weekly times for one or more places (service times, opening hours, sessions): a card per place, days with no times left out, notes with links under each. Set `layout: "table"` to compare places side by side.', block: { type: 'timetable', title: 'Service times', places: [{ name: "St Placeholder's", address: '1 Example Street', schedule: [{ day: 'Saturday', times: ['6:00pm (vigil)'] }, { day: 'Sunday', times: ['8:30am', '10:30am'] }, { day: 'Weekdays', times: ['9:30am'] }], notes: 'Confessions on Saturdays from 5pm. See [how to find us](#find-us).' }, { name: "St Sample's", schedule: [{ day: 'Saturday', times: [] }, { day: 'Sunday', times: ['9:00am'] }], notes: 'No Saturday service.' }] } },
41
41
  { type: 'timetable', description: 'The `table` layout: days down the side, one column per place; a day nobody uses is dropped.', block: { type: 'timetable', title: 'Opening hours', layout: 'table', places: [{ name: 'Library', schedule: [{ day: 'Monday', times: ['9am–5pm'] }, { day: 'Saturday', times: ['10am–1pm'] }] }, { name: 'Café', schedule: [{ day: 'Monday', times: ['8am–4pm'] }, { day: 'Sunday', times: [] }] }] } },
42
+ { type: 'contacts', description: 'A compact directory of people or offices: role as the card title, phone and email as tap targets (email with an optional subject), a shared note per group (e.g. office hours) instead of repeating it on every card.', block: { type: 'contacts', title: 'Who to contact', groups: [{ heading: 'Parish office', note: 'Office hours: **Mon–Fri 9am–1pm**.', contacts: [{ role: 'Parish Secretary', name: 'Anne Example', phone: '01234 567890', email: 'office@example.org', emailSubject: 'Parish enquiry' }, { role: 'Safeguarding Representative', email: 'safeguarding@example.org' }] }, { heading: 'Clergy', contacts: [{ role: 'Parish Priest', name: 'Fr John Example', phone: '01234 567891' }] }] } },
43
+ { type: 'mediaText', description: 'An image beside its text (start or end), stacking on a phone, the image keeping its shape. Text takes prose formatting; an optional button.', block: { type: 'mediaText', title: 'Getting married here', text: 'We are delighted that you are thinking of marrying in our church.\n\nPlease contact the parish office **at least six months** before the date.', image: { src: '/placeholder.svg', alt: 'The church interior decorated for a wedding', caption: 'The church, ready for a wedding' }, imageSide: 'end', cta: { label: 'Contact the office', href: '#' } } },
42
44
  ];
package/fonts/OFL.txt ADDED
@@ -0,0 +1,287 @@
1
+ Fonts in this folder are distributed under the SIL Open Font License, Version 1.1.
2
+ Files taken unmodified from Fontsource (https://fontsource.org): @fontsource/inter, @fontsource/playfair-display and @fontsource/poppins 5.3.0.
3
+
4
+ ==================== inter ====================
5
+ Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter)
6
+
7
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
8
+ This license is copied below, and is also available with a FAQ at:
9
+ http://scripts.sil.org/OFL
10
+
11
+
12
+ -----------------------------------------------------------
13
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
14
+ -----------------------------------------------------------
15
+
16
+ PREAMBLE
17
+ The goals of the Open Font License (OFL) are to stimulate worldwide
18
+ development of collaborative font projects, to support the font creation
19
+ efforts of academic and linguistic communities, and to provide a free and
20
+ open framework in which fonts may be shared and improved in partnership
21
+ with others.
22
+
23
+ The OFL allows the licensed fonts to be used, studied, modified and
24
+ redistributed freely as long as they are not sold by themselves. The
25
+ fonts, including any derivative works, can be bundled, embedded,
26
+ redistributed and/or sold with any software provided that any reserved
27
+ names are not used by derivative works. The fonts and derivatives,
28
+ however, cannot be released under any other type of license. The
29
+ requirement for fonts to remain under this license does not apply
30
+ to any document created using the fonts or their derivatives.
31
+
32
+ DEFINITIONS
33
+ "Font Software" refers to the set of files released by the Copyright
34
+ Holder(s) under this license and clearly marked as such. This may
35
+ include source files, build scripts and documentation.
36
+
37
+ "Reserved Font Name" refers to any names specified as such after the
38
+ copyright statement(s).
39
+
40
+ "Original Version" refers to the collection of Font Software components as
41
+ distributed by the Copyright Holder(s).
42
+
43
+ "Modified Version" refers to any derivative made by adding to, deleting,
44
+ or substituting -- in part or in whole -- any of the components of the
45
+ Original Version, by changing formats or by porting the Font Software to a
46
+ new environment.
47
+
48
+ "Author" refers to any designer, engineer, programmer, technical
49
+ writer or other person who contributed to the Font Software.
50
+
51
+ PERMISSION & CONDITIONS
52
+ Permission is hereby granted, free of charge, to any person obtaining
53
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
54
+ redistribute, and sell modified and unmodified copies of the Font
55
+ Software, subject to the following conditions:
56
+
57
+ 1) Neither the Font Software nor any of its individual components,
58
+ in Original or Modified Versions, may be sold by itself.
59
+
60
+ 2) Original or Modified Versions of the Font Software may be bundled,
61
+ redistributed and/or sold with any software, provided that each copy
62
+ contains the above copyright notice and this license. These can be
63
+ included either as stand-alone text files, human-readable headers or
64
+ in the appropriate machine-readable metadata fields within text or
65
+ binary files as long as those fields can be easily viewed by the user.
66
+
67
+ 3) No Modified Version of the Font Software may use the Reserved Font
68
+ Name(s) unless explicit written permission is granted by the corresponding
69
+ Copyright Holder. This restriction only applies to the primary font name as
70
+ presented to the users.
71
+
72
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
73
+ Software shall not be used to promote, endorse or advertise any
74
+ Modified Version, except to acknowledge the contribution(s) of the
75
+ Copyright Holder(s) and the Author(s) or with their explicit written
76
+ permission.
77
+
78
+ 5) The Font Software, modified or unmodified, in part or in whole,
79
+ must be distributed entirely under this license, and must not be
80
+ distributed under any other license. The requirement for fonts to
81
+ remain under this license does not apply to any document created
82
+ using the Font Software.
83
+
84
+ TERMINATION
85
+ This license becomes null and void if any of the above conditions are
86
+ not met.
87
+
88
+ DISCLAIMER
89
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
90
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
91
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
92
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
93
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
94
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
95
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
96
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
97
+ OTHER DEALINGS IN THE FONT SOFTWARE.
98
+
99
+ ==================== playfair-display ====================
100
+ Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display". PlayfairDisplay-Italic[wght].ttf: Copyright 2017 The Playfair Display Project Authors (https://github.com/clauseggers/Playfair-Display), with Reserved Font Name "Playfair Display".
101
+
102
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
103
+ This license is copied below, and is also available with a FAQ at:
104
+ http://scripts.sil.org/OFL
105
+
106
+
107
+ -----------------------------------------------------------
108
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
109
+ -----------------------------------------------------------
110
+
111
+ PREAMBLE
112
+ The goals of the Open Font License (OFL) are to stimulate worldwide
113
+ development of collaborative font projects, to support the font creation
114
+ efforts of academic and linguistic communities, and to provide a free and
115
+ open framework in which fonts may be shared and improved in partnership
116
+ with others.
117
+
118
+ The OFL allows the licensed fonts to be used, studied, modified and
119
+ redistributed freely as long as they are not sold by themselves. The
120
+ fonts, including any derivative works, can be bundled, embedded,
121
+ redistributed and/or sold with any software provided that any reserved
122
+ names are not used by derivative works. The fonts and derivatives,
123
+ however, cannot be released under any other type of license. The
124
+ requirement for fonts to remain under this license does not apply
125
+ to any document created using the fonts or their derivatives.
126
+
127
+ DEFINITIONS
128
+ "Font Software" refers to the set of files released by the Copyright
129
+ Holder(s) under this license and clearly marked as such. This may
130
+ include source files, build scripts and documentation.
131
+
132
+ "Reserved Font Name" refers to any names specified as such after the
133
+ copyright statement(s).
134
+
135
+ "Original Version" refers to the collection of Font Software components as
136
+ distributed by the Copyright Holder(s).
137
+
138
+ "Modified Version" refers to any derivative made by adding to, deleting,
139
+ or substituting -- in part or in whole -- any of the components of the
140
+ Original Version, by changing formats or by porting the Font Software to a
141
+ new environment.
142
+
143
+ "Author" refers to any designer, engineer, programmer, technical
144
+ writer or other person who contributed to the Font Software.
145
+
146
+ PERMISSION & CONDITIONS
147
+ Permission is hereby granted, free of charge, to any person obtaining
148
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
149
+ redistribute, and sell modified and unmodified copies of the Font
150
+ Software, subject to the following conditions:
151
+
152
+ 1) Neither the Font Software nor any of its individual components,
153
+ in Original or Modified Versions, may be sold by itself.
154
+
155
+ 2) Original or Modified Versions of the Font Software may be bundled,
156
+ redistributed and/or sold with any software, provided that each copy
157
+ contains the above copyright notice and this license. These can be
158
+ included either as stand-alone text files, human-readable headers or
159
+ in the appropriate machine-readable metadata fields within text or
160
+ binary files as long as those fields can be easily viewed by the user.
161
+
162
+ 3) No Modified Version of the Font Software may use the Reserved Font
163
+ Name(s) unless explicit written permission is granted by the corresponding
164
+ Copyright Holder. This restriction only applies to the primary font name as
165
+ presented to the users.
166
+
167
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
168
+ Software shall not be used to promote, endorse or advertise any
169
+ Modified Version, except to acknowledge the contribution(s) of the
170
+ Copyright Holder(s) and the Author(s) or with their explicit written
171
+ permission.
172
+
173
+ 5) The Font Software, modified or unmodified, in part or in whole,
174
+ must be distributed entirely under this license, and must not be
175
+ distributed under any other license. The requirement for fonts to
176
+ remain under this license does not apply to any document created
177
+ using the Font Software.
178
+
179
+ TERMINATION
180
+ This license becomes null and void if any of the above conditions are
181
+ not met.
182
+
183
+ DISCLAIMER
184
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
185
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
186
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
187
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
188
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
189
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
190
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
191
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
192
+ OTHER DEALINGS IN THE FONT SOFTWARE.
193
+
194
+ ==================== poppins ====================
195
+ Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ThinItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraLight.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraLightItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Light.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-LightItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Regular.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Italic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Medium.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-MediumItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-SemiBold.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-SemiBoldItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Bold.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-BoldItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraBold.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-ExtraBoldItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-Black.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins) Poppins-BlackItalic.ttf: Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
196
+
197
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
198
+ This license is copied below, and is also available with a FAQ at:
199
+ http://scripts.sil.org/OFL
200
+
201
+
202
+ -----------------------------------------------------------
203
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
204
+ -----------------------------------------------------------
205
+
206
+ PREAMBLE
207
+ The goals of the Open Font License (OFL) are to stimulate worldwide
208
+ development of collaborative font projects, to support the font creation
209
+ efforts of academic and linguistic communities, and to provide a free and
210
+ open framework in which fonts may be shared and improved in partnership
211
+ with others.
212
+
213
+ The OFL allows the licensed fonts to be used, studied, modified and
214
+ redistributed freely as long as they are not sold by themselves. The
215
+ fonts, including any derivative works, can be bundled, embedded,
216
+ redistributed and/or sold with any software provided that any reserved
217
+ names are not used by derivative works. The fonts and derivatives,
218
+ however, cannot be released under any other type of license. The
219
+ requirement for fonts to remain under this license does not apply
220
+ to any document created using the fonts or their derivatives.
221
+
222
+ DEFINITIONS
223
+ "Font Software" refers to the set of files released by the Copyright
224
+ Holder(s) under this license and clearly marked as such. This may
225
+ include source files, build scripts and documentation.
226
+
227
+ "Reserved Font Name" refers to any names specified as such after the
228
+ copyright statement(s).
229
+
230
+ "Original Version" refers to the collection of Font Software components as
231
+ distributed by the Copyright Holder(s).
232
+
233
+ "Modified Version" refers to any derivative made by adding to, deleting,
234
+ or substituting -- in part or in whole -- any of the components of the
235
+ Original Version, by changing formats or by porting the Font Software to a
236
+ new environment.
237
+
238
+ "Author" refers to any designer, engineer, programmer, technical
239
+ writer or other person who contributed to the Font Software.
240
+
241
+ PERMISSION & CONDITIONS
242
+ Permission is hereby granted, free of charge, to any person obtaining
243
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
244
+ redistribute, and sell modified and unmodified copies of the Font
245
+ Software, subject to the following conditions:
246
+
247
+ 1) Neither the Font Software nor any of its individual components,
248
+ in Original or Modified Versions, may be sold by itself.
249
+
250
+ 2) Original or Modified Versions of the Font Software may be bundled,
251
+ redistributed and/or sold with any software, provided that each copy
252
+ contains the above copyright notice and this license. These can be
253
+ included either as stand-alone text files, human-readable headers or
254
+ in the appropriate machine-readable metadata fields within text or
255
+ binary files as long as those fields can be easily viewed by the user.
256
+
257
+ 3) No Modified Version of the Font Software may use the Reserved Font
258
+ Name(s) unless explicit written permission is granted by the corresponding
259
+ Copyright Holder. This restriction only applies to the primary font name as
260
+ presented to the users.
261
+
262
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
263
+ Software shall not be used to promote, endorse or advertise any
264
+ Modified Version, except to acknowledge the contribution(s) of the
265
+ Copyright Holder(s) and the Author(s) or with their explicit written
266
+ permission.
267
+
268
+ 5) The Font Software, modified or unmodified, in part or in whole,
269
+ must be distributed entirely under this license, and must not be
270
+ distributed under any other license. The requirement for fonts to
271
+ remain under this license does not apply to any document created
272
+ using the Font Software.
273
+
274
+ TERMINATION
275
+ This license becomes null and void if any of the above conditions are
276
+ not met.
277
+
278
+ DISCLAIMER
279
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
280
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
281
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
282
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
283
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
284
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
285
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
286
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
287
+ OTHER DEALINGS IN THE FONT SOFTWARE.