diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..f6cb8ad
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1 @@
+BasedOnStyle: Google
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..e5dd176
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,15 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_line = true
+charset = utf-8
+
+[*.{sh,bash}]
+indent_style = space
+indent_size = 2
+switch_case_indent = true
+
+[*.{html,css,js,json}]
+indent_style = space
+indent_size = 2
diff --git a/docs/misc/captura-pantalla-foros-google.md b/docs/misc/captura-pantalla-foros-google.md
new file mode 100644
index 0000000..0ab30f1
--- /dev/null
+++ b/docs/misc/captura-pantalla-foros-google.md
@@ -0,0 +1,68 @@
+---
+template: screenshotpage.html
+---
+
+# Cómo insertar una captura de pantalla en los Foros de Google
+Esta guía muestra cómo capturar una captura de pantalla y subirla a los Foros de
+los Productos de Google:
+
+## Capturar la pantalla
+
+=== "Windows 8/10"
+    1. Pulsa la tecla ++"Impr Pant"++, situada en la parte superior derecha de
+    tu teclado, para guardar en el cortapapeles lo que se muestra en la
+    pantalla.
+    2. Ahora abriremos Paint: para ello pulsa la combinación de teclas
+    <kbd>![Windows](https://labs.avm99963.com/chrome/img/windowskey.jpg)</kbd>
+    \+ <kbd>Q</kbd> e introduce **Paint** en el campo de búsqueda. Selecciona el
+    resultado "Paint".
+    3. En Paint pulsa la combinación de teclas ++ctrl+v++ para pegar la captura.
+    4. Haz clic en el menú **Archivo**, **Guardar** (en la parte superior de la
+    pantalla).
+    5. En el diálogo que aparece selecciona la carpeta donde quieres guardar la
+    captura y cambia el nombre al que tú prefieras. Seguidamente haz clic en el
+    botón **Guardar**.
+    6. Ahora ya puedes cerrar la ventana de Paint.
+
+=== "Windows 7/Vista/XP"
+    1. Pulsa la tecla ++"Impr Pant"++, situada en la parte superior derecha de
+    tu teclado, para guardar en el cortapapeles lo que se muestra en la
+    pantalla.
+    2. Ahora abriremos Paint: para ello haz clic en el menú **Inicio**,
+    **Todos los programas**, **Accesorios** y **Paint**.
+    3. En Paint pulsa la combinación de teclas ++ctrl+v++ para pegar la captura.
+    4. Haz clic en el menú **Archivo**, **Guardar** (en la parte superior de la
+    pantalla).
+    5. En el diálogo que aparece selecciona la carpeta donde quieres guardar la
+    captura y cambia el nombre al que tú prefieras. Seguidamente haz clic en el
+    botón **Guardar**.
+    6. Ahora ya puedes cerrar la ventana de Paint.
+
+=== "Mac"
+    1. Pulsa la combinación de teclas ++cmd+shift+3++ para capturar toda la
+    pantalla o pulsa ++cmd+shift+4++ y arrastra el cursor para capturar una
+    región específica de la pantalla.
+    2. La captura se ha guardado en el escritorio.
+
+=== "Linux"
+    Cada distribución Linux funciona de una manera diferente, pero puedes usar
+    Google para aprender cómo hacer una:
+    \[[captura pantalla _&lt;distribución linux&gt;_](http://www.google.com/?q=captura+pantalla+<distribución>)\]
+
+=== "Chrome OS"
+    Para hacer capturas de pantalla en una Chromebook puedes usar las siguientes
+    combinaciones de teclas:
+
+    | Combinación de teclas | Descripción |
+    | --------------------- | ----------- |
+    | ++ctrl++ + <img title='tecla de cambio de ventana' src='https://www.google.com/help/hc/images/chromeos_page_flipper.png' style='vertical-align: middle;'> | Hacer una captura de pantalla de toda la pantalla |
+    | ++ctrl++ + ++shift++ + <img title='tecla de cambio de ventana' src='https://www.google.com/help/hc/images/chromeos_page_flipper.png' style='vertical-align: middle;'> | Hacer una captura de pantalla parcial |
+
+    La captura de pantalla se guarda en la carpeta descargas.
+
+## Insertar la captura de pantalla
+Para insertar la captura de pantalla, haz clic en el botón
+<i class="material-icons">attach_file</i> que hay en la parte inferior del
+editor de texto:
+
+![Captura de pantalla del editor de texto](https://labs.avm99963.com/chrome/img/tailwind.png)
diff --git a/mkdocs.yml b/mkdocs.yml
index ecae419..d86e8e6 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -6,6 +6,7 @@
   language: 'es'
   icon:
     logo: material/help-box
+  custom_dir: overrides
 repo_name: avm99963/support.avm99963.com
 repo_url: https://github.com/avm99963/support.avm99963.com
 extra_css: ["css/styles.css"]
@@ -42,6 +43,8 @@
       - 'Un curso rápido sobre diagnóstico de problemas con chrome://net-internals': 'chrome/desarrolladores/curso-diagnostico-net-internals.md'
   - 'Gmail':
     - 'Cambiar el idioma de Gmail': 'gmail/cambiar-idioma.md'
+  - 'Miscelánea':
+    - 'Cómo insertar una captura de pantalla en los Foros de Google': 'misc/captura-pantalla-foros-google.md'
 extra:
   social:
     - icon: material/web
diff --git a/overrides/assets/javascripts/screenshot_page.js b/overrides/assets/javascripts/screenshot_page.js
new file mode 100644
index 0000000..4ef3e73
--- /dev/null
+++ b/overrides/assets/javascripts/screenshot_page.js
@@ -0,0 +1,120 @@
+// Detect the current OS
+function detectOS() {
+  var linuxRegex = /Linux/i;
+  var winRegex = /Win/i;
+  var winNT7 = /NT 7/i;
+  var winNT6 = /NT 6/i;
+  var macRegex = /Mac/i;
+  var crosRegex = /CrOS/i;
+
+  var uaPromise = null;
+  if (navigator.userAgentData) {
+    uaPromise = navigator.userAgentData
+                    .getHighEntropyValues(['platform', 'platformVersion'])
+                    .then(ua => {
+                      return ua?.platform + ' ' + ua?.platformVersion;
+                    });
+  } else {
+    uaPromise = new Promise((res, rej) => {
+      res(navigator.userAgent ?? '');
+    });
+  }
+
+  return uaPromise.then(ua => {
+    if (linuxRegex.test(ua)) return 'linux';
+    if (winRegex.test(ua)) {
+      if (winNT7.test(ua) || winNT6.test(ua)) return 'win_7_or_less';
+      return 'win_latest';
+    }
+    if (macRegex.test(ua)) return 'mac';
+    if (crosRegex.test(ua)) return 'cros';
+    return null;
+  });
+}
+
+// Get the OS from the 'os' GET parameter if set
+function getOSGETParam() {
+  var sp = new URLSearchParams(location.search);
+  if (sp.has('os')) {
+    var os = sp.get('os');
+    switch (os) {
+      case 'win':
+        switch (sp.get('v')) {
+          case '7-':
+            return 'win_7_or_less';
+
+          case 'latest':
+          default:
+            return 'win_latest';
+        }
+        break;
+      case 'linux':
+        return 'linux';
+
+      case 'mac':
+        return 'mac';
+
+      case 'cros':
+        return 'cros';
+
+      default:
+        console.warn('Requested OS "' + os + '" unknown.');
+    }
+  }
+
+  return null;
+}
+
+// Get the target OS
+function getOS() {
+  // See whether a OS is being requested via a GET parameter
+  var os = getOSGETParam();
+  if (os !== null)
+    return new Promise((res, rej) => {
+      res(os);
+    });
+
+  // Otherwise, detect the browser
+  return detectOS();
+}
+
+// Transform the OS into the label id
+function getOSLabel() {
+  return getOS().then(os => {
+    switch (os) {
+      case 'win_latest':
+        return '1';
+
+      case 'win_7_or_less':
+        return '2';
+
+      case 'mac':
+        return '3';
+
+      case 'linux':
+        return '4';
+
+      case 'cros':
+        return '5';
+
+      default:
+        return null;
+    }
+  });
+}
+
+// Open the section corresponding to the target OS
+function openAppropriateSection() {
+  var tabs = document.querySelector('.md-content .tabbed-set');
+
+  getOSLabel().then(labelId => {
+    if (labelId === null) return;
+
+    var label = tabs.querySelector('label[for="__tabbed_1_' + labelId + '"]');
+    label.click();
+  });
+}
+
+window.addEventListener('load', _ => {
+  openAppropriateSection();
+});
diff --git a/overrides/screenshotpage.html b/overrides/screenshotpage.html
new file mode 100644
index 0000000..bca2e75
--- /dev/null
+++ b/overrides/screenshotpage.html
@@ -0,0 +1,5 @@
+{% extends "base.html" %}
+
+{% block scripts %}
+  <script src="{{ 'assets/javascripts/screenshot_page.js' | url }}"></script>
+{% endblock %}
