@janga/norna 0.7.2 → 0.7.3
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 +16 -16
- package/bin/norna-cli.mjs +12 -7
- package/docs/README.md +10 -11
- package/docs/commands.md +8 -8
- package/docs/configuration.md +13 -145
- package/docs/content.md +17 -15
- package/docs/design/command-organization.md +55 -55
- package/docs/design/site-examples-structure.md +2 -2
- package/docs/engine-development.md +5 -5
- package/docs/getting-started.md +19 -26
- package/docs/images-and-metadata.md +1 -1
- package/docs/local-development.md +2 -2
- package/docs/publishing.md +1 -1
- package/docs/routes.md +2 -2
- package/docs/site-structure.md +8 -7
- package/docs/theme.md +149 -7
- package/docs/typography.md +47 -28
- package/examples/dog-gallery/.astro/collections/site.schema.json +802 -0
- package/examples/dog-gallery/.astro/collections/theme.schema.json +714 -0
- package/examples/dog-gallery/.astro/content-assets.mjs +4 -0
- package/examples/dog-gallery/.astro/content-modules.mjs +1 -0
- package/examples/dog-gallery/.astro/content.d.ts +175 -0
- package/examples/dog-gallery/.astro/data-store.json +1 -0
- package/examples/dog-gallery/.astro/dev-local.json +8 -0
- package/examples/dog-gallery/.astro/dev.json +13 -0
- package/examples/dog-gallery/.astro/dev.log +49 -0
- package/examples/dog-gallery/.astro/settings.json +5 -0
- package/examples/dog-gallery/.astro/types.d.ts +2 -0
- package/examples/dog-gallery/dist/_astro/GalleryGrid.astro_astro_type_script_index_0_lang.B0kxDyGz.js +1 -0
- package/examples/dog-gallery/dist/_astro/SitePage.BFHZm5UG.css +1 -0
- package/examples/dog-gallery/dist/dog-care/index.html +15 -0
- package/examples/dog-gallery/dist/favicon.svg +7 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-3939.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/brown-dog-50ef114e-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-2400.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/brown-dogs/dog-accompanies-master-7ef804d5-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-480.webp +0 -0
- package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-768.webp +0 -0
- package/examples/dog-gallery/dist/index.html +43 -0
- package/examples/dog-gallery/dist/robots.txt +2 -0
- package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
- package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
- package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
- package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
- package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
- package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
- package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
- package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
- package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
- package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
- package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
- package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
- package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
- package/examples/dog-gallery/site/config.mjs +12 -42
- package/examples/dog-gallery/site/content.md +27 -5
- package/examples/dog-gallery/site/routes/dog-care/route-content.md +17 -3
- package/examples/dog-gallery/site/theme.md +85 -26
- package/fixtures/basic/site/config.mjs +2 -22
- package/fixtures/basic/site/content.md +1 -1
- package/fixtures/basic/site/theme.md +7 -3
- package/package.json +3 -3
- package/scripts/check-config.mjs +3 -3
- package/scripts/deploy-site.mjs +3 -3
- package/scripts/init-site.mjs +10 -8
- package/scripts/lib/frontmatter-yaml.mjs +85 -0
- package/scripts/lib/presentation.mjs +10 -11
- package/scripts/lib/project-config.mjs +91 -45
- package/scripts/lib/site-content.mjs +20 -2
- package/scripts/lib/theme-config.mjs +34 -0
- package/scripts/lib/typography.mjs +100 -20
- package/scripts/show-typography.mjs +58 -154
- package/scripts/sync-content-sections.mjs +6 -6
- package/scripts/test-content-check.mjs +3 -4
- package/scripts/test-engine-commands.mjs +2 -2
- package/scripts/test-package-check.mjs +17 -16
- package/scripts/test-temporary-visibility.mjs +2 -3
- package/src/components/SitePage.astro +2 -3
- package/src/components/SiteSection.astro +39 -5
- package/src/content.config.ts +60 -2
- package/src/layouts/BaseLayout.astro +17 -0
- package/src/styles/global.css +54 -50
- package/starters/basic/README.md +10 -15
- package/starters/basic/package.json +2 -2
- package/starters/basic/site/config.mjs +3 -24
- package/starters/basic/site/content.md +40 -7
- package/starters/basic/site/theme.md +110 -17
- package/starters/project/.github/workflows/deploy.yml +65 -0
- package/starters/project/README.md +72 -0
- package/starters/project/package-lock.json +4296 -0
- package/starters/project/package.json +35 -0
- package/starters/project/site/config.mjs +43 -0
- package/starters/project/site/content.md +88 -0
- package/starters/project/site/public/robots.txt +2 -0
- package/starters/project/site/routes/guide/route-content.md +58 -0
- package/starters/project/site/theme.md +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default new Map();
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
declare module 'astro:content' {
|
|
2
|
+
export interface RenderResult {
|
|
3
|
+
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
|
4
|
+
headings: import('astro').MarkdownHeading[];
|
|
5
|
+
remarkPluginFrontmatter: Record<string, any>;
|
|
6
|
+
}
|
|
7
|
+
interface Render {
|
|
8
|
+
'.md': Promise<RenderResult>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface RenderedContent {
|
|
12
|
+
html: string;
|
|
13
|
+
metadata?: {
|
|
14
|
+
imagePaths: Array<string>;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
|
20
|
+
|
|
21
|
+
export type CollectionKey = keyof DataEntryMap;
|
|
22
|
+
export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
|
|
23
|
+
|
|
24
|
+
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
|
25
|
+
|
|
26
|
+
export type ReferenceDataEntry<
|
|
27
|
+
C extends CollectionKey,
|
|
28
|
+
E extends keyof DataEntryMap[C] = string,
|
|
29
|
+
> = {
|
|
30
|
+
collection: C;
|
|
31
|
+
id: E;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
|
35
|
+
collection: C;
|
|
36
|
+
id: string;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
|
|
40
|
+
collection: C,
|
|
41
|
+
filter?: (entry: CollectionEntry<C>) => entry is E,
|
|
42
|
+
): Promise<E[]>;
|
|
43
|
+
export function getCollection<C extends keyof DataEntryMap>(
|
|
44
|
+
collection: C,
|
|
45
|
+
filter?: (entry: CollectionEntry<C>) => unknown,
|
|
46
|
+
): Promise<CollectionEntry<C>[]>;
|
|
47
|
+
|
|
48
|
+
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
|
49
|
+
collection: C,
|
|
50
|
+
filter?: LiveLoaderCollectionFilterType<C>,
|
|
51
|
+
): Promise<
|
|
52
|
+
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
|
53
|
+
>;
|
|
54
|
+
|
|
55
|
+
export function getEntry<
|
|
56
|
+
C extends keyof DataEntryMap,
|
|
57
|
+
E extends keyof DataEntryMap[C] | (string & {}),
|
|
58
|
+
>(
|
|
59
|
+
entry: ReferenceDataEntry<C, E>,
|
|
60
|
+
): E extends keyof DataEntryMap[C]
|
|
61
|
+
? Promise<DataEntryMap[C][E]>
|
|
62
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
63
|
+
export function getEntry<
|
|
64
|
+
C extends keyof DataEntryMap,
|
|
65
|
+
E extends keyof DataEntryMap[C] | (string & {}),
|
|
66
|
+
>(
|
|
67
|
+
collection: C,
|
|
68
|
+
id: E,
|
|
69
|
+
): E extends keyof DataEntryMap[C]
|
|
70
|
+
? string extends keyof DataEntryMap[C]
|
|
71
|
+
? Promise<DataEntryMap[C][E]> | undefined
|
|
72
|
+
: Promise<DataEntryMap[C][E]>
|
|
73
|
+
: Promise<CollectionEntry<C> | undefined>;
|
|
74
|
+
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
|
75
|
+
collection: C,
|
|
76
|
+
filter: string | LiveLoaderEntryFilterType<C>,
|
|
77
|
+
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
|
78
|
+
|
|
79
|
+
/** Resolve an array of entry references from the same collection */
|
|
80
|
+
export function getEntries<C extends keyof DataEntryMap>(
|
|
81
|
+
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
|
82
|
+
): Promise<CollectionEntry<C>[]>;
|
|
83
|
+
|
|
84
|
+
export function render<C extends keyof DataEntryMap>(
|
|
85
|
+
entry: DataEntryMap[C][string],
|
|
86
|
+
): Promise<RenderResult>;
|
|
87
|
+
|
|
88
|
+
export function render<C extends keyof LiveContentConfig['collections']>(
|
|
89
|
+
entry: import('astro').LiveDataEntry<LiveLoaderDataType<C>>,
|
|
90
|
+
): Promise<RenderResult>;
|
|
91
|
+
|
|
92
|
+
export function reference<
|
|
93
|
+
C extends
|
|
94
|
+
| keyof DataEntryMap
|
|
95
|
+
// Allow generic `string` to avoid excessive type errors in the config
|
|
96
|
+
// if `dev` is not running to update as you edit.
|
|
97
|
+
// Invalid collection names will be caught at build time.
|
|
98
|
+
| (string & {}),
|
|
99
|
+
>(
|
|
100
|
+
collection: C,
|
|
101
|
+
): import('astro/zod').ZodPipe<
|
|
102
|
+
import('astro/zod').ZodString,
|
|
103
|
+
import('astro/zod').ZodTransform<
|
|
104
|
+
C extends keyof DataEntryMap
|
|
105
|
+
? {
|
|
106
|
+
collection: C;
|
|
107
|
+
id: string;
|
|
108
|
+
}
|
|
109
|
+
: never,
|
|
110
|
+
string
|
|
111
|
+
>
|
|
112
|
+
>;
|
|
113
|
+
|
|
114
|
+
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
|
115
|
+
type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
|
|
116
|
+
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
|
117
|
+
>;
|
|
118
|
+
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
|
|
119
|
+
type InferLoaderSchema<
|
|
120
|
+
C extends keyof DataEntryMap,
|
|
121
|
+
L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
|
|
122
|
+
> = L extends { schema: import('astro/zod').ZodSchema }
|
|
123
|
+
? import('astro/zod').infer<L['schema']>
|
|
124
|
+
: any;
|
|
125
|
+
|
|
126
|
+
type DataEntryMap = {
|
|
127
|
+
"site": Record<string, {
|
|
128
|
+
id: string;
|
|
129
|
+
body?: string;
|
|
130
|
+
collection: "site";
|
|
131
|
+
data: InferEntrySchema<"site">;
|
|
132
|
+
rendered?: RenderedContent;
|
|
133
|
+
filePath?: string;
|
|
134
|
+
}>;
|
|
135
|
+
"theme": Record<string, {
|
|
136
|
+
id: string;
|
|
137
|
+
body?: string;
|
|
138
|
+
collection: "theme";
|
|
139
|
+
data: InferEntrySchema<"theme">;
|
|
140
|
+
rendered?: RenderedContent;
|
|
141
|
+
filePath?: string;
|
|
142
|
+
}>;
|
|
143
|
+
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
|
147
|
+
infer TData,
|
|
148
|
+
infer TEntryFilter,
|
|
149
|
+
infer TCollectionFilter,
|
|
150
|
+
infer TError
|
|
151
|
+
>
|
|
152
|
+
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
|
153
|
+
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
|
154
|
+
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
|
155
|
+
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
|
156
|
+
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
|
157
|
+
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
|
158
|
+
|
|
159
|
+
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
|
160
|
+
LiveContentConfig['collections'][C]['schema'] extends undefined
|
|
161
|
+
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
|
162
|
+
: import('astro/zod').infer<
|
|
163
|
+
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
|
164
|
+
>;
|
|
165
|
+
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
166
|
+
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
167
|
+
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
|
168
|
+
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
|
169
|
+
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
|
170
|
+
LiveContentConfig['collections'][C]['loader']
|
|
171
|
+
>;
|
|
172
|
+
|
|
173
|
+
export type ContentConfig = typeof import("../../../src/content.config.js");
|
|
174
|
+
export type LiveContentConfig = never;
|
|
175
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[["Map",1,2,9,10,247,248],"meta::meta",["Map",3,4,5,6,7,8],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":\"jsx\",\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"dangerouslyProcessSVG\":false,\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"processor\":{\"name\":\"satteri\",\"options\":{\"mdastPlugins\":[],\"hastPlugins\":[],\"features\":{}}}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"fetchFile\":\"fetch\",\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"collectionStorage\":\"single-file\"},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","7.1.3","content-config-digest","cb4a28e91b832265","site",["Map",11,12,189,190],"site-content",{"id":11,"data":13,"body":104,"filePath":105,"digest":106,"rendered":107},{"title":14,"description":15,"navigation":16,"sections":19},"Local Dog Example","A small norna example with free dog images.",{"label":17,"order":18},"Dog site!",10,[20,38,48,62,84,101],{"id":21,"presentation":22,"gallery":29},"black-dogs",{"typography":23},{"preset":24,"overrides":25},"statement",{"headings":26},{"h2":27},{"size":28},"xlarge",[30,34],{"image":31,"alt":32,"caption":33},"photo-of-a-black-dog.jpg","A black dog sitting outdoors and looking at the camera.","Photo of a dog. ContaDeletada2906, CC0 1.0, via Wikimedia Commons.",{"image":35,"alt":36,"caption":37},"black-puppy-meadow.png","A black puppy standing in a grassy meadow and looking at the camera.","AI-generated image.",{"id":39,"visible":40,"presentation":43,"gallery":47},"summer-dogs",{"from":41,"until":42},"2026-08-01","2026-09-01",{"backgroundColor":44,"typography":45},"#181818",{"preset":46},"compact-gallery",[],{"id":49,"presentation":50,"gallery":53},"brown-dogs",{"typography":51},{"preset":52},"text-forward",[54,58],{"image":55,"alt":56,"caption":57},"brown-dog.jpg","A brown dog looking directly at the camera.","DogBrown. Frank-3, CC0 1.0, via Wikimedia Commons.",{"image":59,"alt":60,"caption":61},"dog-accompanies-master.jpg","A man walks outdoors with a dog at his side.","Dog accompanies his master. Steve Hillebrand, U.S. Fish and Wildlife Service, public domain.",{"id":63,"presentation":64,"gallery":75},"golden-dogs",{"typography":65},{"overrides":66},{"headings":67,"body":72},{"h2":68,"h3":70},{"size":69},"large",{"size":71},"medium",{"lineHeight":73,"paragraphSpacing":74},1.58,"1em",[76,80],{"image":77,"alt":78,"caption":79},"golden-retriever.jpg","A golden retriever standing outdoors.","Golden Retriever. Ribo, public domain, via Wikimedia Commons.",{"image":81,"alt":82,"caption":83},"toller-puppy.jpg","A young Nova Scotia Duck Tolling Retriever puppy sitting on grass.","Nova Scotia Duck Tolling Retriever puppy. RM, public domain, via Wikimedia Commons.",{"id":85,"presentation":86,"gallery":91},"white-dogs",{"typography":87},{"overrides":88},{"caption":89},{"spacing":90},"0.35em",[92],{"carousel":93},[94,98],{"image":95,"alt":96,"caption":97},"white-cute-dog.jpg","A white dog looking toward the camera.","White cute dog. Neal Ziring, public domain, via Wikimedia Commons.",{"image":99,"alt":100,"caption":37},"white-puppy-garden.png","A fluffy white puppy standing on grass in a garden.",{"id":102,"gallery":103},"sources",[],"## Black Dogs {#black-dogs}\n\nBlack-coated dogs from the local norna development collection. This\nsentence contains [yellow highlighted text]{.highlight} for inline style\ninspection.\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a\nante venenatis dapibus posuere velit aliquet.\n\n### Coat notes\n\nThis `###` heading should follow `typography.headings.h3`.\n\n#### Small detail\n\nThis `####` heading should follow `typography.headings.h4`.\n\nCurabitur blandit tempus porttitor. Donec id elit non mi porta gravida at eget\nmetus. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.\n\n## Summer Dogs {#summer-dogs}\n\nThis temporary section is visible during August 2026. It is here to demonstrate\ndate-controlled sections and [warm alert text]{.alert} in the local dog example.\n\nLorem ipsum dolor sit amet.\n\nVestibulum id ligula porta felis euismod semper. Maecenas faucibus mollis\ninterdum. Nullam quis risus eget urna mollis ornare vel eu leo.\n\n## Brown Dogs {#brown-dogs}\n\nBrown dogs provide a second image section for local navigation checks.\n\nDonec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac\ncursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit\namet risus.\n\nMaecenas sed diam eget risus varius blandit sit amet non magna. Morbi leo risus,\nporta ac consectetur ac, vestibulum at eros. Sed posuere consectetur est at\nlobortis.\n\n## Golden Dogs {#golden-dogs}\n\nGolden-coated retrievers add a third image section and more scrolling depth.\n\nCras justo odio, dapibus ac facilisis in, egestas eget quam.\n\n### Training note\n\nThis section overrides `headings.h2` and `headings.h3`, while keeping the\nsite-wide `headings.h4` style.\n\nNulla vitae elit libero, a pharetra augue. Integer posuere erat a ante venenatis\ndapibus posuere velit aliquet. Aenean eu leo quam. Pellentesque ornare sem\nlacinia quam venenatis vestibulum.\n\n## White Dogs {#white-dogs}\n\nA white dog completes the colour-based image sequence.\n\nEtiam porta sem malesuada magna mollis euismod. Donec id elit non mi porta\ngravida at eget metus.\n\nPraesent commodo cursus magna, vel scelerisque nisl consectetur et. Lorem ipsum\ndolor sit amet, consectetur adipiscing elit. Donec sed odio dui. Vestibulum id\nligula porta felis euismod semper.\n\n## Sources {#sources}\n\nMost images are sourced from Wikimedia Commons pages that list CC0 or\npublic-domain licensing:\n\n- [Photo of a dog](https://commons.wikimedia.org/wiki/File:Photo_of_a_dog.jpg)\n- [DogBrown](https://commons.wikimedia.org/wiki/File:DogBrown.jpg)\n- [Dog accompanies his master](https://commons.wikimedia.org/wiki/File:Dog_accompanies_his_master.jpg)\n- [Golden Retriever](https://commons.wikimedia.org/wiki/File:Golden_Retriever.jpg)\n- [Toller pup7wks2](https://commons.wikimedia.org/wiki/File:Toller_pup7wks2.JPG)\n- [White cute dog](https://commons.wikimedia.org/wiki/File:White_cute_dog.jpg)\n\nThe black and white puppy images are AI-generated.","site/content.md","3a1032fd5ca6ebe2",{"html":108,"metadata":109},"\u003Ch2 id=\"black-dogs-black-dogs\">Black Dogs {#black-dogs}\u003C/h2>\n\u003Cp>Black-coated dogs from the local norna development collection. This\nsentence contains [yellow highlighted text]{.highlight} for inline style\ninspection.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a\nante venenatis dapibus posuere velit aliquet.\u003C/p>\n\u003Ch3 id=\"coat-notes\">Coat notes\u003C/h3>\n\u003Cp>This \u003Ccode>###\u003C/code> heading should follow \u003Ccode>typography.headings.h3\u003C/code>.\u003C/p>\n\u003Ch4 id=\"small-detail\">Small detail\u003C/h4>\n\u003Cp>This \u003Ccode>####\u003C/code> heading should follow \u003Ccode>typography.headings.h4\u003C/code>.\u003C/p>\n\u003Cp>Curabitur blandit tempus porttitor. Donec id elit non mi porta gravida at eget\nmetus. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.\u003C/p>\n\u003Ch2 id=\"summer-dogs-summer-dogs\">Summer Dogs {#summer-dogs}\u003C/h2>\n\u003Cp>This temporary section is visible during August 2026. It is here to demonstrate\ndate-controlled sections and [warm alert text]{.alert} in the local dog example.\u003C/p>\n\u003Cp>Lorem ipsum dolor sit amet.\u003C/p>\n\u003Cp>Vestibulum id ligula porta felis euismod semper. Maecenas faucibus mollis\ninterdum. Nullam quis risus eget urna mollis ornare vel eu leo.\u003C/p>\n\u003Ch2 id=\"brown-dogs-brown-dogs\">Brown Dogs {#brown-dogs}\u003C/h2>\n\u003Cp>Brown dogs provide a second image section for local navigation checks.\u003C/p>\n\u003Cp>Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac\ncursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit\namet risus.\u003C/p>\n\u003Cp>Maecenas sed diam eget risus varius blandit sit amet non magna. Morbi leo risus,\nporta ac consectetur ac, vestibulum at eros. Sed posuere consectetur est at\nlobortis.\u003C/p>\n\u003Ch2 id=\"golden-dogs-golden-dogs\">Golden Dogs {#golden-dogs}\u003C/h2>\n\u003Cp>Golden-coated retrievers add a third image section and more scrolling depth.\u003C/p>\n\u003Cp>Cras justo odio, dapibus ac facilisis in, egestas eget quam.\u003C/p>\n\u003Ch3 id=\"training-note\">Training note\u003C/h3>\n\u003Cp>This section overrides \u003Ccode>headings.h2\u003C/code> and \u003Ccode>headings.h3\u003C/code>, while keeping the\nsite-wide \u003Ccode>headings.h4\u003C/code> style.\u003C/p>\n\u003Cp>Nulla vitae elit libero, a pharetra augue. Integer posuere erat a ante venenatis\ndapibus posuere velit aliquet. Aenean eu leo quam. Pellentesque ornare sem\nlacinia quam venenatis vestibulum.\u003C/p>\n\u003Ch2 id=\"white-dogs-white-dogs\">White Dogs {#white-dogs}\u003C/h2>\n\u003Cp>A white dog completes the colour-based image sequence.\u003C/p>\n\u003Cp>Etiam porta sem malesuada magna mollis euismod. Donec id elit non mi porta\ngravida at eget metus.\u003C/p>\n\u003Cp>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Lorem ipsum\ndolor sit amet, consectetur adipiscing elit. Donec sed odio dui. Vestibulum id\nligula porta felis euismod semper.\u003C/p>\n\u003Ch2 id=\"sources-sources\">Sources {#sources}\u003C/h2>\n\u003Cp>Most images are sourced from Wikimedia Commons pages that list CC0 or\npublic-domain licensing:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://commons.wikimedia.org/wiki/File:Photo_of_a_dog.jpg\">Photo of a dog\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://commons.wikimedia.org/wiki/File:DogBrown.jpg\">DogBrown\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://commons.wikimedia.org/wiki/File:Dog_accompanies_his_master.jpg\">Dog accompanies his master\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://commons.wikimedia.org/wiki/File:Golden_Retriever.jpg\">Golden Retriever\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://commons.wikimedia.org/wiki/File:Toller_pup7wks2.JPG\">Toller pup7wks2\u003C/a>\u003C/li>\n\u003Cli>\u003Ca href=\"https://commons.wikimedia.org/wiki/File:White_cute_dog.jpg\">White cute dog\u003C/a>\u003C/li>\n\u003C/ul>\n\u003Cp>The black and white puppy images are AI-generated.\u003C/p>\n",{"headings":110,"localImagePaths":141,"remoteImagePaths":142,"frontmatter":143,"imagePaths":188},[111,115,119,123,126,129,132,135,138],{"depth":112,"slug":113,"text":114},2,"black-dogs-black-dogs","Black Dogs {#black-dogs}",{"depth":116,"slug":117,"text":118},3,"coat-notes","Coat notes",{"depth":120,"slug":121,"text":122},4,"small-detail","Small detail",{"depth":112,"slug":124,"text":125},"summer-dogs-summer-dogs","Summer Dogs {#summer-dogs}",{"depth":112,"slug":127,"text":128},"brown-dogs-brown-dogs","Brown Dogs {#brown-dogs}",{"depth":112,"slug":130,"text":131},"golden-dogs-golden-dogs","Golden Dogs {#golden-dogs}",{"depth":116,"slug":133,"text":134},"training-note","Training note",{"depth":112,"slug":136,"text":137},"white-dogs-white-dogs","White Dogs {#white-dogs}",{"depth":112,"slug":139,"text":140},"sources-sources","Sources {#sources}",[],[],{"title":14,"description":15,"navigation":144,"sections":145},{"label":17,"order":18},[146,155,160,166,177,187],{"id":21,"presentation":147,"gallery":152},{"typography":148},{"preset":24,"overrides":149},{"headings":150},{"h2":151},{"size":28},[153,154],{"image":31,"alt":32,"caption":33},{"image":35,"alt":36,"caption":37},{"id":39,"visible":156,"presentation":157,"gallery":159},{"from":41,"until":42},{"backgroundColor":44,"typography":158},{"preset":46},[],{"id":49,"presentation":161,"gallery":163},{"typography":162},{"preset":52},[164,165],{"image":55,"alt":56,"caption":57},{"image":59,"alt":60,"caption":61},{"id":63,"presentation":167,"gallery":174},{"typography":168},{"overrides":169},{"headings":170,"body":173},{"h2":171,"h3":172},{"size":69},{"size":71},{"lineHeight":73,"paragraphSpacing":74},[175,176],{"image":77,"alt":78,"caption":79},{"image":81,"alt":82,"caption":83},{"id":85,"presentation":178,"gallery":182},{"typography":179},{"overrides":180},{"caption":181},{"spacing":90},[183],{"carousel":184},[185,186],{"image":95,"alt":96,"caption":97},{"image":99,"alt":100,"caption":37},{"id":102},[],"site-route-dog-care",{"id":189,"data":191,"body":211,"filePath":212,"digest":213,"rendered":214},{"title":192,"description":193,"navigation":194,"sections":196},"Dog care","A small route for testing multi-page norna navigation.",{"label":192,"order":195},20,[197,205,208],{"id":198,"presentation":199,"gallery":204},"daily-rhythm",{"typography":200},{"overrides":201},{"headings":202},{"h2":203},{"size":69},[],{"id":206,"gallery":207},"calm-training",[],{"id":209,"gallery":210},"media-notes",[],"## Daily rhythm {#daily-rhythm}\n\nDogs often settle into a home when the day has a clear rhythm. Meals, walks,\nrest and play do not need to be dramatic events, but they become easier to\nunderstand when they happen in a predictable order.\n\nShort routines also make a media page easier to scan. This route exists mainly\nto test how page navigation and site navigation behave together.\n\n### Morning checks\n\nThis `###` heading tests route-level body subheadings.\n\n#### Quiet detail\n\nThis `####` heading should stay smaller than the `###` above it.\n\n## Calm training {#calm-training}\n\nGood training can be quiet. A short session with one clear task is often more\nuseful than a long session with many competing signals.\n\nThe same principle applies to navigation. The page should show where the visitor\nis in the site first, and then offer a simple way to jump within the current\npage.\n\n## Media notes {#media-notes}\n\nThis section is intentionally text-only. Image routes can be added later, but a\nfirst navigation test should make it easy to judge menus, active states and\nanchor positions without layout noise from new media.","site/routes/dog-care/route-content.md","fcf0ad937307e737",{"html":215,"metadata":216},"\u003Ch2 id=\"daily-rhythm-daily-rhythm\">Daily rhythm {#daily-rhythm}\u003C/h2>\n\u003Cp>Dogs often settle into a home when the day has a clear rhythm. Meals, walks,\nrest and play do not need to be dramatic events, but they become easier to\nunderstand when they happen in a predictable order.\u003C/p>\n\u003Cp>Short routines also make a media page easier to scan. This route exists mainly\nto test how page navigation and site navigation behave together.\u003C/p>\n\u003Ch3 id=\"morning-checks\">Morning checks\u003C/h3>\n\u003Cp>This \u003Ccode>###\u003C/code> heading tests route-level body subheadings.\u003C/p>\n\u003Ch4 id=\"quiet-detail\">Quiet detail\u003C/h4>\n\u003Cp>This \u003Ccode>####\u003C/code> heading should stay smaller than the \u003Ccode>###\u003C/code> above it.\u003C/p>\n\u003Ch2 id=\"calm-training-calm-training\">Calm training {#calm-training}\u003C/h2>\n\u003Cp>Good training can be quiet. A short session with one clear task is often more\nuseful than a long session with many competing signals.\u003C/p>\n\u003Cp>The same principle applies to navigation. The page should show where the visitor\nis in the site first, and then offer a simple way to jump within the current\npage.\u003C/p>\n\u003Ch2 id=\"media-notes-media-notes\">Media notes {#media-notes}\u003C/h2>\n\u003Cp>This section is intentionally text-only. Image routes can be added later, but a\nfirst navigation test should make it easy to judge menus, active states and\nanchor positions without layout noise from new media.\u003C/p>\n",{"headings":217,"localImagePaths":233,"remoteImagePaths":234,"frontmatter":235,"imagePaths":246},[218,221,224,227,230],{"depth":112,"slug":219,"text":220},"daily-rhythm-daily-rhythm","Daily rhythm {#daily-rhythm}",{"depth":116,"slug":222,"text":223},"morning-checks","Morning checks",{"depth":120,"slug":225,"text":226},"quiet-detail","Quiet detail",{"depth":112,"slug":228,"text":229},"calm-training-calm-training","Calm training {#calm-training}",{"depth":112,"slug":231,"text":232},"media-notes-media-notes","Media notes {#media-notes}",[],[],{"title":192,"description":193,"navigation":236,"sections":237},{"label":192,"order":195},[238,244,245],{"id":198,"presentation":239},{"typography":240},{"overrides":241},{"headings":242},{"h2":243},{"size":69},{"id":206},{"id":209},[],"theme",["Map",249,250],"site-theme",{"id":249,"data":251,"filePath":304,"digest":305,"rendered":306},{"layout":252,"gallery":278,"typography":285,"presentation":294,"frame":302},{"pageWidth":253,"gutter":254,"spacing":257},"2048px",{"desktop":255,"mobile":256},"clamp(1.25rem, 4vw, 3rem)","16px",{"bodyToImages":258,"finalSectionBottom":261,"firstSectionTop":264,"imageGap":266,"sectionGap":269,"sectionHeadingToBody":270,"subheadingRuleTop":273,"subheadingTop":275},{"desktop":259,"mobile":260},"1.25rem","1rem",{"desktop":262,"mobile":263},"clamp(1.8rem, 3vw, 2.75rem)","1.65rem",{"desktop":265,"mobile":260},"clamp(1.25rem, 2.5vw, 2rem)",{"desktop":267,"mobile":268},"clamp(1.25rem, 2.8vw, 2rem)","1.8rem",{"desktop":262,"mobile":263},{"desktop":271,"mobile":272},"0.55rem","0.45rem",{"desktop":274,"mobile":271},"0.65rem",{"desktop":276,"mobile":277},"1.35rem","1.1rem",{"width":279,"maxAvailableWidthPercent":280,"maxAvailableHeightPercent":282},"55vw",{"desktop":281,"mobile":281},100,{"desktop":283,"mobile":284},74,68,{"fontFamily":286,"preset":287,"overrides":288},"Arial, 'Helvetica Neue', Helvetica, sans-serif","quiet-gallery",{"headings":289},{"h3":290,"h4":292},{"size":71,"spacing":291},"0.7rem",{"size":293,"spacing":271},"small",{"backgroundColor":295,"textColor":296,"inlineStyles":297},"#550000","#ffffff",{"highlight":298,"alert":300},{"color":299},"#ffd84d",{"color":301},"#ff9a3d",{"colors":303},"presentation","site/theme.md","6ea28182719b9911",{"html":307,"metadata":308},"",{"headings":309,"localImagePaths":310,"remoteImagePaths":311,"frontmatter":312,"imagePaths":337},[],[],[],{"layout":313,"gallery":324,"typography":327,"presentation":332,"frame":336},{"pageWidth":253,"gutter":314,"spacing":315},{"desktop":255,"mobile":256},{"firstSectionTop":316,"sectionGap":317,"finalSectionBottom":318,"sectionHeadingToBody":319,"bodyToImages":320,"imageGap":321,"subheadingTop":322,"subheadingRuleTop":323},{"desktop":265,"mobile":260},{"desktop":262,"mobile":263},{"desktop":262,"mobile":263},{"desktop":271,"mobile":272},{"desktop":259,"mobile":260},{"desktop":267,"mobile":268},{"desktop":276,"mobile":277},{"desktop":274,"mobile":271},{"width":279,"maxAvailableWidthPercent":325,"maxAvailableHeightPercent":326},{"desktop":281,"mobile":281},{"desktop":283,"mobile":284},{"fontFamily":286,"preset":287,"overrides":328},{"headings":329},{"h3":330,"h4":331},{"size":71,"spacing":291},{"size":293,"spacing":271},{"backgroundColor":295,"textColor":296,"inlineStyles":333},{"highlight":334,"alert":335},{"color":299},{"color":301},{"colors":303},[]]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{"message":"connected.","label":"vite","level":"info"}
|
|
2
|
+
{"message":"Generated 0ms","label":"types","level":"info"}
|
|
3
|
+
{"message":"connected.","label":"vite","level":"info"}
|
|
4
|
+
{"message":"\n update ▶ New version of Astro available: 7.2.0\n Run npx @astrojs/upgrade to update\n","label":"SKIP_FORMAT","level":"warn"}
|
|
5
|
+
{"message":"Syncing content","label":"content","level":"info"}
|
|
6
|
+
{"message":"Astro config changed","label":"content","level":"info"}
|
|
7
|
+
{"message":"Clearing content store","label":"content","level":"info"}
|
|
8
|
+
{"message":"Synced content","label":"content","level":"info"}
|
|
9
|
+
{"message":"Re-optimizing dependencies because vite config has changed","label":"vite","level":"info"}
|
|
10
|
+
{"message":" astro v7.1.3 ready in 1139 ms\n┃ Local http://127.0.0.1:4321/","label":"SKIP_FORMAT","level":"info"}
|
|
11
|
+
{"message":"watching for file changes...","label":null,"level":"info"}
|
|
12
|
+
{"message":"[200] / 48ms","label":null,"level":"info"}
|
|
13
|
+
{"message":"[200] / 6ms","label":null,"level":"info"}
|
|
14
|
+
{"message":"[200] / 4ms","label":null,"level":"info"}
|
|
15
|
+
{"message":"✨ new dependencies optimized: embla-carousel","label":"vite","level":"info"}
|
|
16
|
+
{"message":"[200] / 12ms","label":null,"level":"info"}
|
|
17
|
+
{"message":"[200] / 8ms","label":null,"level":"info"}
|
|
18
|
+
{"message":"/@fs/Users/jangarefelt/Projects/webbhack/norna/src/styles/global.css","label":"watch","level":"info"}
|
|
19
|
+
{"message":"[200] / 15ms","label":null,"level":"info"}
|
|
20
|
+
{"message":"[200] / 13ms","label":null,"level":"info"}
|
|
21
|
+
{"message":"[200] / 14ms","label":null,"level":"info"}
|
|
22
|
+
{"message":"Syncing content","label":"content","level":"info"}
|
|
23
|
+
{"message":"Content config changed","label":"content","level":"info"}
|
|
24
|
+
{"message":"Clearing content store","label":"content","level":"info"}
|
|
25
|
+
{"message":"[200] / 20ms","label":null,"level":"info"}
|
|
26
|
+
{"message":"Synced content","label":"content","level":"info"}
|
|
27
|
+
{"message":"[200] / 17ms","label":null,"level":"info"}
|
|
28
|
+
{"message":"[200] / 11ms","label":null,"level":"info"}
|
|
29
|
+
{"message":"Reloaded data from theme.md","label":"glob-loader","level":"info"}
|
|
30
|
+
{"message":"[200] / 15ms","label":null,"level":"info"}
|
|
31
|
+
{"message":"Reloaded data from content.md","label":"glob-loader","level":"info"}
|
|
32
|
+
{"message":"[200] / 17ms","label":null,"level":"info"}
|
|
33
|
+
{"message":"Reloaded data from routes/dog-care/route-content.md","label":"glob-loader","level":"info"}
|
|
34
|
+
{"message":"[200] / 31ms","label":null,"level":"info"}
|
|
35
|
+
{"message":"[200] / 15ms","label":null,"level":"info"}
|
|
36
|
+
{"message":"[200] / 12ms","label":null,"level":"info"}
|
|
37
|
+
{"message":"[200] / 7ms","label":null,"level":"info"}
|
|
38
|
+
{"message":"[200] / 16ms","label":null,"level":"info"}
|
|
39
|
+
{"message":"[200] / 3ms","label":null,"level":"info"}
|
|
40
|
+
{"message":"[200] / 8ms","label":null,"level":"info"}
|
|
41
|
+
{"message":"[200] /dog-care/ 17ms","label":null,"level":"info"}
|
|
42
|
+
{"message":"[200] / 9ms","label":null,"level":"info"}
|
|
43
|
+
{"message":"[200] / 13ms","label":null,"level":"info"}
|
|
44
|
+
{"message":"[200] / 5ms","label":null,"level":"info"}
|
|
45
|
+
{"message":"[200] / 10ms","label":null,"level":"info"}
|
|
46
|
+
{"message":"[200] /dog-care/ 6ms","label":null,"level":"info"}
|
|
47
|
+
{"message":"[200] / 8ms","label":null,"level":"info"}
|
|
48
|
+
{"message":"[200] / 9ms","label":null,"level":"info"}
|
|
49
|
+
{"message":"[200] / 9ms","label":null,"level":"info"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return typeof e==`number`}function t(e){return typeof e==`string`}function n(e){return typeof e==`boolean`}function r(e){return Object.prototype.toString.call(e)===`[object Object]`}function i(e){return Math.abs(e)}function a(e){return Math.sign(e)}function o(e,t){return i(e-t)}function s(e,t){return e===0||t===0||i(e)<=i(t)?0:i(o(i(e),i(t))/e)}function c(e){return Math.round(e*100)/100}function l(e){return m(e).map(Number)}function u(e){return e[d(e)]}function d(e){return Math.max(0,e.length-1)}function f(e,t){return t===d(e)}function p(e,t=0){return Array.from(Array(e),(e,n)=>t+n)}function m(e){return Object.keys(e)}function h(e,t){return[e,t].reduce((e,t)=>(m(t).forEach(n=>{let i=e[n],a=t[n];e[n]=r(i)&&r(a)?h(i,a):a}),e),{})}function g(e,t){return t.MouseEvent!==void 0&&e instanceof t.MouseEvent}function _(e,n){let r={start:i,center:a,end:o};function i(){return 0}function a(e){return o(e)/2}function o(e){return n-e}function s(i,a){return t(e)?r[e](i):e(n,i,a)}return{measure:s}}function v(){let e=[];function t(t,n,i,a={passive:!0}){let o;if(`addEventListener`in t)t.addEventListener(n,i,a),o=()=>t.removeEventListener(n,i,a);else{let e=t;e.addListener(i),o=()=>e.removeListener(i)}return e.push(o),r}function n(){e=e.filter(e=>e())}let r={add:t,clear:n};return r}function y(e,t,n,r){let i=v(),a=1e3/60,o=null,s=0,c=0;function l(){i.add(e,`visibilitychange`,()=>{e.hidden&&m()})}function u(){p(),i.clear()}function d(e){if(!c)return;o||(o=e,n(),n());let i=e-o;for(o=e,s+=i;s>=a;)n(),s-=a;r(s/a),c&&=t.requestAnimationFrame(d)}function f(){c||=t.requestAnimationFrame(d)}function p(){t.cancelAnimationFrame(c),o=null,s=0,c=0}function m(){o=null,s=0}return{init:l,destroy:u,start:f,stop:p,update:n,render:r}}function b(e,t){let n=t===`rtl`,r=e===`y`,i=r?`y`:`x`,a=r?`x`:`y`,o=!r&&n?-1:1,s=u(),c=d();function l(e){let{height:t,width:n}=e;return r?t:n}function u(){return r?`top`:n?`right`:`left`}function d(){return r?`bottom`:n?`left`:`right`}function f(e){return e*o}return{scroll:i,cross:a,startEdge:s,endEdge:c,measureSize:l,direction:f}}function x(e=0,t=0){let n=i(e-t);function r(t){return t<e}function a(e){return e>t}function o(e){return r(e)||a(e)}function s(n){return o(n)?r(n)?e:t:n}function c(e){return n?e-n*Math.ceil((e-t)/n):e}return{length:n,max:t,min:e,constrain:s,reachedAny:o,reachedMax:a,reachedMin:r,removeOffset:c}}function S(e,t,n){let{constrain:r}=x(0,e),a=e+1,o=s(t);function s(e){return n?i((a+e)%a):r(e)}function c(){return o}function l(e){return o=s(e),f}function u(e){return d().set(c()+e)}function d(){return S(e,c(),n)}let f={get:c,set:l,add:u,clone:d};return f}function C(e,t,r,c,l,u,d,f,p,m,h,_,y,b,S,C,w,T,E){let{cross:D,direction:O}=e,k=[`INPUT`,`SELECT`,`TEXTAREA`],A={passive:!1},j=v(),M=v(),ee=x(50,225).constrain(b.measure(20)),te={mouse:300,touch:400},ne={mouse:500,touch:600},re=S?43:25,ie=!1,N=0,P=0,F=!1,I=!1,L=!1,R=!1;function ae(e){if(!E)return;function r(t){(n(E)||E(e,t))&&ue(t)}let i=t;j.add(i,`dragstart`,e=>e.preventDefault(),A).add(i,`touchmove`,()=>void 0,A).add(i,`touchend`,()=>void 0).add(i,`touchstart`,r).add(i,`mousedown`,r).add(i,`touchcancel`,V).add(i,`contextmenu`,V).add(i,`click`,de,!0)}function oe(){j.clear(),M.clear()}function se(){let e=R?r:t;M.add(e,`touchmove`,B,A).add(e,`touchend`,V).add(e,`mousemove`,B,A).add(e,`mouseup`,V)}function ce(e){let t=e.nodeName||``;return k.includes(t)}function le(){return(S?ne:te)[R?`mouse`:`touch`]}function z(e,t){let n=_.add(a(e)*-1),r=h.byDistance(e,!S).distance;return S||i(e)<ee?r:w&&t?r*.5:h.byIndex(n.get(),0).distance}function ue(e){let t=g(e,c);R=t,L=S&&t&&!e.buttons&&ie,ie=o(l.get(),d.get())>=2,!(t&&e.button!==0)&&(ce(e.target)||(F=!0,u.pointerDown(e),m.useFriction(0).useDuration(0),l.set(d),se(),N=u.readPoint(e),P=u.readPoint(e,D),y.emit(`pointerDown`)))}function B(e){if(!g(e,c)&&e.touches.length>=2)return V(e);let t=u.readPoint(e),n=u.readPoint(e,D),r=o(t,N),i=o(n,P);if(!I&&!R&&(!e.cancelable||(I=r>i,!I)))return V(e);let a=u.pointerMove(e);r>C&&(L=!0),m.useFriction(.3).useDuration(.75),f.start(),l.add(O(a)),e.preventDefault()}function V(e){let t=h.byDistance(0,!1).index!==_.get(),n=u.pointerUp(e)*le(),r=z(O(n),t),i=s(n,r),a=re-10*i,o=T+i/50;I=!1,F=!1,M.clear(),m.useDuration(a).useFriction(o),p.distance(r,!S),R=!1,y.emit(`pointerUp`)}function de(e){L&&=(e.stopPropagation(),e.preventDefault(),!1)}function H(){return F}return{init:ae,destroy:oe,pointerDown:H}}function w(e,t){let n,r;function a(e){return e.timeStamp}function o(n,r){let i=`client${(r||e.scroll)===`x`?`X`:`Y`}`;return(g(n,t)?n:n.touches[0])[i]}function s(e){return n=e,r=e,o(e)}function c(e){let t=o(e)-o(r),i=a(e)-a(n)>170;return r=e,i&&(n=e),t}function l(e){if(!n||!r)return 0;let t=o(r)-o(n),s=a(e)-a(n),c=a(e)-a(r)>170,l=t/s;return s&&!c&&i(l)>.1?l:0}return{pointerDown:s,pointerMove:c,pointerUp:l,readPoint:o}}function T(){function e(e){let{offsetTop:t,offsetLeft:n,offsetWidth:r,offsetHeight:i}=e;return{top:t,right:n+r,bottom:t+i,left:n,width:r,height:i}}return{measure:e}}function E(e){function t(t){return t/100*e}return{measure:t}}function D(e,t,r,a,o,s,c){let l=[e].concat(a),u,d,f=[],p=!1;function m(e){return o.measureSize(c.measure(e))}function h(o){if(!s)return;d=m(e),f=a.map(m);function c(n){for(let r of n){if(p)return;let n=r.target===e,s=a.indexOf(r.target),c=n?d:f[s];if(i(m(n?e:a[s])-c)>=.5){o.reInit(),t.emit(`resize`);break}}}u=new ResizeObserver(e=>{(n(s)||s(o,e))&&c(e)}),r.requestAnimationFrame(()=>{l.forEach(e=>u.observe(e))})}function g(){p=!0,u&&u.disconnect()}return{init:h,destroy:g}}function O(e,t,n,r,o,s){let c=0,l=0,u=o,d=s,f=e.get(),p=0;function m(){let t=r.get()-e.get(),i=!u,o=0;return i?(c=0,n.set(r),e.set(r),o=t):(n.set(e),c+=t/u,c*=d,f+=c,e.add(c),o=f-p),l=a(o),p=f,C}function h(){return i(r.get()-t.get())<.001}function g(){return u}function _(){return l}function v(){return c}function y(){return x(o)}function b(){return S(s)}function x(e){return u=e,C}function S(e){return d=e,C}let C={direction:_,duration:g,velocity:v,seek:m,settled:h,useBaseFriction:b,useBaseDuration:y,useFriction:S,useDuration:x};return C}function k(e,t,n,r,a){let o=a.measure(10),s=a.measure(50),c=x(.1,.99),l=!1;function u(){return!(l||!e.reachedAny(n.get())||!e.reachedAny(t.get()))}function d(a){if(!u())return;let l=i(e[e.reachedMin(t.get())?`min`:`max`]-t.get()),d=n.get()-t.get(),f=c.constrain(l/s);n.subtract(d*f),!a&&i(d)<o&&(n.set(e.constrain(n.get())),r.useDuration(25).useBaseFriction())}function f(e){l=!e}return{shouldConstrain:u,constrain:d,toggleActive:f}}function A(e,t,n,r,i){let a=x(-t+e,0),s=m(),c=p(),l=h();function d(e,t){return o(e,t)<=1}function p(){let e=s[0],t=u(s);return x(s.lastIndexOf(e),s.indexOf(t)+1)}function m(){return n.map((e,t)=>{let{min:r,max:i}=a,o=a.constrain(e),s=!t,c=f(n,t);return s?i:c||d(r,o)?r:d(i,o)?i:o}).map(e=>parseFloat(e.toFixed(3)))}function h(){if(t<=e+i)return[a.max];if(r===`keepSnaps`)return s;let{min:n,max:o}=c;return s.slice(n,o)}return{snapsContained:l,scrollContainLimit:c}}function j(e,t,n){let r=t[0];return{limit:x(n?r-e:u(t),r)}}function M(e,t,n,r){let i=.1,{reachedMin:a,reachedMax:o}=x(t.min+i,t.max+i);function s(e){return e===1?o(n.get()):e===-1?a(n.get()):!1}function c(t){if(!s(t))return;let n=t*-1*e;r.forEach(e=>e.add(n))}return{loop:c}}function ee(e){let{max:t,length:n}=e;function r(e){let r=e-t;return n?r/-n:0}return{get:r}}function te(e,t,n,r,a){let{startEdge:o,endEdge:s}=e,{groupSlides:c}=a,l=p().map(t.measure),d=m(),f=h();function p(){return c(r).map(e=>u(e)[s]-e[0][o]).map(i)}function m(){return r.map(e=>n[o]-e[o]).map(e=>-i(e))}function h(){return c(d).map(e=>e[0]).map((e,t)=>e+l[t])}return{snaps:d,snapsAligned:f}}function ne(e,t,n,r,i,a){let{groupSlides:o}=i,{min:s,max:c}=r,l=m();function m(){let r=o(a),i=!e||t===`keepSnaps`;return n.length===1?[a]:i?r:r.slice(s,c).map((e,t,n)=>{let r=!t,i=f(n,t);return r?p(u(n[0])+1):i?p(d(a)-u(n)[0]+1,u(n)[0]):e})}return{slideRegistry:l}}function re(e,t,n,r,o){let{reachedAny:s,removeOffset:c,constrain:l}=r;function d(e){return e.concat().sort((e,t)=>i(e)-i(t))[0]}function f(n){let r=e?c(n):l(n),{index:a}=t.map((e,t)=>({diff:p(e-r,0),index:t})).sort((e,t)=>i(e.diff)-i(t.diff))[0];return{index:a,distance:r}}function p(t,r){let i=[t,t+n,t-n];if(!e)return t;if(!r)return d(i);let o=i.filter(e=>a(e)===r);return o.length?d(o):u(i)-n}function m(e,n){return{index:e,distance:p(t[e]-o.get(),n)}}function h(n,r){let i=o.get()+n,{index:a,distance:c}=f(i),l=!e&&s(i);return!r||l?{index:a,distance:n}:{index:a,distance:n+p(t[a]-c,0)}}return{byDistance:h,byIndex:m,shortcut:p}}function ie(e,t,n,r,i,a,o){function s(i){let s=i.distance,c=i.index!==t.get();a.add(s),s&&(r.duration()?e.start():(e.update(),e.render(1),e.update())),c&&(n.set(t.get()),t.set(i.index),o.emit(`select`))}function c(e,t){s(i.byDistance(e,t))}function l(e,n){let r=t.clone().set(e);s(i.byIndex(r.get(),n))}return{distance:c,index:l}}function N(t,r,i,a,o,s,c,l){let u={passive:!0,capture:!0},d=0;function f(f){if(!l)return;function m(n){if(new Date().getTime()-d>10)return;c.emit(`slideFocusStart`),t.scrollLeft=0;let r=i.findIndex(e=>e.includes(n));e(r)&&(o.useDuration(0),a.index(r,0),c.emit(`slideFocus`))}s.add(document,`keydown`,p,!1),r.forEach((e,t)=>{s.add(e,`focus`,e=>{(n(l)||l(f,e))&&m(t)},u)})}function p(e){e.code===`Tab`&&(d=new Date().getTime())}return{init:f}}function P(t){let n=t;function r(){return n}function i(e){n=s(e)}function a(e){n+=s(e)}function o(e){n-=s(e)}function s(t){return e(t)?t:t.get()}return{get:r,set:i,add:a,subtract:o}}function F(e,t){let n=e.scroll===`x`?o:s,r=t.style,i=null,a=!1;function o(e){return`translate3d(${e}px,0px,0px)`}function s(e){return`translate3d(0px,${e}px,0px)`}function l(t){if(a)return;let o=c(e.direction(t));o!==i&&(r.transform=n(o),i=o)}function u(e){a=!e}function d(){a||(r.transform=``,t.getAttribute(`style`)||t.removeAttribute(`style`))}return{clear:d,to:l,toggleActive:u}}function I(e,t,n,r,i,a,o,s,c){let u=.5,d=l(i),f=l(i).reverse(),p=v().concat(y());function m(e,t){return e.reduce((e,t)=>e-i[t],t)}function h(e,t){return e.reduce((e,n)=>m(e,t)>0?e.concat([n]):e,[])}function g(e){return a.map((n,i)=>({start:n-r[i]+u+e,end:n+t-u+e}))}function _(t,r,i){let a=g(r);return t.map(t=>{let r=i?0:-n,o=i?n:0,l=i?`end`:`start`,u=a[t][l];return{index:t,loopPoint:u,slideLocation:P(-1),translate:F(e,c[t]),target:()=>s.get()>u?r:o}})}function v(){let e=o[0];return _(h(f,e),n,!1)}function y(){return _(h(d,t-o[0]-1),-n,!0)}function b(){return p.every(({index:e})=>m(d.filter(t=>t!==e),t)<=.1)}function x(){p.forEach(e=>{let{target:t,translate:n,slideLocation:r}=e,i=t();i!==r.get()&&(n.to(i),r.set(i))})}function S(){p.forEach(e=>e.translate.clear())}return{canLoop:b,clear:S,loop:x,loopPoints:p}}function L(e,t,r){let i,a=!1;function o(o){if(!r)return;function s(e){for(let n of e)if(n.type===`childList`){o.reInit(),t.emit(`slidesChanged`);break}}i=new MutationObserver(e=>{a||(n(r)||r(o,e))&&s(e)}),i.observe(e,{childList:!0})}function s(){i&&i.disconnect(),a=!0}return{init:o,destroy:s}}function R(e,t,n,r){let i={},a=null,o=null,s,c=!1;function l(){s=new IntersectionObserver(e=>{c||(e.forEach(e=>{let n=t.indexOf(e.target);i[n]=e}),a=null,o=null,n.emit(`slidesInView`))},{root:e.parentElement,threshold:r}),t.forEach(e=>s.observe(e))}function u(){s&&s.disconnect(),c=!0}function d(e){return m(i).reduce((t,n)=>{let r=parseInt(n),{isIntersecting:a}=i[r];return(e&&a||!e&&!a)&&t.push(r),t},[])}function f(e=!0){if(e&&a)return a;if(!e&&o)return o;let t=d(e);return e&&(a=t),e||(o=t),t}return{init:l,destroy:u,get:f}}function ae(e,t,n,r,a,o){let{measureSize:s,startEdge:c,endEdge:l}=e,d=n[0]&&a,p=_(),m=v(),h=n.map(s),g=y();function _(){if(!d)return 0;let e=n[0];return i(t[c]-e[c])}function v(){if(!d)return 0;let e=o.getComputedStyle(u(r));return parseFloat(e.getPropertyValue(`margin-${l}`))}function y(){return n.map((e,t,n)=>{let r=!t,i=f(n,t);return r?h[t]+p:i?h[t]+m:n[t+1][c]-e[c]}).map(i)}return{slideSizes:h,slideSizesWithGaps:g,startGap:p,endGap:m}}function oe(t,n,r,a,o,s,c,f,p){let{startEdge:m,endEdge:h,direction:g}=t,_=e(r);function v(e,t){return l(e).filter(e=>e%t===0).map(n=>e.slice(n,n+t))}function y(e){return e.length?l(e).reduce((t,r,l)=>{let _=u(t)||0,v=_===0,y=r===d(e),b=o[m]-s[_][m],x=o[m]-s[r][h],S=!a&&v?g(c):0,C=i(x-(!a&&y?g(f):0)-(b+S));return l&&C>n+p&&t.push(r),y&&t.push(e.length),t},[]).map((t,n,r)=>{let i=Math.max(r[n-1]||0);return e.slice(i,t)}):[]}function b(e){return _?v(e,r):y(e)}return{groupSlides:b}}function se(e,t,n,r,i,a,o){let{align:s,axis:c,direction:f,startIndex:p,loop:m,duration:h,dragFree:g,dragThreshold:x,inViewThreshold:se,slidesToScroll:ce,skipSnaps:le,containScroll:z,watchResize:ue,watchSlides:B,watchDrag:V,watchFocus:de}=a,H=T(),U=H.measure(t),fe=n.map(H.measure),W=b(c,f),G=W.measureSize(U),pe=E(G),me=_(s,G),he=!m&&!!z,{slideSizes:ge,slideSizesWithGaps:_e,startGap:ve,endGap:ye}=ae(W,U,fe,n,m||!!z,i),be=oe(W,G,ce,m,U,fe,ve,ye,2),{snaps:xe,snapsAligned:Se}=te(W,me,U,fe,be),K=-u(xe)+u(_e),{snapsContained:Ce,scrollContainLimit:we}=A(G,K,Se,z,2),q=he?Ce:Se,{limit:J}=j(K,q,m),Y=S(d(q),p,m),Te=Y.clone(),Ee=l(n),De=({dragHandler:e,scrollBody:t,scrollBounds:n,options:{loop:r}})=>{r||n.constrain(e.pointerDown()),t.seek()},Oe=({scrollBody:e,translate:t,location:n,offsetLocation:r,previousLocation:i,scrollLooper:a,slideLooper:o,dragHandler:s,animation:c,eventHandler:l,scrollBounds:u,options:{loop:d}},f)=>{let p=e.settled(),m=!u.shouldConstrain(),h=d?p:p&&m,g=h&&!s.pointerDown();g&&c.stop();let _=n.get()*f+i.get()*(1-f);r.set(_),d&&(a.loop(e.direction()),o.loop()),t.to(r.get()),g&&l.emit(`settle`),h||l.emit(`scroll`)},ke=y(r,i,()=>De(Be),e=>Oe(Be,e)),Ae=.68,X=q[Y.get()],je=P(X),Me=P(X),Z=P(X),Q=P(X),$=O(je,Z,Me,Q,h,Ae),Ne=re(m,q,K,J,Q),Pe=ie(ke,Y,Te,$,Ne,Q,o),Fe=ee(J),Ie=v(),Le=R(t,n,o,se),{slideRegistry:Re}=ne(he,z,q,we,be,Ee),ze=N(e,n,Re,Pe,$,Ie,o,de),Be={ownerDocument:r,ownerWindow:i,eventHandler:o,containerRect:U,slideRects:fe,animation:ke,axis:W,dragHandler:C(W,e,r,i,Q,w(W,i),je,ke,Pe,$,Ne,Y,o,pe,g,x,le,Ae,V),eventStore:Ie,percentOfView:pe,index:Y,indexPrevious:Te,limit:J,location:je,offsetLocation:Z,previousLocation:Me,options:a,resizeHandler:D(t,o,i,n,W,ue,H),scrollBody:$,scrollBounds:k(J,Z,Q,$,pe),scrollLooper:M(K,J,Z,[je,Z,Me,Q]),scrollProgress:Fe,scrollSnapList:q.map(Fe.get),scrollSnaps:q,scrollTarget:Ne,scrollTo:Pe,slideLooper:I(W,G,K,ge,_e,xe,q,Z,n),slideFocus:ze,slidesHandler:L(t,o,B),slidesInView:Le,slideIndexes:Ee,slideRegistry:Re,slidesToScroll:be,target:Q,translate:F(W,t)};return Be}function ce(){let e={},t;function n(e){t=e}function r(t){return e[t]||[]}function i(e){return r(e).forEach(n=>n(t,e)),c}function a(t,n){return e[t]=r(t).concat([n]),c}function o(t,n){return e[t]=r(t).filter(e=>e!==n),c}function s(){e={}}let c={init:n,emit:i,off:o,on:a,clear:s};return c}var le={align:`center`,axis:`x`,container:null,slides:null,containScroll:`trimSnaps`,direction:`ltr`,slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function z(e){function t(e,t){return h(e,t||{})}function n(n){let r=n.breakpoints||{};return t(n,m(r).filter(t=>e.matchMedia(t).matches).map(e=>r[e]).reduce((e,n)=>t(e,n),{}))}function r(t){return t.map(e=>m(e.breakpoints||{})).reduce((e,t)=>e.concat(t),[]).map(e.matchMedia)}return{mergeOptions:t,optionsAtMedia:n,optionsMediaQueries:r}}function ue(e){let t=[];function n(n,r){return t=r.filter(({options:t})=>e.optionsAtMedia(t).active!==!1),t.forEach(t=>t.init(n,e)),r.reduce((e,t)=>Object.assign(e,{[t.name]:t}),{})}function r(){t=t.filter(e=>e.destroy())}return{init:n,destroy:r}}function B(e,n,r){let i=e.ownerDocument,a=i.defaultView,o=z(a),s=ue(o),c=v(),l=ce(),{mergeOptions:u,optionsAtMedia:d,optionsMediaQueries:f}=o,{on:p,off:m,emit:h}=l,g=k,_=!1,y,b=u(le,B.globalOptions),x=u(b),S=[],C,w,T;function E(){let{container:n,slides:r}=x;w=(t(n)?e.querySelector(n):n)||e.children[0];let i=t(r)?w.querySelectorAll(r):r;T=[].slice.call(i||w.children)}function D(t){let n=se(e,w,T,i,a,t,l);return t.loop&&!n.slideLooper.canLoop()?D(Object.assign({},t,{loop:!1})):n}function O(e,t){_||(b=u(b,e),x=d(b),S=t||S,E(),y=D(x),f([b,...S.map(({options:e})=>e)]).forEach(e=>c.add(e,`change`,k)),x.active&&(y.translate.to(y.location.get()),y.animation.init(),y.slidesInView.init(),y.slideFocus.init(H),y.eventHandler.init(H),y.resizeHandler.init(H),y.slidesHandler.init(H),y.options.loop&&y.slideLooper.loop(),w.offsetParent&&T.length&&y.dragHandler.init(H),C=s.init(H,S)))}function k(e,t){let n=P();A(),O(u({startIndex:n},e),t),l.emit(`reInit`)}function A(){y.dragHandler.destroy(),y.eventStore.clear(),y.translate.clear(),y.slideLooper.clear(),y.resizeHandler.destroy(),y.slidesHandler.destroy(),y.slidesInView.destroy(),y.animation.destroy(),s.destroy(),c.clear()}function j(){_||(_=!0,c.clear(),A(),l.emit(`destroy`),l.clear())}function M(e,t,n){!x.active||_||(y.scrollBody.useBaseFriction().useDuration(t===!0?0:x.duration),y.scrollTo.index(e,n||0))}function ee(e){M(y.index.add(1).get(),e,-1)}function te(e){M(y.index.add(-1).get(),e,1)}function ne(){return y.index.add(1).get()!==P()}function re(){return y.index.add(-1).get()!==P()}function ie(){return y.scrollSnapList}function N(){return y.scrollProgress.get(y.offsetLocation.get())}function P(){return y.index.get()}function F(){return y.indexPrevious.get()}function I(){return y.slidesInView.get()}function L(){return y.slidesInView.get(!1)}function R(){return C}function ae(){return y}function oe(){return e}function V(){return w}function de(){return T}let H={canScrollNext:ne,canScrollPrev:re,containerNode:V,internalEngine:ae,destroy:j,off:m,on:p,emit:h,plugins:R,previousScrollSnap:F,reInit:g,rootNode:oe,scrollNext:ee,scrollPrev:te,scrollProgress:N,scrollSnapList:ie,scrollTo:M,selectedScrollSnap:P,slideNodes:de,slidesInView:I,slidesNotInView:L};return O(n,r),setTimeout(()=>l.emit(`init`),0),H}B.globalOptions=void 0,document.querySelectorAll(`[data-carousel]`).forEach(e=>{let t=e.querySelector(`[data-carousel-viewport]`),n=e.querySelector(`[data-carousel-previous]`),r=e.querySelector(`[data-carousel-next]`),i=e.querySelector(`[data-carousel-position]`),a=Array.from(e.querySelectorAll(`[data-carousel-caption]`)),o=Array.from(e.querySelectorAll(`[data-carousel-slide]`));if(!t||!n||!r||!i||o.length<2)return;let s,c=()=>{e.classList.add(`is-interacting`),window.clearTimeout(s),s=window.setTimeout(()=>{e.classList.remove(`is-interacting`)},1600)};e.dataset.carouselReady=`true`;let l=B(t,{align:`start`,containScroll:!1,loop:!0}),u=()=>{let e=l.selectedScrollSnap();o.forEach((t,n)=>{let r=n===e;t.classList.toggle(`is-active`,r),t.setAttribute(`aria-hidden`,String(!r))}),a.forEach(t=>{let n=Number(t.dataset.carouselCaptionIndex)===e;t.classList.toggle(`is-active`,n),t.setAttribute(`aria-hidden`,String(!n))}),n.disabled=!1,r.disabled=!1,i.textContent=`${e+1} / ${o.length}`};n.addEventListener(`click`,()=>{c(),l.scrollPrev()}),r.addEventListener(`click`,()=>{c(),l.scrollNext()}),e.addEventListener(`focusin`,c),e.addEventListener(`pointerdown`,c),e.addEventListener(`keydown`,e=>{e.key===`ArrowLeft`&&(e.preventDefault(),c(),l.scrollPrev()),e.key===`ArrowRight`&&(e.preventDefault(),c(),l.scrollNext())}),l.on(`select`,()=>{c(),u()}),l.on(`reInit`,u),u()});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{box-sizing:border-box}:root{--color-page:#000;--color-surface:#101010;--color-text:#f7f4ee;--color-muted:#aaa49a;--color-soft:#302f2c;--color-accent:#d8d2c8;--color-border:#ffffff24;--color-nav-background:#000000e6;--color-nav-separator:#ffffff47;--font-sans:Arial, "Helvetica Neue", Helvetica, sans-serif;--font-serif:Georgia, "Times New Roman", serif;--page-width:1180px;--text-width:680px;--gallery-width:900px;--gallery-max-available-width-desktop:100%;--gallery-max-available-width-mobile:100%;--gallery-max-available-width:var(--gallery-max-available-width-desktop);--gallery-layout-width:min(var(--gallery-width), var(--gallery-max-available-width));--gallery-max-image-height-desktop:74svh;--gallery-max-image-height-mobile:68svh;--gallery-max-image-height:var(--gallery-max-image-height-desktop);--nav-top-safety-inset:0px;--space-nav-to-first-section-desktop:clamp(1.875rem, 3vw, 2.75rem);--space-nav-to-first-section-mobile:1.375rem;--space-nav-to-first-section:var(--space-nav-to-first-section-desktop);--space-section-title-to-body-desktop:clamp(.5625rem, 1.25vw, .75rem);--space-section-title-to-body-mobile:.4375rem;--space-section-title-to-body:var(--space-section-title-to-body-desktop);--space-section-body-to-gallery-desktop:clamp(1.25rem, 2.5vw, 2rem);--space-section-body-to-gallery-mobile:1.25rem;--space-section-body-to-gallery:var(--space-section-body-to-gallery-desktop);--space-gallery-item-desktop:clamp(1.5rem, 3.5vw, 2.75rem);--space-gallery-item-mobile:2.75rem;--space-gallery-item:var(--space-gallery-item-desktop);--space-section-to-section-desktop:clamp(2.55rem, 4.2vw, 3.9rem);--space-section-to-section-mobile:2.25rem;--space-section-to-section:var(--space-section-to-section-desktop);--space-final-section-bottom-desktop:var(--space-section-to-section-desktop);--space-final-section-bottom-mobile:var(--space-section-to-section-mobile);--space-final-section-bottom:var(--space-final-section-bottom-desktop);--space-subheading-top-desktop:2rem;--space-subheading-top-mobile:1.6rem;--space-subheading-top:var(--space-subheading-top-desktop);--space-subheading-rule-top-desktop:1rem;--space-subheading-rule-top-mobile:.8rem;--space-subheading-rule-top:var(--space-subheading-rule-top-desktop);--content-gutter-desktop:clamp(1.25rem, 4vw, 3rem);--content-gutter-mobile:1rem;--content-gutter:var(--content-gutter-desktop);--site-top-anchor-offset:4.5rem;color-scheme:dark;scroll-behavior:smooth;scroll-padding-top:var(--site-top-anchor-offset)}html{background:var(--color-page);min-height:100%}body{isolation:isolate;background:var(--color-page);min-height:100svh;color:var(--color-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}img{max-width:100%;height:auto;display:block}a{color:var(--color-accent);transition:color .18s,opacity .18s}::selection{background:var(--color-text);color:var(--color-page)}.skip-link{z-index:100;background:var(--color-text);color:var(--color-surface);padding:.75rem 1rem;font-weight:700;text-decoration:none;position:fixed;top:.75rem;left:.75rem;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}.site-top{z-index:10;padding-top:var(--nav-top-safety-inset);padding-top:max(env(safe-area-inset-top,0px), var(--nav-top-safety-inset));border-bottom:1px solid var(--color-border);background-color:var(--site-top-background-color,var(--color-nav-background));color:var(--site-top-text-color,var(--color-text));backdrop-filter:blur(16px);transition:background-color .18s,color .18s;position:sticky;top:0}.site-nav-row{width:min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));justify-content:space-between;align-items:center;gap:1rem;margin:0 auto;padding:.8rem 0 .7rem;display:flex}.site-brand,.site-nav a,.mobile-nav-menu summary,.mobile-nav-panel a,.page-nav a{color:currentColor;text-decoration:none}.site-brand{letter-spacing:.08em;text-transform:uppercase;flex:none;font-size:.82rem;font-weight:700;line-height:1.1}.site-nav ul,.mobile-nav-panel ul,.page-nav ul{margin:0;padding:0;list-style:none}.site-nav ul{flex-wrap:wrap;justify-content:flex-end;gap:.35rem clamp(.9rem,2.6vw,2rem);display:flex}.site-nav a,.mobile-nav-panel a{letter-spacing:.08em;opacity:.72;text-transform:uppercase;font-size:.78rem;font-weight:500;line-height:1.2;display:block}.site-nav a:hover,.site-nav a[aria-current=page],.mobile-nav-panel a:hover,.mobile-nav-panel a[aria-current=page]{opacity:1}.site-nav a[aria-current=page]{text-underline-offset:.35em;text-decoration:underline 1px}.mobile-nav-menu{display:none}.page-nav{border-top:1px solid color-mix(in srgb, currentColor 14%, transparent)}.page-nav ul{flex-wrap:wrap;justify-content:center;gap:0 clamp(1.4rem,4vw,3.25rem);display:flex}.page-nav li{position:relative}.page-nav li+li:before{color:currentColor;content:"/";opacity:.28;font-size:.75rem;position:absolute;top:50%;left:calc(clamp(1.4rem,4vw,3.25rem)/-2 - .1rem);transform:translateY(-50%)}.page-nav a{letter-spacing:.12em;opacity:.76;text-transform:uppercase;padding:1.05rem 0 .95rem;font-size:.76rem;font-weight:500;line-height:1;text-decoration:none;display:block;position:relative}.page-nav a:after{content:"";opacity:0;background:currentColor;height:1px;transition:opacity .18s,transform .18s;position:absolute;bottom:.62rem;left:0;right:0;transform:scaleX(0)}.page-nav a:hover,.page-nav a[aria-current=true],.mobile-page-nav a[aria-current=true]{opacity:1}.page-nav a[aria-current=true]:after{opacity:.75;transform:scaleX(1)}@media (hover:hover) and (pointer:fine){:root{--nav-top-safety-inset:.625rem}}.site-content{z-index:2;width:min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));margin:0 auto;padding:0;position:relative}.site-footer{isolation:isolate;z-index:2;width:min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));background-color:var(--site-footer-background-color,var(--color-page));color:var(--site-footer-text-color,var(--color-muted));text-align:center;margin:0 auto;padding:0 0 2.5rem;font-size:.75rem;line-height:1.5;position:relative}.site-footer:before{z-index:-1;background-color:var(--site-footer-background-color,var(--color-page));content:"";pointer-events:none;position:absolute;inset:0 calc(50% - 50vw)}.site-footer p{margin:0}.site-footer span{display:block}.site-section{isolation:isolate;background-color:var(--section-background-color,transparent);padding:var(--space-nav-to-first-section) 0 0;position:relative}.site-section:before{z-index:-1;background-color:var(--section-background-color,transparent);content:"";pointer-events:none;position:absolute;inset:0 calc(50% - 50vw)}.site-section+.site-section{padding-top:var(--space-section-to-section);margin-top:0}.site-section:last-child{padding-bottom:var(--space-final-section-bottom)}.section-card{color:var(--section-text-color,var(--color-text));background:0 0}.section-header{width:min(100%, var(--section-heading-width-desktop,760px));padding:0 0 var(--section-heading-spacing,var(--space-section-title-to-body));text-align:var(--section-heading-align-desktop,center);margin:0 auto}.section-header h1,.section-header h2,p,ul{margin-top:0}.section-header h1,.section-header h2{color:inherit;font-size:var(--section-heading-font-size-desktop,clamp(1.35rem, 1.1rem + .9vw, 2rem));letter-spacing:0;font-weight:400;line-height:var(--section-heading-line-height,1.04);text-transform:uppercase;overflow-wrap:anywhere;margin-bottom:0}.section-body{width:100%;color:inherit;font-family:var(--font-sans);margin:0 auto;font-size:clamp(.96rem,.94rem + .08vw,1rem)}.section-markdown{width:min(100%, var(--section-body-width-desktop,var(--text-width)));margin:0 auto var(--space-section-body-to-gallery);font-size:var(--section-body-font-size-desktop,clamp(.96rem, .94rem + .08vw, 1rem));line-height:var(--section-body-line-height,1.78);text-align:var(--section-body-align-desktop,center)}.section-markdown p{margin:0 0 var(--section-body-paragraph-spacing,1em)}.section-markdown .inline-style{color:var(--inline-style-color)}.section-body-text-only .section-markdown,.section-markdown>:last-child,.gallery-meta :last-child{margin-bottom:0}.section-markdown h3{margin:var(--space-subheading-top) 0 var(--section-markdown-h3-spacing,.9rem);border-top:1px solid var(--color-soft);padding-top:var(--space-subheading-rule-top);font-family:var(--font-sans);font-size:var(--section-markdown-h3-font-size-desktop,.82rem);letter-spacing:0;line-height:var(--section-markdown-h3-line-height,1.35);text-align:var(--section-markdown-h3-align-desktop,left);text-transform:uppercase}.section-markdown h4{margin:0 0 var(--section-markdown-h4-spacing,.85rem);color:inherit;font-size:var(--section-markdown-h4-font-size-desktop,clamp(.96rem, .94rem + .08vw, 1rem));letter-spacing:0;font-weight:400;line-height:var(--section-markdown-h4-line-height,1.5);text-align:var(--section-markdown-h4-align-desktop,left)}.section-markdown ul,.section-markdown ol{text-align:left;margin-left:auto;margin-right:auto;padding-left:1.2rem;display:inline-block}.section-markdown li+li{margin-top:.35rem}.gallery{gap:var(--space-gallery-item);margin-top:0;display:grid}.gallery-item{align-content:start;gap:.7rem;margin:0;display:grid}.gallery-image-frame{width:min(100%, var(--gallery-layout-width));background:0 0;place-items:center;margin:0 auto;display:grid}.gallery-image{width:auto;max-width:100%;height:auto;max-height:var(--gallery-max-image-height);object-fit:contain;background:0 0;margin:0 auto;display:block}.gallery-image.gallery-image-landscape{width:100%;max-height:none}.gallery-carousel{outline:none;position:relative}.gallery-carousel:focus-visible{outline-offset:.5rem;outline:2px solid}.gallery-carousel-slide{flex:0 0 100%;min-width:0;margin:0}.gallery-carousel-stage{width:min(100%, var(--gallery-layout-width));max-height:var(--gallery-max-image-height);aspect-ratio:var(--gallery-carousel-aspect-ratio,auto);margin:0 auto;display:grid;position:relative}.gallery-carousel-viewport{height:100%}.gallery-carousel-image-frame{place-items:center;width:100%;height:100%;display:grid}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-viewport{overflow:hidden}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-slides{touch-action:pan-y pinch-zoom;height:100%;display:flex}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-slide{align-content:start;height:100%;display:grid}.gallery-carousel-image-frame .gallery-image.gallery-image-landscape{width:100%;max-width:100%;height:auto;max-height:100%}.gallery-carousel-image-frame .gallery-image:not(.gallery-image-landscape){width:auto;max-width:100%;height:100%;max-height:100%}.gallery-carousel-button,.gallery-carousel-position{display:none}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-button,.gallery-carousel[data-carousel-ready=true] .gallery-carousel-position{display:grid}.gallery-carousel-button{z-index:2;background:var(--section-background-color,var(--color-page));width:2.625rem;height:2.625rem;color:inherit;cursor:pointer;font:inherit;opacity:.88;border:1px solid;border-radius:999px;place-items:center;padding:0;font-size:2rem;line-height:1;position:absolute;top:50%;transform:translateY(-50%);box-shadow:0 .25rem 1rem #0000001f}.gallery-carousel-button:hover:not(:disabled),.gallery-carousel-button:focus-visible:not(:disabled){color:var(--section-background-color,var(--color-page));opacity:1;background:currentColor}.gallery-carousel-button:disabled{cursor:default;opacity:0;pointer-events:none}.gallery-carousel-button-previous{left:.75rem}.gallery-carousel-button-next{right:.75rem}.gallery-carousel-position{z-index:2;background:var(--section-background-color,var(--color-page));text-align:center;border:1px solid;place-items:center;min-width:3.25rem;min-height:1.75rem;font-size:.85rem;line-height:1;position:absolute;bottom:.75rem;right:.75rem;box-shadow:0 .25rem 1rem #0000001f}.gallery-carousel-captions{width:min(100%, var(--gallery-layout-width));margin:0 auto}.gallery-carousel-caption{margin-bottom:0}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-captions{display:grid}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-caption{visibility:hidden;pointer-events:none;grid-area:1/1}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-caption.is-active{visibility:visible;pointer-events:auto}.gallery-meta{width:min(100%, var(--gallery-layout-width));margin:var(--section-caption-spacing,.5em) auto 0;font-size:var(--section-caption-font-size-desktop,.95rem);text-align:var(--section-caption-align-desktop,center)}.gallery-details{align-items:baseline;justify-content:var(--section-caption-justify-desktop,center);color:inherit;font-size:inherit;font-family:var(--font-sans);letter-spacing:0;line-height:var(--section-caption-line-height,1.5);flex-wrap:wrap;gap:.5rem;margin-bottom:0;display:flex}@media (width<=700px){:root{--space-nav-to-first-section:var(--space-nav-to-first-section-mobile);--space-section-title-to-body:var(--space-section-title-to-body-mobile);--space-section-body-to-gallery:var(--space-section-body-to-gallery-mobile);--space-gallery-item:var(--space-gallery-item-mobile);--space-section-to-section:var(--space-section-to-section-mobile);--space-final-section-bottom:var(--space-final-section-bottom-mobile);--space-subheading-top:var(--space-subheading-top-mobile);--space-subheading-rule-top:var(--space-subheading-rule-top-mobile);--content-gutter:var(--content-gutter-mobile);--gallery-max-available-width:var(--gallery-max-available-width-mobile);--gallery-max-image-height:var(--gallery-max-image-height-mobile);--site-top-anchor-offset:6.25rem}.site-nav-row{width:min(calc(100% - (var(--content-gutter) * 2)), var(--page-width));padding:.75rem 0}.site-brand{overflow-wrap:anywhere;max-width:min(70vw,26rem);font-size:.76rem}.site-nav,.site-top-has-site-nav .page-nav{display:none}.page-nav ul{text-align:center;justify-content:center;gap:0 1.55rem;padding:0 1rem}.page-nav li+li:before{left:-.95rem}.page-nav a{white-space:nowrap;padding:.95rem 0 .85rem;font-size:.72rem}.mobile-nav-menu{flex:none;display:block;position:relative}.mobile-nav-menu summary{letter-spacing:.1em;opacity:.9;text-transform:uppercase;border:1px solid;align-items:center;gap:.42rem;padding:.5rem .7rem .44rem;font-size:.72rem;font-weight:700;line-height:1;list-style:none;display:flex}.mobile-nav-menu summary:after{content:"▾";opacity:.78;font-size:.82em;line-height:1}.mobile-nav-menu[open] summary:after{transform:rotate(180deg)}.mobile-nav-menu summary::-webkit-details-marker{display:none}.mobile-nav-panel{border:1px solid color-mix(in srgb, currentColor 30%, transparent);background:var(--site-top-background-color,var(--color-nav-background));width:min(82vw,22rem);color:var(--site-top-text-color,var(--color-text));gap:1.75rem;padding:1rem;display:grid;position:absolute;top:calc(100% + .75rem);right:0;box-shadow:0 1rem 2.5rem #00000047}.mobile-nav-panel h2{letter-spacing:.14em;text-transform:uppercase;margin:0 0 .75rem;font-size:.68rem;font-weight:700;line-height:1}.mobile-page-nav{border-top:1px solid color-mix(in srgb, currentColor 18%, transparent);padding-top:1.05rem}.mobile-nav-panel ul{gap:.65rem;display:grid}.mobile-nav-panel a{letter-spacing:.06em;font-size:.82rem}.mobile-page-nav a[aria-current=true]{text-underline-offset:.35em;text-decoration:underline 1px}.site-content{width:min(calc(100% - (var(--content-gutter) * 2)), var(--page-width))}.site-footer{width:min(100% - 2rem,34rem)}.site-section+.site-section{margin-top:0}.section-body{width:100%;line-height:1.72}.section-header h1,.section-header h2{font-size:var(--section-heading-font-size-mobile,var(--section-heading-font-size-desktop,clamp(1.3rem, 1.05rem + 1.35vw, 1.75rem)))}.section-header{width:min(100%, var(--section-heading-width-mobile,var(--section-heading-width-desktop,760px)));text-align:var(--section-heading-align-mobile,var(--section-heading-align-desktop,center))}.section-markdown{width:min(100%, var(--section-body-width-mobile,var(--section-body-width-desktop,var(--text-width))));font-size:var(--section-body-font-size-mobile,var(--section-body-font-size-desktop,clamp(.96rem, .94rem + .08vw, 1rem)));text-align:var(--section-body-align-mobile,var(--section-body-align-desktop,left))}.gallery-meta{font-size:var(--section-caption-font-size-mobile,var(--section-caption-font-size-desktop,.95rem));text-align:var(--section-caption-align-mobile,var(--section-caption-align-desktop,center))}.gallery-details{justify-content:var(--section-caption-justify-mobile,var(--section-caption-justify-desktop,center))}.section-markdown h3{font-size:var(--section-markdown-h3-font-size-mobile,var(--section-markdown-h3-font-size-desktop,.82rem));text-align:var(--section-markdown-h3-align-mobile,var(--section-markdown-h3-align-desktop,left))}.section-markdown h4{font-size:var(--section-markdown-h4-font-size-mobile,var(--section-markdown-h4-font-size-desktop,clamp(.96rem, .94rem + .08vw, 1rem)));text-align:var(--section-markdown-h4-align-mobile,var(--section-markdown-h4-align-desktop,left))}.section-markdown ul,.section-markdown ol{display:block}.gallery-item img{max-height:var(--gallery-max-image-height)}.gallery-carousel-stage{aspect-ratio:auto}.gallery-carousel-viewport{width:100%;height:auto;aspect-ratio:var(--gallery-carousel-aspect-ratio,auto)}.gallery-carousel[data-carousel-ready=true] .gallery-carousel-button{display:none}.gallery-carousel-position{opacity:.88;min-width:3rem;min-height:1.5rem;font-size:.78rem;position:absolute;bottom:.5rem;right:.5rem;box-shadow:0 .2rem .75rem #0000001a}.gallery{gap:var(--space-gallery-item)}.gallery-details{padding:0 .25rem;font-size:1rem}}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en" style="scroll-behavior: smooth; --font-sans: Arial, 'Helvetica Neue', Helvetica, sans-serif; --page-width: 2048px; --content-gutter-desktop: clamp(1.25rem, 4vw, 3rem); --content-gutter-mobile: 16px; --space-nav-to-first-section-desktop: clamp(1.25rem, 2.5vw, 2rem); --space-nav-to-first-section-mobile: 1rem; --space-section-title-to-body-desktop: 0.55rem; --space-section-title-to-body-mobile: 0.45rem; --space-section-body-to-gallery-desktop: 1.25rem; --space-section-body-to-gallery-mobile: 1rem; --space-gallery-item-desktop: clamp(1.25rem, 2.8vw, 2rem); --space-gallery-item-mobile: 1.8rem; --space-section-to-section-desktop: clamp(1.8rem, 3vw, 2.75rem); --space-section-to-section-mobile: 1.65rem; --space-final-section-bottom-desktop: clamp(1.8rem, 3vw, 2.75rem); --space-final-section-bottom-mobile: 1.65rem; --space-subheading-top-desktop: 1.35rem; --space-subheading-top-mobile: 1.1rem; --space-subheading-rule-top-desktop: 0.65rem; --space-subheading-rule-top-mobile: 0.55rem; --gallery-width: 55vw; --gallery-max-available-width-desktop: 100%; --gallery-max-available-width-mobile: 100%; --gallery-max-image-height-desktop: 74svh; --gallery-max-image-height-mobile: 68svh"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="format-detection" content="telephone=no"><meta name="description" content="A small route for testing multi-page norna navigation."><meta name="theme-color" content="#000000"><link rel="canonical" href="http://localhost:4321/dog-care/"><meta name="generator" content="Astro v7.1.3"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><title>Dog care</title><link rel="stylesheet" href="/_astro/SitePage.BFHZm5UG.css"></head><body><a class="skip-link" href="#main-content">Skip to content</a><header class="site-top site-top-has-site-nav" data-smooth-scroll="{"durationPerPixelMs":0.22,"enabled":true,"maximumDurationMs":4000,"minimumDurationMs":2000}" style="--site-top-background-color: #550000; --site-top-text-color: #ffffff"><div class="site-nav-row"><a class="site-brand" href="/">Local Dog Example</a><nav class="site-nav" aria-label="Pages"><ul><li><a href="/">Dog site!</a></li><li><a href="/dog-care/" aria-current="page">Dog care</a></li></ul></nav><details class="mobile-nav-menu"><summary><span>Dog care</span></summary><div class="mobile-nav-panel"><nav class="mobile-site-nav" aria-label="Pages"><h2>Pages</h2><ul><li><a href="/">Dog site!</a></li><li><a href="/dog-care/" aria-current="page">Dog care</a></li></ul></nav><nav class="mobile-page-nav" aria-label="On this page"><h2>On this page</h2><ul><li><a href="#daily-rhythm" aria-current="true">Daily rhythm</a></li><li><a href="#calm-training">Calm training</a></li><li><a href="#media-notes">Media notes</a></li></ul></nav></div></details></div><nav class="page-nav" aria-label="On this page"><ul><li><a href="#daily-rhythm" aria-current="true">Daily rhythm</a></li><li><a href="#calm-training">Calm training</a></li><li><a href="#media-notes">Media notes</a></li></ul></nav></header><script type="module">var e=document.querySelector(`.site-top`),t=Array.from(document.querySelectorAll(`.site-section`)),n=Array.from(document.querySelectorAll(`.page-nav a, .mobile-page-nav a`)),r=document.querySelector(`.mobile-nav-menu`),i=JSON.parse(e?.getAttribute(`data-smooth-scroll`)??`{}`),a=0,o=[120,320,700,1e3,2e3],s=window.matchMedia(`(prefers-reduced-motion: reduce)`),c=i.minimumDurationMs,l=i.maximumDurationMs,u=i.durationPerPixelMs,d=[`wheel`,`touchstart`],f=new Set([`ArrowDown`,`ArrowUp`,`End`,`Home`,`PageDown`,`PageUp`,` `]),p=null,m=null,h=0;`scrollRestoration`in history&&(history.scrollRestoration=`manual`);var g=()=>{if(!(e instanceof HTMLElement))return;let t=Math.ceil(e.getBoundingClientRect().height+a);return document.documentElement.style.setProperty(`--site-top-anchor-offset`,`${t}px`),t},_=e=>{let n=e.replace(/^#/,``);return t.find(e=>e.id===n)},v=e=>e?.querySelector(`h1, h2`),y=()=>{p&&=(p.cancel(),null)},b=e=>{e&&m!==e.id&&(m=e.id,n.forEach(t=>{t.getAttribute(`href`)===`#${e.id}`?t.setAttribute(`aria-current`,`true`):t.removeAttribute(`aria-current`)}))},x=()=>_(window.location.hash),S=e=>{window.location.hash!==e&&history.pushState(null,``,e)},C=()=>{r instanceof HTMLDetailsElement&&(r.open=!1)},w=e=>{if(!(e instanceof HTMLElement))return;let t=v(e);if(!(t instanceof HTMLElement))return;let n=g();if(n)return Math.max(0,t.getBoundingClientRect().top+window.scrollY-n)},T=e=>{y();let t=document.documentElement,n=t.style.scrollBehavior;t.style.scrollBehavior=`auto`,window.scrollTo(0,e),t.style.scrollBehavior=n},E=e=>{let t=Math.abs(e);return!i.enabled||s.matches||t<=a?0:Math.min(l,Math.max(c,t*u))},D=e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2,O=(e,{duration:t,onComplete:n}={})=>{y();let r=typeof e==`function`?e:()=>e,i=r();if(i===void 0)return 0;let a=window.scrollY,o=i-a,s=t??E(o);if(s<=0){let e=r();return e===void 0?0:(T(e),n?.(),0)}let c=document.documentElement,l=c.style.scrollBehavior,u=performance.now(),m=0,h={cancel:()=>{}},g=()=>{d.forEach(e=>{window.removeEventListener(e,v)}),window.removeEventListener(`keydown`,b),c.style.scrollBehavior=l,p===h&&(p=null)},_=()=>{m&&cancelAnimationFrame(m),g()},v=()=>_(),b=e=>{f.has(e.key)&&v()},x=e=>{let t=e-u,o=Math.min(1,t/s),c=r();c!==void 0&&(i=c);let l=a+(i-a)*D(o);if(window.scrollTo(0,l),o>=1){window.scrollTo(0,i),g(),n?.();return}m=requestAnimationFrame(x)};return h.cancel=_,p=h,c.style.scrollBehavior=`auto`,d.forEach(e=>{window.addEventListener(e,v,{passive:!0})}),window.addEventListener(`keydown`,b),m=requestAnimationFrame(x),s},k=(e,{behavior:t=`smooth`,duration:n,onComplete:r}={})=>{let i=w(e);if(i===void 0)return 0;let a=t===`smooth`?O(()=>w(e),{duration:n,onComplete:r}):(T(i),r?.(),0);return b(e),a},A=()=>{g()},j=()=>{if(p)return;let e=x();e instanceof HTMLElement&&k(e,{behavior:`auto`})},M=()=>{if(!window.location.hash)return;h+=1;let e=h;o.forEach(t=>{window.setTimeout(()=>{e===h&&requestAnimationFrame(j)},t)})},N=({behavior:e=`auto`,scrollHashlessTop:n=!1}={})=>{let r=x();if(r instanceof HTMLElement){k(r,{behavior:e}),M();return}n&&T(0),b(t[0])};n.forEach(e=>{e.addEventListener(`click`,t=>{let n=_(e.hash);if(!(n instanceof HTMLElement))return;let r=w(n);if(r===void 0)return;t.preventDefault();let i=`#${n.id}`,a=E(r-window.scrollY);S(i),b(n),C(),k(n,{behavior:`smooth`,duration:a,onComplete:M})})}),A(),requestAnimationFrame(()=>N({behavior:`auto`})),e instanceof HTMLElement&&`ResizeObserver`in window&&new ResizeObserver(A).observe(e),window.addEventListener(`resize`,A),window.addEventListener(`load`,M),window.addEventListener(`hashchange`,()=>N({behavior:`auto`,scrollHashlessTop:!0})),window.addEventListener(`popstate`,()=>N({behavior:`auto`,scrollHashlessTop:!0})),window.visualViewport&&window.visualViewport.addEventListener(`resize`,A);</script><main id="main-content" class="site-content"><section id="daily-rhythm" class="site-section" data-section-title="Daily rhythm" style="--section-background-color: #550000; --section-text-color: #ffffff; --section-heading-align-desktop: left; --section-heading-align-mobile: left; --section-heading-font-size-desktop: clamp(1.6rem, 1.22rem + 1.45vw, 2.75rem); --section-heading-font-size-mobile: clamp(1.5rem, 1.12rem + 2vw, 2.25rem); --section-heading-line-height: 1.08; --section-heading-spacing: 0.65em; --section-heading-width-desktop: var(--gallery-layout-width); --section-heading-width-mobile: var(--gallery-layout-width); --section-markdown-h3-align-desktop: left; --section-markdown-h3-align-mobile: left; --section-markdown-h3-font-size-desktop: clamp(1.35rem, 1.1rem + 0.9vw, 2rem); --section-markdown-h3-font-size-mobile: clamp(1.3rem, 1.05rem + 1.35vw, 1.75rem); --section-markdown-h3-line-height: 1.35; --section-markdown-h3-spacing: 0.7rem; --section-markdown-h4-align-desktop: left; --section-markdown-h4-align-mobile: left; --section-markdown-h4-font-size-desktop: clamp(1.1rem, 1.02rem + 0.35vw, 1.35rem); --section-markdown-h4-font-size-mobile: clamp(1.12rem, 1rem + 0.85vw, 1.42rem); --section-markdown-h4-line-height: 1.5; --section-markdown-h4-spacing: 0.55rem; --section-body-align-desktop: left; --section-body-align-mobile: left; --section-body-font-size-desktop: clamp(0.96rem, 0.94rem + 0.08vw, 1rem); --section-body-font-size-mobile: clamp(0.96rem, 0.94rem + 0.08vw, 1rem); --section-body-line-height: 1.5; --section-body-paragraph-spacing: 0.85em; --section-body-width-desktop: var(--gallery-layout-width); --section-body-width-mobile: var(--gallery-layout-width); --section-caption-align-desktop: center; --section-caption-align-mobile: center; --section-caption-font-size-desktop: clamp(0.78rem, 0.76rem + 0.08vw, 0.84rem); --section-caption-font-size-mobile: clamp(0.78rem, 0.76rem + 0.08vw, 0.84rem); --section-caption-line-height: 1.35; --section-caption-spacing: 0.5em; --section-caption-justify-desktop: center; --section-caption-justify-mobile: center"><div class="section-card"><header class="section-header"><h1>Daily rhythm</h1></header><div class="section-body section-body-text-only"><div class="section-markdown"><p>Dogs often settle into a home when the day has a clear rhythm. Meals, walks,
|
|
2
|
+
rest and play do not need to be dramatic events, but they become easier to
|
|
3
|
+
understand when they happen in a predictable order.</p>
|
|
4
|
+
<p>Short routines also make a media page easier to scan. This route exists mainly
|
|
5
|
+
to test how page navigation and site navigation behave together.</p>
|
|
6
|
+
<h3 id="morning-checks">Morning checks</h3>
|
|
7
|
+
<p>This <code>###</code> heading tests route-level body subheadings.</p>
|
|
8
|
+
<h4 id="quiet-detail">Quiet detail</h4>
|
|
9
|
+
<p>This <code>####</code> heading should stay smaller than the <code>###</code> above it.</p></div></div></div></section><section id="calm-training" class="site-section" data-section-title="Calm training" style="--section-background-color: #550000; --section-text-color: #ffffff; --section-heading-align-desktop: left; --section-heading-align-mobile: left; --section-heading-font-size-desktop: clamp(1.35rem, 1.1rem + 0.9vw, 2rem); --section-heading-font-size-mobile: clamp(1.3rem, 1.05rem + 1.35vw, 1.75rem); --section-heading-line-height: 1.08; --section-heading-spacing: 0.65em; --section-heading-width-desktop: var(--gallery-layout-width); --section-heading-width-mobile: var(--gallery-layout-width); --section-markdown-h3-align-desktop: left; --section-markdown-h3-align-mobile: left; --section-markdown-h3-font-size-desktop: clamp(1.35rem, 1.1rem + 0.9vw, 2rem); --section-markdown-h3-font-size-mobile: clamp(1.3rem, 1.05rem + 1.35vw, 1.75rem); --section-markdown-h3-line-height: 1.35; --section-markdown-h3-spacing: 0.7rem; --section-markdown-h4-align-desktop: left; --section-markdown-h4-align-mobile: left; --section-markdown-h4-font-size-desktop: clamp(1.1rem, 1.02rem + 0.35vw, 1.35rem); --section-markdown-h4-font-size-mobile: clamp(1.12rem, 1rem + 0.85vw, 1.42rem); --section-markdown-h4-line-height: 1.5; --section-markdown-h4-spacing: 0.55rem; --section-body-align-desktop: left; --section-body-align-mobile: left; --section-body-font-size-desktop: clamp(0.96rem, 0.94rem + 0.08vw, 1rem); --section-body-font-size-mobile: clamp(0.96rem, 0.94rem + 0.08vw, 1rem); --section-body-line-height: 1.5; --section-body-paragraph-spacing: 0.85em; --section-body-width-desktop: var(--gallery-layout-width); --section-body-width-mobile: var(--gallery-layout-width); --section-caption-align-desktop: center; --section-caption-align-mobile: center; --section-caption-font-size-desktop: clamp(0.78rem, 0.76rem + 0.08vw, 0.84rem); --section-caption-font-size-mobile: clamp(0.78rem, 0.76rem + 0.08vw, 0.84rem); --section-caption-line-height: 1.35; --section-caption-spacing: 0.5em; --section-caption-justify-desktop: center; --section-caption-justify-mobile: center"><div class="section-card"><header class="section-header"><h2>Calm training</h2></header><div class="section-body section-body-text-only"><div class="section-markdown"><p>Good training can be quiet. A short session with one clear task is often more
|
|
10
|
+
useful than a long session with many competing signals.</p>
|
|
11
|
+
<p>The same principle applies to navigation. The page should show where the visitor
|
|
12
|
+
is in the site first, and then offer a simple way to jump within the current
|
|
13
|
+
page.</p></div></div></div></section><section id="media-notes" class="site-section" data-section-title="Media notes" style="--section-background-color: #550000; --section-text-color: #ffffff; --section-heading-align-desktop: left; --section-heading-align-mobile: left; --section-heading-font-size-desktop: clamp(1.35rem, 1.1rem + 0.9vw, 2rem); --section-heading-font-size-mobile: clamp(1.3rem, 1.05rem + 1.35vw, 1.75rem); --section-heading-line-height: 1.08; --section-heading-spacing: 0.65em; --section-heading-width-desktop: var(--gallery-layout-width); --section-heading-width-mobile: var(--gallery-layout-width); --section-markdown-h3-align-desktop: left; --section-markdown-h3-align-mobile: left; --section-markdown-h3-font-size-desktop: clamp(1.35rem, 1.1rem + 0.9vw, 2rem); --section-markdown-h3-font-size-mobile: clamp(1.3rem, 1.05rem + 1.35vw, 1.75rem); --section-markdown-h3-line-height: 1.35; --section-markdown-h3-spacing: 0.7rem; --section-markdown-h4-align-desktop: left; --section-markdown-h4-align-mobile: left; --section-markdown-h4-font-size-desktop: clamp(1.1rem, 1.02rem + 0.35vw, 1.35rem); --section-markdown-h4-font-size-mobile: clamp(1.12rem, 1rem + 0.85vw, 1.42rem); --section-markdown-h4-line-height: 1.5; --section-markdown-h4-spacing: 0.55rem; --section-body-align-desktop: left; --section-body-align-mobile: left; --section-body-font-size-desktop: clamp(0.96rem, 0.94rem + 0.08vw, 1rem); --section-body-font-size-mobile: clamp(0.96rem, 0.94rem + 0.08vw, 1rem); --section-body-line-height: 1.5; --section-body-paragraph-spacing: 0.85em; --section-body-width-desktop: var(--gallery-layout-width); --section-body-width-mobile: var(--gallery-layout-width); --section-caption-align-desktop: center; --section-caption-align-mobile: center; --section-caption-font-size-desktop: clamp(0.78rem, 0.76rem + 0.08vw, 0.84rem); --section-caption-font-size-mobile: clamp(0.78rem, 0.76rem + 0.08vw, 0.84rem); --section-caption-line-height: 1.35; --section-caption-spacing: 0.5em; --section-caption-justify-desktop: center; --section-caption-justify-mobile: center"><div class="section-card"><header class="section-header"><h2>Media notes</h2></header><div class="section-body section-body-text-only"><div class="section-markdown"><p>This section is intentionally text-only. Image routes can be added later, but a
|
|
14
|
+
first navigation test should make it easy to judge menus, active states and
|
|
15
|
+
anchor positions without layout noise from new media.</p></div></div></div></section></main><footer class="site-footer" style="--site-footer-background-color: #550000; --site-footer-text-color: #ffffff"><p>Dog images from Wikimedia Commons; see image captions for license details.<span>Built 07/08/2026, 15:26</span></p></footer></body></html>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
|
|
2
|
+
<rect width="128" height="128" rx="24" fill="#111111" />
|
|
3
|
+
<circle cx="40" cy="43" r="13" fill="#ffffff" />
|
|
4
|
+
<circle cx="64" cy="34" r="13" fill="#ffffff" />
|
|
5
|
+
<circle cx="88" cy="43" r="13" fill="#ffffff" />
|
|
6
|
+
<path fill="#ffffff" d="M31 83c0-18 15-31 33-31s33 13 33 31c0 12-9 18-20 14-7-3-19-3-26 0-11 4-20-2-20-14Z" />
|
|
7
|
+
</svg>
|
package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1080.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1440.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-1536.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-480.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/black-puppy-meadow-7255e3d9-768.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-480.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-768.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/black-dogs/photo-of-a-black-dog-5cf614d2-960.webp
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1080.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1440.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-1600.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-480.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/golden-retriever-f797fd88-768.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1080.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1440.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-1920.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/golden-dogs/toller-puppy-a2a8fbc0-2576.webp
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1080.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-1277.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-480.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-cute-dog-077a0689-768.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1080.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1440.webp
ADDED
|
Binary file
|
package/examples/dog-gallery/dist/images/generated/white-dogs/white-puppy-garden-d3ab2ca0-1536.webp
ADDED
|
Binary file
|