merge
10
index.html
|
|
@ -1,10 +1,10 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="utf-8">
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Vite + Vue</title>
|
<title>Nom du service</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|
|
||||||
10
public/assets/css/panel.css
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
/* CSS VARIABLES */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
|
||||||
|
/* Colors */
|
||||||
|
--color-l-200: 95%;
|
||||||
|
--color-l-300: 85%;
|
||||||
|
--color-l-400: 80%;
|
||||||
|
--color-l-500: 74%;
|
||||||
|
}
|
||||||
21
public/content/clients/1_dior/client.txt
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
Title: Dior
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Headline:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Text:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Logo: - file://25NN1En7lGeEttZy
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Color: #000
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Uuid: G418qZ4ABsoWFx4i
|
||||||
BIN
public/content/clients/1_dior/dior.jpg
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
1
public/content/clients/1_dior/dior.jpg.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Uuid: 25NN1En7lGeEttZy
|
||||||
13
public/content/clients/2_hermes/client.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
Title: Hermes
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Logo: - file://Nj3oUfpMGXwRETWn
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Color: #fb6b22
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Uuid: PweFYnBx27eMZ2mr
|
||||||
BIN
public/content/clients/2_hermes/hermes.jpg
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
1
public/content/clients/2_hermes/hermes.jpg.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Uuid: Nj3oUfpMGXwRETWn
|
||||||
5
public/content/clients/clients.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
Title: Clients
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Uuid: TsaoiLb9iQJWZAvX
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
Title: Error
|
Title: Erreur
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
Title: Home
|
Title: Accueil
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
@ -10,7 +10,7 @@ Testtext: test
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Testblocks: [{"content":{"location":"kirby","image":["home/image.png"],"src":"","alt":"","caption":"","link":"","ratio":"","crop":"false"},"id":"ad071a0e-852b-473b-9f6f-46ea4079168e","isHidden":false,"type":"image"}]
|
Testblocks:
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 36 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Uuid: aWouZREvKfW9VWMt
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Template: image
|
||||||
|
After Width: | Height: | Size: 29 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Uuid: T3MXkEhh9mmAGkUH
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Template: image
|
||||||
|
After Width: | Height: | Size: 58 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Uuid: e57fucmyhXX9jJv4
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Template: image
|
||||||
|
After Width: | Height: | Size: 53 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Uuid: aGCNfbFS7FcFJls1
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Template: image
|
||||||
|
After Width: | Height: | Size: 92 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Uuid: qqhD8ABZ7BkkJxd5
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Template: image
|
||||||
|
After Width: | Height: | Size: 59 KiB |
|
|
@ -0,0 +1,5 @@
|
||||||
|
Uuid: B3TFeDZKd5d8dxKK
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Template: image
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
Title: Miss Dior Blooming Bouquet
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Client: - page://G418qZ4ABsoWFx4i
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Briefclientpdf:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas faucibus mollis interdum. Maecenas faucibus mollis interdum. Maecenas sed diam eget risus varius blandit sit amet non magna. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Briefclientimages:
|
||||||
|
|
||||||
|
- file://aWouZREvKfW9VWMt
|
||||||
|
- file://qqhD8ABZ7BkkJxd5
|
||||||
|
- file://e57fucmyhXX9jJv4
|
||||||
|
- file://aGCNfbFS7FcFJls1
|
||||||
|
- file://T3MXkEhh9mmAGkUH
|
||||||
|
- file://B3TFeDZKd5d8dxKK
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Pdf:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Text:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Uuid: 513oEM4JFuWBt2Bw
|
||||||
5
public/content/projects/projects.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
Title: Projets
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Uuid: JgUmDeKdunC06yBi
|
||||||
29
public/content/projects/projet-test/project.txt
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
Title: Projet Test
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Client: - page://G418qZ4ABsoWFx4i
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Briefclientpdf:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Description: Maecenas sed diam eget risus varius blandit sit amet non magna. Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Maecenas faucibus mollis interdum.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Briefclientimages:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Pdf:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Text:
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Uuid: Bdho8W2PQkSk1x21
|
||||||
|
|
@ -1 +1,5 @@
|
||||||
Title: Site Title
|
Title: Nom du service
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Briefclientimagestags: Parachèvements, Forme & design, Matériaux & textures, Coloris & nuances, Bouchon, Bouton poussoir, DA globale
|
||||||
15
public/site/blueprints/files/image.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
title: Image
|
||||||
|
|
||||||
|
accept:
|
||||||
|
mime: image/*
|
||||||
|
type: image
|
||||||
|
focus: false
|
||||||
|
|
||||||
|
fields:
|
||||||
|
description:
|
||||||
|
type: textarea
|
||||||
|
buttons: false
|
||||||
|
size: small
|
||||||
|
width: 1/2
|
||||||
|
# tags:
|
||||||
|
# type: tags
|
||||||
5
public/site/blueprints/files/pdf.yml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
title: PDF
|
||||||
|
|
||||||
|
accept:
|
||||||
|
mime: application/pdf
|
||||||
|
focus: false
|
||||||
45
public/site/blueprints/pages/client.yml
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
title: Client
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
projects:
|
||||||
|
label: Projets
|
||||||
|
icon: folder
|
||||||
|
columns:
|
||||||
|
- width: 1/2
|
||||||
|
sections:
|
||||||
|
projectsListed:
|
||||||
|
extends: sections/projects
|
||||||
|
headline: Projets en cours
|
||||||
|
query: page.projectsListed
|
||||||
|
status: unlisted
|
||||||
|
columns:
|
||||||
|
title: true
|
||||||
|
client: false
|
||||||
|
- width: 1/2
|
||||||
|
sections:
|
||||||
|
projectsUnlisted:
|
||||||
|
extends: sections/projects
|
||||||
|
headline: Projets archivés
|
||||||
|
query: page.projectsUnlisted
|
||||||
|
status: unlisted
|
||||||
|
columns:
|
||||||
|
title: true
|
||||||
|
client: false
|
||||||
|
|
||||||
|
brand:
|
||||||
|
label: Brand
|
||||||
|
icon: palette
|
||||||
|
fields:
|
||||||
|
logo:
|
||||||
|
type: files
|
||||||
|
multiple: false
|
||||||
|
layout: cards
|
||||||
|
image:
|
||||||
|
ratio: 1/1
|
||||||
|
back: white
|
||||||
|
width: 1/6
|
||||||
|
color:
|
||||||
|
label: Couleur
|
||||||
|
type: color
|
||||||
|
width: 2/6
|
||||||
|
files: tabs/files
|
||||||
21
public/site/blueprints/pages/clients.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
title: Clients
|
||||||
|
|
||||||
|
sections:
|
||||||
|
pages:
|
||||||
|
label: Tous les clients
|
||||||
|
status: all
|
||||||
|
templates: client
|
||||||
|
layout: table
|
||||||
|
columns:
|
||||||
|
title:
|
||||||
|
label: Nom
|
||||||
|
projectsListed:
|
||||||
|
label: En cours
|
||||||
|
value: "{{ page.projectsListed.count }}"
|
||||||
|
width: 1/12
|
||||||
|
projectsUnlisted:
|
||||||
|
label: Archivés
|
||||||
|
value: "{{ page.projectsUnlisted.count }}"
|
||||||
|
width: 1/12
|
||||||
|
image:
|
||||||
|
cover: true
|
||||||
|
|
@ -1,7 +1 @@
|
||||||
fields:
|
title: Home
|
||||||
testImages:
|
|
||||||
type: files
|
|
||||||
testText:
|
|
||||||
type: text
|
|
||||||
testBlocks:
|
|
||||||
type: blocks
|
|
||||||
|
|
|
||||||
67
public/site/blueprints/pages/project.yml
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
title: Projet
|
||||||
|
icon: page
|
||||||
|
|
||||||
|
tabs:
|
||||||
|
brief:
|
||||||
|
label: Brief client
|
||||||
|
icon: document
|
||||||
|
columns:
|
||||||
|
- width: 1/2
|
||||||
|
sections:
|
||||||
|
brief:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
client:
|
||||||
|
type: pages
|
||||||
|
multiple: false
|
||||||
|
query: site.find("clients").childrenAndDrafts
|
||||||
|
subpages: false
|
||||||
|
image:
|
||||||
|
query: page.logo.toFile
|
||||||
|
layout: cardlets
|
||||||
|
width: 1/2
|
||||||
|
briefClientPdf:
|
||||||
|
label: PDF
|
||||||
|
type: files
|
||||||
|
multiple: false
|
||||||
|
uploads: pdf
|
||||||
|
layout: cardlets
|
||||||
|
width: 1/2
|
||||||
|
- width: 1/2
|
||||||
|
sections:
|
||||||
|
description:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
description:
|
||||||
|
type: textarea
|
||||||
|
size: tiny
|
||||||
|
buttons: false
|
||||||
|
maxlength: 700
|
||||||
|
- width: 1/1
|
||||||
|
sections:
|
||||||
|
images:
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
briefClientImages:
|
||||||
|
label: Images
|
||||||
|
type: files
|
||||||
|
uploads: image
|
||||||
|
layout: cards
|
||||||
|
size: medium
|
||||||
|
# client:
|
||||||
|
# label: Client
|
||||||
|
# icon: account
|
||||||
|
# columns:
|
||||||
|
# - width: 1/1
|
||||||
|
# sections:
|
||||||
|
# client:
|
||||||
|
# type: fields
|
||||||
|
# fields:
|
||||||
|
# client:
|
||||||
|
# type: pages
|
||||||
|
# multiple: false
|
||||||
|
# query: site.find("clients").childrenAndDrafts
|
||||||
|
# subpages: false
|
||||||
|
# layout: cards
|
||||||
|
# size: medium
|
||||||
|
files: tabs/files
|
||||||
15
public/site/blueprints/pages/projects.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
title: Projets
|
||||||
|
|
||||||
|
sections:
|
||||||
|
drafts:
|
||||||
|
extends: sections/projects
|
||||||
|
headline: Brouillons
|
||||||
|
status: draft
|
||||||
|
listed:
|
||||||
|
extends: sections/projects
|
||||||
|
headline: En cours
|
||||||
|
status: listed
|
||||||
|
unlisted:
|
||||||
|
extends: sections/projects
|
||||||
|
headline: Archivés
|
||||||
|
status: unlisted
|
||||||
11
public/site/blueprints/sections/projects.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
type: pages
|
||||||
|
headline: Projets
|
||||||
|
template: project
|
||||||
|
layout: table
|
||||||
|
columns:
|
||||||
|
title:
|
||||||
|
label: Titre
|
||||||
|
client: true
|
||||||
|
empty: Pas encore de projet
|
||||||
|
image: false
|
||||||
|
search: true
|
||||||
|
|
@ -1,5 +1,41 @@
|
||||||
title: Site
|
title: Site
|
||||||
|
|
||||||
sections:
|
tabs:
|
||||||
pages:
|
dashboard:
|
||||||
type: pages
|
label: Dashboard
|
||||||
|
icon: dashboard
|
||||||
|
columns:
|
||||||
|
clients:
|
||||||
|
width: 1/2
|
||||||
|
sections:
|
||||||
|
clients:
|
||||||
|
label: Clients
|
||||||
|
type: pages
|
||||||
|
parent: site.find("clients")
|
||||||
|
template: client
|
||||||
|
search: true
|
||||||
|
image:
|
||||||
|
back: white
|
||||||
|
projects:
|
||||||
|
width: 1/2
|
||||||
|
sections:
|
||||||
|
projects:
|
||||||
|
extends: sections/projects
|
||||||
|
headline: Projets récement modifiés
|
||||||
|
parent: site.find("projects")
|
||||||
|
layout: list
|
||||||
|
sortBy: modified desc
|
||||||
|
settings:
|
||||||
|
label: Paramètres
|
||||||
|
icon: cog
|
||||||
|
columns:
|
||||||
|
- width: 1/1
|
||||||
|
sections:
|
||||||
|
settings:
|
||||||
|
label: Paramètres
|
||||||
|
type: fields
|
||||||
|
fields:
|
||||||
|
briefClientImagesTags:
|
||||||
|
label: Tags des images de Brief client
|
||||||
|
help: Ensemble des tags d’images disponibles lors de la création du Brief client
|
||||||
|
type: tags
|
||||||
|
|
|
||||||
15
public/site/blueprints/tabs/files.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
label:
|
||||||
|
en: Files
|
||||||
|
fr: Fichiers
|
||||||
|
icon: images
|
||||||
|
|
||||||
|
columns:
|
||||||
|
- width: 1/1
|
||||||
|
sections:
|
||||||
|
files:
|
||||||
|
label:
|
||||||
|
en: Files
|
||||||
|
fr: Fichiers
|
||||||
|
type: files
|
||||||
|
layout: cards
|
||||||
|
size: small
|
||||||
1
public/site/blueprints/users/admin.yml
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
title: Admin
|
||||||
4
public/site/blueprints/users/client.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
title: Client
|
||||||
|
permissions:
|
||||||
|
access:
|
||||||
|
panel: false
|
||||||
3
public/site/blueprints/users/project-manager.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
title:
|
||||||
|
fr: Chef·fe de projet
|
||||||
|
en: Project Manager
|
||||||
|
|
@ -7,7 +7,68 @@ return [
|
||||||
// Enable api access without SSL. To disable in production.
|
// Enable api access without SSL. To disable in production.
|
||||||
'allowInsecure' => true
|
'allowInsecure' => true
|
||||||
],
|
],
|
||||||
'content' => [
|
'panel' => [
|
||||||
'uuid' => false
|
'language' => 'fr',
|
||||||
|
'css' => 'assets/css/panel.css',
|
||||||
|
'favicon' => 'assets/favicons/favicon.svg',
|
||||||
|
'menu' => [
|
||||||
|
'site' => [
|
||||||
|
'label' => 'Dashboard',
|
||||||
|
'icon' => 'dashboard',
|
||||||
|
'current' => function (string $current): bool {
|
||||||
|
// the links of all your custom menu entries
|
||||||
|
$links = [
|
||||||
|
'pages/clients',
|
||||||
|
'pages/projects',
|
||||||
|
'pages/notifications',
|
||||||
|
'pages/events'
|
||||||
|
];
|
||||||
|
$path = Kirby\Cms\App::instance()->path();
|
||||||
|
return
|
||||||
|
$current === 'site' &&
|
||||||
|
A::every($links, fn ($link) => Str::contains($path, $link) === false);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'clients' => [
|
||||||
|
'label' => 'Clients',
|
||||||
|
'icon' => 'account',
|
||||||
|
'link' => 'pages/clients',
|
||||||
|
'current' => function (string $current): bool {
|
||||||
|
$path = Kirby\Cms\App::instance()->path();
|
||||||
|
return Str::contains($path, 'pages/clients');
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'projects' => [
|
||||||
|
'label' => 'Projets',
|
||||||
|
'icon' => 'folder',
|
||||||
|
'link' => 'pages/projects',
|
||||||
|
'current' => function (string $current): bool {
|
||||||
|
$path = Kirby\Cms\App::instance()->path();
|
||||||
|
return Str::contains($path, 'pages/projects');
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'-',
|
||||||
|
'notifications' => [
|
||||||
|
'label' => 'Notifications',
|
||||||
|
'icon' => 'bell',
|
||||||
|
'link' => 'pages/notifications',
|
||||||
|
'current' => function (string $current): bool {
|
||||||
|
$path = Kirby\Cms\App::instance()->path();
|
||||||
|
return Str::contains($path, 'pages/notifications');
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'events' => [
|
||||||
|
'label' => 'Événements',
|
||||||
|
'icon' => 'calendar',
|
||||||
|
'link' => 'pages/events',
|
||||||
|
'current' => function (string $current): bool {
|
||||||
|
$path = Kirby\Cms\App::instance()->path();
|
||||||
|
return Str::contains($path, 'pages/events');
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'-',
|
||||||
|
'users',
|
||||||
|
'system'
|
||||||
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
|
||||||
18
public/site/models/client.php
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
class ClientPage extends Page {
|
||||||
|
public function projects() {
|
||||||
|
return page('projects')->children()->filterBy('intendedTemplate', 'project')->filterBy(function($project) {
|
||||||
|
return $project->client()->toPage() === $this;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public function projectsListed() {
|
||||||
|
return page('projects')->children()->listed()->filterBy('intendedTemplate', 'project')->filterBy(function($project) {
|
||||||
|
return $project->client()->toPage() === $this;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public function projectsUnlisted() {
|
||||||
|
return page('projects')->children()->unlisted()->filterBy('intendedTemplate', 'project')->filterBy(function($project) {
|
||||||
|
return $project->client()->toPage() === $this;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
31
src/assets/css/index.css
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
@charset "UTF-8";
|
||||||
|
|
||||||
|
@import 'src/0.0.reset.css';
|
||||||
|
@import 'src/0.1.fonts.css';
|
||||||
|
@import 'src/0.2.variables.css';
|
||||||
|
|
||||||
|
/* GLOBAL CSS */
|
||||||
|
@import 'src/1.0.global.css';
|
||||||
|
|
||||||
|
/* COMPOSITIONS */
|
||||||
|
@import 'src/1.1.compositions.auto-grid.css';
|
||||||
|
@import 'src/1.2.compositions.grid.css';
|
||||||
|
@import 'src/1.3.compositions.flex.css';
|
||||||
|
@import 'src/1.4.compositions.with-sidebar.css';
|
||||||
|
|
||||||
|
/* BLOCKS */
|
||||||
|
@import 'src/2.blocks.button.css';
|
||||||
|
@import 'src/2.blocks.card.css';
|
||||||
|
@import 'src/2.blocks.header.css';
|
||||||
|
@import 'src/2.blocks.pill.css';
|
||||||
|
@import 'src/2.blocks.skip-link.css';
|
||||||
|
|
||||||
|
/* UTILITY CLASSES */
|
||||||
|
@import 'src/3.utilities.border.css';
|
||||||
|
@import 'src/3.utilities.flow.css';
|
||||||
|
@import 'src/3.utilities.icons.css';
|
||||||
|
@import 'src/3.utilities.overflow.css';
|
||||||
|
@import 'src/3.utilities.screen-readers.css';
|
||||||
|
@import 'src/3.utilities.size.css';
|
||||||
|
@import 'src/3.utilities.spacing.css';
|
||||||
|
@import 'src/3.utilities.text.css';
|
||||||
84
src/assets/css/src/0.0.reset.css
Executable file
|
|
@ -0,0 +1,84 @@
|
||||||
|
/* RESET */
|
||||||
|
/* Modified version of Modern CSS Reset by Piccalilli https://piccalil.li/blog/a-more-modern-css-reset/ */
|
||||||
|
|
||||||
|
|
||||||
|
/* Box sizing rules */
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prevent font size inflation */
|
||||||
|
html {
|
||||||
|
-moz-text-size-adjust: none;
|
||||||
|
-webkit-text-size-adjust: none;
|
||||||
|
text-size-adjust: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove default margin in favour of better control in authored CSS */
|
||||||
|
body, h1, h2, h3, h4, p,
|
||||||
|
figure, blockquote, dl, dd {
|
||||||
|
margin: 0;
|
||||||
|
margin-block-end: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set core body defaults */
|
||||||
|
body {
|
||||||
|
min-height: 100vh;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set shorter line heights on headings and interactive elements */
|
||||||
|
h1, h2, h3, h4,
|
||||||
|
button, input, label {
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Balance text wrapping on headings */
|
||||||
|
h1, h2,
|
||||||
|
h3, h4 {
|
||||||
|
text-wrap: balance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A elements that don't have a class get default styles */
|
||||||
|
a:not([class]) {
|
||||||
|
text-decoration-skip-ink: auto;
|
||||||
|
color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make images easier to work with */
|
||||||
|
img,
|
||||||
|
picture {
|
||||||
|
max-width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inherit fonts for inputs and buttons */
|
||||||
|
input, button,
|
||||||
|
textarea, select {
|
||||||
|
-webkit-appareance: none;
|
||||||
|
appearance: none;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure textareas without a rows attribute are not tiny */
|
||||||
|
textarea:not([rows]) {
|
||||||
|
min-height: 10em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Anything that has been anchored to should have extra scroll margin */
|
||||||
|
:target {
|
||||||
|
scroll-margin-block: 5ex;
|
||||||
|
}
|
||||||
4
src/assets/css/src/0.1.fonts.css
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
/* FONTS */
|
||||||
|
|
||||||
|
/* Font sans */
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Vollkorn:wght@400..500&display=swap');
|
||||||
81
src/assets/css/src/0.2.variables.css
Executable file
|
|
@ -0,0 +1,81 @@
|
||||||
|
/* CSS VARIABLES */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
|
||||||
|
/* Fonts */
|
||||||
|
--font-sans: "Cera Pro", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
--font-serif: "Vollkorn", serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
|
||||||
|
/* Colors */
|
||||||
|
--color-white-10: hsla(0, 0%, 100%, .1); /* White 10 */
|
||||||
|
--color-white-100: hsla(0, 0%, 100%, 1); /* White 100 */
|
||||||
|
--color-white: var(--color-white-100); /* White */
|
||||||
|
--color-grey-50: hsla(0, 0%, 95%, 1); /* Light Grey */
|
||||||
|
--color-grey-200: hsla(0, 0%, 85%, 1); /* Grey - 01 */
|
||||||
|
--color-grey-300: hsla(0, 0%, 74%, 1);
|
||||||
|
--color-grey-400: hsla(180, 2%, 62%, 1); /* Grey - 02 */
|
||||||
|
--color-grey-700: hsla(180, 1%, 37%, 1); /* Grey - 03 */
|
||||||
|
--color-black: hsla(0, 0%, 10%, 1); /* Black */
|
||||||
|
--color-primary-10: hsla(177, 100%, 29%, .1); /* Focus 10% */
|
||||||
|
--color-primary-20: hsla(177, 100%, 29%, .2); /* Focus 20% */
|
||||||
|
--color-primary-40: hsla(177, 100%, 29%, .4); /* Focus 40% */
|
||||||
|
--color-primary-70: hsla(177, 100%, 29%, .7); /* Focus 70% */
|
||||||
|
--color-primary-100: hsla(177, 100%, 29%, 1); /* Focus 100% */
|
||||||
|
--color-primary: var(--color-primary-100); /* Focus */
|
||||||
|
--color-brand-100: hsla(347, 84%, 45%, 1); /* Brand 100% */
|
||||||
|
--color-brand: var(--color-brand-100); /* Brand */
|
||||||
|
--color-background: var(--color-white);
|
||||||
|
--color-text: var(--color-black);
|
||||||
|
--color-focus-ring: var(--color-primary-100);
|
||||||
|
--color-disabled: var(--color-grey-400);
|
||||||
|
|
||||||
|
/* Space scale */
|
||||||
|
--space: .275em; /* typographic space */
|
||||||
|
--space-xs: .25rem; /* 4px */
|
||||||
|
--space-sm: .5rem; /* 8px */
|
||||||
|
--space-md: .75rem; /* 12px */
|
||||||
|
--space-lg: 1rem; /* 16px */
|
||||||
|
--space-xl: 1.5rem; /* 24px */
|
||||||
|
--space-2xl: 2rem; /* 32px */
|
||||||
|
|
||||||
|
/* Type scale */
|
||||||
|
--text-xs: .75rem; /* 12px */
|
||||||
|
--text-sm: .875rem; /* 14px */
|
||||||
|
--text-md: 1rem; /* 16px */
|
||||||
|
--text-lg: 1.5rem; /* 24px */
|
||||||
|
|
||||||
|
/* Leading */
|
||||||
|
--leading-none: 1;
|
||||||
|
--leading-sm: 1.25;
|
||||||
|
--leading-md: 1.4285714286; /* 20/14 */
|
||||||
|
--leading-lg: 1.5; /* 24/16 */
|
||||||
|
|
||||||
|
/* Tracking */
|
||||||
|
--tracking-wide: 0.01em;
|
||||||
|
|
||||||
|
/* Layout */
|
||||||
|
--gutter: 32px;
|
||||||
|
--header-height: 3.5rem; /* 56px */
|
||||||
|
--sidebar-width: 22.25rem; /* 356px */
|
||||||
|
--flow-space: 1rem;
|
||||||
|
--auto-grid-placement: auto-fill;
|
||||||
|
--gap: var(--space-lg);
|
||||||
|
|
||||||
|
/* Borders */
|
||||||
|
--rounded-xs: 1px;
|
||||||
|
--rounded-sm: 4px;
|
||||||
|
--rounded-md: 12px;
|
||||||
|
--rounded-lg: 20px;
|
||||||
|
--rounded-full: 9999px;
|
||||||
|
--border-width: 1px;
|
||||||
|
--border-color: var(--color-black);
|
||||||
|
--border: var(--border-width) solid var(--border-color);
|
||||||
|
|
||||||
|
/* Prose */
|
||||||
|
--max-width: 64ch;
|
||||||
|
|
||||||
|
/* Transitions */
|
||||||
|
--timing: 200ms;
|
||||||
|
--easing: ease;
|
||||||
|
|
||||||
|
}
|
||||||
262
src/assets/css/src/1.0.global.css
Normal file
|
|
@ -0,0 +1,262 @@
|
||||||
|
/* GLOBAL CSS */
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 100%;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font: var(--text-md)/var(--leading-md) var(--font-sans);
|
||||||
|
letter-spacing: var(--tracking-wide);
|
||||||
|
text-rendering: optimizeSpeed;
|
||||||
|
font-variant-ligatures: common-ligatures;
|
||||||
|
-moz-font-feature-settings: "liga", "clig";
|
||||||
|
-webkit-font-feature-settings: "liga", "clig";
|
||||||
|
font-feature-settings: "liga", "clig";
|
||||||
|
background-color: var(--color-grey-50);
|
||||||
|
color: var(--color-text, black);
|
||||||
|
padding: 2rem var(--gutter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If an element is [hidden] it needs to be max priority */
|
||||||
|
.hidden, [hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Disabled state */
|
||||||
|
.disabled, [disabled] {
|
||||||
|
opacity: var(--alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Placeholder */
|
||||||
|
::placeholder {
|
||||||
|
font: inherit;
|
||||||
|
color: rgba(0, 0, 0, .54);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Main */
|
||||||
|
main {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Headings */
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-size: var(--text-md);
|
||||||
|
font-weight: 400;
|
||||||
|
text-wrap: balance;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 > a,
|
||||||
|
h2 > a,
|
||||||
|
h3 > a,
|
||||||
|
h4 > a,
|
||||||
|
h5 > a,
|
||||||
|
h6 > a {
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:not(.sr-only) + h2,
|
||||||
|
*:not(.sr-only) + h3 {
|
||||||
|
margin-top: var(--space-xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* General typesetting */
|
||||||
|
|
||||||
|
p {
|
||||||
|
max-width: 40em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Lists */
|
||||||
|
|
||||||
|
ul:not([class]),
|
||||||
|
ol:not([class]) {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Blockquotes */
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
blockquote > * {
|
||||||
|
padding-left: var(--space-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Separators */
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border: none;
|
||||||
|
border-top: var(--border);
|
||||||
|
margin-inline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr,
|
||||||
|
hr + * {
|
||||||
|
--flow-space: var(--space-xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sub and sup */
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
vertical-align: sub;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
vertical-align: middle;
|
||||||
|
position: relative;
|
||||||
|
top: -1ex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Details */
|
||||||
|
|
||||||
|
summary {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
list-style: none;
|
||||||
|
cursor: pointer;
|
||||||
|
width: fit-content;
|
||||||
|
display: flex;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
summary::-webkit-details-marker,
|
||||||
|
summary::marker {
|
||||||
|
display: none;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
summary::before {
|
||||||
|
content: '+';
|
||||||
|
margin-right: var(--space);
|
||||||
|
}
|
||||||
|
summary + p {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
summary + .gallery,
|
||||||
|
summary + figure {
|
||||||
|
margin-top: .5em;
|
||||||
|
}
|
||||||
|
details > *:last-child {
|
||||||
|
margin-bottom: var(--space-xs);
|
||||||
|
}
|
||||||
|
details[open] > summary::before {
|
||||||
|
content: '−';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Media */
|
||||||
|
|
||||||
|
figure {
|
||||||
|
width: fit-content;
|
||||||
|
height: fit-content;
|
||||||
|
}
|
||||||
|
figcaption {
|
||||||
|
font-size: var(--text-md);
|
||||||
|
margin: .16666667em 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
figcaption::before {
|
||||||
|
float: right;
|
||||||
|
margin-left: var(--gap);
|
||||||
|
}
|
||||||
|
figure + p {
|
||||||
|
margin-top: var(--space-xs);
|
||||||
|
}
|
||||||
|
|
||||||
|
video {
|
||||||
|
background-color: var(--color-gray);
|
||||||
|
max-width: 100%;
|
||||||
|
border-radius: var(--rounded-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selects images that are likely to have a transparent BG and applies a */
|
||||||
|
/* theme-driven mask to them */
|
||||||
|
img[src$='.svg'],
|
||||||
|
img[src$='.png'] {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
object-fit: cover;
|
||||||
|
background-size: cover;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
[data-ratio="auto"] img {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color: currentColor;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.link-full::after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 1;
|
||||||
|
transition: outline var(--timing) var(--easing);
|
||||||
|
}
|
||||||
|
a.link-full:focus-visible {
|
||||||
|
outline-width: 0;
|
||||||
|
}
|
||||||
|
a.link-full:focus-visible::after {
|
||||||
|
outline: none;
|
||||||
|
outline-offset: 2px;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Form, Input, Buttons */
|
||||||
|
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
gap: var(--space-xs);
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
font: inherit;
|
||||||
|
max-height: 1.125rem; /* 18px */
|
||||||
|
}
|
||||||
|
[type="search"]::-webkit-search-cancel-button,
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* General interactive states */
|
||||||
|
|
||||||
|
:focus-visible {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* High contrast selection style */
|
||||||
|
::selection {
|
||||||
|
background: var(--color-grey);
|
||||||
|
}
|
||||||
13
src/assets/css/src/1.1.compositions.auto-grid.css
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
/* AUTO-GRID COMPOSITION */
|
||||||
|
|
||||||
|
.auto-grid {
|
||||||
|
--column-gap: var(--gap);
|
||||||
|
--row-gap: var(--gap);
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(
|
||||||
|
var(--auto-grid-placement, auto-fill),
|
||||||
|
minmax(var(--min, 50%), 1fr)
|
||||||
|
);
|
||||||
|
grid-gap: var(--row-gap) var(--column-gap);
|
||||||
|
gap: var(--row-gap) var(--column-gap);
|
||||||
|
}
|
||||||
55
src/assets/css/src/1.2.compositions.grid.css
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
/* LAYOUT GRID */
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
--gap: var(--gutter);
|
||||||
|
--column-gap: var(--gap);
|
||||||
|
--row-gap: var(--gap);
|
||||||
|
display: -ms-grid;
|
||||||
|
display: grid;
|
||||||
|
grid-gap: var(--column-gap) var(--row-gap);
|
||||||
|
gap: var(--column-gap) var(--row-gap);
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid > .column {
|
||||||
|
margin-bottom: var(--gap);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: var(--justify-content, flex-start);
|
||||||
|
align-items: var(--align-items, baseline);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 35rem) { /* >= 560px */
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
-ms-grid-columns: repeat(6, 1fr);
|
||||||
|
grid-template-columns: repeat(6, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid > .column {
|
||||||
|
-ms-grid-column: span 6;
|
||||||
|
grid-column: span 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid > .column[style*="--columns:3"] {
|
||||||
|
-ms-grid-column: span 3;
|
||||||
|
grid-column: span 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 67.5rem) { /* >= 1080px */
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
-ms-grid-columns: repeat(12, 1fr);
|
||||||
|
grid-template-columns: repeat(12, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid > .column {
|
||||||
|
-ms-grid-column: span var(--columns);
|
||||||
|
grid-column: span var(--columns);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
11
src/assets/css/src/1.3.compositions.flex.css
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
/* FLEX COMPOSITION */
|
||||||
|
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: var(--direction, row);
|
||||||
|
flex-wrap: var(--wrap, wrap);
|
||||||
|
align-items: var(--items, center);
|
||||||
|
justify-content: var(--justify, flex-start);
|
||||||
|
column-gap: var(--column-gap, var(--gutter, var(--space-sm)));
|
||||||
|
row-gap: var(--row-gap, var(--gutter, var(--space-sm)));
|
||||||
|
}
|
||||||
18
src/assets/css/src/1.4.compositions.with-sidebar.css
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
/* SIDEBAR COMPOSITION */
|
||||||
|
|
||||||
|
.with-sidebar {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: var(--space-2xl);
|
||||||
|
}
|
||||||
|
|
||||||
|
.with-sidebar > :first-child {
|
||||||
|
flex-basis: var(--sidebar-width);
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.with-sidebar > :last-child {
|
||||||
|
flex-basis: 0;
|
||||||
|
flex-grow: 999;
|
||||||
|
min-inline-size: 50%;
|
||||||
|
}
|
||||||
48
src/assets/css/src/2.blocks.button.css
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
/* BUTTON BLOCK */
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
--background: var(--color-primary-100);
|
||||||
|
--color: var(--color-white);
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: var(--space-md) var(--space-lg);
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: var(--text-sm);
|
||||||
|
line-height: var(--leading-md);
|
||||||
|
font-weight: 500;
|
||||||
|
border-radius: var(--rounded-md);
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: var(--background, var(--color-primary-100));
|
||||||
|
color: var(--color, var(--color-white));
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn--secondary {
|
||||||
|
--background: var(--color-primary-10);
|
||||||
|
--color: var(--color-primary-100);
|
||||||
|
}
|
||||||
|
.btn--black {
|
||||||
|
--background: var(--color-black);
|
||||||
|
--color: var(--color-white);
|
||||||
|
}
|
||||||
|
.btn--white {
|
||||||
|
--background: var(--color-white);
|
||||||
|
--color: var(--color-grey-700);
|
||||||
|
}
|
||||||
|
.btn--white-10 {
|
||||||
|
--background: var(--color-white-10);
|
||||||
|
--color: var(--color-white);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (hover: hover) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:focus-visible {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn:active {
|
||||||
|
|
||||||
|
}
|
||||||
29
src/assets/css/src/2.blocks.card.css
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
/* CARD BLOCK */
|
||||||
|
|
||||||
|
.card {
|
||||||
|
--padding: clamp(1.5rem, 0.5rem + 5vw, 5rem);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
padding: var(--padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card__title > a {
|
||||||
|
font: inherit;
|
||||||
|
color: currentColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card__date {
|
||||||
|
position: absolute;
|
||||||
|
bottom: var(--padding);
|
||||||
|
right: var(--padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover {
|
||||||
|
background-color: var(--color-background-hover);
|
||||||
|
}
|
||||||
11
src/assets/css/src/2.blocks.header.css
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
/* HEADER BLOCK */
|
||||||
|
|
||||||
|
.header {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
min-height: var(--header-height);
|
||||||
|
padding: 0 var(--gutter);
|
||||||
|
margin-bottom: var(--space-xl);
|
||||||
|
}
|
||||||
|
|
||||||
27
src/assets/css/src/2.blocks.pill.css
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
/* PILL BLOCK */
|
||||||
|
|
||||||
|
.pill {
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--space-sm);
|
||||||
|
padding: var(--space-xs) var(--space-md);
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: var(--text-sm);
|
||||||
|
font-weight: 500;
|
||||||
|
border-radius: var(--rounded-full);
|
||||||
|
background-color: var(--background, var(--color-primary-100));
|
||||||
|
color: var(--color, var(--color-white));
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pill--secondary {
|
||||||
|
--background: var(--color-primary-10);
|
||||||
|
--color: var(--color-primary-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
.pill[data-icon] {
|
||||||
|
padding: var(--space-sm) var(--space-lg);
|
||||||
|
}
|
||||||
|
|
||||||
34
src/assets/css/src/2.blocks.skip-link.css
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
/* SKIP-LINK BLOCK */
|
||||||
|
|
||||||
|
/* The skip link is visually hidden when it is not focused. */
|
||||||
|
/* It exists so when a user hits tab on load, they can quickly */
|
||||||
|
/* skip to the main content of the site—avoiding navigation etc */
|
||||||
|
.skip-link {
|
||||||
|
z-index: 9999;
|
||||||
|
display: inline-block;
|
||||||
|
width: max-content;
|
||||||
|
max-width: 10rem;
|
||||||
|
right: var(--gutter);
|
||||||
|
width: auto;
|
||||||
|
line-height: 1;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-link:focus,
|
||||||
|
.skip-link:focus-visible {
|
||||||
|
background: var(--color-text);
|
||||||
|
color: var(--color-background) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-link:not(:focus) {
|
||||||
|
/* @extend .visually-hidden */
|
||||||
|
border: 0;
|
||||||
|
clip-path: polygon(0% 0%, 0% 0%, 0% 0%, 0% 0%);
|
||||||
|
height: 0;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
17
src/assets/css/src/3.utilities.border.css
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
/* BORDER UTILITY */
|
||||||
|
|
||||||
|
/* Borders */
|
||||||
|
|
||||||
|
.border-t { border-top: var(--border) }
|
||||||
|
.border-b { border-bottom: var(--border) }
|
||||||
|
.border-l { border-left: var(--border) }
|
||||||
|
.border-r { border-right: var(--border) }
|
||||||
|
.border { border: var(--border) }
|
||||||
|
|
||||||
|
/* Border radius */
|
||||||
|
|
||||||
|
.rounded-xs { border-radius: var(--rounded-xs) }
|
||||||
|
.rounded-sm { border-radius: var(--rounded-sm) }
|
||||||
|
.rounded-md { border-radius: var(--rounded-md) }
|
||||||
|
.rounded-lg { border-radius: var(--rounded-lg) }
|
||||||
|
.rounded-full { border-radius: var(--rounded-gull) }
|
||||||
6
src/assets/css/src/3.utilities.flow.css
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
/* FLOW UTILITY */
|
||||||
|
/* Info: https://web.dev/design-system/css-utilities/#flow */
|
||||||
|
|
||||||
|
.flow > * + * {
|
||||||
|
margin-top: var(--flow-space);
|
||||||
|
}
|
||||||
43
src/assets/css/src/3.utilities.icons.css
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
/* ICONS UTILITY */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--icon-circle: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='50%' cy='50%' r='8' stroke='currentColor' stroke-width='1.25'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-point: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='50%' cy='50%' r='4' fill='currentColor'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-point-active: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='50%' cy='50%' r='4' fill='currentColor'/%3E%3Ccircle cx='50%' cy='50%' r='8' fill='currentColor' opacity='0.2'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-home: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.875 10L10 1.875L18.125 10M4.375 11.875V18.125H15.625V11.875' stroke='currentColor' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-calendar: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M3.125 4.375C2.79348 4.375 2.47554 4.5067 2.24112 4.74112C2.0067 4.97554 1.875 5.29348 1.875 5.625V16.875C1.875 17.2065 2.0067 17.5245 2.24112 17.7589C2.47554 17.9933 2.79348 18.125 3.125 18.125H16.875C17.2065 18.125 17.5245 17.9933 17.7589 17.7589C17.9933 17.5245 18.125 17.2065 18.125 16.875V5.625C18.125 5.29348 17.9933 4.97554 17.7589 4.74112C17.5245 4.5067 17.2065 4.375 16.875 4.375H14.375M1.875 9.375H18.125M5.625 1.875V6.875M14.375 1.875V6.875M5.625 4.375H11.875' stroke='currentColor' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-check: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.875 11.9375L5.2875 16.325C5.40265 16.4746 5.5502 16.5962 5.71906 16.6806C5.88792 16.7651 6.07372 16.8101 6.2625 16.8125C6.44824 16.8146 6.63213 16.7754 6.80078 16.6975C6.96944 16.6197 7.11863 16.5052 7.2375 16.3625L18.125 3.1875' stroke='currentColor' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
||||||
|
--icon-check-3: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.875 11.9375L5.2875 16.325C5.40265 16.4746 5.5502 16.5962 5.71906 16.6806C5.88792 16.7651 6.07372 16.8101 6.2625 16.8125C6.44824 16.8146 6.63213 16.7754 6.80078 16.6975C6.96944 16.6197 7.11863 16.5052 7.2375 16.3625L18.125 3.1875' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
||||||
|
--icon-user: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.6625 16.125C5.2203 15.2094 6.00426 14.4527 6.93901 13.9276C7.87376 13.4025 8.92787 13.1267 10 13.1267C11.0721 13.1267 12.1262 13.4025 13.061 13.9276C13.9957 14.4527 14.7797 15.2094 15.3375 16.125M13.125 8.125C13.125 9.85089 11.7259 11.25 10 11.25C8.27411 11.25 6.875 9.85089 6.875 8.125C6.875 6.39911 8.27411 5 10 5C11.7259 5 13.125 6.39911 13.125 8.125ZM18.125 10C18.125 14.4873 14.4873 18.125 10 18.125C5.51269 18.125 1.875 14.4873 1.875 10C1.875 5.51269 5.51269 1.875 10 1.875C14.4873 1.875 18.125 5.51269 18.125 10Z' stroke='currentColor' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-megaphone: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.85 14.4624C11.7448 15.3307 11.3125 16.1262 10.6412 16.687C9.96999 17.2477 9.11024 17.5315 8.23708 17.4805C7.36393 17.4295 6.54305 17.0476 5.94162 16.4125C5.34019 15.7775 5.00346 14.937 5 14.0624V12.0749M17.3 16.3374L2.7125 11.2499C2.47448 11.1669 2.26713 11.0138 2.11767 10.8108C1.96821 10.6078 1.88362 10.3644 1.875 10.1124V8.74991C1.87603 8.49151 1.95711 8.23979 2.10709 8.02937C2.25707 7.81895 2.46858 7.66018 2.7125 7.57491L17.3 2.49991C17.3937 2.46828 17.4935 2.45931 17.5913 2.47374C17.6891 2.48817 17.782 2.5256 17.8626 2.58294C17.9431 2.64028 18.0089 2.7159 18.0545 2.8036C18.1001 2.89129 18.1243 2.98856 18.125 3.08741V15.7499C18.1243 15.8488 18.1001 15.946 18.0545 16.0337C18.0089 16.1214 17.9431 16.197 17.8626 16.2544C17.782 16.3117 17.6891 16.3491 17.5913 16.3636C17.4935 16.378 17.3937 16.369 17.3 16.3374Z' stroke='currentColor' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
--icon-inspiration: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.0004 2.26245V4.13745M15.0004 4.04995L13.6754 5.38745M17.8504 7.92495H15.9754M5.00039 4.04995L6.32539 5.38745M2.15039 7.92495H4.02539M14.3754 11.25C14.3783 10.4699 14.1726 9.70317 13.7796 9.02932C13.3865 8.35547 12.8205 7.79897 12.14 7.41746C11.4596 7.03595 10.6895 6.84332 9.90957 6.85952C9.12964 6.87572 8.36823 7.10016 7.70421 7.50959C7.04019 7.91903 6.49773 8.49856 6.13301 9.18815C5.7683 9.87774 5.5946 10.6523 5.6299 11.4316C5.66521 12.2109 5.90825 12.9666 6.33383 13.6204C6.75942 14.2741 7.35207 14.8022 8.05039 15.15V17.3C8.05365 17.4271 8.10645 17.5479 8.19752 17.6366C8.28859 17.7254 8.41073 17.775 8.53789 17.775H11.4629C11.59 17.775 11.7122 17.7254 11.8033 17.6366C11.8943 17.5479 11.9471 17.4271 11.9504 17.3V15.1125C12.6707 14.7539 13.2782 14.2036 13.706 13.5222C14.1338 12.8407 14.3654 12.0545 14.3754 11.25Z' stroke='currentColor' stroke-width='1.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-icon] {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-icon]::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--icon-size, 1.25rem);
|
||||||
|
height: var(--icon-size, 1.25rem);
|
||||||
|
background: var(--icon-color, currentColor);
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
mask-size: var(--icon-size, 1.25rem);
|
||||||
|
mask-image: var(--icon, var(--icon-circle));
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-icon="home"] {
|
||||||
|
--icon: var(--icon-home)
|
||||||
|
}
|
||||||
|
[data-icon="calendar"] {
|
||||||
|
--icon: var(--icon-calendar)
|
||||||
|
}
|
||||||
|
[data-icon="megaphone"] {
|
||||||
|
--icon: var(--icon-megaphone)
|
||||||
|
}
|
||||||
|
[data-icon="inspiration"] {
|
||||||
|
--icon: var(--icon-inspiration)
|
||||||
|
}
|
||||||
5
src/assets/css/src/3.utilities.overflow.css
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
/* OVERFLOW UTILITY */
|
||||||
|
|
||||||
|
.overflow-y-hidden {
|
||||||
|
overflow-y: hidden !important;
|
||||||
|
}
|
||||||
13
src/assets/css/src/3.utilities.screen-readers.css
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
/* SCREEN READERS */
|
||||||
|
|
||||||
|
.sr-only {
|
||||||
|
border: 0;
|
||||||
|
clip-path: polygon(0% 0%, 0% 0%, 0% 0%, 0% 0%);
|
||||||
|
height: 0;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
12
src/assets/css/src/3.utilities.size.css
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
/* SIZE UTILITY */
|
||||||
|
|
||||||
|
.h-full {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.min-h-screen {
|
||||||
|
min-height: 100vh;
|
||||||
|
min-height: 100dvh;
|
||||||
|
}
|
||||||
|
.w-full {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
84
src/assets/css/src/3.utilities.spacing.css
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
/* SPACING UTILITY */
|
||||||
|
|
||||||
|
/* Margins */
|
||||||
|
|
||||||
|
.m-0 { margin: 0 }
|
||||||
|
|
||||||
|
.mb-0 { margin-bottom: 0 }
|
||||||
|
.mb-xs { margin-bottom: var(--space-xs) }
|
||||||
|
.mb-sm { margin-bottom: var(--space-sm) }
|
||||||
|
.mb-md { margin-bottom: var(--space-md) }
|
||||||
|
.mb-lg { margin-bottom: var(--space-lg) }
|
||||||
|
.mb-xl { margin-bottom: var(--space-xl) }
|
||||||
|
.mb-2xl { margin-bottom: var(--space-2xl) }
|
||||||
|
|
||||||
|
.ml-auto { margin-left: auto }
|
||||||
|
.ml-xs { margin-left: var(--space-xs) }
|
||||||
|
.ml-sm { margin-left: var(--space-sm) }
|
||||||
|
.ml-md { margin-left: var(--space-md) }
|
||||||
|
.ml-lg { margin-left: var(--space-lg) }
|
||||||
|
.ml-xl { margin-left: var(--space-xl) }
|
||||||
|
|
||||||
|
.mr-auto { margin-right: auto }
|
||||||
|
.mr-xs { margin-right: var(--space-xs) }
|
||||||
|
.mr-sm { margin-right: var(--space-sm) }
|
||||||
|
.mr-md { margin-right: var(--space-md) }
|
||||||
|
.mr-lg { margin-right: var(--space-lg) }
|
||||||
|
.mr-xl { margin-right: var(--space-xl) }
|
||||||
|
|
||||||
|
.-mt-px { margin-top: -1px }
|
||||||
|
.mt-0 { margin-top: 0 }
|
||||||
|
.mt-xs { margin-top: var(--space-xs) }
|
||||||
|
.mt-sm { margin-top: var(--space-sm) }
|
||||||
|
.mt-md { margin-top: var(--space-md) }
|
||||||
|
.mt-lg { margin-top: var(--space-lg) }
|
||||||
|
.mt-xl { margin-top: var(--space-xl) }
|
||||||
|
.mt-2xl { margin-top: var(--space-2xl) }
|
||||||
|
|
||||||
|
.mx-px { margin-left: 1px ; margin-right: 1px }
|
||||||
|
.mx-xs { margin-left: var(--space-xs) ; margin-right: var(--space-xs) }
|
||||||
|
.mx-sm { margin-left: var(--space-sm) ; margin-right: var(--space-sm) }
|
||||||
|
.mx-md { margin-left: var(--space-md) ; margin-right: var(--space-md) }
|
||||||
|
.mx-lg { margin-left: var(--space-lg) ; margin-right: var(--space-lg) }
|
||||||
|
.mx-xl { margin-left: var(--space-xl) ; margin-right: var(--space-xl) }
|
||||||
|
.mx-2xl { margin-left: var(--space-2xl); margin-right: var(--space-2xl) }
|
||||||
|
|
||||||
|
.my-xs { margin-top: var(--space-xs) ; margin-bottom: var(--space-xs) }
|
||||||
|
.my-sm { margin-top: var(--space-sm) ; margin-bottom: var(--space-sm) }
|
||||||
|
.my-md { margin-top: var(--space-md) ; margin-bottom: var(--space-md) }
|
||||||
|
.my-lg { margin-top: var(--space-lg) ; margin-bottom: var(--space-lg) }
|
||||||
|
.my-xl { margin-top: var(--space-xl) ; margin-bottom: var(--space-xl) }
|
||||||
|
.my-2xl { margin-top: var(--space-2xl); margin-bottom: var(--space-2xl) }
|
||||||
|
|
||||||
|
|
||||||
|
/* Padding */
|
||||||
|
|
||||||
|
.pl-0 { padding-left: 0 }
|
||||||
|
|
||||||
|
.pt-xs { padding-top: var(--space-xs) }
|
||||||
|
.pt-sm { padding-top: var(--space-sm) }
|
||||||
|
.pt-md { padding-top: var(--space-md) }
|
||||||
|
.pt-lg { padding-top: var(--space-lg) }
|
||||||
|
.pt-xl { padding-top: var(--space-xl) }
|
||||||
|
.pt-2xl { padding-top: var(--space-2xl) }
|
||||||
|
|
||||||
|
.pb-xs { padding-bottom: var(--space-xs) }
|
||||||
|
.pb-sm { padding-bottom: var(--space-sm) }
|
||||||
|
.pb-md { padding-bottom: var(--space-md) }
|
||||||
|
.pb-lg { padding-bottom: var(--space-lg) }
|
||||||
|
.pb-xl { padding-bottom: var(--space-xl) }
|
||||||
|
.pb-2xl { padding-bottom: var(--space-2xl) }
|
||||||
|
|
||||||
|
.px-xs { padding-left: var(--space-xs) ; padding-right: var(--space-xs) }
|
||||||
|
.px-sm { padding-left: var(--space-sm) ; padding-right: var(--space-sm) }
|
||||||
|
.px-md { padding-left: var(--space-md) ; padding-right: var(--space-md) }
|
||||||
|
.px-lg { padding-left: var(--space-lg) ; padding-right: var(--space-lg) }
|
||||||
|
.px-xl { padding-left: var(--space-xl) ; padding-right: var(--space-xl) }
|
||||||
|
.px-2xl { padding-left: var(--space-2xl); padding-right: var(--space-2xl) }
|
||||||
|
|
||||||
|
.py-xs { padding-top: var(--space-xs) ; padding-bottom: var(--space-xs) }
|
||||||
|
.py-sm { padding-top: var(--space-sm) ; padding-bottom: var(--space-sm) }
|
||||||
|
.py-md { padding-top: var(--space-md) ; padding-bottom: var(--space-md) }
|
||||||
|
.py-lg { padding-top: var(--space-lg) ; padding-bottom: var(--space-lg) }
|
||||||
|
.py-xl { padding-top: var(--space-xl) ; padding-bottom: var(--space-xl) }
|
||||||
|
.py-2xl { padding-top: var(--space-2xl); padding-bottom: var(--space-2xl) }
|
||||||
92
src/assets/css/src/3.utilities.text.css
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
/* TEXT UTILITY */
|
||||||
|
|
||||||
|
/* Font family */
|
||||||
|
|
||||||
|
.font-serif {
|
||||||
|
font-family: var(--font-serif);
|
||||||
|
font-optical-sizing: auto;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Fonts weights */
|
||||||
|
|
||||||
|
.font-normal {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
.font-medium {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Font sizes */
|
||||||
|
|
||||||
|
.text-sm {
|
||||||
|
font-size: var(--text-sm); /* 14px */
|
||||||
|
line-height: 1.4285714286; /* 20px */
|
||||||
|
}
|
||||||
|
.text-md {
|
||||||
|
font-size: var(--text-md); /* 16px */
|
||||||
|
line-height: 1.5; /* 24px */
|
||||||
|
}
|
||||||
|
.text-lg {
|
||||||
|
font-size: var(--text-lg); /* 24px */
|
||||||
|
line-height: 1.5; /* 36px */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Case */
|
||||||
|
|
||||||
|
.uppercase {
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.333;
|
||||||
|
letter-spacing: 0.3rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Text align */
|
||||||
|
|
||||||
|
.text-right { text-align: right }
|
||||||
|
.text-center { text-align: center }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Text colors */
|
||||||
|
|
||||||
|
.text-white {
|
||||||
|
color: var(--color-white);
|
||||||
|
}
|
||||||
|
.text-grey-200 {
|
||||||
|
color: var(--color-grey-200);
|
||||||
|
}
|
||||||
|
.text-grey-400 {
|
||||||
|
color: var(--color-grey-400);
|
||||||
|
}
|
||||||
|
.text-grey-700 {
|
||||||
|
color: var(--color-grey-700);
|
||||||
|
}
|
||||||
|
.text-background {
|
||||||
|
color: var(--color-background);
|
||||||
|
}
|
||||||
|
.text-transparent {
|
||||||
|
color: transparent;
|
||||||
|
}
|
||||||
|
.text-brand-100 {
|
||||||
|
color: var(--color-brand-100);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* User select */
|
||||||
|
|
||||||
|
.select-none {
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Underline */
|
||||||
|
|
||||||
|
.underline {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
114
src/components/Menu.vue
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
<template>
|
||||||
|
<button @click="toggleExpand()" class="btn btn--white | rounded-lg" aria-controls="menu" :aria-expanded="isExpanded">
|
||||||
|
<svg aria-labelledby="menu-toggle" class="icon" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<title id="menu-toggle">{{ isExpanded ? 'Masquer le menu' : 'Afficher le menu' }}</title>
|
||||||
|
<path d="M10.6751 2.625L3.00007 10.3125C2.94028 10.3686 2.89263 10.4364 2.86005 10.5116C2.82748 10.5869 2.81067 10.668 2.81067 10.75C2.81067 10.832 2.82748 10.9131 2.86005 10.9884C2.89263 11.0636 2.94028 11.1314 3.00007 11.1875L10.6751 18.875M17.1876 2.625L9.50007 10.3125C9.38555 10.4293 9.32141 10.5864 9.32141 10.75C9.32141 10.9136 9.38555 11.0707 9.50007 11.1875L17.1876 18.875" stroke="currentColor" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
<aside v-if="isExpanded" id="menu" class="flex | rounded-lg">
|
||||||
|
<header class="flex">
|
||||||
|
<h2>Nom du service</h2>
|
||||||
|
</header>
|
||||||
|
<nav>
|
||||||
|
<ul class="flex">
|
||||||
|
<li data-icon="home">
|
||||||
|
<a aria-current="page">Home</a>
|
||||||
|
</li>
|
||||||
|
<li data-icon="megaphone" data-count="4">
|
||||||
|
<a>Notifications</a>
|
||||||
|
</li>
|
||||||
|
<li data-icon="calendar">
|
||||||
|
<a>Réunions</a>
|
||||||
|
<span class="pill pill--secondary">Dans 2h</span>
|
||||||
|
</li>
|
||||||
|
<li data-icon="inspiration">
|
||||||
|
<a>Inspirations</a>
|
||||||
|
<span class="pill pill--secondary">Nouveauté</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</aside>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
button[aria-controls="menu"] {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 10;
|
||||||
|
top: 48px;
|
||||||
|
}
|
||||||
|
button[aria-controls="menu"][aria-expanded="true"] {
|
||||||
|
padding: 10px;
|
||||||
|
left: calc(var(--sidebar-width) - var(--space-xl));
|
||||||
|
}
|
||||||
|
button[aria-controls="menu"][aria-expanded="false"] {
|
||||||
|
top: var(--gutter);
|
||||||
|
padding: 18px;
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Menu */
|
||||||
|
|
||||||
|
#menu {
|
||||||
|
--flow-space: var(--space-2xl);
|
||||||
|
--direction: column;
|
||||||
|
--items: flex-start;
|
||||||
|
width: var(--sidebar-width);
|
||||||
|
padding: var(--gap);
|
||||||
|
background: var(--color-background);
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu header {
|
||||||
|
--justify: center;
|
||||||
|
padding-left: var(--gap);
|
||||||
|
height: 40px;
|
||||||
|
font-family: var(--font-serif);
|
||||||
|
font-size: var(--text-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu nav {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu ul {
|
||||||
|
--direction: column;
|
||||||
|
--items: flex-start;
|
||||||
|
--row-gap: var(--space-xs);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu li {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 2.5rem; /* 40px */
|
||||||
|
max-height: 2.75rem; /* 44px */
|
||||||
|
padding: 0 var(--space-lg);
|
||||||
|
gap: var(--space-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu li[data-count]::after {
|
||||||
|
content: attr(data-count);
|
||||||
|
display: inline-block;
|
||||||
|
color: var(--color-primary);
|
||||||
|
font-size: var(--text-sm);
|
||||||
|
font-weight: 500;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu li .pill {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#menu .active {
|
||||||
|
background-color: var(--color-grey-50);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue';
|
||||||
|
const isExpanded = ref(true);
|
||||||
|
function toggleExpand() {
|
||||||
|
isExpanded.value = !isExpanded.value;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { createApp } from "vue";
|
import { createApp } from "vue";
|
||||||
import "./assets/css/style.css";
|
import "./assets/css/index.css";
|
||||||
import App from "./App.vue";
|
import App from "./App.vue";
|
||||||
import { createPinia } from "pinia";
|
import { createPinia } from "pinia";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,298 @@
|
||||||
<template>
|
<template>
|
||||||
<h1>{{ data.content.title }}</h1>
|
<h1 class="sr-only">{{ data.content.title }}</h1>
|
||||||
|
<div class="with-sidebar">
|
||||||
|
<Menu />
|
||||||
|
<!-- TODO: convert to TabList.vue component -->
|
||||||
|
<main>
|
||||||
|
<h2 id="tabslist" class="sr-only">Projets</h2>
|
||||||
|
<header role="tablist" aria-labelledby="tablist">
|
||||||
|
<!-- Tab.vue -->
|
||||||
|
<button
|
||||||
|
id="projets-en-cours-label"
|
||||||
|
type="button"
|
||||||
|
role="tab"
|
||||||
|
aria-selected="true"
|
||||||
|
aria-controls="projets-en-cours"
|
||||||
|
>
|
||||||
|
<!--
|
||||||
|
id="{ tab.slug }-label"
|
||||||
|
aria-selected="true | false"
|
||||||
|
aria-controls="{ tab.slug }"
|
||||||
|
-->
|
||||||
|
<span class="label">Projets en cours</span>
|
||||||
|
<!-- tab.label -->
|
||||||
|
<span class="count">3</span>
|
||||||
|
<!-- tab.items.count -->
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
id="projet-archives-label"
|
||||||
|
type="button"
|
||||||
|
role="tab"
|
||||||
|
aria-selected="false"
|
||||||
|
aria-controls="projets-archives"
|
||||||
|
tabindex="-1"
|
||||||
|
>
|
||||||
|
<!-- remove tabindex="-1" attribute if aria-selected="true" -->
|
||||||
|
<span class="label">Projets archivés</span>
|
||||||
|
<span class="count">8</span>
|
||||||
|
</button>
|
||||||
|
</header>
|
||||||
|
<!-- TabPanel.vue -->
|
||||||
|
<section
|
||||||
|
id="projets-en-cours"
|
||||||
|
role="tabpanel"
|
||||||
|
tabindex="0"
|
||||||
|
aria-labelledby="projets-en-cours-label"
|
||||||
|
class="flow"
|
||||||
|
>
|
||||||
|
<!-- TODO: convert to ProjectItem.vue component -->
|
||||||
|
<article class="project-item | flex | rounded-lg | px-2xl py-2xl">
|
||||||
|
<hgroup>
|
||||||
|
<h3>Miss Dior Blooming Bouquet</h3>
|
||||||
|
<p>
|
||||||
|
Dernière mise à jour le
|
||||||
|
<time datetime="2024-06-12">12 juin 2024</time>
|
||||||
|
</p>
|
||||||
|
</hgroup>
|
||||||
|
<img src="" alt="Logo" class="project-logo | rounded-sm" />
|
||||||
|
<ol class="project-steps" data-steps="1">
|
||||||
|
<li class="project-step" data-status="in-progress">
|
||||||
|
<span class="pill" data-icon="search">Votre Brief</span>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</article>
|
||||||
|
<article class="project-item | flex | rounded-lg | px-2xl py-2xl">
|
||||||
|
<hgroup>
|
||||||
|
<h3>Miss Dior Blooming Bouquet</h3>
|
||||||
|
<p>
|
||||||
|
Dernière mise à jour le
|
||||||
|
<time datetime="2024-06-12">12 juin 2024</time>
|
||||||
|
</p>
|
||||||
|
</hgroup>
|
||||||
|
<img src="" alt="Logo" class="project-logo | rounded-sm" />
|
||||||
|
<ol class="project-steps" data-steps="3">
|
||||||
|
<li class="project-step" data-status="done">
|
||||||
|
<span class="pill" data-icon="search">Votre Brief</span>
|
||||||
|
</li>
|
||||||
|
<li class="project-step" data-status="in-progress">
|
||||||
|
<span class="pill" data-icon="palette">Brief Enrichi</span>
|
||||||
|
</li>
|
||||||
|
<li class="project-step" data-status="uncompleted">
|
||||||
|
<span class="pill" data-icon="3d">Rendu 360°</span>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
<section
|
||||||
|
id="projets-archives"
|
||||||
|
role="tabpanel"
|
||||||
|
tabindex="0"
|
||||||
|
aria-labelledby="projet-archives-label"
|
||||||
|
hidden
|
||||||
|
>
|
||||||
|
<!-- remove hidden attribute if aria-selected="true" -->
|
||||||
|
<div>Tab 2 content</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
|
||||||
import Btn from "../components/Btn.vue";
|
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
/* TABS */
|
||||||
|
|
||||||
|
[role="tablist"] {
|
||||||
|
width: fit-content;
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: center;
|
||||||
|
margin: 0 auto var(--space-md);
|
||||||
|
border-radius: var(--rounded-full);
|
||||||
|
min-height: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="tab"] {
|
||||||
|
--tab-height: 2.5rem;
|
||||||
|
--tab-py: var(--space-md);
|
||||||
|
--tab-px: var(--space-lg);
|
||||||
|
position: relative;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: var(--text-md);
|
||||||
|
border-radius: var(--rounded-full);
|
||||||
|
background-color: var(--background, var(--color-background));
|
||||||
|
color: var(--color, var(--color-text));
|
||||||
|
z-index: 2;
|
||||||
|
padding: var(--tab-py) var(--tab-px);
|
||||||
|
margin: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
gap: var(--space-lg);
|
||||||
|
height: var(--tab-height);
|
||||||
|
}
|
||||||
|
[role="tab"]:focus,
|
||||||
|
[role="tab"]:hover {
|
||||||
|
}
|
||||||
|
[role="tab"] .label {
|
||||||
|
flex-grow: 1;
|
||||||
|
font-family: var(--font-serif);
|
||||||
|
}
|
||||||
|
[role="tab"] .count {
|
||||||
|
font-size: var(--text-sm);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="tab"][aria-selected="true"] {
|
||||||
|
--background: var(--color-background);
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
[role="tab"][aria-selected="false"] {
|
||||||
|
--background: var(--color-grey-200);
|
||||||
|
--color: var(--color-grey-700);
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="tab"][aria-selected="true"] + [aria-selected="false"]::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
height: var(--tab-height);
|
||||||
|
width: calc(var(--tab-px) * 2);
|
||||||
|
position: absolute;
|
||||||
|
left: calc(var(--tab-px) * -1);
|
||||||
|
background-color: var(--color-grey-200);
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="tabpanel"] {
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PROJECT ITEM */
|
||||||
|
|
||||||
|
.project-item {
|
||||||
|
--wrap: no-wrap;
|
||||||
|
background: var(--color-background);
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-item hgroup {
|
||||||
|
flex: 1 1 0%;
|
||||||
|
}
|
||||||
|
.project-item h3 {
|
||||||
|
font-family: var(--font-serif);
|
||||||
|
font-size: var(--text-lg);
|
||||||
|
margin-bottom: var(--space-sm);
|
||||||
|
}
|
||||||
|
.project-item p {
|
||||||
|
font-size: var(--text-sm);
|
||||||
|
line-height: var(--leading-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-logo {
|
||||||
|
order: -1;
|
||||||
|
background: var(--color-grey-50);
|
||||||
|
color: var(--color-grey-400);
|
||||||
|
text-align: center;
|
||||||
|
line-height: 4.5rem;
|
||||||
|
width: 4.5rem;
|
||||||
|
height: 4.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-steps {
|
||||||
|
--color: var(--color-primary-100);
|
||||||
|
flex: 1 1 0%;
|
||||||
|
display: flex;
|
||||||
|
gap: var(--space-lg);
|
||||||
|
margin-top: -2.75rem;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.project-steps[data-steps="1"]::after {
|
||||||
|
content: "étapes à venir";
|
||||||
|
font-size: var(--text-sm);
|
||||||
|
font-weight: 500;
|
||||||
|
width: 8rem;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
color: var(--color-grey-700);
|
||||||
|
background: var(--color-background);
|
||||||
|
bottom: -2rem;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -0.2em);
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-step {
|
||||||
|
--color: var(--color-white);
|
||||||
|
position: relative;
|
||||||
|
flex: 1 1 0%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.project-step:last-child {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.project-step:only-child,
|
||||||
|
.project-step:first-child {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-step[data-status="in-progress"]:only-child::before,
|
||||||
|
.project-step[data-status="in-progress"]:only-child::after {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
height: 1.25rem;
|
||||||
|
position: absolute;
|
||||||
|
right: 3.75rem;
|
||||||
|
bottom: -2rem;
|
||||||
|
}
|
||||||
|
.project-step[data-status="in-progress"]:only-child::before {
|
||||||
|
height: 1rem;
|
||||||
|
color: red;
|
||||||
|
background-repeat: repeat;
|
||||||
|
background-position: left center;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='50%' cy='50%' r='4' opacity='0.15' fill='black'/%3E%3C/svg%3E%0A");
|
||||||
|
background-size: 0.75rem;
|
||||||
|
left: 5.5rem;
|
||||||
|
right: 5.5rem;
|
||||||
|
bottom: -1.875rem;
|
||||||
|
}
|
||||||
|
.project-step[data-status="in-progress"]:only-child::after {
|
||||||
|
--icon-size: 1.25rem;
|
||||||
|
width: var(--icon-size);
|
||||||
|
background: var(--color-grey-300);
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
mask-size: var(--icon-size);
|
||||||
|
mask-image: var(--icon-point);
|
||||||
|
right: 3.75rem;
|
||||||
|
bottom: -2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.project-step .pill::after {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--icon-size, 1.25rem);
|
||||||
|
height: var(--icon-size, 1.25rem);
|
||||||
|
background-color: var(--icon-color, var(--color-primary-100));
|
||||||
|
mask-repeat: no-repeat;
|
||||||
|
mask-position: center;
|
||||||
|
mask-size: var(--size, 1.25rem);
|
||||||
|
mask-image: var(--icon, var(--icon-point));
|
||||||
|
position: absolute;
|
||||||
|
bottom: -2rem;
|
||||||
|
}
|
||||||
|
.project-step[data-status="done"] > .pill,
|
||||||
|
.project-step[data-status="uncompleted"] > .pill {
|
||||||
|
--background: transparent;
|
||||||
|
}
|
||||||
|
.project-step[data-status="done"] .pill::after {
|
||||||
|
mask-image: var(--icon-check-3);
|
||||||
|
}
|
||||||
|
.project-step[data-status="in-progress"] .pill::after {
|
||||||
|
mask-image: var(--icon-point-active);
|
||||||
|
}
|
||||||
|
.project-step[data-status="uncompleted"] .pill::after {
|
||||||
|
--icon-color: var(--color-grey-300);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import Menu from "../components/Menu.vue";
|
||||||
const { data } = defineProps({
|
const { data } = defineProps({
|
||||||
data: Object,
|
data: Object,
|
||||||
});
|
});
|
||||||
|
|
|
||||||