patreon-dl 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -1
- package/dist/browse/api/CampaignAPIMixin.d.ts +1 -1
- package/dist/browse/api/ContentAPIMixin.d.ts +3 -3
- package/dist/browse/api/FilterAPIMixin.d.ts +1 -1
- package/dist/browse/api/index.d.ts +10 -10
- package/dist/browse/db/CampaignDBMixin.d.ts +3 -3
- package/dist/browse/db/ContentDBMixin.d.ts +13 -13
- package/dist/browse/db/index.d.ts +16 -16
- package/dist/browse/web/assets/index-CQnQD2xz.css +1 -0
- package/dist/browse/web/assets/index-CtZbx-Du.js +218 -0
- package/dist/browse/web/index.html +2 -2
- package/dist/cli/CLIOptions.js +2 -0
- package/dist/cli/CLIOptions.js.map +1 -1
- package/dist/cli/CommandLineParser.d.ts +4 -0
- package/dist/cli/CommandLineParser.js +65 -32
- package/dist/cli/CommandLineParser.js.map +1 -1
- package/dist/cli/ConfigFileParser.js +2 -0
- package/dist/cli/ConfigFileParser.js.map +1 -1
- package/dist/cli/helper/PostList.d.ts +6 -0
- package/dist/cli/helper/PostList.js +106 -0
- package/dist/cli/helper/PostList.js.map +1 -0
- package/dist/cli/index.js +73 -53
- package/dist/cli/index.js.map +1 -1
- package/dist/downloaders/Bootstrap.d.ts +5 -0
- package/dist/downloaders/Bootstrap.js +10 -0
- package/dist/downloaders/Bootstrap.js.map +1 -1
- package/dist/downloaders/Downloader.d.ts +4 -4
- package/dist/downloaders/Downloader.js +5 -58
- package/dist/downloaders/Downloader.js.map +1 -1
- package/dist/downloaders/DownloaderOptions.d.ts +1 -0
- package/dist/downloaders/DownloaderOptions.js +2 -0
- package/dist/downloaders/DownloaderOptions.js.map +1 -1
- package/dist/downloaders/IncludeCriteriaHelper.d.ts +25 -0
- package/dist/downloaders/IncludeCriteriaHelper.js +160 -0
- package/dist/downloaders/IncludeCriteriaHelper.js.map +1 -0
- package/dist/downloaders/InitialData.js +20 -6
- package/dist/downloaders/InitialData.js.map +1 -1
- package/dist/downloaders/PostDownloader.js +62 -98
- package/dist/downloaders/PostDownloader.js.map +1 -1
- package/dist/downloaders/PostsFetcher.js +4 -2
- package/dist/downloaders/PostsFetcher.js.map +1 -1
- package/dist/downloaders/ProductDownloader.js +31 -21
- package/dist/downloaders/ProductDownloader.js.map +1 -1
- package/dist/downloaders/task/M3U8DownloadTask.d.ts +1 -0
- package/dist/downloaders/task/M3U8DownloadTask.js +137 -39
- package/dist/downloaders/task/M3U8DownloadTask.js.map +1 -1
- package/dist/downloaders/task/YouTubeDownloadTask.js +1 -3
- package/dist/downloaders/task/YouTubeDownloadTask.js.map +1 -1
- package/dist/parsers/PageParser.js +8 -3
- package/dist/parsers/PageParser.js.map +1 -1
- package/dist/utils/Fetcher.d.ts +4 -1
- package/dist/utils/Fetcher.js +6 -1
- package/dist/utils/Fetcher.js.map +1 -1
- package/dist/utils/URLHelper.d.ts +4 -0
- package/dist/utils/URLHelper.js +17 -0
- package/dist/utils/URLHelper.js.map +1 -1
- package/dist/utils/YouTubeCredentialsCapturer.js +1 -1
- package/dist/utils/YouTubeCredentialsCapturer.js.map +1 -1
- package/dist/utils/logging/ConsoleLogger.js +5 -0
- package/dist/utils/logging/ConsoleLogger.js.map +1 -1
- package/dist/utils/yt/InnertubeLoader.d.ts +4 -6
- package/dist/utils/yt/InnertubeLoader.js +14 -14
- package/dist/utils/yt/InnertubeLoader.js.map +1 -1
- package/dist/utils/yt/PoToken.js +53 -27
- package/dist/utils/yt/PoToken.js.map +1 -1
- package/package.json +12 -8
- package/dist/browse/web/assets/index-CW4CUoWl.css +0 -1
- package/dist/browse/web/assets/index-CziUWlSw.js +0 -218
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ This repo contains the `patreon-dl` library and its command-line tool. For GUI a
|
|
|
11
11
|
- Download posts by user, in a collection or single post.
|
|
12
12
|
- Download products (aka shop purchases)
|
|
13
13
|
- Items included in downloads:
|
|
14
|
-
- videos
|
|
14
|
+
- videos - but see [limitations](#limitations) on Patreon-hosted videos
|
|
15
15
|
- images
|
|
16
16
|
- audio
|
|
17
17
|
- attachments
|
|
@@ -26,12 +26,23 @@ You can run `patreon-dl` from the command-line or [use it as a library](./docs/L
|
|
|
26
26
|
|
|
27
27
|
### Limitations
|
|
28
28
|
|
|
29
|
+
**Embedded videos / links**
|
|
30
|
+
|
|
29
31
|
- Embedded links are not followed; only info about the embed is saved. Exception:
|
|
30
32
|
- YouTube video link - in which case the video is downloaded; or
|
|
31
33
|
- An external downloader is configured for the link provider.
|
|
32
34
|
|
|
33
35
|
For information on external downloaders, see the [Embedded videos / links - external downloader](#embedded-videos--links---external-downloader) section. Example config is provided for fetching YouTube (replacing the built-in downloader) and Vimeo videos.
|
|
34
36
|
|
|
37
|
+
**Patreon-hosted videos with DRM protection**
|
|
38
|
+
|
|
39
|
+
Some videos served by Patreon are now protected with DRM. Because these videos require a real-time decryption key available only during authorized streaming, they cannot be played back normally after being downloaded.
|
|
40
|
+
|
|
41
|
+
By default, `patreon-dl` will skip DRM-protected content to avoid broken downloads. If you still wish to download these files, you can force the download using:
|
|
42
|
+
|
|
43
|
+
- CLI: Use the `protected.media` option (see [example.conf](./example.conf)).
|
|
44
|
+
- Library: Use the `include.protectedMedia` option (see [documentation](./docs/Library.md)).
|
|
45
|
+
|
|
35
46
|
### FFmpeg dependency
|
|
36
47
|
|
|
37
48
|
[FFmpeg](https://ffmpeg.org) is required when downloading:
|
|
@@ -109,6 +120,8 @@ $ patreon-dl [OPTION]... URL
|
|
|
109
120
|
| `--dry-run` | | Run without writing files to disk (except logs, if any). Intended for testing / debugging. |
|
|
110
121
|
| <code><nobr>--list-tiers <creator></nobr></code> | | <p>List tiers for the given creator(s). Separate multiple creators with a comma.</p>The purpose of this is to let you find out what tier IDs to set for `posts.in.tier` filtering option under `include` section of [configuration file](#configuration-file). |
|
|
111
122
|
| <code><nobr>--list-tiers-uid <user ID></nobr></code> | | Same as `--list-tiers`, but takes user ID instead of vanity. |
|
|
123
|
+
| <code><nobr>--list-posts <creator></nobr></code> | | <p>List posts by the given creator(s). Separate multiple creators with a comma.</p> |
|
|
124
|
+
| <code><nobr>--list-posts-uid <user ID></nobr></code> | | Same as `--list-posts`, but takes user ID instead of vanity. |
|
|
112
125
|
| `--configure-youtube` | | <p>Configure YouTube connection.</p>`patreon-dl` supports downloading embedded YouTube videos. If you have a YouTube Premium account, you can connect `patreon-dl` to it for downloading Premium-quality streams. You will also need to connect to an account if you get a "Login required" error message during download.|
|
|
113
126
|
|
|
114
127
|
### URL
|
|
@@ -139,6 +152,10 @@ https://www.patreon.com/collection/<collection_id>
|
|
|
139
152
|
|
|
140
153
|
```
|
|
141
154
|
|
|
155
|
+
#### Custom URLs
|
|
156
|
+
|
|
157
|
+
Some creators host their Patreon pages on custom domains. You can provide this custom URL to `patreon-dl`, which will download posts from the associated creator.
|
|
158
|
+
|
|
142
159
|
#### Multiple URLs
|
|
143
160
|
|
|
144
161
|
You may specify multiple URLs by separating them with a comma. E.g.:
|
|
@@ -203,6 +220,7 @@ include.posts.in.tier = 123456, 789100
|
|
|
203
220
|
# include.content.info
|
|
204
221
|
# include.preview.media
|
|
205
222
|
# include.content.media
|
|
223
|
+
# include.protected.media
|
|
206
224
|
# include.all.media.variants
|
|
207
225
|
# include.images.by.filename
|
|
208
226
|
# include.audio.by.filename
|
|
@@ -293,6 +311,16 @@ Note the URL shown in the output. Open this URL in a web browser to begin viewin
|
|
|
293
311
|
|
|
294
312
|
## Changelog
|
|
295
313
|
|
|
314
|
+
3.8.0
|
|
315
|
+
- Add support for custom URLs (creators hosting Patreon pages on their own domains) ([@lucasoskorep](https://github.com/lucasoskorep) - [PR #129](https://github.com/patrickkfkan/patreon-dl/pull/129)).
|
|
316
|
+
- Fix YT download errors ([#132](https://github.com/patrickkfkan/patreon-dl/issues/132)).
|
|
317
|
+
- Browse: set title tag based on content ([#127](https://github.com/patrickkfkan/patreon-dl/issues/127)).
|
|
318
|
+
- CLI: add `--list-posts` / `--list-posts-uid` ([#126](https://github.com/patrickkfkan/patreon-dl/issues/126)).
|
|
319
|
+
|
|
320
|
+
3.7.1
|
|
321
|
+
- Check and skip download of Patreon-hosted videos that are protected by DRM; add `include.protectedMedia` / `protected.media` option.
|
|
322
|
+
- Fix campaign not found when targeting collections ([#124](https://github.com/patrickkfkan/patreon-dl/issues/124)).
|
|
323
|
+
|
|
296
324
|
v3.7.0
|
|
297
325
|
- Vimeo download script: fetch full player URL ([#118](https://github.com/patrickkfkan/patreon-dl/issues/118))
|
|
298
326
|
- Fix downloaded posts missing content / teaser ([@Fabelwesen](https://github.com/Fabelwesen) - [#119](https://github.com/patrickkfkan/patreon-dl/issues/119))
|
|
@@ -11,7 +11,7 @@ export declare function CampaignAPIMixin<TBase extends APIConstructor>(Base: TBa
|
|
|
11
11
|
withCounts?: false;
|
|
12
12
|
}): Campaign | null;
|
|
13
13
|
getCampaign(params: GetCampaignParams): Campaign | CampaignWithCounts | null;
|
|
14
|
-
"__#
|
|
14
|
+
"__#185@#sanitizeCampaign"(campaign: Campaign): void;
|
|
15
15
|
name: string;
|
|
16
16
|
db: import("../db").DBInstance;
|
|
17
17
|
logger?: import("../..").Logger | null;
|
|
@@ -14,9 +14,9 @@ export declare function ContentAPIMixin<TBase extends APIConstructor>(Base: TBas
|
|
|
14
14
|
} | null;
|
|
15
15
|
getCollectionList(params: GetCollectionListParams): import("../types/Content.js").CollectionList;
|
|
16
16
|
getPostTagList(params: GetPostTagListParams): import("../types/Content.js").PostTagList;
|
|
17
|
-
"__#
|
|
18
|
-
"__#
|
|
19
|
-
"__#
|
|
17
|
+
"__#186@#processPostContentElements"(post: Post): void;
|
|
18
|
+
"__#186@#processInlineMedia"($: CheerioAPI, post: Post): boolean;
|
|
19
|
+
"__#186@#processInlineLinks"($: CheerioAPI): boolean;
|
|
20
20
|
name: string;
|
|
21
21
|
db: import("../db").DBInstance;
|
|
22
22
|
logger?: import("../..").Logger | null;
|
|
@@ -3,7 +3,7 @@ import { type FilterData, type MediaFilterSearchParams, type PostFilterSearchPar
|
|
|
3
3
|
export declare function FilterAPIMixin<TBase extends APIConstructor>(Base: TBase): {
|
|
4
4
|
new (...args: any[]): {
|
|
5
5
|
getPostFilterData(campaignId: string): FilterData<PostFilterSearchParams>;
|
|
6
|
-
"__#
|
|
6
|
+
"__#187@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
|
|
7
7
|
getProductFilterData(campaignId: string): FilterData<ProductFilterSearchParams>;
|
|
8
8
|
getMediaFilterData(campaignId: string): FilterData<MediaFilterSearchParams>;
|
|
9
9
|
name: string;
|
|
@@ -10,7 +10,7 @@ export declare class APIBase {
|
|
|
10
10
|
constructor(db: DBInstance, logger?: Logger | null);
|
|
11
11
|
static getInstance(db: DBInstance, logger?: Logger | null): {
|
|
12
12
|
getPostFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").PostFilterSearchParams>;
|
|
13
|
-
"__#
|
|
13
|
+
"__#187@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
|
|
14
14
|
getProductFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").ProductFilterSearchParams>;
|
|
15
15
|
getMediaFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").MediaFilterSearchParams>;
|
|
16
16
|
name: string;
|
|
@@ -50,9 +50,9 @@ export declare class APIBase {
|
|
|
50
50
|
} | null;
|
|
51
51
|
getCollectionList(params: import("../types/Content.js").GetCollectionListParams): import("../types/Content.js").CollectionList;
|
|
52
52
|
getPostTagList(params: import("../types/Content.js").GetPostTagListParams): import("../types/Content.js").PostTagList;
|
|
53
|
-
"__#
|
|
54
|
-
"__#
|
|
55
|
-
"__#
|
|
53
|
+
"__#186@#processPostContentElements"(post: import("../../index.js").Post): void;
|
|
54
|
+
"__#186@#processInlineMedia"($: import("cheerio").CheerioAPI, post: import("../../index.js").Post): boolean;
|
|
55
|
+
"__#186@#processInlineLinks"($: import("cheerio").CheerioAPI): boolean;
|
|
56
56
|
name: string;
|
|
57
57
|
db: DBInstance;
|
|
58
58
|
logger?: Logger | null;
|
|
@@ -67,7 +67,7 @@ export declare class APIBase {
|
|
|
67
67
|
withCounts?: false;
|
|
68
68
|
}): import("../../index.js").Campaign | null;
|
|
69
69
|
getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | import("../types/Campaign.js").CampaignWithCounts | null;
|
|
70
|
-
"__#
|
|
70
|
+
"__#185@#sanitizeCampaign"(campaign: import("../../index.js").Campaign): void;
|
|
71
71
|
name: string;
|
|
72
72
|
db: DBInstance;
|
|
73
73
|
logger?: Logger | null;
|
|
@@ -80,7 +80,7 @@ export declare class APIBase {
|
|
|
80
80
|
declare const API: {
|
|
81
81
|
new (...args: any[]): {
|
|
82
82
|
getPostFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").PostFilterSearchParams>;
|
|
83
|
-
"__#
|
|
83
|
+
"__#187@#getPostTypeTitle"(postType: string): "Link" | "Audio" | "Image" | "Video" | "Other" | "Text" | "Podcast" | "Poll";
|
|
84
84
|
getProductFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").ProductFilterSearchParams>;
|
|
85
85
|
getMediaFilterData(campaignId: string): import("../types/Filter.js").FilterData<import("../types/Filter.js").MediaFilterSearchParams>;
|
|
86
86
|
name: string;
|
|
@@ -126,9 +126,9 @@ declare const API: {
|
|
|
126
126
|
} | null;
|
|
127
127
|
getCollectionList(params: import("../types/Content.js").GetCollectionListParams): import("../types/Content.js").CollectionList;
|
|
128
128
|
getPostTagList(params: import("../types/Content.js").GetPostTagListParams): import("../types/Content.js").PostTagList;
|
|
129
|
-
"__#
|
|
130
|
-
"__#
|
|
131
|
-
"__#
|
|
129
|
+
"__#186@#processPostContentElements"(post: import("../../index.js").Post): void;
|
|
130
|
+
"__#186@#processInlineMedia"($: import("cheerio").CheerioAPI, post: import("../../index.js").Post): boolean;
|
|
131
|
+
"__#186@#processInlineLinks"($: import("cheerio").CheerioAPI): boolean;
|
|
132
132
|
name: string;
|
|
133
133
|
db: DBInstance;
|
|
134
134
|
logger?: Logger | null;
|
|
@@ -145,7 +145,7 @@ declare const API: {
|
|
|
145
145
|
withCounts?: false;
|
|
146
146
|
}): import("../../index.js").Campaign | null;
|
|
147
147
|
getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | import("../types/Campaign.js").CampaignWithCounts | null;
|
|
148
|
-
"__#
|
|
148
|
+
"__#185@#sanitizeCampaign"(campaign: import("../../index.js").Campaign): void;
|
|
149
149
|
name: string;
|
|
150
150
|
db: DBInstance;
|
|
151
151
|
logger?: Logger | null;
|
|
@@ -7,10 +7,10 @@ export declare function CampaignDBMixin<TBase extends UserDBConstructor>(Base: T
|
|
|
7
7
|
new (...args: any[]): {
|
|
8
8
|
saveCampaign(campaign: Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
|
|
9
9
|
getCampaign(params: GetCampaignParams): Campaign | null;
|
|
10
|
-
"__#
|
|
11
|
-
"__#
|
|
10
|
+
"__#169@#saveRewards"(campaign: Campaign): void;
|
|
11
|
+
"__#169@#doSaveReward"(campaign: Campaign, reward: Reward): void;
|
|
12
12
|
getCampaignList(params: GetCampaignListParams): CampaignList;
|
|
13
|
-
"__#
|
|
13
|
+
"__#169@#getCampaignWithCounts"(params: GetCampaignParams): CampaignWithCounts | null;
|
|
14
14
|
checkCampaignExists(id: string): boolean;
|
|
15
15
|
saveUser(user: import("../../index.js").User | null): void;
|
|
16
16
|
getUserByID(id: string): import("../../index.js").User | null;
|
|
@@ -5,13 +5,13 @@ import { type CampaignDBConstructor } from './CampaignDBMixin.js';
|
|
|
5
5
|
export declare function ContentDBMixin<TBase extends CampaignDBConstructor>(Base: TBase): {
|
|
6
6
|
new (...args: any[]): {
|
|
7
7
|
saveContent(content: Post | Product): void;
|
|
8
|
-
"__#
|
|
9
|
-
"__#
|
|
10
|
-
"__#
|
|
11
|
-
"__#
|
|
12
|
-
"__#
|
|
13
|
-
"__#
|
|
14
|
-
"__#
|
|
8
|
+
"__#170@#saveContentMedia"(content: Post | Product): void;
|
|
9
|
+
"__#170@#savepostMedia"(post: Post): void;
|
|
10
|
+
"__#170@#saveProductMedia"(product: Product): void;
|
|
11
|
+
"__#170@#doSaveContentMedia"(content: Post | Product, media: Downloadable, mediaIndex: number, isPreview: boolean): void;
|
|
12
|
+
"__#170@#publishedAtToTime"(publishedAt: string | null): number | null;
|
|
13
|
+
"__#170@#savePostTiers"(post: Post): void;
|
|
14
|
+
"__#170@#doSaveTier"(post: Post, tier: Tier): void;
|
|
15
15
|
savePostComments(post: Post, comments: Comment[]): void;
|
|
16
16
|
checkPostCommentsExist(post: Post): boolean;
|
|
17
17
|
getContent(id: string, contentType: "post"): PostWithComments | null;
|
|
@@ -26,7 +26,7 @@ export declare function ContentDBMixin<TBase extends CampaignDBConstructor>(Base
|
|
|
26
26
|
* @param row Must have `details`, `comment_count` and `comments`
|
|
27
27
|
* @returns
|
|
28
28
|
*/
|
|
29
|
-
"__#
|
|
29
|
+
"__#170@#parseContentRowJoinedComments"(row: any): any;
|
|
30
30
|
getContentCountByDate(contentType: ContentType, groupBy: "year" | "month", filter?: {
|
|
31
31
|
campaign?: Campaign | string | null;
|
|
32
32
|
date?: Date | null;
|
|
@@ -50,19 +50,19 @@ export declare function ContentDBMixin<TBase extends CampaignDBConstructor>(Base
|
|
|
50
50
|
collection: Collection;
|
|
51
51
|
campaignId: string;
|
|
52
52
|
} | null;
|
|
53
|
-
"__#
|
|
53
|
+
"__#170@#savePostCollection"(post: Post): void;
|
|
54
54
|
getCollectionList(params: GetCollectionListParams): CollectionList;
|
|
55
55
|
checkCollectionExists(id: string): boolean;
|
|
56
56
|
checkPostTagExists(id: string, campaign: Campaign | null): boolean;
|
|
57
57
|
getPostComments(post: Post | string): Comment[] | null;
|
|
58
|
-
"__#
|
|
58
|
+
"__#170@#savePostTags"(post: Post): void;
|
|
59
59
|
getPostTagList(params: GetPostTagListParams): PostTagList;
|
|
60
60
|
saveCampaign(campaign: Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
|
|
61
61
|
getCampaign(params: import("../types/Campaign").GetCampaignParams): Campaign | null;
|
|
62
|
-
"__#
|
|
63
|
-
"__#
|
|
62
|
+
"__#169@#saveRewards"(campaign: Campaign): void;
|
|
63
|
+
"__#169@#doSaveReward"(campaign: Campaign, reward: import("../../entities").Reward): void;
|
|
64
64
|
getCampaignList(params: import("../types/Campaign").GetCampaignListParams): import("../types/Campaign").CampaignList;
|
|
65
|
-
"__#
|
|
65
|
+
"__#169@#getCampaignWithCounts"(params: import("../types/Campaign").GetCampaignParams): import("../types/Campaign").CampaignWithCounts | null;
|
|
66
66
|
checkCampaignExists(id: string): boolean;
|
|
67
67
|
saveUser(user: import("../../entities").User | null): void;
|
|
68
68
|
getUserByID(id: string): import("../../entities").User | null;
|
|
@@ -45,13 +45,13 @@ declare const DB: {
|
|
|
45
45
|
} & {
|
|
46
46
|
new (...args: any[]): {
|
|
47
47
|
saveContent(content: import("../../index.js").Post | import("../../index.js").Product): void;
|
|
48
|
-
"__#
|
|
49
|
-
"__#
|
|
50
|
-
"__#
|
|
51
|
-
"__#
|
|
52
|
-
"__#
|
|
53
|
-
"__#
|
|
54
|
-
"__#
|
|
48
|
+
"__#170@#saveContentMedia"(content: import("../../index.js").Post | import("../../index.js").Product): void;
|
|
49
|
+
"__#170@#savepostMedia"(post: import("../../index.js").Post): void;
|
|
50
|
+
"__#170@#saveProductMedia"(product: import("../../index.js").Product): void;
|
|
51
|
+
"__#170@#doSaveContentMedia"(content: import("../../index.js").Post | import("../../index.js").Product, media: import("../../index.js").Downloadable, mediaIndex: number, isPreview: boolean): void;
|
|
52
|
+
"__#170@#publishedAtToTime"(publishedAt: string | null): number | null;
|
|
53
|
+
"__#170@#savePostTiers"(post: import("../../index.js").Post): void;
|
|
54
|
+
"__#170@#doSaveTier"(post: import("../../index.js").Post, tier: import("../../index.js").Tier): void;
|
|
55
55
|
savePostComments(post: import("../../index.js").Post, comments: import("../../index.js").Comment[]): void;
|
|
56
56
|
checkPostCommentsExist(post: import("../../index.js").Post): boolean;
|
|
57
57
|
getContent(id: string, contentType: "post"): import("../types/Content.js").PostWithComments | null;
|
|
@@ -61,7 +61,7 @@ declare const DB: {
|
|
|
61
61
|
whereClauses: string[];
|
|
62
62
|
whereValues: any[];
|
|
63
63
|
} | undefined, includeTotal?: boolean): import("../types/Content.js").ContentList<T>;
|
|
64
|
-
"__#
|
|
64
|
+
"__#170@#parseContentRowJoinedComments"(row: any): any;
|
|
65
65
|
getContentCountByDate(contentType: import("../types/Content.js").ContentType, groupBy: "year" | "month", filter?: {
|
|
66
66
|
campaign?: import("../../index.js").Campaign | string | null;
|
|
67
67
|
date?: Date | null;
|
|
@@ -85,19 +85,19 @@ declare const DB: {
|
|
|
85
85
|
collection: import("../../index.js").Collection;
|
|
86
86
|
campaignId: string;
|
|
87
87
|
} | null;
|
|
88
|
-
"__#
|
|
88
|
+
"__#170@#savePostCollection"(post: import("../../index.js").Post): void;
|
|
89
89
|
getCollectionList(params: import("../types/Content.js").GetCollectionListParams): import("../types/Content.js").CollectionList;
|
|
90
90
|
checkCollectionExists(id: string): boolean;
|
|
91
91
|
checkPostTagExists(id: string, campaign: import("../../index.js").Campaign | null): boolean;
|
|
92
92
|
getPostComments(post: import("../../index.js").Post | string): import("../../index.js").Comment[] | null;
|
|
93
|
-
"__#
|
|
93
|
+
"__#170@#savePostTags"(post: import("../../index.js").Post): void;
|
|
94
94
|
getPostTagList(params: import("../types/Content.js").GetPostTagListParams): import("../types/Content.js").PostTagList;
|
|
95
95
|
saveCampaign(campaign: import("../../index.js").Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
|
|
96
96
|
getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | null;
|
|
97
|
-
"__#
|
|
98
|
-
"__#
|
|
97
|
+
"__#169@#saveRewards"(campaign: import("../../index.js").Campaign): void;
|
|
98
|
+
"__#169@#doSaveReward"(campaign: import("../../index.js").Campaign, reward: import("../../index.js").Reward): void;
|
|
99
99
|
getCampaignList(params: import("../types/Campaign.js").GetCampaignListParams): import("../types/Campaign.js").CampaignList;
|
|
100
|
-
"__#
|
|
100
|
+
"__#169@#getCampaignWithCounts"(params: import("../types/Campaign.js").GetCampaignParams): import("../types/Campaign.js").CampaignWithCounts | null;
|
|
101
101
|
checkCampaignExists(id: string): boolean;
|
|
102
102
|
saveUser(user: import("../../index.js").User | null): void;
|
|
103
103
|
getUserByID(id: string): import("../../index.js").User | null;
|
|
@@ -147,10 +147,10 @@ declare const DB: {
|
|
|
147
147
|
new (...args: any[]): {
|
|
148
148
|
saveCampaign(campaign: import("../../index.js").Campaign | null, downloadDate: Date, overwriteIfExists?: boolean): void;
|
|
149
149
|
getCampaign(params: import("../types/Campaign.js").GetCampaignParams): import("../../index.js").Campaign | null;
|
|
150
|
-
"__#
|
|
151
|
-
"__#
|
|
150
|
+
"__#169@#saveRewards"(campaign: import("../../index.js").Campaign): void;
|
|
151
|
+
"__#169@#doSaveReward"(campaign: import("../../index.js").Campaign, reward: import("../../index.js").Reward): void;
|
|
152
152
|
getCampaignList(params: import("../types/Campaign.js").GetCampaignListParams): import("../types/Campaign.js").CampaignList;
|
|
153
|
-
"__#
|
|
153
|
+
"__#169@#getCampaignWithCounts"(params: import("../types/Campaign.js").GetCampaignParams): import("../types/Campaign.js").CampaignWithCounts | null;
|
|
154
154
|
checkCampaignExists(id: string): boolean;
|
|
155
155
|
saveUser(user: import("../../index.js").User | null): void;
|
|
156
156
|
getUserByID(id: string): import("../../index.js").User | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";@font-face{font-family:Material Icons;font-style:normal;font-weight:400;font-display:block;src:url(/assets/material-icons-kAwBdRge.woff2) format("woff2"),url(/assets/material-icons-Dr0goTwe.woff) format("woff")}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"liga"}@font-face{font-family:Material Icons Outlined;font-style:normal;font-weight:400;font-display:block;src:url(/assets/material-icons-outlined-DZhiGvEA.woff2) format("woff2"),url(/assets/material-icons-outlined-BpWbwl2n.woff) format("woff")}.material-icons-outlined{font-family:Material Icons Outlined;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"liga"}@font-face{font-family:Material Icons Round;font-style:normal;font-weight:400;font-display:block;src:url(/assets/material-icons-round-DrirKXBx.woff2) format("woff2"),url(/assets/material-icons-round-BDlwx-sv.woff) format("woff")}.material-icons-round{font-family:Material Icons Round;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"liga"}@font-face{font-family:Material Icons Sharp;font-style:normal;font-weight:400;font-display:block;src:url(/assets/material-icons-sharp-gidztirS.woff2) format("woff2"),url(/assets/material-icons-sharp-CH1KkVu7.woff) format("woff")}.material-icons-sharp{font-family:Material Icons Sharp;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"liga"}@font-face{font-family:Material Icons Two Tone;font-style:normal;font-weight:400;font-display:block;src:url(/assets/material-icons-two-tone-DuNIpaEj.woff2) format("woff2"),url(/assets/material-icons-two-tone-B7wz7mED.woff) format("woff")}.material-icons-two-tone{font-family:Material Icons Two Tone;font-weight:400;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"liga"}a{text-decoration:none}.campaign-list.mw-narrower{max-width:40.5em}.campaign-list.mw-standard{max-width:47.5em}.campaign-list.mw-wider{max-width:54.5em}.campaign-card{overflow:hidden}.campaign-card__avatar{height:6.5em;aspect-ratio:1;object-fit:cover}.campaign-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;color:var(--bs-link-color);font-weight:700}.campaign-card__creation-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.campaign-card__count-icon{font-size:1.2em!important;margin-right:.3em}.campaign-card__count-text{font-size:1em}.custom-scrollbars__track-vertical{top:0;bottom:0;right:0;background:var(--bs-secondary);opacity:.2;border-radius:3px}.custom-scrollbars__track-horizontal{left:0;right:0;bottom:0;background:var(--bs-secondary);opacity:.2;border-radius:3px}.custom-scrollbars__thumb-vertical,.custom-scrollbars__thumb-horizontal{border-radius:3px;background:var(--bs-light);opacity:.2}.sidebar{width:100%;height:100vh;border-radius:0}.sidebar__header{background:var(--bs-card-bg)}.sidebar__brand a{color:inherit}.sidebar__section-title{color:var(--bs-body-color);font-weight:700;font-size:.9em}.sidebar__main{display:flex;flex-direction:column}.sidebar__link{display:flex;align-items:center;color:var(--bs-body-color);transition:color .15s}.sidebar__link:hover{color:var(--bs-link-hover-color)}.sidebar__link-icon{width:1.5em;height:1.5em;object-fit:cover}.sidebar__link-icon--svg{fill:var(--bs-body-color)}.sidebar__link-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;font-size:.9em}.sidebar-trigger{text-decoration:none;color:var(--bs-body-color);transition:color .15s}.sidebar-trigger:hover{color:var(--bs-link-hover-color)}.campaign-content{width:100%}.campaign-content--post.mw-narrower{max-width:40.5em}.campaign-content--post.mw-standard{max-width:47.5em}.campaign-content--post.mw-wider{max-width:54.5em}.post-card{overflow:hidden}.post-card__inline-media-wrapper{text-align:center}.post-card__inline-media-wrapper img{max-width:100%}.post-card__inline-media-caption,.post-card__external-embed-caption{font-size:smaller}.post-card__external-embed-wrapper{text-align:center}.post-card__external-embed>iframe{width:100%;height:100%}.post-card__content img{max-width:100%}.post-card__content p:not(:first-child){margin:1rem 0}.media-grid{display:grid;position:relative;max-height:32em;gap:1px;background:var(--bs-card-border-color);border-bottom:var(--bs-card-border-color)}.media-grid--1{grid-template-rows:1fr;grid-template-columns:1fr;grid-template-areas:"a"}.media-grid--2{grid-template-rows:1fr;grid-template-columns:1fr 1fr;grid-template-areas:"a b"}.media-grid--3{grid-template-rows:1fr 1fr;grid-template-columns:1fr 1fr;grid-template-areas:"a b" "a c"}.media-grid--4{grid-template-rows:1fr 1fr;grid-template-columns:1fr 1fr;grid-template-areas:"a b" "c d"}.media-grid__item-wrapper{width:100%;position:relative}.media-grid__item-wrapper:nth-child(1){grid-area:a}.media-grid__item-wrapper:nth-child(2){grid-area:b}.media-grid__item-wrapper:nth-child(3){grid-area:c}.media-grid__item-wrapper:nth-child(4){grid-area:d}.media-grid__thumbnail-backdrop{width:100%;height:100%;position:absolute;background-size:cover;filter:blur(1em);transform:scale(1.5)}.media-grid__thumbnail-wrapper{width:100%;height:100%;z-index:1000;cursor:pointer}.media-grid__thumbnail-wrapper--video:before{content:"";font-family:Material Icons Outlined;font-size:4em;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;transition:opacity .15s ease-in-out;opacity:.8}.media-grid__thumbnail-wrapper--video:hover:before{opacity:1}.media-grid__thumbnail{width:100%;height:100%;object-fit:contain}.media-grid__badge{position:absolute;font-size:1em;bottom:1em;left:1em;z-index:1001}@font-face{font-family:lg;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/lg-oyjwlqP2.ttf?io9a6k) format("truetype"),url(/assets/lg-CosQH4Cu.woff?io9a6k) format("woff"),url(/assets/lg-B0dIV2BS.svg?io9a6k#lg) format("svg");font-weight:400;font-style:normal;font-display:block}.lg-icon{font-family:lg!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg-container{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.lg-next,.lg-prev{background-color:#00000073;border-radius:2px;color:#999;cursor:pointer;display:block;font-size:22px;margin-top:-10px;padding:8px 10px 9px;position:absolute;top:50%;z-index:1084;outline:none;border:none}.lg-next.disabled,.lg-prev.disabled{opacity:0!important;cursor:default}.lg-next:hover:not(.disabled),.lg-prev:hover:not(.disabled){color:#fff}.lg-single-item .lg-next,.lg-single-item .lg-prev{display:none}.lg-next{right:20px}.lg-next:before{content:""}.lg-prev{left:20px}.lg-prev:after{content:""}@-webkit-keyframes lg-right-end{0%{left:0}50%{left:-30px}to{left:0}}@-moz-keyframes lg-right-end{0%{left:0}50%{left:-30px}to{left:0}}@-ms-keyframes lg-right-end{0%{left:0}50%{left:-30px}to{left:0}}@keyframes lg-right-end{0%{left:0}50%{left:-30px}to{left:0}}@-webkit-keyframes lg-left-end{0%{left:0}50%{left:30px}to{left:0}}@-moz-keyframes lg-left-end{0%{left:0}50%{left:30px}to{left:0}}@-ms-keyframes lg-left-end{0%{left:0}50%{left:30px}to{left:0}}@keyframes lg-left-end{0%{left:0}50%{left:30px}to{left:0}}.lg-outer.lg-right-end .lg-object{-webkit-animation:lg-right-end .3s;-o-animation:lg-right-end .3s;animation:lg-right-end .3s;position:relative}.lg-outer.lg-left-end .lg-object{-webkit-animation:lg-left-end .3s;-o-animation:lg-left-end .3s;animation:lg-left-end .3s;position:relative}.lg-toolbar{z-index:1082;left:0;position:absolute;top:0;width:100%}.lg-media-overlap .lg-toolbar{background-image:linear-gradient(0deg,#0000,#0006)}.lg-toolbar .lg-icon{color:#999;cursor:pointer;float:right;font-size:24px;height:47px;line-height:27px;padding:10px 0;text-align:center;width:50px;text-decoration:none!important;outline:medium none;will-change:color;-webkit-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear;background:none;border:none;box-shadow:none}.lg-toolbar .lg-icon.lg-icon-18{font-size:18px}.lg-toolbar .lg-icon:hover{color:#fff}.lg-toolbar .lg-close:after{content:""}.lg-toolbar .lg-maximize{font-size:22px}.lg-toolbar .lg-maximize:after{content:""}.lg-toolbar .lg-download:after{content:""}.lg-sub-html{color:#eee;font-size:16px;padding:10px 40px;text-align:center;z-index:1080;opacity:0;-webkit-transition:opacity .2s ease-out 0s;-o-transition:opacity .2s ease-out 0s;transition:opacity .2s ease-out 0s}.lg-sub-html h4{margin:0;font-size:13px;font-weight:700}.lg-sub-html p{font-size:12px;margin:5px 0 0}.lg-sub-html a{color:inherit}.lg-sub-html a:hover{text-decoration:underline}.lg-media-overlap .lg-sub-html{background-image:linear-gradient(180deg,#0000,#0009)}.lg-item .lg-sub-html{position:absolute;bottom:0;right:0;left:0}.lg-error-msg{font-size:14px;color:#999}.lg-counter{color:#999;display:inline-block;font-size:16px;padding-left:20px;padding-top:12px;height:47px;vertical-align:middle}.lg-closing .lg-toolbar,.lg-closing .lg-prev,.lg-closing .lg-next,.lg-closing .lg-sub-html{opacity:0;-webkit-transition:-webkit-transform .08 cubic-bezier(0,0,.25,1) 0s,opacity .08 cubic-bezier(0,0,.25,1) 0s,color .08 linear;-moz-transition:-moz-transform .08 cubic-bezier(0,0,.25,1) 0s,opacity .08 cubic-bezier(0,0,.25,1) 0s,color .08 linear;-o-transition:-o-transform .08 cubic-bezier(0,0,.25,1) 0s,opacity .08 cubic-bezier(0,0,.25,1) 0s,color .08 linear;transition:transform .08 cubic-bezier(0,0,.25,1) 0s,opacity .08 cubic-bezier(0,0,.25,1) 0s,color .08 linear}body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item:not(.lg-zoomable) .lg-img-wrap,body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item:not(.lg-zoomable) .lg-video-cont,body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item:not(.lg-zoomable) .lg-media-cont{opacity:0;-moz-transform:scale3d(.5,.5,.5);-o-transform:scale3d(.5,.5,.5);-ms-transform:scale3d(.5,.5,.5);-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);will-change:transform,opacity;-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1)!important;-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1)!important;-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1)!important;transition:transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1)!important}body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item:not(.lg-zoomable).lg-complete .lg-img-wrap,body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item:not(.lg-zoomable).lg-complete .lg-video-cont,body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item:not(.lg-zoomable).lg-complete .lg-media-cont{opacity:1;-moz-transform:scale3d(1,1,1);-o-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);-webkit-transform:scale3d(1,1,1);transform:scaleZ(1)}.lg-icon:focus-visible{color:#fff;border-radius:3px;outline:1px dashed rgba(255,255,255,.6)}.lg-toolbar .lg-icon:focus-visible{border-radius:8px;outline-offset:-5px}.lg-group:after{content:"";display:table;clear:both}.lg-container{display:none;outline:none}.lg-on{scroll-behavior:unset}.lg-overlay-open{overflow:hidden}.lg-toolbar,.lg-prev,.lg-next,.lg-pager-outer,.lg-hide-sub-html .lg-sub-html{opacity:0;will-change:transform,opacity;-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1) 0s;-moz-transition:-moz-transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1) 0s;-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1) 0s;transition:transform .25s cubic-bezier(0,0,.25,1) 0s,opacity .25s cubic-bezier(0,0,.25,1) 0s}.lg-show-in .lg-toolbar,.lg-show-in .lg-prev,.lg-show-in .lg-next,.lg-show-in .lg-pager-outer,.lg-show-in.lg-hide-sub-html .lg-sub-html{opacity:1}.lg-show-in .lg-hide-items .lg-prev{opacity:0;-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}.lg-show-in .lg-hide-items .lg-next{opacity:0;-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}.lg-show-in .lg-hide-items .lg-toolbar{opacity:0;-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}.lg-show-in .lg-hide-items.lg-hide-sub-html .lg-sub-html{opacity:0;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}.lg-outer{width:100%;height:100%;position:fixed;top:0;left:0;z-index:1050;text-align:left;opacity:.001;outline:none;will-change:auto;overflow:hidden;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-outer *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lg-outer.lg-zoom-from-image,.lg-outer.lg-visible{opacity:1}.lg-outer.lg-css3 .lg-item:not(.lg-start-end-progress).lg-prev-slide,.lg-outer.lg-css3 .lg-item:not(.lg-start-end-progress).lg-next-slide,.lg-outer.lg-css3 .lg-item:not(.lg-start-end-progress).lg-current{-webkit-transition-duration:inherit!important;transition-duration:inherit!important;-webkit-transition-timing-function:inherit!important;transition-timing-function:inherit!important}.lg-outer.lg-css3.lg-dragging .lg-item.lg-prev-slide,.lg-outer.lg-css3.lg-dragging .lg-item.lg-next-slide,.lg-outer.lg-css3.lg-dragging .lg-item.lg-current{-webkit-transition-duration:0s!important;transition-duration:0s!important;opacity:1}.lg-outer.lg-grab img.lg-object{cursor:-webkit-grab;cursor:-moz-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.lg-outer.lg-grabbing img.lg-object{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing}.lg-outer .lg-content{position:absolute;top:0;left:0;right:0;bottom:0}.lg-outer .lg-inner{width:100%;position:absolute;left:0;top:0;bottom:0;-webkit-transition:opacity 0s;-o-transition:opacity 0s;transition:opacity 0s;white-space:nowrap}.lg-outer .lg-item{display:none!important}.lg-outer .lg-item:not(.lg-start-end-progress){background:url(/assets/loading-BZOHaeKn.gif) no-repeat scroll center center transparent}.lg-outer.lg-css3 .lg-prev-slide,.lg-outer.lg-css3 .lg-current,.lg-outer.lg-css3 .lg-next-slide,.lg-outer.lg-css .lg-current{display:inline-block!important}.lg-outer .lg-item,.lg-outer .lg-img-wrap{display:inline-block;text-align:center;position:absolute;width:100%;height:100%}.lg-outer .lg-item:before,.lg-outer .lg-img-wrap:before{content:"";display:inline-block;height:100%;vertical-align:middle}.lg-outer .lg-img-wrap{position:absolute;left:0;right:0;top:0;bottom:0;white-space:nowrap;font-size:0}.lg-outer .lg-item.lg-complete{background-image:none}.lg-outer .lg-item.lg-current{z-index:1060}.lg-outer .lg-object{display:inline-block;vertical-align:middle;max-width:100%;max-height:100%;width:auto;height:auto;position:relative}.lg-outer .lg-empty-html.lg-sub-html,.lg-outer .lg-empty-html .lg-sub-html{display:none}.lg-outer.lg-hide-download .lg-download{opacity:.75;pointer-events:none}.lg-outer .lg-first-slide .lg-dummy-img{position:absolute;top:50%;left:50%}.lg-outer.lg-components-open:not(.lg-zoomed) .lg-components{-webkit-transform:translate3d(0,0%,0);transform:translateZ(0);opacity:1}.lg-outer.lg-components-open:not(.lg-zoomed) .lg-sub-html{opacity:1;transition:opacity .2s ease-out .15s}.lg-outer .lg-media-cont{text-align:center;display:inline-block;vertical-align:middle;position:relative}.lg-outer .lg-media-cont .lg-object{width:100%!important;height:100%!important}.lg-outer .lg-has-iframe .lg-media-cont{-webkit-overflow-scrolling:touch;overflow:auto}.lg-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1040;background-color:#000;opacity:0;will-change:auto;-webkit-transition:opacity 333ms ease-in 0s;-o-transition:opacity 333ms ease-in 0s;transition:opacity 333ms ease-in 0s}.lg-backdrop.in{opacity:1}.lg-css3.lg-no-trans .lg-prev-slide,.lg-css3.lg-no-trans .lg-next-slide,.lg-css3.lg-no-trans .lg-current{-webkit-transition:none 0s ease 0s!important;-moz-transition:none 0s ease 0s!important;-o-transition:none 0s ease 0s!important;transition:none 0s ease 0s!important}.lg-css3.lg-use-css3 .lg-item{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.lg-css3.lg-fade .lg-item{opacity:0}.lg-css3.lg-fade .lg-item.lg-current{opacity:1}.lg-css3.lg-fade .lg-item.lg-prev-slide,.lg-css3.lg-fade .lg-item.lg-next-slide,.lg-css3.lg-fade .lg-item.lg-current{-webkit-transition:opacity .1s ease 0s;-moz-transition:opacity .1s ease 0s;-o-transition:opacity .1s ease 0s;transition:opacity .1s ease 0s}.lg-css3.lg-use-css3 .lg-item.lg-start-progress{-webkit-transition:-webkit-transform 1s cubic-bezier(.175,.885,.32,1.275) 0s;-moz-transition:-moz-transform 1s cubic-bezier(.175,.885,.32,1.275) 0s;-o-transition:-o-transform 1s cubic-bezier(.175,.885,.32,1.275) 0s;transition:transform 1s cubic-bezier(.175,.885,.32,1.275) 0s}.lg-css3.lg-use-css3 .lg-item.lg-start-end-progress{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-moz-transition:-moz-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide.lg-use-css3 .lg-item{opacity:0}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current{-webkit-transform:translate3d(0,0,0);transform:translateZ(0);opacity:1}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide,.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide,.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-moz-transition:-moz-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s}.lg-container{display:none}.lg-container.lg-show{display:block}.lg-container.lg-dragging-vertical .lg-backdrop{-webkit-transition-duration:0s!important;transition-duration:0s!important}.lg-container.lg-dragging-vertical .lg-css3 .lg-item.lg-current{-webkit-transition-duration:0s!important;transition-duration:0s!important;opacity:1}.lg-inline .lg-backdrop,.lg-inline .lg-outer{position:absolute}.lg-inline .lg-backdrop{z-index:1}.lg-inline .lg-outer{z-index:2}.lg-inline .lg-maximize:after{content:""}.lg-components{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);will-change:transform;-webkit-transition:-webkit-transform .35s ease-out 0s;-moz-transition:-moz-transform .35s ease-out 0s;-o-transition:-o-transform .35s ease-out 0s;transition:transform .35s ease-out 0s;z-index:1080;position:absolute;bottom:0;right:0;left:0}.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-img-wrap,.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-image{-webkit-transition-duration:0ms!important;transition-duration:0ms!important}.lg-outer.lg-use-transition-for-zoom .lg-item.lg-complete.lg-zoomable .lg-img-wrap{will-change:transform;-webkit-transition:-webkit-transform .5s cubic-bezier(.12,.415,.01,1.19) 0s;-moz-transition:-moz-transform .5s cubic-bezier(.12,.415,.01,1.19) 0s;-o-transition:-o-transform .5s cubic-bezier(.12,.415,.01,1.19) 0s;transition:transform .5s cubic-bezier(.12,.415,.01,1.19) 0s}.lg-outer.lg-use-transition-for-zoom.lg-zoom-drag-transition .lg-item.lg-complete.lg-zoomable .lg-img-wrap{will-change:transform;-webkit-transition:-webkit-transform .8s cubic-bezier(0,0,.25,1) 0s;-moz-transition:-moz-transform .8s cubic-bezier(0,0,.25,1) 0s;-o-transition:-o-transform .8s cubic-bezier(0,0,.25,1) 0s;transition:transform .8s cubic-bezier(0,0,.25,1) 0s}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transform:translate3d(0,0,0);transform:translateZ(0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image,.lg-outer .lg-item.lg-complete.lg-zoomable .lg-dummy-img{-webkit-transform:scale3d(1,1,1);transform:scaleZ(1);-webkit-transition:-webkit-transform .5s cubic-bezier(.12,.415,.01,1.19) 0s,opacity .15s!important;-moz-transition:-moz-transform .5s cubic-bezier(.12,.415,.01,1.19) 0s,opacity .15s!important;-o-transition:-o-transform .5s cubic-bezier(.12,.415,.01,1.19) 0s,opacity .15s!important;transition:transform .5s cubic-bezier(.12,.415,.01,1.19) 0s,opacity .15s!important;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image.no-transition,.lg-outer .lg-item.lg-complete.lg-zoomable .lg-dummy-img.no-transition{transition:none!important}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image.reset-transition,.lg-outer .lg-item.lg-complete.lg-zoomable .lg-dummy-img.reset-transition{transform:scaleZ(1) translate3d(-50%,-50%,0)!important;max-width:none!important;max-height:none!important;top:50%!important;left:50%!important}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image.reset-transition-x,.lg-outer .lg-item.lg-complete.lg-zoomable .lg-dummy-img.reset-transition-x{transform:scaleZ(1) translate3d(-50%,0,0)!important;top:0!important;left:50%!important;max-width:none!important;max-height:none!important}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image.reset-transition-y,.lg-outer .lg-item.lg-complete.lg-zoomable .lg-dummy-img.reset-transition-y{transform:scaleZ(1) translate3d(0,-50%,0)!important;top:50%!important;left:0%!important;max-width:none!important;max-height:none!important}.lg-icon.lg-zoom-in:after{content:""}.lg-actual-size .lg-icon.lg-zoom-in{opacity:1;pointer-events:auto}.lg-icon.lg-actual-size{font-size:20px}.lg-icon.lg-actual-size:after{content:""}.lg-icon.lg-zoom-out{opacity:.5;pointer-events:none}.lg-icon.lg-zoom-out:after{content:""}.lg-zoomed .lg-icon.lg-zoom-out{opacity:1;pointer-events:auto}.lg-outer[data-lg-slide-type=video] .lg-zoom-in,.lg-outer[data-lg-slide-type=video] .lg-actual-size,.lg-outer[data-lg-slide-type=video] .lg-zoom-out,.lg-outer[data-lg-slide-type=iframe] .lg-zoom-in,.lg-outer[data-lg-slide-type=iframe] .lg-actual-size,.lg-outer[data-lg-slide-type=iframe] .lg-zoom-out,.lg-outer.lg-first-slide-loading .lg-zoom-in,.lg-outer.lg-first-slide-loading .lg-actual-size,.lg-outer.lg-first-slide-loading .lg-zoom-out{opacity:.75;pointer-events:none}.lg-outer .lg-thumb-outer{background-color:#0d0a0a;width:100%;max-height:350px;overflow:hidden;float:left}.lg-outer .lg-thumb-outer.lg-grab .lg-thumb-item{cursor:-webkit-grab;cursor:-moz-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.lg-outer .lg-thumb-outer.lg-grabbing .lg-thumb-item{cursor:move;cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing}.lg-outer .lg-thumb-outer.lg-dragging .lg-thumb,.lg-outer .lg-thumb-outer.lg-rebuilding-thumbnails .lg-thumb{-webkit-transition-duration:0s!important;transition-duration:0s!important}.lg-outer .lg-thumb-outer.lg-thumb-align-middle{text-align:center}.lg-outer .lg-thumb-outer.lg-thumb-align-left{text-align:left}.lg-outer .lg-thumb-outer.lg-thumb-align-right{text-align:right}.lg-outer.lg-single-item .lg-thumb-outer{display:none}.lg-outer .lg-thumb{padding:5px 0;height:100%;margin-bottom:-5px;display:inline-block;vertical-align:middle}@media (min-width: 768px){.lg-outer .lg-thumb{padding:10px 0}}.lg-outer .lg-thumb-item{cursor:pointer;float:left;overflow:hidden;height:100%;border-radius:2px;margin-bottom:5px;will-change:border-color}@media (min-width: 768px){.lg-outer .lg-thumb-item{border-radius:4px;border:2px solid #fff;-webkit-transition:border-color .25s ease;-o-transition:border-color .25s ease;transition:border-color .25s ease}}.lg-outer .lg-thumb-item.active,.lg-outer .lg-thumb-item:hover{border-color:#a90707}.lg-outer .lg-thumb-item img{width:100%;height:100%;object-fit:cover;display:block}.lg-outer.lg-can-toggle .lg-item{padding-bottom:0}.lg-outer .lg-toggle-thumb:after{content:""}.lg-outer.lg-animate-thumb .lg-thumb{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.lg-outer .lg-video-cont{text-align:center;display:inline-block;vertical-align:middle;position:relative}.lg-outer .lg-video-cont .lg-object{width:100%!important;height:100%!important}.lg-outer .lg-has-iframe .lg-video-cont{-webkit-overflow-scrolling:touch;overflow:auto}.lg-outer .lg-video-object{position:absolute;left:0;right:0;width:100%;height:100%;top:0;bottom:0;z-index:3}.lg-outer .lg-video-poster{z-index:1}.lg-outer .lg-has-video .lg-video-object{opacity:0;will-change:opacity;-webkit-transition:opacity .3s ease-in;-o-transition:opacity .3s ease-in;transition:opacity .3s ease-in}.lg-outer .lg-has-video.lg-video-loaded .lg-video-poster,.lg-outer .lg-has-video.lg-video-loaded .lg-video-play-button{opacity:0!important}.lg-outer .lg-has-video.lg-video-loaded .lg-video-object{opacity:1}@keyframes lg-play-stroke{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes lg-play-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.lg-video-play-button{width:18%;max-width:140px;position:absolute;top:50%;left:50%;z-index:2;cursor:pointer;transform:translate(-50%,-50%) scale(1);will-change:opacity,transform;-webkit-transition:-webkit-transform .25s cubic-bezier(.17,.88,.32,1.28),opacity .1s;-moz-transition:-moz-transform .25s cubic-bezier(.17,.88,.32,1.28),opacity .1s;-o-transition:-o-transform .25s cubic-bezier(.17,.88,.32,1.28),opacity .1s;transition:transform .25s cubic-bezier(.17,.88,.32,1.28),opacity .1s}.lg-video-play-button:hover .lg-video-play-icon-bg,.lg-video-play-button:hover .lg-video-play-icon{opacity:1}.lg-video-play-icon-bg{fill:none;stroke-width:3%;stroke:#fcfcfc;opacity:.6;will-change:opacity;-webkit-transition:opacity .12s ease-in;-o-transition:opacity .12s ease-in;transition:opacity .12s ease-in}.lg-video-play-icon-circle{position:absolute;top:0;left:0;bottom:0;right:0;fill:none;stroke-width:3%;stroke:#1e1e1ee6;stroke-opacity:1;stroke-linecap:round;stroke-dasharray:200;stroke-dashoffset:200}.lg-video-play-icon{position:absolute;width:25%;max-width:120px;left:50%;top:50%;transform:translate3d(-50%,-50%,0);opacity:.6;will-change:opacity;-webkit-transition:opacity .12s ease-in;-o-transition:opacity .12s ease-in;transition:opacity .12s ease-in}.lg-video-play-icon .lg-video-play-icon-inner{fill:#fcfcfc}.lg-video-loading .lg-video-play-icon-circle{animation:lg-play-rotate 2s linear .25s infinite,lg-play-stroke 1.5s ease-in-out .25s infinite}.lg-video-loaded .lg-video-play-button{opacity:0;transform:translate(-50%,-50%) scale(.7)}.light-gallery-item{position:relative}.light-gallery-item__badge{position:absolute;font-size:.85em;top:1em;left:1em;z-index:1001}.fade-content{--fade-content-height: 480px;--fade-content-bg: var(--bs-card-bg);position:relative}.fade-content__body{overflow:hidden;position:relative;transition:max-height .3s ease;max-height:var(--fade-content-height)}.fade-content__body--expanded{max-height:none}.fade-content__overlay{position:absolute;bottom:0;left:0;width:100%;height:50px;background:linear-gradient(to bottom,transparent,var(--fade-content-bg));pointer-events:none}.fade-content__toggle{margin-top:.5rem}.filter-modal__section{transition:height .15s ease,margin-bottom .15s ease}.filter-modal__section--hidden{overflow:hidden;height:0!important;margin-bottom:0!important}.filter-modal__section:not(:last-of-type){margin-bottom:2rem}.filter-modal-button{display:flex;align-items:center;white-space:nowrap}.filter-modal-button--show:before{content:"";font-family:Material Icons;font-size:1.2em;margin-right:.2em}.filter-modal-button--clear:before{content:"";font-family:Material Icons;font-size:1.2em;margin-right:.2em}.product-list{--card-width: 300px;--gap: 16px;width:100%;display:flex;flex-wrap:wrap;gap:var(--gap)}.product-list__card-wrapper{width:var(--card-width);flex-grow:1}.product-list__card-wrapper--fixed{flex-grow:0}.product-card{width:100%}.product-card__description img{max-width:100%}.product-card--compact .product-card__description{display:none}.product-card--compact .product-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;color:var(--bs-link-color)}.product-card__media-nav{display:flex;gap:1.5em;border-bottom:1px solid var(--bs-secondary)}.product-card__media-nav a{position:relative;top:1px;padding:.5em 0;color:var(--bs-link-color)}.product-card__media-nav a:hover{color:var(--bs-link-hover-color)}.product-card__media-nav a.active{color:var(--bs-link-color);border-bottom:2px solid var(--bs-link-color)}.product-card__media-nav a.active:hover{color:var(--bs-link-hover-color)}.lg-video-poster{object-fit:contain}.media-gallery{display:flex;flex-wrap:wrap;gap:var(--media-gallery-gap)}.media-gallery__thumbnail-wrapper{flex-grow:1;width:auto;position:relative;height:var(--media-gallery-row-height);border:var(--media-gallery-thumbnail-border) solid var(--bs-border-color);border-radius:var(--bs-border-radius);overflow:hidden;cursor:pointer}.media-gallery__thumbnail-wrapper--video:before{content:"";font-family:Material Icons Outlined;font-size:4em;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;transition:opacity .15s ease-in-out;opacity:.8}.media-gallery__thumbnail-wrapper--video:hover:before{opacity:1}.media-gallery__thumbnail-wrapper--empty{width:var(--media-gallery-row-height)}.media-gallery__thumbnail{width:100%;height:100%;object-fit:cover}.media-gallery__source-link{color:inherit}.media-gallery__source-link:hover{text-decoration:none!important}.campaign-header__cover{max-height:10em;width:100%;object-fit:cover}.campaign-header__avatar{height:8em;aspect-ratio:1;object-fit:cover}.campaign-header__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;font-weight:700}.campaign-header__creation-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.campaign-header__nav{border-bottom:1px solid var(--bs-secondary)}.campaign-header__nav a{padding-bottom:.5em;position:relative;top:1px}.campaign-header__nav a.active{border-bottom:2px solid var(--bs-link-color)}.about-campaign__summary img{max-width:100%}.slider--h100 .slick-track{display:flex!important}.slider--h100 .slick-track .slick-slide{height:auto;display:flex!important}.slider--h100 .slick-track .slick-slide>div{display:flex;width:100%}.slider__dots li button:before{color:var(--bs-body-color)!important}.reward-card{width:100%;height:100%}.reward-card__image{max-height:10em;object-fit:contain}.reward-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;font-weight:700}.reward-card__content{font-size:.9em}.reward-card__content p{margin-bottom:0}.reward-card__content ul{padding-left:1em}.reward-card__content img{max-width:100%}.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-track,.slick-slider .slick-list{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translateZ(0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:before,.slick-track:after{display:table;content:""}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.slick-loading .slick-list{background:#fff url(/assets/ajax-loader-BcnMEykj.gif) center center no-repeat}@font-face{font-family:slick;font-weight:400;font-style:normal;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,AAgAAGQHAAABAAIAAAAAAAIABQkAAAAAAAABAJABAAAAAExQAQAAgCAAAAAAAAAAAAAAAAEAAAAAAAAATxDE8AAAAAAAAAAAAAAAAAAAAAAAAAoAcwBsAGkAYwBrAAAADgBSAGUAZwB1AGwAYQByAAAAFgBWAGUAcgBzAGkAbwBuACAAMQAuADAAAAAKAHMAbABpAGMAawAAAAAAAAEAAAANAIAAAwBQRkZUTW3RyK8AAAdIAAAAHEdERUYANAAGAAAHKAAAACBPUy8yT/b9sgAAAVgAAABWY21hcCIPRb0AAAHIAAABYmdhc3D//wADAAAHIAAAAAhnbHlmP5u2YAAAAzwAAAIsaGVhZAABMfsAAADcAAAANmhoZWED5QIFAAABFAAAACRobXR4BkoASgAAAbAAAAAWbG9jYQD2AaIAAAMsAAAAEG1heHAASwBHAAABOAAAACBuYW1lBSeBwgAABWgAAAFucG9zdC+zMgMAAAbYAAAARQABAAAAAQAA8MQQT18PPPUACwIAAAAAAM9xeH8AAAAAz3F4fwAlACUB2wHbAAAACAACAAAAAAAAAAEAAAHbAAAALgIAAAAAAAHbAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAAHAEQAAgAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQIAAZAABQAIAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAIABQkAAAAAAACAAAABAAAAIAAAAAAAAAAAUGZFZABAAGEhkgHg/+AALgHb/9sAAAABAAAAAAAAAgAAAAAAAAACAAAAAgAAJQAlACUAJQAAAAAAAwAAAAMAAAAcAAEAAAAAAFwAAwABAAAAHAAEAEAAAAAMAAgAAgAEAAAAYSAiIZAhkv//AAAAAABhICIhkCGS//8AAP+l3+PedN5xAAEAAAAAAAAAAAAAAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGAIwAsAEWAAIAJQAlAdsB2wAYACwAAD8BNjQvASYjIg8BBhUUHwEHBhUUHwEWMzI2FAcGBwYiJyYnJjQ3Njc2MhcWF/GCBgaCBQcIBR0GBldXBgYdBQgH7x0eMjB8MDIeHR0eMjB8MDIecYIGDgaCBQUeBQcJBFhYBAkHBR4F0nwwMh4dHR4yMHwwMh4dHR4yAAAAAgAlACUB2wHbABgALAAAJTc2NTQvATc2NTQvASYjIg8BBhQfARYzMjYUBwYHBiInJicmNDc2NzYyFxYXASgdBgZXVwYGHQUIBwWCBgaCBQcIuB0eMjB8MDIeHR0eMjB8MDIecR4FBwkEWFgECQcFHgUFggYOBoIF0nwwMh4dHR4yMHwwMh4dHR4yAAABACUAJQHbAdsAEwAAABQHBgcGIicmJyY0NzY3NjIXFhcB2x0eMjB8MDIeHR0eMjB8MDIeAT58MDIeHR0eMjB8MDIeHR0eMgABACUAJQHbAdsAQwAAARUUBisBIicmPwEmIyIHBgcGBwYUFxYXFhcWMzI3Njc2MzIfARYVFAcGBwYjIicmJyYnJjQ3Njc2NzYzMhcWFzc2FxYB2woIgAsGBQkoKjodHBwSFAwLCwwUEhwcHSIeIBMGAQQDJwMCISspNC8mLBobFBERFBsaLCYvKicpHSUIDAsBt4AICgsLCScnCwwUEhwcOhwcEhQMCw8OHAMDJwMDAgQnFBQRFBsaLCZeJiwaGxQRDxEcJQgEBgAAAAAAAAwAlgABAAAAAAABAAUADAABAAAAAAACAAcAIgABAAAAAAADACEAbgABAAAAAAAEAAUAnAABAAAAAAAFAAsAugABAAAAAAAGAAUA0gADAAEECQABAAoAAAADAAEECQACAA4AEgADAAEECQADAEIAKgADAAEECQAEAAoAkAADAAEECQAFABYAogADAAEECQAGAAoAxgBzAGwAaQBjAGsAAHNsaWNrAABSAGUAZwB1AGwAYQByAABSZWd1bGFyAABGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAHMAbABpAGMAawAgADoAIAAxADQALQA0AC0AMgAwADEANAAARm9udEZvcmdlIDIuMCA6IHNsaWNrIDogMTQtNC0yMDE0AABzAGwAaQBjAGsAAHNsaWNrAABWAGUAcgBzAGkAbwBuACAAMQAuADAAAFZlcnNpb24gMS4wAABzAGwAaQBjAGsAAHNsaWNrAAAAAAIAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAABwAAAAEAAgECAQMAhwBECmFycm93cmlnaHQJYXJyb3dsZWZ0AAAAAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAwAGAAEABAAAAAIAAAAAAAEAAAAAzu7XsAAAAADPcXh/AAAAAM9xeH8=) format("embedded-opentype"),url(data:font/woff;base64,d09GRk9UVE8AAAVkAAsAAAAAB1wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAAAi4AAAKbH/pWDkZGVE0AAAM4AAAAGgAAABxt0civR0RFRgAAA1QAAAAcAAAAIAAyAARPUy8yAAADcAAAAFIAAABgUBj/rmNtYXAAAAPEAAAAUAAAAWIiC0SwaGVhZAAABBQAAAAuAAAANgABMftoaGVhAAAERAAAABwAAAAkA+UCA2htdHgAAARgAAAADgAAAA4ESgBKbWF4cAAABHAAAAAGAAAABgAFUABuYW1lAAAEeAAAANwAAAFuBSeBwnBvc3QAAAVUAAAAEAAAACAAAwABeJw9ks9vEkEUx2cpWyeUoFYgNkHi2Wt7N3rVm3cTs3UVLC4LxIWEQvi1P3i7O1tYLJDAmlgKGEhQrsajf0j7J3jYTXrQWUrMJG+++b55n5e8NwwKBhHDMLv5kxT3ATEBxKBn3qOAl9zxHgb1MAPhHQgHkyF08Gr/L8B/Eb6zWnmCJ7AJVLubQOheArXvJ1A4EXi6j4I+Zg9F0QFKvsnlBCmXeve+sFEnb/nCptdtQ4QYhVFRAT1HrF8UQK/RL/SbmUbclsvGVFXRZKDHUE38cc4qpkbAAsuwiImvro+ufcfaOIQ6szlrmjRJDaKZKnbjN3GWKIbiIzRFUfCffuxxKOL+3LDlDVvx2TdxN84qZEsnhNBa6pgm2dAsnzbLsETdsmRFxUeHV4e+I2/ptN8TyqV8T3Dt29t7EYOuajVIw2y1Wy3M86w0zg/Fz2IvawmQAUHOVrPVfLkoScVynsqsTG0MGUs4z55nh3mnOJa+li+rl9WpPIcFfDubDeaDC+fLBdYN3QADzLauGfj4B6sZmq6CCpqmtSvF0qlUl2qf5AJIUCSlTqlb7lUG+LRfGzZGzZEyBgccMu6MuqPecNDvD4Y9Kjtj4gD+DsvKVMTcMdtqtZtmkzQstQvYje7Syep0PDSAhSOeHYXYWThEF//A/0YvYV1fSQtpKU5STtrhbQ444OtpKSWJIg3pOg8cBs7maTY1EZf07aq+hjWs7IWzdCYTGhb2CtZ47x+Uhx28AAB4nGNgYGBkAIJz765vANHnCyvqYTQAWnkHswAAeJxjYGRgYOADYgkGEGBiYARCFjAG8RgABHYAN3icY2BmYmCcwMDKwMHow5jGwMDgDqW/MkgytDAwMDGwcjKAQQMDAyOQUmCAgoA01xQGB4ZExUmMD/4/YNBjvP3/NgNEDQPjbbBKBQZGADfLDgsAAHicY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQzMCQqKClOUJz0/z9YHRLv/+L7D+8V3cuHmgAHjGwM6ELUByxUMIOZCmbgAAA5LQ8XeJxjYGRgYABiO68w73h+m68M3EwMIHC+sKIeTqsyqDLeZrwN5HIwgKUB/aYJUgAAeJxjYGRgYLzNwMCgx8QAAkA2IwMqYAIAMGIB7QIAAAACAAAlACUAJQAlAAAAAFAAAAUAAHicbY49asNAEIU/2ZJDfkiRIvXapUFCEqpcptABUrg3ZhEiQoKVfY9UqVLlGDlADpAT5e16IUWysMz3hjfzBrjjjQT/EjKpCy+4YhN5yZoxcirPe+SMWz4jr6S+5UzSa3VuwpTnBfc8RF7yxDZyKs9r5IxHPiKv1P9iZqDnyAvMQ39UecbScVb/gJO03Xk4CFom3XYK1clhMdQUlKo7/d9NF13RkIdfy+MV7TSe2sl11tRFaXYmJKpWTd7kdVnJ8veevZKc+n3I93t9Jnvr5n4aTVWU/0z9AI2qMkV4nGNgZkAGjAxoAAAAjgAF) format("woff"),url(data:font/ttf;base64,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) format("truetype"),url(/assets/slick-BlzDm7g2.svg#slick) format("svg")}.slick-prev,.slick-next{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;height:20px;padding:0;-webkit-transform:translate(0,-50%);-ms-transform:translate(0,-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.slick-prev:hover,.slick-prev:focus,.slick-next:hover,.slick-next:focus{color:transparent;outline:none;background:transparent}.slick-prev:hover:before,.slick-prev:focus:before,.slick-next:hover:before,.slick-next:focus:before{opacity:1}.slick-prev.slick-disabled:before,.slick-next.slick-disabled:before{opacity:.25}.slick-prev:before,.slick-next:before{font-family:slick;font-size:20px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-prev{left:-25px}[dir=rtl] .slick-prev{right:-25px;left:auto}.slick-prev:before{content:"←"}[dir=rtl] .slick-prev:before{content:"→"}.slick-next{right:-25px}[dir=rtl] .slick-next{right:auto;left:-25px}.slick-next:before{content:"→"}[dir=rtl] .slick-next:before{content:"←"}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center}.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0 5px;padding:0;cursor:pointer}.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.slick-dots li button:hover,.slick-dots li button:focus{outline:none}.slick-dots li button:hover:before,.slick-dots li button:focus:before{opacity:1}.slick-dots li button:before{font-family:slick;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"•";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.slick-dots li.slick-active button:before{opacity:.75;color:#000}.slider-arrow{width:auto!important;height:auto!important;color:var(--bs-btn-color)!important;background:var(--bs-btn-bg)!important;font-size:inherit!important}.slider-arrow__icon{font-size:2em}.slider-arrow:hover{color:var(--bs-btn-hover-color)!important;background-color:var(--bs-btn-hover-bg)!important}.slider-arrow.slick-prev:before,.slider-arrow.slick-next:before{content:none!important}.slider-arrow--prev{left:-2.5em}.slider-arrow--next{right:-2.5em}.post-nav__wrapper.fixed{position:sticky;bottom:0;border-top:1px solid var(--bs-secondary);padding-top:.5rem;background:var(--bs-body-bg)}.post-nav__previous,.post-nav__next{display:flex;align-items:center;width:calc(50% - 2rem)}.post-nav__previous--fill,.post-nav__next--fill{width:calc(90% - 2rem)}.post-nav__previous-label,.post-nav__next-label{width:calc(100% - 1.7rem);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.post-nav__next-label{text-align:right}.post-nav__next{justify-content:end}.post-nav__previous:before{content:"";font-family:Material Icons;font-size:1.2em;margin-right:.5em}.post-nav__next:after{content:"";font-family:Material Icons;font-size:1.2em;margin-left:.5em}.post-content__column.mw-narrower{max-width:40.5em}.post-content__column.mw-standard{max-width:47.5em}.post-content__column.mw-wider{max-width:54.5em}.collection-list.mw-narrower{max-width:40.5em}.collection-list.mw-standard{max-width:47.5em}.collection-list.mw-wider{max-width:54.5em}.collection-card{overflow:hidden}.collection-card__thumbnail>img{height:6.5em;aspect-ratio:1;object-fit:cover}.collection-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;color:var(--bs-link-color);font-weight:700}.collection-card__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.collection-card__count-icon{font-size:1.2em!important;margin-right:.3em}.collection-card__count-text{font-size:1em}.collection-banner{overflow:hidden;border:none;border-radius:0}.collection-banner.mw-narrower{max-width:40.5em}.collection-banner.mw-standard{max-width:47.5em}.collection-banner.mw-wider{max-width:54.5em}.collection-banner__thumbnail{z-index:100}.collection-banner__thumbnail>img{border-radius:var(--bs-border-radius);height:8em;aspect-ratio:1;object-fit:cover}.collection-banner__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden;color:var(--bs-link-color);font-size:1.2rem;font-weight:700}.collection-banner .fade-content__toggle{margin-bottom:.5em}.collection-banner--nodesc .collection-banner__thumbnail>img{height:4em}.collection-banner--nodesc .collection-banner__title{flex:1 auto;align-items:center;font-size:1.5rem}
|