diff --git a/.filenameignore b/.filenameignore new file mode 100644 index 0000000..eccf444 --- /dev/null +++ b/.filenameignore @@ -0,0 +1,20 @@ +# Paths to ignore for filename/path validation checks. +# Patterns use fnmatch syntax and are relative to repo root. + +_site/** +.quarto/** +.github/** +_extensions/ +assets/bootstrap-grid.min.css + +# Common documentation files to ignore +LICENSE-CODE.md +LICENSE.md +LICENSE +README.md +README +README-template.md +CITATION.cff +CITATION-template.cff +_quarto.yml +404.qmd \ No newline at end of file diff --git a/.github/workflows/citation-check.yml b/.github/workflows/citation-check.yml new file mode 100644 index 0000000..db7b4eb --- /dev/null +++ b/.github/workflows/citation-check.yml @@ -0,0 +1,21 @@ +on: + workflow_dispatch: + push: + branches: [main] + paths: + - CITATION.cff + +name: Check CITATION.cff is Valid +jobs: + Validate-CITATION-cff: + runs-on: ubuntu-latest + name: Validate CITATION.cff + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate CITATION.cff + uses: dieghernan/cff-validator@v3 diff --git a/.github/workflows/filename-check.yml b/.github/workflows/filename-check.yml new file mode 100644 index 0000000..7fc2971 --- /dev/null +++ b/.github/workflows/filename-check.yml @@ -0,0 +1,22 @@ +name: Filename Checks + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + +jobs: + check-names: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Check filenames + uses: NeuroShepherd/check-filenames-action@v1 + with: + max-path-length: "65" + max-depth: "2" + file-types: "html,md,qmd,css,scss,rmd,pdf,png,jpg,svg,yml" + ignore-file: ".filenameignore" + dotfile-mode: "strip-leading-dot" \ No newline at end of file diff --git a/.github/workflows/link-checker.yml b/.github/workflows/link-checker.yml new file mode 100644 index 0000000..7fa9f73 --- /dev/null +++ b/.github/workflows/link-checker.yml @@ -0,0 +1,44 @@ +name: Link Checker + +on: + schedule: + - cron: '0 0 1 * *' + workflow_dispatch: + +jobs: + check-links: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Check links + id: check + uses: filiph/linkcheck@master + continue-on-error: true + with: + arguments: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/ + + - name: Create issue on broken links + if: steps.check.outputs.exit_code != '0' + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + const report = fs.readFileSync('log', 'utf8'); + + const { data: issues } = await github.rest.issues.listForRepo({ + owner: context.repo.owner, + repo: context.repo.repo, + state: 'open', + labels: 'link-checker' + }); + + if (issues.length === 0) { + await github.rest.issues.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: '🔗 Broken Links Found on Site', + body: `The monthly link checker detected broken links.\n\n${report}`, + labels: ['link-checker'] + }); + } \ No newline at end of file diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..a1937d4 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,106 @@ +on: + workflow_dispatch: + schedule: + - cron: "0 23 * * 0" + push: + branches: [main] + +name: Render Quarto Site + +jobs: + quarto-publish: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Quarto + uses: quarto-dev/quarto-actions/setup@v2 + with: + tinytex: true + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt install -y \ + libcurl4-openssl-dev \ + libfontconfig1-dev \ + libssl-dev \ + libxml2-dev \ + libpng-dev \ + libjpeg-dev \ + libtiff-dev \ + libcairo2-dev \ + libxt-dev \ + libfreetype6-dev \ + libharfbuzz-dev \ + libfribidi-dev \ + zlib1g-dev \ + libv8-dev \ + libglpk-dev \ + librsvg2-bin + + - name: Install R with renv + uses: r-lib/actions/setup-r@v2 + with: + r-version: renv + if: ${{ hashFiles('renv.lock') != '' }} + + - name: Install R Dependencies with renv + uses: r-lib/actions/setup-renv@v2 + with: + cache-version: 1 + if: ${{ hashFiles('renv.lock') != '' }} + + - name: Install R latest + uses: r-lib/actions/setup-r@v2 + if: ${{ hashFiles('renv.lock') == '' }} + + - name: Set R library path (no lockfile) + run: echo "R_LIBS_USER=$HOME/.local/lib/R/site-library" >> "$GITHUB_ENV" + if: ${{ hashFiles('renv.lock') == '' }} + + - name: Cache R library (no lockfile) + uses: actions/cache@v4 + with: + path: ~/.local/lib/R/site-library + key: ${{ runner.os }}-r-nolock-${{ hashFiles('**/*.R', '**/*.Rmd', '**/*.qmd', '_quarto.yml') }} + restore-keys: | + ${{ runner.os }}-r-nolock- + if: ${{ hashFiles('renv.lock') == '' }} + + - name: Install R latest dependencies + run: | + lib <- Sys.getenv("R_LIBS_USER") + if (nzchar(lib)) { + dir.create(lib, recursive = TRUE, showWarnings = FALSE) + .libPaths(c(lib, .libPaths())) + } + install.packages("renv") + install.packages("rmarkdown") + install.packages("yaml") + deps <- unique(stats::na.omit(renv::dependencies()$Package)) + if (length(deps) > 0) install.packages(deps) + shell: Rscript {0} + if: ${{ hashFiles('renv.lock') == '' }} + + - name: Ensure Quarto R runtime packages + run: | + lib <- Sys.getenv("R_LIBS_USER") + if (nzchar(lib)) { + dir.create(lib, recursive = TRUE, showWarnings = FALSE) + .libPaths(c(lib, .libPaths())) + } + pkgs <- c("knitr", "rmarkdown") + missing <- pkgs[!vapply(pkgs, requireNamespace, logical(1), quietly = TRUE)] + if (length(missing) > 0) install.packages(missing) + shell: Rscript {0} + + - name: Render and Publish + uses: quarto-dev/quarto-actions/publish@v2 + with: + target: gh-pages + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index ea88852..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,41 +0,0 @@ -on: - workflow_dispatch: - push: - branches: [main] - -name: Quarto Publish - -jobs: - build-deploy: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Check out repository - uses: actions/checkout@v4 - - - name: Set up Quarto - uses: quarto-dev/quarto-actions/setup@v2 - - - name: Install R - uses: r-lib/actions/setup-r@v2 - with: - r-version: '4.5.3' - - - name: Install R Packages - uses: r-lib/actions/setup-r-dependencies@v2 - with: - cache-version: 1 - packages: | - any::rmarkdown - any::dplyr - any::ggplot2 - any::plotly - any::sessioninfo - - - name: Render and Publish - uses: quarto-dev/quarto-actions/publish@v2 - with: - target: gh-pages - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/style.yaml b/.github/workflows/style.yaml new file mode 100644 index 0000000..c8ef65f --- /dev/null +++ b/.github/workflows/style.yaml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + +name: Air Formatting + +permissions: + contents: write + +jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Install Air + uses: posit-dev/setup-air@v1 + + - name: Format + run: air format . + + - name: Commit and push changes + uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_message: "Style code (Air)" diff --git a/.github/workflows/update-extension.yml b/.github/workflows/update-extension.yml new file mode 100644 index 0000000..4e52ef7 --- /dev/null +++ b/.github/workflows/update-extension.yml @@ -0,0 +1,32 @@ +name: Update Tutorial Template Extension + +on: + schedule: + - cron: "0 0 2 * *" + workflow_dispatch: + +permissions: read-all + +jobs: + update-downstream-tutorials: + # prevent action from running in actual extension repo--else, recursive installations + # only users of the extension should have these auto-updates + if: github.repository != 'lmu-osc/tutorial-template' + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout repo + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Setup Quarto + uses: quarto-dev/quarto-actions/setup@v2 + + - name: Update tutorial-template extension + run: quarto update lmu-osc/tutorial-template --no-prompt + + - uses: stefanzweifel/git-auto-commit-action@v7 + with: + commit_message: "Update tutorial-template extension (GHA)" diff --git a/.gitignore b/.gitignore index 330a18e..34de807 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,12 @@ rsconnect/ .httr-oauth .quarto _site/ +**_files/ + +**/*.quarto_ipynb + +# ignore posi assistant settings +.posit/assistant + +# ignore individual file +plot-trait-evolution.html \ No newline at end of file diff --git a/404.qmd b/404.qmd new file mode 100644 index 0000000..515733c --- /dev/null +++ b/404.qmd @@ -0,0 +1,14 @@ +--- +title: Uh-oh, looks like the page is missing! +description: The page you are looking for cannot be found 😟 +--- + +The page you are looking for either does not exist or has been moved. Please check the URL and try again. If you believe this is an error, please contact the website administrator for assistance. + +Note: many pages within our old tutorials have been moved to new locations as part of standardization efforts. It's likely the page you are looking for has been moved to a new location within the site. + + diff --git a/CITATION.cff b/CITATION.cff index e43be6e..19cf27d 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -6,9 +6,21 @@ authors: orcid: "https://orcid.org/0000-0002-2378-4915" affiliation: - name: "University of Sheffield" - ror: " https://ror.org/05krs5044" + ror: "https://ror.org/05krs5044" +- family-names: "Ihle" + given-names: "Malika" + orcid: "https://orcid.org/0000-0002-9543-9310" + affiliation: + - name: "LMU Open Science Center" + ror: "https://ror.org/029e6qe04" +- family-names: "Kenny" + given-names: "Adam" + orcid: "https://orcid.org/0000-0002-1316-7382" + affiliation: + - name: "University of Oxford" + ror: "https://ror.org/052gg0110" title: "Collaborative coding with GitHub and RStudio" -version: 0.1.0 +version: 0.2.0 doi: "DOI_HERE_AFTER_GENERATED" date-released: 2024-01-15 repository-code: "https://github.com/lmu-osc/Collaborative-RStudio-GitHub" @@ -26,4 +38,4 @@ preferred-citation: ror: "https://ror.org/029e6qe04" repository-code: "https://github.com/lmu-osc/Collaborative-RStudio-GitHub" url: "https://lmu-osc.github.io/Collaborative-RStudio-GitHub/" - type: "book" \ No newline at end of file + type: "book" diff --git a/Collaborative-RStudio-GitHub.Rproj b/Collaborative-RStudio-GitHub.Rproj index d64e28b..9b8c091 100644 --- a/Collaborative-RStudio-GitHub.Rproj +++ b/Collaborative-RStudio-GitHub.Rproj @@ -1,4 +1,5 @@ Version: 1.0 +ProjectId: e6cff1b6-d495-44c0-9f43-33511fbae88b RestoreWorkspace: Default SaveWorkspace: Default diff --git a/README.md b/README.md index 79b7fa7..e83c6ea 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ In this session, you will * observe the outcome of all contributions merged by your collaborator * **pull the upstream repository into your fork** (i.e. update your fork to reflect all the changes that happened in your collaborator's original repository) - +
In this example, the file you will contribute is required to simulate the evolutionary trajectory of an imaginary bird species’ body size. We will use RStudio and GitHub to collate all species files and plot them all up together at the end. We will also discover the skull and beak shapes associated with each species you contributed (after they 'evolved' through a simple brownian motion model which assumes steps to progress completely at random). diff --git a/_extensions/lmu-osc/tutorial-template/_extension.yml b/_extensions/lmu-osc/tutorial-template/_extension.yml new file mode 100644 index 0000000..b1fce78 --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/_extension.yml @@ -0,0 +1,48 @@ +title: tutorial-template +author: Patrick Callahan +description: A template website for the LMU Open Science Center's tutorials +version: 1.0.4 +license: CC0-1.0 +quarto-required: ">=1.9.0" +contributes: + metadata: + project: + brand: _extensions/lmu-osc/osc-brand/brand.yml + project: + project: + type: website + website: + search: + location: sidebar + repo-actions: [edit, source, issue] + back-to-top-navigation: true + page-navigation: true + # favicon: Quarto detects the "small" image from the brand file automatically + reader-mode: true + navbar: + background: primary + logo: small + format: tutorial-template-html+tutorial + formats: + html+tutorial: + theme: + light: + [flatly, brand, _extensions/lmu-osc/osc-brand/lmu-osc-custom.scss] + dark: [darkly, brand, _extensions/lmu-osc/osc-brand/lmu-osc-custom.scss] + toc: true + toc-title: " " + code-tools: true + code-overflow: wrap + code-copy: true + code-link: true + smooth-scroll: true + link-external-icon: true + link-external-newwindow: true + footnotes-hover: true + citations-hover: true + crossrefs-hover: true + grid: + sidebar-width: 300px + css: + - assets/bootstrap-grid.min.css + html+base: osc-brand-html diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/_extension.yml b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/_extension.yml new file mode 100644 index 0000000..2a863cd --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/_extension.yml @@ -0,0 +1,16 @@ +title: LMU Open Science Center Brand +author: Patrick Callahan +version: 1.0.2 +url: https://github.com/lmu-osc/osc-brand +description: LMU Open Science Center brand assets and default HTML format +license: MIT +quarto-required: ">=1.9.0" +contributes: + metadata: + project: + brand: brand.yml + formats: + html: + theme: + light: [flatly, brand, lmu-osc-custom.scss] + dark: [darkly, brand, lmu-osc-custom.scss] diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/brand.yml b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/brand.yml new file mode 100644 index 0000000..3dd6c6f --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/brand.yml @@ -0,0 +1,120 @@ +# minimal brand.yml enabling dark mode + +meta: + name: + full: LMU Open Science Center + short: OSC + link: + home: https://www.osc.lmu.de/ + github: https://github.com/lmu-osc + bluesky: https://bsky.app/profile/lmu-osc.bsky.social + description: | + Home of open science praxis at Ludwig-Maximilian UniversitĂ€t MĂŒnchen. + founded: 2019 + author: Pat Callahan + +# replace with your brand colors, logos, and typography! +color: + palette: + lmu-green: "#00883A" + lmu-black: "#232323" + lmu-white: "#FFF" + lmu-darkgrey: "#626468" + lmu-darkgray: "#626468" + lmu-middlegrey: "#C0C1C3" + lmu-middlegray: "#C0C1C3" + lmu-lightgrey: "#E6E6E7" + lmu-lightgray: "#E6E6E7" + lmu-lichtgrau: "#F5F5F5" + lmu-blue: "#0F1987" + lmu-cyan: "#009FE3" + lmu-violet: "#8C4091" + lmu-red: "#D71919" + lmu-orange: "#F18700" + background: + light: lmu-white + dark: lmu-black + foreground: + light: lmu-black + dark: lmu-white + primary: + light: lmu-green + dark: lmu-green + secondary: + light: lmu-black + dark: lmu-middlegray + tertiary: + light: lmu-blue + dark: lmu-violet + success: + light: lmu-cyan + dark: lmu-cyan + info: + light: lmu-violet + dark: lmu-violet + warning: + light: lmu-orange + dark: lmu-orange + danger: + light: lmu-red + dark: lmu-red + +logo: + images: + icon: + path: lmu-osc-favicon.jpg + alt: "LMU Open Science Center open book icon" + default: + path: lmu-osc-logo.svg + alt: "LMU Open Science Center logo" + dark: + path: lmu-osc-logo-dark.svg + alt: "LMU Open Science Center logo" + large: + path: lmu-osc-logo-large.jpg + alt: "LMU Open Science Center logo, large" + small: icon + medium: + light: default + dark: dark + large: + light: large + dark: large + +# https://www.lmu.de/de/die-lmu/struktur/zentrale-universitaetsverwaltung/presse-und-kommunikation-puk/lmu-brand-guide/designgrundsaetze/schrift/ +# Compatil is the official font, but license limited. Online content should use Roboto, and other software e.g. presentations use Arial +typography: + fonts: + - family: Roboto + source: google + - family: Arial + source: google + - family: Fira Code + source: google + base: + family: "Roboto, Arial" + # size: 1.1rem + # line-height: 1.65 + # weight: + # style: + headings: + family: "Roboto, Arial" + color: secondary + monospace: + family: "Fira Code" + # size: + # weight: + monospace-inline: + family: "Fira Code" + # color: + # background-color: + monospace-block: + family: "Fira Code" + # line-height: + # color: + # background-color: + # link: + # weight: + # color: + # background-color: + # decoration: diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-custom.scss b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-custom.scss new file mode 100644 index 0000000..dd0d58e --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-custom.scss @@ -0,0 +1,52 @@ +/*-- scss:defaults --*/ + + +// Brand palette fallbacks (used when brand.yml isn't loaded, e.g., individual file preview) +// When brand.yml IS loaded via project metadata, these !default values are overridden +// Ideally, this code can be removed in the future when/if the brand.yml file extends to +// previews of indidviudal files +$brand-lmu-green: #00883A !default; +$brand-lmu-black: #232323 !default; +$brand-lmu-white: #FFF !default; +$brand-lmu-darkgrey: #626468 !default; +$brand-lmu-darkgray: #626468 !default; +$brand-lmu-middlegrey: #C0C1C3 !default; +$brand-lmu-middlegray: #C0C1C3 !default; +$brand-lmu-lightgrey: #E6E6E7 !default; +$brand-lmu-lightgray: #E6E6E7 !default; +$brand-lmu-lichtgrau: #F5F5F5 !default; +$brand-lmu-blue: #0F1987 !default; +$brand-lmu-cyan: #009FE3 !default; +$brand-lmu-violet: #8C4091 !default; +$brand-lmu-red: #D71919 !default; +$brand-lmu-orange: #F18700 !default; + +/*-- scss:rules --*/ + + +#quarto-content +h1, #quarto-content h1[class], #quarto-content .h1[class], +h2, #quarto-content h2[class], #quarto-content .h2[class], +h3, #quarto-content h3[class], #quarto-content .h3[class] { + margin-top: 1.33rem; + margin-bottom: 0.75rem; +} + +#quarto-content +h4, #quarto-content h4[class], #quarto-content .h4[class], +h5, #quarto-content h5[class], #quarto-content .h5[class], +h6, #quarto-content h6[class], #quarto-content .h6[class] { + margin-top: 0.66rem; + margin-bottom: 0.5rem; +} + +#quarto-content +h2, #quarto-content h2[class], #quarto-content .h2[class] { + border-bottom: $brand-lmu-violet 2px solid; +} + +#quarto-content +h3, #quarto-content h3[class], #quarto-content .h3[class] { + border-bottom: $brand-lmu-violet 1.5px solid; + padding-bottom: 0.25rem; +} \ No newline at end of file diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-favicon.jpg b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-favicon.jpg new file mode 100644 index 0000000..a06a839 Binary files /dev/null and b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-favicon.jpg differ diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo-dark.svg b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo-dark.svg new file mode 100644 index 0000000..338367e --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo-dark.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo-large.jpg b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo-large.jpg new file mode 100644 index 0000000..25bfdcc Binary files /dev/null and b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo-large.jpg differ diff --git a/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo.svg b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo.svg new file mode 100644 index 0000000..e7b48ef --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/_extensions/lmu-osc/osc-brand/lmu-osc-logo.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_extensions/lmu-osc/tutorial-template/assets/bootstrap-grid.min.css b/_extensions/lmu-osc/tutorial-template/assets/bootstrap-grid.min.css new file mode 100644 index 0000000..82bb1bc --- /dev/null +++ b/_extensions/lmu-osc/tutorial-template/assets/bootstrap-grid.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap Grid v5.3.8 (https://getbootstrap.com/) + * Copyright 2011-2025 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/_quarto.yml b/_quarto.yml index 143ff4c..8bb4a8e 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -1,56 +1,75 @@ +# Begin Project project: - type: website - - + type: tutorial-template + render: + - "*.qmd" + - "!plot-trait-evolution.qmd" +# End Project +# Begin Website +repo-url: https://github.com/lmu-osc/Collaborative-RStudio-GitHub website: - title: "" + title: "Collaborative coding with GitHub and RStudio" page-footer: - center: "Copyright, 2024 Open Science Center at LMU Munich" border: false - search: - location: sidebar + center: © 2024 Anna Krystalli, Malika Ihle, Adam Kenny. Published by LMU Open Science Center. Licensed under CC BY-SA 4.0. repo-url: https://github.com/lmu-osc/Collaborative-RStudio-GitHub - repo-actions: [edit, issue] - page-navigation: true - favicon: assets/LMU-OSC_favicon.jpg - margin-header: | - ![](/assets/LMU-OSC_logo.jpg){width="175"} + navbar: + right: + - about.qmd left: - - href: index.md + - href: index.qmd + text: Home + tools: + - icon: github + menu: + - text: Source Code + href: https://github.com/lmu-osc/Collaborative-RStudio-GitHub + - text: Report a Bug + href: https://github.com/lmu-osc/Collaborative-RStudio-GitHub/issues + - icon: house-heart + url: https://www.osc.lmu.de/ sidebar: - style: docked + style: "docked" contents: - - text: "Home" - href: index.md + - text: "Overview" + href: index.qmd - section: "Tutorial" contents: - - href: fork.md + - href: fork/index.qmd text: "Fork a Repo" - - href: clone.md + - href: clone/index.qmd text: "Clone a Repo" - - href: commit.md + - href: commit/index.qmd text: "Commit to a Project" - - href: push.md + - href: push/index.qmd text: "Push Changes" - - href: pull-request.md + - href: pull-request/index.qmd text: "Pull Request" - - href: merge.md + - href: merge/index.qmd text: "Merge Changes" - - href: pull-upstream.md + - href: pull-upstream/index.qmd text: "Pull Upstream" +# End Website -format: - html: - theme: - - cosmo - - custom.scss - css: styles.css - toc: true - include-in-header: - - file: matomo-analytics.html +# Begin Includes +include-in-header: + - file: matomo-analytics.html +include-after-body: + - file: footer/footer.html +# End Includes +# Begin Format +format: + tutorial-template-html+tutorial: + css: + - footer/footer-style.css +# End Format +# Begin Editor +editor: source +# End Editor +bibliography: references.bib diff --git a/about.qmd b/about.qmd new file mode 100644 index 0000000..b52eead --- /dev/null +++ b/about.qmd @@ -0,0 +1,45 @@ +--- +title: "About" +citation: + type: "webpage" + title: "Collaborative coding with GitHub and RStudio" + container-title: "LMU Open Science Center" + url: https://lmu-osc.github.io/Collaborative-RStudio-GitHub/ + doi: "DOI HERE" +author: + - name: Anna Krystalli + roles: [conceptualization, funding acquisition, methodology, software, writing - original draft, writing - editing & review] + affiliation: + - name: University of Sheffield + ror: https://ror.org/05krs5044 + - name: Malika Ihle + roles: [project administration, supervision, writing - original draft, writing - editing & review] + affiliation: + - id: osc + name: LMU Open Science Center + ror: https://ror.org/029e6qe04 + isni: 000000041936973X + - name: Adam Kenny + roles: [software, writing - original draft, writing - editing & review] + affiliation: + - name: University of Oxford +google-scholar: true +--- + +## Contributors + +This site was authored by Anna Krystalli, Malika Ihle, and Adam Kenny. + +## Licenses + +The overall project is available under the [**CC BY-SA 4.0**](https://creativecommons.org/licenses/by-sa/4.0/) license found at [LICENSE](LICENSE.md); all code without any narrative text is also (at your option) available under the [**CC0 1.0 Universal**](https://creativecommons.org/publicdomain/zero/1.0/) license found at [LICENSE-CODE](LICENSE-CODE.md). + +Why two licenses? The CC BY-SA 4.0 license is for the content of the website, while the CC0 1.0 Universal license is for the code and configuration files. This is a common practice for websites that include code snippets and other content that may be reused in other projects, particularly because the CC BY-SA 4.0 license is not intended to be used with software. + +## Notes + +This tutorial was primarily written in 2024 using RStudio and GitHub. Major changes can be found at the website [https://lmu-osc.github.io/Collaborative-RStudio-GitHub/](https://lmu-osc.github.io/Collaborative-RStudio-GitHub/) for the most up-to-date information, and to confirm that our tutorial is not out-of-date. + +## Tutorial Template Quarto Extension + +This tutorial was written using the [`lmu-osc/tutorial-template`](https://github.com/lmu-osc/tutorial-template) Quarto extension [@callahan2026]. diff --git a/assets/files-tab.png b/assets/files-tab.png index d097a12..0c8e06b 100644 Binary files a/assets/files-tab.png and b/assets/files-tab.png differ diff --git a/assets/knit.png b/assets/knit.png deleted file mode 100755 index f3dea0b..0000000 Binary files a/assets/knit.png and /dev/null differ diff --git a/assets/lmu-osc-favicon.jpg b/assets/lmu-osc-favicon.jpg new file mode 100644 index 0000000..a06a839 Binary files /dev/null and b/assets/lmu-osc-favicon.jpg differ diff --git a/assets/lmu-osc-logo.svg b/assets/lmu-osc-logo.svg new file mode 100644 index 0000000..e7b48ef --- /dev/null +++ b/assets/lmu-osc-logo.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/render.png b/assets/render.png new file mode 100644 index 0000000..6c9e70c Binary files /dev/null and b/assets/render.png differ diff --git a/clone.md b/clone/index.qmd similarity index 77% rename from clone.md rename to clone/index.qmd index 05789f5..14004b4 100644 --- a/clone.md +++ b/clone/index.qmd @@ -1,46 +1,48 @@ --- title: Clone your GitHub repository +aliases: [clone.html] + --- *** 1. **GitHub**: click on the green `<> Code` button, choose the **SSH** URL to secure your connection, and copy **your** repository's URL. - ![](./assets/clone-button.png) + ![](/assets/clone-button.png)
2. **RStudio**: create a new project - ![](./assets/new-project.png) + ![](/assets/new-project.png)
3. **RStudio**: select `Checkout a project from a version control repository` - ![](./assets/version-control-project.png) + ![](/assets/version-control-project.png)
4. **RStudio**: select `Clone a project from a Git repository` - ![](./assets/git-project.png) + ![](/assets/git-project.png)
5. **RStudio**: paste the URL of **your** GitHub repository into 'Repository URL'. Do not locate this new Git repository in the folder created in the first tutorial (i.e. so that each folder has its own Git database). Click `Create Project`. Your password will be requested. - ![](./assets/paste-url.png) + ![](/assets/paste-url.png)
6. **RStudio**: Click on the Files tab to check that it contains all the files from the GitHub repository - ![](./assets/files-tab.png) + ![](/assets/files-tab.png) *** diff --git a/commit.md b/commit/index.qmd similarity index 88% rename from commit.md rename to commit/index.qmd index 4dcf434..b2011f5 100644 --- a/commit.md +++ b/commit/index.qmd @@ -1,5 +1,7 @@ --- title: Commit changes locally +aliases: [commit.html] + --- *** @@ -7,15 +9,15 @@ To avoid conflict during this collaborative coding exercice (i.e. contributors e 1. **RStudio**: select `params/params_tmpl.R` and click on 'More', 'Copy', and give it the name of your imaginary species or your name. **Please to not overwrite or edit the file `params/params_tmpl.R`.** - ![](./assets/copy-params_tmpl.png) - ![](./assets/rename-copy.png) + ![](/assets/copy-params_tmpl.png) + ![](/assets/rename-copy.png)
2. **RStudio**: edit your `.R` script - ![](./assets/edit-file.png) + ![](/assets/edit-file.png) The parameters each participants need to supply are: @@ -27,22 +29,21 @@ To avoid conflict during this collaborative coding exercice (i.e. contributors e (optional) If you want, you can use the RStudio colour picker to select a color. If you don't have it installed, type `install.packages("colourpicker")` in your console. - +
3. **RStudio**: save your file and in the Git tab, tick the box next to *** **your new script ONLY** *** to stage your file and click 'commit'. - ![](./assets/stage.png) + ![](/assets/stage.png)
4. **RStudio**: supply a descriptive message of the commit and click `commit` - ![](./assets/commit.png) + ![](/assets/commit.png) *** - diff --git a/custom.scss b/custom.scss deleted file mode 100644 index 442fd2b..0000000 --- a/custom.scss +++ /dev/null @@ -1,5 +0,0 @@ -/*-- scss:defaults --*/ -// Base document colors -$navbar-bg: #009933; -$link-color: #006426; -$sidebar-hl: #006426; diff --git a/footer/accessibilty.qmd b/footer/accessibilty.qmd new file mode 100644 index 0000000..9ed86c5 --- /dev/null +++ b/footer/accessibilty.qmd @@ -0,0 +1,122 @@ +--- +title: "Accessibility" +page-layout: full +--- + + + +:::{.accessibility-container} + +The Ludwig-Maximilians-UniversitĂ€t MĂŒnchen strives to make its offers accessible in accordance with § 9 Act on Digitalisation in the Free State of Bavaria (Bayerisches Digitalgesetz – BayDig). + +This Accessibility Statement applies to applications available at [https://www.lmu.de/de/index.html](https://www.lmu.de/de/index.html), [https://www.lmu.de/de/index.html](https://www.lmu.de/de/index.html) and all subdomain pages. + +#### Status of Compliance + +Partially compliant: This application partially corresponds to § 1 BayEGovV. + +##### Legal Name +Ludwig-Maximilians-UniversitĂ€t MĂŒnchen + +##### Website(s): +[https://www.lmu.de/de/index.html](https://www.lmu.de/de/index.html), [https://www.lmu.de/de/index.html](https://www.lmu.de/de/index.html) and all subdomain pages. + +#### Known Accessibility Issues +List and explanation of the problems encountered when implementing the accessibility of these websites + +##### Content Not Accessible to People With Disabilities +- Apart from the main pages, alternative text-based content for images and tables may be missing. There may also be errors in content hierarchy and links may be unintelligible. +- PDF documents created before 09/23/2018 have not yet been converted to a fully accessible format. +- Some documents have been provided by institutions of the LMU, which are not yet all available in a fully accessible version. +- Many of our videos also lack subtitles and audio descriptions. +We will be adding written directions for the maps used to give directions. +- Quotes are often not indicated as such using the appropriate HTML tag. +- Responsive design (for viewing on mobile devices) is only partially available for the websites, screen orientation is otherwise limited to landscape format. For non-responsive pages, texts do not wrap correctly in a small viewport. +- Fields for inputting user data are not always sufficiently designated as such. +- Words or passages in other languages are not always indicated as such. +- Because of the Google Search plugin, the criteria for "valid HTML text" is not being fulfilled. + +#### Explanation + +All LMU websites are currently undergoing a complete relaunch. It therefore no longer makes sense to revise the existing websites.\ +The deficiencies of the old website have been listed above. + + +**Creation Date**: 09/22/2019\ +**Methodology**: Self-assessment + +#### Feedback Mechanism +As a user, you can inform us of any shortcomings in complying with accessibility requirements or request information in an accessible format that is not required to be displayed in an accessible format. + +##### Contact Information +Unit VI.5 Internet Services\ +Martiusstraße 4\ +80802 Munich\ +Mail: [it.internet@verwaltung.uni-muenchen.de](mailto:it.internet@verwaltung.uni-muenchen.de)\ +Phone: +49 (0) 89 / 2180-9832 + +#### Enforcement Procedure +If a request for contact remains unanswered in whole or in part within six weeks, the Landesamt fĂŒr Digitalisierung, Breitband und Vermessung (Agency for Digitisation, High-Speed Internet and Surveying) will, at the request of the user, examine whether measures are necessary with regard to the monitoring of the obligated party. + +##### Contact information of the agency responsible for the enforcement procedure +Landesamt fĂŒr Digitalisierung, Breitband und Vermessung\above +Alexandrastraße 4\ +80538 Munich\ +Phone: +49 89 2129-1111\ +Fax: +49 89 2129-1113\ +Email:[service@geodaten.bayern.de](mailto:service@geodaten.bayern.de)\ +[https://www.ldbv.bayern.de/service/kontakt/](https://www.ldbv.bayern.de/service/kontakt/) + +##### Other Help Services +Students with disabilities are supported by the [Beratungsstelle fĂŒr Studierende mit Behinderung und chronischer Erkrankung](https://www.lmu.de/de/workspace-fuer-studierende/support-angebote/studieren-mit-beeintraechtigung/) (Counselling Center for Students with Disabilities and Chronic Illnesses). + +The [Schwerbehindertenvertretung (Representative for Disabled Persons)](https://login.lmu.de/idp/profile/SAML2/Redirect/SSO?execution=e3s1) (access protected on the service portal) can support employees. + +::: \ No newline at end of file diff --git a/footer/footer-style.css b/footer/footer-style.css new file mode 100644 index 0000000..12cb5e8 --- /dev/null +++ b/footer/footer-style.css @@ -0,0 +1,21 @@ + +.osc-footer-card { + --osc-primary-green: #00883A; + background-color: var(--osc-primary-green); +} + +.osc-footer-socials a:hover { + transform: scale(1.05); + filter: brightness(1.2); + transition: all 0.2s ease; +} + +.osc-footer-card a:focus-visible { + outline: 2px solid #FFD700; + outline-offset: 2px; +} + +/* no external window thing for the icons */ +.osc-footer-socials a::after { + display: none !important; +} \ No newline at end of file diff --git a/footer/footer.html b/footer/footer.html new file mode 100644 index 0000000..f2e2998 --- /dev/null +++ b/footer/footer.html @@ -0,0 +1,91 @@ + diff --git a/footer/imprint.qmd b/footer/imprint.qmd new file mode 100644 index 0000000..ddff8e9 --- /dev/null +++ b/footer/imprint.qmd @@ -0,0 +1,112 @@ +--- +title: "Imprint and Disclaimer" +format: + html: + toc: false + page-layout: full +--- + + + +:::{.imprint-container} + +Information pursuant to § 5 Telemedia Law and § 18 Abs. 2 Medienstaatsvertrag (MStV) + +Ludwig-Maximilians-UniversitĂ€t MĂŒnchen is a state institution of the Free State of Bavaria and a legal entity under public law (Art. 4 (1) sentence 1 BayHIG). It is legally represented by its President, Professor Dr. med. Dr. h.c. Matthias H. Tschöp. + +#### Address +Ludwig-Maximilians-UniversitĂ€t MĂŒnchen\ +Geschwister-Scholl-Platz 1\ +80539 Munich\ +Phone: +49 (0) 89 / 2180-0 + +Web presence: [https://www.lmu.de/de/index.html](https://www.lmu.de/de/index.html) \ +Contact: [poststelle@verwaltung.uni-muenchen.de](mailto:poststelle@verwaltung.uni-muenchen.de)\ +[Addition contact information](https://www.lmu.de/en/index.html) + +#### Notices for encrypted communication + +In the event that you wish to send us an encrypted message, please use the following public X509-certificate for encryption of your message. + +#### Authorized Oversight Agency + +Bavarian State Ministry for Science and Art\ +Salvatorstraße 2\ +80333 Munich + +Internet: [https://www.stmwk.bayern.de](https://www.stmwk.bayern.de) + +#### Sales Tax ID Number of the LMU + +Sales tax ID number pursuant to § 27 a Sales Tax Law:\ +DE 811205325 + +#### Responsible for content according to § 18 para. 2 MStV + +Ludwig-Maximilians-UniversitĂ€t MĂŒnchen\ +Felix Schönbrodt\ +Email: [felix.schoenbrodt@psy.lmu.de](mailto:felix.schoenbrodt@psy.lmu.de) + +#### Responsible party for technical implementation + +The webmaster of the facility is responsible for technical implementation. Technical implementation is handled by the Content Management System Fiona by [Infopark AG](https://www.lmu.de/en/index.html). + +#### Statement of Release + +The information herein is correct to the best of our knowledge, however, error cannot be avoided with absolute certainty. Solely the specifications in the pertinent legal bases (laws, orders, statutes) are legally binding. + +We cannot assume any liability for the particular currency, accuracy, completeness and availability of the provided information. + +We are not liable for damages caused by the use of this internet offer. This exclusion of liability shall not apply if the regulations of § 839 BGB (liability for violation of official duty) are involved. We are not liable for any damages caused by call-up or downloading of data by damaged software or by the installation or use of software. + +This exclusion of liability does not apply to information that falls within the scope of the Order (EU) 2016/679 of the European Parliament and of the Council dated 27 April 2016 (General Data Protection Regulation). The accuracy and currency of this information is guaranteed. + +#### Disclaimer +The information offered by the LMU contains cross-references (“links”) to other internet offers by the LMU or by external, third-parties. Basically the internet pages will open automatically in a new window. + +Through this cross-reference, the LMU handles access for use of this content (§ 5 Telemedia Law). We are not responsible for this “foreign” content since we do not initiate the transmission of the information, have not selected the addressee of the transmitted information and also have not selected or changed the transmitted information. + +An automatic, short-term interim saving of this “foreign information” by the LMU does not occur due to the selected call-up and linking method, so that the LMU does not thereby assume any responsibility for this foreign content. + +However, upon initial linking with these internet offers, the LMU has checked the foreign content to determine whether it may trigger a potential responsibility under civil or penal law. But we do not receive any automatic information about changes to the foreign internet offers and thus cannot constantly monitor their content for any changes. Therefore we also cannot assume any responsibility for them. Solely the particular merchant of the foreign internet offer is liable for illegal, erroneous or incomplete content, and in particular for damages which arise from the use or non-use of information by third parties. However, we endeavor to check the included links regularly with regard to these named criteria. + +::: \ No newline at end of file diff --git a/footer/privacy.qmd b/footer/privacy.qmd new file mode 100644 index 0000000..3f31fd0 --- /dev/null +++ b/footer/privacy.qmd @@ -0,0 +1,179 @@ +--- +title: "Privacy Policy" +format: + html: + toc: false + page-layout: full +--- + + + +For data collected by the LMU Open Science Center, [LMU's general privacy policy](https://www.lmu.de/en/footer/privacy-policy/index.html){target="_blank"} applies. + +Additionally, this site is hosted on the webhosting service GitHub Pages ([https://docs.github.com/en/pages](https://docs.github.com/en/pages)) with it's own privacy policy available at [https://docs.github.com/de/site-policy/privacy-policies/github-general-privacy-statement](https://docs.github.com/de/site-policy/privacy-policies/github-general-privacy-statement). + + + + +#### Matomo Tracking Opt-Out + +This opt-out is only for the Matomo web analytics tool in use directly the LMU Open Science Center website. It does not affect any other tracking or analytics tools that may be in use on this site, including those used by GitHub Pages. + +```{=html} +
+ +``` \ No newline at end of file diff --git a/fork.md b/fork/index.qmd similarity index 79% rename from fork.md rename to fork/index.qmd index ab6f002..0edf688 100644 --- a/fork.md +++ b/fork/index.qmd @@ -1,5 +1,7 @@ --- title: Fork a GitHub repository +aliases: [fork.html] + --- *** @@ -10,21 +12,20 @@ title: Fork a GitHub repository 2. **GitHub**: click on `Fork`. GitHub is creating your own copy of the repository in your GitHub account. Forks are linked and traceable. - ![](./assets/fork-button.png) + ![](/assets/fork-button.png)
3. **GitHub**: click on the green button 'create fork' with the default settings. - +
4. **GitHub**: you should now have a fork of this repository in your own GitHub account. - ![](./assets/fork-process.png) + ![](/assets/fork-process.png)
*** - diff --git a/index.md b/index.md deleted file mode 100644 index e30e475..0000000 --- a/index.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Collaborative coding with GitHub and RStudio ---- - -## About this work -This work was originally created by [Anna Krystalli](https://github.com/annakrystalli) from [RSE-Sheffield](https://github.com/RSE-Sheffield) under a [MIT licence](https://github.com/lmu-osc/Collaborative-RStudio-GitHub/blob/master/LICENSE) ([original repository](https://github.com/RSE-Sheffield/collaborative_github_exercise)). It was subsequently adapted by [Malika Ihle](https://ox.ukrn.org/people/#MalikaIhle) during her time at [Reproducible Research Oxford](https://ox.ukrn.org/), with the contributions of [Adam Kenny](https://github.com/Kennyanthro). It is now maintained by [Malika Ihle](https://www.osc.uni-muenchen.de/about_us/coordinator/index.html) at the [LMU Open Science Center](https://www.osc.uni-muenchen.de/index.html). The overview image is from [Dumitru Uzun](https://duzun.me/tips/git). The exercice is based on the [research](http://eprints.whiterose.ac.uk/99452/1/Bright%20et%20al.%202016_SelfArchive.pdf) of [Jen Bright](https://twitter.com/MorphobeakGeek) who also kindly provided the gifs used in the exercice. You are free to use, copy, modify, distribute this work for your own projects. - - -This session follows-up from the [Introduction to RStudio, Git, and GitHub](https://lmu-osc.github.io/Introduction-RStudio-Git-GitHub/) and is accompanied by this 10 min introductory [videorecording](https://osf.io/dcqt9/). - -*** - -## Overview of the exercice - -In this session, you will - -* **fork** a GitHub repository (i.e. copy a collaborator's repository to your own GitHub account) -* **clone** it locally (i.e. copy it to your computer while maintaining a connection to your remote (GitHub) version) -* create a new file locally and **commit** it to your local repository (i.e. save the file locally in your version control system) -* **push** your changes to your GitHub version (i.e. synchronise your local changes with your remote repository) -* contribute a file to the original repository by making a **pull request** (i.e. request your collaborator, the owner of the original repository, to fetch your proposed changes and merge them into the original repository) -* observe the outcome of all contributions merged by your collaborator -* **pull the upstream repository into your fork** (i.e. update your fork to reflect all the changes that happened in your collaborator's original repository) - - -
- -In this example, the file you will contribute is required to simulate the evolutionary trajectory of an imaginary bird species’ beak size. We will use RStudio and GitHub to collate all species files and plot them all up together at the end. We will also discover the skull and beak shapes associated with each species you contributed (after they 'evolved' through a simple brownian motion model which assumes steps to progress completely at random). - -![](gif.gif) - - -*** - -## Step-by-step tutorial -The material is self-paced and it is necessary that you work through the sections in order. - -* [Fork](./fork.md) - Copy your collaborator's repository -* [Clone](./clone.md) - Copy your repository locally -* [Commit](./commit.md) - Make changes and save them locally -* [Push](./push.md) - Update your remote repository with your local changes -* [Pull request](./pull-request.md) - Ask your collaborator to integrate your changes in their repository -* [Merged results](./merge.md) - Observe the merge of all contributions -* [Pull the upstream repository into your fork](./pull-upstream.md) - Update your fork with all contributions made to the original repository - -*** diff --git a/index.qmd b/index.qmd new file mode 100644 index 0000000..e7b1eb7 --- /dev/null +++ b/index.qmd @@ -0,0 +1,54 @@ +--- +title: Collaborative coding with GitHub and RStudio +--- + +## About this work +This work was originally created by [Anna Krystalli](https://github.com/annakrystalli) from [RSE-Sheffield](https://github.com/RSE-Sheffield) under a MIT licence ([original repository](https://github.com/RSE-Sheffield/collaborative_github_exercise)). It was subsequently adapted by [Malika Ihle](https://ox.ukrn.org/people/#MalikaIhle) during her time at [Reproducible Research Oxford](https://ox.ukrn.org/), with the contributions of Adam Kenny. It is now maintained by [Malika Ihle](https://www.osc.lmu.de/people/people/malika-ihle.html) at the [LMU Open Science Center](https://www.osc.lmu.de/). The overview image is from [Dumitru Uzun](https://duzun.me/). The exercise is based on the [research](http://eprints.whiterose.ac.uk/99452/1/Bright%20et%20al.%202016_SelfArchive.pdf) of Jen Bright who also kindly provided the gifs used in the exercise. You are free to use, copy, modify, distribute this work for your own projects. + + +This session follows-up from the [Introduction to RStudio, Git, and GitHub](https://lmu-osc.github.io/Introduction-RStudio-Git-GitHub/) and is accompanied by this 10 min introductory [videorecording](https://osf.io/dcqt9/). + +*** + +## Overview of the exercice + +In this session, you will + +* **fork** a GitHub repository (i.e. copy a collaborator's repository to your own GitHub account) +* **clone** it locally (i.e. copy it to your computer while maintaining a connection to your remote (GitHub) version) +* create a new file locally and **commit** it to your local repository (i.e. save the file locally in your version control system) +* **push** your changes to your GitHub version (i.e. synchronise your local changes with your remote repository) +* contribute a file to the original repository by making a **pull request** (i.e. request your collaborator, the owner of the original repository, to fetch your proposed changes and merge them into the original repository) +* observe the outcome of all contributions merged by your collaborator +* **pull the upstream repository into your fork** (i.e. update your fork to reflect all the changes that happened in your collaborator's original repository) + + +
+ +In this example, the file you will contribute is required to simulate the evolutionary trajectory of an imaginary bird species' beak size. We will use RStudio and GitHub to collate all species files and plot them all up together at the end. We will also discover the skull and beak shapes associated with each species you contributed (after they 'evolved' through a simple brownian motion model which assumes steps to progress completely at random). + +![](gif.gif) + + +*** + +## Step-by-step tutorial +The material is self-paced and it is necessary that you work through the sections in order. + +* [Fork](fork/index.qmd) - Copy your collaborator's repository +* [Clone](clone/index.qmd) - Copy your repository locally +* [Commit](commit/index.qmd) - Make changes and save them locally +* [Push](push/index.qmd) - Update your remote repository with your local changes +* [Pull request](pull-request/index.qmd) - Ask your collaborator to integrate your changes in their repository +* [Merged results](merge/index.qmd) - Observe the merge of all contributions +* [Pull the upstream repository into your fork](pull-upstream/index.qmd) - Update your fork with all contributions made to the original repository + + +::: {.callout-tip title="Support the LMU Open Science Center!"} + +**Like this tutorial? Be sure to give [the repository]({{< meta repo-url >}}) a star and [follow us on GitHub](https://github.com/lmu-osc)!** +::: + +::: {.callout-tip title="Questions about this tutorial?"} +**If you have questions for the author of this tutorial, please take a look at the [About](about.qmd) page.** +::: diff --git a/matomo-analytics.html b/matomo-analytics.html index 39da869..05d5034 100644 --- a/matomo-analytics.html +++ b/matomo-analytics.html @@ -1,17 +1,21 @@ diff --git a/merge.md b/merge/index.qmd similarity index 68% rename from merge.md rename to merge/index.qmd index dabd5cd..83b727c 100644 --- a/merge.md +++ b/merge/index.qmd @@ -1,5 +1,7 @@ --- title: Observe the merged contributions +aliases: [merge.html] + --- *** @@ -17,34 +19,34 @@ title: Observe the merged contributions 1. **Collaborator's screen - GitHub**: In their pull request tab, they will inspect the files you changed and ensure that the parameters were inputted correctly so as to not break down their code down the line. - ![](./assets/files-changed.png) + ![](/assets/files-changed.png)
2. **Collaborator's screen - GitHub**: They will navigate back to the conversation tab of your pull request to write some comments, merge your pull request, and confirm the merge. - ![](./assets/comment-and-merge.png) + ![](/assets/comment-and-merge.png)
3. **Collaborator's screen - RStudio**: They will pull their GitHub repository into their local repository. - ![](./assets/pull.png) + ![](/assets/pull.png)
-4. **Collaborator's screen - RStudio**: They will knit the Rmarkdown file `plot-trait-evolution.Rmd` which sources all the contributed files. Knitting a Rmarkdown file means rendering the Rmarkdown code (that integrate R code and Markdown code) into a defined format, here a html file. This file generates plots and figures based on the parameters that were contributed. +4. **Collaborator's screen - RStudio**: They will render the Quarto file `plot-trait-evolution/index.qmd` which sources all the contributed files. Rendering a Quarto file means compiling the R code chunks and plain Markdown script of the file into a combine document of a defined format, here a html file. This file generates plots and figures based on the parameters that were contributed. - ![](./assets/knit.png) + ![](/assets/render.png)
5. **Collaborator's screen - RStudio**: If all packages needed to run this script and to knit the file into a html page are installed, this file will generate plots and figures based on the parameters that were contributed. - ![](./assets/plot.png) - ![](./assets/skulls.png) + ![](/assets/plot.png) + ![](/assets/skulls.png) @@ -54,4 +56,3 @@ This is how one can integrate data and code to a common repository shared amongs *** - diff --git a/params/Franzi_rocks_a_little.R b/params/Franzi_rocks_a_little.R deleted file mode 100644 index ca08f79..0000000 --- a/params/Franzi_rocks_a_little.R +++ /dev/null @@ -1,18 +0,0 @@ -# !!copied version!! editable :) -# ________________________________________________ -# input parameters -install.packages("colourpicker") - -# sigma2: 0 < value < 5 -sig2 <- 4 - -# e.g. "anas_krystallinus" -species.name <- "Fresh_Franzi" - -# e.g. "red" -color <- "#FFF68F" - -# tip: pick a color using rstudio colour picker. -# Addins > Colour Picker (to install: install.packages("colourpicker")) -# If you use this, don't forget to put it back as a comment -# before pushing and creating your pull request. diff --git a/params/Saras_Kiri.R b/params/Saras_Kiri.R deleted file mode 100644 index 44b3d9c..0000000 --- a/params/Saras_Kiri.R +++ /dev/null @@ -1,18 +0,0 @@ -# !! PLEASE DO NOT EDIT THIS FILE !! -# ** make a copy and edit that instead ** -# ________________________________________________ -# input parameters - -# sigma2: 0 < value < 5 -sig2 <- 4.2 - -# e.g. "anas_krystallinus" -species.name <- "Saras_Kiri" - -# e.g. "red" -color <- "violet" - -# tip: pick a color using rstudio colour picker. -# Addins > Colour Picker (to install: install.packages("colourpicker")) -# If you use this, don't forget to put it back as a comment -# before pushing and creating your pull request. diff --git a/params/annes_copy of params.R b/params/annes_copy of params.R deleted file mode 100644 index 207e04e..0000000 --- a/params/annes_copy of params.R +++ /dev/null @@ -1,18 +0,0 @@ -# !! PLEASE DO NOT EDIT THIS FILE !! -# ** make a copy and edit that instead ** -# ________________________________________________ -# input parameters - -# sigma2: 0 < value < 5 -sig2 <- 4.9 - -# e.g. "anas_krystallinus" -species.name <- "annes_creature" - -# e.g. "red" -color <-"#076429" - -# tip: pick a color using rstudio colour picker. -# Addins > Colour Picker (to install: install.packages("colourpicker")) -# If you use this, don't forget to put it back as a comment -# before pushing and creating your pull request. diff --git a/params/david_rocks_too.R b/params/david_rocks_too.R deleted file mode 100644 index 53f57b1..0000000 --- a/params/david_rocks_too.R +++ /dev/null @@ -1,18 +0,0 @@ -# !! PLEASE DO NOT EDIT THIS FILE !! -# ** make a copy and edit that instead ** -# ________________________________________________ -# input parameters - -# sigma2: 0 < value < 5 -sig2 <- 4 - -# e.g. "anas_krystallinus" -species.name <- "Micropterus salmoides davidii" - -# e.g. "red" -color <- "#7305A6" - -# tip: pick a color using rstudio colour picker. -# Addins > Colour Picker (to install: install.packages("colourpicker")) -# If you use this, don't forget to put it back as a comment -# before pushing and creating your pull request. diff --git a/params/emily_rocks.R b/params/emily_rocks.R deleted file mode 100644 index 494b4d2..0000000 --- a/params/emily_rocks.R +++ /dev/null @@ -1,19 +0,0 @@ -# !! PLEASE DO NOT EDIT THIS FILE !! -# ** make a copy and edit that instead ** -# ________________________________________________ -# input parameters - -# sigma2: 0 < value < 5 -sig2 <- 4 - -# e.g. "anas_krystallinus" -species.name <- "emily_rocks" - -# e.g. "red" -color <- "#CD6090" - -# tip: pick a color using rstudio colour picker. -# Addins > Colour Picker (to install: install.packages("colourpicker")) -# If you use this, don't forget to put it back as a comment -# before pushing and creating your pull request. - diff --git a/params/params_tmpl.R b/params/params_tmpl.R index 2b5052c..a05e353 100644 --- a/params/params_tmpl.R +++ b/params/params_tmpl.R @@ -14,5 +14,8 @@ color <- # tip: pick a color using rstudio colour picker. # Addins > Colour Picker (to install: install.packages("colourpicker")) + # Note: please do not include install.packages("PKG-NAME") in your final R script! + # This can break part of our rendering pipeline. Please install at your command + # line or simply ask your instructor if uncertain. # If you use this, don't forget to put it back as a comment # before pushing and creating your pull request. diff --git a/plot_trait_evolution.Rmd b/plot-trait-evolution.qmd old mode 100755 new mode 100644 similarity index 76% rename from plot_trait_evolution.Rmd rename to plot-trait-evolution.qmd index 57503bf..59fc3c4 --- a/plot_trait_evolution.Rmd +++ b/plot-trait-evolution.qmd @@ -1,17 +1,17 @@ --- title: "Evolutionary lottery of skull and beak morphology" -output: - html_document: - theme: cerulean - pdf_document: default +aliases: [plot_trait_evolution.html] --- + + > [**Beak and skull shapes in birds of prey ("raptors") are strongly coupled and largely controlled by size.**](http://eprints.whiterose.ac.uk/99452/1/Bright%20et%20al.%202016_SelfArchive.pdf) + gif provided by the awesome **Jen Bright** [**\@MorphobeakGeek**](https://twitter.com/MorphobeakGeek)! -![](gif.gif) +![](/gif.gif) In this exercise we will **use a github repo** to collaboratively collate and *simulate evolutionary trajectories for each participants' species* ***body size*** using a simple brownian motion evolutionary model. This assumes evolutionary steps to progress comletely at random. You could say: @@ -29,13 +29,15 @@ Participants will then get to **see the skull and beak shape** corresponding to First we load the required packages and create some objects to compile data on trait evolution for each species. -```{r warning=F, message=FALSE} +```{r} +#| warning: false +#| message: false library(dplyr) -library(ggplot2) #3.5.1 -library(plotly) #4.10.4 +library(ggplot2) +library(plotly) set.seed(1) -t <- 0:100 # generate time vector +t <- 0:100 # generate time vector dt <- NULL # generate object to compile time-series data cols <- NULL # generate object to compile trendline colours ``` @@ -50,33 +52,40 @@ We'll use the parameters supplied in your scripts to generate brownian trait evo #getting the file names for everything except the template that has undefined values spp.files <- dir("params/")[dir("params/") != "params_tmpl.R"] -for(spp in spp.files){ +for (spp in spp.files) { # source parameters for each species source(file.path("params", spp)) - + # generate trait evolution time-series and compile plotting data - dt <- rbind(dt, data.frame(t, - trait = c(0, rnorm(n = length(t) - 1, sd = sqrt(sig2)) |> cumsum()), - species = species.name)) + dt <- rbind( + dt, + data.frame( + t, + trait = c(0, rnorm(n = length(t) - 1, sd = sqrt(sig2)) |> cumsum()), + species = species.name + ) + ) cols <- c(cols, color) } - ``` - ### Plot trait evolution timeseries Use the data generated to plot all species. -```{r fig.width = 9} +```{r} +#| fig-width: 9 # Specify the order of species based on the order of colors in cols to stop a mismatch in colours dt$species <- factor(dt$species, levels = unique(dt$species)) # Create the ggplot object -p <- ggplot(data = dt, aes(x = t, y = trait, group = species, colour = species)) + - geom_line() + - scale_colour_manual(values = cols) +p <- ggplot( + data = dt, + aes(x = t, y = trait, group = species, colour = species) +) + + geom_line() + + scale_colour_manual(values = cols) # Plot the results ggplotly(p) @@ -92,20 +101,31 @@ ggplotly(p) Skulls are organised from **largest** to **smallest**. The largest skulls are **vulture-like**, (e.g. **no. 50, the Andean condor** [*Vultur gryphus*](https://en.wikipedia.org/wiki/Andean_condor)) and the smallest are **falconet-like**, (e.g. **no. 1 Collared falconet** [*Microhierax caerulescens*](https://en.wikipedia.org/wiki/Collared_falconet)) -```{r, echo=FALSE, results='asis'} -skull <- dt[dt$t == 100,] -skull <- skull[order(skull$trait, decreasing = T),] +```{r} +#| echo: false +#| results: asis +skull <- dt[dt$t == 100, ] +skull <- skull[order(skull$trait, decreasing = T), ] gf <- list.files("gif/") -if(length(gf) > 0){ +if (length(gf) > 0) { max.x <- max(abs(dt$trait)) breaks <- seq(-max.x, max.x, length.out = 51) bins <- cut(skull$trait, breaks = breaks, include.lowest = T, labels = F) - - for(i in 1:nrow(skull)){ - cat("### **No: ",bins[i], "** ***", as.character(skull$species[i]),"***", "\n", "\n", sep = "") - cat("![](gif/", gf[bins[i]], ")", "\n", "\n", sep = "") + + for (i in 1:nrow(skull)) { + cat( + "### **No: ", + bins[i], + "** ***", + as.character(skull$species[i]), + "***", + "\n", + "\n", + sep = "" + ) + cat("![](gif/", gf[bins[i]], ")", "\n", "\n", sep = "") } } ``` @@ -113,6 +133,7 @@ if(length(gf) > 0){ ### Session Info -```{r, warning=FALSE} +```{r} +#| warning: false sessioninfo::session_info() ``` diff --git a/pull-request.md b/pull-request/index.qmd similarity index 84% rename from pull-request.md rename to pull-request/index.qmd index 6136e72..cc55249 100644 --- a/pull-request.md +++ b/pull-request/index.qmd @@ -1,27 +1,28 @@ --- title: Create a pull request to ask your collaborator to merge your fork to the original repository +aliases: [pull-request.html] + --- *** 1. **GitHub**: in your repository, click on '**contribute**' and '**open pull request**' - ![](./assets/pull-request-button.png) + ![](/assets/pull-request-button.png)
2. **GitHub**: **make sure the base repository is the LMU Open Science Center's original one and the head fork is yours**, both set on their main branch (these repositories should only have one branch anyway called 'main'. Branches are diverging versions of a file *within* a repository - we will not cover this concept today). Check that your requested merge does not create any conflict. In addition, **write an informative message**, explaining your changes to your collaborator, the author of the original repository. Click on `Create pull request` - ![](./assets/create-pull-request.png) + ![](/assets/create-pull-request.png)
3. **GitHub**: you can now see a conversation tab around your pull request in the repository of the original owner: - + *** - diff --git a/pull-upstream.md b/pull-upstream/index.qmd similarity index 94% rename from pull-upstream.md rename to pull-upstream/index.qmd index 505ccfc..fe5a6b7 100644 --- a/pull-upstream.md +++ b/pull-upstream/index.qmd @@ -1,5 +1,7 @@ --- title: Pull upstream repository into your fork +aliases: [pull-upstream.html] + --- *** @@ -22,16 +24,15 @@ To integrate all the contributions made to the original repository into your loc ``` - ![](./assets/command-line.png) + ![](/assets/command-line.png) 6. **RStudio**: check in the Files tab that the new contributions appeared. 7. **RStudio**: push those local changes to your GitHub repository (you can do this from the command line by typing `git push`) - ![](./assets/final-push.png) + ![](/assets/final-push.png) You are done! *** - diff --git a/push.md b/push/index.qmd similarity index 81% rename from push.md rename to push/index.qmd index ebf4463..4523d79 100644 --- a/push.md +++ b/push/index.qmd @@ -1,16 +1,18 @@ --- title: "Push your local changes to your remote repository" +aliases: [push.html] + --- *** 1. **RStudio**: push your changes to GitHub by clicking, in the Git tab, the green arrow pointing up and entering your password. - ![](./assets/push-rstudio.png) + ![](/assets/push-rstudio.png) when successful you should get this pop up box which you can close: - +
@@ -19,4 +21,3 @@ title: "Push your local changes to your remote repository" 2. **GitHub**: verify that your changes were integrated in your GitHub repository by refreshing your GitHub repository webpage and looking into the params folder to see if your file is there. *** - diff --git a/references.bib b/references.bib new file mode 100644 index 0000000..90464e4 --- /dev/null +++ b/references.bib @@ -0,0 +1,10 @@ + +@book{callahan2026, + title = {LMU Open Science Center Tutorial Template: A Quarto Extension}, + author = {Callahan, Patrick}, + year = {2026}, + month = {07}, + date = {2026-07}, + doi = {10.5281/zenodo.21263721}, + url = {https://github.com/lmu-osc/tutorial-template} +} diff --git a/styles.css b/styles.css deleted file mode 100644 index 42bf444..0000000 --- a/styles.css +++ /dev/null @@ -1,5 +0,0 @@ -/* css styles */ - -.nav-page .nav-page-text { - font-size: 15pt; -}