From 04583cd8d6458bab5f9136432ac95ca4cbd7ece9 Mon Sep 17 00:00:00 2001 From: gfaivre Date: Tue, 5 Dec 2023 13:08:02 +0000 Subject: [PATCH] [AUTO] Deploy PR #120 for commit fb0d7a4961bf6c2336d9a8087fbeb61f71a4fc84 --- pr/120/404.html | 2 +- pr/120/a-propos/index.html | 2 +- .../index.html | 471 +++++++++++ .../index.html | 748 ++++++++++++++++++ .../ansible/ansible-premiers-pas/index.html | 505 ++++++++++++ .../cle-ssh-principes-de-base/index.html | 483 +++++++++++ .../docker-avec-windows-et-wsl/index.html | 6 +- .../index.html | 6 +- pr/120/blog/index.html | 371 ++++++--- .../index.html | 2 +- .../integrer-icloud-gnome-calendar/index.html | 2 +- .../blog/linux/osx-to-linux-part-1/index.html | 2 +- pr/120/blog/page/2/index.html | 346 ++++++++ .../sre-interpretation-incident/index.html | 2 +- pr/120/blog/rss.xml | 63 +- pr/120/blog/styleguide/example/index.html | 2 +- .../{305.dbfca553.css => 305.10d2ad32.css} | 2 +- pr/120/build/entrypoints.json | 4 +- .../images/services/ansible.4e8abd95.svg | 14 + pr/120/build/manifest.json | 3 +- pr/120/confidentialite/index.html | 2 +- pr/120/contact/index.html | 2 +- pr/120/etudes-de-cas/index.html | 2 +- pr/120/etudes-de-cas/musique-music/index.html | 2 +- .../etudes-de-cas/panneau-pocket/index.html | 2 +- pr/120/glossaire/ansible/index.html | 430 ++++++++++ pr/120/glossaire/aws/index.html | 2 +- pr/120/glossaire/index.html | 77 +- pr/120/glossaire/ovh-cloud/index.html | 2 +- pr/120/glossaire/scaleway/index.html | 2 +- pr/120/index.html | 2 +- pr/120/legal/index.html | 2 +- .../c9b728f3e46b8cbce28924647d01323f.gif | Bin 0 -> 174535 bytes .../14dbfa2b6d24284c97f635b0e4ad70b9.gif | Bin 0 -> 808305 bytes .../4c624a8987673a6deb25cf1395b926ce.gif | Bin 0 -> 121842 bytes .../02e06122a9eba89d4faed7b89ae519d6.gif | Bin 0 -> 258276 bytes .../3634584e2740abb593088c94357802e6.jpg | Bin 0 -> 113443 bytes .../5dab74ef27fe54d7973d01e0758de679.jpg | Bin 0 -> 161701 bytes .../8f433fa4e1b21f30fcb600a2e5d6c39a.jpg | Bin 0 -> 28337 bytes .../95ecb63289fa7f5ea5d52ddce0b2061e.jpg | Bin 0 -> 343690 bytes .../9934b0fcbba9748a3a903ae6159048db.jpg | Bin 0 -> 109118 bytes .../e299cb39ac1179c8c8fb983f7f09903c.jpg | Bin 0 -> 84285 bytes .../78d80603ac66329b5a5c37cefde68627.jpg | Bin 0 -> 96159 bytes .../7d3657af4af16eeed961f5a60591cb88.jpg | Bin 0 -> 152429 bytes .../85a273249dc4436723377363ef772dfc.jpg | Bin 0 -> 107100 bytes .../ca79bfe07ddc4d125f81c3552c6299c7.jpg | Bin 0 -> 80942 bytes .../d62c67f803636c1d3a3a17f144e04a75.jpg | Bin 0 -> 26231 bytes .../ebf0b5572c3a5487e79c649499f0e41f.jpg | Bin 0 -> 278597 bytes .../94c4e1d42c1d7e102c8577d1b1b34738.jpg | Bin 0 -> 99101 bytes .../965641c67b52e6bd5acfbafbcf8b365f.jpg | Bin 0 -> 155997 bytes .../9cf50d92001aa3a66a9f197c9d1f7acb.jpg | Bin 0 -> 104318 bytes .../cab5a1e7e6c29d6303ecb344e367083e.jpg | Bin 0 -> 286182 bytes .../0e0f1c3e64deaf88e029b72ece90497d.jpg | Bin 0 -> 62937 bytes .../39c637f0a1ff260e0eacd350fd6193e4.jpg | Bin 0 -> 63569 bytes .../94638efcc2e1b3d7afe8add495aa3f4d.jpg | Bin 0 -> 179526 bytes .../9ee2c8ce29ba79b4812efdc70b035c29.jpg | Bin 0 -> 54011 bytes .../da0275853f294688186b86f071c3b69c.jpg | Bin 0 -> 98218 bytes .../eae61410753152dba71f62f27b1a5f3b.jpg | Bin 0 -> 20405 bytes .../b00075bce16dedf5840531d2bf5f364e.jpg | Bin 746600 -> 0 bytes .../faa7915e423a40eb8f7e5b91040ab9ec.jpg | Bin 213402 -> 0 bytes .../c987d0dc15a03a7d2d1a4cab99b9d51b.jpg | Bin 178672 -> 0 bytes .../f954e602fc2da5b93fbdef64d317acc6.jpg | Bin 52598 -> 0 bytes .../4e4152b875f3e3fc28b2532fd714e450.jpg | Bin 326504 -> 0 bytes .../851aec2e82b7f24bd0bb3210895f95cd.jpg | Bin 107334 -> 0 bytes .../3e17127815b0b2d86da6377f5a93f0e3.jpg | Bin 21866 -> 0 bytes .../4b1f480c3cf794ed4261fc8ffac6599e.jpg | Bin 61914 -> 0 bytes pr/120/services/index.html | 2 +- pr/120/sitemap.xml | 48 +- pr/120/social/og-default.jpg | Bin 24959 -> 35871 bytes 69 files changed, 3430 insertions(+), 183 deletions(-) create mode 100644 pr/120/blog/cours/ansible/ansible-environnement-cle-en-main/index.html create mode 100644 pr/120/blog/cours/ansible/ansible-les-inventaires-statiques/index.html create mode 100644 pr/120/blog/cours/ansible/ansible-premiers-pas/index.html create mode 100644 pr/120/blog/cours/cle-ssh-principes-de-base/index.html create mode 100644 pr/120/blog/page/2/index.html rename pr/120/build/{305.dbfca553.css => 305.10d2ad32.css} (79%) create mode 100644 pr/120/build/images/services/ansible.4e8abd95.svg create mode 100644 pr/120/glossaire/ansible/index.html create mode 100644 pr/120/resized/content/images/blog/2023/ansible/ansible-part-1/ansible-ping.gif/c9b728f3e46b8cbce28924647d01323f.gif create mode 100644 pr/120/resized/content/images/blog/2023/ansible/lazy-ansible/manala_init.gif/14dbfa2b6d24284c97f635b0e4ad70b9.gif create mode 100644 pr/120/resized/content/images/blog/2023/cours/ssh-keygen.gif/4c624a8987673a6deb25cf1395b926ce.gif create mode 100644 pr/120/resized/content/images/blog/2023/cours/ssh.gif/02e06122a9eba89d4faed7b89ae519d6.gif create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-inventaire.jpg/3634584e2740abb593088c94357802e6.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-inventaire.jpg/5dab74ef27fe54d7973d01e0758de679.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-inventaire.jpg/8f433fa4e1b21f30fcb600a2e5d6c39a.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-inventaire.jpg/95ecb63289fa7f5ea5d52ddce0b2061e.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-inventaire.jpg/9934b0fcbba9748a3a903ae6159048db.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-inventaire.jpg/e299cb39ac1179c8c8fb983f7f09903c.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-premier-pas.jpg/78d80603ac66329b5a5c37cefde68627.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-premier-pas.jpg/7d3657af4af16eeed961f5a60591cb88.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-premier-pas.jpg/85a273249dc4436723377363ef772dfc.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-premier-pas.jpg/ca79bfe07ddc4d125f81c3552c6299c7.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-premier-pas.jpg/d62c67f803636c1d3a3a17f144e04a75.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/ansible-premier-pas.jpg/ebf0b5572c3a5487e79c649499f0e41f.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/cle-ssh-principes.jpg/94c4e1d42c1d7e102c8577d1b1b34738.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/cle-ssh-principes.jpg/965641c67b52e6bd5acfbafbcf8b365f.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/cle-ssh-principes.jpg/9cf50d92001aa3a66a9f197c9d1f7acb.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/cle-ssh-principes.jpg/cab5a1e7e6c29d6303ecb344e367083e.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/lazy-ansible.jpg/0e0f1c3e64deaf88e029b72ece90497d.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/lazy-ansible.jpg/39c637f0a1ff260e0eacd350fd6193e4.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/lazy-ansible.jpg/94638efcc2e1b3d7afe8add495aa3f4d.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/lazy-ansible.jpg/9ee2c8ce29ba79b4812efdc70b035c29.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/lazy-ansible.jpg/da0275853f294688186b86f071c3b69c.jpg create mode 100644 pr/120/resized/content/images/blog/thumbnails/lazy-ansible.jpg/eae61410753152dba71f62f27b1a5f3b.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/nature.jpg/b00075bce16dedf5840531d2bf5f364e.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/nature.jpg/faa7915e423a40eb8f7e5b91040ab9ec.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/raspberrypi.jpg/c987d0dc15a03a7d2d1a4cab99b9d51b.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/raspberrypi.jpg/f954e602fc2da5b93fbdef64d317acc6.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/thisisengineering.jpg/4e4152b875f3e3fc28b2532fd714e450.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/thisisengineering.jpg/851aec2e82b7f24bd0bb3210895f95cd.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/zsh.jpg/3e17127815b0b2d86da6377f5a93f0e3.jpg delete mode 100644 pr/120/resized/content/images/blog/thumbnails/zsh.jpg/4b1f480c3cf794ed4261fc8ffac6599e.jpg diff --git a/pr/120/404.html b/pr/120/404.html index d711ba2e..c4f2fa45 100644 --- a/pr/120/404.html +++ b/pr/120/404.html @@ -46,7 +46,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/a-propos/index.html b/pr/120/a-propos/index.html index 52c46937..cbfdae0e 100644 --- a/pr/120/a-propos/index.html +++ b/pr/120/a-propos/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/blog/cours/ansible/ansible-environnement-cle-en-main/index.html b/pr/120/blog/cours/ansible/ansible-environnement-cle-en-main/index.html new file mode 100644 index 00000000..4fbfdc74 --- /dev/null +++ b/pr/120/blog/cours/ansible/ansible-environnement-cle-en-main/index.html @@ -0,0 +1,471 @@ + + + + + + + Ansible - Un environnement de travail clé en main avec Lazy Ansible. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+
    +
  • + #Cours +
  • +
  • + #Ansible +
  • +
  • + #Automation +
  • +
  • + #Manala +
  • +
+

Ansible - Un environnement de travail clé en main avec Lazy Ansible.

+

Utilisation de la recipe Lazy Ansible du projet Manala pour mettre en oeuvre un environnement de travail dédié Ansible.

+
+
    +
  1. + Préambule +
  2. +
  3. + Pré-requis +
  4. +
  5. + Mise en route +
  6. +
  7. + Fichiers de configuration +
      +
    1. + Configurer Ansible +
    2. +
    3. + Configurer SSH +
    4. +
    5. + Configurer GIT +
    6. +
    +
  8. +
+ +
+
+

Préambule

+

Les environnements dits « lazy » issus du projet Manala sont des outils destinés à mettre en oeuvre de manière rapide des environnements de travail.

+

Leur finalité étant multiple:

+
    +
  • Être en capacité de déployer un environnement sans être familier avec l'outil cible;
  • +
  • Ne pas avoir à installer et/ou modifier sa configuration locale (sur la machine de travail);
  • +
  • Disposer d'environnements homogènes de manière à favoriser le collaboratif.
  • +
+

Dans le cadre de travaux autour d'Ansible ou si vous suivez la partie « cours » nous utiliserons la « recipe » qui lui est dédiée (https://github.com/manala/manala-recipes/tree/master/lazy.ansible), son utilisation nécessite l'installation de Manala.

+

Pré-requis

+ +

Mise en route

+

La mise en place d'un nouvel environnement en utilisant Manala est relativement simple, il nous suffit de l'initialiser dans un répertoire dédié (cela peut-être un projet existant) à l'aide de la commande manala init.

+

Démonstration ci-dessous:

+
+ +
+ Création d'un environnement Ansible avec Manala. +
+
+

Nous disposons ainsi d'un environnement Ansible « conteneurisé » utilisable en quelques secondes sans n'avoir rien à installer sur nos postes (à l'exception de docker bien évidemment). +Et pour ceux et celles qui doivent faire avec plusieurs versions d'Ansible dans leur quotidien, cela permet d'avoir des environnements isolés et dédiés à certaines versions de l'outils.

+

Fichiers de configuration

+

Il est bien évidemment possible à partir des fichiers de configuration Manala, d'agir sur les configurations d'ansible mais également la configuration SSH.

+

Pour cela il faudra modifier le fichier .manala.yaml qui doit, après la manipulation précédente, se trouver à la racine de votre répertoire de travail.

+
+

Prendre en compte vos modifications

+

+ Si vous modifiez les fichiers de configuration comme indiqué ci-dessous il faudra penser à utiliser la commande manala up afin que vos modifications soient bien prises en compte. +

+
+

Configurer Ansible

+

Il est possible d'interagir sur la configuration Ansible à partir de la section suivante:

+
system:
+    ansible:
+        version: 2.15.5
+        config: |
+            [defaults]
+            control_path_dir = /tmp/ansible/cp
+            [privilege_escalation]
+            become = True
+            become_flags = -H -S
+            [ssh_connection]
+            control_path = /tmp/%%h-%%r
+

On notera qu'il est possible d'agir sur la version d'ansible utilisée dans notre conteneur Docker mais également sur les directives de configuration propres à Ansible (https://docs.ansible.com/ansible/latest/reference_appendices/config.html).

+
+

Le fichier ansible.cfg

+

+ Les modifications de configuration comme ci-dessus se traduisent par l'ajout de directives dans le fichier /etc/ansible/ansible.cfg. Il est possible de surcharger ce fichier en placant un fichier du même nom à la racine des répertoires de travail de vos projets permettant ainsi l'introduction de directives spécifiques à chacun d'entre eux. +

+
+

Configurer SSH

+

Concernant SSH le fonctionnement est le même, on retrouve une section dédiée au sein du fichier .manala.yaml qui nous permettra de jouer sur les directives de configuration SSH:

+
ssh:
+    config: |
+        Host *
+            User debian
+            ForwardAgent yes
+

Et vous voilà en quelques lignes en capacité d'utiliser un environnement Ansible.

+

Configurer GIT

+

Toujours dans le même fichier, la section cette fois-ci sera la suivante:

+
git:
+    config: |
+        # Silence false positive dubious ownership errors
+        #[safe]
+        #directory = *
+

Vous voilà prêt à attaquer Ansible ;)

+
+ +
+
+

+ Une typo ? + Modifier cet article sur Github +

+
+
+
+
+
+ + + + + + diff --git a/pr/120/blog/cours/ansible/ansible-les-inventaires-statiques/index.html b/pr/120/blog/cours/ansible/ansible-les-inventaires-statiques/index.html new file mode 100644 index 00000000..e9c68bb1 --- /dev/null +++ b/pr/120/blog/cours/ansible/ansible-les-inventaires-statiques/index.html @@ -0,0 +1,748 @@ + + + + + + + Ansible - Les inventaires statiques + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+
    +
  • + #Cours +
  • +
  • + #Ansible +
  • +
  • + #Automation +
  • +
+

Ansible - Les inventaires statiques

+

Première étape vers l'utilisation d'Ansible, les inventaires. Ils sont le point d'entrée vers vos infras et sont donc central au pilotage de vos instances / serveurs.

+
+
    +
  1. + Préambule +
  2. +
  3. + Pré-requis +
  4. +
  5. + Introduction +
  6. +
  7. + Structurer ses inventaires +
  8. +
  9. + La configuration d'un inventaire +
      +
    1. + Clés génériques +
    2. +
    3. + Clés spécifiques à SSH +
    4. +
    5. + Clés spécifiques à l'escalade de privilèges +
    6. +
    +
  10. +
  11. + Enrichir son inventaire +
      +
    1. + Définir des groupes de machines +
    2. +
    3. + La commande « ansible-inventory » +
    4. +
    5. + Ordre de chargement des inventaires +
    6. +
    +
  12. +
  13. + Exercices +
      +
    1. + Exercice 1 +
    2. +
    3. + Exercice 2 +
    4. +
    +
  14. +
  15. + Cibler des groupes de machines avec les « patterns » +
      +
    1. + L'opérateur OR +
    2. +
    3. + L'opérateur AND +
    4. +
    5. + L'opérateur NOT +
    6. +
    7. + Combinaisons multiples +
    8. +
    +
  16. +
  17. + Conclusion +
  18. +
  19. + Aller plus loins avec les sources +
  20. +
+ +
+
+

Préambule

+

Ce cours est utilisé dans le cadre de TP au sein de l'IUT Lyon 1. Il est notamment dispensé à des étudiants peu ou pas familiers avec les stratégies d'automatisation et de déploiement des infrastructures. +Bien que très axé débutants il peut également représenté une possibilité de monter « rapidement » pour certaines équipes sur les principes fondamentaux d'Ansible afin de disposer du bagage minimal nécessaire à son utilisation.

+

Il s'agit bien évidemment de supports à vocation pédagogique qui ne sont pas toujours transposables à une activité professionnelle.

+

Pré-requis

+

Disposer d'un environnement de travail Ansible fonctionnel, si ça n'est pas encore le cas vous pouvez jeter un oeil ici !

+

Introduction

+

Afin de pouvoir attaquer nos différentes machines, Ansible a besoin d'un référentiel de celles-ci avec un minimum d'informations les concernants (histoire de savoir comment s'y connecter par exemple ;)).

+

C'est là qu'entre en jeu les inventaires. Il existe deux façons de constituer des inventaires, la première est manuelle, et consiste à écrire ni plus ni moins la liste des machines que l'on souhaites manager on parle dans ce cas d'inventaire statique.

+

La deuxième méthode introduit un principe de « reconnaissance » des machines disponibles, dans ce cas de figure on constituera nos inventaires de manière automatique, on parle dans ce cas d'inventaires dynamiques que nous verrons plus tard.

+

Les inventaires permettent également de structurer / hiérarchiser nos machines en utilisant une notion de groupe. +Ansible propose plusieurs plugins capablent de gérer des inventaires de machines, ils sont consultables à l'aide de la commande:

+
ansible-doc -t inventory -l
+

Qui devrait vous renvoyer la liste suivante:

+
02:48:02 lazy@ansible_env lazy → ansible-doc -t inventory -l
+ansible.builtin.advanced_host_list Parses a 'host list' with ranges                                                                    
+ansible.builtin.auto               Loads and executes an inventory plugin specified in a YAML config                                   
+ansible.builtin.constructed        Uses Jinja2 to construct vars and groups based on existing inventory                                
+ansible.builtin.generator          Uses Jinja2 to construct hosts and groups from patterns                                             
+ansible.builtin.host_list          Parses a 'host list' string                                                                         
+ansible.builtin.ini                Uses an Ansible INI file as inventory source                                                        
+ansible.builtin.script             Executes an inventory script that returns JSON                                                      
+ansible.builtin.toml               Uses a specific TOML file as an inventory source                                                    
+ansible.builtin.yaml               Uses a specific YAML file as an inventory source  
+

Dans notre cas nous nous appuyerons essentiellement sur le plugin yaml.

+

Structurer ses inventaires

+

Un inventaire n'est en fait ni plus ni moins qu'un ou plusieurs fichiers contenant des informations concernant le parc de machines que l'on souhaite piloter.

+

En terme de structure vous rencontrerez énormément de façons de faire, celles-ci étant bien évidemment guider par le besoin métier, on pourra citer comme contraintes par exemple:

+
    +
  • La taille des infrastructures (le nombre d'éléments qui la constitue);
  • +
  • Leur localisation géographique (pays, ville...);
  • +
  • Le besoin d'adresser finement un groupe de machines et pas un autre...
  • +
+

Bref tout est imaginable à ce niveau. +En ce qui nous concerne nous interviendrons sur un parc plutôt modeste puisque pour nos travaux nous utiliserons au maximum 4 machines.

+

Nous allons donc commencer par créer un répertoire qui leur sera dédié appelé inventories nous déplacerons ensuite le fichier hosts.yml que nous avions créé précédemment.

+

Vous devriez donc disposer d'une arborence similaire à la suivante:

+
ansible/
+├── inventories
+│   └── hosts.yml
+└── Makefile
+

La configuration d'un inventaire

+

Pour rappel le contenu de votre fichier hosts.yml doit pour l'heure être le suivant:

+
all:
+  hosts:
+    vm-web-prod-01:
+      ansible_host: XXX.XXX.XXX.XXX
+      ansible_user: debian
+

Clés génériques

+

La structure du fichier nous permet de mettre en évidence deux clés essentielles:

+
    +
  • ansible_host: Le nom résolvable ou l'adresse IP de la machine distante;
  • +
  • ansible_user: L'utilisateur à utiliser pour ouvrir une session sur cette même machine.
  • +
+

Il est toutefois possible d'utiliser d'autres clés de configuration pour enrichir la définition de notre machine comme:

+
    +
  • ansible_port: Permet de spécifier le port de connexion SSH (si différent du port standard, pour rappel le port par défaut est 22)
  • +
+

Clés spécifiques à SSH

+
    +
  • ansible_ssh_pass: Le mot de passe du compte SSH utilisé (on lui préferera une authentification par clés);
  • +
  • ansible_ssh_private_key_file: Le chemin vers la clé à utiliser pour se connecter au compte SSH;
  • +
  • ansible_ssh_extra_args: Permet d'ajouter des options supplémentaires à la ligne de commande SSH utilisée par Ansible.
  • +
+

Clés spécifiques à l'escalade de privilèges

+
    +
  • ansible_become: Permet de forcer l'escalade de privilèges;
  • +
  • ansible_become_method: Permet de spécifier la méthode d'escalade des privilèges;
  • +
  • ansible_become_user: Permet de spécifier l'utilisateur cible de l'escalade de privilèges;
  • +
  • ansible_become_pass: Permet de spécifier le mot de passe de l'utilisateur cible de l'escalade de privilèges (encore une fois, on préfera la méthode par clés SSH).
  • +
+

Enrichir son inventaire

+

À présent que nous avons effectuer un petit tour rapide du propriétaire, nous allons « étoffer » notre inventaire initial en ajoutant une deuxième machine comme ci-dessous:

+
# Fichier hosts.yml
+all:
+  hosts:
+    vm-web-prod-01:
+      ansible_host: XXX.XXX.XXX.XXX
+      ansible_user: debian
+    vm-web-staging-01:
+      ansible_host: XXX.XXX.XXX.XXX
+      ansible_user: debian
+

En ajoutant une machine et en jouant la commande ansible -i inventories/hosts.yml all -m ping nous devrions voir qu'ansible considère bien nos deux machines:

+
+ +
+ Utilisation du module ping sur deux machines. +
+
+
+

Hôte local

+

+ Il est bien évidemment possible d'interroger notre propre machine à l'aide d'Ansible, en modifiant relativement simplement notre fichier d'inventaire. Attention toutefois à ce que vous faites puisque vous pouvez directement impacter la configuration et donc le fonctionnement de votre machine. +

+
+

Exemple de fichier d'inventaire pour piloter une machine locale:

+
all:
+  hosts:
+    localhost:
+      ansible_host: 127.0.0.1
+      ansible_connection: local
+

Définir des groupes de machines

+

Pour l'exemple nous allons créer un fichier groups.yml (toujours dans inventories) contenant:

+
all:
+  children:
+    webservers:
+      hosts:
+        vm-web-prod-01: ~
+        vm-web-staging-01: ~
+

ATTENTION: children est une sous clé de all ;)

+

La commande « ansible-inventory »

+

Ansible propose différentes commandes parfois très spécifiques, l'occasion de tester notre configuration d'inventaire !

+

Testons: ansible-inventory --list -i inventories

+

On notera que cette fois-ci nous donnons le répertoire inventories en paramètre.

+

Cette commande devrait vous afficher la sortie suivante (format json):

+
{
+    "_meta": {
+        "hostvars": {
+            "vm-web-prod-01": {
+                "ansible_host": "192.168.140.XXX",
+                "ansible_user": "debian"
+            },
+            "vm-web-staging-01": {
+                "ansible_host": "192.168.140.XXX",
+                "ansible_user": "debian"
+            }
+        }
+    },
+    "all": {
+        "children": [
+            "ungrouped",
+            "webservers"
+        ]
+    },
+    "webservers": {
+        "hosts": [
+            "vm-web-prod-01",
+            "vm-web-staging-01"
+        ]
+    }
+}
+

ou encore avec l'option --graph en lieu et place de --list qui est plus parlante visuellement ansible-inventory --graph -i inventories:

+
@all:
+  |--@ungrouped:
+  |--@webservers:
+  |  |--vm-web-prod-01
+  |  |--vm-web-staging-01
+

À retenir: +Ansible utilise une arborescence ou figurera toujours:

+
    +
  • Un groupe all: C'est le groupe racine auquel appartiendra toutes vos machines sans exception (On remarquera avec cette information que lorsque nous avons utilisé la commande ansible -i inventories/hosts.yml all -m ping, all indiquait donc le groupe cible).
  • +
  • Un groupe ungrouped: Groupe auquel sera affectée toute machine n'appartenant à aucun groupe (exception faites de all bien évidemment);
  • +
+

Dans notre exemple ci-dessus on voit donc bien que nos deux machines font bien partie du groupe webservers.

+
+

Fichiers d'inventaire multiples

+

+ Si l'option -i d'Ansible prend un fichier d'inventaire en paramètre elle peut également prendre un répertoire et dans ce cas Ansible considérera l'ensemble des fichiers présents dans le répertoire. + Ce fonctionnement offre la possibilité avec des infrastructures composées de nombreuses machines de pouvoir les séparer dans plusieurs fichiers en fonction de différents critères. +

+
+

Ordre de chargement des inventaires

+

Vous aurez compris que si l'on aborde le sujet c'est qu'il est d'importance... pour l'illustrer créons un nouveau fichier d'inventaire que l'on nommera misc.yml contenant:

+
all:
+  hosts:
+    vm-web-prod-01:
+      ansible_host: XXX.XXX.XXX.XXX
+      ansible_user: debian
+      ansible_port: 22
+    vm-web-staging-01:
+      ansible_host: XXX.XXX.XXX.YYY
+

Une fois ces modifications faites, rejouez la commande ansible-inventory --list -i inventories vous devriez constater de subtils changements au niveau des informations que vous affiche Ansible.

+
{
+    "_meta": {
+        "hostvars": {
+            "vm-web-prod-01": {
+                "ansible_host": "192.168.140.12",
+                "ansible_port": 22,
+                "ansible_user": "debian"
+            },
+            "vm-web-staging-01": {
+                "ansible_host": "192.168.140.10",
+                "ansible_user": "debian"
+            }
+        }
+    },
+    "all": {
+        "children": [
+            "ungrouped",
+            "webservers"
+        ]
+    },
+    "webservers": {
+        "hosts": [
+            "vm-web-prod-01",
+            "vm-web-staging-01"
+        ]
+    }
+}
+

On constatera ainsi:

+
    +
  • L'ajout de la clé ansible_port sur notre première instance;
  • +
  • La modification de l'adresse IP de la seconde.
  • +
+

Qu'en retenir ?

+

L'utilisation du Yaml comme langage de définition introduit une notion d'arborescence au niveau de vos clés, il faut ainsi voir la définition de votre machine comme un tableau multidimensionnel indexé.

+
array (
+  'vm-web-prod-01' => 
+  array (
+    'ansible_host' => '192.168.140.12',
+    'ansible_port' => 22,
+    'ansible_user' => 'debian',
+  ),
+)
+

On comprendra donc facilement:

+
    +
  • Que l'ajout d'une clé entraine l'ajout d'un élément à notre tableau pour la clé concernée (Dans notre cas l'ajout de la clé ansible_port);
  • +
  • Que la modification de la valeur d'une clé écrase sa valeur précédente (Dans notre cas la modification de l'IP de notre machine).
  • +
+

Conclusion: Lorsque l'on utilise des fichiers d'inventaire multiples il vaut bien prendre en compte leur ordonnancement, la dernière valeur déclarée pour une clé étant celle qui sera retenu dans notre tableau final.

+
+

Groupes de groupes

+

+ La hiérarchie de groupe d'un inventaire peut avoir plusieurs niveaux. Il est donc possible d'avoir de l'imbrication de groupes. Attention toutefois à ne pas en abuser afin de ne vous perdre dans des arborescence trop complexes. +

+
+

Complétons pour finir notre inventaire groups.yml afin d'obtenir le contenu suivant:

+
all:
+  children:
+    webservers:
+      hosts:
+        vm-web-prod-01: ~
+        vm-web-staging-01: ~
+    staging:
+      hosts:
+        vm-web-staging-01: ~
+    production:
+      hosts:
+        vm-web-prod-01: ~
+

Exercices

+

Rapide mise en pratique des inventaires.

+

Exercice 1

+

Reprendre les différents fichiers contenu dans notre répertoire inventories et les compiler en un seul et même fichier hosts.yml, les autres fichiers ne sont finalement plus utiles et peuvent être supprimés.

+

Souvenez-vous vous pouvez tester un fichier d'inventaire en particulier en le passant en paramètre de la commande ansible-inventory: ansible-inventory --list -i inventories/hosts.yml.

+

Exercice 2

+

Nous avons vu qu'il existait différent plugin permettant de « lire » un inventaire (si,si au tout début), essayez d'écrire le même inventaire mais à un format différent (format ini par exemple).

+

Cibler des groupes de machines avec les « patterns »

+

Notre infrastructure est modeste, mais vous serez parfois amenés à travailler avec des infrastructures d'envergure et serez dans l'obligation de « cibler » certaines machines ou groupes de machines. +Il est ainsi possible d'indiquer explicitement à Ansible quelles sont les machines à considérer pour une action donnée.

+

Certains « patterns » sont très simple et vous devriez en reconnaitre certains:

+

Le « wildcard » * par exemple qui désignera n'importe quelle valeur et qui est utilisable au sein d'une valeur de clé ip ou hostname (192.168.140.* ou encore *.example.com).

+

Ceux que vous rencontrerez le plus souvent: :, :& ou encore :!.

+

L'opérateur OR

+

L'opérateur : signifiera qu'une machine peut-être dans un groupe OU dans un autre, par exemple staging ou production.

+

Essayons toujours avec notre module ping: ansible -i inventories/hosts.yml 'staging:production' -m ping

+
+

Avec la commande ansible-inventory

+

+ ansible-inventory -i inventories/hosts.yml --host='webservers:production' +

+
+

L'opérateur AND

+

L'opérateur :& signifiera qu'une machine peut-être dans un groupe ET dans un autre, par exemple webservers et production.

+

ansible -i inventories/hosts.yml 'webservers:&production' -m ping

+

Cette fois-ci vous ne devriez avoir que la machine vm-web-prod-01 qui est solicité par Ansible.

+
+

Avec la commande ansible-inventory

+

+ ansible-inventory -i inventories/hosts.yml --host='webservers:&production' +

+
+

L'opérateur NOT

+

L'opérateur :! permettra de cibler une machine qui est dans un groupe mais pas dans un autre par exemple membre du groupe webservers mais non présente dans le groupe production.

+

ansible -i inventories/hosts.yml 'webservers:!production' -m ping

+

Vous devriez ne soliciter cette fois que vm-web-staging-01.

+
+

Avec la commande ansible-inventory

+

+ ansible-inventory -i inventories/hosts.yml --host='webservers:!production' +

+
+

Combinaisons multiples

+

Il est bien évidemment possible de combiner les opérateurs prenez toutefois garde aux expressions trop complexes qui gêneront à la compréhension et pourront être source d'erreur !

+

On peut donc imaginer des choses comme cibler les machines du groupe webservers OU staging mais qui ne sont pas dans production (On est d'accord, ça n'a aucune sens c'est pour l'exemple ;)).

+

ansible -i inventories/hosts.yml 'webservers:staging:!production' -m ping

+

Il est également possible de mixer nom de groupe et nom de machine: ansible -i inventories/hosts.yml 'webservers:staging:!vm-web-staging-01' -m ping

+
+

Avec la commande ansible-inventory

+

+ ansible-inventory -i inventories/hosts.yml --host='webservers:staging:!vm-web-staging-01' +

+
+

Conclusion

+

Nous aurons donc vu que les inventaires bien qu'à priori relativement simples, peuvent amener une forme de complexité sur des infrastructures volumineuses, leur organisation peut donc vite devenir stratégique notamment dans l'optique de faciliter la maintenance du parc piloté par Ansible.

+

Dans la prochaine étape nous aborderons une nouvelle notion d'Ansible, les playbooks qui nous permettront d'écrire nos première tâches !

+

Aller plus loins avec les sources

+ +
+ +
+
+

+ Une typo ? + Modifier cet article sur Github +

+
+
+
+
+
+ + + + + + diff --git a/pr/120/blog/cours/ansible/ansible-premiers-pas/index.html b/pr/120/blog/cours/ansible/ansible-premiers-pas/index.html new file mode 100644 index 00000000..d1b1cc63 --- /dev/null +++ b/pr/120/blog/cours/ansible/ansible-premiers-pas/index.html @@ -0,0 +1,505 @@ + + + + + + + Ansible - Découverte et premiers pas. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+
    +
  • + #Cours +
  • +
  • + #Ansible +
  • +
  • + #Automation +
  • +
+

Ansible - Découverte et premiers pas.

+

Dans ce premier cours à destination des étudiants et/ou néophytes, nous verrons ce qu'est Ansible ainsi qu'un exemple très simple de son utilisation.

+
+
    +
  1. + Préambule +
  2. +
  3. + Prérequis +
  4. +
  5. + Mise en route +
  6. +
  7. + Infrastructure +
  8. +
  9. + Environnement local +
      +
    1. + Se connecter avec le client SSH +
    2. +
    3. + Configuration du client SSH +
    4. +
    5. + Utilisation de l'agent SSH +
    6. +
    7. + Communication Ansible <> serveurs distants +
    8. +
    +
  10. +
  11. + Aller plus loin avec les sources: +
  12. +
+ +
+
+

Préambule

+

Ce cours est utilisé dans le cadre de TP au sein de l'IUT Lyon 1. Il est notamment dispensé à des étudiants peu ou pas familiers avec les stratégies d'automatisation et de déploiement des infrastructures. +Bien que très axé débutants il peut également représenter une possibilité de monter « rapidement » pour certaines équipes sur les principes fondamentaux d'Ansible afin de disposer du bagage minimal nécessaire à son utilisation.

+

Il s'agit bien évidemment de supports à vocation pédagogique qui ne sont pas toujours transposables à une activité professionnelle.

+

Prérequis

+

Afin d'aborder les différents concepts du cours il est recommandé de disposer:

+
    +
  • D'au moins deux machines virtuelles accessibles via SSH (idéalement 4);
  • +
  • Docker et Docker compose installés sur la machine de travail (Docker Desktop pour Windows et OSX);
  • +
  • D'une installation d'Ansible récente (2.15.5), s'il est possible de l'installer localement je recommanderais plutôt d'utiliser le Lazy Ansible du projet Manala..
  • +
  • D'une paire de clés SSH que vous aurez pris soin de générer (voir ici) si vous n'en disposez pas déjà.
  • +
  • D'un répertoire de travail, de mon côté ça sera workspace/ansible (très original oui), son nom importe peu, l'idée est que vous sachiez vous y retrouver;
  • +
+

Pour ceux qui utilisent Windows, il est possible d'utiliser WSL pour faire fonctionner les conteneurs Docker, une machine virtuelle Linux fonctionne encore mieux, libre à vous d'utiliser l'un ou l'autre.

+

Mise en route

+

Première étape avant de pouvoir rentrer dans le vif du sujet, nous aurons besoin de mettre en place un environnement de travail dédié à nos travaux.

+

Infrastructure

+

Pour pouvoir configurer nos serveurs, il nous faudra... des serveurs, ou plutôt des machines virtuelles pour leur facilité à être arrêtées, détruites et reconstruites. +N'importe quel fournisseur de cloud public peut faire l'affaire, utilisez celui avec lequel vous avez le plus d'affinités.

+

Dans le cadre de l'IUT nous utiliserons OpenStack, solution OpenSource qui a fait ses preuves et qui plus est disponible dans l'enceinte de l'université, c'est également la solution technique utilisée par le Public Cloud d'OVHCloud. +C'est donc sur cette base que je présenterai les étapes suivantes, au demeurant, parfaitement transposables chez d'autres fournisseurs.

+

Nous travaillerons avec deux environnements distincts, « Staging » et « Production » qui embarqueront chacune une instance applicative (qui portera donc le code d'une application) et une instance destinée aux données (et donc chargée de faire fonctionner notre serveur de base de données). +Si vous êtes limité en terme de création d'instances, il est envisageable de n'avoir qu'une instance par environnement, celle-ci embarquant l'applicatif et les données.

+

Environnement local

+

Les étapes suivantes seront donc à exécuter à partir de votre machine.

+

Se connecter avec le client SSH

+

Considérant que vous remplissez les prérequis et que vous avez créé vos instances distantes nous allons pour commencer initier une « simple » connexion SSH vers notre instance.

+
ssh debian@XXX.XXX.XXX.XXX
+

Si vous rencontrez des soucis .. forbidden (exemple) ré-essayez en ajoutant explicitement le chemin vers la clé.

+
ssh -i ~/.ssh/ed25519 debian@XXX.XXX.XXX.XXX
+
+

Utilisateur sous Windows

+

+ Pour rappel aux utilisateurs de Windows vous trouverez ce répertoire .ssh dans C:\Users\MonNomUtilisateur\ +

+
+

Configuration du client SSH

+

Afin d'éviter d'avoir à spécifier le chemin vers la clé à chaque connexion et afin d'affiner la configuration de notre client nous pouvons également définir un fichier ~/.ssh/config contenant les directives suivantes:

+
Host 192.168.140.*
+  Port 22
+  User debian
+  IdentityFile ~/.ssh/keyfile
+  IdentitiesOnly yes
+  ForwardAgent yes
+

Celles-ci sont relativement compréhensibles, précisons tout de même pour les deux dernières:

+
    +
  • IdentitiesOnly indique à SSH de n'envoyer au serveur QUE la clé définie à la directive IdentityFile quand bien même vous disposez d'autres clés dans votre répertoire ~/.ssh
  • +
  • ForwardAgent permet d'activer le transfert d'identité vers l'agent SSH du serveur
  • +
+

Cette configuration vous permet d'indiquer certaines directives de manière automatique pour un ou plusieurs hôtes distants, pour en savoir plus concernant les fichiers de configuration SSH vous pouvez aller jeter un oeil ici

+

Utilisation de l'agent SSH

+

La prochaine étape est l'utilisation d'un service spécifique à SSH, l'agent.

+

L'agent SSH sur la plupart des systèmes UNIX est lancé au démarrage de votre machine, toutefois si ça n'est pas le cas, il est possible de le démarrer avec la commande eval 'ssh-agent'. +Son rôle est de permettre de stocker de manière sécurisée votre/vos clés privées SSH (rappelez-vous c'est la partie que l'on ne partage pas !) mais également d'assurer le transfert de cette clé privée en toute sécurité vers les serveurs distants auxquels vous tenterez de vous connecter.

+

Ajouter une clé dans l'agent

+

L'ajout d'une clé dans un agent est trivial et se fait à l'aide de la commande ssh-add ~/.ssh/my_private_key.

+

Si vous avez protégé votre clé avec une phrase de passe elle vous sera demandée par l'agent au moment de son ajout. +Afin de vérifier que votre clé a bien été ajoutée à votre agent vous pouvez lister les clés contenues à l'intérieur avec la commande ssh-add -l qui devrait vous donner une sortie équivalente à la suivante:

+
rix@debian:~$ ssh-add -l 
+4096 SHA256:knyjFlzIWukj77PBs0V+mO4eKD9mnSITOkYfYvgvZcQ /home/rix/.ssh/gfaivre-iut (RSA)
+

Cette étape, complétée par la directive ForwardAgent contenue dans notre fichier de configuration SSH (pour rappel ~/.ssh/config) va nous permettre lorsque nous nous connectons à un serveur distant de transférer notre clé privée vers l'agent de ce même serveur.

+

De cette manière notre clé privée sera même disponible sur le serveur auquel nous nous connectons, nous aborderons l'utilité de cette configuration plus tard.

+

Communication Ansible <> serveurs distants

+

Notre environnement étant « prêt » testons à présent la bonne communication avec nos serveurs distants en utilisant le module ping d'Ansible.

+

À partir de ce moment et sauf instruction contraire nous partirons du principe que nous évoluons à l'intérieur de notre répertoire de travail (workspace/ansible donc ;)) pour saisir nos commandes et créer notre arborescence de projet.

+
+

Les modules Ansible

+

+ Dans la terminologie Ansible, les « modules » sont des morceaux de code pouvant être utilisés soit directement dans la ligne de commande (avec l'option -m, soit dans une section task d'un « playbook »). Ils peuvent prendre en charge des arguments avec une syntaxe classique key=value. +

+
+

Pour pouvoir effectuer notre premier test nous allons donc créer un fichier que nous appellerons hosts.yml contenant (à adapter en fonction du réseau sur lequel sont déployées vos machines virtuelles):

+
all:
+  hosts:
+    ansible-vm-01:
+      ansible_host: 192.168.140.30
+      ansible_user: debian
+

Attention à l'indentation et faites attention de bien utiliser des espaces pour celle-ci.

+

Pour terminer nous lançons notre conteneur docker « lazy » avec un make sh et y exécutons la commande ansible -i hosts.yml all -m ping, qui utilise le module ping d'ansible pour vérifier que l'on arrive bien à se connecter à l'instance distante.

+

Ce qui nous donne:

+
+ +
+ Utilisation du module ping avec Ansible. +
+
+
+

Le module ping

+

+ Bien que son nom puisse porter à confusion, il s'agit là d'un module propre à Ansible et qui n'a rien à voir avec la commande système du même nom. Pour rappel, la commande système envoie un paquet ICMP (ECHO_REQUEST) à une machine distante et attend en retour un paquet du même type (ECHO_RESPONSE) indiquant le bon état de la liaison réseau. + Le module Ansible quant à lui se connecte via SSH à la machine distante et y vérifie la bonne configuration de Python. +

+
+

Cette dernière étape me permet d'introduire un concept que nous verrons dans la section suivante, celui des inventaires !

+

Aller plus loin avec les sources:

+ +
+ +
+
+

+ Une typo ? + Modifier cet article sur Github +

+
+
+
+
+
+ + + + + + diff --git a/pr/120/blog/cours/cle-ssh-principes-de-base/index.html b/pr/120/blog/cours/cle-ssh-principes-de-base/index.html new file mode 100644 index 00000000..011b4297 --- /dev/null +++ b/pr/120/blog/cours/cle-ssh-principes-de-base/index.html @@ -0,0 +1,483 @@ + + + + + + + Principes de base de l'utilisation de clés SSH. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
+
+
    +
  • + #Cours +
  • +
  • + #Ssh +
  • +
  • + #HowTo +
  • +
+

Principes de base de l'utilisation de clés SSH.

+

Génération, utilisation et cas pratiques d'utilisation de clés SSH.

+
+
    +
  1. + Pré-requis +
  2. +
  3. + TL;DR +
  4. +
  5. + Génération d'une paire de clés +
  6. +
  7. + Se connecter à un serveur distant +
  8. +
  9. + Compléments +
  10. +
  11. + Aller plus loin avec les sources +
  12. +
+ +
+
+

Une clé SSH est un moyen d'authentification vers un serveur SSH reposant sur les principes de cryptographie asymétrique et d'authentification défi / réponse.

+

Elle a deux avantages fondamentaux comparativement avec une authentification par couple identifiant/mot de passe:

+
    +
  • Permettre une authentification facilité (plus de mot de passe à mémoriser) et plus rapide (possibilité de rebond de serveur à serveur par exemple).
  • +
  • Se prémunir des attaques de type force brute
  • +
+

La très grande majorité des accès serveurs sont aujourd'hui basés sur leur utilisation, au dela de l'aspect fluidité et sécurité, elle ouvre également la possibilité d'authorisation multiple (sur plusieurs serveurs), de révocation et de signature des accès facilités.

+
+

Secure Shell (SSH)

+

+ Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. + Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite, tous les segments TCP sont authentifiés et chiffrés. Il devient donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur. + Le protocole SSH a été conçu avec l'objectif de remplacer les différents protocoles non chiffrés comme rlogin, telnet, rcp et rsh. +

+
+

Pré-requis

+
    +
  • Avoir un client SSH installé (OpenSSH pour Linux/OSX et Windows à présent ou encore Putty pour Windows)
  • +
  • Une ligne de commande ( le truc noir dans lequel on tape du texte ;) )
  • +
+

TL;DR

+

Génération d'une paire de clés:

+
ssh-keygen -t ed25519 -a 150
+

Se connecter à un serveur distant

+
ssh -i ~/.ssh/id25519 user@server_address
+

Génération d'une paire de clés

+

Le principe de l'authentification par clés repose, comme explicité sur les différents liens ci-dessus, par la création d'une paire de clés asymétriques. +L'une de ces clés sera votre clé publique à déployer sur les machines auxquelles vous avez le droit de vous connecter, l'autre, votre clé privée. Et comme son nom l'indique, celle-ci est à vous et rien qu'à vous ; elle ne se partage pas. JAMAIS.

+

Deux notions de base avant de se lancer pour bien comprendre ce que l'on fait:

+
    +
  • Il existe plusieurs types d'algorithmes de signature numérique, les plus répandus étant RSA et Ed25519;
  • +
  • Il est possible de spécifier la longueur de vos clés, ce paramètre est essentiel à leur robustesse.
  • +
+

Il est recommandé, à la date de rédaction de cet article, d'utiliser l'algorithme Ed25519 qui a plusieurs avantages comparativement à RSA:

+
    +
  • Robustesse accrue;
  • +
  • Plus petite taille de clés;
  • +
  • Génération des clés plus rapide.
  • +
+
ssh-keygen -t ed25519 -a 150 -C "courriel@example.com"
+
+ +
+ Génération d'une paire de clé SSH +
+
+

L'option -C permet d'ajouter un commentaire à votre clé, pratique notamment pour identifier le propriétaire d'une clé publique coté serveur.

+
+

Phrase de passe

+

+ Bien que facultative, il est « extrêmement vachement recommandé » de disposer d'une phrase de passe sur vos clés SSH (dans le cadre des cours et pour gagner du temps il est possible de s'en passer si vous n'utilisez pas votre clé en dehors de ceux-ci). +

+
+

Cette commande vous aura généré deux fichiers dans le répertoire ~/.ssh/ (sauf si vous l'avez modifié bien évidemment):

+
    +
  • id_ed25519.pub (comme son extension l'indique c'est votre clé publique);
  • +
  • id_ed25519 votre clé privée (on remarquera les droits qui lui sont appliqués 0600, en effet seul votre utilisateur doit y avoir accès).
  • +
+
+

Générer une clé RSA

+

+ Ed25519 n'étant de temps en temps pas supporté (surtout par les anciens systèmes) il est parfois nécessaire de générer une paire de clé RSA (on remarquera la longueur de clé de 4096 bits recommandée à date de rédaction de l'article): + ssh-keygen -t rsa -a 150 -b 4096 +

+
+

Se connecter à un serveur distant

+

C'est un peu la finalité. +Imaginons un serveur pour lequel votre clé est autorisée à se connecter (pour rappel fichier authorized_keys), nous pouvons initier une connexion à l'aide de la commande:

+

ssh user@server_address

+

Cette commande aura donc pour effet « d'ouvrir » une connexion sur un serveur distant via le protocol SSH vous permettant de saisir des lignes de commande directement sur ce serveur et donc de l'administrer.

+
+ +
+ Ouverture d'une session sur un serveur distant +
+
+

Cette exemple montre l'ouverture d'une session avec l'utilisateur debian sur le serveur ayant pour adresse IP 146.59.243.95.

+

Plusieurs choses à retenir à cette étape:

+
    +
  • Par défaut ssh parcourt les clés SSH privées disponibles dans le répertoire ~/.ssh afin de les proposer au serveur auquel vous essayez de vous connecter.
  • +
  • Vous optenez en retour la première fois que vous vous connectez un message vous demandant de confirmer la connexion vers le serveur distant (Host key checking).
  • +
+

Compléments

+

Si vous disposez de plusieurs clés SSH et que vous ne souhaitez pas que l'ensemble de vos clés privées soient soumises au serveur distant vous pouvez spécifier quelle clé utiliser en utilisant l'option -i.

+
ssh -i ~/.ssh/id25519 debian@146.59.243.95
+

Il est possible d'utiliser des syntaxes différentes en fonction de votre fichier de configuration SSH.

+

Vous pouvez ainsi agir sur les comportements par défaut de votre client SSH et notamment sur la clé à utiliser en fonction de tel ou tel serveur.

+

Aller plus loin avec les sources

+ +
+ +
+
+

+ Une typo ? + Modifier cet article sur Github +

+
+
+
+
+
+ + + + + + diff --git a/pr/120/blog/cours/docker-avec-windows-et-wsl/index.html b/pr/120/blog/cours/docker-avec-windows-et-wsl/index.html index 3ff0a7d8..dcf56128 100644 --- a/pr/120/blog/cours/docker-avec-windows-et-wsl/index.html +++ b/pr/120/blog/cours/docker-avec-windows-et-wsl/index.html @@ -71,7 +71,7 @@ document.querySelector('html').classList.remove('no-js'); - + @@ -240,7 +240,7 @@

Faire fonctionner des conteneurs Docker dans WSL.

Tester le fonctionnement de Docker dans une machine virtuelle WSL
  • - Allez plus loin avec les sources + Aller plus loin avec les sources
  • @@ -316,7 +316,7 @@

    Ajouter un utilisateur au groupe docker -

    Allez plus loin avec les sources

    +

    Aller plus loin avec les sources

    diff --git a/pr/120/blog/linux/construire-image-debian-raspberry/index.html b/pr/120/blog/linux/construire-image-debian-raspberry/index.html index 5a3720ab..c1ec481c 100644 --- a/pr/120/blog/linux/construire-image-debian-raspberry/index.html +++ b/pr/120/blog/linux/construire-image-debian-raspberry/index.html @@ -71,7 +71,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/blog/linux/integrer-icloud-gnome-calendar/index.html b/pr/120/blog/linux/integrer-icloud-gnome-calendar/index.html index e0d4773d..ad071de8 100644 --- a/pr/120/blog/linux/integrer-icloud-gnome-calendar/index.html +++ b/pr/120/blog/linux/integrer-icloud-gnome-calendar/index.html @@ -71,7 +71,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/blog/linux/osx-to-linux-part-1/index.html b/pr/120/blog/linux/osx-to-linux-part-1/index.html index e4fc78c0..f61f112c 100644 --- a/pr/120/blog/linux/osx-to-linux-part-1/index.html +++ b/pr/120/blog/linux/osx-to-linux-part-1/index.html @@ -69,7 +69,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/blog/page/2/index.html b/pr/120/blog/page/2/index.html new file mode 100644 index 00000000..f22a9354 --- /dev/null +++ b/pr/120/blog/page/2/index.html @@ -0,0 +1,346 @@ + + + + + + + Le blog de l'équipe Rix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + + +
    + + + + + + diff --git a/pr/120/blog/post-mortem/sre-interpretation-incident/index.html b/pr/120/blog/post-mortem/sre-interpretation-incident/index.html index 41f423d1..1f5a1f14 100644 --- a/pr/120/blog/post-mortem/sre-interpretation-incident/index.html +++ b/pr/120/blog/post-mortem/sre-interpretation-incident/index.html @@ -71,7 +71,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/blog/rss.xml b/pr/120/blog/rss.xml index 23347209..eb364123 100644 --- a/pr/120/blog/rss.xml +++ b/pr/120/blog/rss.xml @@ -5,7 +5,7 @@ Découvrez nos articles techniques (ou non), rédigés par les membres de l'équipe Rix ! Rix - L’utilisation des flux RSS de rix.fr est réservée à un usage strictement personnel, non professionnel et non collectif. Toute autre exploitation doit faire l’objet d’une autorisation et donner lieu au versement d’une rémunération. Contact : contact@rix.fr https://rix-fr.github.io/rix/pr/120/blog - Tue, 31 Oct 2023 15:18:04 +0000 + Tue, 05 Dec 2023 13:07:35 +0000 fr https://rix-fr.github.io/rix/pr/120/apple-touch-icon.png @@ -14,6 +14,67 @@ + Ansible - Les inventaires statiques + Mon, 27 Nov 2023 00:00:00 +0000 + + + + https://rix-fr.github.io/rix/pr/120/blog/cours/ansible/ansible-les-inventaires-statiques + https://rix-fr.github.io/rix/pr/120/blog/cours/ansible/ansible-les-inventaires-statiques + + Ansible - Les inventaires statiques + + cours + ansible + automation + + + Ansible - Découverte et premiers pas. + Thu, 23 Nov 2023 00:00:00 +0000 + + + + https://rix-fr.github.io/rix/pr/120/blog/cours/ansible/ansible-premiers-pas + https://rix-fr.github.io/rix/pr/120/blog/cours/ansible/ansible-premiers-pas + + Ansible - Découverte et premiers pas. + + cours + ansible + automation + + + Ansible - Un environnement de travail clé en main avec Lazy Ansible. + Wed, 22 Nov 2023 00:00:00 +0000 + + + + https://rix-fr.github.io/rix/pr/120/blog/cours/ansible/ansible-environnement-cle-en-main + https://rix-fr.github.io/rix/pr/120/blog/cours/ansible/ansible-environnement-cle-en-main + + Ansible - Un environnement de travail clé en main avec Lazy Ansible. + + cours + ansible + automation + manala + + + Principes de base de l'utilisation de clés SSH. + Fri, 20 Oct 2023 00:00:00 +0000 + + + + https://rix-fr.github.io/rix/pr/120/blog/cours/cle-ssh-principes-de-base + https://rix-fr.github.io/rix/pr/120/blog/cours/cle-ssh-principes-de-base + + Principes de base de l'utilisation de clés SSH. + + cours + ssh + how-to + + Interprétation et diagnostic d'un incident en production. Mon, 16 Oct 2023 00:00:00 +0000 diff --git a/pr/120/blog/styleguide/example/index.html b/pr/120/blog/styleguide/example/index.html index 048ea7e7..d1cd59a8 100644 --- a/pr/120/blog/styleguide/example/index.html +++ b/pr/120/blog/styleguide/example/index.html @@ -73,7 +73,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/build/305.dbfca553.css b/pr/120/build/305.10d2ad32.css similarity index 79% rename from pr/120/build/305.dbfca553.css rename to pr/120/build/305.10d2ad32.css index 65697c87..a63cc0f8 100644 --- a/pr/120/build/305.dbfca553.css +++ b/pr/120/build/305.10d2ad32.css @@ -1 +1 @@ -@charset "UTF-8";*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}body{margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}a{background-color:transparent}small{font-size:80%}img{border:none}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace}button,input,optgroup,select,textarea{margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}p{margin:unset}@font-face{font-family:Montserrat Regular;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/montserrat-regular.4ada7f2f.woff2) format("woff2"),url(/rix/pr/120/build/fonts/montserrat-regular.4a3d6361.woff) format("woff")}@font-face{font-family:Montserrat Medium;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/montserrat-medium.cf734a37.woff2) format("woff2"),url(/rix/pr/120/build/fonts/montserrat-medium.2451e96b.woff) format("woff")}@font-face{font-family:Outfit Semi Bold;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/outfit-semi-bold.007337b1.woff2) format("woff2"),url(/rix/pr/120/build/fonts/outfit-semi-bold.58a47c5f.woff) format("woff")}@font-face{font-family:"DM Serif Display";font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/dm-serif-display-regular.f7535417.woff2) format("woff2"),url(/rix/pr/120/build/fonts/dm-serif-display-regular.7265fe7d.woff) format("woff")}@font-face{font-display:block;font-family:icomoon;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/icomoon.81a5b7b9.eot);src:url(/rix/pr/120/build/fonts/icomoon.81a5b7b9.eot) format("embedded-opentype"),url(/rix/pr/120/build/fonts/icomoon.450cbdb1.ttf) format("truetype"),url(/rix/pr/120/build/fonts/icomoon.32b7badb.woff) format("woff"),url(/rix/pr/120/build/images/icomoon.00ceb532.svg) format("svg")}.icon,address{font-style:normal}.icon{speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:icomoon!important;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon--arrow-right:before{content:"\e905"}.icon--arrow-left:before{content:"\e90b"}.icon--chevron:before{content:"\e902"}.icon--close:before{content:"\e900"}.icon--hamburger:before{content:"\e901"}.icon--location:before{content:"\e903"}.icon--message:before{content:"\e904"}.icon--github:before{content:"\e906"}.icon--linkedin:before{content:"\e907"}.icon--twitter:before{content:"\e908"}.icon--quotations-left:before{content:"\e909"}.icon--quotations-right:before{content:"\e90a"}.icon--website:before{content:"\e90c"}.icon--info:before{content:"\e926"}.icon--danger:before{content:"\e927"}.icon--success:before{content:"न"}.header{background:#fff;border-top:30px solid #07162f;height:155px}.header img{margin:0}.header .container{align-items:center;display:flex;padding:0 20px 20px}.header .logo{position:relative;top:-1px;width:170px}@media (max-width:1220px){.header{height:125px}.header .logo{width:115px}}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#07162f;display:flex;flex-direction:column;font-family:Montserrat Regular;font-size:16px;height:100vh;line-height:1.9}main{background:url(/rix/pr/120/build/images/background.fe096fd5.jpg) no-repeat;background-position:bottom;background-size:contain;flex:1;padding-bottom:350px}b,strong{font-family:Montserrat Medium;font-weight:unset}.container{margin:0 auto;max-width:1440px;padding:0 125px;width:100%}.twitter-tweet{margin:10px auto}@media (max-width:760px){main{background:url(/rix/pr/120/build/images/background-mobile.90615db1.jpg) no-repeat}.container{padding:0 20px}}.nav{margin-left:auto}.nav ul{display:flex;list-style:none;margin:0;padding:0}.nav__item{align-items:center;display:flex;margin:0 20px}.nav__item:after,.nav__item:before{content:none}.nav__item a{color:#07162f;font-family:Outfit Semi Bold;font-size:1.125rem;text-decoration:none}.nav__item a span{padding:7px 2px;position:relative}.nav__item a span:after{background:#eb5050;bottom:-5px;content:"";height:2px;left:0;opacity:0;position:absolute;transition:.15s ease-out;width:100%}.nav__item a:hover span:after{bottom:0;opacity:1}.nav__item--icon a{align-items:center;display:flex}.nav__item--icon a svg{margin-right:9px;width:25px}.nav__item--icon a svg circle,.nav__item--icon a svg path{transition:stroke .3s ease,fill .3s ease}.nav__item--icon a:active span:after,.nav__item--icon a:focus span:after,.nav__item--icon a:hover span:after{display:none}.nav__item--icon a:active svg path,.nav__item--icon a:focus svg path,.nav__item--icon a:hover svg path{stroke:#eb5050}.nav__item--icon a:active svg circle,.nav__item--icon a:focus svg circle,.nav__item--icon a:hover svg circle{fill:#eb5050}.nav__item--active a span:after{background:#99b7d1;bottom:0;opacity:1}@media (max-width:1220px){.nav__item{margin:0 15px}.nav__item--icon svg{display:none}}@media (max-width:995px){.nav{display:none}}.nav-mobile{display:none}@media (max-width:995px){.nav-mobile ul{display:flex;flex:1;flex-direction:column;margin:0;padding:50px 0 0}.nav-mobile__header{align-items:center;border-top:30px solid #fff;display:flex;padding:0 20px}.nav-mobile__item{display:flex;font-size:1.9375rem;margin:0 0 10px;padding:0 0 0 45px}.nav-mobile__item:after,.nav-mobile__item:before{content:none}.nav-mobile__item a{color:#fff;font-family:Outfit Semi Bold;padding:10px 0;text-decoration:none}.nav-mobile__item a:hover{color:#fff}.nav-mobile__item--active a{border-bottom:2px solid #eb5050;position:relative}.nav-mobile__item--icon{border-top:1px solid #99b7d1;height:100px;margin:auto 0 0;padding:0}.nav-mobile__item--icon a{align-items:center;display:flex;justify-content:center;width:100%}.nav-mobile__item--icon svg{margin-right:15px;width:40px}.nav-mobile--open{background:#07162f;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0;z-index:9999999}}.nav-toggle{display:none}@media (max-width:995px){.nav-toggle{align-items:center;background:transparent;border:1px solid #99b7d1;border-radius:0;display:flex;font-size:1.25rem;height:52px;justify-content:center;margin-left:auto;width:52px}.nav-toggle--open{color:#07162f}.nav-toggle--close{color:#99b7d1}}.footer{background:#07162f;color:#fff;line-height:1.6;padding:100px 0 160px;z-index:1}.footer .container{padding:0 20px}.footer img{margin:0}.footer a{color:hsla(0,0%,100%,.8);font-family:Montserrat Regular;text-decoration:none}.footer a:active,.footer a:focus,.footer a:hover{color:#fff}.footer__contact{display:flex;justify-content:space-between;margin-bottom:100px}.footer__contact .catchphrase{flex:1;font-size:3rem;line-height:1.2;max-width:660px}.footer__contact .catchphrase .h1{color:#fff;font-family:"DM Serif Display";font-size:4rem;line-height:1.2;margin:0 0 24px}.footer__contact .catchphrase strong{color:#45d5d0}.footer__brand{border-top:2px solid #fff;color:#fff;position:relative}.footer__brand img{width:170px}.footer__brand span{left:105px;position:absolute;top:65px}.footer__links{align-items:flex-end;display:flex;margin-bottom:75px;margin-top:-30px;padding-left:105px;position:relative;z-index:1}.footer__links ul{flex:1;list-style:none;margin:0;padding:0}.footer__links li{margin:0 0 20px;padding-left:30px;position:relative}.footer__links li:after,.footer__links li:before{height:16px;position:absolute;top:4px;width:16px}.footer__links li:before{background:#203860;border-radius:50%;content:"";left:0}.footer__links li:after{align-items:center;color:#fff;content:"\e902";display:flex;font-family:icomoon;font-size:.4375rem;justify-content:center;left:0}.footer__links li a{font-family:Montserrat Regular;text-decoration:none}.footer__links li a:active,.footer__links li a:focus,.footer__links li a:hover{color:#fff}.footer__links a{font-family:Outfit Semi Bold;margin-bottom:45px}.footer__links a:active,.footer__links a:focus,.footer__links a:hover{color:#eb5050}.footer__links .pages{display:flex;margin-top:100px;width:300px}.footer__links .services{align-items:flex-start;display:flex;flex:1;flex-direction:column}.footer__links .services>div{display:flex;width:100%}.footer__links .services ul{margin:0 10px}.footer__links .services ul:first-of-type{margin-left:0}.footer__links .services ul:last-of-type{margin-right:0}.footer__legals{text-align:center}@media (max-width:1280px){.footer__contact{flex-direction:column}.footer__contact .catchphrase{font-size:1.875rem;margin-bottom:60px;max-width:unset}}@media (max-width:1220px){.footer__links{align-items:flex-start}.footer__links .pages{margin-top:65px;width:400px}.footer__links .services>div{flex-direction:column}.footer__links .services ul{margin:0}}@media (max-width:995px){.footer__contact .catchphrase{font-size:2.25rem}.footer__contact .catchphrase .h1{font-size:3rem}.footer__brand img{width:115px}.footer__brand span{left:71px;top:50px}.footer__links{flex-direction:column;margin-top:0;padding-left:0}.footer__links a{font-size:1.25rem}.footer__links ul a{font-size:1rem}.footer__links .pages{margin-top:45px;width:unset}.footer__links .services{margin-top:35px}.footer__links .services a{margin-bottom:25px}.footer__legals a{white-space:nowrap}}:root{--area-b-height:76px;--area-b-width:1000px;--area-d-width:30px}.beveled-wrapper{margin-bottom:-1300px;overflow:hidden;padding-top:var(--area-b-height);position:relative;top:-1300px}.beveled-wrapper__gradient{background:linear-gradient(90deg,transparent calc(50% + 719px),#fff calc(50% + 719px) 100%)}.beveled-wrapper__gradient .shape{background:url(/rix/pr/120/build/images/bevel.4a9689a3.svg) no-repeat;background-position:100% 0!important;background-size:cover!important;padding-top:200px;position:relative}.beveled-wrapper__gradient .shape:before{background:url(/rix/pr/120/build/images/bevel-right.29104ed1.svg) no-repeat;background-size:cover;content:"";height:var(--area-b-height);position:absolute;right:calc(var(--area-b-width)*-1 + var(--area-d-width));top:calc(var(--area-b-height)*-1 + 1px);width:var(--area-b-width)}.beveled-wrapper__gradient .shape .h2--large{margin:0}.beveled-wrapper__gradient .content{background:#fff;display:flex;flex-direction:column}.beveled-wrapper--wolf .beveled-wrapper__gradient .shape{background:url(/rix/pr/120/build/images/bevel-wolf.23f6cdd6.svg) no-repeat}@media (max-width:1440px){.beveled-wrapper .beveled-wrapper__gradient .shape,.beveled-wrapper--wolf .beveled-wrapper__gradient .shape{background:url(/rix/pr/120/build/images/bevel.4a9689a3.svg) no-repeat}.beveled-wrapper__gradient{background:transparent}.beveled-wrapper__gradient .shape:before{display:none}}@media (max-width:1220px){.beveled-wrapper{margin-bottom:-1200px;top:-1200px}.beveled-wrapper__gradient .shape{padding-top:130px}}@media (max-width:995px){.beveled-wrapper{margin-bottom:-1400px;margin-left:15px;top:-1400px}}@media (max-width:760px){.beveled-wrapper{margin-bottom:-1300px;top:-1300px}.beveled-wrapper .shape{padding-top:100px}}@media (max-width:380px){.beveled-wrapper .shape{padding-top:100px}}.author{align-items:center;color:#07162f;display:flex;flex-wrap:wrap;font-size:1.125rem}.author img{border-radius:50%;margin:0 15px 0 0;max-width:unset;width:50px}.author__image{position:relative}.author__image img{border:3px solid #fff;border-radius:50%;height:60px;margin:0 15px 0 0;max-width:unset;width:60px}.author__info{display:flex;flex-direction:column;line-height:1.3}.author__info strong{font-family:Outfit Semi Bold}.author__social{display:flex;flex-wrap:wrap;margin-top:10px;min-width:100%}.author__social a{align-items:center;border:1px solid #07162f;border-radius:50%;color:#07162f;display:flex;height:40px;justify-content:center;margin:0 6px 5px;text-decoration:none;transition:color .15s ease-in,background .15s ease-in;width:40px}.author--multi{align-items:flex-start;flex-direction:column}.author--multi .author__image{height:60px;left:-45px;margin-bottom:10px;position:relative}.author--multi .author__image img:first-child{left:45px;position:absolute}.author--multi .author__image img:nth-child(2){left:90px;position:absolute}.author--multi .author__image img:nth-child(3){left:135px;position:absolute}.author--multi .author__image img:nth-child(4){left:180px;position:absolute}.author--multi .author__image img:nth-child(5){left:225px;position:absolute}.author--multi .author__info+.author__info{margin-left:0;margin-top:20px}.alert{display:flex;font-family:Montserrat Medium;padding:20px 30px}.alert .icon{font-size:1.5625rem;margin-right:15px}.alert p:last-of-type{margin-bottom:0}.alert--error{background:#eb5050;color:hsla(0,0%,100%,.9)}.alert--info{background:#99b7d1;color:hsla(0,0%,100%,.9)}.admonition{background:#45d5d0;color:#07162f;font-family:monospace;font-size:1.125rem;line-height:1.6;margin:60px 0;padding:45px 60px 30px;position:relative}.admonition:after,.admonition:before{position:absolute}.admonition:before{background:#45d5d0;border-radius:50px;content:"";height:58px;left:31px;top:-29px;width:58px}.admonition:after{color:#fff;content:"\e926";font-family:icomoon;font-size:3.75rem;left:30px;line-height:1;position:absolute;top:-30px}.admonition p{margin:0 0 10px!important}.admonition p:last-of-type{margin:0}.admonition a{border-bottom-color:#07162f;font-family:monospace}.admonition a:active,.admonition a:focus,.admonition a:hover{color:#07162f}.admonition-title{font-family:monospace;font-size:1.25rem;font-weight:700}.admonition.success,.admonition.success:before{background:#3ec789}.admonition.success:after{content:"\e928"}.admonition.success a{border-bottom-color:#0d2c1e;color:#0d2c1e}.admonition.success a:active,.admonition.success a:focus,.admonition.success a:hover{color:#0d2c1e}.admonition.danger,.admonition.danger:before{background:#eb5050}.admonition.danger:after{content:"\e927"}.admonition.danger a{border-bottom-color:#07162f;color:#07162f}.admonition.danger a:active,.admonition.danger a:focus,.admonition.danger a:hover{color:#07162f}.article-overview{display:flex;margin-bottom:80px}@media (max-width:1220px){.article-overview{flex-direction:column}}.article-info{border:1px solid #99b7d1;flex:1;height:100%;margin:0 0 0 -1px}.article-info .author{border-bottom:1px solid #99b7d1;padding:30px 35px}.article-info__date{display:flex;flex-wrap:wrap;padding:30px 35px}.article-info__date span{display:flex;flex-direction:column;margin-bottom:20px;margin-right:35px}.article-info__date strong{font-family:Outfit Semi Bold;margin-top:2px}@media (max-width:1220px){.article-info{border:1px solid #99b7d1;margin:-1px 0 0}.article-info__date{padding-top:25px}}.article-footer{background:#fff;border:1px solid #99b7d1;display:flex;flex-wrap:wrap;margin:0 0 20px;padding:45px 75px}.article-footer .author{margin-bottom:20px;min-width:180px;padding:0;width:33.3333333333%}.article-footer .author:nth-last-of-type(-n+3){margin-bottom:0}.article-footer .author__details{display:flex}@media (max-width:760px){.article-footer{flex-direction:column;padding:25px 30px}.article-footer .author:nth-last-of-type(-n+3){margin-bottom:20px}.article-footer .author:last-of-type{margin-bottom:0}}.miniature-list{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.banner{background-image:url(/rix/pr/120/build/images/banner-home.e928350e.webp);background-position:top;background-repeat:no-repeat;background-size:cover;display:flex;height:1850px;position:relative}.banner:before{background:linear-gradient(180deg,transparent,#fff);bottom:0;content:"";height:200px;left:0;position:absolute;right:0}.banner h1{max-width:950px}.banner p{margin:0 0 15px;max-width:700px}.banner .button{margin-top:35px}.page-article .banner,.page-blog .banner,.page-case-study .banner,.page-casebook .banner{height:1550px}.banner--about{background-image:url(/rix/pr/120/build/images/banner-about.cf7414b4.webp)}.banner--blog{background-image:url(/rix/pr/120/build/images/banner-blog.777e5df6.webp)}.banner--case-study{background-image:url(/rix/pr/120/build/images/banner-case-study.c6780f13.webp)}.banner--home{background-image:url(/rix/pr/120/build/images/banner-home.e928350e.webp)}.banner--services{background-image:url(/rix/pr/120/build/images/banner-services.6d7424af.webp)}@media (max-width:995px){.page-home .banner{height:1950px}.banner--about{background-image:url(/rix/pr/120/build/images/banner-about-mobile.ac090375.webp)}.banner--blog{background-image:url(/rix/pr/120/build/images/banner-blog-mobile.dd80f874.webp)}.banner--case-study{background-image:url(/rix/pr/120/build/images/banner-case-study-mobile.9a484e1a.webp)}.banner--home{background-image:url(/rix/pr/120/build/images/banner-home-mobile.2fa58f16.webp)}.banner--services{background-image:url(/rix/pr/120/build/images/banner-services-mobile.cde6025f.webp)}}@media (max-width:760px){.page-article .banner,.page-blog .banner,.page-case-study .banner{height:1350px}.page-casebook .banner{height:1400px}}.button{align-items:center;background:#eb5050;color:#fff;display:inline-flex;font-family:Outfit Semi Bold;justify-content:center;line-height:1.4;min-height:48px;overflow:hidden;padding:15px 35px;position:relative;text-decoration:none;z-index:1}.button:before{background:#07162f;content:"";height:200px;position:absolute;transform:translateY(70%);transition:transform .6s;width:300px;z-index:-1}.button:hover{color:#fff}.button:hover:before{transform:translateY(0) rotate(10deg)}.button-ghost{background:transparent;border:1px solid #99b7d1;padding:15px 35px 15px 60px}.button-ghost:before{background:#eb5050}.button-ghost:after{content:"\e905";font-family:icomoon;left:25px;position:absolute;top:50%;transform:translateY(-50%);transition:transform .4s linear}.button-ghost span{transition:transform .3s linear}.button-ghost:active,.button-ghost:focus,.button-ghost:hover{border:1px solid #eb5050}.button-ghost:active:after,.button-ghost:focus:after,.button-ghost:hover:after{transform:translate(10px,-50%)}.button-ghost:active span,.button-ghost:focus span,.button-ghost:hover span{transform:translateX(5px)}.button-ghost--light{color:#fff}.button-ghost--light:after{color:#eb5050}.button-ghost--light:active,.button-ghost--light:focus,.button-ghost--light:hover{color:#fff}.button-ghost--dark,.button-ghost--light:active:after,.button-ghost--light:focus:after,.button-ghost--light:hover:after{color:#07162f}.button-ghost--dark:after{color:#eb5050}.button-ghost--dark:active,.button-ghost--dark:focus,.button-ghost--dark:hover{color:#07162f}.button-ghost--dark:active:after,.button-ghost--dark:focus:after,.button-ghost--dark:hover:after{color:#fff}@media (max-width:380px){.button{padding:15px 20px}.button-ghost:after{display:none}}.comment{border:1px solid #99b7d1;margin:20px 0;min-width:100%;padding:35px 75px;width:100%}.comment p{margin-bottom:0}.comment .title{font-family:Outfit Semi Bold;font-size:2rem;margin:20px 0 10px}.comment .tweet-container{margin-top:40px}@media (max-width:760px){.comment{padding:25px 30px}}@media (max-width:380px){.comment .tweet-container{display:none}}.breadcrumb{display:flex;justify-content:flex-start;margin:50px 0 30px}.breadcrumb__item:before{display:none}.breadcrumb__item:after{content:"\e90b";font-size:1rem;top:50%;transform:translateY(-50%)}.breadcrumb__item a{text-decoration:none}blockquote{border:1px solid #99b7d1;font-size:2.25rem;line-height:1.4;margin:80px 0;padding:46px 80px;position:relative}blockquote:after,blockquote:before{background-color:#fff;color:#45d5d0;font-family:icomoon;padding:0 8px;position:absolute}blockquote:before{content:"\e909";top:-34px}blockquote:after{bottom:-32px;content:"\e90a";right:90px}blockquote p{margin:0}blockquote cite{display:block;margin-top:15px}@media (max-width:995px){blockquote{font-size:1.5rem;padding:35px 30px}blockquote:before{top:-23px}blockquote:after{bottom:-23px}}.miniature{background:#fff;border:1px solid #99b7d1;display:flex;flex-direction:column;margin:0 20px 40px;min-width:calc(33.33333% - 30px);padding:0;width:calc(33.33333% - 30px)}.miniature:after,.miniature:before{content:none!important}.miniature:nth-child(3n+1){margin-left:0}.miniature:nth-child(3n+3){margin-right:0}.miniature:last-of-type{margin-bottom:40px}.miniature a{display:flex;flex-direction:column;height:100%;text-decoration:none}.miniature a:focus .miniature__image:before,.miniature a:hover .miniature__image:before{background-color:rgba(0,0,0,.2)}.miniature a:focus .miniature__image .image,.miniature a:hover .miniature__image .image{transform:scale(1.02);transform-origin:center}.miniature a .sliding-button{border-top:1px solid #99b7d1;margin-top:auto}.miniature a .sliding-button:before,.miniature a .sliding-button__content{transform:translateY(0) rotate(0deg)}.miniature__content{display:flex;flex:1;flex-direction:column;padding:30px 30px 80px;position:relative;text-decoration:none}.miniature__content .h3{color:#07162f;line-height:1.5;margin:0 0 15px}.miniature__image{height:350px;overflow:hidden;position:relative}.miniature__image:before{background-color:transparent;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:background-color .2s ease-in-out;z-index:1}.miniature__image .image{background-position:50%;background-repeat:no-repeat;background-size:cover;display:block;height:100%;position:relative;transition:transform .2s ease-in-out}.miniature__name{color:#eb5050;font-family:Outfit Semi Bold;font-size:1.25rem}@media (max-width:1440px){.miniature{min-width:calc(50% - 20px);width:calc(50% - 20px)}.miniature:nth-child(3n+1),.miniature:nth-child(3n+3){margin-left:20px;margin-right:20px}.miniature:nth-child(odd){margin-left:0}.miniature:nth-child(2n+2){margin-right:0}}@media (max-width:995px){.miniature{margin:0 0 40px!important;min-width:100%;width:100%}.miniature__image{height:260px}}.miniature-inline{background:#fff;margin:0 0 40px;padding:0;width:100%}.miniature-inline:after,.miniature-inline:before{display:none!important}.miniature-inline a{border:1px solid #99b7d1;display:flex;text-decoration:none;width:100%}.miniature-inline a:active .miniature-inline__image:before,.miniature-inline a:focus .miniature-inline__image:before,.miniature-inline a:hover .miniature-inline__image:before{background-color:rgba(0,0,0,.2)}.miniature-inline a:active .miniature-inline__image .image,.miniature-inline a:focus .miniature-inline__image .image,.miniature-inline a:hover .miniature-inline__image .image{transform:scale(1.02);transform-origin:center}.miniature-inline a:active .sliding-button,.miniature-inline a:focus .sliding-button,.miniature-inline a:hover .sliding-button{border-top:1px solid #99b7d1}.miniature-inline a:active .sliding-button:before,.miniature-inline a:active .sliding-button__content,.miniature-inline a:focus .sliding-button:before,.miniature-inline a:focus .sliding-button__content,.miniature-inline a:hover .sliding-button:before,.miniature-inline a:hover .sliding-button__content{transform:translateY(0) rotate(0deg)}.miniature-inline__title{color:#07162f;font-size:2.25rem;line-height:1.5;margin:0 0 15px}.miniature-inline__name{color:#eb5050;font-family:Outfit Semi Bold;font-size:1.75rem;font-weight:400;line-height:1.7}.miniature-inline__image{overflow:hidden;position:relative}.miniature-inline__image:before{background-color:transparent;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:background-color .2s ease-in-out;z-index:1}.miniature-inline__image .image{background-position:50%;background-repeat:no-repeat;background-size:cover;display:block;height:100%;margin:0;min-height:350px;min-width:575px;transition:transform .2s ease-in-out;width:575px}.miniature-inline__content{display:flex;flex:1;flex-direction:column;padding:30px 30px 80px;position:relative}@media (max-width:1220px){.miniature-inline a{flex-direction:column}.miniature-inline__image .image{min-width:100%!important;width:100%!important}}@media (max-width:995px){.miniature-inline__image .image{min-height:260px}}@media (max-width:760px){.miniature-inline__title{font-size:1.75rem}.miniature-inline__name{font-size:1.25rem}}.client-list{display:flex;flex-wrap:wrap;list-style:none;margin:65px 0 0}.client-list__item{margin:0;padding:0 20px;width:50%}.client-list__item:after,.client-list__item:before{content:none}.client-list__item:nth-of-type(odd){padding-left:0}.client-list__item:nth-of-type(2n){padding-right:0}.client-list__item .image{background-position:0;background-repeat:no-repeat;background-size:contain;height:35px;margin-bottom:16px;width:100%}@media (max-width:995px){.client-list{flex-direction:column;margin:0}.client-list__item{padding:0;width:100%}}.contact-infos{background:#fff;border:1px solid #99b7d1;max-width:575px}.contact-infos__item{border-bottom:1px solid #99b7d1;display:flex;font-size:1.125rem;padding:35px 60px;position:relative}.contact-infos__item:last-of-type{border:none}.contact-infos__item .dl,.contact-infos__item dl{margin:0 0 0 70px}.contact-infos__item .dt,.contact-infos__item dt{font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.4}.contact-infos__item .dd,.contact-infos__item dd{display:block;margin:0;padding:0}.contact-infos__item svg{left:35px;position:absolute;top:50%;transform:translateY(-50%);width:35px}.contact-infos__item a{color:#07162f}.contact-infos__item a .mail-icon__letter{transition:transform .15s ease-out}.contact-infos__item a:active .contact-icon circle:first-of-type,.contact-infos__item a:focus .contact-icon circle:first-of-type,.contact-infos__item a:hover .contact-icon circle:first-of-type{animation:fade 2s infinite both}.contact-infos__item a:active .contact-icon circle:nth-of-type(2),.contact-infos__item a:focus .contact-icon circle:nth-of-type(2),.contact-infos__item a:hover .contact-icon circle:nth-of-type(2){animation:fade 2s infinite both;animation-delay:.4s}.contact-infos__item a:active .contact-icon circle:nth-of-type(3),.contact-infos__item a:focus .contact-icon circle:nth-of-type(3),.contact-infos__item a:hover .contact-icon circle:nth-of-type(3){animation:fade 2s infinite both;animation-delay:.8s}.contact-infos__item a:active .mail-icon__letter,.contact-infos__item a:focus .mail-icon__letter,.contact-infos__item a:hover .mail-icon__letter{transform:translateY(-4px)}@keyframes fade{0%,40%,to{opacity:0;transform:translateZ(80px)}20%{opacity:1;transform:translateZ(0)}}.contact-tiles__item{background:#eb5050;color:#fff;display:flex;margin-bottom:20px;max-width:480px;padding:30px 35px 35px 0;width:100%}.contact-tiles__item:last-of-type{margin-bottom:0}.contact-tiles__item>span{align-items:flex-start;display:flex;flex-direction:column;padding-left:35px}.contact-tiles__item a{font-family:Montserrat Medium;position:relative}.contact-tiles__item .icon{align-items:center;border-right:2px solid #fff;display:flex;font-size:2.5rem;justify-content:center;min-width:120px;width:120px}.contact-tiles__item .title{font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.2;margin-bottom:12px}@media (max-width:1280px){.contact-tiles{align-items:flex-start;display:flex;justify-content:space-around}.contact-tiles__item{margin:0 10px}.contact-tiles__item:first-of-type{margin-left:0}.contact-tiles__item:last-of-type{margin-right:0}}@media (max-width:995px){.contact-tiles{flex-direction:column}.contact-tiles__item{margin:0 0 20px}.contact-tiles__item>span{padding-left:30px}.contact-tiles__item .icon{min-width:80px;width:80px}}@media (max-width:380px){.contact-tiles__item .icon{display:none}}.values{display:flex;list-style:none;margin:50px 0;padding:0}.values__item{margin:0 15px;min-width:calc(33.33333% - 15px);width:calc(33.33333% - 15px)}.values__item:after,.values__item:before{content:none}@media (max-width:1220px){.values{flex-direction:column;margin-left:20px}.values__item{margin:0 0 40px;min-width:100%;width:100%}}.about-values{background:#07162f url(/rix/pr/120/build/images/glow.10e86a4f.png) no-repeat;background-position:0 100%;background-size:550px;color:#fff;margin:100px 0 200px;position:relative}.about-values:after,.about-values:before{background-size:cover!important;content:"";position:absolute;width:100%}.about-values:before{background:url(/rix/pr/120/build/images/top.0eb15c3f.svg) no-repeat;background-position:100% 100%;height:100px;top:-100px}.about-values:after{background:url(/rix/pr/120/build/images/bottom.69774221.svg) no-repeat;background-position:bottom;bottom:-200px;height:200px}.about-values h2{color:#fff;margin-left:124px}.about-values .grid{background-image:url(/rix/pr/120/build/images/grid.6e242290.svg);background-position:bottom;background-repeat:no-repeat;background-size:contain;height:900px}.about-values ul{display:flex;flex-wrap:wrap;justify-content:flex-end;list-style:none;margin:0;padding:85px 195px 0}.about-values ul li{height:350px;padding:30px 35px;width:400px}.about-values ul li:after,.about-values ul li:before{content:none}@media (max-width:1440px){.about-values{background-size:350px;padding-bottom:135px}.about-values:after{bottom:-100px;height:100px}.about-values .grid{background:none;height:unset}.about-values ul{flex-direction:column;padding:0 125px}.about-values ul li{height:unset;margin:0 0 80px;padding:0;width:unset}}@media (max-width:995px){.about-values h2{margin:0 40px 80px}.about-values ul{padding:0 40px}}.open-source{align-items:center;background:#07162f url(/rix/pr/120/build/images/grid.cd7dfaaa.svg) no-repeat;background-position:bottom;background-size:contain;color:#fff;display:flex;margin:0 0 50px;padding:130px 100px 100px 150px;position:relative}.open-source:after,.open-source:before{content:"";position:absolute}.open-source:before{background:url(/rix/pr/120/build/images/triangle.db3b1be9.svg) no-repeat;background-position:0 100%;background-size:cover;height:100px;left:0;margin-left:-1px;margin-right:-1px;margin-top:-1px;top:0;width:calc(100% + 2px)}.open-source:after{background:url(/rix/pr/120/build/images/github.ae472559.svg) no-repeat;background-position:bottom;background-size:contain;height:100px;left:150px;top:60px;width:95px}.open-source__title{margin-right:120px!important;margin-top:20px!important;padding:0;white-space:nowrap}.open-source__content .button{margin-top:20px}@media (max-width:1220px){.open-source{align-items:flex-start;flex-direction:column;padding-bottom:40px;padding-left:40px;padding-right:40px}.open-source:before{top:-40px}.open-source:after{left:40px;top:30px}.open-source__title{margin-bottom:40px;margin-right:0}}@media (max-width:760px){.open-source{left:20px;position:relative}}@media (max-width:380px){.open-source{left:0;width:calc(100% + 20px)}}.services-list{border:1px solid #99b7d1;margin:0 0 60px;position:relative}.services-list:first-of-type{left:-125px}.services-list:last-of-type{right:-125px}.services-list ul{display:flex;list-style:none;margin:0;padding:0}.services-list__title{border-bottom:1px solid #99b7d1;padding:20px 50px 25px}.services-list__title h3{color:#07162f;font-family:Outfit Semi Bold;font-size:2.25rem;font-weight:400;line-height:1.25;margin:0}.services-list__title h3>span{color:#eb5050;display:block;font-family:Outfit Semi Bold;font-size:1.75rem}.services-list__item{border-right:1px solid #99b7d1;margin-bottom:0;min-width:33.3333333333%;padding-left:0;position:relative;width:33.3333333333%}.services-list__item:after,.services-list__item:before{content:none}.services-list__item:last-of-type{border-right:none}.services-list__item img{margin:0;width:95px}.services-list__item a{color:#07162f;display:block;height:100%;padding:0 50px 160px;text-decoration:none}.services-list__item a:active .sliding-button,.services-list__item a:focus .sliding-button,.services-list__item a:hover .sliding-button{border-top:1px solid #99b7d1}.services-list__item a:active .sliding-button:before,.services-list__item a:active .sliding-button__content,.services-list__item a:focus .sliding-button:before,.services-list__item a:focus .sliding-button__content,.services-list__item a:hover .sliding-button:before,.services-list__item a:hover .sliding-button__content{transform:translateY(0) rotate(0deg)}.services-list__item h4{color:#07162f;font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.3;margin:40px 0 15px}@media (max-width:1440px){.services-list:first-of-type,.services-list:last-of-type{left:unset;right:unset}}@media (max-width:1280px){.services-list{border:none}.services-list ul{flex-direction:column}.services-list__title{border:1px solid #99b7d1;border-bottom:none}.services-list__item{border:1px solid #99b7d1!important;margin:0 0 10px;min-width:100%;width:100%}.services-list__item a{padding:0 50px 80px}}@media (max-width:995px){.services-list__item img{width:60px}.services-list__item a{padding:0 25px 80px}}.sliding-button{background:#fff;bottom:0;display:flex;flex-wrap:wrap;height:80px;left:0;overflow:hidden;position:absolute;right:0}.sliding-button:before{background-color:#fff;content:"";height:80px;position:absolute;transform:translateY(160%) rotate(10deg);transition:transform .6s;width:500px}.sliding-button img{border-bottom:1px solid #99b7d1;border-right:1px solid #99b7d1;margin:0;padding:0 20px;width:50%}.sliding-button img:nth-of-type(2n){border-right:none}.sliding-button img:last-of-type,.sliding-button img:nth-last-of-type(2){border-bottom:none}.sliding-button__content{align-items:center;background:#fff;display:flex;font-family:Outfit Semi Bold;height:80px;justify-content:flex-end;left:0;padding:0 40px;position:absolute;top:0;transform:translateY(160%) rotate(10deg);transition:transform .35s;width:100%}.sliding-button__content .icon{color:#eb5050;margin-right:15px}.sliding-button--replaced{border-top:1px solid #99b7d1}.sliding-button--replaced .sliding-button__content{border-top:1px solid transparent}.sliding-button--large,.sliding-button--large .sliding-button__content,.sliding-button--large:before{height:160px}@media (max-width:1280px){.sliding-button{display:none}.sliding-button--mobile{border-top:none!important;display:flex}.sliding-button--mobile .sliding-button__content{transform:none;transition:none}}.signature{display:flex;justify-content:space-between}.signature textarea{height:200px;padding:10px;width:100%}.signature__preview{margin-top:25px;padding-right:95px}.signature__code{flex:1}.signature__code p{margin:0 0 15px}@media (max-width:1220px){.signature{flex-direction:column-reverse}}.ecosystem{position:relative}.ecosystem>img{left:400px;position:absolute;top:275px;width:330px}.ecosystem__list{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0;position:relative;z-index:1}.ecosystem__list li{background:#fff;border:1px solid #d7e4ef;margin-bottom:20px;min-height:300px;padding:30px 35px;width:370px}.ecosystem__list li:after,.ecosystem__list li:before{content:none}.ecosystem__list li img{width:50px}.ecosystem__list li strong{font-size:1.5rem}.ecosystem__list li h4{color:#07162f;font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.3;margin:40px 0 15px}.ecosystem__list .analysis{margin-left:200px}.ecosystem__list .detection{margin-left:40px}.ecosystem__list .automation{margin-left:45px}.ecosystem__list .supervision{margin-left:300px}.ecosystem__list .backup{margin-left:225px}@media (max-width:1440px){.ecosystem>img{margin-bottom:-20px;margin-left:auto;position:static;width:270px}.ecosystem__list li{min-height:unset;width:100%}.ecosystem__list .analysis,.ecosystem__list .automation,.ecosystem__list .backup,.ecosystem__list .detection,.ecosystem__list .supervision{margin-left:0}}@media (max-width:1220px){.ecosystem>img{width:200px}}.tags-list{display:flex;flex-wrap:wrap;margin:0;padding:0}.miniature .tags-list,.miniature-inline .tags-list{margin-bottom:35px}.tags-list__item{background-color:#d7e4ef;border:none!important;color:#07162f;display:flex;font-family:Outfit Semi Bold;font-size:.875rem;margin:5px!important;padding:7px 10px!important}.tags-list__item:after,.tags-list__item:before{display:none}.tags-list__item a{text-decoration:none}.timeline{display:flex;list-style:none;margin:50px 0;padding:0}.timeline__item{margin:0 80px;max-width:330px;padding-top:68px;position:relative}.timeline__item:after,.timeline__item:before{content:"";position:absolute}.timeline__item:before{background-image:url(/rix/pr/120/build/images/dot.ec074665.svg);background-repeat:repeat-x;height:2px;left:100px;top:32px;width:100%}.timeline__item:after{background-image:url(/rix/pr/120/build/images/circle.aa70b6bc.svg);height:65px;top:0;width:65px}.timeline__item:last-of-type:before{display:none}.timeline__item .title{font-size:1.5rem}@media (max-width:995px){.timeline{flex-direction:column}.timeline__item{margin:0 0 50px}.timeline__item:before{display:none}.timeline__item:last-of-type{margin:0}}.technologies-list{margin:0 0 60px;position:relative}.technologies-list ul{display:flex;flex-wrap:wrap;margin:0;padding:0}.technologies-list ul>li:after,.technologies-list ul>li:before{content:none}.technologies-list__title{padding-bottom:20px}.technologies-list__item{border:1px solid #99b7d1;border-left:none;margin-bottom:15px;min-width:33.3333333333%;padding-left:0;position:relative;text-align:center;width:33.3333333333%}.technologies-list__item:nth-of-type(3n+1){border-left:1px solid #99b7d1}.technologies-list__item:last-of-type{margin-bottom:15px}.technologies-list__item a{color:#99b7d1;display:block;font-family:Outfit Semi Bold;height:100%;text-decoration:none}.technologies-list__item a>span{display:block;padding:20px 0}.technologies-list__item img{border-bottom:1px solid #99b7d1;padding:0 50px;width:100%}@media (max-width:995px){.technologies-list__item{border-left:1px solid #99b7d1;width:100%}.technologies-list__item img{padding:0 100px}}.table-of-contents{border:1px solid #99b7d1;color:#eb5050;display:flex;flex-direction:column;font-family:Montserrat Medium;margin:0;padding:30px 45px;width:calc(100% - 330px)}.table-of-contents__item{padding:0 15px}.table-of-contents__item a{text-decoration:none}.table-of-contents__sub-level{list-style-type:lower-alpha}@media (max-width:1220px){.table-of-contents{padding:20px 25px;width:100%}}.profile{background:#fff;border:1px solid #99b7d1;display:flex;flex-direction:column;padding-left:0}.profile__image{background:#d7e4ef 0/contain no-repeat url(/rix/pr/120/build/images/default.c762a445.png);height:195px;margin-bottom:20px}.profile__name{font-family:Outfit Semi Bold;font-size:1.5rem}.profile__job,.profile__name{line-height:1.4;padding:0 40px}.profile__job{color:#eb5050;font-size:1.25rem}.profile__socials{display:flex;margin-top:20px}.profile__socials a{border-right:1px solid #99b7d1;border-top:1px solid #99b7d1;color:#eb5050;flex:1;font-size:1.0625rem;padding:7px 0;text-align:center;text-decoration:none}.profile__socials a:last-of-type{border-right:none}.profile__socials a:active,.profile__socials a:focus,.profile__socials a:hover{background-color:#d7e4ef}.profile-list{align-items:flex-start;display:flex;flex-wrap:wrap;list-style:none;margin:70px -125px;padding:0}.profile-list>li{margin:0 20px 30px;min-width:calc(25% - 40px);width:calc(25% - 40px)}.profile-list>li:after,.profile-list>li:before{content:none}@media (max-width:1280px){.profile-list>li{display:none;min-width:calc(33.33% - 40px);width:calc(33.33% - 40px)}.profile-list .experience,.profile-list .profile{display:flex}}@media (max-width:995px){.profile-list>li{min-width:calc(50% - 40px);width:calc(50% - 40px)}}@media (max-width:760px){.profile-list{margin:70px 0 0}.profile-list>li{margin:0 0 30px;min-width:100%;width:100%}}.pagination{align-items:center;background:#fff;display:flex;justify-content:center;margin:0;padding:20px 0}.pagination__item{border-bottom:1px solid #99b7d1;border-top:1px solid #99b7d1;margin:0;padding-left:0}.pagination__item:after,.pagination__item:before{display:none}.pagination__item:nth-of-type(2){padding-left:20px}.pagination__item:nth-last-of-type(2){padding-right:20px}.pagination__item a{align-items:center;color:#07162f;display:flex;font-family:Outfit Semi Bold;font-size:1.125rem;height:48px;justify-content:center;margin:0;position:relative;text-decoration:none;width:48px;z-index:1}.pagination__item a:after{background:transparent;border-radius:50%;content:"";height:25px;pointer-events:none;position:absolute;transition:background .1s ease-in;width:25px;z-index:-1}.pagination__item a:active,.pagination__item a:focus,.pagination__item a:hover{color:#fff}.pagination__item a:active:after,.pagination__item a:focus:after,.pagination__item a:hover:after{background:#07162f;border-radius:50%}.pagination__item--active a{pointer-events:none}.pagination__item--active a:after{background:#d7e4ef;border-radius:unset}.pagination__item--nav{border-left:1px solid #99b7d1;border-right:1px solid #99b7d1}.pagination__item--nav a{color:#eb5050;font-size:1.25rem;transition:background .1s ease-in}.pagination__item--nav a:after{display:none}.pagination__item--nav a:active,.pagination__item--nav a:focus,.pagination__item--nav a:hover{background:#eb5050;color:#fff}@media (max-width:760px){.pagination__item:nth-of-type(2){padding-left:10px}.pagination__item:nth-last-of-type(2){padding-right:10px}.pagination__item a{height:50px;width:35px}.pagination__item--nav a{width:40px}}.experience{background:#fff;border:1px solid #99b7d1;border-top:13px solid #07162f;color:#07162f;display:flex;flex-direction:column;min-height:370px;padding:70px 0;position:relative;text-align:center;white-space:nowrap}.experience strong{font-family:"DM Serif Display";font-size:2.5rem;line-height:1.1}.experience strong span{font-size:7.5rem}.experience--dark{background:#07162f;border:none;border-top:13px solid #d7e4ef;color:#fff}.experience--dark:before{background:url(/rix/pr/120/build/images/expertise.9d4f8cd1.svg) no-repeat;background-position:top;background-size:contain;border-radius:0;content:""!important;height:55px;left:unset;position:absolute;right:35px;top:-1px;width:45px}.preview{background:url(/rix/pr/120/build/images/preview.1e8ad7d0.svg) no-repeat;background-position:top;background-size:cover;color:#fff;padding:128px 55px 55px;position:absolute;right:125px;top:-275px;width:575px}.preview .preview__content{text-align:center}.preview .button{margin:0 auto;max-width:400px;width:100%}.preview .button:before{width:750px}.preview__image{background:no-repeat;background-position:50%;background-size:cover;height:350px;margin-bottom:74px}@media (max-width:1220px){.preview{max-width:100%;position:unset;width:100%}}.miniature-highlight{display:flex;flex-direction:column;margin:0 0 40px;padding:0;width:100%}.miniature-highlight a:focus .miniature-highlight__image:before,.miniature-highlight a:hover .miniature-highlight__image:before{background-color:rgba(0,0,0,.2)}.miniature-highlight a:focus .miniature-highlight__image .image,.miniature-highlight a:hover .miniature-highlight__image .image{transform:scale(1.02);transform-origin:center}.miniature-highlight__image{min-height:350px;min-width:575px;overflow:hidden;position:relative;width:575px}.miniature-highlight__image:before{background-color:transparent;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:background-color .2s ease-in-out;z-index:1}.miniature-highlight__image .image{background-position:50%;background-repeat:no-repeat;background-size:cover;display:block;height:100%;transition:transform .2s ease-in-out}.miniature-highlight__content{display:flex;text-decoration:none}.miniature-highlight__content h2{margin:10px 0 15px}.miniature-highlight__content .details{padding:60px 80px 20px}.miniature-highlight__content .date{color:#eb5050;font-family:Outfit Semi Bold;font-size:1rem}.miniature-highlight__tags{border-top:1px solid #99b7d1;padding:25px 450px 25px 80px}.miniature-highlight__author{background:#fff;border-left:1px solid #99b7d1;border-top:1px solid #99b7d1;bottom:0;min-width:370px;padding:30px;position:absolute;right:0;z-index:2}@media (max-width:1220px){.miniature-highlight__content{flex-direction:column-reverse}.miniature-highlight__content .details{padding:30px 30px 0}.miniature-highlight__image{min-height:260px;min-width:100%;width:100%}.miniature-highlight__image .image{height:100%;width:100%}.miniature-highlight__tags{padding:15px 30px}.miniature-highlight__author{border-left:none;min-width:100%;position:static}}.side-image{align-items:center;display:flex;margin:0 0 35px}.side-image figure,.side-image>img{margin:0 50px!important;max-width:calc(50% - 100px);width:unset!important}.side-image__content{flex:1}@media (max-width:1280px){.side-image{flex-direction:column}.side-image figure,.side-image>img{margin:50px 0!important}}.glossary{display:flex;flex-wrap:wrap;margin:0 0 100px}@media (max-width:760px){.glossary{margin:0 0 50px}}.glossary-list{margin:0;min-width:33.3333333333%;padding:0;width:33.3333333333%}.glossary-list__item{display:flex;margin-bottom:15px;padding-left:100px;padding-right:30px}.glossary-list__item:after,.glossary-list__item:before{display:none}.glossary-list__item:first-of-type{margin-top:0}.glossary-list__item a{font-size:1.25rem;line-height:1.3}[class*=glossary-list__item--]{margin-top:50px;position:relative}[class*=glossary-list__item--]:before{background:none;border:none;display:flex;font-family:"DM Serif Display";font-size:4.5rem;height:unset;left:0;line-height:1;position:absolute;text-transform:uppercase;top:-8px;width:unset}.glossary-list__item--0:before{content:"#"}.glossary-list__item--a:before{content:"a"}.glossary-list__item--b:before{content:"b"}.glossary-list__item--c:before{content:"c"}.glossary-list__item--d:before{content:"d"}.glossary-list__item--e:before{content:"e"}.glossary-list__item--f:before{content:"f"}.glossary-list__item--g:before{content:"g"}.glossary-list__item--h:before{content:"h"}.glossary-list__item--i:before{content:"i"}.glossary-list__item--j:before{content:"j"}.glossary-list__item--k:before{content:"k"}.glossary-list__item--l:before{content:"l"}.glossary-list__item--m:before{content:"m"}.glossary-list__item--n:before{content:"n"}.glossary-list__item--o:before{content:"o"}.glossary-list__item--p:before{content:"p"}.glossary-list__item--q:before{content:"q"}.glossary-list__item--r:before{content:"r"}.glossary-list__item--s:before{content:"s"}.glossary-list__item--t:before{content:"t"}.glossary-list__item--u:before{content:"u"}.glossary-list__item--v:before{content:"v"}.glossary-list__item--w:before{content:"w"}.glossary-list__item--x:before{content:"x"}.glossary-list__item--y:before{content:"y"}.glossary-list__item--z:before{content:"z"}@media (max-width:1220px){.glossary-list__item{padding-left:60px}.glossary-list__item a{font-size:1.125rem}[class*=glossary-list__item--]:before{font-size:2.5rem;top:-1px}}@media (max-width:760px){.glossary-list{min-width:100%;width:100%}[class*=glossary-list__item--]:first-of-type{margin-top:50px}}a{text-decoration:underline}a,a:active,a:focus,a:hover{color:#07162f}code,code [class*=language-],code[class*=language-],pre,pre [class*=language-],pre[class*=language-]{word-wrap:normal;background:#d7e4ef;color:#07162f;font-family:monospace;font-size:1.125rem;-webkit-hyphens:none;hyphens:none;line-height:1.5;overflow:auto;padding:0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal}.code-multiline{font-size:1.125rem;margin:30px 0!important;padding:20px 30px!important}.code-inline{background:#d7e4ef;border-radius:5px;font-family:monospace;padding:2px 4px;white-space:pre-wrap}.code-inline,.token.cdata,.token.class-name,.token.delimiter,.token.doctype,.token.function,.token.function-name,.token.inserted,.token.operator,.token.prolog,.token.property,.token.punctuation,.token.selector{color:#07162f}.token.atrule,.token.attr-name,.token.builtin,.token.constant,.token.deleted,.token.important,.token.keyword,.token.namespace,.token.symbol,.token.tag,.token.variable{color:#eb5050}.token.attr-value,.token.boolean,.token.char,.token.entity,.token.number,.token.regex,.token.string,.token.url{color:#294262}.token.block-comment,.token.block-comment *,.token.comment,.token.comment *{border:none;color:#616161!important}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.content{background:#d7e4ef;display:initial}img,video{display:block;margin:35px auto;max-width:100%}figure{margin-bottom:50px}figure img{display:block;margin:0 auto 20px;max-width:100%}figcaption{display:flex;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:600px}figcaption a{border:none}figcaption a,figcaption a:active,figcaption a:focus,figcaption a:hover{color:#07162f}.figure__credits{padding-left:30px;position:relative}.figure__credits:before{background-color:#07162f;content:"";height:1px;left:8px;position:absolute;top:50%;transform:translateY(-50%);width:12px}p{margin:0 0 35px}.h1,.h2,.h3,.h4,.h5,.h6{display:block}.h1,h1{font-size:4.5rem;font-weight:400;line-height:1.25;margin:75px 0 35px}.h1,.h1 *,h1,h1 *{font-family:"DM Serif Display"}.h1 span,h1 span{color:#eb5050;display:block;font-family:Outfit Semi Bold;font-size:3.3125rem}.h1 strong,h1 strong{color:#eb5050}.h2,h2{font-family:Outfit Semi Bold;font-size:2.25rem;font-weight:400;line-height:1.3;margin:30px 0}.h3,h3{font-size:1.75rem;line-height:1.7;margin:30px 0 23px}.h3,.h4,.h5,.h6,h3,h4,h5,h6{color:#eb5050;font-family:Outfit Semi Bold;font-weight:400}.h4,.h5,.h6,h4,h5,h6{font-size:1.25rem;line-height:2.4;margin:23px 0}.h2--large{font-family:"DM Serif Display";font-size:4.5rem;font-weight:400;line-height:1.2}.h2--large>span{display:block;font-size:1.75rem;line-height:1.8}.h2--large>span,.h3--small{color:#eb5050;font-family:Outfit Semi Bold}.h3--small{font-size:1rem;font-weight:400;line-height:1.7;margin-bottom:0}.h3--dark{color:#07162f;font-family:Outfit Semi Bold;font-size:1.75rem;margin-top:0}.image-title{margin:0 0 25px}.image-title img{height:55px;margin:0 0 15px}.image-title__content{color:#07162f;font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.3;margin:0}.image-title--light .image-title__content{color:#fff}.case-study__title{margin-bottom:40px!important}.anchor-title{scroll-margin-top:130px}.anchor-title a{text-decoration:none}.anchor-title a:after{bottom:-10px;color:#294262;content:"#";left:10px;opacity:0;position:relative;transform:translateY(-10px);transition:opacity .15s ease-in,bottom .15s ease-in}.anchor-title a:active:after,.anchor-title a:focus:after,.anchor-title a:hover:after{bottom:0;opacity:1}@media (max-width:995px){.h1,h1{font-size:3rem;margin:15px 0 30px}.h2,.h3,h2,h3{font-size:1.5rem}.h2--large{font-size:2.25rem}.h3--dark{font-size:1.5rem}.h2--large>span,.h2>span{font-size:1.25rem}.case-study__title{font-size:2.25rem}.anchor-title{scroll-margin-top:50px}}@media (max-width:380px){.h1,h1{font-size:2.1875rem}}ul{list-style:none;margin:35px 0;padding:0}ul li{margin-bottom:3px;padding-left:30px;position:relative}ul li:last-of-type{margin-bottom:0}ul li:after,ul li:before{height:16px;position:absolute;top:4px;width:16px}ul li:before{background:#d7e4ef;border-radius:50%;content:"";left:0}ul li:after{align-items:center;color:#07162f;content:"\e902";display:flex;font-family:icomoon;font-size:.4375rem;justify-content:center;left:1px}.screen-reader{height:1px;left:-10000px;overflow:hidden;position:absolute;top:auto;width:1px}.page-home main{padding-bottom:0}.home-services>p{margin-bottom:100px;max-width:690px}.home-ecosystem{background:url(/rix/pr/120/build/images/waves.be5ec2dc.svg) no-repeat;background-position:50%;background-size:1650px;position:relative}.home-ecosystem:before{background:linear-gradient(180deg,#fff 40%,hsla(0,0%,100%,.5) 70%,hsla(0,0%,100%,0));content:"";height:200px;left:0;position:absolute;top:0;width:100%;z-index:0}.home-ecosystem h2{position:relative;z-index:1}.home-clients{background:#fff;margin-left:0;padding-top:117px}@media (max-width:760px){.home-ecosystem{background-position:top;background-size:105%}.home-ecosystem:after,.home-ecosystem:before{display:none}}.page-article main{background-image:none;padding-bottom:75px}.page-article h2:first-of-type{margin-top:0;padding-top:0}.page-article figure{margin-left:-120px;width:calc(100% + 120px)}.page-article .alert{margin:0 0 40px}@media (max-width:1220px){.page-article figure{margin-left:0;width:100%}}.page-blog main{background-image:none}.page-blog .content{padding-bottom:50px}.page-blog .content ul>li:first-of-type{border:1px solid #99b7d1}.page-blog .content ul>li:after,.page-blog .content ul>li:before{content:none!important}.page-blog .miniature:nth-child(3n+1),.page-blog .miniature:nth-child(3n+3){margin-left:20px;margin-right:20px}.page-blog .miniature:nth-child(3n+5),.page-blog .miniature:nth-child(5){margin-left:0}.page-blog .miniature:nth-child(3n+7),.page-blog .miniature:nth-child(7){margin-right:0}@media (max-width:1440px){.page-blog .miniature:nth-child(2n+2),.page-blog .miniature:nth-child(3n+5),.page-blog .miniature:nth-child(3n+7),.page-blog .miniature:nth-child(5),.page-blog .miniature:nth-child(7),.page-blog .miniature:nth-child(odd){margin-left:20px;margin-right:20px}.page-blog .miniature:nth-child(2n+5),.page-blog .miniature:nth-child(5){margin-left:0}.page-blog .miniature:nth-child(2n+6),.page-blog .miniature:nth-child(6){margin-right:0}}@media (max-width:1280px){.sliding-button--mobile{border-top:1px solid #99b7d1!important}}.page-casebook main{background-image:none}.page-casebook .h3{margin-bottom:20px}@media (max-width:995px){.page-casebook .content{padding-bottom:50px}}.page-case-study main{background-image:none}.page-case-study .beveled-wrapper__gradient .content{padding-bottom:55px;position:relative}.page-case-study .beveled-wrapper__gradient .content ul{margin-top:0}.page-case-study .beveled-wrapper__gradient .content figure{margin-left:-125px}.page-case-study .beveled-wrapper__gradient .content figure img{margin:0 auto 20px}.page-case-study .beveled-wrapper__gradient .content figure figcaption{text-align:center}.page-case-study .beveled-wrapper__gradient .case-study__header{width:50%}.page-case-study .beveled-wrapper__gradient .case-study__header ul>li{padding-left:0}.page-case-study .beveled-wrapper__gradient .case-study__header ul>li h3{margin-bottom:0}.page-case-study .beveled-wrapper__gradient .case-study__header ul>li:after,.page-case-study .beveled-wrapper__gradient .case-study__header ul>li:before{content:none}.page-case-study .beveled-wrapper__gradient .case-study__image{height:743px}.page-case-study iframe{margin:0 auto}@media (max-width:1220px){.page-case-study .beveled-wrapper__gradient .case-study__header{width:100%}}@media (max-width:995px){.page-case-study .beveled-wrapper__gradient .content figure{margin:0}}.page-services .miniature__content h3{color:#07162f;margin:0 0 29px}.page-services__images{border:1px solid #99b7d1;border-top:none;display:flex;height:125px}.page-services__images>span{align-items:center;background-color:#fff;border-right:1px solid #99b7d1;display:flex;flex:1;justify-content:center;padding:20px}.page-services__images>span:last-of-type{border-right:none}.page-services__images>span img{max-height:100%}.page-services__content{background:#fff;border:1px solid #99b7d1;margin:60px 0 0;padding:0 80px 70px}.page-services__content h3{color:#07162f}.page-services__content img{margin:0}@media (max-width:760px){.page-services .h3,.page-services h3{font-size:1.5rem}.page-services__content{padding:0 25px}.page-services__content img{width:60px}}.page-contact main{background-position:top;background-size:cover}.page-contact h1 span{display:block}.page-legals h2:first-of-type{margin:0}.page-error main{background-position:top;background-size:cover}.error__title span{color:#eb5050;display:block;font-family:Outfit Semi Bold;font-size:3.3125rem}.error__action{margin:35px 0 0}.error__action .button{margin-right:35px}.error__action .button:last-of-type{margin:0}@media (max-width:1280px){.page-error main{background-image:none}.page-error .error{align-items:center;display:flex;flex-direction:column;text-align:center}}@media (max-width:995px){.page-error .error__action{display:flex;flex-direction:column}.page-error .error__action .button{margin:0 0 35px}}.page-signature main{background-image:none}.page-glossary .banner{height:1550px}.page-glossary main{background-image:none}.page-glossary .glossary-logo{margin:0 auto 50px;max-width:400px}.page-glossary .content-links{margin-top:300px}@media (max-width:1220px){.page-glossary .content-links{margin-top:100px}} \ No newline at end of file +@charset "UTF-8";*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}body{margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}a{background-color:transparent}small{font-size:80%}img{border:none}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace}button,input,optgroup,select,textarea{margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}p{margin:unset}@font-face{font-family:Montserrat Regular;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/montserrat-regular.4ada7f2f.woff2) format("woff2"),url(/rix/pr/120/build/fonts/montserrat-regular.4a3d6361.woff) format("woff")}@font-face{font-family:Montserrat Medium;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/montserrat-medium.cf734a37.woff2) format("woff2"),url(/rix/pr/120/build/fonts/montserrat-medium.2451e96b.woff) format("woff")}@font-face{font-family:Outfit Semi Bold;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/outfit-semi-bold.007337b1.woff2) format("woff2"),url(/rix/pr/120/build/fonts/outfit-semi-bold.58a47c5f.woff) format("woff")}@font-face{font-family:"DM Serif Display";font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/dm-serif-display-regular.f7535417.woff2) format("woff2"),url(/rix/pr/120/build/fonts/dm-serif-display-regular.7265fe7d.woff) format("woff")}@font-face{font-display:block;font-family:icomoon;font-style:normal;font-weight:400;src:url(/rix/pr/120/build/fonts/icomoon.81a5b7b9.eot);src:url(/rix/pr/120/build/fonts/icomoon.81a5b7b9.eot) format("embedded-opentype"),url(/rix/pr/120/build/fonts/icomoon.450cbdb1.ttf) format("truetype"),url(/rix/pr/120/build/fonts/icomoon.32b7badb.woff) format("woff"),url(/rix/pr/120/build/images/icomoon.00ceb532.svg) format("svg")}.icon,address{font-style:normal}.icon{speak:never;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:icomoon!important;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon--arrow-right:before{content:"\e905"}.icon--arrow-left:before{content:"\e90b"}.icon--chevron:before{content:"\e902"}.icon--close:before{content:"\e900"}.icon--hamburger:before{content:"\e901"}.icon--location:before{content:"\e903"}.icon--message:before{content:"\e904"}.icon--github:before{content:"\e906"}.icon--linkedin:before{content:"\e907"}.icon--twitter:before{content:"\e908"}.icon--quotations-left:before{content:"\e909"}.icon--quotations-right:before{content:"\e90a"}.icon--website:before{content:"\e90c"}.icon--info:before{content:"\e926"}.icon--danger:before{content:"\e927"}.icon--success:before{content:"न"}.header{background:#fff;border-top:30px solid #07162f;height:155px}.header img{margin:0}.header .container{align-items:center;display:flex;padding:0 20px 20px}.header .logo{position:relative;top:-1px;width:170px}@media (max-width:1220px){.header{height:125px}.header .logo{width:115px}}html{scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#07162f;display:flex;flex-direction:column;font-family:Montserrat Regular;font-size:16px;height:100vh;line-height:1.9}main{background:url(/rix/pr/120/build/images/background.fe096fd5.jpg) no-repeat;background-position:bottom;background-size:contain;flex:1;padding-bottom:350px}b,strong{font-family:Montserrat Medium;font-weight:unset}.container{margin:0 auto;max-width:1440px;padding:0 125px;width:100%}.twitter-tweet{margin:10px auto}@media (max-width:760px){main{background:url(/rix/pr/120/build/images/background-mobile.90615db1.jpg) no-repeat}.container{padding:0 20px}}.nav{margin-left:auto}.nav ul{display:flex;list-style:none;margin:0;padding:0}.nav__item{align-items:center;display:flex;margin:0 20px}.nav__item:after,.nav__item:before{content:none}.nav__item a{color:#07162f;font-family:Outfit Semi Bold;font-size:1.125rem;text-decoration:none}.nav__item a span{padding:7px 2px;position:relative}.nav__item a span:after{background:#eb5050;bottom:-5px;content:"";height:2px;left:0;opacity:0;position:absolute;transition:.15s ease-out;width:100%}.nav__item a:hover span:after{bottom:0;opacity:1}.nav__item--icon a{align-items:center;display:flex}.nav__item--icon a svg{margin-right:9px;width:25px}.nav__item--icon a svg circle,.nav__item--icon a svg path{transition:stroke .3s ease,fill .3s ease}.nav__item--icon a:active span:after,.nav__item--icon a:focus span:after,.nav__item--icon a:hover span:after{display:none}.nav__item--icon a:active svg path,.nav__item--icon a:focus svg path,.nav__item--icon a:hover svg path{stroke:#eb5050}.nav__item--icon a:active svg circle,.nav__item--icon a:focus svg circle,.nav__item--icon a:hover svg circle{fill:#eb5050}.nav__item--active a span:after{background:#99b7d1;bottom:0;opacity:1}@media (max-width:1220px){.nav__item{margin:0 15px}.nav__item--icon svg{display:none}}@media (max-width:995px){.nav{display:none}}.nav-mobile{display:none}@media (max-width:995px){.nav-mobile ul{display:flex;flex:1;flex-direction:column;margin:0;padding:50px 0 0}.nav-mobile__header{align-items:center;border-top:30px solid #fff;display:flex;padding:0 20px}.nav-mobile__item{display:flex;font-size:1.9375rem;margin:0 0 10px;padding:0 0 0 45px}.nav-mobile__item:after,.nav-mobile__item:before{content:none}.nav-mobile__item a{color:#fff;font-family:Outfit Semi Bold;padding:10px 0;text-decoration:none}.nav-mobile__item a:hover{color:#fff}.nav-mobile__item--active a{border-bottom:2px solid #eb5050;position:relative}.nav-mobile__item--icon{border-top:1px solid #99b7d1;height:100px;margin:auto 0 0;padding:0}.nav-mobile__item--icon a{align-items:center;display:flex;justify-content:center;width:100%}.nav-mobile__item--icon svg{margin-right:15px;width:40px}.nav-mobile--open{background:#07162f;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0;z-index:9999999}}.nav-toggle{display:none}@media (max-width:995px){.nav-toggle{align-items:center;background:transparent;border:1px solid #99b7d1;border-radius:0;display:flex;font-size:1.25rem;height:52px;justify-content:center;margin-left:auto;width:52px}.nav-toggle--open{color:#07162f}.nav-toggle--close{color:#99b7d1}}.footer{background:#07162f;color:#fff;line-height:1.6;padding:100px 0 160px;z-index:1}.footer .container{padding:0 20px}.footer img{margin:0}.footer a{color:hsla(0,0%,100%,.8);font-family:Montserrat Regular;text-decoration:none}.footer a:active,.footer a:focus,.footer a:hover{color:#fff}.footer__contact{display:flex;justify-content:space-between;margin-bottom:100px}.footer__contact .catchphrase{flex:1;font-size:3rem;line-height:1.2;max-width:660px}.footer__contact .catchphrase .h1{color:#fff;font-family:"DM Serif Display";font-size:4rem;line-height:1.2;margin:0 0 24px}.footer__contact .catchphrase strong{color:#45d5d0}.footer__brand{border-top:2px solid #fff;color:#fff;position:relative}.footer__brand img{width:170px}.footer__brand span{left:105px;position:absolute;top:65px}.footer__links{align-items:flex-end;display:flex;margin-bottom:75px;margin-top:-30px;padding-left:105px;position:relative;z-index:1}.footer__links ul{flex:1;list-style:none;margin:0;padding:0}.footer__links li{margin:0 0 20px;padding-left:30px;position:relative}.footer__links li:after,.footer__links li:before{height:16px;position:absolute;top:4px;width:16px}.footer__links li:before{background:#203860;border-radius:50%;content:"";left:0}.footer__links li:after{align-items:center;color:#fff;content:"\e902";display:flex;font-family:icomoon;font-size:.4375rem;justify-content:center;left:0}.footer__links li a{font-family:Montserrat Regular;text-decoration:none}.footer__links li a:active,.footer__links li a:focus,.footer__links li a:hover{color:#fff}.footer__links a{font-family:Outfit Semi Bold;margin-bottom:45px}.footer__links a:active,.footer__links a:focus,.footer__links a:hover{color:#eb5050}.footer__links .pages{display:flex;margin-top:100px;width:300px}.footer__links .services{align-items:flex-start;display:flex;flex:1;flex-direction:column}.footer__links .services>div{display:flex;width:100%}.footer__links .services ul{margin:0 10px}.footer__links .services ul:first-of-type{margin-left:0}.footer__links .services ul:last-of-type{margin-right:0}.footer__legals{text-align:center}@media (max-width:1280px){.footer__contact{flex-direction:column}.footer__contact .catchphrase{font-size:1.875rem;margin-bottom:60px;max-width:unset}}@media (max-width:1220px){.footer__links{align-items:flex-start}.footer__links .pages{margin-top:65px;width:400px}.footer__links .services>div{flex-direction:column}.footer__links .services ul{margin:0}}@media (max-width:995px){.footer__contact .catchphrase{font-size:2.25rem}.footer__contact .catchphrase .h1{font-size:3rem}.footer__brand img{width:115px}.footer__brand span{left:71px;top:50px}.footer__links{flex-direction:column;margin-top:0;padding-left:0}.footer__links a{font-size:1.25rem}.footer__links ul a{font-size:1rem}.footer__links .pages{margin-top:45px;width:unset}.footer__links .services{margin-top:35px}.footer__links .services a{margin-bottom:25px}.footer__legals a{white-space:nowrap}}:root{--area-b-height:76px;--area-b-width:1000px;--area-d-width:30px}.beveled-wrapper{margin-bottom:-1300px;overflow:hidden;padding-top:var(--area-b-height);position:relative;top:-1300px}.beveled-wrapper__gradient{background:linear-gradient(90deg,transparent calc(50% + 719px),#fff calc(50% + 719px) 100%)}.beveled-wrapper__gradient .shape{background:url(/rix/pr/120/build/images/bevel.4a9689a3.svg) no-repeat;background-position:100% 0!important;background-size:cover!important;padding-top:200px;position:relative}.beveled-wrapper__gradient .shape:before{background:url(/rix/pr/120/build/images/bevel-right.29104ed1.svg) no-repeat;background-size:cover;content:"";height:var(--area-b-height);position:absolute;right:calc(var(--area-b-width)*-1 + var(--area-d-width));top:calc(var(--area-b-height)*-1 + 1px);width:var(--area-b-width)}.beveled-wrapper__gradient .shape .h2--large{margin:0}.beveled-wrapper__gradient .content{background:#fff;display:flex;flex-direction:column}.beveled-wrapper--wolf .beveled-wrapper__gradient .shape{background:url(/rix/pr/120/build/images/bevel-wolf.23f6cdd6.svg) no-repeat}@media (max-width:1440px){.beveled-wrapper .beveled-wrapper__gradient .shape,.beveled-wrapper--wolf .beveled-wrapper__gradient .shape{background:url(/rix/pr/120/build/images/bevel.4a9689a3.svg) no-repeat}.beveled-wrapper__gradient{background:transparent}.beveled-wrapper__gradient .shape:before{display:none}}@media (max-width:1220px){.beveled-wrapper{margin-bottom:-1200px;top:-1200px}.beveled-wrapper__gradient .shape{padding-top:130px}}@media (max-width:995px){.beveled-wrapper{margin-bottom:-1400px;margin-left:15px;top:-1400px}}@media (max-width:760px){.beveled-wrapper{margin-bottom:-1300px;top:-1300px}.beveled-wrapper .shape{padding-top:100px}}@media (max-width:380px){.beveled-wrapper .shape{padding-top:100px}}.author{align-items:center;color:#07162f;display:flex;flex-wrap:wrap;font-size:1.125rem}.author img{border-radius:50%;margin:0 15px 0 0;max-width:unset;width:50px}.author__image{position:relative}.author__image img{border:3px solid #fff;border-radius:50%;height:60px;margin:0 15px 0 0;max-width:unset;width:60px}.author__info{display:flex;flex-direction:column;line-height:1.3}.author__info strong{font-family:Outfit Semi Bold}.author__social{display:flex;flex-wrap:wrap;margin-top:10px;min-width:100%}.author__social a{align-items:center;border:1px solid #07162f;border-radius:50%;color:#07162f;display:flex;height:40px;justify-content:center;margin:0 6px 5px;text-decoration:none;transition:color .15s ease-in,background .15s ease-in;width:40px}.author--multi{align-items:flex-start;flex-direction:column}.author--multi .author__image{height:60px;left:-45px;margin-bottom:10px;position:relative}.author--multi .author__image img:first-child{left:45px;position:absolute}.author--multi .author__image img:nth-child(2){left:90px;position:absolute}.author--multi .author__image img:nth-child(3){left:135px;position:absolute}.author--multi .author__image img:nth-child(4){left:180px;position:absolute}.author--multi .author__image img:nth-child(5){left:225px;position:absolute}.author--multi .author__info+.author__info{margin-left:0;margin-top:20px}.alert{display:flex;font-family:Montserrat Medium;padding:20px 30px}.alert .icon{font-size:1.5625rem;margin-right:15px}.alert p:last-of-type{margin-bottom:0}.alert--error{background:#eb5050;color:hsla(0,0%,100%,.9)}.alert--info{background:#99b7d1;color:hsla(0,0%,100%,.9)}.admonition{background:#45d5d0;color:#07162f;font-family:monospace;font-size:1.125rem;line-height:1.6;margin:60px 0;padding:45px 60px 30px;position:relative}.admonition:after,.admonition:before{position:absolute}.admonition:before{background:#45d5d0;border-radius:50px;content:"";height:58px;left:31px;top:-29px;width:58px}.admonition:after{color:#fff;content:"\e926";font-family:icomoon;font-size:3.75rem;left:30px;line-height:1;position:absolute;top:-30px}.admonition p{margin:0 0 10px!important}.admonition p:last-of-type{margin:0}.admonition a{border-bottom-color:#07162f;font-family:monospace}.admonition a:active,.admonition a:focus,.admonition a:hover{color:#07162f}.admonition-title{font-family:monospace;font-size:1.25rem;font-weight:700}.admonition.success,.admonition.success:before{background:#3ec789}.admonition.success:after{content:"\e928"}.admonition.success a{border-bottom-color:#0d2c1e;color:#0d2c1e}.admonition.success a:active,.admonition.success a:focus,.admonition.success a:hover{color:#0d2c1e}.admonition.danger,.admonition.danger:before{background:#eb5050}.admonition.danger:after{content:"\e927"}.admonition.danger a{border-bottom-color:#07162f;color:#07162f}.admonition.danger a:active,.admonition.danger a:focus,.admonition.danger a:hover{color:#07162f}.article-overview{display:flex;margin-bottom:80px}@media (max-width:1220px){.article-overview{flex-direction:column}}.article-info{border:1px solid #99b7d1;flex:1;height:100%;margin:0 0 0 -1px}.article-info .author{border-bottom:1px solid #99b7d1;padding:30px 35px}.article-info__date{display:flex;flex-wrap:wrap;padding:30px 35px}.article-info__date span{display:flex;flex-direction:column;margin-bottom:20px;margin-right:35px}.article-info__date strong{font-family:Outfit Semi Bold;margin-top:2px}@media (max-width:1220px){.article-info{border:1px solid #99b7d1;margin:-1px 0 0}.article-info__date{padding-top:25px}}.article-footer{background:#fff;border:1px solid #99b7d1;display:flex;flex-wrap:wrap;margin:0 0 20px;padding:45px 75px}.article-footer .author{margin-bottom:20px;min-width:180px;padding:0;width:33.3333333333%}.article-footer .author:nth-last-of-type(-n+3){margin-bottom:0}.article-footer .author__details{display:flex}@media (max-width:760px){.article-footer{flex-direction:column;padding:25px 30px}.article-footer .author:nth-last-of-type(-n+3){margin-bottom:20px}.article-footer .author:last-of-type{margin-bottom:0}}.miniature-list{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.banner{background-image:url(/rix/pr/120/build/images/banner-home.e928350e.webp);background-position:top;background-repeat:no-repeat;background-size:cover;display:flex;height:1850px;position:relative}.banner:before{background:linear-gradient(180deg,transparent,#fff);bottom:0;content:"";height:200px;left:0;position:absolute;right:0}.banner h1{max-width:950px}.banner p{margin:0 0 15px;max-width:700px}.banner .button{margin-top:35px}.page-article .banner,.page-blog .banner,.page-case-study .banner,.page-casebook .banner{height:1550px}.banner--about{background-image:url(/rix/pr/120/build/images/banner-about.cf7414b4.webp)}.banner--blog{background-image:url(/rix/pr/120/build/images/banner-blog.777e5df6.webp)}.banner--case-study{background-image:url(/rix/pr/120/build/images/banner-case-study.c6780f13.webp)}.banner--home{background-image:url(/rix/pr/120/build/images/banner-home.e928350e.webp)}.banner--services{background-image:url(/rix/pr/120/build/images/banner-services.6d7424af.webp)}@media (max-width:995px){.page-home .banner{height:1950px}.banner--about{background-image:url(/rix/pr/120/build/images/banner-about-mobile.ac090375.webp)}.banner--blog{background-image:url(/rix/pr/120/build/images/banner-blog-mobile.dd80f874.webp)}.banner--case-study{background-image:url(/rix/pr/120/build/images/banner-case-study-mobile.9a484e1a.webp)}.banner--home{background-image:url(/rix/pr/120/build/images/banner-home-mobile.2fa58f16.webp)}.banner--services{background-image:url(/rix/pr/120/build/images/banner-services-mobile.cde6025f.webp)}}@media (max-width:760px){.page-article .banner,.page-blog .banner,.page-case-study .banner{height:1350px}.page-casebook .banner{height:1400px}}.button{align-items:center;background:#eb5050;color:#fff;display:inline-flex;font-family:Outfit Semi Bold;justify-content:center;line-height:1.4;min-height:48px;overflow:hidden;padding:15px 35px;position:relative;text-decoration:none;z-index:1}.button:before{background:#07162f;content:"";height:200px;position:absolute;transform:translateY(70%);transition:transform .6s;width:300px;z-index:-1}.button:hover{color:#fff}.button:hover:before{transform:translateY(0) rotate(10deg)}.button-ghost{background:transparent;border:1px solid #99b7d1;padding:15px 35px 15px 60px}.button-ghost:before{background:#eb5050}.button-ghost:after{content:"\e905";font-family:icomoon;left:25px;position:absolute;top:50%;transform:translateY(-50%);transition:transform .4s linear}.button-ghost span{transition:transform .3s linear}.button-ghost:active,.button-ghost:focus,.button-ghost:hover{border:1px solid #eb5050}.button-ghost:active:after,.button-ghost:focus:after,.button-ghost:hover:after{transform:translate(10px,-50%)}.button-ghost:active span,.button-ghost:focus span,.button-ghost:hover span{transform:translateX(5px)}.button-ghost--light{color:#fff}.button-ghost--light:after{color:#eb5050}.button-ghost--light:active,.button-ghost--light:focus,.button-ghost--light:hover{color:#fff}.button-ghost--dark,.button-ghost--light:active:after,.button-ghost--light:focus:after,.button-ghost--light:hover:after{color:#07162f}.button-ghost--dark:after{color:#eb5050}.button-ghost--dark:active,.button-ghost--dark:focus,.button-ghost--dark:hover{color:#07162f}.button-ghost--dark:active:after,.button-ghost--dark:focus:after,.button-ghost--dark:hover:after{color:#fff}@media (max-width:380px){.button{padding:15px 20px}.button-ghost:after{display:none}}.comment{border:1px solid #99b7d1;margin:20px 0;min-width:100%;padding:35px 75px;width:100%}.comment p{margin-bottom:0}.comment .title{font-family:Outfit Semi Bold;font-size:2rem;margin:20px 0 10px}.comment .tweet-container{margin-top:40px}@media (max-width:760px){.comment{padding:25px 30px}}@media (max-width:380px){.comment .tweet-container{display:none}}.breadcrumb{display:flex;justify-content:flex-start;margin:50px 0 30px}.breadcrumb__item:before{display:none}.breadcrumb__item:after{content:"\e90b";font-size:1rem;top:50%;transform:translateY(-50%)}.breadcrumb__item a{text-decoration:none}blockquote{border:1px solid #99b7d1;font-size:2.25rem;line-height:1.4;margin:80px 0;padding:46px 80px;position:relative}blockquote:after,blockquote:before{background-color:#fff;color:#45d5d0;font-family:icomoon;padding:0 8px;position:absolute}blockquote:before{content:"\e909";top:-34px}blockquote:after{bottom:-32px;content:"\e90a";right:90px}blockquote p{margin:0}blockquote cite{display:block;margin-top:15px}@media (max-width:995px){blockquote{font-size:1.5rem;padding:35px 30px}blockquote:before{top:-23px}blockquote:after{bottom:-23px}}.miniature{background:#fff;border:1px solid #99b7d1;display:flex;flex-direction:column;margin:0 20px 40px;min-width:calc(33.33333% - 30px);padding:0;width:calc(33.33333% - 30px)}.miniature:after,.miniature:before{content:none!important}.miniature:nth-child(3n+1){margin-left:0}.miniature:nth-child(3n+3){margin-right:0}.miniature:last-of-type{margin-bottom:40px}.miniature a{display:flex;flex-direction:column;height:100%;text-decoration:none}.miniature a:focus .miniature__image:before,.miniature a:hover .miniature__image:before{background-color:rgba(0,0,0,.2)}.miniature a:focus .miniature__image .image,.miniature a:hover .miniature__image .image{transform:scale(1.02);transform-origin:center}.miniature a .sliding-button{border-top:1px solid #99b7d1;margin-top:auto}.miniature a .sliding-button:before,.miniature a .sliding-button__content{transform:translateY(0) rotate(0deg)}.miniature__content{display:flex;flex:1;flex-direction:column;padding:30px 30px 80px;position:relative;text-decoration:none}.miniature__content .h3{color:#07162f;line-height:1.5;margin:0 0 15px}.miniature__image{height:350px;overflow:hidden;position:relative}.miniature__image:before{background-color:transparent;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:background-color .2s ease-in-out;z-index:1}.miniature__image .image{background-position:50%;background-repeat:no-repeat;background-size:cover;display:block;height:100%;position:relative;transition:transform .2s ease-in-out}.miniature__name{color:#eb5050;font-family:Outfit Semi Bold;font-size:1.25rem}@media (max-width:1440px){.miniature{min-width:calc(50% - 20px);width:calc(50% - 20px)}.miniature:nth-child(3n+1),.miniature:nth-child(3n+3){margin-left:20px;margin-right:20px}.miniature:nth-child(odd){margin-left:0}.miniature:nth-child(2n+2){margin-right:0}}@media (max-width:995px){.miniature{margin:0 0 40px!important;min-width:100%;width:100%}.miniature__image{height:260px}}.miniature-inline{background:#fff;margin:0 0 40px;padding:0;width:100%}.miniature-inline:after,.miniature-inline:before{display:none!important}.miniature-inline a{border:1px solid #99b7d1;display:flex;text-decoration:none;width:100%}.miniature-inline a:active .miniature-inline__image:before,.miniature-inline a:focus .miniature-inline__image:before,.miniature-inline a:hover .miniature-inline__image:before{background-color:rgba(0,0,0,.2)}.miniature-inline a:active .miniature-inline__image .image,.miniature-inline a:focus .miniature-inline__image .image,.miniature-inline a:hover .miniature-inline__image .image{transform:scale(1.02);transform-origin:center}.miniature-inline a:active .sliding-button,.miniature-inline a:focus .sliding-button,.miniature-inline a:hover .sliding-button{border-top:1px solid #99b7d1}.miniature-inline a:active .sliding-button:before,.miniature-inline a:active .sliding-button__content,.miniature-inline a:focus .sliding-button:before,.miniature-inline a:focus .sliding-button__content,.miniature-inline a:hover .sliding-button:before,.miniature-inline a:hover .sliding-button__content{transform:translateY(0) rotate(0deg)}.miniature-inline__title{color:#07162f;font-size:2.25rem;line-height:1.5;margin:0 0 15px}.miniature-inline__name{color:#eb5050;font-family:Outfit Semi Bold;font-size:1.75rem;font-weight:400;line-height:1.7}.miniature-inline__image{overflow:hidden;position:relative}.miniature-inline__image:before{background-color:transparent;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:background-color .2s ease-in-out;z-index:1}.miniature-inline__image .image{background-position:50%;background-repeat:no-repeat;background-size:cover;display:block;height:100%;margin:0;min-height:350px;min-width:575px;transition:transform .2s ease-in-out;width:575px}.miniature-inline__content{display:flex;flex:1;flex-direction:column;padding:30px 30px 80px;position:relative}@media (max-width:1220px){.miniature-inline a{flex-direction:column}.miniature-inline__image .image{min-width:100%!important;width:100%!important}}@media (max-width:995px){.miniature-inline__image .image{min-height:260px}}@media (max-width:760px){.miniature-inline__title{font-size:1.75rem}.miniature-inline__name{font-size:1.25rem}}.client-list{display:flex;flex-wrap:wrap;list-style:none;margin:65px 0 0}.client-list__item{margin:0;padding:0 20px;width:50%}.client-list__item:after,.client-list__item:before{content:none}.client-list__item:nth-of-type(odd){padding-left:0}.client-list__item:nth-of-type(2n){padding-right:0}.client-list__item .image{background-position:0;background-repeat:no-repeat;background-size:contain;height:35px;margin-bottom:16px;width:100%}@media (max-width:995px){.client-list{flex-direction:column;margin:0}.client-list__item{padding:0;width:100%}}.contact-infos{background:#fff;border:1px solid #99b7d1;max-width:575px}.contact-infos__item{border-bottom:1px solid #99b7d1;display:flex;font-size:1.125rem;padding:35px 60px;position:relative}.contact-infos__item:last-of-type{border:none}.contact-infos__item .dl,.contact-infos__item dl{margin:0 0 0 70px}.contact-infos__item .dt,.contact-infos__item dt{font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.4}.contact-infos__item .dd,.contact-infos__item dd{display:block;margin:0;padding:0}.contact-infos__item svg{left:35px;position:absolute;top:50%;transform:translateY(-50%);width:35px}.contact-infos__item a{color:#07162f}.contact-infos__item a .mail-icon__letter{transition:transform .15s ease-out}.contact-infos__item a:active .contact-icon circle:first-of-type,.contact-infos__item a:focus .contact-icon circle:first-of-type,.contact-infos__item a:hover .contact-icon circle:first-of-type{animation:fade 2s infinite both}.contact-infos__item a:active .contact-icon circle:nth-of-type(2),.contact-infos__item a:focus .contact-icon circle:nth-of-type(2),.contact-infos__item a:hover .contact-icon circle:nth-of-type(2){animation:fade 2s infinite both;animation-delay:.4s}.contact-infos__item a:active .contact-icon circle:nth-of-type(3),.contact-infos__item a:focus .contact-icon circle:nth-of-type(3),.contact-infos__item a:hover .contact-icon circle:nth-of-type(3){animation:fade 2s infinite both;animation-delay:.8s}.contact-infos__item a:active .mail-icon__letter,.contact-infos__item a:focus .mail-icon__letter,.contact-infos__item a:hover .mail-icon__letter{transform:translateY(-4px)}@keyframes fade{0%,40%,to{opacity:0;transform:translateZ(80px)}20%{opacity:1;transform:translateZ(0)}}.contact-tiles__item{background:#eb5050;color:#fff;display:flex;margin-bottom:20px;max-width:480px;padding:30px 35px 35px 0;width:100%}.contact-tiles__item:last-of-type{margin-bottom:0}.contact-tiles__item>span{align-items:flex-start;display:flex;flex-direction:column;padding-left:35px}.contact-tiles__item a{font-family:Montserrat Medium;position:relative}.contact-tiles__item .icon{align-items:center;border-right:2px solid #fff;display:flex;font-size:2.5rem;justify-content:center;min-width:120px;width:120px}.contact-tiles__item .title{font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.2;margin-bottom:12px}@media (max-width:1280px){.contact-tiles{align-items:flex-start;display:flex;justify-content:space-around}.contact-tiles__item{margin:0 10px}.contact-tiles__item:first-of-type{margin-left:0}.contact-tiles__item:last-of-type{margin-right:0}}@media (max-width:995px){.contact-tiles{flex-direction:column}.contact-tiles__item{margin:0 0 20px}.contact-tiles__item>span{padding-left:30px}.contact-tiles__item .icon{min-width:80px;width:80px}}@media (max-width:380px){.contact-tiles__item .icon{display:none}}.values{display:flex;list-style:none;margin:50px 0;padding:0}.values__item{margin:0 15px;min-width:calc(33.33333% - 15px);width:calc(33.33333% - 15px)}.values__item:after,.values__item:before{content:none}@media (max-width:1220px){.values{flex-direction:column;margin-left:20px}.values__item{margin:0 0 40px;min-width:100%;width:100%}}.about-values{background:#07162f url(/rix/pr/120/build/images/glow.10e86a4f.png) no-repeat;background-position:0 100%;background-size:550px;color:#fff;margin:100px 0 200px;position:relative}.about-values:after,.about-values:before{background-size:cover!important;content:"";position:absolute;width:100%}.about-values:before{background:url(/rix/pr/120/build/images/top.0eb15c3f.svg) no-repeat;background-position:100% 100%;height:100px;top:-100px}.about-values:after{background:url(/rix/pr/120/build/images/bottom.69774221.svg) no-repeat;background-position:bottom;bottom:-200px;height:200px}.about-values h2{color:#fff;margin-left:124px}.about-values .grid{background-image:url(/rix/pr/120/build/images/grid.6e242290.svg);background-position:bottom;background-repeat:no-repeat;background-size:contain;height:900px}.about-values ul{display:flex;flex-wrap:wrap;justify-content:flex-end;list-style:none;margin:0;padding:85px 195px 0}.about-values ul li{height:350px;padding:30px 35px;width:400px}.about-values ul li:after,.about-values ul li:before{content:none}@media (max-width:1440px){.about-values{background-size:350px;padding-bottom:135px}.about-values:after{bottom:-100px;height:100px}.about-values .grid{background:none;height:unset}.about-values ul{flex-direction:column;padding:0 125px}.about-values ul li{height:unset;margin:0 0 80px;padding:0;width:unset}}@media (max-width:995px){.about-values h2{margin:0 40px 80px}.about-values ul{padding:0 40px}}.open-source{align-items:center;background:#07162f url(/rix/pr/120/build/images/grid.cd7dfaaa.svg) no-repeat;background-position:bottom;background-size:contain;color:#fff;display:flex;margin:0 0 50px;padding:130px 100px 100px 150px;position:relative}.open-source:after,.open-source:before{content:"";position:absolute}.open-source:before{background:url(/rix/pr/120/build/images/triangle.db3b1be9.svg) no-repeat;background-position:0 100%;background-size:cover;height:100px;left:0;margin-left:-1px;margin-right:-1px;margin-top:-1px;top:0;width:calc(100% + 2px)}.open-source:after{background:url(/rix/pr/120/build/images/github.ae472559.svg) no-repeat;background-position:bottom;background-size:contain;height:100px;left:150px;top:60px;width:95px}.open-source__title{margin-right:120px!important;margin-top:20px!important;padding:0;white-space:nowrap}.open-source__content .button{margin-top:20px}@media (max-width:1220px){.open-source{align-items:flex-start;flex-direction:column;padding-bottom:40px;padding-left:40px;padding-right:40px}.open-source:before{top:-40px}.open-source:after{left:40px;top:30px}.open-source__title{margin-bottom:40px;margin-right:0}}@media (max-width:760px){.open-source{left:20px;position:relative}}@media (max-width:380px){.open-source{left:0;width:calc(100% + 20px)}}.services-list{border:1px solid #99b7d1;margin:0 0 60px;position:relative}.services-list:first-of-type{left:-125px}.services-list:last-of-type{right:-125px}.services-list ul{display:flex;list-style:none;margin:0;padding:0}.services-list__title{border-bottom:1px solid #99b7d1;padding:20px 50px 25px}.services-list__title h3{color:#07162f;font-family:Outfit Semi Bold;font-size:2.25rem;font-weight:400;line-height:1.25;margin:0}.services-list__title h3>span{color:#eb5050;display:block;font-family:Outfit Semi Bold;font-size:1.75rem}.services-list__item{border-right:1px solid #99b7d1;margin-bottom:0;min-width:33.3333333333%;padding-left:0;position:relative;width:33.3333333333%}.services-list__item:after,.services-list__item:before{content:none}.services-list__item:last-of-type{border-right:none}.services-list__item img{margin:0;width:95px}.services-list__item a{color:#07162f;display:block;height:100%;padding:0 50px 160px;text-decoration:none}.services-list__item a:active .sliding-button,.services-list__item a:focus .sliding-button,.services-list__item a:hover .sliding-button{border-top:1px solid #99b7d1}.services-list__item a:active .sliding-button:before,.services-list__item a:active .sliding-button__content,.services-list__item a:focus .sliding-button:before,.services-list__item a:focus .sliding-button__content,.services-list__item a:hover .sliding-button:before,.services-list__item a:hover .sliding-button__content{transform:translateY(0) rotate(0deg)}.services-list__item h4{color:#07162f;font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.3;margin:40px 0 15px}@media (max-width:1440px){.services-list:first-of-type,.services-list:last-of-type{left:unset;right:unset}}@media (max-width:1280px){.services-list{border:none}.services-list ul{flex-direction:column}.services-list__title{border:1px solid #99b7d1;border-bottom:none}.services-list__item{border:1px solid #99b7d1!important;margin:0 0 10px;min-width:100%;width:100%}.services-list__item a{padding:0 50px 80px}}@media (max-width:995px){.services-list__item img{width:60px}.services-list__item a{padding:0 25px 80px}}.sliding-button{background:#fff;bottom:0;display:flex;flex-wrap:wrap;height:80px;left:0;overflow:hidden;position:absolute;right:0}.sliding-button:before{background-color:#fff;content:"";height:80px;position:absolute;transform:translateY(160%) rotate(10deg);transition:transform .6s;width:500px}.sliding-button img{border-bottom:1px solid #99b7d1;border-right:1px solid #99b7d1;margin:0;padding:0 20px;width:50%}.sliding-button img:nth-of-type(2n){border-right:none}.sliding-button img:last-of-type,.sliding-button img:nth-last-of-type(2){border-bottom:none}.sliding-button__content{align-items:center;background:#fff;display:flex;font-family:Outfit Semi Bold;height:80px;justify-content:flex-end;left:0;padding:0 40px;position:absolute;top:0;transform:translateY(160%) rotate(10deg);transition:transform .35s;width:100%}.sliding-button__content .icon{color:#eb5050;margin-right:15px}.sliding-button--replaced{border-top:1px solid #99b7d1}.sliding-button--replaced .sliding-button__content{border-top:1px solid transparent}.sliding-button--large,.sliding-button--large .sliding-button__content,.sliding-button--large:before{height:160px}@media (max-width:1280px){.sliding-button{display:none}.sliding-button--mobile{border-top:none!important;display:flex}.sliding-button--mobile .sliding-button__content{transform:none;transition:none}}.signature{display:flex;justify-content:space-between}.signature textarea{height:200px;padding:10px;width:100%}.signature__preview{margin-top:25px;padding-right:95px}.signature__code{flex:1}.signature__code p{margin:0 0 15px}@media (max-width:1220px){.signature{flex-direction:column-reverse}}.ecosystem{position:relative}.ecosystem>img{left:400px;position:absolute;top:275px;width:330px}.ecosystem__list{display:flex;flex-wrap:wrap;list-style:none;margin:0;padding:0;position:relative;z-index:1}.ecosystem__list li{background:#fff;border:1px solid #d7e4ef;margin-bottom:20px;min-height:300px;padding:30px 35px;width:370px}.ecosystem__list li:after,.ecosystem__list li:before{content:none}.ecosystem__list li img{width:50px}.ecosystem__list li strong{font-size:1.5rem}.ecosystem__list li h4{color:#07162f;font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.3;margin:40px 0 15px}.ecosystem__list .analysis{margin-left:200px}.ecosystem__list .detection{margin-left:40px}.ecosystem__list .automation{margin-left:45px}.ecosystem__list .supervision{margin-left:300px}.ecosystem__list .backup{margin-left:225px}@media (max-width:1440px){.ecosystem>img{margin-bottom:-20px;margin-left:auto;position:static;width:270px}.ecosystem__list li{min-height:unset;width:100%}.ecosystem__list .analysis,.ecosystem__list .automation,.ecosystem__list .backup,.ecosystem__list .detection,.ecosystem__list .supervision{margin-left:0}}@media (max-width:1220px){.ecosystem>img{width:200px}}.tags-list{display:flex;flex-wrap:wrap;margin:0;padding:0}.miniature .tags-list,.miniature-inline .tags-list{margin-bottom:35px}.tags-list__item{background-color:#d7e4ef;border:none!important;color:#07162f;display:flex;font-family:Outfit Semi Bold;font-size:.875rem;margin:5px!important;padding:7px 10px!important}.tags-list__item:after,.tags-list__item:before{display:none}.tags-list__item a{text-decoration:none}.timeline{display:flex;list-style:none;margin:50px 0;padding:0}.timeline__item{margin:0 80px;max-width:330px;padding-top:68px;position:relative}.timeline__item:after,.timeline__item:before{content:"";position:absolute}.timeline__item:before{background-image:url(/rix/pr/120/build/images/dot.ec074665.svg);background-repeat:repeat-x;height:2px;left:100px;top:32px;width:100%}.timeline__item:after{background-image:url(/rix/pr/120/build/images/circle.aa70b6bc.svg);height:65px;top:0;width:65px}.timeline__item:last-of-type:before{display:none}.timeline__item .title{font-size:1.5rem}@media (max-width:995px){.timeline{flex-direction:column}.timeline__item{margin:0 0 50px}.timeline__item:before{display:none}.timeline__item:last-of-type{margin:0}}.technologies-list{margin:0 0 60px;position:relative}.technologies-list ul{display:flex;flex-wrap:wrap;margin:0;padding:0}.technologies-list ul>li:after,.technologies-list ul>li:before{content:none}.technologies-list__title{padding-bottom:20px}.technologies-list__item{border:1px solid #99b7d1;border-left:none;margin-bottom:15px;min-width:33.3333333333%;padding-left:0;position:relative;text-align:center;width:33.3333333333%}.technologies-list__item:nth-of-type(3n+1){border-left:1px solid #99b7d1}.technologies-list__item:last-of-type{margin-bottom:15px}.technologies-list__item a{color:#99b7d1;display:block;font-family:Outfit Semi Bold;height:100%;text-decoration:none}.technologies-list__item a>span{display:block;padding:20px 0}.technologies-list__item img{border-bottom:1px solid #99b7d1;padding:0 50px;width:100%}@media (max-width:995px){.technologies-list__item{border-left:1px solid #99b7d1;width:100%}.technologies-list__item img{padding:0 100px}}.table-of-contents{border:1px solid #99b7d1;color:#eb5050;display:flex;flex-direction:column;font-family:Montserrat Medium;margin:0;padding:30px 45px;width:calc(100% - 330px)}.table-of-contents__item{padding:0 15px}.table-of-contents__item a{text-decoration:none}.table-of-contents__sub-level{list-style-type:lower-alpha}@media (max-width:1220px){.table-of-contents{padding:20px 25px;width:100%}}.profile{background:#fff;border:1px solid #99b7d1;display:flex;flex-direction:column;padding-left:0}.profile__image{background:#d7e4ef 0/contain no-repeat url(/rix/pr/120/build/images/default.c762a445.png);height:195px;margin-bottom:20px}.profile__name{font-family:Outfit Semi Bold;font-size:1.5rem}.profile__job,.profile__name{line-height:1.4;padding:0 40px}.profile__job{color:#eb5050;font-size:1.25rem}.profile__socials{display:flex;margin-top:20px}.profile__socials a{border-right:1px solid #99b7d1;border-top:1px solid #99b7d1;color:#eb5050;flex:1;font-size:1.0625rem;padding:7px 0;text-align:center;text-decoration:none}.profile__socials a:last-of-type{border-right:none}.profile__socials a:active,.profile__socials a:focus,.profile__socials a:hover{background-color:#d7e4ef}.profile-list{align-items:flex-start;display:flex;flex-wrap:wrap;list-style:none;margin:70px -125px;padding:0}.profile-list>li{margin:0 20px 30px;min-width:calc(25% - 40px);width:calc(25% - 40px)}.profile-list>li:after,.profile-list>li:before{content:none}@media (max-width:1280px){.profile-list>li{display:none;min-width:calc(33.33% - 40px);width:calc(33.33% - 40px)}.profile-list .experience,.profile-list .profile{display:flex}}@media (max-width:995px){.profile-list>li{min-width:calc(50% - 40px);width:calc(50% - 40px)}}@media (max-width:760px){.profile-list{margin:70px 0 0}.profile-list>li{margin:0 0 30px;min-width:100%;width:100%}}.pagination{align-items:center;background:#fff;display:flex;justify-content:center;margin:0;padding:20px 0}.pagination__item{border-bottom:1px solid #99b7d1;border-top:1px solid #99b7d1;margin:0;padding-left:0}.pagination__item:after,.pagination__item:before{display:none}.pagination__item:nth-of-type(2){padding-left:20px}.pagination__item:nth-last-of-type(2){padding-right:20px}.pagination__item a{align-items:center;color:#07162f;display:flex;font-family:Outfit Semi Bold;font-size:1.125rem;height:48px;justify-content:center;margin:0;position:relative;text-decoration:none;width:48px;z-index:1}.pagination__item a:after{background:transparent;border-radius:50%;content:"";height:25px;pointer-events:none;position:absolute;transition:background .1s ease-in;width:25px;z-index:-1}.pagination__item a:active,.pagination__item a:focus,.pagination__item a:hover{color:#fff}.pagination__item a:active:after,.pagination__item a:focus:after,.pagination__item a:hover:after{background:#07162f;border-radius:50%}.pagination__item--active a{pointer-events:none}.pagination__item--active a:after{background:#d7e4ef;border-radius:unset}.pagination__item--nav{border-left:1px solid #99b7d1;border-right:1px solid #99b7d1}.pagination__item--nav a{color:#eb5050;font-size:1.25rem;transition:background .1s ease-in}.pagination__item--nav a:after{display:none}.pagination__item--nav a:active,.pagination__item--nav a:focus,.pagination__item--nav a:hover{background:#eb5050;color:#fff}@media (max-width:760px){.pagination__item:nth-of-type(2){padding-left:10px}.pagination__item:nth-last-of-type(2){padding-right:10px}.pagination__item a{height:50px;width:35px}.pagination__item--nav a{width:40px}}.experience{background:#fff;border:1px solid #99b7d1;border-top:13px solid #07162f;color:#07162f;display:flex;flex-direction:column;min-height:370px;padding:70px 0;position:relative;text-align:center;white-space:nowrap}.experience strong{font-family:"DM Serif Display";font-size:2.5rem;line-height:1.1}.experience strong span{font-size:7.5rem}.experience--dark{background:#07162f;border:none;border-top:13px solid #d7e4ef;color:#fff}.experience--dark:before{background:url(/rix/pr/120/build/images/expertise.9d4f8cd1.svg) no-repeat;background-position:top;background-size:contain;border-radius:0;content:""!important;height:55px;left:unset;position:absolute;right:35px;top:-1px;width:45px}.preview{background:url(/rix/pr/120/build/images/preview.1e8ad7d0.svg) no-repeat;background-position:top;background-size:cover;color:#fff;padding:128px 55px 55px;position:absolute;right:125px;top:-275px;width:575px}.preview .preview__content{text-align:center}.preview .button{margin:0 auto;max-width:400px;width:100%}.preview .button:before{width:750px}.preview__image{background:no-repeat;background-position:50%;background-size:cover;height:350px;margin-bottom:74px}@media (max-width:1220px){.preview{max-width:100%;position:unset;width:100%}}.miniature-highlight{display:flex;flex-direction:column;margin:0 0 40px;padding:0;width:100%}.miniature-highlight a:focus .miniature-highlight__image:before,.miniature-highlight a:hover .miniature-highlight__image:before{background-color:rgba(0,0,0,.2)}.miniature-highlight a:focus .miniature-highlight__image .image,.miniature-highlight a:hover .miniature-highlight__image .image{transform:scale(1.02);transform-origin:center}.miniature-highlight__image{min-height:350px;min-width:575px;overflow:hidden;position:relative;width:575px}.miniature-highlight__image:before{background-color:transparent;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transition:background-color .2s ease-in-out;z-index:1}.miniature-highlight__image .image{background-position:50%;background-repeat:no-repeat;background-size:cover;display:block;height:100%;transition:transform .2s ease-in-out}.miniature-highlight__content{display:flex;text-decoration:none}.miniature-highlight__content h2{margin:10px 0 15px}.miniature-highlight__content .details{padding:60px 80px 20px}.miniature-highlight__content .date{color:#eb5050;font-family:Outfit Semi Bold;font-size:1rem}.miniature-highlight__tags{border-top:1px solid #99b7d1;padding:25px 450px 25px 80px}.miniature-highlight__author{background:#fff;border-left:1px solid #99b7d1;border-top:1px solid #99b7d1;bottom:0;min-width:370px;padding:30px;position:absolute;right:0;z-index:2}@media (max-width:1220px){.miniature-highlight__content{flex-direction:column-reverse}.miniature-highlight__content .details{padding:30px 30px 0}.miniature-highlight__image{min-height:260px;min-width:100%;width:100%}.miniature-highlight__image .image{height:100%;width:100%}.miniature-highlight__tags{padding:15px 30px}.miniature-highlight__author{border-left:none;min-width:100%;position:static}}.side-image{align-items:center;display:flex;margin:0 0 35px}.side-image figure,.side-image>img{margin:0 50px!important;max-width:calc(50% - 100px);width:unset!important}.side-image__content{flex:1}@media (max-width:1280px){.side-image{flex-direction:column}.side-image figure,.side-image>img{margin:50px 0!important;max-width:100%}}.glossary{display:flex;flex-wrap:wrap;margin:0 0 100px}@media (max-width:760px){.glossary{margin:0 0 50px}}.glossary-list{margin:0;min-width:33.3333333333%;padding:0;width:33.3333333333%}.glossary-list__item{display:flex;margin-bottom:15px;padding-left:100px;padding-right:30px}.glossary-list__item:after,.glossary-list__item:before{display:none}.glossary-list__item:first-of-type{margin-top:0}.glossary-list__item a{font-size:1.25rem;line-height:1.3}[class*=glossary-list__item--]{margin-top:50px;position:relative}[class*=glossary-list__item--]:before{background:none;border:none;display:flex;font-family:"DM Serif Display";font-size:4.5rem;height:unset;left:0;line-height:1;position:absolute;text-transform:uppercase;top:-8px;width:unset}.glossary-list__item--0:before{content:"#"}.glossary-list__item--a:before{content:"a"}.glossary-list__item--b:before{content:"b"}.glossary-list__item--c:before{content:"c"}.glossary-list__item--d:before{content:"d"}.glossary-list__item--e:before{content:"e"}.glossary-list__item--f:before{content:"f"}.glossary-list__item--g:before{content:"g"}.glossary-list__item--h:before{content:"h"}.glossary-list__item--i:before{content:"i"}.glossary-list__item--j:before{content:"j"}.glossary-list__item--k:before{content:"k"}.glossary-list__item--l:before{content:"l"}.glossary-list__item--m:before{content:"m"}.glossary-list__item--n:before{content:"n"}.glossary-list__item--o:before{content:"o"}.glossary-list__item--p:before{content:"p"}.glossary-list__item--q:before{content:"q"}.glossary-list__item--r:before{content:"r"}.glossary-list__item--s:before{content:"s"}.glossary-list__item--t:before{content:"t"}.glossary-list__item--u:before{content:"u"}.glossary-list__item--v:before{content:"v"}.glossary-list__item--w:before{content:"w"}.glossary-list__item--x:before{content:"x"}.glossary-list__item--y:before{content:"y"}.glossary-list__item--z:before{content:"z"}@media (max-width:1220px){.glossary-list__item{padding-left:60px}.glossary-list__item a{font-size:1.125rem}[class*=glossary-list__item--]:before{font-size:2.5rem;top:-1px}}@media (max-width:760px){.glossary-list{min-width:100%;width:100%}[class*=glossary-list__item--]:first-of-type{margin-top:50px}}a{text-decoration:underline}a,a:active,a:focus,a:hover{color:#07162f}code,code [class*=language-],code[class*=language-],pre,pre [class*=language-],pre[class*=language-]{word-wrap:normal;background:#d7e4ef;color:#07162f;font-family:monospace;font-size:1.125rem;-webkit-hyphens:none;hyphens:none;line-height:1.5;overflow:auto;padding:0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;white-space:pre;word-break:normal;word-spacing:normal}.code-multiline{font-size:1.125rem;margin:30px 0!important;padding:20px 30px!important}.code-inline{background:#d7e4ef;border-radius:5px;font-family:monospace;padding:2px 4px;white-space:pre-wrap}.code-inline,.token.cdata,.token.class-name,.token.delimiter,.token.doctype,.token.function,.token.function-name,.token.inserted,.token.operator,.token.prolog,.token.property,.token.punctuation,.token.selector{color:#07162f}.token.atrule,.token.attr-name,.token.builtin,.token.constant,.token.deleted,.token.important,.token.keyword,.token.namespace,.token.symbol,.token.tag,.token.variable{color:#eb5050}.token.attr-value,.token.boolean,.token.char,.token.entity,.token.number,.token.regex,.token.string,.token.url{color:#294262}.token.block-comment,.token.block-comment *,.token.comment,.token.comment *{border:none;color:#616161!important}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.content{background:#d7e4ef;display:initial}img,video{display:block;margin:35px auto;max-width:100%}figure{margin-bottom:50px}figure img{display:block;margin:0 auto 20px;max-width:100%}figcaption{display:flex;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:600px}figcaption a{border:none}figcaption a,figcaption a:active,figcaption a:focus,figcaption a:hover{color:#07162f}.figure__credits{padding-left:30px;position:relative}.figure__credits:before{background-color:#07162f;content:"";height:1px;left:8px;position:absolute;top:50%;transform:translateY(-50%);width:12px}p{margin:0 0 35px}.h1,.h2,.h3,.h4,.h5,.h6{display:block}.h1,h1{font-size:4.5rem;font-weight:400;line-height:1.25;margin:75px 0 35px}.h1,.h1 *,h1,h1 *{font-family:"DM Serif Display"}.h1 span,h1 span{color:#eb5050;display:block;font-family:Outfit Semi Bold;font-size:3.3125rem}.h1 strong,h1 strong{color:#eb5050}.h2,h2{font-family:Outfit Semi Bold;font-size:2.25rem;font-weight:400;line-height:1.3;margin:30px 0}.h3,h3{font-size:1.75rem;line-height:1.7;margin:30px 0 23px}.h3,.h4,.h5,.h6,h3,h4,h5,h6{color:#eb5050;font-family:Outfit Semi Bold;font-weight:400}.h4,.h5,.h6,h4,h5,h6{font-size:1.25rem;line-height:2.4;margin:23px 0}.h2--large{font-family:"DM Serif Display";font-size:4.5rem;font-weight:400;line-height:1.2}.h2--large>span{display:block;font-size:1.75rem;line-height:1.8}.h2--large>span,.h3--small{color:#eb5050;font-family:Outfit Semi Bold}.h3--small{font-size:1rem;font-weight:400;line-height:1.7;margin-bottom:0}.h3--dark{color:#07162f;font-family:Outfit Semi Bold;font-size:1.75rem;margin-top:0}.image-title{margin:0 0 25px}.image-title img{height:55px;margin:0 0 15px}.image-title__content{color:#07162f;font-family:Outfit Semi Bold;font-size:1.5rem;line-height:1.3;margin:0}.image-title--light .image-title__content{color:#fff}.case-study__title{margin-bottom:40px!important}.anchor-title{scroll-margin-top:130px}.anchor-title a{text-decoration:none}.anchor-title a:after{bottom:-10px;color:#294262;content:"#";left:10px;opacity:0;position:relative;transform:translateY(-10px);transition:opacity .15s ease-in,bottom .15s ease-in}.anchor-title a:active:after,.anchor-title a:focus:after,.anchor-title a:hover:after{bottom:0;opacity:1}@media (max-width:995px){.h1,h1{font-size:3rem;margin:15px 0 30px}.h2,.h3,h2,h3{font-size:1.5rem}.h2--large{font-size:2.25rem}.h3--dark{font-size:1.5rem}.h2--large>span,.h2>span{font-size:1.25rem}.case-study__title{font-size:2.25rem}.anchor-title{scroll-margin-top:50px}}@media (max-width:380px){.h1,h1{font-size:2.1875rem}}ul{list-style:none;margin:35px 0;padding:0}ul li{margin-bottom:3px;padding-left:30px;position:relative}ul li:last-of-type{margin-bottom:0}ul li:after,ul li:before{height:16px;position:absolute;top:4px;width:16px}ul li:before{background:#d7e4ef;border-radius:50%;content:"";left:0}ul li:after{align-items:center;color:#07162f;content:"\e902";display:flex;font-family:icomoon;font-size:.4375rem;justify-content:center;left:1px}.screen-reader{height:1px;left:-10000px;overflow:hidden;position:absolute;top:auto;width:1px}.page-home main{padding-bottom:0}.home-services>p{margin-bottom:100px;max-width:690px}.home-ecosystem{background:url(/rix/pr/120/build/images/waves.be5ec2dc.svg) no-repeat;background-position:50%;background-size:1650px;position:relative}.home-ecosystem:before{background:linear-gradient(180deg,#fff 40%,hsla(0,0%,100%,.5) 70%,hsla(0,0%,100%,0));content:"";height:200px;left:0;position:absolute;top:0;width:100%;z-index:0}.home-ecosystem h2{position:relative;z-index:1}.home-clients{background:#fff;margin-left:0;padding-top:117px}@media (max-width:760px){.home-ecosystem{background-position:top;background-size:105%}.home-ecosystem:after,.home-ecosystem:before{display:none}}.page-article main{background-image:none;padding-bottom:75px}.page-article h2:first-of-type{margin-top:0;padding-top:0}.page-article .alert{margin:0 0 40px}.page-blog main{background-image:none}.page-blog .content{padding-bottom:50px}.page-blog .content ul>li:first-of-type{border:1px solid #99b7d1}.page-blog .content ul>li:after,.page-blog .content ul>li:before{content:none!important}.page-blog .miniature:nth-child(3n+1),.page-blog .miniature:nth-child(3n+3){margin-left:20px;margin-right:20px}.page-blog .miniature:nth-child(3n+5),.page-blog .miniature:nth-child(5){margin-left:0}.page-blog .miniature:nth-child(3n+7),.page-blog .miniature:nth-child(7){margin-right:0}@media (max-width:1440px){.page-blog .miniature:nth-child(2n+2),.page-blog .miniature:nth-child(3n+5),.page-blog .miniature:nth-child(3n+7),.page-blog .miniature:nth-child(5),.page-blog .miniature:nth-child(7),.page-blog .miniature:nth-child(odd){margin-left:20px;margin-right:20px}.page-blog .miniature:nth-child(2n+5),.page-blog .miniature:nth-child(5){margin-left:0}.page-blog .miniature:nth-child(2n+6),.page-blog .miniature:nth-child(6){margin-right:0}}@media (max-width:1280px){.sliding-button--mobile{border-top:1px solid #99b7d1!important}}.page-casebook main{background-image:none}.page-casebook .h3{margin-bottom:20px}@media (max-width:995px){.page-casebook .content{padding-bottom:50px}}.page-case-study main{background-image:none}.page-case-study .beveled-wrapper__gradient .content{padding-bottom:55px;position:relative}.page-case-study .beveled-wrapper__gradient .content ul{margin-top:0}.page-case-study .beveled-wrapper__gradient .content figure{margin-left:-125px}.page-case-study .beveled-wrapper__gradient .content figure img{margin:0 auto 20px}.page-case-study .beveled-wrapper__gradient .content figure figcaption{text-align:center}.page-case-study .beveled-wrapper__gradient .case-study__header{width:50%}.page-case-study .beveled-wrapper__gradient .case-study__header ul>li{padding-left:0}.page-case-study .beveled-wrapper__gradient .case-study__header ul>li h3{margin-bottom:0}.page-case-study .beveled-wrapper__gradient .case-study__header ul>li:after,.page-case-study .beveled-wrapper__gradient .case-study__header ul>li:before{content:none}.page-case-study .beveled-wrapper__gradient .case-study__image{height:743px}.page-case-study iframe{margin:0 auto}@media (max-width:1220px){.page-case-study .beveled-wrapper__gradient .case-study__header{width:100%}}@media (max-width:995px){.page-case-study .beveled-wrapper__gradient .content figure{margin:0}}.page-services .miniature__content h3{color:#07162f;margin:0 0 29px}.page-services__images{border:1px solid #99b7d1;border-top:none;display:flex;height:125px}.page-services__images>span{align-items:center;background-color:#fff;border-right:1px solid #99b7d1;display:flex;flex:1;justify-content:center;padding:20px}.page-services__images>span:last-of-type{border-right:none}.page-services__images>span img{max-height:100%}.page-services__content{background:#fff;border:1px solid #99b7d1;margin:60px 0 0;padding:0 80px 70px}.page-services__content h3{color:#07162f}.page-services__content img{margin:0}@media (max-width:760px){.page-services .h3,.page-services h3{font-size:1.5rem}.page-services__content{padding:0 25px}.page-services__content img{width:60px}}.page-contact main{background-position:top;background-size:cover}.page-contact h1 span{display:block}.page-legals h2:first-of-type{margin:0}.page-error main{background-position:top;background-size:cover}.error__title span{color:#eb5050;display:block;font-family:Outfit Semi Bold;font-size:3.3125rem}.error__action{margin:35px 0 0}.error__action .button{margin-right:35px}.error__action .button:last-of-type{margin:0}@media (max-width:1280px){.page-error main{background-image:none}.page-error .error{align-items:center;display:flex;flex-direction:column;text-align:center}}@media (max-width:995px){.page-error .error__action{display:flex;flex-direction:column}.page-error .error__action .button{margin:0 0 35px}}.page-signature main{background-image:none}.page-glossary .banner{height:1550px}.page-glossary main{background-image:none}.page-glossary .glossary-logo{margin:0 auto 50px;max-width:400px}.page-glossary .content-links{margin-top:300px}@media (max-width:1220px){.page-glossary .content-links{margin-top:100px}} \ No newline at end of file diff --git a/pr/120/build/entrypoints.json b/pr/120/build/entrypoints.json index 5c28b538..72474d7f 100644 --- a/pr/120/build/entrypoints.json +++ b/pr/120/build/entrypoints.json @@ -7,7 +7,7 @@ "/rix/pr/120/build/app.e999eb99.js" ], "css": [ - "/rix/pr/120/build/305.dbfca553.css" + "/rix/pr/120/build/305.10d2ad32.css" ] }, "style": { @@ -15,7 +15,7 @@ "/rix/pr/120/build/runtime.1f38ba08.js" ], "css": [ - "/rix/pr/120/build/305.dbfca553.css" + "/rix/pr/120/build/305.10d2ad32.css" ] } } diff --git a/pr/120/build/images/services/ansible.4e8abd95.svg b/pr/120/build/images/services/ansible.4e8abd95.svg new file mode 100644 index 00000000..07a76db8 --- /dev/null +++ b/pr/120/build/images/services/ansible.4e8abd95.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/pr/120/build/manifest.json b/pr/120/build/manifest.json index 4df9ab99..3ff746cc 100644 --- a/pr/120/build/manifest.json +++ b/pr/120/build/manifest.json @@ -2,7 +2,7 @@ "build/app.js": "/rix/pr/120/build/app.e999eb99.js", "build/runtime.js": "/rix/pr/120/build/runtime.1f38ba08.js", "build/70.671fda9c.js": "/rix/pr/120/build/70.671fda9c.js", - "build/305.dbfca553.css": "/rix/pr/120/build/305.dbfca553.css", + "build/305.10d2ad32.css": "/rix/pr/120/build/305.10d2ad32.css", "build/images/background.jpg": "/rix/pr/120/build/images/background.fe096fd5.jpg", "build/images/backgrounds/background.jpg": "/rix/pr/120/build/images/backgrounds/background.fe096fd5.jpg", "build/images/backgrounds/banners/banner-home.webp": "/rix/pr/120/build/images/backgrounds/banners/banner-home.e928350e.webp", @@ -62,6 +62,7 @@ "build/images/home/clients/panneau-pocket.png": "/rix/pr/120/build/images/home/clients/panneau-pocket.3fa1b5a9.png", "build/images/services/sovereignty.svg": "/rix/pr/120/build/images/services/sovereignty.bf59cbe6.svg", "build/images/services/ovh-cloud.svg": "/rix/pr/120/build/images/services/ovh-cloud.c7447829.svg", + "build/images/services/ansible.svg": "/rix/pr/120/build/images/services/ansible.4e8abd95.svg", "build/images/services/aws.svg": "/rix/pr/120/build/images/services/aws.4d8ec02e.svg", "build/images/about/values/anticipate.svg": "/rix/pr/120/build/images/about/values/anticipate.82d561d2.svg", "build/images/about/values/support.svg": "/rix/pr/120/build/images/about/values/support.e839a854.svg", diff --git a/pr/120/confidentialite/index.html b/pr/120/confidentialite/index.html index d2ba9eac..55c68ed4 100644 --- a/pr/120/confidentialite/index.html +++ b/pr/120/confidentialite/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/contact/index.html b/pr/120/contact/index.html index a9359b46..f62245e3 100644 --- a/pr/120/contact/index.html +++ b/pr/120/contact/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/etudes-de-cas/index.html b/pr/120/etudes-de-cas/index.html index 707b67d7..0a683b84 100644 --- a/pr/120/etudes-de-cas/index.html +++ b/pr/120/etudes-de-cas/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/etudes-de-cas/musique-music/index.html b/pr/120/etudes-de-cas/musique-music/index.html index 1edfc81b..7c2be94e 100644 --- a/pr/120/etudes-de-cas/musique-music/index.html +++ b/pr/120/etudes-de-cas/musique-music/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/etudes-de-cas/panneau-pocket/index.html b/pr/120/etudes-de-cas/panneau-pocket/index.html index bdc5add7..f014f26a 100644 --- a/pr/120/etudes-de-cas/panneau-pocket/index.html +++ b/pr/120/etudes-de-cas/panneau-pocket/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/glossaire/ansible/index.html b/pr/120/glossaire/ansible/index.html new file mode 100644 index 00000000..647c006e --- /dev/null +++ b/pr/120/glossaire/ansible/index.html @@ -0,0 +1,430 @@ + + + + + + + Ansible + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + +
    +
    +
    +
    + + +

    Ansible est une plateforme open-source de gestion de configuration et d'automatisation des tâches. +Elle permet aux administrateurs système mais aussi aux développeurs de définir des configurations, des déploiements et des actions à effectuer sur des serveurs et des infrastructures de manière reproductible.

    +

    Ansible se distingue par sa simplicité d'utilisation grâce à sa syntaxe déclarative en YAML, qui décrit l'état souhaité du système. Il n'exige aucune installation d'agent sur les machines cibles, fonctionne via SSH ou d'autres protocoles, et offre une grande flexibilité pour automatiser des opérations complexes, la gestion de configurations, et le déploiement d'applications.

    + + + + +
    +
    +
    +
    + + + + + + diff --git a/pr/120/glossaire/aws/index.html b/pr/120/glossaire/aws/index.html index 1f30600b..d5c05a48 100644 --- a/pr/120/glossaire/aws/index.html +++ b/pr/120/glossaire/aws/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + diff --git a/pr/120/glossaire/index.html b/pr/120/glossaire/index.html index 88a0a75b..4ffe2d60 100644 --- a/pr/120/glossaire/index.html +++ b/pr/120/glossaire/index.html @@ -45,7 +45,7 @@ document.querySelector('html').classList.remove('no-js'); - + @@ -183,6 +183,11 @@

    Glossaire /

    AWS + +
  • + + Ansible +
    • @@ -191,56 +196,53 @@

      Glossaire /

      OVH Cloud -
    - +
      +

    Jetez un oeil à notre blog

    Pour aller encore plus loin dans le quotidien d'un projet web, en apprendre plus sur notre métier, sur nos retours d'expérience.