ajout du nouveau site dans le dépot

This commit is contained in:
Quentin 2023-10-17 09:51:32 +02:00
parent 91d10a7eb3
commit a8a5a40027
Signed by untrusted user: quentin
GPG key ID: E9602264D639FF68
55 changed files with 2513 additions and 2686 deletions

View file

@ -1,73 +0,0 @@
---
# see https://docs.drone.io/pipeline/configuration/
kind: pipeline
type: docker
name: build
steps:
- name: restore-cache
image: meltwater/drone-cache:v1.1.0
environment:
AWS_ACCESS_KEY_ID:
from_secret: cache_aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: cache_aws_secret_access_key
pull: true
settings:
restore: true
bucket: drone-cache
region: garage
mount:
- 'node_modules'
path_style: true
endpoint: https://garage.deuxfleurs.fr
- name: build
# cf https://hub.docker.com/_/node?tab=description&page=1&ordering=last_updated
image: node:14-buster
commands:
- npm install
- node render.js
- name: upload
image: plugins/s3
settings:
bucket: deuxfleurs.fr
access_key:
from_secret: aws_access_key_id
secret_key:
from_secret: aws_secret_access_key
source: static/**/*
strip_prefix: static/
target: /
path_style: true
endpoint: https://garage.deuxfleurs.fr
region: garage
when:
branch:
- main
event:
exclude:
- pull_request
- name: rebuild-cache
image: meltwater/drone-cache:v1.1.0
environment:
AWS_ACCESS_KEY_ID:
from_secret: cache_aws_access_key_id
AWS_SECRET_ACCESS_KEY:
from_secret: cache_aws_secret_access_key
pull: true
settings:
rebuild: true
bucket: drone-cache
region: garage
mount:
- 'node_modules'
path_style: true
endpoint: https://garage.deuxfleurs.fr
---
kind: signature
hmac: f1fcc439a2180d4e98224dec1cd2dc10691b58161bfee7739ae700e84f04c905
...

View file

@ -1,18 +0,0 @@
## À réaliser au premier clonage du dépôt
Commencer par créer un fichier `.awsclirc` avec cette structure :
```
export AWS_ACCESS_KEY_ID='xxxx'
export AWS_SECRET_ACCESS_KEY='xxxx'
export AWS_DEFAULT_REGION='garage'
alias awsdf="aws --endpoint-url https://garage.deuxfleurs.fr"
```
Installer [l'outil en ligne de commande de AWS version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) qui fournit la commande `aws`.
Enfin, déployer en exécutant :
```
./deploy
```

View file

@ -1,64 +1 @@
# site
[![Build Status](https://drone.deuxfleurs.fr/api/badges/Deuxfleurs/site/status.svg?ref=refs/heads/main)](https://drone.deuxfleurs.fr/Deuxfleurs/site)
Ce dépôt git contient les sources pour le site [deuxfleurs.fr](https://deuxfleurs.fr/).
C'est ici que vous pourrez apporter des modifications au site.
## Comment ajouter du contenu ?
Prérequis :
- Un compte sur cette instance gitea.
- Le logiciel git d'installé. [téléchager](https://git-scm.com/downloads).
Pour commencer, assurez-vous d'être connecté.
Ensuite cliquez sur le bouton "Bifurcation" en haut à droite (*fork* en anglais).
Finalement, vous pourrez cloner votre dépôt en local :
```
git clone https://git.deuxfleurs.fr/<votre nom d'utilisateur>/site.git
```
Pour ajouter du contenu, vous pouvez tout simplement ajouter un fichier dans le dossier `src`.
Par exemple, le fichier `src/Association/Statuts.md` se retrouve à l'adresse `https://deuxfleurs.fr/Association/Statuts.html`.
Deux formats de fichiers différents sont supportés pour l'instant :
- `.md` pour Markdown. [documentation](https://fr.wikipedia.org/wiki/Markdown). Rapide à apprendre, il est très pratique pour rajouter du contenu sans se poser la question de l'apparence.
- `.pug` pour Pug. [documentation](https://pugjs.org). PugJS est une syntaxe différente pour représenter du HTML. Elle offre donc toute la souplesse de ce dernier et s'adapte plus à des mises en page complexe.
Si vous ne savez pas par où commencer, choisissez markdown !
N'hésitez pas à vous inspirer des fichiers existants.
Une fois vos modifications terminées, vous pouvez commit et push :
```
git add src/Association/MonFichier.md
git commit -a
git push
```
Ensuite, vous pouvez créer une demande d'ajout (*pull request* ou *merge request* en anglais) depuis cette adresse (ou en cliquant sur l'onglet éponyme) : https://git.deuxfleurs.fr/Deuxfleurs/site/pulls
## Comment prévisualiser mes modifications ?
Prérequis :
- nodejs et npm d'installé. [télécharger](https://nodejs.org/en/download/)
Vous pourriez vouloir vérifier que vos modifications rendent bien avant de faire votre demande d'ajout.
Pour cela, nous utilisons un script de notre cru nommé `render.js`. Il convertit le dossier `src/` vers un site web contenu dans le dossier `static/` et peut, optionnellement, servir de serveur web.
La façon la plus simple de prévisualiser vos modifications est donc de :
```bash
npm install # installer les dépendances
LISTEN=3000 node render.js # effectuer le rendu puis démarrer un serveur web sur le port 3000
```
Votre aperçu est alors disponible à cette URL : http://127.0.0.1:3000
À chaque modification, vous pouvez arrêter la dernière commande (CTRL+C) et la relancer pour forcer le rendu.
## Comment le site est mis à jour depuis ce dépôt ?
*Nous sommes actuellement dans une phase de transition sur ce point. Veuillez contacter un·e des maintainers. Si vous êtes maintainer ou curieux·se, vous pouvez vous réferrer au fichier DEPLOY.md*
WIP

7
deploy
View file

@ -1,7 +0,0 @@
#!/bin/bash
shopt -s expand_aliases
source .awsclirc
npm install
node render.js
awsdf s3 sync --size-only static s3://deuxfleurs.fr

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
img/deuxfleurs-rect.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

BIN
img/deuxfleurs-square.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

BIN
img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

1603
index.html Normal file

File diff suppressed because it is too large Load diff

909
package-lock.json generated
View file

@ -1,909 +0,0 @@
{
"name": "site",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "site",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"clean-css": "^5.1.2",
"jstransformer-markdown-it": "^2.1.0",
"marked": "^0.8.2",
"pug": "^3.0.2",
"source-map": "^0.7.3",
"uglify-js": "^3.13.3"
},
"devDependencies": {}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
},
"node_modules/@babel/parser": {
"version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/types": {
"version": "7.13.14",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
"dependencies": {
"@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
},
"node_modules/acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"node_modules/assert-never": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
},
"node_modules/babel-walk": {
"version": "3.0.0-canary-5",
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
"dependencies": {
"@babel/types": "^7.9.6"
},
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
"dependencies": {
"is-regex": "^1.0.3"
}
},
"node_modules/clean-css": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz",
"integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==",
"dependencies": {
"source-map": "~0.6.0"
},
"engines": {
"node": ">= 10.0"
}
},
"node_modules/clean-css/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/constantinople": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
"dependencies": {
"@babel/parser": "^7.6.0",
"@babel/types": "^7.6.1"
}
},
"node_modules/doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
"integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
},
"node_modules/entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
},
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"node_modules/get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"dependencies": {
"has": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-expression": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
"dependencies": {
"acorn": "^7.1.1",
"object-assign": "^4.1.1"
}
},
"node_modules/is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
},
"node_modules/is-regex": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
"integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
"dependencies": {
"call-bind": "^1.0.2",
"has-symbols": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
"integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
},
"node_modules/jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
"integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
"dependencies": {
"is-promise": "^2.0.0",
"promise": "^7.0.1"
}
},
"node_modules/jstransformer-markdown-it": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/jstransformer-markdown-it/-/jstransformer-markdown-it-2.1.0.tgz",
"integrity": "sha1-aewwzkUYvtWZezjwJ2SOjChekvc=",
"dependencies": {
"markdown-it": "^8.0.0"
},
"engines": {
"node": ">=7"
}
},
"node_modules/linkify-it": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
"integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
"dependencies": {
"uc.micro": "^1.0.1"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/markdown-it": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
"dependencies": {
"argparse": "^1.0.7",
"entities": "~1.1.1",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
},
"bin": {
"markdown-it": "bin/markdown-it.js"
}
},
"node_modules/marked": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz",
"integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==",
"bin": {
"marked": "bin/marked"
},
"engines": {
"node": ">= 8.16.2"
}
},
"node_modules/mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
},
"node_modules/promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"dependencies": {
"asap": "~2.0.3"
}
},
"node_modules/pug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
"integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
"dependencies": {
"pug-code-gen": "^3.0.2",
"pug-filters": "^4.0.0",
"pug-lexer": "^5.0.1",
"pug-linker": "^4.0.0",
"pug-load": "^3.0.0",
"pug-parser": "^6.0.0",
"pug-runtime": "^3.0.1",
"pug-strip-comments": "^2.0.0"
}
},
"node_modules/pug-attrs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
"dependencies": {
"constantinople": "^4.0.1",
"js-stringify": "^1.0.2",
"pug-runtime": "^3.0.0"
}
},
"node_modules/pug-code-gen": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
"integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
"dependencies": {
"constantinople": "^4.0.1",
"doctypes": "^1.1.0",
"js-stringify": "^1.0.2",
"pug-attrs": "^3.0.0",
"pug-error": "^2.0.0",
"pug-runtime": "^3.0.0",
"void-elements": "^3.1.0",
"with": "^7.0.0"
}
},
"node_modules/pug-error": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
},
"node_modules/pug-filters": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
"dependencies": {
"constantinople": "^4.0.1",
"jstransformer": "1.0.0",
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0",
"resolve": "^1.15.1"
}
},
"node_modules/pug-lexer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
"integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
"dependencies": {
"character-parser": "^2.2.0",
"is-expression": "^4.0.0",
"pug-error": "^2.0.0"
}
},
"node_modules/pug-linker": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
"dependencies": {
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0"
}
},
"node_modules/pug-load": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
"dependencies": {
"object-assign": "^4.1.1",
"pug-walk": "^2.0.0"
}
},
"node_modules/pug-parser": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
"dependencies": {
"pug-error": "^2.0.0",
"token-stream": "1.0.0"
}
},
"node_modules/pug-runtime": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
"integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
},
"node_modules/pug-strip-comments": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
"dependencies": {
"pug-error": "^2.0.0"
}
},
"node_modules/pug-walk": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
},
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dependencies": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"engines": {
"node": ">= 8"
}
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"engines": {
"node": ">=4"
}
},
"node_modules/token-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
},
"node_modules/uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"node_modules/uglify-js": {
"version": "3.13.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.3.tgz",
"integrity": "sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig==",
"bin": {
"uglifyjs": "bin/uglifyjs"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/void-elements": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
"dependencies": {
"@babel/parser": "^7.9.6",
"@babel/types": "^7.9.6",
"assert-never": "^1.2.1",
"babel-walk": "3.0.0-canary-5"
},
"engines": {
"node": ">= 10.0.0"
}
}
},
"dependencies": {
"@babel/helper-validator-identifier": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
},
"@babel/parser": {
"version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ=="
},
"@babel/types": {
"version": "7.13.14",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
"requires": {
"@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
},
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
},
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"requires": {
"sprintf-js": "~1.0.2"
}
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
},
"assert-never": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
},
"babel-walk": {
"version": "3.0.0-canary-5",
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
"requires": {
"@babel/types": "^7.9.6"
}
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
"requires": {
"is-regex": "^1.0.3"
}
},
"clean-css": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz",
"integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==",
"requires": {
"source-map": "~0.6.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}
}
},
"constantinople": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
"requires": {
"@babel/parser": "^7.6.0",
"@babel/types": "^7.6.1"
}
},
"doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
"integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
},
"entities": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
},
"is-core-module": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
"requires": {
"has": "^1.0.3"
}
},
"is-expression": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
"requires": {
"acorn": "^7.1.1",
"object-assign": "^4.1.1"
}
},
"is-promise": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
},
"is-regex": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
"integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
"requires": {
"call-bind": "^1.0.2",
"has-symbols": "^1.0.1"
}
},
"js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
"integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
},
"jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
"integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
"requires": {
"is-promise": "^2.0.0",
"promise": "^7.0.1"
}
},
"jstransformer-markdown-it": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/jstransformer-markdown-it/-/jstransformer-markdown-it-2.1.0.tgz",
"integrity": "sha1-aewwzkUYvtWZezjwJ2SOjChekvc=",
"requires": {
"markdown-it": "^8.0.0"
}
},
"linkify-it": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
"integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
"requires": {
"uc.micro": "^1.0.1"
}
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"markdown-it": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
"integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
"requires": {
"argparse": "^1.0.7",
"entities": "~1.1.1",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
},
"marked": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz",
"integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw=="
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
"asap": "~2.0.3"
}
},
"pug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
"integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
"requires": {
"pug-code-gen": "^3.0.2",
"pug-filters": "^4.0.0",
"pug-lexer": "^5.0.1",
"pug-linker": "^4.0.0",
"pug-load": "^3.0.0",
"pug-parser": "^6.0.0",
"pug-runtime": "^3.0.1",
"pug-strip-comments": "^2.0.0"
}
},
"pug-attrs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
"requires": {
"constantinople": "^4.0.1",
"js-stringify": "^1.0.2",
"pug-runtime": "^3.0.0"
}
},
"pug-code-gen": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
"integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
"requires": {
"constantinople": "^4.0.1",
"doctypes": "^1.1.0",
"js-stringify": "^1.0.2",
"pug-attrs": "^3.0.0",
"pug-error": "^2.0.0",
"pug-runtime": "^3.0.0",
"void-elements": "^3.1.0",
"with": "^7.0.0"
}
},
"pug-error": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
},
"pug-filters": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
"requires": {
"constantinople": "^4.0.1",
"jstransformer": "1.0.0",
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0",
"resolve": "^1.15.1"
}
},
"pug-lexer": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
"integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
"requires": {
"character-parser": "^2.2.0",
"is-expression": "^4.0.0",
"pug-error": "^2.0.0"
}
},
"pug-linker": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
"requires": {
"pug-error": "^2.0.0",
"pug-walk": "^2.0.0"
}
},
"pug-load": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
"requires": {
"object-assign": "^4.1.1",
"pug-walk": "^2.0.0"
}
},
"pug-parser": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
"requires": {
"pug-error": "^2.0.0",
"token-stream": "1.0.0"
}
},
"pug-runtime": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
"integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
},
"pug-strip-comments": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
"requires": {
"pug-error": "^2.0.0"
}
},
"pug-walk": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
},
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
},
"token-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
},
"uglify-js": {
"version": "3.13.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.3.tgz",
"integrity": "sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig=="
},
"void-elements": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
},
"with": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
"requires": {
"@babel/parser": "^7.9.6",
"@babel/types": "^7.9.6",
"assert-never": "^1.2.1",
"babel-walk": "3.0.0-canary-5"
}
}
}
}

View file

@ -1,23 +0,0 @@
{
"name": "site",
"version": "1.0.0",
"description": "deuxfleurs.fr",
"main": "render.js",
"dependencies": {
"clean-css": "^5.1.2",
"jstransformer-markdown-it": "^2.1.0",
"marked": "^0.8.2",
"pug": "^3.0.2",
"source-map": "^0.7.3",
"uglify-js": "^3.13.3"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@git.deuxfleurs.fr:Deuxfleurs/site.git"
},
"author": "",
"license": "ISC"
}

264
render.js
View file

@ -1,264 +0,0 @@
'use strict'
const pug = require('pug')
const marked = require('marked')
const fs = require('fs').promises
const http = require('http')
const unit = (...args) => null
const log = process.env.VERBOSE ? console.log : unit
const walk = async (path, filename) => {
log('[walk]', path)
const type = await fs.lstat(path)
if (type.isFile()) return {type: 'file', path: path, name: filename || path, tags:[]}
if (!type.isDirectory()) return null
const files = await fs.readdir(path)
return {
type: 'folder',
path: path,
name: filename || path,
tags: [],
children: await Promise.all(files.map(file => walk(`${path}/${file}`, file)))
}
}
const ext_static = ['.css', '.js', '.otf', '.png', '.svg', '.txt', '.png', '.jpg', '.webp', 'client', 'server', '.pdf', '.ttf', '.xml', '.properties']
const ext_md = ['.md', '.markdown']
const ext_pug = ['.pug', '.jade']
const suffix = file => ext => file.substring(file.length - ext.length) == ext ? ext : null
const suffixl = (...l) => file => l.find(suffix(file))
const is_static = suffixl(...ext_static)
const is_md = suffixl(...ext_md)
const is_pug = suffixl(...ext_pug)
const is_templated = f => is_md(f) /* || is_rst(f) */
const is_document = f => is_templated(f) || is_pug(f)
const prefix = file => ext => file.substring(0, ext.length) == ext ? ext : null
const prefixl = (...l) => file => l.find(prefix(file))
const rm_prefix = (...l) => file => file.substring(prefixl(...l)(file).length)
const rm_suffix = (...l) => file => file.substring(0, file.length - suffixl(...l)(file).length)
const propagate_md_layout = (tree, markdown_template) => {
if (tree.type == 'file' && is_templated(tree.name)) {
tree.template = markdown_template
log('[propagate_md_layout]', tree ? tree.path : null, markdown_template ? markdown_template.path : null)
} else if (tree.type == 'folder') {
const find_md_tpl = tree.children.filter(c => c.type == 'file' && c.name == '_markdown.pug')
const new_md_tpl = find_md_tpl.length > 0 ? find_md_tpl[0] : markdown_template
tree.children.forEach(c => propagate_md_layout(c, new_md_tpl))
}
return tree
}
const elagate = tree => {
if (tree.type != 'folder') return tree
const lh = e => log('[elagate]', e.path) && false
tree.children = tree.children.filter(e => !(e.name[0] == '_') || lh(e))
tree.children.forEach(elagate)
return tree
}
const tag_document = tree => {
if (tree.type == 'file' && is_document(tree.name) && tree.name[0] != '@') {
tree.tags.push('document_leaf', 'document')
log('[tag_document]', tree.path, 'document_leaf')
} else if (tree.type == 'folder') {
tree.children.forEach(tag_document)
if(tree.children.some(c => c.tags.includes('document'))) {
tree.tags.push('document_branch', 'document')
log('[tag_document]', tree.path, 'document_branch')
}
}
return tree
}
const reference_index = indexes => tree => {
if (tree.type != 'folder') return tree;
const index = tree.children.find(e => indexes.includes(e.name))
if (index) {
tree.index = index
tree.tags.push('has_index')
log('[reference_index]', tree.path, index.name)
index.tags.push('is_index')
}
tree.children.forEach(reference_index(indexes))
return tree;
}
const propagate_nice_name = prefix => tree => {
const without_prefix = tree.path.substring(prefix.length)
const splitted = without_prefix.split('/').filter(v => v.length > 0)
if (splitted.length > 0) {
tree.nice_path = splitted.slice(0, -1)
tree.nice_name = splitted[splitted.length - 1].split('.')[0]
tree.url = tree.type == 'folder' ? without_prefix + '/' : without_prefix
log('[propagate_nice_name]', [...tree.nice_path, tree.nice_name].join('|'))
}
if (tree.type == 'folder') tree.children.forEach(propagate_nice_name(prefix))
return tree
}
const prepare_copy = (old_prefix, new_prefix, exts) => tree => {
if (tree.type == 'file' && is_static(tree.name)) {
tree.generate = {
cmd: 'copy',
src: tree.path,
out: new_prefix + rm_prefix(old_prefix)(tree.path)
}
log('[prepare_copy]',tree.generate.src,'->',tree.generate.out)
} else if (tree.type == 'folder') {
tree.children.forEach(prepare_copy(old_prefix, new_prefix, exts))
}
return tree
}
const prepare_pug = (old_prefix, new_prefix) => tree => {
if (tree.type == 'file' && is_pug(tree.name)) {
tree.old_url = tree.url
tree.url = rm_prefix(old_prefix)(rm_suffix(...ext_pug)(tree.path)) + '.html'
tree.generate = {
cmd: 'pug',
src: tree.path,
out: new_prefix + tree.url
}
log('[prepare_pug]',tree.generate.src,'->',tree.generate.out)
}
else if (tree.type == 'folder') {
tree.children.forEach(prepare_pug(old_prefix, new_prefix))
}
return tree
}
const prepare_md = (old_prefix, new_prefix) => tree => {
if (tree.type == 'file' && is_md(tree.name)) {
tree.old_url = tree.url
tree.url = rm_prefix(old_prefix)(rm_suffix(...ext_md)(tree.path)) + '.html'
tree.generate = {
cmd: 'pug',
src: tree.template.path,
markdown: tree.path,
out: new_prefix + tree.url
}
log('[prepare_md]',tree.generate.markdown,'+',tree.generate.src,'->',tree.generate.out)
}
else if (tree.type == 'folder') {
tree.children.forEach(prepare_md(old_prefix, new_prefix))
}
return tree
}
const prepare_folder = (old_prefix, new_prefix) => tree => {
if (tree.type == 'folder') {
tree.generate = {
cmd: 'mkdir',
out: new_prefix + rm_prefix(old_prefix)(tree.path)
}
log('[prepare_folder]',tree.generate.out)
tree.children.forEach(prepare_folder(old_prefix, new_prefix))
}
return tree
}
const do_folder = async tree => {
if (!tree.generate || tree.generate.cmd != 'mkdir') return tree
await fs.mkdir(tree.generate.out, { recursive: true })
log('[do_folder]',tree.generate.out)
await Promise.all(tree.children.map(do_folder))
return tree
}
const do_copy = async tree => {
if (tree.generate && tree.generate.cmd == 'copy') {
await fs.copyFile(tree.generate.src, tree.generate.out)
log('[do_copy]',tree.generate.out)
} else if (tree.type == 'folder')
await Promise.all(tree.children.map(do_copy))
return tree
}
const do_pug = (prt, root) => async tree => {
prt = prt || tree
root = root || tree
if (tree.generate && tree.generate.cmd == 'pug') {
const html = pug.renderFile(tree.generate.src, {
markdown: tree.generate.markdown ? marked(await fs.readFile(tree.generate.markdown, 'utf-8')) : null,
root: root,
prt: prt,
element: tree
})
await fs.writeFile(tree.generate.out, html)
log('[do_pug]',tree.generate.out)
} else if (tree.type == 'folder')
await Promise.all(tree.children.map(do_pug(tree,root)))
return tree
}
const rm_tree = t => {
if (t == null) return
if (t.type == 'file') {
log('[do_clean] file', t.path)
return fs.unlink(t.path)
}
return Promise
.all(t.children.map(rm_tree))
.then(_ => {
log('[do_clean] path', t.path)
return fs.rmdir(t.path)
})
}
const do_clean = path => tree =>
walk(path)
.catch(_ => null)
.then(rm_tree)
.then(_ => tree)
const listen = async t =>
process.env.LISTEN &&
http.createServer(async (req,res) => {
const file = fs.readFile(__dirname + '/static/' + decodeURI(req.url))
.catch(_ => fs.readFile(__dirname + '/static/' + decodeURI(req.url) + '/index.html'))
try {
const f = await file
res.writeHead(200)
res.end(f)
} catch (e) {
console.error(e)
res.writeHead(404)
res.end("404 not found")
}
}).listen(process.env.LISTEN);
const conf = { src: './src', dest: './static'}
walk(conf.src)
.then(propagate_md_layout)
.then(elagate)
.then(tag_document)
.then(reference_index(['index.md', 'index.pug']))
.then(propagate_nice_name(conf.src))
.then(prepare_copy(conf.src, conf.dest))
.then(prepare_pug(conf.src, conf.dest))
.then(prepare_md(conf.src, conf.dest))
.then(prepare_folder(conf.src, conf.dest))
//.then(v => {log(v) ; return v})
.then(do_clean(conf.dest))
.then(do_folder)
.then(do_copy)
.then(do_pug())
.then(listen)
.catch(console.error)

BIN
ronce.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

44
script-bon.js Normal file
View file

@ -0,0 +1,44 @@
// dictionary to keep track of frame count for each animation
let frameCounts = {};
function animate(id, delay) {
// get the container and frames for the amination
const container = document.getElementById(id);
const frames = container.children;
// set up the frame counter
frameCounts[id] = 0;
// hide all frames except for the first
frames[0].style.display = "flex";
for (let i = 1; i < frames.length; i++) {
frames[i].style.display = "none";
}
// start the animation
const interval = setInterval(updateAnimation, delay, id, frames, frames.length);
}
function updateAnimation(id, frames, totalFrames) {
// increment the frame counter for the given id
frameCounts[id] = (frameCounts[id] + 1) % totalFrames;
// show the next frame
frames[frameCounts[id]].style.display = "flex";
// hide the previous frame
if (frameCounts[id] == 0) {
frames[totalFrames - 1].style.display = "none";
} else {
frames[frameCounts[id] - 1].style.display = "none";
}
}
animate("illustration-accueil", 500);
animate("rennes", 1000);
animate("orsay", 2000);
animate("parterre", 1500);

View file

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<clientConfig version="1.1">
<emailProvider id="deuxfleurs.fr">
<domain>deuxfleurs.fr</domain>
<displayName>Deuxfleurs Mail</displayName>
<displayShortName>Deuxfleurs</displayShortName>
<incomingServer type="imap">
<hostname>imap.deuxfleurs.fr</hostname>
<port>993</port>
<socketType>SSL</socketType>
<authentication>plain</authentication>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.deuxfleurs.fr</hostname>
<port>465</port>
<socketType>SSL</socketType>
<authentication>plain</authentication>
<username>%EMAILADDRESS%</username>
</outgoingServer>
<documentation url="https://deuxfleurs.fr/Guide/Email.html">
<descr lang="fr">Documentation générique pour la configuration</descr>
<descr lang="en">Generic settings page</descr>
</documentation>
</emailProvider>
</clientConfig>

View file

@ -1,30 +0,0 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Cryptpad
service.description = Pads, sondages, tableurs collaboratifs et chiffrés
service.website = https://pad.deuxfleurs.fr
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/cryptpad/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = None
service.registration.load = OPEN
service.install.type = SOURCES
software.name = cryptpad
software.website = https://cryptpad.fr/
software.license.url = https://github.com/xwiki-labs/cryptpad/blob/main/LICENSE
software.license.name = AGPL-3.0
software.version = 4.14.1
software.source.url = https://github.com/superboum/cryptpad
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View file

@ -1,28 +0,0 @@
file.class = organization
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
organization.name = Deuxfleurs
organization.description = Fabriquons un internet convivial
#organization.type = ASSOCIATION
organization.website = https://deuxfleurs.fr
organization.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
organization.socialnetworks.plume = https://plume.deuxfleurs.fr/~/Deuxfleurs
organization.socialnetworks.twitter = https://twitter.com/deuxfleurs_org/
organization.chatrooms.matrix = https://matrix.to/#/#deuxfleurs:deuxfleurs.fr
organization.contact.url = https://deuxfleurs.fr
organization.contact.email = coucou@deuxfleurs.fr
organization.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
organization.guide.technical = https://guide.deuxfleurs.fr/operations/
organization.guide.user = https://guide.deuxfleurs.fr/prise_en_main/
organization.status.level = ACTIVE
organization.startdate = 01/01/2020
organization.memberof.chatons.startdate = 21/06/2022
organization.memberof.chatons.status.level = ACTIVE
organization.country.name = France
organization.country.code = FR
subs.jitsi = https://deuxfleurs.fr/.well-known/chatonsinfos/jitsi.properties
subs.cryptpad = https://deuxfleurs.fr/.well-known/chatonsinfos/cryptpad.properties
subs.matrix = https://deuxfleurs.fr/.well-known/chatonsinfos/matrix.properties
subs.plume = https://deuxfleurs.fr/.well-known/chatonsinfos/plume.properties
subs.garage = https://deuxfleurs.fr/.well-known/chatonsinfos/garage.properties

View file

@ -1,91 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 70.424515 70.300102"
version="1.1"
id="svg8"
sodipodi:docname="logo.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
inkscape:export-filename="/home/quentin/Documents/dev/deuxfleurs/site/src/img/logo.png"
inkscape:export-xdpi="699.30194"
inkscape:export-ydpi="699.30194"
width="70.424515"
height="70.300102"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs12" />
<sodipodi:namedview
id="namedview10"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="12.125"
inkscape:cx="43.092783"
inkscape:cy="48.082474"
inkscape:window-width="3072"
inkscape:window-height="1659"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg8" />
<g
id="g79969"
transform="translate(-0.827,34.992103)">
<path
fill="#ffffff"
d="m 15.632,34.661 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 L 9.963,29.061 6.327,30.029 C 6.17,29.175 6.202,28.142 6.423,27.007 L 6.526,26.482 5.994,26.416 C 4.752,26.262 3.688,25.891 2.89,25.336 L 4.411,22.419 1.423,20.896 C 1.742,19.952 2.371,19.014 3.257,18.161 L 3.634,17.798 3.255,17.438 C 2.452,16.674 1.847,15.884 1.485,15.127 L 4.995,13.774 2.95,10.615 C 3.69,10.213 4.643,9.929 5.739,9.783 L 6.258,9.715 6.167,9.201 C 5.952,7.99 5.995,6.863 6.291,5.913 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 L 13.749,4.283 13.975,3.81 C 14.454,2.807 15.019,1.986 15.628,1.406 L 18,4.326 20.372,1.406 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 C 23.798,3.455 24.891,3.142 25.877,3.13 L 26.4,6.438 29.71,5.913 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.757 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 L 18,32.293 Z"
id="path2" />
<path
d="M 7.092,10.678 C 6.562,9.189 6.394,7.708 6.66,6.478 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 C 11.808,3.78 13.16,4.396 14.409,5.359 14.527,5.022 14.653,4.696 14.791,4.392 13.24,3.257 11.568,2.629 10.061,2.629 9.938,2.629 9.816,2.633 9.695,2.642 L 9.184,5.865 5.96,5.354 C 5.36,6.841 5.395,8.769 6.045,10.747 6.38,10.71 6.729,10.686 7.092,10.678 Z M 21.593,5.359 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 C 30.606,8.769 30.64,6.841 30.04,5.353 L 26.815,5.865 26.304,2.641 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z M 7.368,27 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 L 4.628,23.081 5.082,22.194 4.191,21.742 2.055,20.654 C 2.563,19.503 3.57,18.404 4.873,17.511 4.586,17.292 4.312,17.07 4.063,16.842 2.376,18.059 1.217,19.597 0.828,21.152 l 2.908,1.483 -1.482,2.843 C 3.475,26.501 5.303,27 7.368,27 Z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.517 -1.181,2.812 -2.119,3.651 L 18.707,32.293 18,31.586 l -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.652 -0.296,0.206 -0.593,0.397 -0.886,0.563 0.636,1.98 1.741,3.559 3.1,4.409 L 18,33 l 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.564 z"
fill="#ea596e"
id="path4" />
<path
fill="#ea596e"
d="m 20.118,5.683 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 L 23.709,25.853 23.527,29.21 C 22.508,28.533 21.395,27.55 20.329,26.237 L 18,23.374 15.672,26.236 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 L 12.889,19.658 9.447,18.33 C 7.87,17.721 6.591,16.967 5.633,16.208 L 8.768,15 6.941,12.177 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 L 18,8.292 20.118,5.683 M 20.308,0.692 18,3.533 15.692,0.692 C 13.703,2.224 12.271,5.684 12.046,9.804 10.429,9.374 8.854,9.167 7.414,9.167 c -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.516 l 3.537,-0.941 0.196,3.654 c 2.512,-0.07 5.703,-2.027 8.307,-5.228 2.603,3.201 5.796,5.158 8.306,5.228 l 0.198,-3.655 3.535,0.943 c 0.71,-2.411 -0.165,-6.05 -2.404,-9.517 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 C 23.729,5.684 22.297,2.224 20.308,0.692 Z"
id="path6" />
</g>
<g
id="g79964"
transform="translate(-1.043816,35.993714)">
<path
fill="#ffffff"
d="m 51.92633,-2.0247139 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 l -0.202,-3.7560001 -3.636,0.968 c -0.157,-0.854 -0.125,-1.887 0.096,-3.022 l 0.103,-0.525 -0.532,-0.066 c -1.242,-0.154 -2.306,-0.525 -3.104,-1.08 l 1.521,-2.917 -2.988,-1.523 c 0.319,-0.944 0.948,-1.882 1.834,-2.735 l 0.377,-0.363 -0.379,-0.36 c -0.803,-0.764 -1.408,-1.554 -1.77,-2.311 l 3.51,-1.353 -2.045,-3.159 c 0.74,-0.402 1.693,-0.686 2.789,-0.832 l 0.519,-0.068 -0.091,-0.514 c -0.215,-1.211 -0.172,-2.338 0.124,-3.288 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 l 0.462,0.248 0.226,-0.473 c 0.479,-1.003 1.044,-1.824 1.653,-2.404 l 2.372,2.92 2.372,-2.92 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 c 1.085,-0.581 2.178,-0.894 3.164,-0.906 l 0.523,3.308 3.31,-0.525 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.7570001 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 l -2.367,-2.369 z"
id="path2-9" />
<path
d="m 43.38633,-26.007714 c -0.53,-1.489 -0.698,-2.97 -0.432,-4.2 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 c 1.261,0.127 2.613,0.743 3.862,1.706 0.118,-0.337 0.244,-0.663 0.382,-0.967 -1.551,-1.135 -3.223,-1.763 -4.73,-1.763 -0.123,0 -0.245,0.004 -0.366,0.013 l -0.511,3.223 -3.224,-0.511 c -0.6,1.487 -0.565,3.415 0.085,5.393 0.335,-0.037 0.684,-0.061 1.047,-0.069 z m 14.501,-5.319 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 0.651,-1.978 0.685,-3.906 0.085,-5.394 l -3.225,0.512 -0.511,-3.224 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z m -14.225,21.641 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 l 1.089,-2.128 0.454,-0.887 -0.891,-0.452 -2.136,-1.088 c 0.508,-1.151 1.515,-2.25 2.818,-3.143 -0.287,-0.219 -0.561,-0.441 -0.81,-0.669 -1.687,1.217 -2.846,2.755 -3.235,4.31 l 2.908,1.483 -1.482,2.843 c 1.221,1.023 3.049,1.522 5.114,1.522 z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.5170001 -1.181,2.8120001 -2.119,3.6510001 l -1.695,-1.694 -0.707,-0.707 -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.6520001 -0.296,0.2060001 -0.593,0.3970001 -0.886,0.5630001 0.636,1.98 1.741,3.559 3.1,4.409 l 2.308,-2.307 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.5640001 z"
fill="#ea596e"
id="path4-3" />
<path
fill="#ea596e"
d="m 56.41233,-31.002714 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 l -3.244,-0.865 -0.182,3.357 c -1.019,-0.677 -2.132,-1.66 -3.198,-2.973 l -2.329,-2.863 -2.328,2.862 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 l 2.004,-3.099 -3.442,-1.328 c -1.577,-0.609 -2.856,-1.363 -3.814,-2.122 l 3.135,-1.208 -1.827,-2.823 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 l 2.119,2.609 2.118,-2.609 m 0.19,-4.991 -2.308,2.841 -2.308,-2.841 c -1.989,1.532 -3.421,4.992 -3.646,9.112 -1.617,-0.43 -3.192,-0.637 -4.632,-0.637 -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.5160001 l 3.537,-0.9410001 0.196,3.6540001 c 2.512,-0.07 5.703,-2.027 8.307,-5.2280001 2.603,3.2010001 5.796,5.1580001 8.306,5.2280001 l 0.198,-3.6550001 3.535,0.9430001 c 0.71,-2.4110001 -0.165,-6.0500001 -2.404,-9.5170001 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 -0.225,-4.119 -1.657,-7.579 -3.646,-9.111 z"
id="path6-6" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
x="2.2188232"
y="31.430677"
id="text46212"><tspan
sodipodi:role="line"
id="tspan46210"
x="2.2188232"
y="31.430677"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">D</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
x="41.347008"
y="67.114784"
id="text46212-1"><tspan
sodipodi:role="line"
id="tspan46210-5"
x="41.347008"
y="67.114784"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">F</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,30 +0,0 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Hébergement site statique
service.description = Hébergez votre blog, site vitrine ou n'importe quel site statique
service.website = https://guide.deuxfleurs.fr/prise_en_main/web/
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/web/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = Member
service.registration.load = OPEN
service.install.type = SOURCES
software.name = Garage
software.website = https://garagehq.deuxfleurs.fr/
software.license.url = https://git.deuxfleurs.fr/Deuxfleurs/garage/src/branch/main/LICENSE
software.license.name = AGPL-3.0
software.version = 0.7.2
software.source.url = https://git.deuxfleurs.fr/Deuxfleurs/garage
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View file

@ -1,30 +0,0 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Jitsi
service.description = Visioconférence dans le navigateur et sur mobile
service.website = https://jitsi.deuxfleurs.fr
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/jitsi/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = None
service.registration.load = OPEN
service.install.type = SOURCES
software.name = jitsimeet
software.website = https://jitsi.org/jitsi-meet/
software.license.url = https://github.com/jitsi/jitsi-meet/blob/master/LICENSE
software.license.name = Apache License 2.0
software.version = 6826
software.source.url = https://git.deuxfleurs.fr/Deuxfleurs/infrastructure/src/branch/main/app/jitsi/build
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View file

@ -1,30 +0,0 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Matrix
service.description = Discussions instantanées chiffrées et en groupe
service.website = https://riot.deuxfleurs.fr
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/matrix/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = Member
service.registration.load = OPEN
service.install.type = SOURCES
software.name = Synapse
software.website = https://matrix-org.github.io/synapse/latest/
software.license.url = https://github.com/matrix-org/synapse/blob/develop/LICENSE
software.license.name = Apache-2.0
software.version = 1.61.1
software.source.url = https://github.com/matrix-org/synapse
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View file

@ -1,30 +0,0 @@
file.class = service
file.protocol = ChatonsInfos-0.5
file.datetime = 2022-07-20T00:00:00
file.generator = L'équipe Deuxfleurs
service.name = Plume
service.description = Plateforme de blog fédérée via ActivityPub
service.website = https://plume.deuxfleurs.fr/
service.logo = https://deuxfleurs.fr/.well-known/chatonsinfos/deuxfleurs.svg
service.legal.url = https://deuxfleurs.fr/Mentions%20l%C3%A9gales.html
service.guide.technical = https://guide.deuxfleurs.fr/operations/
service.guide.user = https://guide.deuxfleurs.fr/prise_en_main/plume/
service.contact.url = https://deuxfleurs.fr/
service.contact.email = coucou@deuxfleurs.fr
service.startdate = 01/01/2020
service.status.level = OK
service.registration = Member
service.registration.load = OPEN
service.install.type = SOURCES
software.name = Plume
software.website = https://joinplu.me/
software.license.url = https://git.joinplu.me/Plume/Plume/src/branch/main/LICENSE
software.license.name = AGPL-3.0
software.version = 8709f6cf9f8ff7e3c5ee7ea699ee7c778e92fefc
software.source.url = https://git.joinplu.me/Plume/Plume
host.name=Deuxfleurs
host.server.distribution=NixOS
host.server.type=PHYSICAL
host.provider.type=HOME
host.country.code=FR
host.country.name=France

View file

@ -1,12 +0,0 @@
{
"m.homeserver": {
"base_url": "https://im.deuxfleurs.fr"
},
"m.identity_server": {
"base_url": "https://vector.im"
},
"im.vector.riot.jitsi": {
"preferredDomain": "jitsi.deuxfleurs.fr"
}
}

View file

@ -1 +0,0 @@
{ "m.server": "im.deuxfleurs.fr:443" }

View file

@ -1,13 +0,0 @@
extends _layout.pug
prepend root
- title = "deuxfleurs"
block content
section
h1 404 - Page non trouvée
p La page que vous cherchez n'existe pas sur ce site web.
p Si vous pensez que c'est une erreur, les informations pour nous contacter sont disponibles sur notre page d'accueil.

View file

@ -1,144 +0,0 @@
extends _layout.pug
prepend root
- title = "CGU"
block content
section
h1 Conditions Générales d'Utilisation
p 10/03/2022
p En utilisant les services de Deuxfleurs, vous acceptez dêtre lié par les conditions suivantes.
h2 Évolution des conditions générales d'utilisation
p Deuxfleurs se réserve le droit de mettre à jour et modifier ces conditions. Dans ce cas, Deuxfleurs informe les personnes concernées par mail si elle le peut ou par un affichage sur le site.
h2 Accès aux services
p
| Certains services sont en accès libre, d'autre requièrent un compte. Vous pouvez obtenir un compte par cooptation d'un membre existant ou en faisant une demande directement par email à l'association.
| Certains services sont soumis à l'approbation préalable de Deuxfleurs selon les ressources disponibles. La liste des services et leurs conditions d'accès peut-être obtenue en contactant l'association.
h2 Fonctionnement
h3 Délais de mise en service
p Deuxfleurs propose ses services grâce à des bénévoles, de ce fait Deuxfleurs ne sengage sur aucun délai de mise en service. Nous essayons toutefois de faire de notre mieux pour les fournir dans les 7 jours.
h3 Transmission sécurisée didentifiants
p
| Deuxfleurs ne vous demandera jamais de communiquer vos mots ou phrases de passe.
| Lorsque Deuxfleurs doit vous transmettre un identifiant, Deuxfleurs le fera via email ou en physique.
h3 Intervention en cas de panne
p En cas de panne constatée et si aucun message natteste sur la page de statut que Deuxfleurs est en train de corriger le dysfonctionnement, vous devez faire un signalement via Matrix.
p Deuxfleurs propose lensemble de ses services grâce à des bénévoles qui feront ce quils et elles peuvent pour résoudre les problèmes techniques qui pourraient subvenir.
h3 Intégrité des données
p Deuxfleurs réalise des sauvegardes quotidiennes afin déviter des pertes de données. Les sauvegardes sont conservées selon cette politique suivante: 1/jour jusquà 1 mois, 1/semaine jusquà 3 mois, 1/mois jusquà 1 an. Les sauvegardes sont stockées de manière chiffrée avec un mot de passe par l'association à Suresnes.
p Deuxfleurs ne peut être tenu responsable de lintégrité des données et des conséquences liées à une perte de données.
p Deuxfleurs recommande aux usager·es davoir une sauvegarde locale afin dassurer lintégrité de leurs données.
h3 Responsabilité de Deuxfleurs
p Deuxfleurs est assujetti à une obligation de moyens. En cas de défaillance, Deuxfleurs ne peut être tenu pour responsable des dommages indirects tels que pertes dexploitation, préjudices commerciaux, perte de Clientèle, de chiffre daffaires, de bénéfices ou déconomies prévus, ou de tout autre préjudice indirect.
h3 Mésusage des services
p Vous devez respecter les lois et réglementations en vigueur lors de lusage des services proposés que ce soit en matière de respect de la vie privée, denvoi de mails en grande quantité, de propriété intellectuelle, de propos discriminatoires, dappel à la haine, de harcèlement, datteinte aux libertés fondamentales de personnes, etc.
p En cas dusage prohibé, Deuxfleurs peut se trouver dans lobligation de déclencher la suspension totale ou partielle du service, le retrait de contenu, ou toute autre mesure que les lois et réglementations lui imposent. Vous devez respecter les autres utilisateurs en faisant preuve de civisme et de politesse. Deuxfleurs se réserve le droit de supprimer tout contenu paraissant non pertinent ou contrevenant à ces principes, selon son seul jugement.
p Par ailleurs, si un ou une utilisatrice abuse du service, par exemple en monopolisant des ressources machines partagées, son contenu ou son accès pourra être supprimé, si nécessaire sans avertissement ni négociation. Deuxfleurs reste seul juge de cette notion «dabus» dans le but de fournir le meilleur service possible à lensemble des usagers et usagères.
h3 Devenir des services
p Deuxfleurs peut par ailleurs choisir (de résilier des abonnements ou) darrêter des services si Deuxfleurs estime ne plus être en mesure de fournir lesdits services. Si Deuxfleurs en a la possibilité, elle fera de son mieux pour laisser un délai suffisant pour permettre à tout le monde de migrer sereinement.
h3 Support et conseil
p Vous pouvez nous signaler des souhaits sur la création de futur service, mais sachez que nous ne pourrons pas créer de nouveaux services en moins de 6 mois. Deuxfleurs pourra toutefois vous rediriger vers des chatons à même de répondre à vos demandes.
p En dehors de dysfonctionnement technique, Deuxfleurs propose également de vous aider dans la réalisation de votre projet avec les services de Deuxfleurs selon l'envie et le temps disponible de ses membres. Deuxfleurs se réserve le droit de facturer le temps de support et de conseil pour des projets importants après avoir prévenu les utilisateurs en amont.
h3 Résiliation dun compte
p Si vous souhaitez résilier un compte, vous devez le signaler à Deuxfleurs.
h2 Nos engagements
p
| Deuxfleurs nexploitera vos données personnelles que dans le cadre de ces 5 finalités:
ul
li fournir le service pour lesquels vous avez transmis vos données
li produire déventuelles statistiques anonymisées et agrégées
li vous prévenir dun changement important sur le service (panne, notification dintrusion et de vol de données, changement dinterface, date darrêt du service...)
li obtenir votre avis sur les services et laction de lassociation
li vous inviter à participer à un évènement de Deuxfleurs
p Deuxfleurs ne transmettra ni ne revendra vos données personnelles (votre vie privée nous tient - vraiment - à cœur). Votre contenu vous appartient tout autant, toutefois, nous vous encourageons à le publier sous licence libre si cest pertinent.
p
| Une modification du paragraphe précédent, contrairement au reste de la présente charte, ne peut se faire simplement par une simple notification. Si une telle modification devait survenir, elle :
ul
li Ne serait pas rétroactive
li Demandera un accord explicite de votre part pour continuer à utiliser les services fournis par Deuxfleurs
li Provoquera une révocation préalable à la modification auprès de tous les soutiens de Deuxfleurs ayant à cœur les problématiques de respect de la vie privée.
h3 Charte CHATONS
p Deuxfleurs sengage à respecter la charte du Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires dans le cadre de son activité dhébergeur et de fourniture de services en ligne
p Deuxfleurs est candidat à lintégration au sein de ce collectif.
p Plus dinformation sur la charte C.H.A.T.O.N.S. :
a(href="https://chatons.org/fr/charte") chatons.org/fr/charte
h3 Localisation des données
p
| Vos données sont localisées en France et en Belgique, sur les serveurs de nos membres. Un détail complet de l'infrastructure et de l'emplacement des données par service est disponible sur notre page&nbsp;
a(href="https://wiki.deuxfleurs.fr/Technique/Infra") Infrastructure
| .
h3 Devenir des données
p Une fois le compte clôturé, Deuxfleurs peut procéder à la suppression des données.
p Certains services en libre accès permettent de configurer la péremption des données, dautres les conservent de façon permanentes, mais vous pouvez demander leur retrait si vous pouvez prouver que vous en êtes lauteur⋅ice.
h3 Exercice de vos droits
p
| Conformément à larticle 34 de la loi « Informatique et Libertés », vous pouvez exercer les droits suivant en envoyant un mail à ca
img.simple(height="15", src="img/arobase.png")
| deuxfleurs.fr :
ul
li droits daccès, de rectification, deffacement et dopposition
li droit à la limitation du traitement
li droit à la portabilité des données
li droit de ne pas faire lobjet dune décision individuelle automatisée
h3 RGPD
p Vous et Deuxfleurs sengagent à respecter la réglementation en vigueur applicable au traitement de données à caractère personnel et, en particulier, le règlement (UE) 2016/679 du Parlement européen et du Conseil du 27 avril 2016 applicable à compter du 25 mai 2018, dite RGPD.
h2 Litige et juridiction compétente
p Le droit applicable aux présentes est le droit français. En cas de différent, les parties recherchent une solution amiable. Si la démarche échoue, le litige sera tranché par le Tribunal de Grande Instance de Rennes.
p Le fait que lusager ou Deuxfleurs ne se prévale pas à un moment donné de lune des présentes conditions générales et/ou tolère un manquement par lautre partie ne peut être interprété comme valant renonciation par lusager ou Deuxfleurs à se prévaloir ultérieurement de ces conditions.
p La nullité dune des clauses de ces conditions en application dune loi, dune réglementation ou dune décision de justice nimplique pas la nullité de lensemble des autres clauses. Par ailleurs lesprit général de la clause sera à conserver en accord avec le droit applicable.

View file

@ -1,130 +0,0 @@
extends _layout.pug
prepend root
- title = "Gestion des risques"
block content
section
h1 Gestion des risques
p
| Un risque se définit par la combinaison d'un danger, c'est à dire un évènement redouté, et sa probabilité d'occurence.
| La gestion des risques consiste à minimiser les risques en les évaluant et en mettant en place des solutions pour réduire leur impact.
h2 🧰 Risques matériels
h3 Panne de composants informatiques
p
b Définition du risque
| : Un serveur est composé d'un ensemble de pièces avec une durée de vie limitée. La panne d'une de ces pièces cause une interruption de service et possiblement une perte de données (comme dans le cas d'un disque dur par exemple). La probabilité de ces pannes est importante car certains composants ont une durée de vie limité, comme les disques durs, et de plus nous utilisons du matériel reconditionné qui a donc déjà été utilisé.
p
b Mesure mise en place
| : Nous avons à disposition des pièces de rechange pour pouvoir réparer rapidement nos serveurs. De plus, nous avons en permanence plusieurs machines en production de sorte que lorsque l'une d'elle tombe en panne, les services qu'elle gérait sont automatiquement basculés sur les autres machines fonctionnelles. Les données sont répliquées sur 3 disques durs différents, de sorte que si un disque dur tombe en panne, cette dernière est toujours disponible sur 2 autres disques.
h3 Bug logiciel
p
b Définition du risque
| : Un bug logiciel peut rendre un service indisponible voire impliquer une perte de données. Cette indisponibilité et cette perte de donnée, contrairement à une panne matériel, peut se propager à l'ensemble de nos serveurs.
p
b Mesure mise en place
| : Les données, en plus d'être répliquées automatiquement, sont périodiquement sauvegardées via un logiciel indépendant sur une période d'au moins 2 mois sur un site distant (Suresnes), de sorte que le logiciel qui fournisse le service n'ait pas accès aux données de sauvegardes et ne puisse donc pas les effacer. Les services quant à eux sont définis déclarativement, dans chaque modification est archivée, de sorte qu'il est possible de revenir sur une version antérieure du service qui soit stable.
h3 Panne du réseau électrique ou internet
p
b Définition du risque
| : Nous faisons appel à des prestataires externe pour l'électricité (eg. EDF) et la connexion Internet (eg. Free). Lors de travaux dans la rue, de tension sur le réseau (eg. froid ou confinement), ou simplement d'erreur de gestion, ces réseaux peuvent être coupés localement ou au niveau national. En résulte une indisponibilité des services pendant la coupure.
p
b Mesure mise en place
| : Notre infrastructure est répartie sur des zones éloignées géographiquement (aujourd'hui Rennes et Orsay), de sorte qu'une panne locale ne nécessitera que de migrer les services d'une zone à l'autre. Pour le cas d'une panne au niveau national, nous acceptons ce risque : il est très faible et, la plupart du temps, le service est rétabli en quelques heures.
h3 Panne des autres prestataires et tiers-parties
p
b Définition du risque
| : Deuxfleurs fait appel à un certains nombre de prestataires et tiers parties pour fournir ses services : bureau d'enregistrement DNS (Gandi), Hébergeur DNS (Gandi), certificats X.509 (Let's Encrypt), système d'exploitation (NixOS, Debian), logiciels (Docker Hub, Github, etc.). La panne ou le blocage par une de ces tiers-parties impacteraient les services de Deuxfleurs.
p
b Mesure mise en place
| : Nous essayons de limiter le nombre de prestataires que nous utilisons et évitons de verrouiller fortement nos choix technologiques vis à vis d'un fournisseur particulier.
| En dehors de ces points, nous acceptons ces risques.
h2 😵 Risques humains
h3 Erreur d'administration
p
b Définition du risque
| : Une erreur d'administration des services peut aboutir à une interruption de services et à une perte de données sur l'ensemble de nos serveurs. Elle peut également générer beaucoup de stress pour la personne en charge de l'administration.
p
b Mesure mise en place
| : Les données, en plus d'être répliquées automatiquement, sont périodiquement sauvegardées via un logiciel indépendant sur une période d'au moins 2 mois sur un site distant (Suresnes), de sorte que le logiciel qui fournisse le service n'ait pas accès aux données de sauvegardes et ne puisse donc pas les effacer. Les services quant à eux sont définis déclarativement, dans chaque modification est archivée, de sorte qu'il est possible de revenir sur une version antérieure du service qui soit stable. En cas d'erreur, la personne en charge de l'administration doit demander un accompagnement ou un relai pour limiter les risques d'aggravement de la situation et ne pas avoir à supporter cette situation stressante seule.
h3 Absence d'astreinte
p
b Définition du risque
| : Que ce soit dans les datacenters au niveau matériel, ou dans les services informatiques, au niveau logiciel, de nombreuses organisations mettent en place des astreintes.
| Autrement dit, une ou plusieurs personnes identifiées doivent se rendre disponible sur des périodes données pour pouvoir intervenenir rapidement sur les serveurs.
| Dans le cas de Deuxfleurs, une astreinte empêcherait une personne de quitter son domicile pour des vacances ou même rendre visite à sa famille !
p
b Mesure mise en place
| : Nous faisons en sorte d'avoir des serveurs chez des membres différents et d'avoir plusieurs personnes en mesure de réaliser une même opération de maintenance.
| Si un problème devait arriver pendant l'absence de la personne concernée, un autre membre devrait pouvoir prendre le relai dans les heures ou les jours qui viennent, par exemple en migrant les services chez lui ou en le réparant à distance.
h3 Perte d'expertise
p
b Définition du risque
| : L'infrastructure que nous avons déployée demande des connaissances avancées en informatique détenues par une fraction des membres de l'association. Si cette fraction venait à quitter l'association, la maintenance de ses services pourrait ne plus être réalisée par les membres restants, mettant en péril sa pérennité.
p
b Mesure mise en place
| : Nous essayons d'avoir toujours au moins deux personnes en mesure de réaliser une tâche. Nous essayons de documenter et standardiser notre infrastructure.
h3 Risques juridiques
p
b Définition du risque
| : Deuxfleurs pourrait enfreindre la loi et voir sa pérennité engagée en cas de procès.
p
b Mesure mise en place
| : Nous faisons une veille juridique concernant les hébergeurs. Nous mitigeons aussi ce risque via la co-optation qui permet de contrôler notre croissance et les personnes qui nous rejoignent.
h2 👿 Malveillance
h3 Attaque informatique
p
b Définition du risque
| : Une attaque informatique, venant d'un·e administrateur·ice ou d'une personne extérieure, peut aboutir à l'indisponibilité de nos services, à une perte de données, mais aussi à la fuite de ces dernières.
p
b Mesure mise en place
| : Pour se protéger d'un·e administrateur·ice malveillant·e, le groupe d'administrateur·ices existant ne recrute que de nouvelles personnes sur cooptation et après avoir jugé cette personne de confiance. Nous prévoyions également de chiffrer de plus en plus de données côté client, de sorte qu'une personne en charge de l'administration ne soit pas en mesure de lire le contenu stocké sur les serveurs. Pour se protéger d'une personne extérieure, nous maintenons notre système à jour et avons entamé une démarche de défense en profondeur.
h3 Vol du matériel
p
b Définition du risque
| : Une personne entrant par effraction chez un de nos membres pourrait voler les ordinateurs. Cet évènement peut impacter la disponibilité de nos services, l'intégrité de nos données, mais aussi la confidentialité de ces dernières.
p
b Mesure mise en place
| : Nous acceptons ce risque pour le moment. Le chiffrement côté client, pour les services le supportant, permet de protéger la confidentialité des données. Nous prévoyions à terme de chiffrer les disques durs à froid en plus.
h3 Abus des services
p
b Définition du risque
| : Une personne ayant des accès au service, où se les aillant fait voler, peut opérer un déni de service sur notre infrastructure, ou alors nuire à la réputation de notre service sur un réseau fédéré (eg. spam via email). Cela entraine une indisponibilité des services et/ou une dégradation plus ou moins durable de la qualité de ces derniers.
p
b Mesure mise en place
| : Nous mitigeons actuellement ce risque via la cooptation, où nous faisons confiance aux nouveaux membres et les invitons à bien gérer leurs identifiants.

View file

@ -1,96 +0,0 @@
extends _layout.pug
prepend root
- title = "Mentions légales"
block content
section
h1 Mentions légales
h2 Éditeur et hébergeur
p
b Deuxfleurs
br
| Deuxfleurs est l'éditeur et l'hébergeur de l'ensemble de ses services et contenus à l'exception de sa
a(href="https://git.deuxfleurs.fr") &nbspforge git
br
| Association loi 1901 déclarée en préfecture d'Ille-et-Vilaine le 29 janvier 2020.
p
| Numéro RNA : W353020804
br
| Numéro SIRET : 89961256800019
p
| Siège social : Association Deuxfleurs
br
| 10A Allée de Lanvaux
br
| 35700 RENNES
br
| FRANCE
p
b OVH
br
| OVH est uniquement en charge de l'hébergement de la
a(href="https://git.deuxfleurs.fr") &nbspforge git.
br
| SASU Société par actions simplifiée à associé unique.
p Numéro SIRET : 42476141900045
p
| Siège social : OVH
br
| 2 RUE KELLERMANN
br
| 59100 ROUBAIX
br
| FRANCE
h3 Direction de la publication
p
| Quentin Dufour
br
| Adrien Luxey
h2 Informatique et libertés
h3 Informations personnelles collectées
p En France, les données personnelles sont notamment protégées par la loi n°78-17 du 6janvier 1978, la loi n°2004-801 du 6août 2004, larticle L.226-13 du Code pénal et la Directive Européenne du 24 octobre 1995.
p En tout état de cause Deuxfleurs ne collecte des informations personnelles relatives à lutilisateur (nom, adresse électronique, coordonnées téléphoniques) que pour le besoin des services proposés par les sites du réseau Deuxfleurs. Lutilisateur fournit ces informations en toute connaissance de cause, notamment lorsquil procède par lui-même à leur saisie. Il est alors précisé à lutilisateur des sites du réseau Deuxfleurs le caractère obligatoire ou non des informations quil serait amené à fournir.
h3 Rectification des informations nominatives collectées
p
| Conformément aux dispositions de larticle34 de la loi n°48-87 du 6 janvier 1978, lutilisateur dispose dun droit de modification des données nominatives collectées le concernant. Pour ce faire, lutilisateur envoie à Deuxfleurs:
ul
li un courrier électronique à ca (arobase) deuxfleurs.fr
li un courrier à ladresse du siège de lassociation (indiquée ci-dessus) en indiquant son nom ou sa raison sociale, ses coordonnées physiques et/ou électroniques, ainsi que le cas échéant la référence dont il disposerait en tant quutilisateur du site Deuxfleurs.
p La modification interviendra dans des délais raisonnables à compter de la réception de la demande de lutilisateur.
h2 Limitation de responsabilité
p Ce site comporte des informations mises à disposition par des communautés ou sociétés externes ou des liens hypertextes vers dautres sites qui nont pas été développés par Deuxfleurs. Le contenu mis à disposition sur le site est fourni à titre informatif. Lexistence dun lien de ce site vers un autre site ne constitue pas une validation de ce site ou de son contenu. Il appartient à linternaute dutiliser ces informations avec discernement et esprit critique. La responsabilité de Deuxfleurs ne saurait être engagée du fait des informations, opinions et recommandations formulées par des tiers.
p Deuxfleurs ne pourra être tenue responsable des dommages directs et indirects causés au matériel de lutilisateur, lors de laccès au site, et résultant soit de lutilisation dun matériel ne répondant pas aux spécifications techniques requises, soit de lapparition dun bug ou dune incompatibilité.
p Deuxfleurs ne pourra également être tenue responsable des dommages indirects (tels par exemple quune perte de marché ou perte dune chance) consécutifs à lutilisation du site.
p Des espaces interactifs (comme la solution de messagerie instantanée Matrix) sont à la disposition des utilisateurs sur le site Deuxfleurs. Deuxfleurs se réserve le droit de supprimer, sans mise en demeure préalable, tout contenu déposé dans cet espace qui contreviendrait à la législation applicable en France, en particulier aux dispositions relatives à la protection des données. Le cas échéant, Deuxfleurs se réserve également la possibilité de mettre en cause la responsabilité civile et/ou pénale de lutilisateur, notamment en cas de message à caractère raciste, injurieux, diffamant, ou pornographique, quel que soit le support utilisé (texte, photographie…).
h2 Limitations contractuelles sur les données techniques
p Deuxfleurs ne pourra être tenue responsable de dommages matériels liés à lutilisation du site.
h2 Propriété intellectuelle
p Les contenus sont publiés sous la responsabilité des utilisateurs.

View file

@ -1,41 +0,0 @@
extends _layout.pug
prepend root
- title = "Sources"
block content
section
h1 Accéder aux sources des logiciels utilisés
p Deuxfleurs utilise exclusivement des logiciels libres dans le cadre de son activité. Vous pouvez retrouver ici la liste des sources des logiciels utilisés.
:markdown-it
- [Debian](https://packages.debian.org/)
- [NixOS](https://github.com/NixOS)
- [Nomad](https://github.com/hashicorp/nomad)
- [Consul](https://github.com/hashicorp/consul/)
- [Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage)
- [Tricot](https://git.deuxfleurs.fr/Deuxfleurs/tricot)
- [Bottin](https://git.deuxfleurs.fr/Deuxfleurs/bottin/)
- [Guichet](https://git.deuxfleurs.fr/Deuxfleurs/guichet/)
- [Diplonat](https://git.deuxfleurs.fr/Deuxfleurs/diplonat/)
- [Stolon](https://github.com/sorintlab/stolon)
- [Docker](https://github.com/moby/moby)
- [Ansible](https://github.com/ansible/ansible)
- [Drone](https://github.com/harness/drone)
- [Restic](https://github.com/restic/restic)
- [Cryptpad](https://github.com/xwiki-labs/cryptpad)
- [Sogo](https://github.com/inverse-inc/sogo)
- [alps](git.deuxfleurs.fr/Deuxfleurs/alps)
- [Synapse](https://github.com/matrix-org/synapse)
- [Element](https://github.com/vector-im/element-web)
- [Jitsi](https://github.com/jitsi)
- [Plume](https://github.com/Plume-org/Plume)
- [age](https://github.com/FiloSottile/age)
- [Minio](https://github.com/minio/minio)
- [Proxmox](https://git.proxmox.com/)
- [Grafana](https://github.com/grafana/grafana)
- [Prometheus](https://github.com/prometheus/prometheus)
- [Infra (legacy)](https://git.deuxfleurs.fr/Deuxfleurs/infrastructure)
- [Infra (next)](git.deuxfleurs.fr/Deuxfleurs/nixcfg)

View file

@ -1,48 +0,0 @@
include _mixin/menu.pug
block root
doctype html
html(lang="fr")
head
meta(charset='utf-8')
title 💮💮 deuxfleurs - #{title}
link(rel="stylesheet", href="/css/main.css")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
body
aside
header
a#menu(href="#").mobile_inline
svg(viewBox="0 0 100 80", width="40", height="40")
rect(width="100", height="20")
rect(y="30" width="100" height="20")
rect(y="60" width="100" height="20")
h1
a(href="/") deuxfleurs
nav.computer_block
section.center
img(alt="emoji fleur", src="/img/flower.svg", width="40")
|
img(alt="emoji fleur", src="/img/flower.svg", width="40")
ul
li
a(href="https://plume.deuxfleurs.fr/timeline/1") Actualités
li
a(href="https://man.deuxfleurs.fr") Wiki
li
a(href="https://guichet.deuxfleurs.fr") Mon compte
hr
+menu(root, element)
main
block content
script.
(_ => {
const hamburger = document.getElementById('menu')
hamburger.onclick = _ => {
const nav = document.querySelector('body > aside > header > nav')
console.log(nav.style.display)
nav.style.display = nav.style.display != 'block' ? 'block' : 'none'
}
})()

View file

@ -1,10 +0,0 @@
extends ./_layout.pug
prepend root
- if (element.tags.includes('is_index'))
- title = element.nice_path[element.nice_path.length - 1]
- else
- title = element.nice_name
block content
!= markdown

View file

@ -1,14 +0,0 @@
mixin menu(o, element)
ul
each val in o.children
- if (val.type == 'folder' && val.tags.includes('document'))
li
- if (val.tags.includes('has_index'))
a(href=val.url, class=val.index.url == element.url ? 'selected' : null)= val.nice_name
- else
span= val.nice_name
- if (element.url.includes(val.url))
+menu(val, element)
- else if (val.type == 'file' && val.tags.includes('document') && !val.tags.includes('is_index'))
li
a(href=val.url, class=val.url == element.url ? 'selected' : null)= val.nice_name

View file

@ -1,82 +0,0 @@
/* some reset */
html, body {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
height: 100%;
font-size: 24px;
}
/* fonts */
@font-face {
font-family: 'IM Fell English';
font-style: italic;
font-weight: 400;
font-display: swap;
src: url(../fonts/IMFellEnglish-Italic.ttf) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: 'IM Fell English';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(../fonts/IMFellEnglish-Regular.ttf) format('truetype');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
html {
background-color: #fbfcf8;
}
body {
max-width: 900px;
padding: 1em;
margin: auto;
font-family: 'IM Fell English', Times, Serif;
color: #5c544a;
}
.hero {
background-image: url("../img/illus.jpg");
transform: rotate(-2deg);
height: 530px;
background-size: cover;
background-position: 50% 0%;
border-radius: 10px;
margin: -1.8em -1em 3em -1em;
}
.hero img {
position: absolute;
top: -14px;
left: 25px;
height: 100px;
}
header {
padding: 1em 0em 2em 0em;
}
article {
background-color: #f4eccd;
padding: 1em;
border-radius: 10px;
}
.brand {
font-size: 2em;
float: left;
}
nav {
float: right;
}
nav li {
padding: 0.5em;
display: inline;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 550 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View file

@ -1,39 +0,0 @@
doctype html
html
head
meta(charset="utf-8")
title df #{title}
link(rel="stylesheet", href="css/main.css")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
body
header
.brand Deuxfleurs
nav
ul
li L'association
li Nos services
li Documentation
li
a(href="https://guichet.deuxfleurs.fr") Mon compte
br(style="clear:both")
main
article
.hero
img(src="img/paper-clip.png")
h1 Cher·e internaute, un autre internet est possible
p
| Arrêtez-vous cinq minutes. Prenez le temps de l'imaginer avec moi.
| Imaginez pouvoir accéder à l'information sans avoir à se demander si c'est une publicité ou non ?
| Imaginez que vos communications avec vos proches ne soient pas espionnées pour prédire votre prochain malus d'assurance ?
| Imaginez un lieux où vos amis verrez le contenu que vous publiez et non un obscure contenu viral ?
// Peut être rajouter des petits dessins genre gribouillage carnet.
h2 Des cabanes pour se protéger du sombre nuage
p Blabla
h2 Rejoignez-nous
footer
p Un footer

View file

@ -1,323 +0,0 @@
/*
* FONTS
*/
@font-face {
font-family: "Heroes";
src: url('../fonts/texgyreheros-regular.otf') format('truetype');
}
/*
* RESET CSS
*/
* {
font-family: Heroes;
font-size: 1em;
/* We use browser's default */
margin: 0;
padding: 0;
}
html {
height: 100%
}
body {
display: flex;
max-width: 1200px;
flex-direction: row;
margin: auto;
}
/*
* RESPONSIVE
*/
.mobile_block,
.mobile_inline {
display: none
}
@media screen and (max-width: 800px) {
body {
flex-direction: column
}
.computer_block {
display: none
}
.mobile_block {
display: block
}
.mobile_inline {
display: inline
}
}
/*
* CORE TEMPLATE
*/
/* Header + Menu */
body>aside>header {
color: white;
background: rgb(12, 144, 110);
background: linear-gradient(0deg, rgb(21, 65, 73) 0%, rgb(55, 141, 100) 50%, rgb(12, 144, 110) 100%);
padding: 1.5rem;
margin: 0.8rem;
border-radius: 0.5rem;
box-shadow: 0px 0px 30px rgba(31, 38, 103, 0.2);
}
body>aside>header>a>svg {
fill: white;
display: inline;
vertical-align: sub;
margin-right: 1em;
}
body>aside>header>h1 {
display: inline
}
body>aside>header a {
color: white;
text-decoration: none;
}
body>aside>header>nav ul {
list-style-type: none;
padding-left: 1em;
}
body>aside>header>nav>ul {
padding-left: 0px
}
body>aside>header>nav a:hover {
text-decoration: underline
}
body>aside>header>nav .selected {
font-weight: bold
}
body>aside>header>nav .selected::before {
content: "» "
}
body>main {
padding: 1.5rem;
max-width: 1200px;
}
/*
* TEXT CORE (think markdown)
*/
h1 {
font-size: 2.5rem
}
h2 {
font-size: 2.0rem
}
h3 {
font-size: 1.75rem
}
h4 {
font-size: 1.50rem
}
h5 {
font-size: 1.25rem
}
h6 {
font-size: 1.10rem
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin-bottom: 1rem
}
section,
p,
ul,
ol,
table,
pre {
margin-bottom: 1rem
}
ul,
ol {
padding-left: 1.5em
}
a {
color: #08634c;
}
table {
border-collapse: collapse
}
th {
background-color: #fafafa
}
td,
th {
border: 1px solid #ddd;
padding: 0.3rem 0.5rem;
}
pre {
background-color: #1e1e1e;
padding: 1rem;
overflow-x: auto;
}
code {
font-family: Monospace;
background-color: #1e1e1e;
color: #fff;
padding: 0.25rem 0.4rem;
}
img {
border-radius: 0.5rem;
box-shadow: 0px 0px 30px rgba(31, 38, 103, 0.2);
margin: 0.5rem;
}
img.simple {
border-radius: 0px;
box-shadow: none;
margin: 0px;
}
strong {
background-color: rgb(12, 144, 110);
color: #fff;
padding: 0.20rem 0.4rem;
}
/*
* UTILS
*/
/* float */
.left {
float: left
}
.right {
float: right
}
section::after,
p::after {
clear: both;
display: block;
content: "";
}
/* center */
.center {
margin-left: auto;
margin-right: auto;
text-align: center;
}
/*
* ELEMENTS
*/
input {
border: 0.1em black solid;
width: 50%;
min-width: 300px;
font-size: 1.6em;
border: 0.1em black solid;
padding: 0.3em;
}
.button {
padding: 0.3em;
background-color: #519c60;
font-size: 1.6em;
border: 0.1em solid #519c60;
color: white;
margin: 0em 0em 0em 1em;
text-decoration: none;
}
/* service button */
.service-box {
color: #000;
text-decoration: none;
border: 1px solid #ddd;
border-radius: 0.5rem;
width: 250px;
text-align: center;
margin: 1em 1em 0em 0em;
display: block;
}
.service-box:hover {
background-color: #000;
color: #fff;
}
.callout {
font-size: 1.2rem;
text-align: center;
position: relative;
margin: 2rem 0;
padding: 1rem;
border: 1px solid rgba(10, 10, 10, 0.25);
border-radius: .2rem;
background-color: #cbf0e6;
}
.frame {
border-left: 1rem solid #ddd;
padding-left: 1rem;
}
img.hero {
width: 100%;
margin:-0.5rem;
}
h1.slogan {
text-align:center;
font-size:2rem;
padding: 2rem 0rem;
}
.icon {
font-size: 80px;
height: 120px;
}
section.list {
padding-left:1.5rem;
}
p.fill {
margin: 2rem 0rem;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-opacity="0.0" fill="#FFF" d="M15.632 34.661c-.799-.597-1.498-1.484-2.035-2.592l-.228-.47-.46.249c-.975.528-1.913.858-2.744.969l-.202-3.756-3.636.968c-.157-.854-.125-1.887.096-3.022l.103-.525-.532-.066c-1.242-.154-2.306-.525-3.104-1.08l1.521-2.917-2.988-1.523c.319-.944.948-1.882 1.834-2.735l.377-.363-.379-.36c-.803-.764-1.408-1.554-1.77-2.311l3.51-1.353-2.045-3.159c.74-.402 1.693-.686 2.789-.832l.519-.068-.091-.514c-.215-1.211-.172-2.338.124-3.288l3.308.523.524-3.308c.988.013 2.08.326 3.164.907l.462.248.226-.473c.479-1.003 1.044-1.824 1.653-2.404L18 4.326l2.372-2.92c.609.58 1.175 1.401 1.653 2.404l.226.473.462-.247c1.085-.581 2.178-.894 3.164-.906l.523 3.308 3.31-.525c.296.951.34 2.078.124 3.288l-.092.515.518.069c1.095.145 2.048.43 2.788.832l-2.046 3.156 3.511 1.355c-.361.757-.966 1.547-1.77 2.311l-.379.36.377.363c.888.854 1.516 1.793 1.835 2.736l-2.984 1.52 1.521 2.984c-.812.574-1.871.964-3.094 1.134l-.518.072.096.514c.201 1.089.226 2.083.073 2.909l-3.634-.97-.204 3.757c-.83-.11-1.768-.44-2.742-.968l-.459-.249-.228.47c-.539 1.107-1.237 1.994-2.036 2.591L18 32.293l-2.368 2.368z"/><path d="M7.092 10.678c-.53-1.489-.698-2.97-.432-4.2l2.368.375.987.156.157-.988.375-2.368c1.261.127 2.613.743 3.862 1.706.118-.337.244-.663.382-.967-1.551-1.135-3.223-1.763-4.73-1.763-.123 0-.245.004-.366.013l-.511 3.223-3.224-.511c-.6 1.487-.565 3.415.085 5.393.335-.037.684-.061 1.047-.069zm14.501-5.319c1.248-.962 2.6-1.578 3.86-1.705l.376 2.368.156.988.987-.157 2.369-.376c.266 1.23.098 2.71-.432 4.2.361.009.711.032 1.046.07.651-1.978.685-3.906.085-5.394l-3.225.512-.511-3.224c-.12-.008-.242-.012-.365-.012-1.507 0-3.179.628-4.73 1.762.14.306.266.631.384.968zM7.368 27h.035c.067 0 .157-.604.26-.947-.098.004-.197.046-.294.046-1.496 0-2.826-.303-3.83-.89l1.089-2.128.454-.887-.891-.452-2.136-1.088c.508-1.151 1.515-2.25 2.818-3.143-.287-.219-.561-.441-.81-.669-1.687 1.217-2.846 2.755-3.235 4.31l2.908 1.483-1.482 2.843C3.475 26.501 5.303 27 7.368 27zm27.806-5.846c-.39-1.555-1.548-3.093-3.234-4.311-.25.228-.523.451-.81.669 1.304.893 2.31 1.992 2.817 3.145l-2.136 1.088-.891.453.454.892 1.089 2.137c-1.004.587-2.332.904-3.828.904-.099 0-.199-.01-.299-.013.103.344.192.683.26 1.011l.039.002c2.066 0 3.892-.563 5.112-1.587l-1.482-2.908 2.909-1.482zm-12.653 9.182c-.447 1.517-1.181 2.812-2.119 3.651l-1.695-1.694-.707-.707-.707.707-1.695 1.694c-.938-.839-1.673-2.136-2.12-3.652-.296.206-.593.397-.886.563.636 1.98 1.741 3.559 3.1 4.409L18 33l2.308 2.308c1.358-.851 2.464-2.428 3.101-4.408-.295-.168-.591-.359-.888-.564z" fill="#FFF"/><path fill="#FFF" d="M20.118 5.683c.426 1.146.748 2.596.841 4.284l.2 3.683 3.564-.946c1.32-.351 2.655-.536 3.86-.536.16 0 .318.003.474.01l-1.827 2.819 3.139 1.211c-.958.759-2.237 1.514-3.814 2.123l-3.441 1.328 2.001 3.099c.918 1.42 1.509 2.782 1.838 3.96l-3.244-.865-.182 3.357c-1.019-.677-2.132-1.66-3.198-2.973L18 23.374l-2.328 2.862c-1.066 1.312-2.179 2.295-3.198 2.972l-.18-3.354-3.248.864c.329-1.178.921-2.54 1.839-3.961l2.004-3.099-3.442-1.328c-1.577-.609-2.856-1.363-3.814-2.122L8.768 15l-1.827-2.823c.155-.006.313-.01.473-.01 1.206 0 2.541.185 3.861.536l3.564.947.202-3.683c.092-1.688.415-3.138.84-4.284L18 8.292l2.118-2.609m.19-4.991L18 3.533 15.692.692c-1.989 1.532-3.421 4.992-3.646 9.112-1.617-.43-3.192-.637-4.632-.637-2.11 0-3.929.445-5.161 1.289l1.989 3.073-3.415 1.316c.842 2.366 3.69 4.797 7.54 6.283-2.241 3.465-3.116 7.106-2.407 9.516l3.537-.941.196 3.654c2.512-.07 5.703-2.027 8.307-5.228 2.603 3.201 5.796 5.158 8.306 5.228l.198-3.655 3.535.943c.71-2.411-.165-6.05-2.404-9.517 3.849-1.485 6.696-3.918 7.538-6.283l-3.415-1.318 1.99-3.07c-1.233-.844-3.053-1.29-5.164-1.29-1.438 0-3.013.207-4.63.636-.225-4.119-1.657-7.579-3.646-9.111z"/></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

View file

@ -1,75 +0,0 @@
extends _layout.pug
prepend root
- title = "deuxfleurs"
block content
section
img.hero(alt="Photo d'illustration d'un parterre de fleurs en noir et blanc avec un effet tramage.", src="/img/flower.png")
section
h1.slogan fabriquons un internet convivial
section
h2 avec des outils sobres
section
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/matrix/')
.icon 💬
h5 discussion
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/jitsi/')
.icon 📞
h5 visioconférence
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/web/')
.icon 🌐
h5 sites web
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/emails/')
.icon 📨
h5 emails (beta)
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/cryptpad/')
.icon 📄
h5 collaboration
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/plume/')
.icon ✍️
h5 blog
p ⚠️ À part pour la visioconférence et le pad, vous devez avoir un compte pour utiliser ces outils.&nbsp; Faisons connaissance d'abord 👇
section
h2 avec notre propre infrastructure résiliente
p.fill
img.hero(alt="Une photo en noir et blanc de nos différents serveurs hébergés à domicile.", src="/img/servers.jpg")
p
| Pour fournir nos outils, nous récupérons <b>d'anciens ordinateurs</b> que nous reconditionnons pour servir de serveurs et que nous installons à nos domiciles.
| Actuellement nous avons des machines à <b>Rennes</b> en Bretagne et à <b>Orsay</b> en Ile de France pour la fourniture des services. Nous avons également des machines à <b>Suresnes</b> en Ile de France pour les sauvegarde. Certains de nos outils techniques sont (temporairement) hébergés en datacenter chez OVH.
| <a href="https://man.deuxfleurs.fr/infrastructures/">En savoir plus</a>.
p
| Cette infrastructure atypique nous mène à développer de nouveaux logiciels libres.
| Si vous êtes dans la technique, vous pourriez être intéressé·e par <a href="https://garagehq.deuxfleurs.fr/">Garage</a>, <a href="https://bottin.eu">Bottin</a>, <a href="https://git.deuxfleurs.fr/lx/tricot">Tricot</a>, <a href="https://git.deuxfleurs.fr/Deuxfleurs/diplonat">Diplonat</a> et nos <a href="https://git.deuxfleurs.fr/Deuxfleurs">autres projets</a>.
section
h2 avec des valeurs fortes
section.list
div ⇨ <b>la coopération</b> - eg. promouvoir l'intéropérabilité, les communs, le libre, et les formats de données ouverts
div ⇨ <b>l'autonomie</b> - eg. gérer nos propres moyens de communications, prendre nos propres décisions
div ⇨ <b>la solidarité</b> - eg. partager le savoir, partager les ressources informatiques, s'entraider pour la gestion des services
div ⇨ <b>la liberté</b> - eg. permettre à toutes et tous de s'exprimer, respecter la vie privée
p
a(href="https://plume.deuxfleurs.fr/timeline/1") Suivez notre actualité, réflexions et analyses sur notre blog Plume</a>
section
h2 rejoignez-nous !
p.spacing L'accès à nos services est à <b>prix libre</b>, se fait <b>sur demande</b> directement à un membre ou par email et est conditionné par <b>les ressources disponibles</b>, à la fois matérielles et humaines.
p.spacing Nous encourageons nos usager·es ainsi que toute personne souhaitant collaborer à <b>rejoindre l'association</b> afin de participer à sa gestion. L'admission se fait par <b>cooptation</b>, soit directement si vous connaissez déjà un membre, soit en échangeant d'abord avec nous par email ou sur Matrix. L'objectif de la cooptation est de s'assurer que nos futurs membres partageront bien les valeurs de notre association. La cotisation est de <b>10 euros par an</b>.
p.spacing
| Si vous connaissez un membre de l'association, contactez le directement !
br
| Sinon, vous pouvez nous écrire à <b>coucou</b><img class="simple" alt="arobase" src="img/arobase.png" height="15"/><b>deuxfleurs.fr</b> ou nous rejoindre sur notre salon Matrix #deuxfleurs:deuxfleurs.fr pour un premier contact.

View file

@ -1,2 +0,0 @@
User-agent: *
Allow: /

865
style-bon.css Normal file
View file

@ -0,0 +1,865 @@
/*PARAMETRES GENERAUX*/
:root{
--big_margin:100px;
--med_margin:50px;
--small_margin:10px;
--day-background: #fdfff9;
--day-highlight-color: white;
--day-highlight-bg: darkgreen;
--night-highlight-color: #ebebed;
--night-highlight-bg: #565a4d;
--night-background: #242526;/*#3c3c39;*/
--txt-night: #ebebed;/*#c7c4d4;*/
color-scheme: light dark;
/*
--menu: pink;
--jardin: darkseagreen;
--infras: gold;
--rennes: orange;
--orsay: chartreuse;
--txt_infras: bisque;
--outils: coral;
--liste_outils: aliceblue;
--txt_outils: aquamarine;
--valeurs: grey;
--ronce: cornflowerblue;
--liste_valeurs: brown;
--connaissance: chocolate;
--txt_connaissance: crimson;
--calendrier: darkkhaki;
--footer: deeppink;
--lightgrey: lightgrey;*/
}
html, body, main{
margin:0;
padding: 0;
font-size: 13px;
}
body{
font-family: monospace;
color: black;
}
pre{
padding: 0;
margin: 0;
font-size: 1rem;
}
p{
font-size: 1rem;
}
a{
color: darkgreen;
}
h1:after, h2:after{
content:'\A___________________________________\A"""""""""""""""""""""""""""""""""""';
}
h2, h1{
font-size: 1rem;
font-weight: normal;
margin: 0px;
padding: 0px;
text-align: left;
}
h2, h1{
text-transform: uppercase;
white-space:pre;
overflow: hidden;
}
img{
width: 100%;
}
#txt_infras, #txt_outils, #txt_connaissance{
line-height: 1.3rem;
text-align: justify;
text-justify: inter-character;
hyphens: auto;
word-spacing: -2px;
-ms-hyphens: auto;
-webkit-hyphens: auto;
-moz-hyphens: auto;
margin-top: 0;
}
.noscroll{
overflow: hidden;
}
pre.center{
font-size: 1rem;
display: flex;
justify-content: center;
}
div#calendrier > pre.center{
justify-content: right;
}
#calendrier #mois_actuel{
margin-bottom: 1rem;
}
#mois_actuel, #mois_suivant{
text-align: center;
}
.highlight{
color: var(--day-highlight-color);
background-color: var(--day-highlight-bg);
}
#txt_connaissance li{
margin-bottom: 1rem;
}
#txt_connaissance p{
margin-top: 0px;
}
pre.center > a{
font-size: 1rem;
display: contents;
text-decoration: 1px black solid;
}
/*GESTION DE LA GRILLE DU DOCUMENT*/
div#container{
background-color: var(--day-background);
display: grid;
grid-template-columns: [main-col-start] repeat(12, calc(100% / 12) [main-col-sep]);
grid-template-rows:
[main-row-debut] auto [main-row-fin]
var(--big_margin)
[footer-start] auto [footer-end]
;
}
/*GESTION DE LA GRILLE DU MAIN*/
main{
display: grid;
grid-template-columns: [col-start] repeat(12, calc(100% / 12) [col-sep]);
grid-template-rows:
[row-start] var(--med_margin) [h1-start] auto [h1-end] auto [jardin-end]
repeat(3,
var(--big_margin)
[title-start] auto [title-end]
var(--med_margin)
[illu-start] auto [illu-end] auto [illu-extended-end]
var(--med_margin)
[txt-start] auto [txt-end])
var(--big_margin)
[title-start-contact] auto [title-end-contact]
var(--med_margin)
[txt-start-contact] auto [txt-end-contact] auto [cal-end-contact] /* au lieu de mettre auto on pourrait mettre 100px ici pour avoir les 2 cadres de la même taille*/
;
}
/*POSITIONNEMENT SUR LA GRILLE PRINCIPALE*/
nav#menu{
/*
grid-area: row-start / col-sep 6 / end-nav / col-sep 12;*/
background-color: var(--day-background);
display: flex;
justify-content: flex-end;
flex-direction: column;
position: fixed;
bottom: 1rem;
right: 1rem;
}
main{
grid-area: main-row-debut / main-col-start / main-row-fin / main-col-sep 12;
}
.icone > pre{
padding-top: 1rem;
color: black;
}
.icone{
position : relative;
display: inline-block;
text-decoration: none;
}
.icone .img_top{
display: none;
position: absolute;
top: 0;
left: 0;
z-index: 99;
background-color: var(--day-background);
color: darkgreen;
}
.icone:hover .img_top{
display: inline;
}
.icone a{
text-decoration: none;
color:black;
}
nav#menu > a{
display: block;
color: black;
text-decoration: none;
}
nav#menu > a:hover{
color: darkgreen;
text-decoration: none;
}
h1#deuxfleurs{
grid-area: h1-start / col-sep 1 / h1-end / col-sep 12;
}
div#jardin{
background-color: var(--jardin);
grid-area: row-start / col-start / jardin-end / col-sep 12;
display: flex;
flex-direction: column;
justify-content: center;
height: 100vh;
}
div#jardin p{
display: flex;
justify-content:center;
}
h2#infras{
background-color: var(--infras);
grid-area: title-start 1 / col-sep 1 / title-end 1 / col-sep 12;
}
div#rennes{
background-color: var(--rennes);
grid-area: illu-start 1 / col-sep 1 / illu-end 1 / col-sep 6;
overflow: hidden;
/*height: 450px;*/
}
div#orsay{
background-color: var(--orsay);
grid-area: illu-start 1 / col-sep 6 / illu-end 1 / col-sep 11;
overflow: hidden;
/*height:450px;*/
}
p#txt_infras{
background-color: var(--txt_infras);
grid-area: txt-start 1 / col-sep 1 / txt-end 1 / col-sep 7;
}
h2#outils{
background-color: var(--outils);
grid-area: title-start 2 / col-sep 1 / title-end 2 / col-sep 12;
}
section#liste_outils{
background-color: var(--liste_outils);
grid-area: illu-start 2 / col-sep 7 / illu-end 2 / col-sep 11;
}
section#liste_outils > a > div > p{
text-align: center;
}
section#liste_outils > a{
/*display: contents;*/
color: black;
text-decoration: none;
}
section#liste_outils > a:hover{
color: darkgreen;
}
div#txt_outils{
background-color: var(--txt_outils);
grid-area: txt-start 2 / col-sep 1 / txt-end 2 / col-sep 7;
}
h2#valeurs{
background-color: var(--valeurs);
grid-area: title-start 3 / col-sep 1 / title-end 3 / col-sep 12;
}
div#ronce{
background-color: var(--ronce);
grid-area: illu-start 3 / col-sep 2 / illu-end 3 / col-sep 10;
padding: 0.5rem;
filter: grayscale(100%);
border: 1px dashed black;
transition: filter 0.15s ease 0s;
}
div#ronce:hover{
filter: none;
}
section#liste_valeurs{
background-color: var(--liste_valeurs);
grid-area: txt-start 3 / col-sep 2 / txt-end 3 / col-sep 10;
}
h2#connaissance{
background-color: var(--connaissance);
grid-area: title-start-contact / col-sep 1 / title-end-contact / col-sep 12;
}
div#txt_connaissance{
background-color: var(--txt_connaissance);
grid-area: txt-start-contact / col-sep 1 / txt-end-contact / col-sep 6;
}
div#calendrier{
background-color: var(--calendrier);
grid-area: txt-start-contact / col-sep 7 / txt-end-contact / col-sep 10;
overflow: hidden;
}
.mois_actuel, .mois_suivant{
overflow: hidden;
}
footer{
background-color: var(--footer);
grid-area: footer-start / main-col-start / footer-end / main-col-sep 12;
}
#liens{
text-align: center;
margin-bottom: var(--med_margin)
}
/*GESTION DE LA GRILLE LISTE DE NOS VALEURS*/
section#liste_valeurs{
/*on ne peut pas faire plusieurs opérations en même temps dans calc, il faut un calc par opération*/
--demie-goutiere: calc(var(--small_margin) / 2);
--valeurs_width: calc(50% - var(--demie-goutiere));
display: grid;
grid-template-columns:
[col2-start] var(--valeurs_width) [col2-mid-left] /*bloc de gauche*/
var(--small_margin) /*goutière*/
[col2-mid-right] var(--valeurs_width) [col2-end]; /*bloc de droite*/
grid-template-rows:
[line1-start] auto [line1-end]
var(--small_margin)
[line2-start] auto [line2-end]
var(--small_margin)
[suivre-start] auto [suivre-end];
}
p#coop{
background-color: var(--lightgrey);
grid-area: line1-start / col2-start / line1-end / col2-mid-left;
text-align: center;
}
p#autonomie{
background-color: var(--lightgrey);
grid-area: line1-start / col2-mid-right / line1-end / col2-end;
}
p#solidarite{
background-color: var(--lightgrey);
grid-area: line2-start / col2-start / line2-end / col2-mid-left;
}
p#liberte{
background-color: var(--lightgrey);
grid-area: line2-start / col2-mid-right / line2-end / col2-end;
}
p#suivre {
background-color: var(--lightgrey);
grid-area: suivre-start / col2-start / suivre-end / col2-end;
text-align: center;
}
#coop, #autonomie, #solidarite, #liberte{
padding: 2rem;
border: 1px dashed black;
text-align: center;
}
section#liste_outils {
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 1rem;
row-gap: 1rem;
}
section#liste_outils > a > div {
overflow: hidden;
}
div#ordinateur {
background-color: var(--lightgrey);
grid-area: illu-start 2 / col-start / illu-end 2 / col-sep 7;
}
div#discussion {
background-color: var(--lightgrey);
grid-area: line1-start / col-start / line1-end / col-mid-left;
}
div#visio {
background-color: var(--lightgrey);
grid-area: line2-start / col-start / line2-end / col-mid-left;
}
div#sites-web {
background-color: var(--lightgrey);
grid-area: line3-start / col-start / line3-end / col-mid-left;
}
div#emails {
background-color: var(--lightgrey);
grid-area: line1-start / col-mid-right / line1-end / col-end;
}
div#collaboration {
background-color: var(--lightgrey);
grid-area: line2-start / col-mid-right / line2-end / col-end;
}
div#blog {
background-color: var(--lightgrey);
grid-area: line3-start / col-mid-right / line3-end / col-end;
}
nav ul{
list-style: none;
padding: 0px;
margin: 0px;
}
/*GESTION DES MEDIA QUERIES*/
/*Tablettes et petits ordinateurs*/
@media (max-width: 1500px) and (min-width: 801px){
h2, h1{
font-size: 1rem;
font-weight: normal;
margin: 0px;
padding: 0px;
}
h2, h1{
text-transform: uppercase;
white-space:pre;
overflow: hidden;
}
h1#deuxfleurs{
grid-area: h1-start / col-sep 1 / h1-end / col-sep 12;
}
h2#infras{
grid-area: title-start 1 / col-sep 1 / title-end 1 / col-sep 12;
}
h2#outils{
grid-area: title-start 2 / col-sep 1 / title-end 2 / col-sep 12;
}
h2#valeurs{
grid-area: title-start 3 / col-sep 1 / title-end 3 / col-sep 12;
}
h2#connaissance{
grid-area: title-start-contact / col-sep 1 / title-end-contact / col-sep 12;
}
div#rennes{
grid-area: illu-start 1 / col-sep 2 / illu-end 1 / col-sep 6;
margin-right: 0.5rem;
}
div#orsay{
grid-area: illu-start 1 / col-sep 6 / illu-end 1 / col-sep 10;
margin-left: 0.5rem;
}
div#rennes, div#orsay{
border: 1px solid black;
border-radius: 5px;
}
div#rennes pre.center, div#orsay pre.center{
margin-top: -5px;
margin-bottom: -5px
}
div#orsay pre.center{
justify-content: center;
}
p#txt_infras{
background-color: var(--txt_infras);
grid-area: txt-start 1 / col-sep 2 / txt-end 1 / col-sep 10;
}
div#txt_outils{
background-color: var(--txt_outils);
grid-area: txt-start 2 / col-sep 2 / txt-end 2 / col-sep 10;
}
div#txt_connaissance{
grid-area: txt-start-contact / col-sep 2 / txt-end-contact / col-sep 10;
}
div#txt_connaissance ul{
padding-left: 0px;
list-style-position: inside;
}
div#ordinateur {
grid-area: illu-start 2 / col-sep 1 / illu-end 2 / col-sep 11;
overflow: hidden;
}
section#liste_outils{
background-color: var(--liste_outils);
grid-area: illu-end 2 / col-sep 1 / illu-extended-end 2 / col-sep 11;
margin-top: var(--med_margin);
}
/*
section#liste_outils {
--demie-goutiere: calc(var(--small_margin) / 2);
--valeurs_width: calc(33% - var(--demie-goutiere));
display: grid;
grid-template-columns:
[col-tiers1-start] var(--valeurs_width) [col-tiers1-end] bloc de gauche
var(--small_margin) goutière
[col-tiers2-start] var(--valeurs_width) [col-tiers2-end]
var(--small_margin) goutière
[col-tiers3-start] var(--valeurs_width) [col-tiers3-end]; bloc de droite
grid-template-rows:
[line1-start] auto [line1-end]
var(--small_margin)
[line2-start] auto [line2-end]
var(--small_margin)
[faisons-connaissance-start] auto [faisons-connaissance-end];
);
}
*/
section#liste_outils{
display: grid;
grid-template-columns: 1fr 1fr 1fr;
row-gap: 1rem;
column-gap: 1rem;
}
div#discussion {
background-color: var(--lightgrey);
grid-area: line1-start / col-tiers1-start / line1-end / col-tiers1-end;
overflow: hidden;
}
div#emails {
background-color: var(--lightgrey);
grid-area: line1-start / col-tiers2-start / line1-end / col-tiers2-start;
}
div#visio {
background-color: var(--lightgrey);
grid-area: line1-start / col-tiers3-start / line1-end / col-tiers3-end;
overflow: hidden;
}
/**/
div#sites-web {
background-color: var(--lightgrey);
grid-area: line2-start / col-tiers1-start / line2-end / col-tiers1-end;
overflow: hidden;
}
div#collaboration {
background-color: var(--lightgrey);
grid-area: line2-start / col-tiers2-start / line2-end / col-tiers2-end;
}
div#blog {
background-color: var(--lightgrey);
grid-area: line2-start / col-tiers3-start / line2-end / col-tiers3-end;
}
div#ronce{
grid-area: illu-start 3 / col-sep 1 / illu-end 3 / col-sep 11;
}
div#calendrier{
margin-top: var(--med_margin);
grid-area: txt-end-contact / col-sep 1 / cal-end-contact / col-sep 11;
display: flex;
justify-content: center;
}
#mois_actuel, #mois_suivant{
overflow: hidden;
}
#mois_actuel{
margin-bottom: 0px;
margin-right: 2rem;
}
}
/*Smartphones*/
@media (max-width: 800px){
:root{
--big_margin:50px;
--med_margin:25px;
--small_margin:5px;
}
h1:before, h1:after{
content: '';
}
h2:before{
content: '______________________________________________________________________\A""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""\A* ';
}
h2:after{
content: ' *\A______________________________________________________________________\A""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""';
}
h2, h1{
font-size: 1rem;
text-align: center;
}
h2, h1{
text-transform: uppercase;
white-space: pre;
overflow: hidden;
}
h1#deuxfleurs{
grid-area: h1-start / col-start / h1-end / col-sep 12;
}
h2#infras{
grid-area: title-start 1 / col-start / title-end 1 / col-sep 12;
}
h2#outils{
grid-area: title-start 2 / col-start / title-end 2 / col-sep 12;
}
h2#valeurs{
grid-area: title-start 3 / col-start / title-end 3 / col-sep 12;
}
h2#connaissance{
grid-area: title-start-contact / col-start / title-end-contact / col-sep 12;
}
div#jardin{
grid-area: row-start / col-sep 1 / jardin-end / col-sep 11;
}
nav#menu{
position: fixed;
width: 100%;
right: 0px;
bottom: 0px;
padding-bottom: 1rem;
background-color: --day-background;
z-index: 1;
border-top: black 1px dashed;
}
nav#menu ul{
list-style: none;
flex-direction: row;
display: flex;
justify-content: space-evenly;
padding: 0px;
margin: 0px;
width: 100%;
}
div#txt_connaissance ul{
padding-left: 0px;
list-style-position: inside;
margin-bottom: var(--med_margin);
}
.icone > pre{
font-size: 0.8rem;
}
#illustration-accueil > pre.center{
font-size: 0.85rem;
}
div#orsay{
display: none;
}
div#rennes{
grid-area: illu-start 1 / col-sep 1 / illu-end 1 / col-sep 11;
border: 1px solid black;
border-radius: 5px;
}
div#rennes pre{
margin-top: -5px;
margin-bottom: -5px;
}
pre{
font-size: 0.95rem;
}
#txt_infras, #txt_outils, #txt_connaissance{
text-align: left;
hyphens: none;
margin-top: 0;
hyphens: none;
word-spacing: -2px;
-ms-hyphens: none;
-webkit-hyphens: none;
-moz-hyphens: none;
margin-top: 0;
}
p#txt_infras{
background-color: var(--txt_infras);
grid-area: txt-start 1 / col-sep 1 / txt-end 1 / col-sep 11;
}
div#txt_outils{
background-color: var(--txt_outils);
grid-area: txt-start 2 / col-sep 1 / txt-end 2 / col-sep 11;
}
div#txt_connaissance{
grid-area: txt-start-contact / col-sep 1 / txt-end-contact / col-sep 11;
}
div#ordinateur {
display: none;
}
section#liste_outils {
display: block;
}
section#liste_outils{
grid-area: illu-start 2 / col-start / illu-end 2 / col-sep 12;
font-size: 1rem;
}
section#liste_outils pre{
font-size: 1rem;
}
section#liste_outils > a > div{
margin-bottom: 1rem;
}
div#ronce{
grid-area: illu-start 3 / col-sep 1 / illu-end 3 / col-sep 11;
border: none;
padding: 0px;
}
#coop, #autonomie, #solidarite, #liberte{
padding: 1rem;
margin: 0px;
}
#suivre{
margin-top: 2rem;
}
section#liste_valeurs{
grid-area: txt-start 3 / col-sep 1 / txt-end 3 / col-sep 11;
}
section#liste_valeurs .description{
display: none;
}
div#calendrier{
grid-area: txt-end-contact / col-sep 1 / cal-end-contact / col-sep 11;
display: none;
}
div#calendrier > pre.center {
justify-content: center;
}
footer pre.center{
font-size: 0.85rem;
}
#liens{
text-align: center;
margin-bottom: 12rem;
}
}
@media (prefers-color-scheme: dark) {
div#container, nav#menu, body{
background-color: var(--night-background);
}
p, pre, ul, li, a, a:hover, h1, h2, footer{
color: var(--txt-night);
}
.highlight{
color: var(--night-highlight-color);
background-color: var(--night-highlight-bg);
}
.icone > pre{
color: var(--txt-night);
}
.icone .img_top{
background-color: var(--night-background);
color: var(--txt-night);
}
.icone a{
color: var(--txt-night);
}
div#ronce, #coop, #autonomie, #solidarite, #liberte, nav#menu, div#rennes, div#orsay{
border-color: var(--txt-night);
}
}