├── site
├── accounts
│ └── .gitkeep
├── cache
│ └── .gitkeep
├── sessions
│ └── .gitkeep
├── blueprints
│ ├── fields
│ │ └── text.yml
│ ├── files
│ │ ├── logo.yml
│ │ ├── favicon.yml
│ │ └── project.yml
│ ├── sections
│ │ └── files.yml
│ ├── pages
│ │ ├── textpage.yml
│ │ ├── error.yml
│ │ └── project.yml
│ └── site.yml
├── templates
│ ├── error.php
│ ├── default.php
│ ├── project.php
│ ├── pages
│ │ ├── textpage.twig
│ │ ├── error.twig
│ │ ├── homepage.twig
│ │ └── project.twig
│ └── layouts
│ │ └── default.twig
├── config
│ └── config.php
└── plugins
│ ├── color-field
│ ├── helpers.php
│ ├── index.php
│ └── Color.php
│ ├── favicon
│ └── index.php
│ ├── bots
│ └── index.php
│ ├── image
│ └── index.php
│ └── twig
│ └── index.php
├── .npmrc
├── content
├── favicon.gif.txt
├── home
│ └── homepage.txt
├── _drafts
│ └── draft
│ │ └── textpage.txt
├── 2_forrest-text-page
│ ├── ju-on-e6xsi7qqvaa-unsplash.jpg.txt
│ ├── blake-cheek-cpwyhs2ww24-unsplash.jpg.txt
│ ├── ju-on-e6xsi7qqvaa-unsplash.jpg
│ ├── blake-cheek-cpwyhs2ww24-unsplash.jpg
│ └── textpage.txt
├── favicon.gif
├── error
│ └── error.txt
├── 6_norway
│ ├── ben-wicks-dvq4eej_mkc-unsplash.jpg
│ ├── ben-wicks-kbfnvbtelys-unsplash.jpg
│ ├── ben-wicks-dvq4eej_mkc-unsplash.jpg.txt
│ ├── ben-wicks-kbfnvbtelys-unsplash.jpg.txt
│ └── project.txt
├── 4_mountains
│ ├── mark-basarab-z8ct_q3ocqm-unsplash.jpg
│ ├── simon-fitall-tvleqh3p1os-unsplash.jpg
│ ├── mark-basarab-z8ct_q3ocqm-unsplash.jpg.txt
│ ├── simon-fitall-tvleqh3p1os-unsplash.jpg.txt
│ └── project.txt
├── 9_city-night
│ ├── chuttersnap-jh0wcegjsrq-unsplash.jpg
│ ├── dominik-reallife-aacetp_lram-unsplash.jpg
│ ├── chuttersnap-jh0wcegjsrq-unsplash.jpg.txt
│ ├── dominik-reallife-aacetp_lram-unsplash.jpg.txt
│ └── project.txt
├── 3_beach-and-sand
│ ├── alex-perez-iul_chth4ny-unsplash.jpg
│ ├── alex-perez-nlukaa-ndde-unsplash.jpg
│ ├── coral-ouellette-j6nhmplhk6i-unsplash.jpg
│ ├── alex-perez-iul_chth4ny-unsplash.jpg.txt
│ ├── alex-perez-nlukaa-ndde-unsplash.jpg.txt
│ ├── coral-ouellette-j6nhmplhk6i-unsplash.jpg.txt
│ └── project.txt
├── 5_view-from-above
│ ├── shawn-ang-l-it0glrp1m-unsplash.jpg
│ ├── shawn-ang-vccokh7eule-unsplash.jpg
│ ├── shawn-ang-l-it0glrp1m-unsplash.jpg.txt
│ ├── shawn-ang-vccokh7eule-unsplash.jpg.txt
│ └── project.txt
├── 7_at-the-library
│ ├── chuttersnap-sxyrbn3c7j4-unsplash.jpg
│ ├── fahrul-azmi-cfuz-6i83vs-unsplash.jpg
│ ├── chuttersnap-sxyrbn3c7j4-unsplash.jpg.txt
│ ├── fahrul-azmi-cfuz-6i83vs-unsplash.jpg.txt
│ └── project.txt
├── 8_construction-site
│ ├── max-larochelle-td-sdlqxfsy-unsplash.jpg
│ ├── max-larochelle-td-sdlqxfsy-unsplash.jpg.txt
│ ├── christopher-burns-8kfcr12oeum-unsplash.jpg.txt
│ ├── christopher-burns-8kfcr12oeum-unsplash.jpg
│ └── project.txt
├── site.txt
├── 1_about
│ └── textpage.txt
└── 10_example-content
│ └── textpage.txt
├── .browserslistrc
├── media
└── .htaccess
├── index.php
├── .gitignore
├── bin
├── release
└── permissions
├── purgecss.config.js
├── .vscode
└── settings.json
├── package.json
├── src
└── css
│ ├── color.css
│ ├── body.css
│ ├── index.css
│ ├── debug.css
│ └── copy.css
├── .htaccess
├── composer.json
├── LICENSE
├── README.md
├── static
└── master.css
└── composer.lock
/site/accounts/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/site/cache/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/site/sessions/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=false
2 |
--------------------------------------------------------------------------------
/content/favicon.gif.txt:
--------------------------------------------------------------------------------
1 | Template: favicon
--------------------------------------------------------------------------------
/content/home/homepage.txt:
--------------------------------------------------------------------------------
1 | Title: Home
2 |
--------------------------------------------------------------------------------
/content/_drafts/draft/textpage.txt:
--------------------------------------------------------------------------------
1 | Title: Draft
--------------------------------------------------------------------------------
/content/2_forrest-text-page/ju-on-e6xsi7qqvaa-unsplash.jpg.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 2%
2 | last 2 Firefox versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/content/2_forrest-text-page/blake-cheek-cpwyhs2ww24-unsplash.jpg.txt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/site/blueprints/fields/text.yml:
--------------------------------------------------------------------------------
1 | label: Text
2 | type: textarea
3 |
--------------------------------------------------------------------------------
/site/blueprints/files/logo.yml:
--------------------------------------------------------------------------------
1 | title: Logo
2 |
3 | accept:
4 | mime: image/*
5 |
--------------------------------------------------------------------------------
/site/blueprints/files/favicon.yml:
--------------------------------------------------------------------------------
1 | title: Favicon
2 |
3 | accept:
4 | mime: image/*
5 |
--------------------------------------------------------------------------------
/site/templates/error.php:
--------------------------------------------------------------------------------
1 | template()->name(), $kirby->data);
4 |
--------------------------------------------------------------------------------
/content/favicon.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/favicon.gif
--------------------------------------------------------------------------------
/site/blueprints/sections/files.yml:
--------------------------------------------------------------------------------
1 | type: files
2 | sortable: false
3 | image:
4 | cover: true
5 |
--------------------------------------------------------------------------------
/site/templates/default.php:
--------------------------------------------------------------------------------
1 | intendedTemplate()->name(), $kirby->data);
4 |
--------------------------------------------------------------------------------
/site/templates/project.php:
--------------------------------------------------------------------------------
1 | intendedTemplate()->name(), $kirby->data);
4 |
--------------------------------------------------------------------------------
/media/.htaccess:
--------------------------------------------------------------------------------
1 | Header unset ETag
2 | Header set Cache-Control "public, max-age=31536000, immutable"
3 |
--------------------------------------------------------------------------------
/site/config/config.php:
--------------------------------------------------------------------------------
1 | 'localhost' === $_SERVER['SERVER_NAME'],
5 | ];
6 |
--------------------------------------------------------------------------------
/content/error/error.txt:
--------------------------------------------------------------------------------
1 | Title: Error
2 |
3 | ----
4 |
5 | Text: Sorry, the page you have requested was not found.
6 |
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | render();
8 |
--------------------------------------------------------------------------------
/content/6_norway/ben-wicks-dvq4eej_mkc-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/6_norway/ben-wicks-dvq4eej_mkc-unsplash.jpg
--------------------------------------------------------------------------------
/content/6_norway/ben-wicks-kbfnvbtelys-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/6_norway/ben-wicks-kbfnvbtelys-unsplash.jpg
--------------------------------------------------------------------------------
/content/4_mountains/mark-basarab-z8ct_q3ocqm-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/4_mountains/mark-basarab-z8ct_q3ocqm-unsplash.jpg
--------------------------------------------------------------------------------
/content/4_mountains/simon-fitall-tvleqh3p1os-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/4_mountains/simon-fitall-tvleqh3p1os-unsplash.jpg
--------------------------------------------------------------------------------
/content/9_city-night/chuttersnap-jh0wcegjsrq-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/9_city-night/chuttersnap-jh0wcegjsrq-unsplash.jpg
--------------------------------------------------------------------------------
/content/2_forrest-text-page/ju-on-e6xsi7qqvaa-unsplash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lemmon/kirby-portfolio-theme/HEAD/content/2_forrest-text-page/ju-on-e6xsi7qqvaa-unsplash.jpg
--------------------------------------------------------------------------------
/site/plugins/color-field/helpers.php:
--------------------------------------------------------------------------------
1 | x.match(/[\w-/:]+(?
7 |
8 |
{{ page.title }}
9 |
10 |
11 | {{~ page.text | kt({ width: 640, srcset: [ 320, 640, 960, 1280 ] }) }}
12 |
13 |
14 | {%~ endif %}
15 |
16 | {% endblock %}
17 |
--------------------------------------------------------------------------------
/src/css/color.css:
--------------------------------------------------------------------------------
1 | .linkcolor,
2 | .linkcolor\:hover:hover,
3 | .anchor:hover .linkcolor\:hover {
4 | color: var(--link-color);
5 | }
6 |
7 | .hlcolor {
8 | color: var(--theme-highlight-text-color);
9 | }
10 |
11 | .bg-hlbgcolor {
12 | background-color: var(--theme-highlight-background-color);
13 | box-shadow: -1px 0 0 2px var(--theme-highlight-background-color),
14 | 1px 0 0 2px var(--theme-highlight-background-color);
15 | box-decoration-break: clone;
16 | }
17 |
--------------------------------------------------------------------------------
/site/plugins/favicon/index.php:
--------------------------------------------------------------------------------
1 | [
5 | [
6 | 'pattern' => 'favicon.ico',
7 | 'action' => function () {
8 | $file = site()->files()->filterBy('template', 'favicon')->first();
9 | if (!$file) {
10 | http_response_code(404);
11 | die('not found');
12 | }
13 | header('Content-Type: ' . $file->mime());
14 | readfile($file->root());
15 | exit;
16 | },
17 | ],
18 | ],
19 | ]);
20 |
--------------------------------------------------------------------------------
/site/plugins/color-field/index.php:
--------------------------------------------------------------------------------
1 | [
8 | 'isColor' => function ($field) {
9 | return $field->isNotEmpty() and Lemmon\is_color($field->value());
10 | },
11 | 'toColor' => function ($field) {
12 | return ($field->isNotEmpty() and Lemmon\is_color($field->value()))
13 | ? new Lemmon\Color($field->value())
14 | : null
15 | ;
16 | },
17 | ],
18 | ]);
19 |
--------------------------------------------------------------------------------
/bin/permissions:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | cd "$(dirname $0)/.."
3 |
4 | # make directories writable
5 | chmod 777 media
6 | chmod 777 site/accounts
7 | chmod 777 site/cache
8 | chmod 777 site/sessions
9 | # accounts files and directories writable
10 | find site/accounts -type d -exec chmod 0777 {} \;
11 | find site/accounts -type f -exec chmod 0666 {} \;
12 | # content files and directories writable
13 | find content -type d -exec chmod 0777 {} \;
14 | find content -type f -exec chmod 0666 {} \;
15 | # change owner of content
16 | chown -R `ls -ld . | awk '{print $3}'` content
17 |
--------------------------------------------------------------------------------
/content/8_construction-site/project.txt:
--------------------------------------------------------------------------------
1 | Title: Construction Site
2 |
3 | ----
4 |
5 | Text: Aenean gravida ante id nunc malesuada sagittis. Sed lacinia aliquam arcu, vel aliquam sem rutrum non. Cras accumsan quam et velit euismod consectetur. Quisque euismod ante sed diam ullamcorper interdum. Nulla sodales placerat tellus, vitae tristique tellus porta vel. Maecenas finibus eros quis purus faucibus, sed aliquet arcu ultricies.
6 |
7 | ----
8 |
9 | Client:
10 |
11 | ----
12 |
13 | Role:
14 |
15 | ----
16 |
17 | Date: August 1990
18 |
19 | ----
20 |
21 | Website:
--------------------------------------------------------------------------------
/site/templates/pages/error.twig:
--------------------------------------------------------------------------------
1 | {% extends layout() %}
2 |
3 | {% block main %}
4 |
5 | {%~ if page.text.notEmpty %}
6 |
7 |
8 |
{{ page.title }}
9 |
10 |
11 | {{ page.text | kt({ width: 640, srcset: [ 320, 640, 960, 1280 ] }) }}
12 | {%~ with { _page: page('home') } %}
13 |
← {{ _page.title }}
14 | {%~ endwith %}
15 |
16 |
17 | {%~ endif %}
18 |
19 | {% endblock %}
20 |
--------------------------------------------------------------------------------
/src/css/body.css:
--------------------------------------------------------------------------------
1 | .body {
2 | max-width: 28rem;
3 | margin-left: auto;
4 | margin-right: auto;
5 | padding-top: 1.5rem;
6 | padding-bottom: 1.5rem;
7 | }
8 |
9 | @media (--view-sd) {
10 |
11 | .body {
12 | max-width: 39rem;
13 | }
14 |
15 | }
16 |
17 | @media (--view-md) {
18 |
19 | .body {
20 | display: grid;
21 | grid-template-columns: 19rem auto;
22 | grid-template-rows: repeat(3, min-content);
23 | max-width: 58rem;
24 | }
25 |
26 | .main {
27 | grid-column-start: 2;
28 | grid-row-start: 1;
29 | grid-row-end: span 3;
30 | }
31 |
32 | }
33 |
34 | @media (--view-ld) {
35 |
36 | .body {
37 | max-width: 77rem;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/content/3_beach-and-sand/project.txt:
--------------------------------------------------------------------------------
1 | Title: Beach & Sand
2 |
3 | ----
4 |
5 | Text: Nulla ullamcorper mauris magna, non auctor eros molestie pulvinar. Morbi id enim vestibulum, tempor quam a, commodo magna. Cras eros odio, rhoncus ac auctor eget, sodales tempus mauris. Fusce finibus mauris sed velit dictum ullamcorper. Duis sed urna leo. In volutpat ipsum at ante sodales tincidunt. Maecenas facilisis velit non posuere tempus. Quisque risus libero, sagittis sit amet nulla sit amet, sollicitudin maximus tortor. Ut suscipit aliquam diam, nec mollis arcu bibendum a. Morbi eleifend bibendum fringilla.
6 |
7 | ----
8 |
9 | Date: Last Christmas
10 |
11 | ----
12 |
13 | Website: http://example.com/
14 |
15 | ----
16 |
17 | Client: People
18 |
19 | ----
20 |
21 | Role: Chief Advisor
--------------------------------------------------------------------------------
/.htaccess:
--------------------------------------------------------------------------------
1 | RewriteEngine on
2 |
3 | # Kirby
4 | RewriteRule (^|/)\.(?!well-known\/) index.php [L]
5 | RewriteRule ^content/(.*)\.(txt|md|mdown)$ index.php [L]
6 | RewriteRule ^site/(.*) index.php [L]
7 | SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
8 | RewriteRule ^kirby/(.*) index.php [L]
9 | RewriteCond %{REQUEST_FILENAME} !-f
10 | RewriteCond %{REQUEST_FILENAME} !-d
11 | RewriteRule ^(.*) index.php [L]
12 |
13 | # compress text file responses
14 |
15 | AddOutputFilterByType DEFLATE text/plain
16 | AddOutputFilterByType DEFLATE text/html
17 | AddOutputFilterByType DEFLATE text/css
18 | AddOutputFilterByType DEFLATE text/javascript
19 | AddOutputFilterByType DEFLATE application/json
20 | AddOutputFilterByType DEFLATE application/javascript
21 | AddOutputFilterByType DEFLATE application/x-javascript
22 |
23 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lemmon/kirby-portfolio",
3 | "type": "project",
4 | "description": "Free customizable portfolio theme for Kirby CMS.",
5 | "keywords": [
6 | "kirby",
7 | "cms",
8 | "template",
9 | "theme"
10 | ],
11 | "license": "MIT",
12 | "require": {
13 | "php": ">=8.0.2 <8.3.0",
14 | "getkirby/cms": "^3.9",
15 | "twig/twig": "^3.0"
16 | },
17 | "require-dev": {
18 | "symfony/var-dumper": "^6.3"
19 | },
20 | "config": {
21 | "optimize-autoloader": true,
22 | "allow-plugins": {
23 | "getkirby/composer-installer": true
24 | }
25 | },
26 | "scripts": {
27 | "start": [
28 | "Composer\\Config::disableProcessTimeout",
29 | "@php -S localhost:8000 kirby/router.php"
30 | ]
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/content/site.txt:
--------------------------------------------------------------------------------
1 | Title: Portfolio Theme
2 |
3 | ----
4 |
5 | Tagline: Free Customizable Kirby Template
6 |
7 | ----
8 |
9 | Description: Lemmon Portfolio is a free Kirby CMS theme. Minimalistic look with focus on your content. Customizable and responsive.
10 |
11 | ----
12 |
13 | Social:
14 |
15 | -
16 | name: GitHub
17 | code: f09b
18 | url: >
19 | https://github.com/lemmon/kirby-portfolio-theme
20 | -
21 | name: Twitter
22 | code: f099
23 | url: https://twitter.com/lemmon
24 |
25 | ----
26 |
27 | Footer: (c) (date: year) Built with (link: https://github.com/lemmon/kirby-portfolio-theme text: Portfolio Theme) by (link: https://twitter.com/lemmon text: Lemmon Juice)
28 |
29 | ----
30 |
31 | Htmllang: en
32 |
33 | ----
34 |
35 | Googleanalytics:
36 |
37 | ----
38 |
39 | Googletagmanager:
40 |
41 | ----
42 |
43 | Backgroundcolor:
44 |
45 | ----
46 |
47 | Textcolor:
48 |
49 | ----
50 |
51 | Linkcolor:
52 |
53 | ----
54 |
55 | Highlighttextcolor:
56 |
57 | ----
58 |
59 | Highlightbackgroundcolor:
60 |
61 | ----
62 |
63 | Highlightcolor:
--------------------------------------------------------------------------------
/site/plugins/bots/index.php:
--------------------------------------------------------------------------------
1 | [
5 | [
6 | 'pattern' => 'robots.txt',
7 | 'action' => function () {
8 | if (kirby()->request()->path()->toString() !== kirby()->path()) {
9 | die('404');
10 | }
11 | $res = [
12 | 'User-agent: *',
13 | 'Disallow: /panel/',
14 | 'Allow: /',
15 | 'Sitemap: ' . kirby()->url() . '/sitemap.txt',
16 | ];
17 | return new Response(join("\n", $res), 'text/plain');
18 | },
19 | ],
20 | [
21 | 'pattern' => 'sitemap.txt',
22 | 'action' => function () {
23 | $pages = [
24 | site()->url() . '/',
25 | ];
26 | foreach (site()->index()->listed()->not('home') as $page) {
27 | $pages[] = $page->url();
28 | }
29 | return new Response(join("\n", $pages), 'text/plain');
30 | },
31 | ],
32 | [
33 | 'pattern' => 'sitemap',
34 | 'action' => function () {
35 | return go('sitemap.txt', 301);
36 | },
37 | ],
38 | ],
39 | ]);
40 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2022 Jakub Pelák
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/site/plugins/color-field/Color.php:
--------------------------------------------------------------------------------
1 | _r = hexdec($m[1]);
21 | $this->_g = hexdec($m[2]);
22 | $this->_b = hexdec($m[3]);
23 | $this->_a = !empty($m[4]) ? (hexdec($m[4]) / 255) : null;
24 | }
25 |
26 | function __toString(): string
27 | {
28 | return $this->getValue();
29 | }
30 |
31 | function getValue(): string
32 | {
33 | return $this->_a
34 | ? sprintf('rgba(%d, %d, %d, %01.2F)', $this->_r, $this->_g, $this->_b, $this->_a)
35 | : sprintf('#%02s%02s%02s', dechex($this->_r), dechex($this->_g), dechex($this->_b))
36 | ;
37 | }
38 |
39 | function setAlpha(float $value): self
40 | {
41 | $this->_a = $value / 100;
42 | return $this;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/content/1_about/textpage.txt:
--------------------------------------------------------------------------------
1 | Title: About
2 |
3 | ----
4 |
5 | Text:
6 |
7 | This is an example site for the Lemmon Portfolio Theme. Built with (link: https://abrusco.com/ text: Abrusco CSS) on top of (link: https://getkirby.com/ text: Kirby CMS). This template is free, customizable, mobile-first, and responsive.
8 |
9 | ## Installation
10 |
11 | ### Composer
12 |
13 | ```
14 | composer create-project lemmon/kirby-portfolio
15 | ```
16 |
17 | ### Git
18 |
19 | ```
20 | git clone git@github.com:lemmon/kirby-portfolio-theme.git
21 | cd kirby-portfolio-theme
22 | composer install
23 | ```
24 |
25 | ### ZIP Archive
26 |
27 | Download the (link: https://github.com/lemmon/kirby-portfolio-theme/archive/master.zip text: zip archive) from (link: https://github.com/lemmon/kirby-portfolio-theme text: GitHub), extract it, and run `composer install` within the project root directory.
28 |
29 | ## Troubleshooting
30 |
31 | Sometimes you might be faced with folder permissions issue. Try running `bin/permissions` to resolve this.
32 |
33 | You can read more about the Kirby CMS in their official (link: https://getkirby.com/docs text: documentation).
34 |
35 | ## License
36 |
37 | This theme is released under the MIT license. For Kirby license see the (link: https://getkirby.com/license text: License) section on (link: https://getkirby.com/ text: Kirby CMS) official website.
--------------------------------------------------------------------------------
/src/css/index.css:
--------------------------------------------------------------------------------
1 | @import 'abrusco/base';
2 | @import 'abrusco/modules';
3 |
4 | @import './body';
5 | @import './copy';
6 |
7 | @import 'abrusco/utils';
8 | @import 'abrusco/debug';
9 |
10 | @import './color';
11 |
12 | /* Inter font-family */
13 |
14 | :root {
15 | --font-family: 'Inter', sans-serif;
16 | }
17 |
18 | @supports (font-variation-settings: normal) {
19 | :root {
20 | --font-family: 'Inter var', sans-serif;
21 | }
22 | }
23 |
24 | /* responsivity */
25 |
26 | @custom-media --view-sd (min-width: 40rem);
27 | @custom-media --view-md (min-width: 61rem);
28 | @custom-media --view-ld (min-width: 80rem);
29 | @custom-media --view-xl (min-width: 100rem);
30 |
31 | /* theme variables */
32 |
33 | :root {
34 |
35 | --theme-background-color: var(--white);
36 | --theme-text-color: var(--black);
37 | --theme-text-color-05: var(--black-05);
38 | --theme-link-color: inherit;
39 | --theme-highlight-text-color: inherit;
40 | --theme-highlight-background-color: var(--yellow);
41 |
42 | --default-background-color: var(--theme-background-color);
43 | --default-color: var(--theme-text-color);
44 | --link-color: var(--theme-link-color);
45 |
46 | --copy-space-primary: 1.5em;
47 | --copy-space-secondary: 0.5em;
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/site/blueprints/pages/project.yml:
--------------------------------------------------------------------------------
1 | title: Project
2 |
3 | columns:
4 |
5 | - width: 1/2
6 | sections:
7 |
8 | project:
9 | type: files
10 | template: project
11 | layout: cards
12 | size: tiny
13 | image:
14 | ratio: 1/1
15 | cover: true
16 |
17 | - width: 1/2
18 | sections:
19 |
20 | content:
21 | type: fields
22 | fields:
23 |
24 | text:
25 | extends: fields/text
26 |
27 | textPosition:
28 | label: Text Position
29 | type: select
30 | placeholder: aside
31 | options:
32 | - above
33 |
34 | files:
35 | extends: sections/files
36 | template: default
37 |
38 | metadata:
39 | type: fields
40 | fields:
41 |
42 | client:
43 | label: Client
44 | type: text
45 | icon: bookmark
46 |
47 | role:
48 | label: Role
49 | type: text
50 | icon: user
51 | help: e.g. "Assistant Chief Lighting Technician" or "Horse Wrangler"
52 |
53 | date:
54 | label: Date
55 | type: text
56 | icon: calendar
57 | help: e.g. "Feb 14, 2020" or "Summer 1979"
58 |
59 | website:
60 | label: Website
61 | type: url
62 | icon: url
63 |
--------------------------------------------------------------------------------
/site/plugins/image/index.php:
--------------------------------------------------------------------------------
1 | [
5 | 'image' => [
6 | 'attr' => [
7 | 'alt',
8 | 'title',
9 | 'caption',
10 | ],
11 | 'html' => function ($tag) {
12 | // find file
13 | $file = $tag->file($tag->value);
14 | if (!$file) return;
15 | // params
16 | $alt = $tag->alt ?? $file->alt()->value();
17 | $title = $tag->title ?? $file->title()->value();
18 | $caption = $tag->caption ?? $file->caption()->value();
19 | // responsivity
20 | if (!in_array($file->mime(), ['image/gif', 'image/svg+xml'])) {
21 | if (!empty($tag->data['srcset'])) {
22 | $srcset = $file->srcset($tag->data['srcset']);
23 | }
24 | if (!empty($tag->data['width'])) {
25 | $file = $file->resize($tag->data['width']);
26 | }
27 | }
28 | // html
29 | return Html::figure([
30 | Html::img($file->url(), [
31 | 'width' => $file->width(),
32 | 'height' => $file->height(),
33 | 'alt' => $alt ?: ' ',
34 | 'title' => $title,
35 | 'srcset' => $srcset ?? null,
36 | ]),
37 | ], $caption ? [
38 | kirbytext($caption),
39 | ] : null, [
40 | 'class' => 'image',
41 | ]);
42 | },
43 | ],
44 | ],
45 | ]);
46 |
--------------------------------------------------------------------------------
/src/css/debug.css:
--------------------------------------------------------------------------------
1 | @media (--view-sd) {
2 |
3 | .body {
4 | background-image: url('data:image/svg+xml;utf8, \
5 | \
6 | \
7 | \
8 | \
9 | ');
10 | background-position: top center;
11 | background-repeat: repeat-y;
12 | }
13 |
14 | }
15 |
16 | @media (--view-md) {
17 |
18 | .body {
19 | background-image: url('data:image/svg+xml;utf8, \
20 | \
21 | \
22 | \
23 | \
24 | \
25 | ');
26 | background-position: top center;
27 | background-repeat: repeat-y;
28 | }
29 |
30 | }
31 |
32 | @media (--view-ld) {
33 |
34 | .body {
35 | background-image: url('data:image/svg+xml;utf8, \
36 | \
37 | \
38 | \
39 | \
40 | \
41 | \
42 | ');
43 | background-position: top center;
44 | background-repeat: repeat-y;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/site/templates/pages/homepage.twig:
--------------------------------------------------------------------------------
1 | {% extends layout() %}
2 |
3 | {% block title %}
4 | {% if site.tagline.notEmpty %}{{ site.title }} – {{ site.tagline }}{% else %}{{ parent() }}{% endif %}
5 | {% endblock %}
6 |
7 | {% block meta_description parent() ?: site.description | excerpt(160) %}
8 |
9 | {% block main %}
10 |
11 |
42 |
43 | {% endblock %}
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Kirby Portfolio Theme
2 |
3 | 
4 |
5 | Lemmon Portfolio is a free Kirby CMS theme. Minimalistic look with focus on your content.
6 | Built with [Abrusco CSS](https://abrusco.com/) on top of [Kirby CMS](https://getkirby.com/).
7 | This template is free, customizable, mobile-first, and responsive.
8 |
9 | [View Demo](https://themes.lemmonjuice.com/portfolio/).
10 |
11 | ## Installation
12 |
13 | ### Composer
14 |
15 | ```
16 | composer create-project lemmon/kirby-portfolio
17 | ```
18 |
19 | ### Git
20 |
21 | ```
22 | git clone git@github.com:lemmon/kirby-portfolio-theme.git
23 | cd kirby-portfolio-theme
24 | composer install
25 | ```
26 |
27 | ### ZIP Archive
28 |
29 | Download the [zip archive](https://github.com/lemmon/kirby-portfolio-theme/archive/master.zip),
30 | extract it, and run `composer install` within the project root directory.
31 |
32 | ### Pre-built release
33 |
34 | You can download latest pre-built release in the [Releases](https://github.com/lemmon/kirby-portfolio-theme/releases) section.
35 |
36 | - download the zip file
37 | - extract it
38 | - upload the contents to your web server
39 |
40 | ## Troubleshooting
41 |
42 | Sometimes you might face a folder permissions issue. Try running `bin/permissions` to resolve this.
43 |
44 | You can read more about the Kirby CMS in their official [documentation](https://getkirby.com/docs).
45 |
46 | ## License
47 |
48 | This theme is released under the MIT license. For Kirby license see the [License](https://getkirby.com/license) section
49 | on [Kirby CMS](https://getkirby.com/) official website.
50 |
51 | ## More Themes
52 |
53 | - [Tablog](https://demo1.tablo.me/) — Minimalistic Blog Theme
54 | - [Tablook](https://demo2.tablo.me/) — Minimalist Portfolio Theme for Artists and Visual Creators
55 |
56 |
--------------------------------------------------------------------------------
/content/2_forrest-text-page/textpage.txt:
--------------------------------------------------------------------------------
1 | Title: Forrest Text Page
2 |
3 | ----
4 |
5 | Text:
6 |
7 | Proin mattis ut erat quis viverra. Vestibulum sed vestibulum ante. Morbi iaculis risus non urna commodo facilisis. Aenean tempus sapien vitae viverra mattis. Integer ligula tellus, porta at augue et, aliquet placerat turpis. Pellentesque magna erat, rutrum et efficitur a, facilisis sagittis justo. Nulla id condimentum dui. Sed vitae nunc ante. Duis fermentum condimentum enim, quis posuere enim bibendum a. Phasellus sodales nisl nisl, at ultrices lacus sagittis ut. Vestibulum id est aliquam, ultrices nunc in, vestibulum ipsum. Vivamus placerat nisl in convallis rutrum. Praesent vulputate urna vel dignissim tincidunt.
8 |
9 | (image: blake-cheek-cpwyhs2ww24-unsplash.jpg caption: credit: https://unsplash.com/photos/CPwYhs2ww24 alt: Forrest Inline Alt Text)
10 |
11 | ## Pellentesque Venenatis Lectus
12 |
13 | Pellentesque diam nulla, tincidunt ut facilisis sit amet, aliquam a elit. Sed sed magna mi. Mauris volutpat finibus felis eu eleifend. In aliquet eros volutpat velit volutpat, **non molestie eros aliquam**. Quisque fringilla imperdiet augue in sagittis. Quisque a efficitur ipsum, quis hendrerit tellus. Integer cursus urna a mi consectetur, eget convallis leo dapibus. Ut eget dictum sem. Donec sed mauris molestie, sagittis est sit amet, pharetra urna. Pellentesque ac venenatis lectus.
14 |
15 | (image: ju-on-e6xsi7qqvaa-unsplash.jpg caption: credit: https://unsplash.com/photos/e6XsI7qqvAA)
16 |
17 | Cras fringilla nunc a lacus maximus volutpat. Fusce egestas magna in pulvinar mattis. Etiam nisl nisl, ornare quis diam id, auctor sagittis odio. Nam aliquet augue orci, at scelerisque sem suscipit et. Morbi euismod a erat a fringilla. In viverra arcu lectus, non fringilla turpis faucibus a. Nullam id vehicula magna, at ullamcorper ligula. Maecenas auctor dui eget augue bibendum, quis finibus diam pretium. *Sed placerat nisi eget velit maximus, hendrerit iaculis odio volutpat.*
--------------------------------------------------------------------------------
/content/10_example-content/textpage.txt:
--------------------------------------------------------------------------------
1 | Title: Example Content
2 |
3 | ----
4 |
5 | Text:
6 |
7 | Cras fringilla nunc a lacus maximus volutpat. Fusce egestas magna in pulvinar mattis. Etiam nisl nisl, ornare quis diam id, **auctor sagittis odio**. Nam aliquet augue orci, at scelerisque sem suscipit et. Morbi euismod a erat a fringilla. In viverra arcu lectus, non fringilla turpis faucibus a. Nullam id vehicula magna, at ullamcorper ligula. *Maecenas auctor dui eget augue bibendum, quis finibus diam pretium.* Sed placerat nisi eget velit maximus, hendrerit (link: https://www.lemmonjuice.com/ text: iaculis odio volutpat).
8 |
9 | ## Ordered List
10 |
11 | 1. Nam sit amet nulla eget nunc pulvinar
12 | 2. Donec lobortis tellus dictum
13 | 3. Donec mollis risus vel risus congue, sed mollis eros rhoncus; id vehicula magna, at ullamcorper ligula, maecenas auctor dui eget augue bibendum
14 | 4. Aenean tincidunt libero eu justo aliquam rhoncus
15 |
16 | ## Unordered List
17 |
18 | - Quisque eu metus at orci tempus gravida in sed
19 | - In condimentum magna et lorem pharetra, non eleifend velit
20 | - Integer elementum magna eget urna volutpat
21 | - Duis vel nunc non arcu placerat
22 |
23 | ## Blockquote
24 |
25 | > Mauris molestie purus egestas elit fermentum porta. Sed et placerat ligula, vel molestie nulla. Phasellus nisl nulla, pulvinar quis finibus eget, sollicitudin eu neque. Integer tempus nibh sit amet mi tincidunt rutrum. Donec luctus quam neque, vel rutrum leo posuere ac. Cras semper in elit pharetra tincidunt. Nunc non metus ac risus porta vestibulum.
26 |
27 | ## Code
28 |
29 | Maecenas efficitur in turpis eu tincidunt. Sed lacinia tincidunt orci sit amet varius. Pellentesque non condimentum leo. Integer `` cursus et elit non volutpat. Proin a ipsum ornare, rutrum sapien a, mollis felis.
30 |
31 | ```
32 |
33 |
34 |
35 |
36 |
37 |
38 | Hello World!
39 |
40 |
41 | ```
42 |
43 | ## YouTube Video
44 |
45 | (video: https://www.youtube.com/watch?v=sOpMrVnjYeY)
46 |
47 | ## Vimeo Video
48 |
49 | (video: https://vimeo.com/32001208)
--------------------------------------------------------------------------------
/site/plugins/twig/index.php:
--------------------------------------------------------------------------------
1 | __DIR__ . '/../../cache/twig',
8 | 'debug' => option('debug'),
9 | ]);
10 | $twig->addFunction(new Twig\TwigFunction('layout', function ($name = 'default') {
11 | return "layouts/{$name}.twig";
12 | }));
13 | $twig->addFunction(new Twig\TwigFunction('partial', function ($name) {
14 | return "partials/{$name}.twig";
15 | }));
16 | $twig->addFunction(new Twig\TwigFunction('template', function ($name) {
17 | return "pages/{$name}.twig";
18 | }));
19 | $twig->addFunction(new Twig\TwigFunction('dump', function (...$args) {
20 | return Symfony\Component\VarDumper\VarDumper::dump(...$args);
21 | }));
22 | $twig->addFunction(new Twig\TwigFunction('site', 'site'));
23 | $twig->addFunction(new Twig\TwigFunction('page', 'page'));
24 | $twig->addFunction(new Twig\TwigFunction('pages', 'pages'));
25 | $twig->addFilter(new Twig\TwigFilter('kt', 'kirbytext', ['is_safe' => ['html']]));
26 | $twig->addFilter(new Twig\TwigFilter('kti', 'kirbytextinline', ['is_safe' => ['html']]));
27 | $twig->addFilter(new Twig\TwigFilter('excerpt', function ($text, $len = null) {
28 | $text = strval($text);
29 | $text = preg_split('/\n\h*\n/', $text);
30 | $text = array_filter($text, function ($p) {
31 | return $p and !preg_match('/^(\d+\.|[\-\+\*]\s|[#!\>])/', $p);
32 | });
33 | if (!$text) return null;
34 | $text = reset($text);
35 | $text = kirbytextinline($text);
36 | $text = strip_tags($text);
37 | $text = html_entity_decode($text);
38 | $text = preg_replace('/\n+/', ' ', $text);
39 | if ($len and mb_strlen($text) > $len) {
40 | $text = mb_substr($text, 0, $len);
41 | $text = preg_replace('/\W+$/u', '', $text);
42 | $append = '…';
43 | }
44 | return $text ? htmlspecialchars($text, ENT_COMPAT | ENT_HTML5) . ($append ?? '') : null;
45 | }, ['is_safe' => ['html']]));
46 | $twig->addGlobal('kirby', kirby());
47 | $twig->addGlobal('site', site());
48 | $twig->addGlobal('page', page());
49 | $twig->addGlobal('pages', pages());
50 | /* drop hook for Kirby 3.4.0 compatibility */
51 | /*kirby()->trigger('twig', $twig);*/
52 | $twig->display("pages/{$template}.twig", $data ?? []);
53 | }
54 |
--------------------------------------------------------------------------------
/site/templates/pages/project.twig:
--------------------------------------------------------------------------------
1 | {% extends layout() %}
2 |
3 | {% block main %}
4 | {% with {
5 | tp: page.textPosition.value,
6 | } %}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
{{ page.title }}
15 |
16 |
17 | {%~ if page.text.notEmpty
18 | or page.client.notEmpty
19 | or page.role.notEmpty
20 | or page.date.notEmpty
21 | or page.website.notEmpty %}
22 |
23 | {%~ if page.text.notEmpty %}
24 |
25 |
26 | {{ page.text | kt({ width: 640, srcset: [ 320, 640, 960, 1280 ] }) }}
27 |
28 |
29 | {%~ endif %}
30 | {%~ if page.client.notEmpty
31 | or page.role.notEmpty
32 | or page.date.notEmpty
33 | or page.website.notEmpty %}
34 |
35 |
36 |
37 | {%~ if page.client.notEmpty %}
38 | Client
39 | {{ page.client }}
40 | {%~ endif %}
41 | {%~ if page.role.notEmpty %}
42 | Role
43 | {{ page.role }}
44 | {%~ endif %}
45 | {%~ if page.date.notEmpty %}
46 | Date
47 | {{ page.date }}
48 | {%~ endif %}
49 | {%~ if page.website.notEmpty %}
50 | Website
51 | {{ page.website }}
52 | {%~ endif %}
53 |
54 |
55 |
56 | {%~ endif %}
57 |
58 | {%~ endif %}
59 |
60 |
61 |
62 |
63 | {%~ with { images: page.images.filterBy('template', 'project').sortBy('sort') } %}
64 | {%~ if images.count %}
65 |
66 | {%~ for _image in images %}
67 |
68 | {{
69 | "(image: %s caption: %s)"
70 | | format(_image.filename, _image.caption)
71 | | kt({ width: 640, srcset: [ 320, 640, 960, 1280 ] })
72 | }}
73 |
74 | {%~ endfor %}
75 |
76 | {%~ endif %}
77 | {%~ endwith %}
78 |
79 |
80 | {% endwith %}
81 | {% endblock %}
82 |
--------------------------------------------------------------------------------
/src/css/copy.css:
--------------------------------------------------------------------------------
1 | .copy {
2 | line-height: 1.5;
3 | & > * {
4 | max-width: 36rem;
5 | }
6 | & h1 {
7 | font-size: var(--h2);
8 | line-height: var(--lh2);
9 | }
10 | & h2 {
11 | font-size: var(--h3);
12 | line-height: var(--lh2);
13 | }
14 | & h3 {
15 | font-size: var(--h4);
16 | line-height: var(--lh2);
17 | }
18 | & h4 {
19 | font-size: var(--h5);
20 | line-height: var(--lh2);
21 | }
22 | & h1,
23 | & h2,
24 | & h3,
25 | & h4,
26 | & h5,
27 | & h6 {
28 | font-weight: 700;
29 | }
30 | & figcaption {
31 | font-style: italic;
32 | margin-top: .5em;
33 | }
34 | & a {
35 | color: var(--link-color);
36 | text-decoration: underline;
37 | }
38 | & img {
39 | display: block;
40 | height: auto;
41 | max-width: 100%;
42 | margin-left: auto;
43 | margin-right: auto;
44 | }
45 | & strong {
46 | font-weight: bold;
47 | }
48 | & em {
49 | font-style: italic;
50 | }
51 | & ol,
52 | & ul {
53 | padding-left: 2em;
54 | & li::before {
55 | display: inline-block;
56 | width: 2em;
57 | padding-right: .5em;
58 | margin-left: -2em;
59 | text-align: right;
60 | opacity: .3;
61 | }
62 | }
63 | & ol {
64 | counter-reset: ol;
65 | & li::before {
66 | counter-increment: ol;
67 | content: counter(ol, upper-roman);
68 | }
69 | }
70 | & ul {
71 | & li::before {
72 | content: "\2013";
73 | }
74 | }
75 | & blockquote {
76 | padding-left: 2em;
77 | position: relative;
78 | &::before {
79 | content: "";
80 | display: block;
81 | position: absolute;
82 | left: 1.25em;
83 | top: .25em;
84 | bottom: .25em;
85 | margin-left: -1px;
86 | width: 2px;
87 | background-color: currentColor;
88 | opacity: .1;
89 | }
90 | }
91 | & pre,
92 | & code {
93 | font-family: Courier, monospace;
94 | font-size: 14px;
95 | line-height: 20px;
96 | }
97 | & code {
98 | padding: 2px;
99 | background-color: var(--theme-text-color-05);
100 | }
101 | & pre {
102 | white-space: pre-wrap;
103 | background-color: var(--theme-text-color-05);
104 | & code {
105 | display: block;
106 | padding: 16px 18px;
107 | background-color: transparent;
108 | }
109 | }
110 | & p code {
111 | position: relative;
112 | top: -2px;
113 | }
114 | & dt {
115 | opacity: .6;
116 | }
117 | & dd + dt {
118 | margin-top: .5em;
119 | }
120 | }
121 |
122 | @media (--view-ld) {
123 | .copy--wide {
124 | & figure.image {
125 | max-width: none;
126 | display: flex;
127 | flex-direction: row;
128 | align-items: flex-start;
129 | & img {
130 | width: 36rem;
131 | }
132 | & figcaption {
133 | width: 19rem;
134 | margin: 0;
135 | padding-left: 2rem;
136 | position: sticky;
137 | top: 2rem;
138 | }
139 | }
140 | }
141 | }
142 |
143 | .video {
144 | position: relative;
145 | width: 100%;
146 | &::before {
147 | content: "";
148 | display: block;
149 | padding-top: calc(100% * 720 / 1280);
150 | }
151 | & iframe {
152 | display: block;
153 | position: absolute;
154 | left: 0;
155 | right: 0;
156 | top: 0;
157 | bottom: 0;
158 | width: 100%;
159 | height: 100%;
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/site/blueprints/site.yml:
--------------------------------------------------------------------------------
1 | title: Site
2 |
3 | tabs:
4 |
5 | content:
6 | label: Content
7 | icon: text
8 | sections:
9 |
10 | pages:
11 | headline: Pages
12 | type: pages
13 | create:
14 | - project
15 | - textpage
16 | image:
17 | query: page.images.filterBy('template', 'project').sortBy('sort').first
18 | conver: true
19 | info: "{{ page.intendedTemplate }}"
20 |
21 | settings:
22 | label: Settings
23 | icon: cog
24 | columns:
25 |
26 | - width: 2/3
27 | sections:
28 |
29 | fields:
30 | type: fields
31 | fields:
32 |
33 | tagline:
34 | label: Tagline
35 | type: text
36 | help: >
37 | Tagline will be displayed in title tag next to your site name.
38 | (e.g. {{ site.title }} - Your Custom Tagline)
39 |
40 | description:
41 | label: Description
42 | type: textarea
43 |
44 | social:
45 | label: Social
46 | type: structure
47 | fields:
48 | name:
49 | label: Name
50 | type: text
51 | code:
52 | label: Code
53 | type: text
54 | help: Font Awesome Unicode code.
55 | url:
56 | label: Url
57 | type: url
58 |
59 | footer:
60 | label: Footer
61 | type: textarea
62 | buttons: false
63 | help: >
64 | This theme is completely free for both personal and commercial use,
65 | however any kind of attribution is appreciated.
66 |
67 | - width: 1/3
68 | fields:
69 |
70 | htmlLang:
71 | label: Document Language
72 | type: text
73 | help: <html lang="{{site.htmlLang}}">
74 |
75 | googleAnalytics:
76 | label: Google Analytics
77 | type: text
78 | placeholder: UA-XXXXX-Y
79 | width: 1/2
80 |
81 | googleTagManager:
82 | label: Google Tag Manager
83 | type: text
84 | placeholder: GTM-XXXX
85 | width: 1/2
86 |
87 |
88 | visual:
89 | label: Visual
90 | icon: settings
91 | columns:
92 |
93 | - width: 1/3
94 | sections:
95 |
96 | logo:
97 | type: files
98 | template: logo
99 | empty: No logo yet
100 | max: 1
101 | sortable: false
102 | layout: cards
103 | size: huge
104 | info: "{{ file.width }} x {{ file.height }}"
105 | image:
106 | ratio: 1/1
107 | cover: false
108 | back: white
109 |
110 | favicon:
111 | type: files
112 | template: favicon
113 | empty: No favicon uploaded
114 | max: 1
115 | sortable: false
116 | size: tiny
117 | info: "{{ file.width }} x {{ file.height }} ({{ file.mime }})"
118 | image:
119 | ratio: 1/1
120 | cover: false
121 |
122 | - width: 1/3
123 | fields:
124 |
125 | backgroundColor:
126 | label: Background Color
127 | type: text
128 | placeholder: '#FFFFFF'
129 |
130 | textColor:
131 | label: Text Color
132 | type: text
133 | placeholder: '#040404'
134 |
135 | linkColor:
136 | label: Link Color
137 | type: text
138 |
139 | highlightTextColor:
140 | label: Highlight Text Color
141 | type: text
142 |
143 | highlightBackgroundColor:
144 | label: Highlight Background Color
145 | type: text
146 | placeholder: '#FFDC00'
147 |
--------------------------------------------------------------------------------
/site/templates/layouts/default.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {% block title %}{{ page.title }} – {{ site.title }}{% endblock %}
6 |
7 | {%~ block meta %}
8 |
9 | {%~ endblock %}
10 |
11 |
12 |
13 |
33 | {%~ if site.googleAnalytics.notEmpty %}
34 |
35 |
43 |
44 | {%~ endif %}
45 | {%~ if site.googleTagManager.notEmpty %}
46 |
47 |
52 |
53 | {%~ endif %}
54 |
55 |
56 |
57 | {%~ if site.googleTagManager.notEmpty %}
58 |
59 |
61 |
62 | {%~ endif %}
63 |
64 |
112 |
113 |
114 | {%~ block main none %}
115 |
116 |
117 | {%~ if site.footer.notEmpty %}
118 |
123 | {%~ endif %}
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/static/master.css:
--------------------------------------------------------------------------------
1 | a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,main,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font-size:100%;font:inherit;margin:0;padding:0;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}[hidden]{display:none}body{line-height:1}menu,ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}:root{--default-font-size:16px;--default-font-family:var(--sansserif-font-family);--default-background-color:var(--white,#fff);--default-color:var(--black,#000);--default-border-width:1px;--default-border-color:currentColor;--default-bold-fw:bold;--font-size:var(--default-font-size);--font-family:var(--default-font-family);--background-color:var(--default-background-color);--color:var(--default-color);--border-width:var(--default-border-width);--border-color:var(--default-border-color);--bold-fw:var(--default-bold-fw);--serif-font-family:Georgia,"Times New Roman",serif;--sansserif-font-family:system-ui;--code-font-family:Courier,monospace;--h1:2.5rem;--h2:2.0rem;--h3:1.5rem;--h4:1.25rem;--h5:1.125rem;--h6:1.0625rem;--d1:3.0rem;--d2:3.5rem;--d3:4.0rem;--d4:5.0rem;--d5:6.0rem;--f0:1rem;--f1:.9375rem;--f2:.875rem;--f3:.8125rem;--f4:.75rem;--lh0:1;--lh1:1.125;--lh2:1.250;--lh3:1.375;--lh4:1.5;--lh5:2;--br1:.125rem;--br2:.25rem;--br3:.5rem;--br4:.75rem;--br5:1rem;--black:#040404;--white:#fff;--black-95:rgba(4,4,4,.95);--black-90:rgba(4,4,4,.9);--black-80:rgba(4,4,4,.8);--black-70:rgba(4,4,4,.7);--black-60:rgba(4,4,4,.6);--black-50:rgba(4,4,4,.5);--black-40:rgba(4,4,4,.4);--black-30:rgba(4,4,4,.3);--black-20:rgba(4,4,4,.2);--black-10:rgba(4,4,4,.1);--black-05:rgba(4,4,4,.05);--black-025:rgba(4,4,4,.025);--black-0125:rgba(4,4,4,.013);--white-95:hsla(0,0%,100%,.95);--white-90:hsla(0,0%,100%,.9);--white-80:hsla(0,0%,100%,.8);--white-70:hsla(0,0%,100%,.7);--white-60:hsla(0,0%,100%,.6);--white-50:hsla(0,0%,100%,.5);--white-40:hsla(0,0%,100%,.4);--white-30:hsla(0,0%,100%,.3);--white-20:hsla(0,0%,100%,.2);--white-10:hsla(0,0%,100%,.1);--white-05:hsla(0,0%,100%,.05);--white-025:hsla(0,0%,100%,.025);--white-0125:hsla(0,0%,100%,.013);--aqua:#7fdbff;--blue:#0074d9;--navy:#001f3f;--teal:#39cccc;--green:#2ecc40;--olive:#3d9970;--lime:#01ff70;--yellow:#ffdc00;--orange:#ff851b;--red:#ff4136;--fuchsia:#f012be;--purple:#b10dc9;--maroon:#85144b}html{background-color:var(--background-color);box-sizing:border-box;color:var(--color);font-family:var(--font-family);font-size:var(--font-size)}*,:after,:before{box-sizing:inherit}a{background-color:transparent;color:inherit;outline:0;text-decoration:none}hr{border:0;margin:0}.copy>:first-child{margin-top:0}.copy>:last-child{margin-bottom:0}.copy>:not(h1,h2,h3,h4,h5,h6,p){margin-bottom:var(--copy-space-primary)}.copy>:not(h1,h2,h3,h4,h5,h6,p),.copy>h1,.copy>h2,.copy>h3,.copy>h4,.copy>h5,.copy>h6{margin-top:var(--copy-space-primary)}.copy>p{margin-bottom:var(--copy-space-primary);margin-top:var(--copy-space-secondary)}:root{--copy-space-secondary:.5em}.div{color:var(--border-color)}.div:before{background-color:currentColor;content:"";display:block;height:100%;min-height:var(--border-width);min-width:var(--border-width);width:100%}.body{margin-left:auto;margin-right:auto;max-width:28rem;padding-bottom:1.5rem;padding-top:1.5rem}@media (min-width:40rem){.body{max-width:39rem}}@media (min-width:61rem){.body{display:grid;grid-template-columns:19rem auto;grid-template-rows:repeat(3,min-content);max-width:58rem}.main{grid-column-start:2;grid-row-end:span 3;grid-row-start:1}}@media (min-width:80rem){.body{max-width:77rem}}.copy{line-height:1.5}.copy>*{max-width:36rem}.copy h1{font-size:var(--h2)}.copy h1,.copy h2{line-height:var(--lh2)}.copy h2{font-size:var(--h3)}.copy h3{font-size:var(--h4)}.copy h3,.copy h4{line-height:var(--lh2)}.copy h4{font-size:var(--h5)}.copy h1,.copy h2,.copy h3,.copy h4,.copy h5,.copy h6{font-weight:700}.copy figcaption{font-style:italic;margin-top:.5em}.copy a{color:var(--link-color);text-decoration:underline}.copy img{display:block;height:auto;margin-left:auto;margin-right:auto;max-width:100%}.copy strong{font-weight:700}.copy em{font-style:italic}.copy ol,.copy ul{padding-left:2em}.copy ol li:before,.copy ul li:before{display:inline-block;margin-left:-2em;opacity:.3;padding-right:.5em;text-align:right;width:2em}.copy ol{counter-reset:ol}.copy ol li:before{content:counter(ol,upper-roman);counter-increment:ol}.copy ul li:before{content:"\2013"}.copy blockquote{padding-left:2em;position:relative}.copy blockquote:before{background-color:currentColor;bottom:.25em;content:"";display:block;left:1.25em;margin-left:-1px;opacity:.1;position:absolute;top:.25em;width:2px}.copy code,.copy pre{font-family:Courier,monospace;font-size:14px;line-height:20px}.copy code{padding:2px}.copy code,.copy pre{background-color:var(--theme-text-color-05)}.copy pre{white-space:pre-wrap}.copy pre code{background-color:transparent;display:block;padding:16px 18px}.copy p code{position:relative;top:-2px}.copy dt{opacity:.6}.copy dd+dt{margin-top:.5em}@media (min-width:80rem){.copy--wide figure.image{align-items:flex-start;display:flex;flex-direction:row;max-width:none}.copy--wide figure.image img{width:36rem}.copy--wide figure.image figcaption{margin:0;padding-left:2rem;position:sticky;top:2rem;width:19rem}}.video{position:relative;width:100%}.video:before{content:"";display:block;padding-top:56.25%}.video iframe{bottom:0;display:block;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.al{text-align:left}.ar{text-align:right}.ac{text-align:center}.uc{text-transform:uppercase}.lc{text-transform:lowercase}.cc{text-transform:capitalize}.nc{text-transform:none}.h1{font-size:var(--h1)}.h2{font-size:var(--h2)}.h3{font-size:var(--h3)}.h4{font-size:var(--h4)}.h5{font-size:var(--h5)}.h6{font-size:var(--h6)}.d1{font-size:var(--d1)}.d2{font-size:var(--d2)}.d3{font-size:var(--d3)}.d4{font-size:var(--d4)}.d5{font-size:var(--d5)}.f0{font-size:var(--f0)}.f1{font-size:var(--f1)}.f2{font-size:var(--f2)}.f3{font-size:var(--f3)}.f4{font-size:var(--f4)}.lh0{line-height:var(--lh0)}.lh1{line-height:var(--lh1)}.lh2{line-height:var(--lh2)}.lh3{line-height:var(--lh3)}.lh4{line-height:var(--lh4)}.lh5{line-height:var(--lh5)}.bold{font-weight:var(--bold-fw)}.fw100{font-weight:100}.fw200{font-weight:200}.fw300{font-weight:300}.fw400{font-weight:400}.fw500{font-weight:500}.fw600{font-weight:600}.fw700{font-weight:700}.fw800{font-weight:800}.fw900{font-weight:900}.fw1000{font-weight:1000}.italic{font-style:italic}.anchor:hover .ul\:hover,.ul,.ul\:hover:hover{text-decoration:underline}.ol{text-decoration:overline}.lt{text-decoration:line-through}.va-inherit{vertical-align:inherit}.va-baseline{vertical-align:baseline}.va-sub{vertical-align:sub}.va-super{vertical-align:super}.va-middle{vertical-align:middle}.va-top{vertical-align:top}.va-bottom{vertical-align:bottom}.nowrap{white-space:nowrap}.pre{white-space:pre}.pre-wrap{white-space:pre-wrap}.pre-line{white-space:pre-line}.break-spaces{white-space:break-spaces}.break-word{overflow-wrap:break-word}.serif{font-family:var(--serif-font-family)}.sansserif{font-family:var(--sansserif-font-family)}.code{font-family:var(--code-font-family)}@media (max-width:24rem){.xs\:al{text-align:left}.xs\:ar{text-align:right}.xs\:ac{text-align:center}}@media (min-width:40rem){.sd\:al{text-align:left}.sd\:ar{text-align:right}.sd\:ac{text-align:center}.sd\:h1{font-size:var(--h1)}.sd\:h2{font-size:var(--h2)}.sd\:h3{font-size:var(--h3)}.sd\:h4{font-size:var(--h4)}.sd\:h5{font-size:var(--h5)}.sd\:h6{font-size:var(--h6)}.sd\:d1{font-size:var(--d1)}.sd\:d2{font-size:var(--d2)}.sd\:d3{font-size:var(--d3)}.sd\:d4{font-size:var(--d4)}.sd\:d5{font-size:var(--d5)}.sd\:f0{font-size:var(--f0)}.sd\:f1{font-size:var(--f1)}.sd\:f2{font-size:var(--f2)}.sd\:f3{font-size:var(--f3)}.sd\:f4{font-size:var(--f4)}.sd\:lh0{line-height:var(--lh0)}.sd\:lh1{line-height:var(--lh1)}.sd\:lh2{line-height:var(--lh2)}.sd\:lh3{line-height:var(--lh3)}.sd\:lh4{line-height:var(--lh4)}.sd\:lh5{line-height:var(--lh5)}}@media (min-width:61rem){.md\:al{text-align:left}.md\:ar{text-align:right}.md\:ac{text-align:center}.md\:h1{font-size:var(--h1)}.md\:h2{font-size:var(--h2)}.md\:h3{font-size:var(--h3)}.md\:h4{font-size:var(--h4)}.md\:h5{font-size:var(--h5)}.md\:h6{font-size:var(--h6)}.md\:d1{font-size:var(--d1)}.md\:d2{font-size:var(--d2)}.md\:d3{font-size:var(--d3)}.md\:d4{font-size:var(--d4)}.md\:d5{font-size:var(--d5)}.md\:f0{font-size:var(--f0)}.md\:f1{font-size:var(--f1)}.md\:f2{font-size:var(--f2)}.md\:f3{font-size:var(--f3)}.md\:f4{font-size:var(--f4)}.md\:lh0{line-height:var(--lh0)}.md\:lh1{line-height:var(--lh1)}.md\:lh2{line-height:var(--lh2)}.md\:lh3{line-height:var(--lh3)}.md\:lh4{line-height:var(--lh4)}.md\:lh5{line-height:var(--lh5)}}@media (min-width:80rem){.ld\:al{text-align:left}.ld\:ar{text-align:right}.ld\:ac{text-align:center}.ld\:h1{font-size:var(--h1)}.ld\:h2{font-size:var(--h2)}.ld\:h3{font-size:var(--h3)}.ld\:h4{font-size:var(--h4)}.ld\:h5{font-size:var(--h5)}.ld\:h6{font-size:var(--h6)}.ld\:d1{font-size:var(--d1)}.ld\:d2{font-size:var(--d2)}.ld\:d3{font-size:var(--d3)}.ld\:d4{font-size:var(--d4)}.ld\:d5{font-size:var(--d5)}.ld\:f0{font-size:var(--f0)}.ld\:f1{font-size:var(--f1)}.ld\:f2{font-size:var(--f2)}.ld\:f3{font-size:var(--f3)}.ld\:f4{font-size:var(--f4)}.ld\:lh0{line-height:var(--lh0)}.ld\:lh1{line-height:var(--lh1)}.ld\:lh2{line-height:var(--lh2)}.ld\:lh3{line-height:var(--lh3)}.ld\:lh4{line-height:var(--lh4)}.ld\:lh5{line-height:var(--lh5)}}.block{display:block}.inline{display:inline}.inlineblock{display:inline-block}.visible{visibility:visible}.hidden{visibility:hidden}.o100{opacity:1}.o95{opacity:.95}.o90{opacity:.9}.o80{opacity:.8}.o70{opacity:.7}.o60{opacity:.6}.o50{opacity:.5}.o40{opacity:.4}.o30{opacity:.3}.o20{opacity:.2}.o10{opacity:.1}.o05{opacity:.05}.o0{opacity:0}.absolute{position:absolute}.relative{position:relative}.fixed{position:fixed}.sticky{position:sticky}.left{left:0}.right{right:0}.top{top:0}.bottom{bottom:0}.z0{z-index:0}.z1{z-index:1}.z2{z-index:2}.z3{z-index:3}.z9{z-index:9}.z99{z-index:99}.z999{z-index:999}.z9999{z-index:9999}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-fill{object-fit:fill}.object-scaledown{object-fit:scale-down}.show{display:block}.hide{display:none}.min8{min-width:8rem}.min10{min-width:10rem}.min12{min-width:12rem}.min14{min-width:14rem}.min16{min-width:16rem}.min18{min-width:18rem}.min20{min-width:20rem}.min24{min-width:24rem}.max{max-width:none}.max4{max-width:4rem}.max6{max-width:6rem}.max8{max-width:8rem}.max10{max-width:10rem}.max12{max-width:12rem}.max15{max-width:15rem}.max16{max-width:16rem}.max20{max-width:20rem}.max22{max-width:22rem}.max24{max-width:24rem}.max26{max-width:26rem}.max28{max-width:28rem}.max30{max-width:30rem}.max32{max-width:32rem}.max34{max-width:34rem}.max35{max-width:35rem}.max36{max-width:36rem}.max38{max-width:38rem}.max40{max-width:40rem}.max42{max-width:42rem}.max44{max-width:44rem}.max45{max-width:45rem}.max47{max-width:47rem}.max48{max-width:48rem}.max49{max-width:49rem}.max50{max-width:50rem}.max51{max-width:51rem}.max52{max-width:52rem}.max54{max-width:54rem}.max55{max-width:55rem}.max56{max-width:56rem}.max60{max-width:60rem}.max64{max-width:64rem}.max65{max-width:65rem}.max66{max-width:66rem}.max68{max-width:68rem}.max70{max-width:70rem}.max72{max-width:72rem}.max74{max-width:74rem}.max75{max-width:75rem}.max77{max-width:77rem}.max78{max-width:78rem}.max80{max-width:80rem}.max90{max-width:90rem}.w100{width:100%}.w50{width:50%}.w0{width:0}.wa{width:auto}.h100{height:100%}.h50{height:50%}.h0{height:0%}.ha{height:auto}.minvw{min-width:100vw}.minvh{min-height:100vh}.maxw{max-width:100%}.maxh{max-height:100%}.row,.row-wrap{display:flex;flex-direction:row}.col,.col-wrap{display:flex;flex-direction:column}.row-reverse,.row-reverse-wrap{display:flex;flex-direction:row-reverse}.col-reverse,.col-reverse-wrap{display:flex;flex-direction:column-reverse}.col-reverse-wrap,.col-wrap,.flex-wrap,.row-reverse-wrap,.row-wrap{flex-wrap:wrap}.grid,.grid2{display:grid}.grid2{grid-template-columns:repeat(2,1fr)}.grid3{display:grid;grid-template-columns:repeat(3,1fr)}.grid4{display:grid;grid-template-columns:repeat(4,1fr)}.grid5{display:grid;grid-template-columns:repeat(5,1fr)}.grid6{display:grid;grid-template-columns:repeat(6,1fr)}.grid7{display:grid;grid-template-columns:repeat(7,1fr)}.grid8{display:grid;grid-template-columns:repeat(8,1fr)}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.span0{flex:0}.span1{flex:1}.span2{flex:2}.span3{flex:3}.span4{flex:4}.span5{flex:5}.span6{flex:6}.span7{flex:7}.span8{flex:8}.span9{flex:9}.span-auto{flex-basis:auto}.order0{order:0}.order1{order:1}.order2{order:2}.order3{order:3}.order4{order:4}.order5{order:5}.order6{order:6}.order7{order:7}.order8{order:8}.order9{order:9}@media (max-width:24rem){.xs\:show{display:block}.xs\:hide{display:none}}@media (min-width:40rem){.sd\:show{display:block}.sd\:hide{display:none}.sd\:max{max-width:none}.sd\:row,.sd\:row-wrap{display:flex;flex-direction:row}.sd\:col,.sd\:col-wrap{display:flex;flex-direction:column}.sd\:row-reverse,.sd\:row-reverse-wrap{display:flex;flex-direction:row-reverse}.sd\:col-reverse,.sd\:col-reverse-wrap{display:flex;flex-direction:column-reverse}.sd\:col-reverse-wrap,.sd\:col-wrap,.sd\:flex-wrap,.sd\:row-reverse-wrap,.sd\:row-wrap{flex-wrap:wrap}.sd\:grid,.sd\:grid2{display:grid}.sd\:grid2{grid-template-columns:repeat(2,1fr)}.sd\:grid3{display:grid;grid-template-columns:repeat(3,1fr)}.sd\:grid4{display:grid;grid-template-columns:repeat(4,1fr)}.sd\:grid5{display:grid;grid-template-columns:repeat(5,1fr)}.sd\:grid6{display:grid;grid-template-columns:repeat(6,1fr)}.sd\:grid7{display:grid;grid-template-columns:repeat(7,1fr)}.sd\:grid8{display:grid;grid-template-columns:repeat(8,1fr)}.sd\:order0{order:0}.sd\:order1{order:1}.sd\:order9{order:9}}@media (min-width:61rem){.md\:show{display:block}.md\:hide{display:none}.md\:max{max-width:none}.md\:row,.md\:row-wrap{display:flex;flex-direction:row}.md\:col,.md\:col-wrap{display:flex;flex-direction:column}.md\:row-reverse,.md\:row-reverse-wrap{display:flex;flex-direction:row-reverse}.md\:col-reverse,.md\:col-reverse-wrap{display:flex;flex-direction:column-reverse}.md\:col-reverse-wrap,.md\:col-wrap,.md\:flex-wrap,.md\:row-reverse-wrap,.md\:row-wrap{flex-wrap:wrap}.md\:grid,.md\:grid2{display:grid}.md\:grid2{grid-template-columns:repeat(2,1fr)}.md\:grid3{display:grid;grid-template-columns:repeat(3,1fr)}.md\:grid4{display:grid;grid-template-columns:repeat(4,1fr)}.md\:grid5{display:grid;grid-template-columns:repeat(5,1fr)}.md\:grid6{display:grid;grid-template-columns:repeat(6,1fr)}.md\:grid7{display:grid;grid-template-columns:repeat(7,1fr)}.md\:grid8{display:grid;grid-template-columns:repeat(8,1fr)}.md\:order0{order:0}.md\:order1{order:1}.md\:order9{order:9}}@media (min-width:80rem){.ld\:show{display:block}.ld\:hide{display:none}.ld\:max{max-width:none}.ld\:row,.ld\:row-wrap{display:flex;flex-direction:row}.ld\:col,.ld\:col-wrap{display:flex;flex-direction:column}.ld\:row-reverse,.ld\:row-reverse-wrap{display:flex;flex-direction:row-reverse}.ld\:col-reverse,.ld\:col-reverse-wrap{display:flex;flex-direction:column-reverse}.ld\:col-reverse-wrap,.ld\:col-wrap,.ld\:flex-wrap,.ld\:row-reverse-wrap,.ld\:row-wrap{flex-wrap:wrap}.ld\:grid,.ld\:grid2{display:grid}.ld\:grid2{grid-template-columns:repeat(2,1fr)}.ld\:grid3{display:grid;grid-template-columns:repeat(3,1fr)}.ld\:grid4{display:grid;grid-template-columns:repeat(4,1fr)}.ld\:grid5{display:grid;grid-template-columns:repeat(5,1fr)}.ld\:grid6{display:grid;grid-template-columns:repeat(6,1fr)}.ld\:grid7{display:grid;grid-template-columns:repeat(7,1fr)}.ld\:grid8{display:grid;grid-template-columns:repeat(8,1fr)}.ld\:order0{order:0}.ld\:order1{order:1}.ld\:order9{order:9}}@media (min-width:100rem){.xl\:show{display:block}.xl\:hide{display:none}.xl\:max{max-width:none}.xl\:row,.xl\:row-wrap{display:flex;flex-direction:row}.xl\:col,.xl\:col-wrap{display:flex;flex-direction:column}.xl\:row-reverse,.xl\:row-reverse-wrap{display:flex;flex-direction:row-reverse}.xl\:col-reverse,.xl\:col-reverse-wrap{display:flex;flex-direction:column-reverse}.xl\:col-reverse-wrap,.xl\:col-wrap,.xl\:flex-wrap,.xl\:row-reverse-wrap,.xl\:row-wrap{flex-wrap:wrap}.xl\:grid,.xl\:grid2{display:grid}.xl\:grid2{grid-template-columns:repeat(2,1fr)}.xl\:grid3{display:grid;grid-template-columns:repeat(3,1fr)}.xl\:grid4{display:grid;grid-template-columns:repeat(4,1fr)}.xl\:grid5{display:grid;grid-template-columns:repeat(5,1fr)}.xl\:grid6{display:grid;grid-template-columns:repeat(6,1fr)}.xl\:grid7{display:grid;grid-template-columns:repeat(7,1fr)}.xl\:grid8{display:grid;grid-template-columns:repeat(8,1fr)}.xl\:order0{order:0}.xl\:order1{order:1}.xl\:order9{order:9}}.m0{margin:0}.m025{margin:.25rem}.m05{margin:.5rem}.m1{margin:1rem}.m2{margin:2rem}.m3{margin:3rem}.m4{margin:4rem}.ma{margin:auto}.mx0{margin-left:0;margin-right:0}.mx1{margin-left:1rem;margin-right:1rem}.mx2{margin-left:2rem;margin-right:2rem}.mx{margin-left:auto;margin-right:auto}.my0{margin-bottom:0;margin-top:0}.my1{margin-bottom:1rem;margin-top:1rem}.my2{margin-bottom:2rem;margin-top:2rem}.my{margin-bottom:auto;margin-top:auto}.mt025{margin-top:.25rem}.mt05{margin-top:.5rem}.mt1{margin-top:1rem}.mt2{margin-top:2rem}.mt{margin-top:auto}.mb025{margin-bottom:.25rem}.mb05{margin-bottom:.5rem}.mb1{margin-bottom:1rem}.mb2{margin-bottom:2rem}.mb{margin-bottom:auto}.ml025{margin-left:.25rem}.ml05{margin-left:.5rem}.ml1{margin-left:1rem}.ml2{margin-left:2rem}.ml{margin-left:auto}.mr025{margin-right:.25rem}.mr05{margin-right:.5rem}.mr1{margin-right:1rem}.mr2{margin-right:2rem}.mr{margin-right:auto}.p0{padding:0}.p0125{padding:.125rem}.p025{padding:.25rem}.p05{padding:.5rem}.p075{padding:.75rem}.p1{padding:1rem}.p125{padding:1.25rem}.p15{padding:1.5rem}.p175{padding:1.75rem}.p2{padding:2rem}.p25{padding:2.5rem}.p3{padding:3rem}.p4{padding:4rem}.p0125b{padding:calc(.125rem - var(--border-width))}.p025b{padding:calc(.25rem - var(--border-width))}.p05b{padding:calc(.5rem - var(--border-width))}.p075b{padding:calc(.75rem - var(--border-width))}.p1b{padding:calc(1rem - var(--border-width))}.p125b{padding:calc(1.25rem - var(--border-width))}.p15b{padding:calc(1.5rem - var(--border-width))}.p175b{padding:calc(1.75rem - var(--border-width))}.p2b{padding:calc(2rem - var(--border-width))}.px0{padding-left:0;padding-right:0}.px0125{padding-left:.125rem;padding-right:.125rem}.px025{padding-left:.25rem;padding-right:.25rem}.px05{padding-left:.5rem;padding-right:.5rem}.px075{padding-left:.75rem;padding-right:.75rem}.px1{padding-left:1rem;padding-right:1rem}.px125{padding-left:1.25rem;padding-right:1.25rem}.px15{padding-left:1.5rem;padding-right:1.5rem}.px175{padding-left:1.75rem;padding-right:1.75rem}.px2{padding-left:2rem;padding-right:2rem}.px25{padding-left:2.5rem;padding-right:2.5rem}.px3{padding-left:3rem;padding-right:3rem}.px4{padding-left:4rem;padding-right:4rem}.px0125b{padding-left:calc(.125rem - var(--border-width));padding-right:calc(.125rem - var(--border-width))}.px025b{padding-left:calc(.25rem - var(--border-width));padding-right:calc(.25rem - var(--border-width))}.px05b{padding-left:calc(.5rem - var(--border-width));padding-right:calc(.5rem - var(--border-width))}.px075b{padding-left:calc(.75rem - var(--border-width));padding-right:calc(.75rem - var(--border-width))}.px1b{padding-left:calc(1rem - var(--border-width));padding-right:calc(1rem - var(--border-width))}.px125b{padding-left:calc(1.25rem - var(--border-width));padding-right:calc(1.25rem - var(--border-width))}.px15b{padding-left:calc(1.5rem - var(--border-width));padding-right:calc(1.5rem - var(--border-width))}.px175b{padding-left:calc(1.75rem - var(--border-width));padding-right:calc(1.75rem - var(--border-width))}.px2b{padding-left:calc(2rem - var(--border-width));padding-right:calc(2rem - var(--border-width))}.py0{padding-bottom:0;padding-top:0}.py0125{padding-bottom:.125rem;padding-top:.125rem}.py025{padding-bottom:.25rem;padding-top:.25rem}.py05{padding-bottom:.5rem;padding-top:.5rem}.py075{padding-bottom:.75rem;padding-top:.75rem}.py1{padding-bottom:1rem;padding-top:1rem}.py125{padding-bottom:1.25rem;padding-top:1.25rem}.py15{padding-bottom:1.5rem;padding-top:1.5rem}.py175{padding-bottom:1.75rem;padding-top:1.75rem}.py2{padding-bottom:2rem;padding-top:2rem}.py25{padding-bottom:2.5rem;padding-top:2.5rem}.py3{padding-bottom:3rem;padding-top:3rem}.py4{padding-bottom:4rem;padding-top:4rem}.py0125b{padding-bottom:calc(.125rem - var(--border-width));padding-top:calc(.125rem - var(--border-width))}.py025b{padding-bottom:calc(.25rem - var(--border-width));padding-top:calc(.25rem - var(--border-width))}.py05b{padding-bottom:calc(.5rem - var(--border-width));padding-top:calc(.5rem - var(--border-width))}.py075b{padding-bottom:calc(.75rem - var(--border-width));padding-top:calc(.75rem - var(--border-width))}.py1b{padding-bottom:calc(1rem - var(--border-width));padding-top:calc(1rem - var(--border-width))}.py125b{padding-bottom:calc(1.25rem - var(--border-width));padding-top:calc(1.25rem - var(--border-width))}.py15b{padding-bottom:calc(1.5rem - var(--border-width));padding-top:calc(1.5rem - var(--border-width))}.py175b{padding-bottom:calc(1.75rem - var(--border-width));padding-top:calc(1.75rem - var(--border-width))}.py2b{padding-bottom:calc(2rem - var(--border-width));padding-top:calc(2rem - var(--border-width))}.pt0{padding-top:0}.pt0125{padding-top:.125rem}.pt025{padding-top:.25rem}.pt05{padding-top:.5rem}.pt075{padding-top:.75rem}.pt1{padding-top:1rem}.pt125{padding-top:1.25rem}.pt15{padding-top:1.5rem}.pt175{padding-top:1.75rem}.pt2{padding-top:2rem}.pt3{padding-top:3rem}.pt4{padding-top:4rem}.pb0{padding-bottom:0}.pb0125{padding-bottom:.125rem}.pb025{padding-bottom:.25rem}.pb05{padding-bottom:.5rem}.pb075{padding-bottom:.75rem}.pb1{padding-bottom:1rem}.pb125{padding-bottom:1.25rem}.pb15{padding-bottom:1.5rem}.pb175{padding-bottom:1.75rem}.pb2{padding-bottom:2rem}.pb3{padding-bottom:3rem}.pb4{padding-bottom:4rem}.pl0{padding-left:0}.pl0125{padding-left:.125rem}.pl025{padding-left:.25rem}.pl05{padding-left:.5rem}.pl075{padding-left:.75rem}.pl1{padding-left:1rem}.pl125{padding-left:1.25rem}.pl15{padding-left:1.5rem}.pl175{padding-left:1.75rem}.pl2{padding-left:2rem}.pl3{padding-left:3rem}.pl4{padding-left:4rem}.pr0{padding-right:0}.pr0125{padding-right:.125rem}.pr025{padding-right:.25rem}.pr05{padding-right:.5rem}.pr075{padding-right:.75rem}.pr1{padding-right:1rem}.pr125{padding-right:1.25rem}.pr15{padding-right:1.5rem}.pr175{padding-right:1.75rem}.pr2{padding-right:2rem}.pr3{padding-right:3rem}.pr4{padding-right:4rem}@media (min-width:40rem){.sd\:p0{padding:0}.sd\:p0125{padding:.125rem}.sd\:p025{padding:.25rem}.sd\:p05{padding:.5rem}.sd\:p075{padding:.75rem}.sd\:p1{padding:1rem}.sd\:p125{padding:1.25rem}.sd\:p15{padding:1.5rem}.sd\:p175{padding:1.75rem}.sd\:p2{padding:2rem}.sd\:p25{padding:2.5rem}.sd\:p3{padding:3rem}.sd\:p4{padding:4rem}.sd\:p0125b{padding:calc(.125rem - var(--border-width))}.sd\:p025b{padding:calc(.25rem - var(--border-width))}.sd\:p05b{padding:calc(.5rem - var(--border-width))}.sd\:p075b{padding:calc(.75rem - var(--border-width))}.sd\:p1b{padding:calc(1rem - var(--border-width))}.sd\:p125b{padding:calc(1.25rem - var(--border-width))}.sd\:p15b{padding:calc(1.5rem - var(--border-width))}.sd\:p175b{padding:calc(1.75rem - var(--border-width))}.sd\:p2b{padding:calc(2rem - var(--border-width))}.sd\:px0{padding-left:0;padding-right:0}.sd\:px0125{padding-left:.125rem;padding-right:.125rem}.sd\:px025{padding-left:.25rem;padding-right:.25rem}.sd\:px05{padding-left:.5rem;padding-right:.5rem}.sd\:px075{padding-left:.75rem;padding-right:.75rem}.sd\:px1{padding-left:1rem;padding-right:1rem}.sd\:px125{padding-left:1.25rem;padding-right:1.25rem}.sd\:px15{padding-left:1.5rem;padding-right:1.5rem}.sd\:px175{padding-left:1.75rem;padding-right:1.75rem}.sd\:px2{padding-left:2rem;padding-right:2rem}.sd\:px25{padding-left:2.5rem;padding-right:2.5rem}.sd\:px3{padding-left:3rem;padding-right:3rem}.sd\:px4{padding-left:4rem;padding-right:4rem}.sd\:px0125b{padding-left:calc(.125rem - var(--border-width));padding-right:calc(.125rem - var(--border-width))}.sd\:px025b{padding-left:calc(.25rem - var(--border-width));padding-right:calc(.25rem - var(--border-width))}.sd\:px05b{padding-left:calc(.5rem - var(--border-width));padding-right:calc(.5rem - var(--border-width))}.sd\:px075b{padding-left:calc(.75rem - var(--border-width));padding-right:calc(.75rem - var(--border-width))}.sd\:px1b{padding-left:calc(1rem - var(--border-width));padding-right:calc(1rem - var(--border-width))}.sd\:px125b{padding-left:calc(1.25rem - var(--border-width));padding-right:calc(1.25rem - var(--border-width))}.sd\:px15b{padding-left:calc(1.5rem - var(--border-width));padding-right:calc(1.5rem - var(--border-width))}.sd\:px175b{padding-left:calc(1.75rem - var(--border-width));padding-right:calc(1.75rem - var(--border-width))}.sd\:px2b{padding-left:calc(2rem - var(--border-width));padding-right:calc(2rem - var(--border-width))}.sd\:py0{padding-bottom:0;padding-top:0}.sd\:py0125{padding-bottom:.125rem;padding-top:.125rem}.sd\:py025{padding-bottom:.25rem;padding-top:.25rem}.sd\:py05{padding-bottom:.5rem;padding-top:.5rem}.sd\:py075{padding-bottom:.75rem;padding-top:.75rem}.sd\:py1{padding-bottom:1rem;padding-top:1rem}.sd\:py125{padding-bottom:1.25rem;padding-top:1.25rem}.sd\:py15{padding-bottom:1.5rem;padding-top:1.5rem}.sd\:py175{padding-bottom:1.75rem;padding-top:1.75rem}.sd\:py2{padding-bottom:2rem;padding-top:2rem}.sd\:py25{padding-bottom:2.5rem;padding-top:2.5rem}.sd\:py3{padding-bottom:3rem;padding-top:3rem}.sd\:py4{padding-bottom:4rem;padding-top:4rem}.sd\:py0125b{padding-bottom:calc(.125rem - var(--border-width));padding-top:calc(.125rem - var(--border-width))}.sd\:py025b{padding-bottom:calc(.25rem - var(--border-width));padding-top:calc(.25rem - var(--border-width))}.sd\:py05b{padding-bottom:calc(.5rem - var(--border-width));padding-top:calc(.5rem - var(--border-width))}.sd\:py075b{padding-bottom:calc(.75rem - var(--border-width));padding-top:calc(.75rem - var(--border-width))}.sd\:py1b{padding-bottom:calc(1rem - var(--border-width));padding-top:calc(1rem - var(--border-width))}.sd\:py125b{padding-bottom:calc(1.25rem - var(--border-width));padding-top:calc(1.25rem - var(--border-width))}.sd\:py15b{padding-bottom:calc(1.5rem - var(--border-width));padding-top:calc(1.5rem - var(--border-width))}.sd\:py175b{padding-bottom:calc(1.75rem - var(--border-width));padding-top:calc(1.75rem - var(--border-width))}.sd\:py2b{padding-bottom:calc(2rem - var(--border-width));padding-top:calc(2rem - var(--border-width))}}@media (min-width:61rem){.md\:p0{padding:0}.md\:p0125{padding:.125rem}.md\:p025{padding:.25rem}.md\:p05{padding:.5rem}.md\:p075{padding:.75rem}.md\:p1{padding:1rem}.md\:p125{padding:1.25rem}.md\:p15{padding:1.5rem}.md\:p175{padding:1.75rem}.md\:p2{padding:2rem}.md\:p25{padding:2.5rem}.md\:p3{padding:3rem}.md\:p4{padding:4rem}.md\:p0125b{padding:calc(.125rem - var(--border-width))}.md\:p025b{padding:calc(.25rem - var(--border-width))}.md\:p05b{padding:calc(.5rem - var(--border-width))}.md\:p075b{padding:calc(.75rem - var(--border-width))}.md\:p1b{padding:calc(1rem - var(--border-width))}.md\:p125b{padding:calc(1.25rem - var(--border-width))}.md\:p15b{padding:calc(1.5rem - var(--border-width))}.md\:p175b{padding:calc(1.75rem - var(--border-width))}.md\:p2b{padding:calc(2rem - var(--border-width))}.md\:px0{padding-left:0;padding-right:0}.md\:px0125{padding-left:.125rem;padding-right:.125rem}.md\:px025{padding-left:.25rem;padding-right:.25rem}.md\:px05{padding-left:.5rem;padding-right:.5rem}.md\:px075{padding-left:.75rem;padding-right:.75rem}.md\:px1{padding-left:1rem;padding-right:1rem}.md\:px125{padding-left:1.25rem;padding-right:1.25rem}.md\:px15{padding-left:1.5rem;padding-right:1.5rem}.md\:px175{padding-left:1.75rem;padding-right:1.75rem}.md\:px2{padding-left:2rem;padding-right:2rem}.md\:px25{padding-left:2.5rem;padding-right:2.5rem}.md\:px3{padding-left:3rem;padding-right:3rem}.md\:px4{padding-left:4rem;padding-right:4rem}.md\:px0125b{padding-left:calc(.125rem - var(--border-width));padding-right:calc(.125rem - var(--border-width))}.md\:px025b{padding-left:calc(.25rem - var(--border-width));padding-right:calc(.25rem - var(--border-width))}.md\:px05b{padding-left:calc(.5rem - var(--border-width));padding-right:calc(.5rem - var(--border-width))}.md\:px075b{padding-left:calc(.75rem - var(--border-width));padding-right:calc(.75rem - var(--border-width))}.md\:px1b{padding-left:calc(1rem - var(--border-width));padding-right:calc(1rem - var(--border-width))}.md\:px125b{padding-left:calc(1.25rem - var(--border-width));padding-right:calc(1.25rem - var(--border-width))}.md\:px15b{padding-left:calc(1.5rem - var(--border-width));padding-right:calc(1.5rem - var(--border-width))}.md\:px175b{padding-left:calc(1.75rem - var(--border-width));padding-right:calc(1.75rem - var(--border-width))}.md\:px2b{padding-left:calc(2rem - var(--border-width));padding-right:calc(2rem - var(--border-width))}.md\:py0{padding-bottom:0;padding-top:0}.md\:py0125{padding-bottom:.125rem;padding-top:.125rem}.md\:py025{padding-bottom:.25rem;padding-top:.25rem}.md\:py05{padding-bottom:.5rem;padding-top:.5rem}.md\:py075{padding-bottom:.75rem;padding-top:.75rem}.md\:py1{padding-bottom:1rem;padding-top:1rem}.md\:py125{padding-bottom:1.25rem;padding-top:1.25rem}.md\:py15{padding-bottom:1.5rem;padding-top:1.5rem}.md\:py175{padding-bottom:1.75rem;padding-top:1.75rem}.md\:py2{padding-bottom:2rem;padding-top:2rem}.md\:py25{padding-bottom:2.5rem;padding-top:2.5rem}.md\:py3{padding-bottom:3rem;padding-top:3rem}.md\:py4{padding-bottom:4rem;padding-top:4rem}.md\:py0125b{padding-bottom:calc(.125rem - var(--border-width));padding-top:calc(.125rem - var(--border-width))}.md\:py025b{padding-bottom:calc(.25rem - var(--border-width));padding-top:calc(.25rem - var(--border-width))}.md\:py05b{padding-bottom:calc(.5rem - var(--border-width));padding-top:calc(.5rem - var(--border-width))}.md\:py075b{padding-bottom:calc(.75rem - var(--border-width));padding-top:calc(.75rem - var(--border-width))}.md\:py1b{padding-bottom:calc(1rem - var(--border-width));padding-top:calc(1rem - var(--border-width))}.md\:py125b{padding-bottom:calc(1.25rem - var(--border-width));padding-top:calc(1.25rem - var(--border-width))}.md\:py15b{padding-bottom:calc(1.5rem - var(--border-width));padding-top:calc(1.5rem - var(--border-width))}.md\:py175b{padding-bottom:calc(1.75rem - var(--border-width));padding-top:calc(1.75rem - var(--border-width))}.md\:py2b{padding-bottom:calc(2rem - var(--border-width));padding-top:calc(2rem - var(--border-width))}}@media (min-width:80rem){.ld\:p0{padding:0}.ld\:p0125{padding:.125rem}.ld\:p025{padding:.25rem}.ld\:p05{padding:.5rem}.ld\:p075{padding:.75rem}.ld\:p1{padding:1rem}.ld\:p125{padding:1.25rem}.ld\:p15{padding:1.5rem}.ld\:p175{padding:1.75rem}.ld\:p2{padding:2rem}.ld\:p25{padding:2.5rem}.ld\:p3{padding:3rem}.ld\:p4{padding:4rem}.ld\:p0125b{padding:calc(.125rem - var(--border-width))}.ld\:p025b{padding:calc(.25rem - var(--border-width))}.ld\:p05b{padding:calc(.5rem - var(--border-width))}.ld\:p075b{padding:calc(.75rem - var(--border-width))}.ld\:p1b{padding:calc(1rem - var(--border-width))}.ld\:p125b{padding:calc(1.25rem - var(--border-width))}.ld\:p15b{padding:calc(1.5rem - var(--border-width))}.ld\:p175b{padding:calc(1.75rem - var(--border-width))}.ld\:p2b{padding:calc(2rem - var(--border-width))}.ld\:px0{padding-left:0;padding-right:0}.ld\:px0125{padding-left:.125rem;padding-right:.125rem}.ld\:px025{padding-left:.25rem;padding-right:.25rem}.ld\:px05{padding-left:.5rem;padding-right:.5rem}.ld\:px075{padding-left:.75rem;padding-right:.75rem}.ld\:px1{padding-left:1rem;padding-right:1rem}.ld\:px125{padding-left:1.25rem;padding-right:1.25rem}.ld\:px15{padding-left:1.5rem;padding-right:1.5rem}.ld\:px175{padding-left:1.75rem;padding-right:1.75rem}.ld\:px2{padding-left:2rem;padding-right:2rem}.ld\:px25{padding-left:2.5rem;padding-right:2.5rem}.ld\:px3{padding-left:3rem;padding-right:3rem}.ld\:px4{padding-left:4rem;padding-right:4rem}.ld\:px0125b{padding-left:calc(.125rem - var(--border-width));padding-right:calc(.125rem - var(--border-width))}.ld\:px025b{padding-left:calc(.25rem - var(--border-width));padding-right:calc(.25rem - var(--border-width))}.ld\:px05b{padding-left:calc(.5rem - var(--border-width));padding-right:calc(.5rem - var(--border-width))}.ld\:px075b{padding-left:calc(.75rem - var(--border-width));padding-right:calc(.75rem - var(--border-width))}.ld\:px1b{padding-left:calc(1rem - var(--border-width));padding-right:calc(1rem - var(--border-width))}.ld\:px125b{padding-left:calc(1.25rem - var(--border-width));padding-right:calc(1.25rem - var(--border-width))}.ld\:px15b{padding-left:calc(1.5rem - var(--border-width));padding-right:calc(1.5rem - var(--border-width))}.ld\:px175b{padding-left:calc(1.75rem - var(--border-width));padding-right:calc(1.75rem - var(--border-width))}.ld\:px2b{padding-left:calc(2rem - var(--border-width));padding-right:calc(2rem - var(--border-width))}.ld\:py0{padding-bottom:0;padding-top:0}.ld\:py0125{padding-bottom:.125rem;padding-top:.125rem}.ld\:py025{padding-bottom:.25rem;padding-top:.25rem}.ld\:py05{padding-bottom:.5rem;padding-top:.5rem}.ld\:py075{padding-bottom:.75rem;padding-top:.75rem}.ld\:py1{padding-bottom:1rem;padding-top:1rem}.ld\:py125{padding-bottom:1.25rem;padding-top:1.25rem}.ld\:py15{padding-bottom:1.5rem;padding-top:1.5rem}.ld\:py175{padding-bottom:1.75rem;padding-top:1.75rem}.ld\:py2{padding-bottom:2rem;padding-top:2rem}.ld\:py25{padding-bottom:2.5rem;padding-top:2.5rem}.ld\:py3{padding-bottom:3rem;padding-top:3rem}.ld\:py4{padding-bottom:4rem;padding-top:4rem}.ld\:py0125b{padding-bottom:calc(.125rem - var(--border-width));padding-top:calc(.125rem - var(--border-width))}.ld\:py025b{padding-bottom:calc(.25rem - var(--border-width));padding-top:calc(.25rem - var(--border-width))}.ld\:py05b{padding-bottom:calc(.5rem - var(--border-width));padding-top:calc(.5rem - var(--border-width))}.ld\:py075b{padding-bottom:calc(.75rem - var(--border-width));padding-top:calc(.75rem - var(--border-width))}.ld\:py1b{padding-bottom:calc(1rem - var(--border-width));padding-top:calc(1rem - var(--border-width))}.ld\:py125b{padding-bottom:calc(1.25rem - var(--border-width));padding-top:calc(1.25rem - var(--border-width))}.ld\:py15b{padding-bottom:calc(1.5rem - var(--border-width));padding-top:calc(1.5rem - var(--border-width))}.ld\:py175b{padding-bottom:calc(1.75rem - var(--border-width));padding-top:calc(1.75rem - var(--border-width))}.ld\:py2b{padding-bottom:calc(2rem - var(--border-width));padding-top:calc(2rem - var(--border-width))}}@media (min-width:100rem){.xl\:p0{padding:0}.xl\:p0125{padding:.125rem}.xl\:p025{padding:.25rem}.xl\:p05{padding:.5rem}.xl\:p075{padding:.75rem}.xl\:p1{padding:1rem}.xl\:p125{padding:1.25rem}.xl\:p15{padding:1.5rem}.xl\:p175{padding:1.75rem}.xl\:p2{padding:2rem}.xl\:p25{padding:2.5rem}.xl\:p3{padding:3rem}.xl\:p4{padding:4rem}.xl\:p0125b{padding:calc(.125rem - var(--border-width))}.xl\:p025b{padding:calc(.25rem - var(--border-width))}.xl\:p05b{padding:calc(.5rem - var(--border-width))}.xl\:p075b{padding:calc(.75rem - var(--border-width))}.xl\:p1b{padding:calc(1rem - var(--border-width))}.xl\:p125b{padding:calc(1.25rem - var(--border-width))}.xl\:p15b{padding:calc(1.5rem - var(--border-width))}.xl\:p175b{padding:calc(1.75rem - var(--border-width))}.xl\:p2b{padding:calc(2rem - var(--border-width))}.xl\:px0{padding-left:0;padding-right:0}.xl\:px0125{padding-left:.125rem;padding-right:.125rem}.xl\:px025{padding-left:.25rem;padding-right:.25rem}.xl\:px05{padding-left:.5rem;padding-right:.5rem}.xl\:px075{padding-left:.75rem;padding-right:.75rem}.xl\:px1{padding-left:1rem;padding-right:1rem}.xl\:px125{padding-left:1.25rem;padding-right:1.25rem}.xl\:px15{padding-left:1.5rem;padding-right:1.5rem}.xl\:px175{padding-left:1.75rem;padding-right:1.75rem}.xl\:px2{padding-left:2rem;padding-right:2rem}.xl\:px25{padding-left:2.5rem;padding-right:2.5rem}.xl\:px3{padding-left:3rem;padding-right:3rem}.xl\:px4{padding-left:4rem;padding-right:4rem}.xl\:px0125b{padding-left:calc(.125rem - var(--border-width));padding-right:calc(.125rem - var(--border-width))}.xl\:px025b{padding-left:calc(.25rem - var(--border-width));padding-right:calc(.25rem - var(--border-width))}.xl\:px05b{padding-left:calc(.5rem - var(--border-width));padding-right:calc(.5rem - var(--border-width))}.xl\:px075b{padding-left:calc(.75rem - var(--border-width));padding-right:calc(.75rem - var(--border-width))}.xl\:px1b{padding-left:calc(1rem - var(--border-width));padding-right:calc(1rem - var(--border-width))}.xl\:px125b{padding-left:calc(1.25rem - var(--border-width));padding-right:calc(1.25rem - var(--border-width))}.xl\:px15b{padding-left:calc(1.5rem - var(--border-width));padding-right:calc(1.5rem - var(--border-width))}.xl\:px175b{padding-left:calc(1.75rem - var(--border-width));padding-right:calc(1.75rem - var(--border-width))}.xl\:px2b{padding-left:calc(2rem - var(--border-width));padding-right:calc(2rem - var(--border-width))}.xl\:py0{padding-bottom:0;padding-top:0}.xl\:py0125{padding-bottom:.125rem;padding-top:.125rem}.xl\:py025{padding-bottom:.25rem;padding-top:.25rem}.xl\:py05{padding-bottom:.5rem;padding-top:.5rem}.xl\:py075{padding-bottom:.75rem;padding-top:.75rem}.xl\:py1{padding-bottom:1rem;padding-top:1rem}.xl\:py125{padding-bottom:1.25rem;padding-top:1.25rem}.xl\:py15{padding-bottom:1.5rem;padding-top:1.5rem}.xl\:py175{padding-bottom:1.75rem;padding-top:1.75rem}.xl\:py2{padding-bottom:2rem;padding-top:2rem}.xl\:py25{padding-bottom:2.5rem;padding-top:2.5rem}.xl\:py3{padding-bottom:3rem;padding-top:3rem}.xl\:py4{padding-bottom:4rem;padding-top:4rem}.xl\:py0125b{padding-bottom:calc(.125rem - var(--border-width));padding-top:calc(.125rem - var(--border-width))}.xl\:py025b{padding-bottom:calc(.25rem - var(--border-width));padding-top:calc(.25rem - var(--border-width))}.xl\:py05b{padding-bottom:calc(.5rem - var(--border-width));padding-top:calc(.5rem - var(--border-width))}.xl\:py075b{padding-bottom:calc(.75rem - var(--border-width));padding-top:calc(.75rem - var(--border-width))}.xl\:py1b{padding-bottom:calc(1rem - var(--border-width));padding-top:calc(1rem - var(--border-width))}.xl\:py125b{padding-bottom:calc(1.25rem - var(--border-width));padding-top:calc(1.25rem - var(--border-width))}.xl\:py15b{padding-bottom:calc(1.5rem - var(--border-width));padding-top:calc(1.5rem - var(--border-width))}.xl\:py175b{padding-bottom:calc(1.75rem - var(--border-width));padding-top:calc(1.75rem - var(--border-width))}.xl\:py2b{padding-bottom:calc(2rem - var(--border-width));padding-top:calc(2rem - var(--border-width))}}.ba{border:var(--border-width) solid var(--border-color)}.bl{border-left:var(--border-width) solid var(--border-color)}.br{border-right:var(--border-width) solid var(--border-color)}.bt{border-top:var(--border-width) solid var(--border-color)}.bb{border-bottom:var(--border-width) solid var(--border-color)}.bc-black{--border-color:var(--black)}.bc-black-95{--border-color:var(--black-95)}.bc-black-90{--border-color:var(--black-90)}.bc-black-80{--border-color:var(--black-80)}.bc-black-70{--border-color:var(--black-70)}.bc-black-60{--border-color:var(--black-60)}.bc-black-50{--border-color:var(--black-50)}.bc-black-40{--border-color:var(--black-40)}.bc-black-30{--border-color:var(--black-30)}.bc-black-20{--border-color:var(--black-20)}.bc-black-10{--border-color:var(--black-10)}.bc-black-05{--border-color:var(--black-05)}.bc-black-025{--border-color:var(--black-025)}.bc-black-0125{--border-color:var(--black-0125)}.bc-white{--border-color:var(--white)}.bc-white-95{--border-color:var(--white-95)}.bc-white-90{--border-color:var(--white-90)}.bc-white-80{--border-color:var(--white-80)}.bc-white-70{--border-color:var(--white-70)}.bc-white-60{--border-color:var(--white-60)}.bc-white-50{--border-color:var(--white-50)}.bc-white-40{--border-color:var(--white-40)}.bc-white-30{--border-color:var(--white-30)}.bc-white-20{--border-color:var(--white-20)}.bc-white-10{--border-color:var(--white-10)}.bc-white-05{--border-color:var(--white-05)}.bc-white-025{--border-color:var(--white-025)}.bc-white-0125{--border-color:var(--white-0125)}.bc-aqua{--border-color:var(--aqua)}.bc-blue{--border-color:var(--blue)}.bc-navy{--border-color:var(--navy)}.bc-teal{--border-color:var(--teal)}.bc-green{--border-color:var(--green)}.bc-olive{--border-color:var(--olive)}.bc-lime{--border-color:var(--lime)}.bc-yellow{--border-color:var(--yellow)}.bc-orange{--border-color:var(--orange)}.bc-red{--border-color:var(--red)}.bc-fuchsia{--border-color:var(--fuchsia)}.bc-purple{--border-color:var(--purple)}.bc-maroon{--border-color:var(--maroon)}.br1{border-radius:var(--br1)}.br2{border-radius:var(--br2)}.br3{border-radius:var(--br3)}.br4{border-radius:var(--br4)}.br5{border-radius:var(--br5)}.br100{border-radius:100%}.br999{border-radius:999px}.anchor:hover .color-current\:hover,.color-current,.color-current\:hover:hover{color:currentColor}.anchor:hover .color-inherit\:hover,.color-inherit,.color-inherit\:hover:hover{color:inherit}.color-transparent{color:transparent}.black{color:var(--black)}.black-95{color:var(--black-95)}.black-90{color:var(--black-90)}.black-80{color:var(--black-80)}.black-70{color:var(--black-70)}.black-60{color:var(--black-60)}.black-50{color:var(--black-50)}.black-40{color:var(--black-40)}.black-30{color:var(--black-30)}.black-20{color:var(--black-20)}.black-10{color:var(--black-10)}.black-05{color:var(--black-05)}.black-025{color:var(--black-025)}.black-0125{color:var(--black-0125)}.white{color:var(--white)}.white-95{color:var(--white-95)}.white-90{color:var(--white-90)}.white-80{color:var(--white-80)}.white-70{color:var(--white-70)}.white-60{color:var(--white-60)}.white-50{color:var(--white-50)}.white-40{color:var(--white-40)}.white-30{color:var(--white-30)}.white-20{color:var(--white-20)}.white-10{color:var(--white-10)}.white-05{color:var(--white-05)}.white-025{color:var(--white-025)}.white-0125{color:var(--white-0125)}.aqua{color:var(--aqua)}.blue{color:var(--blue)}.navy{color:var(--navy)}.teal{color:var(--teal)}.green{color:var(--green)}.olive{color:var(--olive)}.lime{color:var(--lime)}.yellow{color:var(--yellow)}.orange{color:var(--orange)}.red{color:var(--red)}.fuchsia{color:var(--fuchsia)}.purple{color:var(--purple)}.maroon{color:var(--maroon)}.bg-cover{background-size:cover}.bg-contain{background-size:contain}.bg-top{background-position:top}.bg-bottom{background-position:bottom}.bg-left{background-position:0}.bg-right{background-position:100%}.bg-center{background-position:50%}.bg-topleft{background-position:0 0}.bg-topright{background-position:100% 0}.bg-bottomleft{background-position:0 100%}.bg-bottomright{background-position:100% 100%}.bg-repeatx{background-repeat:repeat-x}.bg-repeaty{background-repeat:repeat-y}.bg-norepeat{background-repeat:no-repeat}.bg-current{background-color:currentColor}.anchor:hover .bg-transparent\:hover,.bg-transparent,.bg-transparent\:hover:hover{background-color:transparent}.bg-black{background-color:var(--black)}.bg-black-95{background-color:var(--black-95)}.bg-black-90{background-color:var(--black-90)}.bg-black-80{background-color:var(--black-80)}.bg-black-70{background-color:var(--black-70)}.bg-black-60{background-color:var(--black-60)}.bg-black-50{background-color:var(--black-50)}.bg-black-40{background-color:var(--black-40)}.bg-black-30{background-color:var(--black-30)}.bg-black-20{background-color:var(--black-20)}.bg-black-10{background-color:var(--black-10)}.bg-black-05{background-color:var(--black-05)}.bg-black-025{background-color:var(--black-025)}.bg-black-0125{background-color:var(--black-0125)}.bg-white{background-color:var(--white)}.bg-white-95{background-color:var(--white-95)}.bg-white-90{background-color:var(--white-90)}.bg-white-80{background-color:var(--white-80)}.bg-white-70{background-color:var(--white-70)}.bg-white-60{background-color:var(--white-60)}.bg-white-50{background-color:var(--white-50)}.bg-white-40{background-color:var(--white-40)}.bg-white-30{background-color:var(--white-30)}.bg-white-20{background-color:var(--white-20)}.bg-white-10{background-color:var(--white-10)}.bg-white-05{background-color:var(--white-05)}.bg-white-025{background-color:var(--white-025)}.bg-white-0125{background-color:var(--white-0125)}.bg-aqua{background-color:var(--aqua)}.bg-blue{background-color:var(--blue)}.bg-navy{background-color:var(--navy)}.bg-teal{background-color:var(--teal)}.bg-green{background-color:var(--green)}.bg-olive{background-color:var(--olive)}.bg-lime{background-color:var(--lime)}.bg-yellow{background-color:var(--yellow)}.bg-orange{background-color:var(--orange)}.bg-red{background-color:var(--red)}.bg-fuchsia{background-color:var(--fuchsia)}.bg-purple{background-color:var(--purple)}.bg-maroon{background-color:var(--maroon)}.cursor-default{cursor:default}.cursor-notallowed{cursor:not-allowed}.cursor-progress{cursor:progress}.cursor-pointer{cursor:pointer}.-d{outline:1px dashed var(--purple)}.-d *{outline:1px dashed var(--lime)}.-d .-d{outline:1px dashed var(--purple)}.-view{background-color:var(--yellow);color:#000;font-size:12px;left:0;line-height:1;padding:4px;position:fixed;top:0;z-index:9999}.-view:before{content:"-"}@media (max-width:24rem){.-view:before{content:"XS"}}@media (min-width:40rem){.-view:before{content:"SD"}}@media (min-width:61rem){.-view:before{content:"MD"}}@media (min-width:80rem){.-view:before{content:"LD"}}@media (min-width:100rem){.-view:before{content:"XL"}}.anchor:hover .linkcolor\:hover,.linkcolor,.linkcolor\:hover:hover{color:var(--link-color)}.hlcolor{color:var(--theme-highlight-text-color)}.bg-hlbgcolor{background-color:var(--theme-highlight-background-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;box-shadow:-1px 0 0 2px var(--theme-highlight-background-color),1px 0 0 2px var(--theme-highlight-background-color)}:root{--font-family:"Inter",sans-serif}@supports (font-variation-settings:normal){:root{--font-family:"Inter var",sans-serif}}:root{--theme-background-color:var(--white);--theme-text-color:var(--black);--theme-text-color-05:var(--black-05);--theme-link-color:inherit;--theme-highlight-text-color:inherit;--theme-highlight-background-color:var(--yellow);--default-background-color:var(--theme-background-color);--default-color:var(--theme-text-color);--link-color:var(--theme-link-color);--copy-space-primary:1.5em;--copy-space-secondary:0.5em}
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "db0da68a6ba7e14dced512e7a95ebf31",
8 | "packages": [
9 | {
10 | "name": "claviska/simpleimage",
11 | "version": "4.2.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/claviska/SimpleImage.git",
15 | "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/dfbe53c01dae8467468ef2b817c09b786a7839d2",
20 | "reference": "dfbe53c01dae8467468ef2b817c09b786a7839d2",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "ext-gd": "*",
25 | "league/color-extractor": "0.4.*",
26 | "php": ">=8.0"
27 | },
28 | "require-dev": {
29 | "laravel/pint": "^1.5",
30 | "phpstan/phpstan": "^1.10"
31 | },
32 | "type": "library",
33 | "autoload": {
34 | "psr-0": {
35 | "claviska": "src/"
36 | }
37 | },
38 | "notification-url": "https://packagist.org/downloads/",
39 | "license": [
40 | "MIT"
41 | ],
42 | "authors": [
43 | {
44 | "name": "Cory LaViska",
45 | "homepage": "http://www.abeautifulsite.net/",
46 | "role": "Developer"
47 | }
48 | ],
49 | "description": "A PHP class that makes working with images as simple as possible.",
50 | "support": {
51 | "issues": "https://github.com/claviska/SimpleImage/issues",
52 | "source": "https://github.com/claviska/SimpleImage/tree/4.2.0"
53 | },
54 | "funding": [
55 | {
56 | "url": "https://github.com/claviska",
57 | "type": "github"
58 | }
59 | ],
60 | "time": "2024-04-15T16:07:16+00:00"
61 | },
62 | {
63 | "name": "composer/semver",
64 | "version": "3.4.0",
65 | "source": {
66 | "type": "git",
67 | "url": "https://github.com/composer/semver.git",
68 | "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
69 | },
70 | "dist": {
71 | "type": "zip",
72 | "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
73 | "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
74 | "shasum": ""
75 | },
76 | "require": {
77 | "php": "^5.3.2 || ^7.0 || ^8.0"
78 | },
79 | "require-dev": {
80 | "phpstan/phpstan": "^1.4",
81 | "symfony/phpunit-bridge": "^4.2 || ^5"
82 | },
83 | "type": "library",
84 | "extra": {
85 | "branch-alias": {
86 | "dev-main": "3.x-dev"
87 | }
88 | },
89 | "autoload": {
90 | "psr-4": {
91 | "Composer\\Semver\\": "src"
92 | }
93 | },
94 | "notification-url": "https://packagist.org/downloads/",
95 | "license": [
96 | "MIT"
97 | ],
98 | "authors": [
99 | {
100 | "name": "Nils Adermann",
101 | "email": "naderman@naderman.de",
102 | "homepage": "http://www.naderman.de"
103 | },
104 | {
105 | "name": "Jordi Boggiano",
106 | "email": "j.boggiano@seld.be",
107 | "homepage": "http://seld.be"
108 | },
109 | {
110 | "name": "Rob Bast",
111 | "email": "rob.bast@gmail.com",
112 | "homepage": "http://robbast.nl"
113 | }
114 | ],
115 | "description": "Semver library that offers utilities, version constraint parsing and validation.",
116 | "keywords": [
117 | "semantic",
118 | "semver",
119 | "validation",
120 | "versioning"
121 | ],
122 | "support": {
123 | "irc": "ircs://irc.libera.chat:6697/composer",
124 | "issues": "https://github.com/composer/semver/issues",
125 | "source": "https://github.com/composer/semver/tree/3.4.0"
126 | },
127 | "funding": [
128 | {
129 | "url": "https://packagist.com",
130 | "type": "custom"
131 | },
132 | {
133 | "url": "https://github.com/composer",
134 | "type": "github"
135 | },
136 | {
137 | "url": "https://tidelift.com/funding/github/packagist/composer/composer",
138 | "type": "tidelift"
139 | }
140 | ],
141 | "time": "2023-08-31T09:50:34+00:00"
142 | },
143 | {
144 | "name": "filp/whoops",
145 | "version": "2.15.4",
146 | "source": {
147 | "type": "git",
148 | "url": "https://github.com/filp/whoops.git",
149 | "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546"
150 | },
151 | "dist": {
152 | "type": "zip",
153 | "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546",
154 | "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546",
155 | "shasum": ""
156 | },
157 | "require": {
158 | "php": "^5.5.9 || ^7.0 || ^8.0",
159 | "psr/log": "^1.0.1 || ^2.0 || ^3.0"
160 | },
161 | "require-dev": {
162 | "mockery/mockery": "^0.9 || ^1.0",
163 | "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
164 | "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
165 | },
166 | "suggest": {
167 | "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
168 | "whoops/soap": "Formats errors as SOAP responses"
169 | },
170 | "type": "library",
171 | "extra": {
172 | "branch-alias": {
173 | "dev-master": "2.7-dev"
174 | }
175 | },
176 | "autoload": {
177 | "psr-4": {
178 | "Whoops\\": "src/Whoops/"
179 | }
180 | },
181 | "notification-url": "https://packagist.org/downloads/",
182 | "license": [
183 | "MIT"
184 | ],
185 | "authors": [
186 | {
187 | "name": "Filipe Dobreira",
188 | "homepage": "https://github.com/filp",
189 | "role": "Developer"
190 | }
191 | ],
192 | "description": "php error handling for cool kids",
193 | "homepage": "https://filp.github.io/whoops/",
194 | "keywords": [
195 | "error",
196 | "exception",
197 | "handling",
198 | "library",
199 | "throwable",
200 | "whoops"
201 | ],
202 | "support": {
203 | "issues": "https://github.com/filp/whoops/issues",
204 | "source": "https://github.com/filp/whoops/tree/2.15.4"
205 | },
206 | "funding": [
207 | {
208 | "url": "https://github.com/denis-sokolov",
209 | "type": "github"
210 | }
211 | ],
212 | "time": "2023-11-03T12:00:00+00:00"
213 | },
214 | {
215 | "name": "getkirby/cms",
216 | "version": "3.10.1.2",
217 | "source": {
218 | "type": "git",
219 | "url": "https://github.com/getkirby/kirby.git",
220 | "reference": "dba5ea8ea7fd468190a401cc37d6032ec717cac8"
221 | },
222 | "dist": {
223 | "type": "zip",
224 | "url": "https://api.github.com/repos/getkirby/kirby/zipball/dba5ea8ea7fd468190a401cc37d6032ec717cac8",
225 | "reference": "dba5ea8ea7fd468190a401cc37d6032ec717cac8",
226 | "shasum": ""
227 | },
228 | "require": {
229 | "claviska/simpleimage": "4.2.0",
230 | "composer/semver": "3.4.0",
231 | "ext-ctype": "*",
232 | "ext-curl": "*",
233 | "ext-dom": "*",
234 | "ext-filter": "*",
235 | "ext-hash": "*",
236 | "ext-iconv": "*",
237 | "ext-json": "*",
238 | "ext-libxml": "*",
239 | "ext-mbstring": "*",
240 | "ext-openssl": "*",
241 | "ext-simplexml": "*",
242 | "filp/whoops": "2.15.4",
243 | "getkirby/composer-installer": "^1.2.1",
244 | "laminas/laminas-escaper": "2.13.0",
245 | "michelf/php-smartypants": "1.8.1",
246 | "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
247 | "phpmailer/phpmailer": "6.9.1",
248 | "symfony/polyfill-intl-idn": "1.30.0",
249 | "symfony/polyfill-mbstring": "1.30.0",
250 | "symfony/yaml": "6.4.8"
251 | },
252 | "replace": {
253 | "symfony/polyfill-php72": "*"
254 | },
255 | "suggest": {
256 | "ext-PDO": "Support for using databases",
257 | "ext-apcu": "Support for the Apcu cache driver",
258 | "ext-exif": "Support for exif information from images",
259 | "ext-fileinfo": "Improved mime type detection for files",
260 | "ext-intl": "Improved i18n number formatting",
261 | "ext-memcached": "Support for the Memcached cache driver",
262 | "ext-sodium": "Support for the crypto class and more robust session handling",
263 | "ext-zip": "Support for ZIP archive file functions",
264 | "ext-zlib": "Sanitization and validation for svgz files"
265 | },
266 | "type": "kirby-cms",
267 | "extra": {
268 | "unused": [
269 | "symfony/polyfill-intl-idn"
270 | ]
271 | },
272 | "autoload": {
273 | "files": [
274 | "config/setup.php",
275 | "config/helpers.php"
276 | ],
277 | "psr-4": {
278 | "Kirby\\": "src/"
279 | },
280 | "classmap": [
281 | "dependencies/"
282 | ]
283 | },
284 | "notification-url": "https://packagist.org/downloads/",
285 | "license": [
286 | "proprietary"
287 | ],
288 | "authors": [
289 | {
290 | "name": "Kirby Team",
291 | "email": "support@getkirby.com",
292 | "homepage": "https://getkirby.com"
293 | }
294 | ],
295 | "description": "The Kirby 3 core",
296 | "homepage": "https://getkirby.com",
297 | "keywords": [
298 | "cms",
299 | "core",
300 | "kirby"
301 | ],
302 | "support": {
303 | "email": "support@getkirby.com",
304 | "forum": "https://forum.getkirby.com",
305 | "issues": "https://github.com/getkirby/kirby/issues",
306 | "source": "https://github.com/getkirby/kirby"
307 | },
308 | "funding": [
309 | {
310 | "url": "https://getkirby.com/buy",
311 | "type": "custom"
312 | }
313 | ],
314 | "time": "2025-05-05T19:14:17+00:00"
315 | },
316 | {
317 | "name": "getkirby/composer-installer",
318 | "version": "1.2.1",
319 | "source": {
320 | "type": "git",
321 | "url": "https://github.com/getkirby/composer-installer.git",
322 | "reference": "c98ece30bfba45be7ce457e1102d1b169d922f3d"
323 | },
324 | "dist": {
325 | "type": "zip",
326 | "url": "https://api.github.com/repos/getkirby/composer-installer/zipball/c98ece30bfba45be7ce457e1102d1b169d922f3d",
327 | "reference": "c98ece30bfba45be7ce457e1102d1b169d922f3d",
328 | "shasum": ""
329 | },
330 | "require": {
331 | "composer-plugin-api": "^1.0 || ^2.0"
332 | },
333 | "require-dev": {
334 | "composer/composer": "^1.8 || ^2.0"
335 | },
336 | "type": "composer-plugin",
337 | "extra": {
338 | "class": "Kirby\\ComposerInstaller\\Plugin"
339 | },
340 | "autoload": {
341 | "psr-4": {
342 | "Kirby\\": "src/"
343 | }
344 | },
345 | "notification-url": "https://packagist.org/downloads/",
346 | "license": [
347 | "MIT"
348 | ],
349 | "description": "Kirby's custom Composer installer for the Kirby CMS and for Kirby plugins",
350 | "homepage": "https://getkirby.com",
351 | "support": {
352 | "issues": "https://github.com/getkirby/composer-installer/issues",
353 | "source": "https://github.com/getkirby/composer-installer/tree/1.2.1"
354 | },
355 | "funding": [
356 | {
357 | "url": "https://getkirby.com/buy",
358 | "type": "custom"
359 | }
360 | ],
361 | "time": "2020-12-28T12:54:39+00:00"
362 | },
363 | {
364 | "name": "laminas/laminas-escaper",
365 | "version": "2.13.0",
366 | "source": {
367 | "type": "git",
368 | "url": "https://github.com/laminas/laminas-escaper.git",
369 | "reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba"
370 | },
371 | "dist": {
372 | "type": "zip",
373 | "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/af459883f4018d0f8a0c69c7a209daef3bf973ba",
374 | "reference": "af459883f4018d0f8a0c69c7a209daef3bf973ba",
375 | "shasum": ""
376 | },
377 | "require": {
378 | "ext-ctype": "*",
379 | "ext-mbstring": "*",
380 | "php": "~8.1.0 || ~8.2.0 || ~8.3.0"
381 | },
382 | "conflict": {
383 | "zendframework/zend-escaper": "*"
384 | },
385 | "require-dev": {
386 | "infection/infection": "^0.27.0",
387 | "laminas/laminas-coding-standard": "~2.5.0",
388 | "maglnet/composer-require-checker": "^3.8.0",
389 | "phpunit/phpunit": "^9.6.7",
390 | "psalm/plugin-phpunit": "^0.18.4",
391 | "vimeo/psalm": "^5.9"
392 | },
393 | "type": "library",
394 | "autoload": {
395 | "psr-4": {
396 | "Laminas\\Escaper\\": "src/"
397 | }
398 | },
399 | "notification-url": "https://packagist.org/downloads/",
400 | "license": [
401 | "BSD-3-Clause"
402 | ],
403 | "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
404 | "homepage": "https://laminas.dev",
405 | "keywords": [
406 | "escaper",
407 | "laminas"
408 | ],
409 | "support": {
410 | "chat": "https://laminas.dev/chat",
411 | "docs": "https://docs.laminas.dev/laminas-escaper/",
412 | "forum": "https://discourse.laminas.dev",
413 | "issues": "https://github.com/laminas/laminas-escaper/issues",
414 | "rss": "https://github.com/laminas/laminas-escaper/releases.atom",
415 | "source": "https://github.com/laminas/laminas-escaper"
416 | },
417 | "funding": [
418 | {
419 | "url": "https://funding.communitybridge.org/projects/laminas-project",
420 | "type": "community_bridge"
421 | }
422 | ],
423 | "time": "2023-10-10T08:35:13+00:00"
424 | },
425 | {
426 | "name": "league/color-extractor",
427 | "version": "0.4.0",
428 | "source": {
429 | "type": "git",
430 | "url": "https://github.com/thephpleague/color-extractor.git",
431 | "reference": "21fcac6249c5ef7d00eb83e128743ee6678fe505"
432 | },
433 | "dist": {
434 | "type": "zip",
435 | "url": "https://api.github.com/repos/thephpleague/color-extractor/zipball/21fcac6249c5ef7d00eb83e128743ee6678fe505",
436 | "reference": "21fcac6249c5ef7d00eb83e128743ee6678fe505",
437 | "shasum": ""
438 | },
439 | "require": {
440 | "ext-gd": "*",
441 | "php": "^7.3 || ^8.0"
442 | },
443 | "replace": {
444 | "matthecat/colorextractor": "*"
445 | },
446 | "require-dev": {
447 | "friendsofphp/php-cs-fixer": "~2",
448 | "phpunit/phpunit": "^9.5"
449 | },
450 | "suggest": {
451 | "ext-curl": "To download images from remote URLs if allow_url_fopen is disabled for security reasons"
452 | },
453 | "type": "library",
454 | "autoload": {
455 | "psr-4": {
456 | "League\\ColorExtractor\\": "src"
457 | }
458 | },
459 | "notification-url": "https://packagist.org/downloads/",
460 | "license": [
461 | "MIT"
462 | ],
463 | "authors": [
464 | {
465 | "name": "Mathieu Lechat",
466 | "email": "math.lechat@gmail.com",
467 | "homepage": "http://matthecat.com",
468 | "role": "Developer"
469 | }
470 | ],
471 | "description": "Extract colors from an image as a human would do.",
472 | "homepage": "https://github.com/thephpleague/color-extractor",
473 | "keywords": [
474 | "color",
475 | "extract",
476 | "human",
477 | "image",
478 | "palette"
479 | ],
480 | "support": {
481 | "issues": "https://github.com/thephpleague/color-extractor/issues",
482 | "source": "https://github.com/thephpleague/color-extractor/tree/0.4.0"
483 | },
484 | "time": "2022-09-24T15:57:16+00:00"
485 | },
486 | {
487 | "name": "michelf/php-smartypants",
488 | "version": "1.8.1",
489 | "source": {
490 | "type": "git",
491 | "url": "https://github.com/michelf/php-smartypants.git",
492 | "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad"
493 | },
494 | "dist": {
495 | "type": "zip",
496 | "url": "https://api.github.com/repos/michelf/php-smartypants/zipball/47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
497 | "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad",
498 | "shasum": ""
499 | },
500 | "require": {
501 | "php": ">=5.3.0"
502 | },
503 | "type": "library",
504 | "autoload": {
505 | "psr-0": {
506 | "Michelf": ""
507 | }
508 | },
509 | "notification-url": "https://packagist.org/downloads/",
510 | "license": [
511 | "BSD-3-Clause"
512 | ],
513 | "authors": [
514 | {
515 | "name": "Michel Fortin",
516 | "email": "michel.fortin@michelf.ca",
517 | "homepage": "https://michelf.ca/",
518 | "role": "Developer"
519 | },
520 | {
521 | "name": "John Gruber",
522 | "homepage": "https://daringfireball.net/"
523 | }
524 | ],
525 | "description": "PHP SmartyPants",
526 | "homepage": "https://michelf.ca/projects/php-smartypants/",
527 | "keywords": [
528 | "dashes",
529 | "quotes",
530 | "spaces",
531 | "typographer",
532 | "typography"
533 | ],
534 | "support": {
535 | "issues": "https://github.com/michelf/php-smartypants/issues",
536 | "source": "https://github.com/michelf/php-smartypants/tree/1.8.1"
537 | },
538 | "time": "2016-12-13T01:01:17+00:00"
539 | },
540 | {
541 | "name": "phpmailer/phpmailer",
542 | "version": "v6.9.1",
543 | "source": {
544 | "type": "git",
545 | "url": "https://github.com/PHPMailer/PHPMailer.git",
546 | "reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
547 | },
548 | "dist": {
549 | "type": "zip",
550 | "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
551 | "reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
552 | "shasum": ""
553 | },
554 | "require": {
555 | "ext-ctype": "*",
556 | "ext-filter": "*",
557 | "ext-hash": "*",
558 | "php": ">=5.5.0"
559 | },
560 | "require-dev": {
561 | "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
562 | "doctrine/annotations": "^1.2.6 || ^1.13.3",
563 | "php-parallel-lint/php-console-highlighter": "^1.0.0",
564 | "php-parallel-lint/php-parallel-lint": "^1.3.2",
565 | "phpcompatibility/php-compatibility": "^9.3.5",
566 | "roave/security-advisories": "dev-latest",
567 | "squizlabs/php_codesniffer": "^3.7.2",
568 | "yoast/phpunit-polyfills": "^1.0.4"
569 | },
570 | "suggest": {
571 | "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
572 | "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
573 | "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
574 | "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
575 | "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
576 | "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
577 | "psr/log": "For optional PSR-3 debug logging",
578 | "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
579 | "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
580 | },
581 | "type": "library",
582 | "autoload": {
583 | "psr-4": {
584 | "PHPMailer\\PHPMailer\\": "src/"
585 | }
586 | },
587 | "notification-url": "https://packagist.org/downloads/",
588 | "license": [
589 | "LGPL-2.1-only"
590 | ],
591 | "authors": [
592 | {
593 | "name": "Marcus Bointon",
594 | "email": "phpmailer@synchromedia.co.uk"
595 | },
596 | {
597 | "name": "Jim Jagielski",
598 | "email": "jimjag@gmail.com"
599 | },
600 | {
601 | "name": "Andy Prevost",
602 | "email": "codeworxtech@users.sourceforge.net"
603 | },
604 | {
605 | "name": "Brent R. Matzelle"
606 | }
607 | ],
608 | "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
609 | "support": {
610 | "issues": "https://github.com/PHPMailer/PHPMailer/issues",
611 | "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
612 | },
613 | "funding": [
614 | {
615 | "url": "https://github.com/Synchro",
616 | "type": "github"
617 | }
618 | ],
619 | "time": "2023-11-25T22:23:28+00:00"
620 | },
621 | {
622 | "name": "psr/log",
623 | "version": "3.0.2",
624 | "source": {
625 | "type": "git",
626 | "url": "https://github.com/php-fig/log.git",
627 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
628 | },
629 | "dist": {
630 | "type": "zip",
631 | "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
632 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
633 | "shasum": ""
634 | },
635 | "require": {
636 | "php": ">=8.0.0"
637 | },
638 | "type": "library",
639 | "extra": {
640 | "branch-alias": {
641 | "dev-master": "3.x-dev"
642 | }
643 | },
644 | "autoload": {
645 | "psr-4": {
646 | "Psr\\Log\\": "src"
647 | }
648 | },
649 | "notification-url": "https://packagist.org/downloads/",
650 | "license": [
651 | "MIT"
652 | ],
653 | "authors": [
654 | {
655 | "name": "PHP-FIG",
656 | "homepage": "https://www.php-fig.org/"
657 | }
658 | ],
659 | "description": "Common interface for logging libraries",
660 | "homepage": "https://github.com/php-fig/log",
661 | "keywords": [
662 | "log",
663 | "psr",
664 | "psr-3"
665 | ],
666 | "support": {
667 | "source": "https://github.com/php-fig/log/tree/3.0.2"
668 | },
669 | "time": "2024-09-11T13:17:53+00:00"
670 | },
671 | {
672 | "name": "symfony/deprecation-contracts",
673 | "version": "v3.6.0",
674 | "source": {
675 | "type": "git",
676 | "url": "https://github.com/symfony/deprecation-contracts.git",
677 | "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62"
678 | },
679 | "dist": {
680 | "type": "zip",
681 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62",
682 | "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62",
683 | "shasum": ""
684 | },
685 | "require": {
686 | "php": ">=8.1"
687 | },
688 | "type": "library",
689 | "extra": {
690 | "thanks": {
691 | "url": "https://github.com/symfony/contracts",
692 | "name": "symfony/contracts"
693 | },
694 | "branch-alias": {
695 | "dev-main": "3.6-dev"
696 | }
697 | },
698 | "autoload": {
699 | "files": [
700 | "function.php"
701 | ]
702 | },
703 | "notification-url": "https://packagist.org/downloads/",
704 | "license": [
705 | "MIT"
706 | ],
707 | "authors": [
708 | {
709 | "name": "Nicolas Grekas",
710 | "email": "p@tchwork.com"
711 | },
712 | {
713 | "name": "Symfony Community",
714 | "homepage": "https://symfony.com/contributors"
715 | }
716 | ],
717 | "description": "A generic function and convention to trigger deprecation notices",
718 | "homepage": "https://symfony.com",
719 | "support": {
720 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0"
721 | },
722 | "funding": [
723 | {
724 | "url": "https://symfony.com/sponsor",
725 | "type": "custom"
726 | },
727 | {
728 | "url": "https://github.com/fabpot",
729 | "type": "github"
730 | },
731 | {
732 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
733 | "type": "tidelift"
734 | }
735 | ],
736 | "time": "2024-09-25T14:21:43+00:00"
737 | },
738 | {
739 | "name": "symfony/polyfill-ctype",
740 | "version": "v1.33.0",
741 | "source": {
742 | "type": "git",
743 | "url": "https://github.com/symfony/polyfill-ctype.git",
744 | "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
745 | },
746 | "dist": {
747 | "type": "zip",
748 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
749 | "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
750 | "shasum": ""
751 | },
752 | "require": {
753 | "php": ">=7.2"
754 | },
755 | "provide": {
756 | "ext-ctype": "*"
757 | },
758 | "suggest": {
759 | "ext-ctype": "For best performance"
760 | },
761 | "type": "library",
762 | "extra": {
763 | "thanks": {
764 | "url": "https://github.com/symfony/polyfill",
765 | "name": "symfony/polyfill"
766 | }
767 | },
768 | "autoload": {
769 | "files": [
770 | "bootstrap.php"
771 | ],
772 | "psr-4": {
773 | "Symfony\\Polyfill\\Ctype\\": ""
774 | }
775 | },
776 | "notification-url": "https://packagist.org/downloads/",
777 | "license": [
778 | "MIT"
779 | ],
780 | "authors": [
781 | {
782 | "name": "Gert de Pagter",
783 | "email": "BackEndTea@gmail.com"
784 | },
785 | {
786 | "name": "Symfony Community",
787 | "homepage": "https://symfony.com/contributors"
788 | }
789 | ],
790 | "description": "Symfony polyfill for ctype functions",
791 | "homepage": "https://symfony.com",
792 | "keywords": [
793 | "compatibility",
794 | "ctype",
795 | "polyfill",
796 | "portable"
797 | ],
798 | "support": {
799 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
800 | },
801 | "funding": [
802 | {
803 | "url": "https://symfony.com/sponsor",
804 | "type": "custom"
805 | },
806 | {
807 | "url": "https://github.com/fabpot",
808 | "type": "github"
809 | },
810 | {
811 | "url": "https://github.com/nicolas-grekas",
812 | "type": "github"
813 | },
814 | {
815 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
816 | "type": "tidelift"
817 | }
818 | ],
819 | "time": "2024-09-09T11:45:10+00:00"
820 | },
821 | {
822 | "name": "symfony/polyfill-intl-idn",
823 | "version": "v1.30.0",
824 | "source": {
825 | "type": "git",
826 | "url": "https://github.com/symfony/polyfill-intl-idn.git",
827 | "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c"
828 | },
829 | "dist": {
830 | "type": "zip",
831 | "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
832 | "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
833 | "shasum": ""
834 | },
835 | "require": {
836 | "php": ">=7.1",
837 | "symfony/polyfill-intl-normalizer": "^1.10",
838 | "symfony/polyfill-php72": "^1.10"
839 | },
840 | "suggest": {
841 | "ext-intl": "For best performance"
842 | },
843 | "type": "library",
844 | "extra": {
845 | "thanks": {
846 | "url": "https://github.com/symfony/polyfill",
847 | "name": "symfony/polyfill"
848 | }
849 | },
850 | "autoload": {
851 | "files": [
852 | "bootstrap.php"
853 | ],
854 | "psr-4": {
855 | "Symfony\\Polyfill\\Intl\\Idn\\": ""
856 | }
857 | },
858 | "notification-url": "https://packagist.org/downloads/",
859 | "license": [
860 | "MIT"
861 | ],
862 | "authors": [
863 | {
864 | "name": "Laurent Bassin",
865 | "email": "laurent@bassin.info"
866 | },
867 | {
868 | "name": "Trevor Rowbotham",
869 | "email": "trevor.rowbotham@pm.me"
870 | },
871 | {
872 | "name": "Symfony Community",
873 | "homepage": "https://symfony.com/contributors"
874 | }
875 | ],
876 | "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
877 | "homepage": "https://symfony.com",
878 | "keywords": [
879 | "compatibility",
880 | "idn",
881 | "intl",
882 | "polyfill",
883 | "portable",
884 | "shim"
885 | ],
886 | "support": {
887 | "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0"
888 | },
889 | "funding": [
890 | {
891 | "url": "https://symfony.com/sponsor",
892 | "type": "custom"
893 | },
894 | {
895 | "url": "https://github.com/fabpot",
896 | "type": "github"
897 | },
898 | {
899 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
900 | "type": "tidelift"
901 | }
902 | ],
903 | "time": "2024-05-31T15:07:36+00:00"
904 | },
905 | {
906 | "name": "symfony/polyfill-intl-normalizer",
907 | "version": "v1.33.0",
908 | "source": {
909 | "type": "git",
910 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
911 | "reference": "3833d7255cc303546435cb650316bff708a1c75c"
912 | },
913 | "dist": {
914 | "type": "zip",
915 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
916 | "reference": "3833d7255cc303546435cb650316bff708a1c75c",
917 | "shasum": ""
918 | },
919 | "require": {
920 | "php": ">=7.2"
921 | },
922 | "suggest": {
923 | "ext-intl": "For best performance"
924 | },
925 | "type": "library",
926 | "extra": {
927 | "thanks": {
928 | "url": "https://github.com/symfony/polyfill",
929 | "name": "symfony/polyfill"
930 | }
931 | },
932 | "autoload": {
933 | "files": [
934 | "bootstrap.php"
935 | ],
936 | "psr-4": {
937 | "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
938 | },
939 | "classmap": [
940 | "Resources/stubs"
941 | ]
942 | },
943 | "notification-url": "https://packagist.org/downloads/",
944 | "license": [
945 | "MIT"
946 | ],
947 | "authors": [
948 | {
949 | "name": "Nicolas Grekas",
950 | "email": "p@tchwork.com"
951 | },
952 | {
953 | "name": "Symfony Community",
954 | "homepage": "https://symfony.com/contributors"
955 | }
956 | ],
957 | "description": "Symfony polyfill for intl's Normalizer class and related functions",
958 | "homepage": "https://symfony.com",
959 | "keywords": [
960 | "compatibility",
961 | "intl",
962 | "normalizer",
963 | "polyfill",
964 | "portable",
965 | "shim"
966 | ],
967 | "support": {
968 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
969 | },
970 | "funding": [
971 | {
972 | "url": "https://symfony.com/sponsor",
973 | "type": "custom"
974 | },
975 | {
976 | "url": "https://github.com/fabpot",
977 | "type": "github"
978 | },
979 | {
980 | "url": "https://github.com/nicolas-grekas",
981 | "type": "github"
982 | },
983 | {
984 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
985 | "type": "tidelift"
986 | }
987 | ],
988 | "time": "2024-09-09T11:45:10+00:00"
989 | },
990 | {
991 | "name": "symfony/polyfill-mbstring",
992 | "version": "v1.30.0",
993 | "source": {
994 | "type": "git",
995 | "url": "https://github.com/symfony/polyfill-mbstring.git",
996 | "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
997 | },
998 | "dist": {
999 | "type": "zip",
1000 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
1001 | "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
1002 | "shasum": ""
1003 | },
1004 | "require": {
1005 | "php": ">=7.1"
1006 | },
1007 | "provide": {
1008 | "ext-mbstring": "*"
1009 | },
1010 | "suggest": {
1011 | "ext-mbstring": "For best performance"
1012 | },
1013 | "type": "library",
1014 | "extra": {
1015 | "thanks": {
1016 | "url": "https://github.com/symfony/polyfill",
1017 | "name": "symfony/polyfill"
1018 | }
1019 | },
1020 | "autoload": {
1021 | "files": [
1022 | "bootstrap.php"
1023 | ],
1024 | "psr-4": {
1025 | "Symfony\\Polyfill\\Mbstring\\": ""
1026 | }
1027 | },
1028 | "notification-url": "https://packagist.org/downloads/",
1029 | "license": [
1030 | "MIT"
1031 | ],
1032 | "authors": [
1033 | {
1034 | "name": "Nicolas Grekas",
1035 | "email": "p@tchwork.com"
1036 | },
1037 | {
1038 | "name": "Symfony Community",
1039 | "homepage": "https://symfony.com/contributors"
1040 | }
1041 | ],
1042 | "description": "Symfony polyfill for the Mbstring extension",
1043 | "homepage": "https://symfony.com",
1044 | "keywords": [
1045 | "compatibility",
1046 | "mbstring",
1047 | "polyfill",
1048 | "portable",
1049 | "shim"
1050 | ],
1051 | "support": {
1052 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0"
1053 | },
1054 | "funding": [
1055 | {
1056 | "url": "https://symfony.com/sponsor",
1057 | "type": "custom"
1058 | },
1059 | {
1060 | "url": "https://github.com/fabpot",
1061 | "type": "github"
1062 | },
1063 | {
1064 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1065 | "type": "tidelift"
1066 | }
1067 | ],
1068 | "time": "2024-06-19T12:30:46+00:00"
1069 | },
1070 | {
1071 | "name": "symfony/yaml",
1072 | "version": "v6.4.8",
1073 | "source": {
1074 | "type": "git",
1075 | "url": "https://github.com/symfony/yaml.git",
1076 | "reference": "52903de178d542850f6f341ba92995d3d63e60c9"
1077 | },
1078 | "dist": {
1079 | "type": "zip",
1080 | "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9",
1081 | "reference": "52903de178d542850f6f341ba92995d3d63e60c9",
1082 | "shasum": ""
1083 | },
1084 | "require": {
1085 | "php": ">=8.1",
1086 | "symfony/deprecation-contracts": "^2.5|^3",
1087 | "symfony/polyfill-ctype": "^1.8"
1088 | },
1089 | "conflict": {
1090 | "symfony/console": "<5.4"
1091 | },
1092 | "require-dev": {
1093 | "symfony/console": "^5.4|^6.0|^7.0"
1094 | },
1095 | "bin": [
1096 | "Resources/bin/yaml-lint"
1097 | ],
1098 | "type": "library",
1099 | "autoload": {
1100 | "psr-4": {
1101 | "Symfony\\Component\\Yaml\\": ""
1102 | },
1103 | "exclude-from-classmap": [
1104 | "/Tests/"
1105 | ]
1106 | },
1107 | "notification-url": "https://packagist.org/downloads/",
1108 | "license": [
1109 | "MIT"
1110 | ],
1111 | "authors": [
1112 | {
1113 | "name": "Fabien Potencier",
1114 | "email": "fabien@symfony.com"
1115 | },
1116 | {
1117 | "name": "Symfony Community",
1118 | "homepage": "https://symfony.com/contributors"
1119 | }
1120 | ],
1121 | "description": "Loads and dumps YAML files",
1122 | "homepage": "https://symfony.com",
1123 | "support": {
1124 | "source": "https://github.com/symfony/yaml/tree/v6.4.8"
1125 | },
1126 | "funding": [
1127 | {
1128 | "url": "https://symfony.com/sponsor",
1129 | "type": "custom"
1130 | },
1131 | {
1132 | "url": "https://github.com/fabpot",
1133 | "type": "github"
1134 | },
1135 | {
1136 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1137 | "type": "tidelift"
1138 | }
1139 | ],
1140 | "time": "2024-05-31T14:49:08+00:00"
1141 | },
1142 | {
1143 | "name": "twig/twig",
1144 | "version": "v3.21.1",
1145 | "source": {
1146 | "type": "git",
1147 | "url": "https://github.com/twigphp/Twig.git",
1148 | "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d"
1149 | },
1150 | "dist": {
1151 | "type": "zip",
1152 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d",
1153 | "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d",
1154 | "shasum": ""
1155 | },
1156 | "require": {
1157 | "php": ">=8.1.0",
1158 | "symfony/deprecation-contracts": "^2.5|^3",
1159 | "symfony/polyfill-ctype": "^1.8",
1160 | "symfony/polyfill-mbstring": "^1.3"
1161 | },
1162 | "require-dev": {
1163 | "phpstan/phpstan": "^2.0",
1164 | "psr/container": "^1.0|^2.0",
1165 | "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
1166 | },
1167 | "type": "library",
1168 | "autoload": {
1169 | "files": [
1170 | "src/Resources/core.php",
1171 | "src/Resources/debug.php",
1172 | "src/Resources/escaper.php",
1173 | "src/Resources/string_loader.php"
1174 | ],
1175 | "psr-4": {
1176 | "Twig\\": "src/"
1177 | }
1178 | },
1179 | "notification-url": "https://packagist.org/downloads/",
1180 | "license": [
1181 | "BSD-3-Clause"
1182 | ],
1183 | "authors": [
1184 | {
1185 | "name": "Fabien Potencier",
1186 | "email": "fabien@symfony.com",
1187 | "homepage": "http://fabien.potencier.org",
1188 | "role": "Lead Developer"
1189 | },
1190 | {
1191 | "name": "Twig Team",
1192 | "role": "Contributors"
1193 | },
1194 | {
1195 | "name": "Armin Ronacher",
1196 | "email": "armin.ronacher@active-4.com",
1197 | "role": "Project Founder"
1198 | }
1199 | ],
1200 | "description": "Twig, the flexible, fast, and secure template language for PHP",
1201 | "homepage": "https://twig.symfony.com",
1202 | "keywords": [
1203 | "templating"
1204 | ],
1205 | "support": {
1206 | "issues": "https://github.com/twigphp/Twig/issues",
1207 | "source": "https://github.com/twigphp/Twig/tree/v3.21.1"
1208 | },
1209 | "funding": [
1210 | {
1211 | "url": "https://github.com/fabpot",
1212 | "type": "github"
1213 | },
1214 | {
1215 | "url": "https://tidelift.com/funding/github/packagist/twig/twig",
1216 | "type": "tidelift"
1217 | }
1218 | ],
1219 | "time": "2025-05-03T07:21:55+00:00"
1220 | }
1221 | ],
1222 | "packages-dev": [
1223 | {
1224 | "name": "symfony/var-dumper",
1225 | "version": "v6.4.24",
1226 | "source": {
1227 | "type": "git",
1228 | "url": "https://github.com/symfony/var-dumper.git",
1229 | "reference": "aa29484ce0544bd69fa9f0df902e5ed7b7fe5034"
1230 | },
1231 | "dist": {
1232 | "type": "zip",
1233 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/aa29484ce0544bd69fa9f0df902e5ed7b7fe5034",
1234 | "reference": "aa29484ce0544bd69fa9f0df902e5ed7b7fe5034",
1235 | "shasum": ""
1236 | },
1237 | "require": {
1238 | "php": ">=8.1",
1239 | "symfony/deprecation-contracts": "^2.5|^3",
1240 | "symfony/polyfill-mbstring": "~1.0"
1241 | },
1242 | "conflict": {
1243 | "symfony/console": "<5.4"
1244 | },
1245 | "require-dev": {
1246 | "symfony/console": "^5.4|^6.0|^7.0",
1247 | "symfony/error-handler": "^6.3|^7.0",
1248 | "symfony/http-kernel": "^5.4|^6.0|^7.0",
1249 | "symfony/process": "^5.4|^6.0|^7.0",
1250 | "symfony/uid": "^5.4|^6.0|^7.0",
1251 | "twig/twig": "^2.13|^3.0.4"
1252 | },
1253 | "bin": [
1254 | "Resources/bin/var-dump-server"
1255 | ],
1256 | "type": "library",
1257 | "autoload": {
1258 | "files": [
1259 | "Resources/functions/dump.php"
1260 | ],
1261 | "psr-4": {
1262 | "Symfony\\Component\\VarDumper\\": ""
1263 | },
1264 | "exclude-from-classmap": [
1265 | "/Tests/"
1266 | ]
1267 | },
1268 | "notification-url": "https://packagist.org/downloads/",
1269 | "license": [
1270 | "MIT"
1271 | ],
1272 | "authors": [
1273 | {
1274 | "name": "Nicolas Grekas",
1275 | "email": "p@tchwork.com"
1276 | },
1277 | {
1278 | "name": "Symfony Community",
1279 | "homepage": "https://symfony.com/contributors"
1280 | }
1281 | ],
1282 | "description": "Provides mechanisms for walking through any arbitrary PHP variable",
1283 | "homepage": "https://symfony.com",
1284 | "keywords": [
1285 | "debug",
1286 | "dump"
1287 | ],
1288 | "support": {
1289 | "source": "https://github.com/symfony/var-dumper/tree/v6.4.24"
1290 | },
1291 | "funding": [
1292 | {
1293 | "url": "https://symfony.com/sponsor",
1294 | "type": "custom"
1295 | },
1296 | {
1297 | "url": "https://github.com/fabpot",
1298 | "type": "github"
1299 | },
1300 | {
1301 | "url": "https://github.com/nicolas-grekas",
1302 | "type": "github"
1303 | },
1304 | {
1305 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1306 | "type": "tidelift"
1307 | }
1308 | ],
1309 | "time": "2025-07-29T18:40:01+00:00"
1310 | }
1311 | ],
1312 | "aliases": [],
1313 | "minimum-stability": "stable",
1314 | "stability-flags": {},
1315 | "prefer-stable": false,
1316 | "prefer-lowest": false,
1317 | "platform": {
1318 | "php": ">=8.0.2 <8.3.0"
1319 | },
1320 | "platform-dev": {},
1321 | "plugin-api-version": "2.6.0"
1322 | }
1323 |
--------------------------------------------------------------------------------