You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by as...@apache.org on 2026/08/19 20:25:42 UTC

(grails-website) branch asf-site-production updated: Updating apache/grails-website asf-site-production branch for GitHub Actions run:32297210382

This is an automated email from the ASF dual-hosted git repository.

asf-ci-deploy pushed a commit to branch asf-site-production
in repository https://gitbox.apache.org/repos/asf/grails-website.git


The following commit(s) were added to refs/heads/asf-site-production by this push:
     new fec8708824a Updating apache/grails-website asf-site-production branch for GitHub Actions run:32297210382
fec8708824a is described below

commit fec8708824a03dce99c9165da794f908a792404b
Author: jamesfredley <ja...@users.noreply.github.com>
AuthorDate: Wed Aug 19 20:25:20 2026 +0000

    Updating apache/grails-website asf-site-production branch for GitHub Actions run:32297210382
---
 foundation/minutes.xml                             |    2 +-
 foundation/minutes/20210321-tab.html               |   10 +-
 foundation/minutes/20211217-tab.html               |   10 +-
 foundation/minutes/20220323-tab.html               |   10 +-
 foundation/minutes/20220711-tab.html               |   10 +-
 foundation/minutes/20221128-tab.html               |   10 +-
 foundation/minutes/index.html                      |    2 +-
 guides/_redirects.json                             |   20 +-
 guides/adding-commit-info/3/css/guide.css          |  176 +-
 .../adding-commit-info/3/guide/configuration.html  |   32 +-
 .../adding-commit-info/3/guide/gettingStarted.html |   32 +-
 guides/adding-commit-info/3/guide/history.html     |   32 +-
 guides/adding-commit-info/3/guide/index.html       |    6 +-
 .../adding-commit-info/3/guide/runningTheApp.html  |   32 +-
 guides/adding-commit-info/3/guide/tldr.html        |   28 +-
 guides/adding-commit-info/3/guide/training.html    |   28 +-
 .../adding-commit-info/3/guide/writingTheApp.html  |   32 +-
 guides/adding-commit-info/4/css/guide.css          |  176 +-
 .../adding-commit-info/4/guide/configuration.html  |   32 +-
 .../adding-commit-info/4/guide/gettingStarted.html |   32 +-
 guides/adding-commit-info/4/guide/history.html     |   32 +-
 guides/adding-commit-info/4/guide/index.html       |    6 +-
 .../adding-commit-info/4/guide/runningTheApp.html  |   32 +-
 guides/adding-commit-info/4/guide/tldr.html        |   28 +-
 guides/adding-commit-info/4/guide/training.html    |   28 +-
 .../adding-commit-info/4/guide/writingTheApp.html  |   32 +-
 guides/angular2-combined/4/css/guide.css           |  176 +-
 .../angular2-combined/4/guide/gettingStarted.html  |   30 +-
 .../angular2-combined/4/guide/helpWithGrails.html  |   26 +-
 guides/angular2-combined/4/guide/index.html        |    4 +-
 .../angular2-combined/4/guide/runningTheApp.html   |   30 +-
 guides/angular2-combined/4/guide/training.html     |   26 +-
 .../angular2-combined/4/guide/writingTheApp.html   |   30 +-
 guides/building-a-react-app/4/css/guide.css        |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/building-a-react-app/4/guide/index.html     |    4 +-
 guides/building-a-react-app/4/guide/nextSteps.html |   30 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/building-a-react-app/4/guide/training.html  |   26 +-
 .../4/guide/writingReactComponents.html            |   30 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/building-a-vue-app/4/css/guide.css          |  176 +-
 .../building-a-vue-app/4/guide/gettingStarted.html |   30 +-
 .../building-a-vue-app/4/guide/helpWithGrails.html |   26 +-
 guides/building-a-vue-app/4/guide/index.html       |    4 +-
 guides/building-a-vue-app/4/guide/nextSteps.html   |   30 +-
 .../building-a-vue-app/4/guide/runningTheApp.html  |   30 +-
 guides/building-a-vue-app/4/guide/training.html    |   26 +-
 .../4/guide/writingTheClient.html                  |   30 +-
 .../4/guide/writingTheServer.html                  |   30 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/conclusion.html                        |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/overview.html                          |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/version2.html                          |   30 +-
 .../4/guide/writingTheAndroidApp.html              |   30 +-
 .../4/guide/writingTheGrailsApp.html               |   30 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/conclusion.html                        |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/overview.html                          |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/version2.html                          |   32 +-
 .../4/guide/writingTheGrailsApp.html               |   32 +-
 .../4/guide/writingTheiOSApp.html                  |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/conclusion.html                        |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/overview.html                          |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/version2.html                          |   32 +-
 .../4/guide/writingTheGrailsApp.html               |   32 +-
 .../4/guide/writingTheiOSApp.html                  |   32 +-
 guides/categories/grailsasync.html                 |    2 +-
 guides/command-objects-and-forms/3/css/guide.css   |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../command-objects-and-forms/3/guide/index.html   |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/whatAreCommandObjects.html             |   32 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/command-objects-and-forms/4/css/guide.css   |  176 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../command-objects-and-forms/4/guide/index.html   |    6 +-
 .../4/guide/runningTheApp.html                     |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/whatAreCommandObjects.html             |   32 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 .../creating-your-first-grails-app/3/css/guide.css |  176 +-
 .../3/guide/controllers.html                       |   32 +-
 .../3/guide/creatingTheApp.html                    |   32 +-
 .../3/guide/deployment.html                        |   32 +-
 .../3/guide/domainClasses.html                     |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/services.html                          |   32 +-
 .../3/guide/testing.html                           |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/views.html                             |   32 +-
 .../creating-your-first-grails-app/4/css/guide.css |  176 +-
 .../4/guide/controllers.html                       |   32 +-
 .../4/guide/creatingTheApp.html                    |   32 +-
 .../4/guide/deployment.html                        |   32 +-
 .../4/guide/domainClasses.html                     |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/runningTheApp.html                     |   32 +-
 .../4/guide/services.html                          |   32 +-
 .../4/guide/testing.html                           |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/views.html                             |   32 +-
 .../creating-your-first-grails-app/6/css/guide.css |  176 +-
 .../6/guide/controllers.html                       |   30 +-
 .../6/guide/creatingTheApp.html                    |   30 +-
 .../6/guide/deployment.html                        |   30 +-
 .../6/guide/domainClasses.html                     |   30 +-
 .../6/guide/gettingStarted.html                    |   30 +-
 .../6/guide/helpWithGrails.html                    |   26 +-
 .../6/guide/index.html                             |    4 +-
 .../6/guide/runningTheApp.html                     |   30 +-
 .../6/guide/services.html                          |   30 +-
 .../6/guide/testing.html                           |   30 +-
 .../6/guide/training.html                          |   26 +-
 .../6/guide/views.html                             |   30 +-
 guides/database-per-tenant/4/css/guide.css         |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/database-per-tenant/4/guide/index.html      |    4 +-
 .../4/guide/integrationTest.html                   |   30 +-
 .../database-per-tenant/4/guide/runningTheApp.html |   30 +-
 .../database-per-tenant/4/guide/testingTheApp.html |   30 +-
 guides/database-per-tenant/4/guide/training.html   |   26 +-
 .../database-per-tenant/4/guide/writingTheApp.html |   30 +-
 guides/discriminator-per-tenant/4/css/guide.css    |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/discriminator-per-tenant/4/guide/index.html |    4 +-
 .../4/guide/integrationTest.html                   |   30 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../4/guide/testingTheApp.html                     |   30 +-
 .../discriminator-per-tenant/4/guide/training.html |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/gorm-event-listeners/3/css/guide.css        |  176 +-
 .../gorm-event-listeners/3/guide/conclusion.html   |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/gorm-event-listeners/3/guide/index.html     |    6 +-
 .../3/guide/runningTheTests.html                   |   32 +-
 guides/gorm-event-listeners/3/guide/training.html  |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/gorm-event-listeners/4/css/guide.css        |  176 +-
 .../gorm-event-listeners/4/guide/conclusion.html   |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 guides/gorm-event-listeners/4/guide/index.html     |    6 +-
 .../4/guide/runningTheTests.html                   |   32 +-
 guides/gorm-event-listeners/4/guide/training.html  |   28 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/conclusion.html                        |   32 +-
 .../4/guide/configuringGormGraphQL.html            |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/installApollo.html                     |   32 +-
 .../4/guide/mutations.html                         |   32 +-
 .../4/guide/playGraphQL.html                       |   32 +-
 .../4/guide/queryGraphQL.html                      |   32 +-
 .../4/guide/training.html                          |   28 +-
 guides/gorm-ratpack/3/css/guide.css                |  176 +-
 guides/gorm-ratpack/3/guide/gettingStarted.html    |   32 +-
 guides/gorm-ratpack/3/guide/helpWithGrails.html    |   28 +-
 guides/gorm-ratpack/3/guide/index.html             |    6 +-
 guides/gorm-ratpack/3/guide/training.html          |   28 +-
 .../gorm-ratpack/3/guide/writingTheAppPartOne.html |   32 +-
 guides/gorm-ratpack/4/css/guide.css                |  176 +-
 guides/gorm-ratpack/4/guide/gettingStarted.html    |   30 +-
 guides/gorm-ratpack/4/guide/helpWithGrails.html    |   26 +-
 guides/gorm-ratpack/4/guide/index.html             |    4 +-
 guides/gorm-ratpack/4/guide/training.html          |   26 +-
 .../gorm-ratpack/4/guide/writingTheAppPartOne.html |   30 +-
 guides/gorm-without-grails/4/css/guide.css         |  176 +-
 .../4/guide/configuringTheApp.html                 |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/gorm-without-grails/4/guide/index.html      |    4 +-
 guides/gorm-without-grails/4/guide/training.html   |   26 +-
 .../4/guide/writingTheAppPartOne.html              |   30 +-
 guides/grails-as-docker-container/3/css/guide.css  |  176 +-
 .../3/guide/building.html                          |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../grails-as-docker-container/3/guide/index.html  |    6 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/usingOnlyDocker.html                   |   32 +-
 .../3/guide/writing.html                           |   32 +-
 guides/grails-as-docker-container/4/css/guide.css  |  176 +-
 .../4/guide/building.html                          |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../grails-as-docker-container/4/guide/index.html  |    6 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/usingOnlyDocker.html                   |   32 +-
 .../4/guide/writing.html                           |   32 +-
 guides/grails-async-promises/3/css/guide.css       |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-async-promises/3/guide/index.html    |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 guides/grails-async-promises/3/guide/training.html |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-async-promises/4/css/guide.css       |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-async-promises/4/guide/index.html    |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/grails-async-promises/4/guide/training.html |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-basicauth/3/css/guide.css            |  176 +-
 .../grails-basicauth/3/guide/gettingStarted.html   |   28 +-
 .../grails-basicauth/3/guide/helpWithGrails.html   |   28 +-
 guides/grails-basicauth/3/guide/index.html         |    6 +-
 guides/grails-basicauth/3/guide/writingTheApp.html |   32 +-
 guides/grails-basicauth/4/css/guide.css            |  176 +-
 .../grails-basicauth/4/guide/gettingStarted.html   |   26 +-
 .../grails-basicauth/4/guide/helpWithGrails.html   |   26 +-
 guides/grails-basicauth/4/guide/index.html         |    4 +-
 guides/grails-basicauth/4/guide/writingTheApp.html |   30 +-
 guides/grails-code-coverage/3/css/guide.css        |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-code-coverage/3/guide/index.html     |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 guides/grails-code-coverage/3/guide/training.html  |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-code-coverage/4/css/guide.css        |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-code-coverage/4/guide/index.html     |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/grails-code-coverage/4/guide/training.html  |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-codenarc/4/css/guide.css             |  176 +-
 guides/grails-codenarc/4/guide/gettingStarted.html |   30 +-
 guides/grails-codenarc/4/guide/helpWithGrails.html |   26 +-
 guides/grails-codenarc/4/guide/index.html          |    4 +-
 guides/grails-codenarc/4/guide/training.html       |   26 +-
 .../grails-codenarc/4/guide/writingCustomRule.html |   30 +-
 guides/grails-codenarc/4/guide/writingTheApp.html  |   30 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/testTheApp.html                        |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 .../6/css/guide.css                                |  176 +-
 .../6/guide/gettingStarted.html                    |   32 +-
 .../6/guide/helpWithGrails.html                    |   28 +-
 .../6/guide/index.html                             |    6 +-
 .../6/guide/testTheApp.html                        |   32 +-
 .../6/guide/training.html                          |   28 +-
 .../6/guide/writingTheApp.html                     |   32 +-
 .../3/css/guide.css                                |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/testTheApp.html                        |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/testTheApp.html                        |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-controller-testing/3/css/guide.css   |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../grails-controller-testing/3/guide/index.html   |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../grails-controller-testing/3/guide/summary.html |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-controller-testing/4/css/guide.css   |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../grails-controller-testing/4/guide/index.html   |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../grails-controller-testing/4/guide/summary.html |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 .../3/css/guide.css                                |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/runTests.html                          |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/runTests.html                          |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-data-access/8/css/guide.css          |  176 +-
 guides/grails-data-access/8/guide/domainModel.html |   32 +-
 .../grails-data-access/8/guide/gettingStarted.html |   32 +-
 .../grails-data-access/8/guide/helpWithGrails.html |   28 +-
 guides/grails-data-access/8/guide/index.html       |    6 +-
 .../grails-data-access/8/guide/introduction.html   |   28 +-
 guides/grails-data-access/8/guide/queries.html     |   32 +-
 .../grails-data-access/8/guide/runningTheApp.html  |   32 +-
 .../8/guide/servicesAndControllers.html            |   32 +-
 guides/grails-data-access/8/guide/summary.html     |   32 +-
 guides/grails-data-access/8/guide/testing.html     |   32 +-
 guides/grails-database-migration/3/css/guide.css   |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../grails-database-migration/3/guide/index.html   |    6 +-
 .../grails-database-migration/3/guide/summary.html |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-database-migration/4/css/guide.css   |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../grails-database-migration/4/guide/index.html   |    4 +-
 .../grails-database-migration/4/guide/summary.html |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-database-migration/6/css/guide.css   |  176 +-
 .../6/guide/gettingStarted.html                    |   32 +-
 .../6/guide/helpWithGrails.html                    |   28 +-
 .../grails-database-migration/6/guide/index.html   |    6 +-
 .../grails-database-migration/6/guide/summary.html |   32 +-
 .../6/guide/training.html                          |   28 +-
 .../6/guide/writingTheApp.html                     |   32 +-
 guides/grails-database-migration/8/css/guide.css   |  176 +-
 .../8/guide/addAttributes.html                     |   32 +-
 .../8/guide/baseline.html                          |   32 +-
 .../8/guide/changelogDiscipline.html               |   32 +-
 .../8/guide/designedRollback.html                  |   32 +-
 .../8/guide/gettingStarted.html                    |   32 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 .../grails-database-migration/8/guide/index.html   |    6 +-
 .../8/guide/introduction.html                      |   28 +-
 .../8/guide/legacyOnboarding.html                  |   32 +-
 .../8/guide/makeColumnNullable.html                |   32 +-
 .../8/guide/pluginSetup.html                       |   32 +-
 .../8/guide/redesignTables.html                    |   32 +-
 .../8/guide/releaseRunbook.html                    |   32 +-
 .../8/guide/requirements.html                      |   32 +-
 .../8/guide/runningTheApp.html                     |   32 +-
 .../grails-database-migration/8/guide/summary.html |   32 +-
 .../grails-database-migration/8/guide/testing.html |   32 +-
 .../grails-docker-bootbuildimage/8/css/guide.css   |  176 +-
 .../8/guide/bootBuildImage.html                    |   32 +-
 .../8/guide/compose.html                           |   32 +-
 .../8/guide/createApp.html                         |   32 +-
 .../8/guide/dockerOverview.html                    |   32 +-
 .../8/guide/dockerfile.html                        |   32 +-
 .../8/guide/envProfiles.html                       |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../grails-docker-bootbuildimage/8/guide/ghcr.html |   32 +-
 .../8/guide/healthCheck.html                       |   32 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 .../8/guide/index.html                             |    6 +-
 .../8/guide/jvmContainer.html                      |   32 +-
 .../8/guide/nonRoot.html                           |   32 +-
 .../8/guide/testing.html                           |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/running.html                           |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/usingOnlyDocker.html                   |   30 +-
 .../4/guide/writing.html                           |   30 +-
 .../3/css/guide.css                                |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/runTests.html                          |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/runTests.html                          |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-elasticbeanstalk/4/css/guide.css     |  176 +-
 guides/grails-elasticbeanstalk/4/guide/deploy.html |   30 +-
 .../4/guide/gettingStarted.html                    |   26 +-
 guides/grails-elasticbeanstalk/4/guide/index.html  |    4 +-
 .../grails-elasticbeanstalk/4/guide/nextSteps.html |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-elasticsearch/4/css/guide.css        |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-elasticsearch/4/guide/index.html     |    4 +-
 guides/grails-elasticsearch/4/guide/summary.html   |   30 +-
 guides/grails-elasticsearch/4/guide/training.html  |   26 +-
 guides/grails-elasticsearch/4/guide/writing.html   |   30 +-
 guides/grails-email/3/css/guide.css                |  176 +-
 guides/grails-email/3/guide/gettingStarted.html    |   28 +-
 guides/grails-email/3/guide/helpWithGrails.html    |   28 +-
 guides/grails-email/3/guide/index.html             |    6 +-
 guides/grails-email/3/guide/writingTheApp.html     |   32 +-
 guides/grails-email/4/css/guide.css                |  176 +-
 guides/grails-email/4/guide/gettingStarted.html    |   26 +-
 guides/grails-email/4/guide/helpWithGrails.html    |   26 +-
 guides/grails-email/4/guide/index.html             |    4 +-
 guides/grails-email/4/guide/writingTheApp.html     |   30 +-
 guides/grails-email/8/css/guide.css                |  176 +-
 guides/grails-email/8/guide/awsSesService.html     |   32 +-
 guides/grails-email/8/guide/controller.html        |   32 +-
 guides/grails-email/8/guide/emailContract.html     |   32 +-
 guides/grails-email/8/guide/gettingStarted.html    |   32 +-
 guides/grails-email/8/guide/helpWithGrails.html    |   28 +-
 guides/grails-email/8/guide/index.html             |    6 +-
 guides/grails-email/8/guide/introduction.html      |   28 +-
 guides/grails-email/8/guide/mailConfiguration.html |   32 +-
 guides/grails-email/8/guide/requirements.html      |   32 +-
 guides/grails-email/8/guide/sendGridService.html   |   32 +-
 guides/grails-email/8/guide/smtpMail.html          |   32 +-
 guides/grails-email/8/guide/summary.html           |   32 +-
 guides/grails-email/8/guide/testing.html           |   32 +-
 guides/grails-events/3/css/guide.css               |  176 +-
 guides/grails-events/3/guide/gettingStarted.html   |   28 +-
 guides/grails-events/3/guide/helpWithGrails.html   |   28 +-
 guides/grails-events/3/guide/index.html            |    6 +-
 guides/grails-events/3/guide/runningTheApp.html    |   32 +-
 guides/grails-events/3/guide/writingTheApp.html    |   32 +-
 guides/grails-events/4/css/guide.css               |  176 +-
 guides/grails-events/4/guide/gettingStarted.html   |   26 +-
 guides/grails-events/4/guide/helpWithGrails.html   |   26 +-
 guides/grails-events/4/guide/index.html            |    4 +-
 guides/grails-events/4/guide/runningTheApp.html    |   30 +-
 guides/grails-events/4/guide/writingTheApp.html    |   30 +-
 .../8/css/guide.css                                |  176 +-
 .../8/guide/associationWidgets.html                |   32 +-
 .../8/guide/cleanCrud.html                         |   32 +-
 .../8/guide/createApp.html                         |   32 +-
 .../8/guide/customDefaultWrapper.html              |   32 +-
 .../8/guide/customTable.html                       |   32 +-
 .../8/guide/customWidgets.html                     |   32 +-
 .../8/guide/domainModel.html                       |   32 +-
 .../8/guide/fAllAndFDisplay.html                   |   32 +-
 .../8/guide/fTable.html                            |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 .../8/guide/index.html                             |    6 +-
 .../8/guide/perPropertyOverrides.html              |   32 +-
 .../8/guide/scaffolding.html                       |   32 +-
 .../8/guide/templateLookup.html                    |   32 +-
 .../8/guide/testing.html                           |   32 +-
 guides/grails-file-download-excel/3/css/guide.css  |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../grails-file-download-excel/3/guide/index.html  |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-file-download-excel/4/css/guide.css  |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../grails-file-download-excel/4/guide/index.html  |    4 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 .../grails-geb-multiple-browsers/3/css/guide.css   |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../grails-geb-multiple-browsers/4/css/guide.css   |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-github-actions-cicd/8/css/guide.css  |  176 +-
 .../grails-github-actions-cicd/8/guide/badge.html  |   32 +-
 .../8/guide/branchProtection.html                  |   32 +-
 .../grails-github-actions-cicd/8/guide/ciYml.html  |   32 +-
 .../8/guide/createApp.html                         |   32 +-
 .../8/guide/dependabot.html                        |   32 +-
 .../8/guide/functionalTests.html                   |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 .../grails-github-actions-cicd/8/guide/index.html  |    6 +-
 .../8/guide/integrationTests.html                  |   32 +-
 .../8/guide/releaseYml.html                        |   32 +-
 .../8/guide/unitTests.html                         |   32 +-
 .../8/guide/workflowOverview.html                  |   32 +-
 guides/grails-google-cloud/4/css/guide.css         |  176 +-
 guides/grails-google-cloud/4/guide/cleaningUp.html |   30 +-
 guides/grails-google-cloud/4/guide/cloudSDK.html   |   30 +-
 guides/grails-google-cloud/4/guide/cloudSQL.html   |   30 +-
 .../grails-google-cloud/4/guide/cloudStorage.html  |   30 +-
 guides/grails-google-cloud/4/guide/costs.html      |   30 +-
 .../4/guide/deployingTheApp.html                   |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/googleAppEngine.html                   |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../grails-google-cloud/4/guide/howToComplete.html |   30 +-
 guides/grails-google-cloud/4/guide/index.html      |    4 +-
 guides/grails-google-cloud/4/guide/learnMore.html  |   30 +-
 guides/grails-google-cloud/4/guide/logging.html    |   30 +-
 guides/grails-google-cloud/4/guide/training.html   |   26 +-
 .../4/guide/whatYouWillNeed.html                   |   30 +-
 .../grails-google-cloud/4/guide/writingTheApp.html |   30 +-
 guides/grails-google-home/4/css/guide.css          |  176 +-
 .../grails-google-home/4/guide/gettingStarted.html |   32 +-
 .../4/guide/googleCloudSettings.html               |   32 +-
 guides/grails-google-home/4/guide/index.html       |    6 +-
 guides/grails-google-home/4/guide/test.html        |   28 +-
 guides/grails-google-home/4/guide/training.html    |   28 +-
 .../grails-google-home/4/guide/writingTheApp.html  |   32 +-
 guides/grails-gorm-data-services/3/css/guide.css   |  176 +-
 .../3/guide/conclusion.html                        |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../grails-gorm-data-services/3/guide/index.html   |    6 +-
 .../3/guide/japqlProjection.html                   |   32 +-
 .../3/guide/japqlQuery.html                        |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/usingGormDataServices.html             |   32 +-
 .../3/guide/whyGormDataServices.html               |   32 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-gorm-data-services/4/css/guide.css   |  176 +-
 .../4/guide/conclusion.html                        |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../grails-gorm-data-services/4/guide/index.html   |    6 +-
 .../4/guide/japqlProjection.html                   |   32 +-
 .../4/guide/japqlQuery.html                        |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/usingGormDataServices.html             |   32 +-
 .../4/guide/whyGormDataServices.html               |   32 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 guides/grails-htmx/8/css/guide.css                 |  176 +-
 guides/grails-htmx/8/guide/controller.html         |   32 +-
 guides/grails-htmx/8/guide/createApp.html          |   32 +-
 guides/grails-htmx/8/guide/csrf.html               |   32 +-
 guides/grails-htmx/8/guide/gettingStarted.html     |   28 +-
 guides/grails-htmx/8/guide/helpWithGrails.html     |   28 +-
 guides/grails-htmx/8/guide/index.html              |    6 +-
 guides/grails-htmx/8/guide/indexPage.html          |   32 +-
 guides/grails-htmx/8/guide/inlineEdit.html         |   32 +-
 guides/grails-htmx/8/guide/layoutWithHtmx.html     |   32 +-
 guides/grails-htmx/8/guide/liveSearch.html         |   32 +-
 guides/grails-htmx/8/guide/rowPartial.html         |   32 +-
 guides/grails-htmx/8/guide/spaComparison.html      |   32 +-
 guides/grails-htmx/8/guide/taskDomain.html         |   32 +-
 guides/grails-htmx/8/guide/testing.html            |   32 +-
 guides/grails-htmx/8/guide/urlMappings.html        |   32 +-
 guides/grails-http-client/8/css/guide.css          |  176 +-
 .../8/guide/domainAndControllers.html              |   32 +-
 .../grails-http-client/8/guide/gettingStarted.html |   32 +-
 .../grails-http-client/8/guide/helpWithGrails.html |   28 +-
 .../8/guide/httpClientSetup.html                   |   32 +-
 guides/grails-http-client/8/guide/index.html       |    6 +-
 .../grails-http-client/8/guide/introduction.html   |   28 +-
 .../grails-http-client/8/guide/requirements.html   |   32 +-
 .../grails-http-client/8/guide/runningTheApp.html  |   32 +-
 .../grails-http-client/8/guide/searchService.html  |   32 +-
 guides/grails-http-client/8/guide/summary.html     |   32 +-
 guides/grails-http-client/8/guide/testing.html     |   32 +-
 guides/grails-javamelody/4/css/guide.css           |  176 +-
 .../grails-javamelody/4/guide/gettingStarted.html  |   30 +-
 .../grails-javamelody/4/guide/helpWithGrails.html  |   26 +-
 guides/grails-javamelody/4/guide/index.html        |    4 +-
 guides/grails-javamelody/4/guide/melody.html       |   30 +-
 guides/grails-javamelody/4/guide/nextSteps.html    |   30 +-
 .../grails-javamelody/4/guide/runningTheApp.html   |   30 +-
 guides/grails-javamelody/4/guide/training.html     |   26 +-
 guides/grails-jobrunr/8/css/custom-pdf.css         |    3 +
 guides/grails-jobrunr/8/css/custom.css             |    4 +
 guides/grails-jobrunr/8/css/font-awesome.min.css   |    4 +
 .../4 => grails-jobrunr/8}/css/guide.css           |  176 +-
 guides/grails-jobrunr/8/css/main.css               | 1281 ++++++++++
 guides/grails-jobrunr/8/css/menu.css               |   17 +
 guides/grails-jobrunr/8/css/navbar.css             |  410 +++
 guides/grails-jobrunr/8/css/pdf.css                |  160 ++
 guides/grails-jobrunr/8/css/ref.css                |  431 ++++
 guides/grails-jobrunr/8/css/screen.css             | 1608 ++++++++++++
 guides/grails-jobrunr/8/css/skin.css               |  186 ++
 guides/grails-jobrunr/8/css/stMenu.css             |  170 ++
 guides/grails-jobrunr/8/css/tools.css              |  128 +
 guides/grails-jobrunr/8/fonts/FontAwesome.otf      |  Bin 0 -> 134808 bytes
 guides/grails-jobrunr/8/fonts/archia-bold.eot      |  Bin 0 -> 15838 bytes
 guides/grails-jobrunr/8/fonts/archia-bold.ttf      |  Bin 0 -> 41696 bytes
 guides/grails-jobrunr/8/fonts/archia-bold.woff     |  Bin 0 -> 19684 bytes
 guides/grails-jobrunr/8/fonts/archia-bold.woff2    |  Bin 0 -> 14136 bytes
 guides/grails-jobrunr/8/fonts/archia-light.eot     |  Bin 0 -> 42146 bytes
 guides/grails-jobrunr/8/fonts/archia-light.ttf     |  Bin 0 -> 41864 bytes
 guides/grails-jobrunr/8/fonts/archia-light.woff    |  Bin 0 -> 19908 bytes
 guides/grails-jobrunr/8/fonts/archia-light.woff2   |  Bin 0 -> 14240 bytes
 guides/grails-jobrunr/8/fonts/archia-medium.eot    |  Bin 0 -> 16471 bytes
 guides/grails-jobrunr/8/fonts/archia-medium.ttf    |  Bin 0 -> 43528 bytes
 guides/grails-jobrunr/8/fonts/archia-medium.woff   |  Bin 0 -> 20436 bytes
 guides/grails-jobrunr/8/fonts/archia-medium.woff2  |  Bin 0 -> 14484 bytes
 guides/grails-jobrunr/8/fonts/archia-regular.eot   |  Bin 0 -> 15329 bytes
 guides/grails-jobrunr/8/fonts/archia-regular.ttf   |  Bin 0 -> 41328 bytes
 guides/grails-jobrunr/8/fonts/archia-regular.woff  |  Bin 0 -> 19244 bytes
 guides/grails-jobrunr/8/fonts/archia-regular.woff2 |  Bin 0 -> 13656 bytes
 guides/grails-jobrunr/8/fonts/archia-semibold.eot  |  Bin 0 -> 43510 bytes
 guides/grails-jobrunr/8/fonts/archia-semibold.ttf  |  Bin 0 -> 43216 bytes
 guides/grails-jobrunr/8/fonts/archia-semibold.woff |  Bin 0 -> 20240 bytes
 .../grails-jobrunr/8/fonts/archia-semibold.woff2   |  Bin 0 -> 14460 bytes
 guides/grails-jobrunr/8/fonts/archia-thin.eot      |  Bin 0 -> 15796 bytes
 guides/grails-jobrunr/8/fonts/archia-thin.ttf      |  Bin 0 -> 41700 bytes
 guides/grails-jobrunr/8/fonts/archia-thin.woff     |  Bin 0 -> 19676 bytes
 guides/grails-jobrunr/8/fonts/archia-thin.woff2    |  Bin 0 -> 14004 bytes
 .../grails-jobrunr/8/fonts/fontawesome-webfont.eot |  Bin 0 -> 165742 bytes
 .../grails-jobrunr/8/fonts/fontawesome-webfont.svg | 2671 ++++++++++++++++++++
 .../grails-jobrunr/8/fonts/fontawesome-webfont.ttf |  Bin 0 -> 165548 bytes
 .../8/fonts/fontawesome-webfont.woff               |  Bin 0 -> 98024 bytes
 .../8/fonts/fontawesome-webfont.woff2              |  Bin 0 -> 77160 bytes
 guides/grails-jobrunr/8/fonts/roboto-light.eot     |  Bin 0 -> 34598 bytes
 guides/grails-jobrunr/8/fonts/roboto-light.svg     |  655 +++++
 guides/grails-jobrunr/8/fonts/roboto-light.ttf     |  Bin 0 -> 34392 bytes
 guides/grails-jobrunr/8/fonts/roboto-light.woff    |  Bin 0 -> 20904 bytes
 guides/grails-jobrunr/8/fonts/roboto-medium.eot    |  Bin 0 -> 35182 bytes
 guides/grails-jobrunr/8/fonts/roboto-medium.svg    |  607 +++++
 guides/grails-jobrunr/8/fonts/roboto-medium.ttf    |  Bin 0 -> 34972 bytes
 guides/grails-jobrunr/8/fonts/roboto-medium.woff   |  Bin 0 -> 21184 bytes
 guides/grails-jobrunr/8/fonts/roboto-regular.eot   |  Bin 0 -> 34722 bytes
 guides/grails-jobrunr/8/fonts/roboto-regular.svg   |  635 +++++
 guides/grails-jobrunr/8/fonts/roboto-regular.ttf   |  Bin 0 -> 34524 bytes
 guides/grails-jobrunr/8/fonts/roboto-regular.woff  |  Bin 0 -> 20924 bytes
 guides/grails-jobrunr/8/guide/dependencySetup.html |  268 ++
 guides/grails-jobrunr/8/guide/durableEnqueue.html  |  272 ++
 .../8}/guide/gettingStarted.html                   |  181 +-
 .../8/guide/helpWithGrails.html                    |   64 +-
 guides/grails-jobrunr/8/guide/index.html           | 1531 +++++++++++
 guides/grails-jobrunr/8/guide/jobApis.html         |  347 +++
 guides/grails-jobrunr/8/guide/jobRequests.html     |  260 ++
 guides/grails-jobrunr/8/guide/operations.html      |  204 ++
 guides/grails-jobrunr/8/guide/pages/howto.html     |   13 +
 .../grails-jobrunr/8/guide/pages/requirements.html |   13 +
 .../8/guide/runningTheApp.html                     |  103 +-
 guides/grails-jobrunr/8/guide/single.html          |   13 +
 .../8/guide/storageConfiguration.html              |  299 +++
 guides/grails-jobrunr/8/guide/testing.html         |  516 ++++
 guides/grails-jobrunr/8/img/clippy.svg             |    3 +
 guides/grails-jobrunr/8/img/createproject_1.png    |  Bin 0 -> 37018 bytes
 guides/grails-jobrunr/8/img/createproject_2.png    |  Bin 0 -> 43373 bytes
 guides/grails-jobrunr/8/img/default/bullet.gif     |  Bin 0 -> 97 bytes
 .../8/img/default/linear-gradient-green.png        |  Bin 0 -> 285 bytes
 .../8/img/default/linear-gradient.png              |  Bin 0 -> 150 bytes
 .../8/img/default/separator-horizontal.gif         |  Bin 0 -> 43 bytes
 .../8/img/default/separator-menu.png               |  Bin 0 -> 172 bytes
 .../8/img/default/separator-vertical.gif           |  Bin 0 -> 43 bytes
 guides/grails-jobrunr/8/img/favicon.ico            |  Bin 0 -> 5558 bytes
 guides/grails-jobrunr/8/img/github.svg             |   31 +
 guides/grails-jobrunr/8/img/github_white.svg       |   19 +
 .../8/img/grails-cupsonly-logo-white.svg           |   26 +
 guides/grails-jobrunr/8/img/grails-icon.png        |  Bin 0 -> 1599 bytes
 guides/grails-jobrunr/8/img/grails.png             |  Bin 0 -> 21146 bytes
 guides/grails-jobrunr/8/img/grails.svg             |   13 +
 guides/grails-jobrunr/8/img/grails_logo.svg        |   67 +
 guides/grails-jobrunr/8/img/groovy.png             |  Bin 0 -> 7543 bytes
 guides/grails-jobrunr/8/img/heroImage.png          |  Bin 0 -> 3158 bytes
 guides/grails-jobrunr/8/img/linkedin.svg           |   11 +
 .../grails-jobrunr/8/img/multi-tenancy-modes.png   |  Bin 0 -> 123789 bytes
 guides/grails-jobrunr/8/img/note.gif               |  Bin 0 -> 569 bytes
 .../grails-jobrunr/8/img/oci-grails-services.svg   |   59 +
 guides/grails-jobrunr/8/img/oci_home_to_grails.svg |   61 +
 guides/grails-jobrunr/8/img/ocigrailsteam.png      |  Bin 0 -> 581779 bytes
 guides/grails-jobrunr/8/img/slack.svg              |   19 +
 guides/grails-jobrunr/8/img/twitter.svg            |   14 +
 guides/grails-jobrunr/8/img/warning.gif            |  Bin 0 -> 613 bytes
 guides/grails-jobrunr/8/img/youtube.svg            |   43 +
 guides/grails-jobrunr/8/index.html                 |   13 +
 guides/grails-jobrunr/8/js/classie.js              |   80 +
 guides/grails-jobrunr/8/js/clipboard.min.js        |    7 +
 guides/grails-jobrunr/8/js/docs.js                 |   57 +
 guides/grails-jobrunr/8/js/navbar.js               |    9 +
 guides/grails-jobrunr/8/js/sidebarEffects.js       |   51 +
 guides/grails-logicaldelete/3/css/guide.css        |  176 +-
 .../grails-logicaldelete/3/guide/conclusion.html   |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-logicaldelete/3/guide/index.html     |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 guides/grails-logicaldelete/3/guide/training.html  |   28 +-
 guides/grails-logicaldelete/4/css/guide.css        |  176 +-
 .../grails-logicaldelete/4/guide/conclusion.html   |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-logicaldelete/4/guide/index.html     |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/grails-logicaldelete/4/guide/training.html  |   26 +-
 guides/grails-micronaut-http/5/css/guide.css       |  176 +-
 .../5/guide/gettingStarted.html                    |   32 +-
 .../5/guide/helpWithGrails.html                    |   28 +-
 guides/grails-micronaut-http/5/guide/index.html    |    6 +-
 .../5/guide/micronautHttpClient.html               |   32 +-
 .../5/guide/runningTheApp.html                     |   32 +-
 guides/grails-micronaut-http/5/guide/test.html     |   32 +-
 guides/grails-micronaut-http/5/guide/training.html |   28 +-
 .../5/guide/writingTheApp.html                     |   32 +-
 guides/grails-micronaut-kafka/4/css/guide.css      |  176 +-
 .../4/guide/buildingAnalytics.html                 |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-micronaut-kafka/4/guide/index.html   |    4 +-
 .../4/guide/kakfaDocker.html                       |   30 +-
 .../grails-micronaut-kafka/4/guide/nextSteps.html  |   30 +-
 .../4/guide/originalAppGrails.html                 |   30 +-
 guides/grails-micronaut-kafka/4/guide/running.html |   30 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../grails-micronaut-kafka/4/guide/training.html   |   26 +-
 guides/grails-mock-basics/3/css/guide.css          |  176 +-
 .../grails-mock-basics/3/guide/gettingStarted.html |   30 +-
 guides/grails-mock-basics/3/guide/index.html       |    4 +-
 .../grails-mock-basics/3/guide/runningTheApp.html  |   26 +-
 guides/grails-mock-basics/3/guide/summary.html     |   30 +-
 guides/grails-mock-basics/3/guide/training.html    |   26 +-
 .../grails-mock-basics/3/guide/writingTheApp.html  |   30 +-
 guides/grails-mock-basics/4/css/guide.css          |  176 +-
 .../grails-mock-basics/4/guide/gettingStarted.html |   30 +-
 guides/grails-mock-basics/4/guide/index.html       |    4 +-
 .../grails-mock-basics/4/guide/runningTheApp.html  |   26 +-
 guides/grails-mock-basics/4/guide/summary.html     |   30 +-
 guides/grails-mock-basics/4/guide/training.html    |   26 +-
 .../grails-mock-basics/4/guide/writingTheApp.html  |   30 +-
 guides/grails-mock-http-server/3/css/guide.css     |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-mock-http-server/3/guide/index.html  |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../grails-mock-http-server/3/guide/training.html  |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-mock-http-server/4/css/guide.css     |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-mock-http-server/4/guide/index.html  |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../grails-mock-http-server/4/guide/training.html  |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 .../grails-mock-logging-slf4j-test/3/css/guide.css |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/mockLogging.html                       |   32 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../grails-mock-logging-slf4j-test/4/css/guide.css |  176 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/mockLogging.html                       |   32 +-
 .../4/guide/runningTheApp.html                     |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 guides/grails-multi-datasource/3/css/guide.css     |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-multi-datasource/3/guide/index.html  |    6 +-
 .../3/guide/testingTheApp.html                     |   32 +-
 .../grails-multi-datasource/3/guide/training.html  |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-multi-datasource/4/css/guide.css     |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-multi-datasource/4/guide/index.html  |    4 +-
 .../4/guide/testingTheApp.html                     |   30 +-
 .../grails-multi-datasource/4/guide/training.html  |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-multi-module/8/css/guide.css         |  176 +-
 guides/grails-multi-module/8/guide/devReload.html  |   32 +-
 .../8/guide/extractingPlugin.html                  |   32 +-
 .../grails-multi-module/8/guide/failureModes.html  |   32 +-
 .../8/guide/generateModules.html                   |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 guides/grails-multi-module/8/guide/index.html      |    6 +-
 guides/grails-multi-module/8/guide/rootBuild.html  |   32 +-
 .../grails-multi-module/8/guide/runningEach.html   |   32 +-
 guides/grails-multi-module/8/guide/sharedCore.html |   32 +-
 .../8/guide/testingPerModule.html                  |   32 +-
 guides/grails-multi-module/8/guide/webapps.html    |   32 +-
 guides/grails-multi-project-build/4/css/guide.css  |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../grails-multi-project-build/4/guide/index.html  |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-oauth-google/4/css/guide.css         |  176 +-
 guides/grails-oauth-google/4/guide/appConfig.html  |   30 +-
 .../4/guide/buildingTheApp.html                    |   30 +-
 .../4/guide/gettingStarted.html                    |   26 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-oauth-google/4/guide/index.html      |    4 +-
 guides/grails-oauth-google/4/guide/nextSteps.html  |   30 +-
 guides/grails-oauth-google/4/guide/oauth2.html     |   30 +-
 .../4/guide/runningTheCompleteApp.html             |   30 +-
 guides/grails-oauth-twitter/4/css/guide.css        |  176 +-
 guides/grails-oauth-twitter/4/guide/appConfig.html |   30 +-
 .../4/guide/buildingTheApp.html                    |   30 +-
 .../4/guide/gettingStarted.html                    |   26 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-oauth-twitter/4/guide/index.html     |    4 +-
 guides/grails-oauth-twitter/4/guide/nextSteps.html |   30 +-
 guides/grails-oauth-twitter/4/guide/oauth2.html    |   30 +-
 .../4/guide/runningTheCompleteApp.html             |   30 +-
 guides/grails-on-circleci-basics/4/css/guide.css   |  176 +-
 .../4/guide/createGitHubRepo.html                  |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../grails-on-circleci-basics/4/guide/index.html   |    4 +-
 .../4/guide/integrateCircle.html                   |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/wheretoGoFromHere.html                 |   30 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-on-github-actions/4/css/guide.css    |  176 +-
 .../4/guide/createGitHubRepo.html                  |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-on-github-actions/4/guide/index.html |    4 +-
 .../4/guide/integrateGithubActions.html            |   30 +-
 .../grails-on-github-actions/4/guide/training.html |   26 +-
 .../4/guide/wheretoGoFromHere.html                 |   30 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-on-travis-basics/3/css/guide.css     |  176 +-
 .../3/guide/createGitHubRepo.html                  |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-on-travis-basics/3/guide/index.html  |    6 +-
 .../3/guide/integrateTravis.html                   |   32 +-
 .../grails-on-travis-basics/3/guide/training.html  |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-on-travis-basics/4/css/guide.css     |  176 +-
 .../4/guide/createGitHubRepo.html                  |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-on-travis-basics/4/guide/index.html  |    4 +-
 .../4/guide/integrateTravis.html                   |   30 +-
 .../grails-on-travis-basics/4/guide/training.html  |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-quickcast-logging/4/css/guide.css    |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-quickcast-logging/4/guide/index.html |    4 +-
 .../grails-quickcast-logging/4/guide/training.html |   26 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/training.html                          |   26 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/training.html                          |   26 +-
 .../grails-quickcasts-interceptors/4/css/guide.css |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/training.html                          |   26 +-
 .../grails-quickcasts-json-views/4/css/guide.css   |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/training.html                          |   26 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/training.html                          |   26 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/training.html                          |   26 +-
 guides/grails-rabbitmq/4/css/guide.css             |  176 +-
 .../grails-rabbitmq/4/guide/buildingAnalytics.html |   30 +-
 guides/grails-rabbitmq/4/guide/gettingStarted.html |   30 +-
 guides/grails-rabbitmq/4/guide/helpWithGrails.html |   26 +-
 guides/grails-rabbitmq/4/guide/index.html          |    4 +-
 guides/grails-rabbitmq/4/guide/nextSteps.html      |   30 +-
 .../grails-rabbitmq/4/guide/originalAppGrails.html |   30 +-
 guides/grails-rabbitmq/4/guide/rabbitMQ.html       |   30 +-
 .../grails-rabbitmq/4/guide/rabbitManagement.html  |   30 +-
 guides/grails-rabbitmq/4/guide/running.html        |   30 +-
 guides/grails-rabbitmq/4/guide/runningTheApp.html  |   30 +-
 guides/grails-rabbitmq/4/guide/training.html       |   26 +-
 guides/grails-rest-library/8/css/guide.css         |  176 +-
 guides/grails-rest-library/8/guide/bulkCreate.html |   32 +-
 .../grails-rest-library/8/guide/controllers.html   |   32 +-
 guides/grails-rest-library/8/guide/createApp.html  |   32 +-
 .../grails-rest-library/8/guide/domainModel.html   |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 guides/grails-rest-library/8/guide/index.html      |    6 +-
 guides/grails-rest-library/8/guide/jsonViews.html  |   32 +-
 guides/grails-rest-library/8/guide/pagination.html |   32 +-
 .../grails-rest-library/8/guide/runningTheApp.html |   32 +-
 guides/grails-rest-library/8/guide/testing.html    |   32 +-
 .../grails-rest-library/8/guide/urlMappings.html   |   32 +-
 guides/grails-rest-library/8/guide/validation.html |   32 +-
 guides/grails-rest-library/8/guide/versioning.html |   32 +-
 guides/grails-restapi-angularjs/4/css/guide.css    |  176 +-
 .../4/guide/completeAngularApplication.html        |   32 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 guides/grails-restapi-angularjs/4/guide/index.html |    6 +-
 .../4/guide/initialAngularApplication.html         |   32 +-
 .../4/guide/runningTheApp.html                     |   32 +-
 .../grails-restapi-angularjs/4/guide/training.html |   28 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 guides/grails-scheduled/3/css/guide.css            |  176 +-
 .../grails-scheduled/3/guide/gettingStarted.html   |   32 +-
 .../grails-scheduled/3/guide/helpWithGrails.html   |   28 +-
 guides/grails-scheduled/3/guide/index.html         |    6 +-
 guides/grails-scheduled/3/guide/training.html      |   28 +-
 guides/grails-scheduled/3/guide/writing.html       |   32 +-
 guides/grails-scheduled/4/css/guide.css            |  176 +-
 .../grails-scheduled/4/guide/gettingStarted.html   |   32 +-
 .../grails-scheduled/4/guide/helpWithGrails.html   |   28 +-
 guides/grails-scheduled/4/guide/index.html         |    6 +-
 guides/grails-scheduled/4/guide/training.html      |   28 +-
 guides/grails-scheduled/4/guide/writing.html       |   32 +-
 guides/grails-schwartz/4/css/guide.css             |  176 +-
 guides/grails-schwartz/4/guide/gettingStarted.html |   30 +-
 guides/grails-schwartz/4/guide/helpWithGrails.html |   26 +-
 guides/grails-schwartz/4/guide/index.html          |    4 +-
 guides/grails-schwartz/4/guide/training.html       |   26 +-
 guides/grails-schwartz/4/guide/writing.html        |   30 +-
 guides/grails-soap/3/css/guide.css                 |  176 +-
 guides/grails-soap/3/guide/gettingStarted.html     |   32 +-
 guides/grails-soap/3/guide/helpWithGrails.html     |   28 +-
 guides/grails-soap/3/guide/index.html              |    6 +-
 guides/grails-soap/3/guide/training.html           |   28 +-
 guides/grails-soap/3/guide/writingTheApp.html      |   32 +-
 guides/grails-soap/4/css/guide.css                 |  176 +-
 guides/grails-soap/4/guide/gettingStarted.html     |   30 +-
 guides/grails-soap/4/guide/helpWithGrails.html     |   26 +-
 guides/grails-soap/4/guide/index.html              |    4 +-
 guides/grails-soap/4/guide/training.html           |   26 +-
 guides/grails-soap/4/guide/writingTheApp.html      |   30 +-
 guides/grails-spock-test-tour/8/css/guide.css      |  176 +-
 .../8/guide/controllerUnitTest.html                |   32 +-
 .../grails-spock-test-tour/8/guide/dataTest.html   |   32 +-
 .../8/guide/domainUnitTest.html                    |   32 +-
 .../8/guide/functionalTest.html                    |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 guides/grails-spock-test-tour/8/guide/index.html   |    6 +-
 .../8/guide/integrationTest.html                   |   32 +-
 .../8/guide/parameterised.html                     |   32 +-
 .../grails-spock-test-tour/8/guide/platform.html   |   32 +-
 .../grails-spock-test-tour/8/guide/testLayers.html |   32 +-
 .../3/css/guide.css                                |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-spring-security/8/css/guide.css      |  176 +-
 .../8/guide/gettingStarted.html                    |   32 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 guides/grails-spring-security/8/guide/index.html   |    6 +-
 .../8/guide/installingPlugin.html                  |   32 +-
 .../8/guide/introduction.html                      |   28 +-
 .../8/guide/requirements.html                      |   32 +-
 .../8/guide/runningTheApp.html                     |   32 +-
 .../8/guide/securingControllers.html               |   32 +-
 guides/grails-spring-security/8/guide/summary.html |   32 +-
 guides/grails-spring-security/8/guide/testing.html |   32 +-
 .../grails-spring-security/8/guide/userDomain.html |   32 +-
 guides/grails-taglib-wyswyg-trix/3/css/guide.css   |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../grails-taglib-wyswyg-trix/3/guide/index.html   |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-taglib-wyswyg-trix/4/css/guide.css   |  176 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/helpWithGrails.html                    |   28 +-
 .../grails-taglib-wyswyg-trix/4/guide/index.html   |    6 +-
 .../4/guide/runningTheApp.html                     |   32 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 guides/grails-tailwindcss/8/css/guide.css          |  176 +-
 .../grails-tailwindcss/8/guide/componentLayer.html |   32 +-
 .../8/guide/configureTailwind.html                 |   32 +-
 guides/grails-tailwindcss/8/guide/createApp.html   |   32 +-
 guides/grails-tailwindcss/8/guide/darkMode.html    |   32 +-
 guides/grails-tailwindcss/8/guide/firstPaint.html  |   32 +-
 .../grails-tailwindcss/8/guide/gettingStarted.html |   28 +-
 .../grails-tailwindcss/8/guide/gradleWiring.html   |   32 +-
 .../grails-tailwindcss/8/guide/helpWithGrails.html |   28 +-
 guides/grails-tailwindcss/8/guide/index.html       |    6 +-
 .../8/guide/installTailwind.html                   |   32 +-
 guides/grails-tailwindcss/8/guide/testing.html     |   32 +-
 .../3/css/guide.css                                |  176 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/testingTheApp.html                     |   28 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 .../4/css/guide.css                                |  176 +-
 .../4/guide/gettingStarted.html                    |   32 +-
 .../4/guide/index.html                             |    6 +-
 .../4/guide/testingTheApp.html                     |   28 +-
 .../4/guide/training.html                          |   28 +-
 .../4/guide/writingTheApp.html                     |   32 +-
 guides/grails-test-security/3/css/guide.css        |  176 +-
 guides/grails-test-security/3/guide/appendixA.html |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/grails-test-security/3/guide/index.html     |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 guides/grails-test-security/3/guide/training.html  |   28 +-
 .../3/guide/writingTheApp.html                     |   32 +-
 guides/grails-test-security/4/css/guide.css        |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-test-security/4/guide/index.html     |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/grails-test-security/4/guide/training.html  |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 guides/grails-transactional-events/8/css/guide.css |  176 +-
 .../8/guide/asyncDispatch.html                     |   32 +-
 .../8/guide/atomicRollbackTest.html                |   32 +-
 .../8/guide/createApp.html                         |   32 +-
 .../8/guide/domainModel.html                       |   32 +-
 .../8/guide/eventClass.html                        |   32 +-
 .../8/guide/gettingStarted.html                    |   28 +-
 .../8/guide/helpWithGrails.html                    |   28 +-
 .../grails-transactional-events/8/guide/index.html |    6 +-
 .../8/guide/integrationTest.html                   |   32 +-
 .../8/guide/multipleListeners.html                 |   32 +-
 .../8/guide/publishingEvents.html                  |   32 +-
 .../8/guide/registeringListeners.html              |   32 +-
 .../8/guide/sameTransactionProblem.html            |   32 +-
 .../8/guide/synchronousOrchestration.html          |   32 +-
 .../8/guide/testingThePattern.html                 |   32 +-
 .../8/guide/theProblem.html                        |   32 +-
 .../8/guide/transactionPhases.html                 |   32 +-
 .../8/guide/transactionalListener.html             |   32 +-
 .../8/guide/vsGormEvents.html                      |   32 +-
 .../8/guide/workOrderDomainModel.html              |   32 +-
 guides/grails-tvmlapp/3/css/guide.css              |  176 +-
 guides/grails-tvmlapp/3/guide/gettingStarted.html  |   32 +-
 guides/grails-tvmlapp/3/guide/helpWithGrails.html  |   28 +-
 guides/grails-tvmlapp/3/guide/index.html           |    6 +-
 guides/grails-tvmlapp/3/guide/runningTheApp.html   |   32 +-
 guides/grails-tvmlapp/3/guide/training.html        |   28 +-
 guides/grails-tvmlapp/3/guide/writingTheApp.html   |   32 +-
 .../grails-tvmlapp/3/guide/writingTheTvOSApp.html  |   32 +-
 guides/grails-tvmlapp/4/css/guide.css              |  176 +-
 guides/grails-tvmlapp/4/guide/gettingStarted.html  |   30 +-
 guides/grails-tvmlapp/4/guide/helpWithGrails.html  |   26 +-
 guides/grails-tvmlapp/4/guide/index.html           |    4 +-
 guides/grails-tvmlapp/4/guide/runningTheApp.html   |   30 +-
 guides/grails-tvmlapp/4/guide/training.html        |   26 +-
 guides/grails-tvmlapp/4/guide/writingTheApp.html   |   30 +-
 .../grails-tvmlapp/4/guide/writingTheTvOSApp.html  |   30 +-
 guides/grails-upload-file/3/css/guide.css          |  176 +-
 guides/grails-upload-file/3/guide/awsS3.html       |   32 +-
 .../grails-upload-file/3/guide/gettingStarted.html |   32 +-
 .../grails-upload-file/3/guide/helpWithGrails.html |   28 +-
 guides/grails-upload-file/3/guide/index.html       |    6 +-
 .../3/guide/pointOfInterest.html                   |   32 +-
 guides/grails-upload-file/3/guide/restaurant.html  |   32 +-
 guides/grails-upload-file/3/guide/training.html    |   28 +-
 .../grails-upload-file/3/guide/writingTheApp.html  |   32 +-
 guides/grails-upload-file/4/css/guide.css          |  176 +-
 guides/grails-upload-file/4/guide/awsS3.html       |   32 +-
 .../grails-upload-file/4/guide/gettingStarted.html |   32 +-
 .../grails-upload-file/4/guide/helpWithGrails.html |   28 +-
 guides/grails-upload-file/4/guide/index.html       |    6 +-
 .../4/guide/pointOfInterest.html                   |   32 +-
 guides/grails-upload-file/4/guide/restaurant.html  |   32 +-
 guides/grails-upload-file/4/guide/training.html    |   28 +-
 .../grails-upload-file/4/guide/writingTheApp.html  |   32 +-
 guides/grails-vite-spa/8/css/guide.css             |  176 +-
 guides/grails-vite-spa/8/guide/backend.html        |   32 +-
 guides/grails-vite-spa/8/guide/cors.html           |   32 +-
 guides/grails-vite-spa/8/guide/devMode.html        |   32 +-
 guides/grails-vite-spa/8/guide/frontend.html       |   32 +-
 guides/grails-vite-spa/8/guide/gettingStarted.html |   28 +-
 guides/grails-vite-spa/8/guide/helpWithGrails.html |   28 +-
 guides/grails-vite-spa/8/guide/index.html          |    6 +-
 guides/grails-vite-spa/8/guide/layout.html         |   32 +-
 guides/grails-vite-spa/8/guide/prodBuild.html      |   32 +-
 guides/grails-vite-spa/8/guide/spaController.html  |   32 +-
 guides/grails-vite-spa/8/guide/testing.html        |   32 +-
 guides/grails-vite-spa/8/guide/urlMappings.html    |   32 +-
 guides/grails-vite-spa/8/guide/viteConfig.html     |   32 +-
 guides/grails-vs-nodejs/4/css/guide.css            |  176 +-
 .../grails-vs-nodejs/4/guide/gettingStarted.html   |   30 +-
 .../grails-vs-nodejs/4/guide/helpWithGrails.html   |   26 +-
 guides/grails-vs-nodejs/4/guide/index.html         |    4 +-
 guides/grails-vs-nodejs/4/guide/requirements.html  |   30 +-
 guides/grails-vs-nodejs/4/guide/runningTheApp.html |   30 +-
 guides/grails-vs-nodejs/4/guide/training.html      |   26 +-
 guides/grails-vs-nodejs/4/guide/writingTheApp.html |   30 +-
 guides/grails-vue-combined/4/css/guide.css         |  176 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-vue-combined/4/guide/index.html      |    4 +-
 .../grails-vue-combined/4/guide/runningTheApp.html |   30 +-
 guides/grails-vue-combined/4/guide/training.html   |   26 +-
 .../grails-vue-combined/4/guide/writingTheApp.html |   30 +-
 guides/grails-yourkit-profiling/4/css/guide.css    |  176 +-
 .../4/guide/conclusion.html                        |   30 +-
 .../4/guide/evaluatingTheApp.html                  |   30 +-
 .../4/guide/excessiveGarbageCollection.html        |   30 +-
 .../4/guide/excessiveHeapMemory.html               |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails-yourkit-profiling/4/guide/index.html |    4 +-
 .../4/guide/inefficientDelete.html                 |   30 +-
 .../grails-yourkit-profiling/4/guide/training.html |   26 +-
 guides/grails_i18n/3/css/guide.css                 |  176 +-
 guides/grails_i18n/3/guide/gettingStarted.html     |   32 +-
 guides/grails_i18n/3/guide/helpWithGrails.html     |   28 +-
 guides/grails_i18n/3/guide/index.html              |    6 +-
 guides/grails_i18n/3/guide/runningTheApp.html      |   32 +-
 guides/grails_i18n/3/guide/training.html           |   28 +-
 guides/grails_i18n/3/guide/writingTheApp.html      |   32 +-
 guides/grails_i18n/4/css/guide.css                 |  176 +-
 guides/grails_i18n/4/guide/gettingStarted.html     |   30 +-
 guides/grails_i18n/4/guide/helpWithGrails.html     |   26 +-
 guides/grails_i18n/4/guide/index.html              |    4 +-
 guides/grails_i18n/4/guide/runningTheApp.html      |   30 +-
 guides/grails_i18n/4/guide/training.html           |   26 +-
 guides/grails_i18n/4/guide/writingTheApp.html      |   30 +-
 guides/grails_url_mappings/4/css/guide.css         |  176 +-
 guides/grails_url_mappings/4/guide/conclusion.html |   30 +-
 .../grails_url_mappings/4/guide/controllers.html   |   30 +-
 .../4/guide/creatingTheApp.html                    |   30 +-
 .../4/guide/gettingStarted.html                    |   26 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/grails_url_mappings/4/guide/index.html      |    4 +-
 .../4/guide/splitUrlMappings.html                  |   30 +-
 guides/grails_url_mappings/4/guide/testing.html    |   30 +-
 .../grails_url_mappings/4/guide/urlMappings.html   |   30 +-
 guides/index.html                                  |    2 +-
 guides/neo4j-movies/4/css/guide.css                |  176 +-
 guides/neo4j-movies/4/guide/configuration.html     |   30 +-
 guides/neo4j-movies/4/guide/gettingStarted.html    |   30 +-
 guides/neo4j-movies/4/guide/index.html             |    4 +-
 guides/neo4j-movies/4/guide/runningTheApp.html     |   26 +-
 guides/neo4j-movies/4/guide/setupData.html         |   30 +-
 guides/neo4j-movies/4/guide/training.html          |   26 +-
 guides/neo4j-movies/4/guide/writingTheApp.html     |   30 +-
 .../querying-gorm-dynamic-finders/3/css/guide.css  |  176 +-
 .../3/guide/dynamicFinderSummary.html              |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../3/guide/index.html                             |    6 +-
 .../3/guide/specialForms.html                      |   32 +-
 .../3/guide/testingTheService.html                 |   32 +-
 .../3/guide/training.html                          |   28 +-
 .../3/guide/updatingTheService.html                |   32 +-
 .../querying-gorm-dynamic-finders/4/css/guide.css  |  176 +-
 .../4/guide/dynamicFinderSummary.html              |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../4/guide/index.html                             |    4 +-
 .../4/guide/specialForms.html                      |   30 +-
 .../4/guide/testingTheService.html                 |   30 +-
 .../4/guide/training.html                          |   26 +-
 .../4/guide/updatingTheService.html                |   30 +-
 guides/react-combined/4/css/guide.css              |  176 +-
 guides/react-combined/4/guide/gettingStarted.html  |   32 +-
 guides/react-combined/4/guide/index.html           |    6 +-
 guides/react-combined/4/guide/runningTheApp.html   |   28 +-
 guides/react-combined/4/guide/training.html        |   28 +-
 guides/react-combined/4/guide/writingTheApp.html   |   32 +-
 guides/react-spring-security/4/css/guide.css       |  176 +-
 guides/react-spring-security/4/guide/client.html   |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/react-spring-security/4/guide/index.html    |    4 +-
 .../4/guide/puttingItAllTogether.html              |   30 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/react-spring-security/4/guide/server.html   |   30 +-
 guides/react-spring-security/4/guide/training.html |   26 +-
 .../4/guide/writingTheApp.html                     |   30 +-
 .../4/guide/writingTheSecurity.html                |   30 +-
 guides/rest-hibernate/3/css/guide.css              |  176 +-
 guides/rest-hibernate/3/guide/gettingStarted.html  |   32 +-
 guides/rest-hibernate/3/guide/helpWithGrails.html  |   28 +-
 guides/rest-hibernate/3/guide/index.html           |    6 +-
 guides/rest-hibernate/3/guide/runningTheApp.html   |   32 +-
 guides/rest-hibernate/3/guide/training.html        |   28 +-
 guides/rest-hibernate/3/guide/writingTheApp.html   |   32 +-
 guides/rest-hibernate/4/css/guide.css              |  176 +-
 guides/rest-hibernate/4/guide/gettingStarted.html  |   32 +-
 guides/rest-hibernate/4/guide/helpWithGrails.html  |   28 +-
 guides/rest-hibernate/4/guide/index.html           |    6 +-
 guides/rest-hibernate/4/guide/runningTheApp.html   |   32 +-
 guides/rest-hibernate/4/guide/training.html        |   28 +-
 guides/rest-hibernate/4/guide/writingTheApp.html   |   32 +-
 guides/rest-mongodb/4/css/guide.css                |  176 +-
 guides/rest-mongodb/4/guide/gettingStarted.html    |   30 +-
 guides/rest-mongodb/4/guide/helpWithGrails.html    |   26 +-
 guides/rest-mongodb/4/guide/index.html             |    4 +-
 guides/rest-mongodb/4/guide/runningTheApp.html     |   30 +-
 guides/rest-mongodb/4/guide/training.html          |   26 +-
 guides/rest-mongodb/4/guide/writingTheApp.html     |   30 +-
 guides/server-sent-events/3/css/guide.css          |  176 +-
 .../server-sent-events/3/guide/gettingStarted.html |   32 +-
 .../server-sent-events/3/guide/helpWithGrails.html |   28 +-
 guides/server-sent-events/3/guide/index.html       |    6 +-
 .../server-sent-events/3/guide/runningTheApp.html  |   32 +-
 guides/server-sent-events/3/guide/training.html    |   28 +-
 .../server-sent-events/3/guide/writingTheApp.html  |   32 +-
 guides/server-sent-events/4/css/guide.css          |  176 +-
 .../server-sent-events/4/guide/gettingStarted.html |   32 +-
 .../server-sent-events/4/guide/helpWithGrails.html |   28 +-
 guides/server-sent-events/4/guide/index.html       |    6 +-
 .../server-sent-events/4/guide/runningTheApp.html  |   32 +-
 guides/server-sent-events/4/guide/training.html    |   28 +-
 .../server-sent-events/4/guide/writingTheApp.html  |   32 +-
 guides/tags/async.html                             |    2 +-
 .../{transactions.html => background-jobs.html}    |    8 +-
 guides/tags/gorm.html                              |    2 +-
 guides/tags/grails8.html                           |   44 +-
 guides/tags/{transactions.html => jobrunr.html}    |    8 +-
 guides/tags/scheduling.html                        |    2 +-
 guides/tags/spring-boot.html                       |    2 +-
 guides/tags/testing.html                           |    2 +-
 guides/tags/transactions.html                      |    2 +-
 guides/using-hal-with-json-views/3/css/guide.css   |  176 +-
 .../3/guide/buildingApi.html                       |   32 +-
 .../3/guide/explorableAPI.html                     |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 guides/using-hal-with-json-views/3/guide/hal.html  |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 .../using-hal-with-json-views/3/guide/index.html   |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 .../3/guide/training.html                          |   28 +-
 guides/using-hal-with-json-views/4/css/guide.css   |  176 +-
 .../4/guide/buildingApi.html                       |   30 +-
 .../4/guide/explorableAPI.html                     |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 guides/using-hal-with-json-views/4/guide/hal.html  |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 .../using-hal-with-json-views/4/guide/index.html   |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../4/guide/training.html                          |   26 +-
 guides/using-the-react-profile/4/css/guide.css     |  176 +-
 .../4/guide/generateTheApp.html                    |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/using-the-react-profile/4/guide/index.html  |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 .../using-the-react-profile/4/guide/training.html  |   26 +-
 guides/using-the-vue-profile/3/css/guide.css       |  176 +-
 .../3/guide/generateTheApp.html                    |   32 +-
 .../3/guide/gettingStarted.html                    |   32 +-
 .../3/guide/helpWithGrails.html                    |   28 +-
 guides/using-the-vue-profile/3/guide/index.html    |    6 +-
 .../3/guide/runningTheApp.html                     |   32 +-
 guides/using-the-vue-profile/3/guide/training.html |   28 +-
 guides/using-the-vue-profile/4/css/guide.css       |  176 +-
 .../4/guide/generateTheApp.html                    |   30 +-
 .../4/guide/gettingStarted.html                    |   30 +-
 .../4/guide/helpWithGrails.html                    |   26 +-
 guides/using-the-vue-profile/4/guide/index.html    |    4 +-
 .../4/guide/runningTheApp.html                     |   30 +-
 guides/using-the-vue-profile/4/guide/training.html |   26 +-
 guides/vaadin-grails/4/css/guide.css               |  176 +-
 guides/vaadin-grails/4/guide/aboutVaadin.html      |   32 +-
 guides/vaadin-grails/4/guide/gettingStarted.html   |   32 +-
 guides/vaadin-grails/4/guide/helpWithGrails.html   |   28 +-
 guides/vaadin-grails/4/guide/index.html            |    6 +-
 guides/vaadin-grails/4/guide/nextSteps.html        |   32 +-
 guides/vaadin-grails/4/guide/runningTheApp.html    |   32 +-
 guides/vaadin-grails/4/guide/training.html         |   28 +-
 guides/vaadin-grails/4/guide/writingTheApp.html    |   32 +-
 guides/versions/3.html                             |    2 +-
 guides/versions/4.html                             |    2 +-
 guides/versions/5.html                             |    2 +-
 guides/versions/6.html                             |    2 +-
 guides/versions/8.html                             |    2 +-
 rss.xml                                            |    2 +-
 sitemap.xml                                        |    2 +-
 1317 files changed, 53991 insertions(+), 12630 deletions(-)

diff --git a/foundation/minutes.xml b/foundation/minutes.xml
index 97ae2270378..62c1832494d 100644
--- a/foundation/minutes.xml
+++ b/foundation/minutes.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Foundation | Grails Framework</title><link>https://grails.apache.org</link><description>A powerful Groovy-based web application framework for the JVM built on top of Spring Boot</description><pubDate>Wed, 19 Aug 2026 18:49:16 GMT</pubDate><item><title>Technology Advisory Board Meeting</title><link>https://grails.apache.org/foundation/minutes/20221128-tab.html< [...]
+<?xml version="1.0" encoding="UTF-8"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Foundation | Grails Framework</title><link>https://grails.apache.org</link><description>A powerful Groovy-based web application framework for the JVM built on top of Spring Boot</description><pubDate>Wed, 19 Aug 2026 20:15:47 GMT</pubDate><item><title>Technology Advisory Board Meeting</title><link>https://grails.apache.org/foundation/minutes/20221128-tab.html< [...]
 <h3>Meeting Attendance:</h3>
 <ul>
 <li><strong>Puneet Behl</strong> - Grails Product Development Lead at Object Computing</li>
diff --git a/foundation/minutes/20210321-tab.html b/foundation/minutes/20210321-tab.html
index 39257f9a6e3..12a48f3e614 100644
--- a/foundation/minutes/20210321-tab.html
+++ b/foundation/minutes/20210321-tab.html
@@ -239,17 +239,17 @@ community events</p>
         <h3>2022</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@5648d7d7</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@dcb6276</minutesLink>
             <parseDate>Nov 28, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@37ac6069</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@65038941</minutesLink>
             <parseDate>Jul 07, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@2a51abc</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@2480a668</minutesLink>
             <parseDate>Mar 23, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
@@ -257,12 +257,12 @@ community events</p>
         <h3>2021</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@53effcde</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@87010da</minutesLink>
             <parseDate>Dec 17, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@3da8b17c</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@4f430fb2</minutesLink>
             <parseDate>Mar 21, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
diff --git a/foundation/minutes/20211217-tab.html b/foundation/minutes/20211217-tab.html
index 6617c6fd473..b0f6abaa390 100644
--- a/foundation/minutes/20211217-tab.html
+++ b/foundation/minutes/20211217-tab.html
@@ -281,17 +281,17 @@
         <h3>2022</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@5648d7d7</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@dcb6276</minutesLink>
             <parseDate>Nov 28, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@37ac6069</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@65038941</minutesLink>
             <parseDate>Jul 07, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@2a51abc</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@2480a668</minutesLink>
             <parseDate>Mar 23, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
@@ -299,12 +299,12 @@
         <h3>2021</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@53effcde</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@87010da</minutesLink>
             <parseDate>Dec 17, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@3da8b17c</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@4f430fb2</minutesLink>
             <parseDate>Mar 21, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
diff --git a/foundation/minutes/20220323-tab.html b/foundation/minutes/20220323-tab.html
index f3c28f1b7e4..09e48e84d78 100644
--- a/foundation/minutes/20220323-tab.html
+++ b/foundation/minutes/20220323-tab.html
@@ -324,17 +324,17 @@
         <h3>2022</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@5648d7d7</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@dcb6276</minutesLink>
             <parseDate>Nov 28, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@37ac6069</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@65038941</minutesLink>
             <parseDate>Jul 07, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@2a51abc</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@2480a668</minutesLink>
             <parseDate>Mar 23, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
@@ -342,12 +342,12 @@
         <h3>2021</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@53effcde</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@87010da</minutesLink>
             <parseDate>Dec 17, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@3da8b17c</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@4f430fb2</minutesLink>
             <parseDate>Mar 21, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
diff --git a/foundation/minutes/20220711-tab.html b/foundation/minutes/20220711-tab.html
index 43cdf14c7c9..d9259fcc335 100644
--- a/foundation/minutes/20220711-tab.html
+++ b/foundation/minutes/20220711-tab.html
@@ -232,17 +232,17 @@
         <h3>2022</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@5648d7d7</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@dcb6276</minutesLink>
             <parseDate>Nov 28, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@37ac6069</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@65038941</minutesLink>
             <parseDate>Jul 07, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@2a51abc</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@2480a668</minutesLink>
             <parseDate>Mar 23, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
@@ -250,12 +250,12 @@
         <h3>2021</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@53effcde</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@87010da</minutesLink>
             <parseDate>Dec 17, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@3da8b17c</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@4f430fb2</minutesLink>
             <parseDate>Mar 21, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
diff --git a/foundation/minutes/20221128-tab.html b/foundation/minutes/20221128-tab.html
index 617710810e1..92de305c0ac 100644
--- a/foundation/minutes/20221128-tab.html
+++ b/foundation/minutes/20221128-tab.html
@@ -271,17 +271,17 @@
         <h3>2022</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@5648d7d7</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@dcb6276</minutesLink>
             <parseDate>Nov 28, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@37ac6069</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@65038941</minutesLink>
             <parseDate>Jul 07, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@2a51abc</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@2480a668</minutesLink>
             <parseDate>Mar 23, 2022</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
@@ -289,12 +289,12 @@
         <h3>2021</h3>
         <ul>
           <li>
-            <minutesLink>website.model.HtmlMinutes@53effcde</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@87010da</minutesLink>
             <parseDate>Dec 17, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
           <li>
-            <minutesLink>website.model.HtmlMinutes@3da8b17c</minutesLink>
+            <minutesLink>website.model.HtmlMinutes@4f430fb2</minutesLink>
             <parseDate>Mar 21, 2021</parseDate>
             <a href='minutesLink'>MMM dd - Technology Advisory Board Meeting</a>
           </li>
diff --git a/foundation/minutes/index.html b/foundation/minutes/index.html
index 442c9e0f5ef..97fbb76c347 100644
--- a/foundation/minutes/index.html
+++ b/foundation/minutes/index.html
@@ -126,7 +126,7 @@
     </div>
 </header>
 
-<article><div class='header-bar chalices-bg'><div class='content'><h1><a href='https://grails.apache.org/foundation/index.html'>Foundation</a></h1></div></div><div class='clear content container'><h3 class='column-header'>Meeting Minutes Archive</h3><div class='light'><div class='padded' style='padding-top: 0;'><div class="three-columns"><div class='column'><article class='blog-card' style='margin-bottom: 0; background-image: url(https://grails.apache.org/images/grails-blog-index-6.png)' [...]
+<article><div class='header-bar chalices-bg'><div class='content'><h1><a href='https://grails.apache.org/foundation/index.html'>Foundation</a></h1></div></div><div class='clear content container'><h3 class='column-header'>Meeting Minutes Archive</h3><div class='light'><div class='padded' style='padding-top: 0;'><div class="three-columns"><div class='column'><article class='blog-card' style='margin-bottom: 0; background-image: url(https://grails.apache.org/images/grails-blog-index-6.png)' [...]
 <footer>
     <div class='content'>
         <div class='apache-grails'>
diff --git a/guides/_redirects.json b/guides/_redirects.json
index ecb713c56e4..24e7c504769 100644
--- a/guides/_redirects.json
+++ b/guides/_redirects.json
@@ -1,11 +1,27 @@
 {
     "version": 1,
-    "generated": "2026-08-19T18:50:32.257468550Z",
+    "generated": "2026-08-19T20:17:15.682124017Z",
     "from_base": "https://guides.grails.org",
     "to_base": "https://grails.apache.org/guides",
-    "count": 1785,
+    "count": 1789,
     "description": "Mapping of legacy guides.grails.org URLs to current canonical URLs on grails.apache.org/guides. Each from path is relative to from_base; each to URL is absolute. Mirrors the meta-refresh stubs deployed to grails-guides/grails-guides-template gh-pages.",
     "redirects": [
+        {
+            "from": "/grails-jobrunr/guide/index.html",
+            "to": "https://grails.apache.org/guides/grails-jobrunr/8/guide/index.html"
+        },
+        {
+            "from": "/grails-jobrunr/guide/single.html",
+            "to": "https://grails.apache.org/guides/grails-jobrunr/8/guide/index.html"
+        },
+        {
+            "from": "/grails-jobrunr/index.html",
+            "to": "https://grails.apache.org/guides/grails-jobrunr/8/guide/index.html"
+        },
+        {
+            "from": "/grails8/grails-jobrunr/guide/index.html",
+            "to": "https://grails.apache.org/guides/grails-jobrunr/8/guide/index.html"
+        },
         {
             "from": "/adding-commit-info/guide/index.html",
             "to": "https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"
diff --git a/guides/adding-commit-info/3/css/guide.css b/guides/adding-commit-info/3/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/adding-commit-info/3/css/guide.css
+++ b/guides/adding-commit-info/3/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/adding-commit-info/3/guide/configuration.html b/guides/adding-commit-info/3/guide/configuration.html
index 85cfc1a2c1a..0fa870bfcef 100644
--- a/guides/adding-commit-info/3/guide/configuration.html
+++ b/guides/adding-commit-info/3/guide/configuration.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Configuration</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/tldr.html"><strong>7</strong><span>tl;dr (Too long; didn't read)</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/tldr.html"><strong>7</strong><span>tl;dr (Too long; didn't read)</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -328,8 +332,7 @@ Consult the Spring <a href="https://grails-plugins.github.io/grails-spring-secur
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -342,17 +345,18 @@ Consult the Spring <a href="https://grails-plugins.github.io/grails-spring-secur
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/3/guide/gettingStarted.html b/guides/adding-commit-info/3/guide/gettingStarted.html
index d240dcea9ee..f1e8deea2f0 100644
--- a/guides/adding-commit-info/3/guide/gettingStarted.html
+++ b/guides/adding-commit-info/3/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/history.html"><strong>3</strong><span>History</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/history.html"><strong>3</strong><span>History</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -241,8 +245,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -255,17 +258,18 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/3/guide/history.html b/guides/adding-commit-info/3/guide/history.html
index 04147132ce4..3949f217e49 100644
--- a/guides/adding-commit-info/3/guide/history.html
+++ b/guides/adding-commit-info/3/guide/history.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 History</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -206,8 +210,7 @@ The build-info plugin works by utilizing the environment variables available via
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -220,17 +223,18 @@ The build-info plugin works by utilizing the environment variables available via
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/3/guide/index.html b/guides/adding-commit-info/3/guide/index.html
index 39cbb003428..ad6079d358b 100644
--- a/guides/adding-commit-info/3/guide/index.html
+++ b/guides/adding-commit-info/3/guide/index.html
@@ -117,13 +117,13 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/adding-commit-info.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
         <script>var clipboard = new Clipboard('.clippy');</script>
-        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/adding-commit-info/archive/master.zip&quot;">Download ZIP</button>
+        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/adding-commit-info/archive/grails3.zip&quot;">Download ZIP</button>
         
         <div id="table-of-content">
             <h3>Table of Contents</h3>
diff --git a/guides/adding-commit-info/3/guide/runningTheApp.html b/guides/adding-commit-info/3/guide/runningTheApp.html
index a342824b48d..00c431da2cf 100644
--- a/guides/adding-commit-info/3/guide/runningTheApp.html
+++ b/guides/adding-commit-info/3/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/configuration.html"><strong>6</strong><span>Configuration</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/configuration.html"><strong>6</strong><span>Configuration</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -126,8 +130,7 @@ and you should see some JSON formatted info like:</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -140,17 +143,18 @@ and you should see some JSON formatted info like:</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/3/guide/tldr.html b/guides/adding-commit-info/3/guide/tldr.html
index 8c6e00430ef..847b6742f70 100644
--- a/guides/adding-commit-info/3/guide/tldr.html
+++ b/guides/adding-commit-info/3/guide/tldr.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 tl;dr (Too long; didn't read)</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/configuration.html">&lt;&lt; <strong>6</strong><span>Configuration</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/configuration.html">&lt;&lt; <strong>6</strong><span>Configuration</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -119,8 +123,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -133,17 +136,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/3/guide/training.html b/guides/adding-commit-info/3/guide/training.html
index c4691edfb9a..29112602306 100644
--- a/guides/adding-commit-info/3/guide/training.html
+++ b/guides/adding-commit-info/3/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -105,8 +109,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -119,17 +122,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/3/guide/writingTheApp.html b/guides/adding-commit-info/3/guide/writingTheApp.html
index 15054f124ae..24f70b6056e 100644
--- a/guides/adding-commit-info/3/guide/writingTheApp.html
+++ b/guides/adding-commit-info/3/guide/writingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/history.html">&lt;&lt; <strong>3</strong><span>History</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/history.html">&lt;&lt; <strong>3</strong><span>History</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -278,8 +282,7 @@ The endpoints are disabled by default so the first step is to enabled them.</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -292,17 +295,18 @@ The endpoints are disabled by default so the first step is to enabled them.</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/css/guide.css b/guides/adding-commit-info/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/adding-commit-info/4/css/guide.css
+++ b/guides/adding-commit-info/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/adding-commit-info/4/guide/configuration.html b/guides/adding-commit-info/4/guide/configuration.html
index ef35eaeaa15..52a9d429ad6 100644
--- a/guides/adding-commit-info/4/guide/configuration.html
+++ b/guides/adding-commit-info/4/guide/configuration.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Configuration</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/tldr.html"><strong>7</strong><span>tl;dr (Too long; didn't read)</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/tldr.html"><strong>7</strong><span>tl;dr (Too long; didn't read)</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -340,8 +344,7 @@ Consult the Spring <a href="https://grails-plugins.github.io/grails-spring-secur
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -354,17 +357,18 @@ Consult the Spring <a href="https://grails-plugins.github.io/grails-spring-secur
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/guide/gettingStarted.html b/guides/adding-commit-info/4/guide/gettingStarted.html
index 18fa16fb14c..2234617486b 100644
--- a/guides/adding-commit-info/4/guide/gettingStarted.html
+++ b/guides/adding-commit-info/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/history.html"><strong>3</strong><span>History</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/history.html"><strong>3</strong><span>History</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -241,8 +245,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -255,17 +258,18 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/guide/history.html b/guides/adding-commit-info/4/guide/history.html
index 4532fe4f3f8..a2663eefd24 100644
--- a/guides/adding-commit-info/4/guide/history.html
+++ b/guides/adding-commit-info/4/guide/history.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 History</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -206,8 +210,7 @@ The build-info plugin works by utilizing the environment variables available via
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -220,17 +223,18 @@ The build-info plugin works by utilizing the environment variables available via
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/guide/index.html b/guides/adding-commit-info/4/guide/index.html
index 5901fbaf88f..50ee21a6a50 100644
--- a/guides/adding-commit-info/4/guide/index.html
+++ b/guides/adding-commit-info/4/guide/index.html
@@ -117,13 +117,13 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/adding-commit-info.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
         <script>var clipboard = new Clipboard('.clippy');</script>
-        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/adding-commit-info/archive/master.zip&quot;">Download ZIP</button>
+        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/adding-commit-info/archive/grails4.zip&quot;">Download ZIP</button>
         
         <div id="table-of-content">
             <h3>Table of Contents</h3>
diff --git a/guides/adding-commit-info/4/guide/runningTheApp.html b/guides/adding-commit-info/4/guide/runningTheApp.html
index 1cd6605e2b3..3023939c682 100644
--- a/guides/adding-commit-info/4/guide/runningTheApp.html
+++ b/guides/adding-commit-info/4/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/configuration.html"><strong>6</strong><span>Configuration</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/configuration.html"><strong>6</strong><span>Configuration</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -126,8 +130,7 @@ and you should see some JSON formatted info like:</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -140,17 +143,18 @@ and you should see some JSON formatted info like:</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/guide/tldr.html b/guides/adding-commit-info/4/guide/tldr.html
index 935e1cf04fa..b407dd8367e 100644
--- a/guides/adding-commit-info/4/guide/tldr.html
+++ b/guides/adding-commit-info/4/guide/tldr.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 tl;dr (Too long; didn't read)</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/configuration.html">&lt;&lt; <strong>6</strong><span>Configuration</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/configuration.html">&lt;&lt; <strong>6</strong><span>Configuration</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -119,8 +123,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -133,17 +136,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/guide/training.html b/guides/adding-commit-info/4/guide/training.html
index f46b675c4ac..f1bd1ddd2b9 100644
--- a/guides/adding-commit-info/4/guide/training.html
+++ b/guides/adding-commit-info/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -105,8 +109,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -119,17 +122,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/adding-commit-info/4/guide/writingTheApp.html b/guides/adding-commit-info/4/guide/writingTheApp.html
index 92a7f0e1c05..02e2d98d74a 100644
--- a/guides/adding-commit-info/4/guide/writingTheApp.html
+++ b/guides/adding-commit-info/4/guide/writingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/adding-commit-info/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/history.html">&lt;&lt; <strong>3</strong><span>History</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/history.html">&lt;&lt; <strong>3</strong><span>History</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -278,8 +282,7 @@ The endpoints are disabled by default so the first step is to enabled them.</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/adding-commit-info"><img src="https://travis-ci.org/grails-guides/adding-commit-info.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/adding-commit-info">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -292,17 +295,18 @@ The endpoints are disabled by default so the first step is to enabled them.</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/adding-commit-info.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/adding-commit-info/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/adding-commit-info/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/angular2-combined/4/css/guide.css b/guides/angular2-combined/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/angular2-combined/4/css/guide.css
+++ b/guides/angular2-combined/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/angular2-combined/4/guide/gettingStarted.html b/guides/angular2-combined/4/guide/gettingStarted.html
index 1415cb6e8a4..945066bf678 100644
--- a/guides/angular2-combined/4/guide/gettingStarted.html
+++ b/guides/angular2-combined/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/angular2-combined/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -60,13 +62,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>3</strong><span>Writing the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>3</strong><span>Writing the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -206,8 +210,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/angular2-combined"><img src="https://travis-ci.org/grails-guides/angular2-combined.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/angular2-combined">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -220,13 +223,14 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/angular2-combined/4/guide/helpWithGrails.html b/guides/angular2-combined/4/guide/helpWithGrails.html
index 770beabd598..85b5880e72b 100644
--- a/guides/angular2-combined/4/guide/helpWithGrails.html
+++ b/guides/angular2-combined/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/angular2-combined/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -60,11 +62,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>4</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>4</strong><span>Running the Application</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -118,8 +122,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/angular2-combined"><img src="https://travis-ci.org/grails-guides/angular2-combined.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/angular2-combined">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -132,13 +135,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/angular2-combined/4/guide/index.html b/guides/angular2-combined/4/guide/index.html
index 3f3b36f3dc4..9e53e5195a5 100644
--- a/guides/angular2-combined/4/guide/index.html
+++ b/guides/angular2-combined/4/guide/index.html
@@ -117,8 +117,8 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/angular2-combined.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/angular2-combined.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/angular2-combined.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
diff --git a/guides/angular2-combined/4/guide/runningTheApp.html b/guides/angular2-combined/4/guide/runningTheApp.html
index 6b62f07bcc9..66d0bd82f1f 100644
--- a/guides/angular2-combined/4/guide/runningTheApp.html
+++ b/guides/angular2-combined/4/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/angular2-combined/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -60,13 +62,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>3</strong><span>Writing the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>3</strong><span>Writing the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>5</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>5</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -101,8 +105,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/angular2-combined"><img src="https://travis-ci.org/grails-guides/angular2-combined.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/angular2-combined">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -115,13 +118,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/angular2-combined/4/guide/training.html b/guides/angular2-combined/4/guide/training.html
index 0cce030f3bb..3ceb02613e3 100644
--- a/guides/angular2-combined/4/guide/training.html
+++ b/guides/angular2-combined/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/angular2-combined/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -60,11 +62,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -99,8 +103,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/angular2-combined"><img src="https://travis-ci.org/grails-guides/angular2-combined.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/angular2-combined">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -113,13 +116,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/angular2-combined/4/guide/writingTheApp.html b/guides/angular2-combined/4/guide/writingTheApp.html
index a4a0fa406ea..c35fd52d57e 100644
--- a/guides/angular2-combined/4/guide/writingTheApp.html
+++ b/guides/angular2-combined/4/guide/writingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Writing the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/angular2-combined/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -60,13 +62,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>4</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>4</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -310,8 +314,7 @@ clean {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/angular2-combined"><img src="https://travis-ci.org/grails-guides/angular2-combined.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/angular2-combined">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -324,13 +327,14 @@ clean {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/angular2-combined.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/css/guide.css b/guides/building-a-react-app/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/building-a-react-app/4/css/guide.css
+++ b/guides/building-a-react-app/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/building-a-react-app/4/guide/gettingStarted.html b/guides/building-a-react-app/4/guide/gettingStarted.html
index 1adbeb7fa18..aa45c5d8582 100644
--- a/guides/building-a-react-app/4/guide/gettingStarted.html
+++ b/guides/building-a-react-app/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>3</strong><span>Writing the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>3</strong><span>Writing the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -215,8 +219,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -229,13 +232,14 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/guide/helpWithGrails.html b/guides/building-a-react-app/4/guide/helpWithGrails.html
index cbb52c07229..2c3fca2c66e 100644
--- a/guides/building-a-react-app/4/guide/helpWithGrails.html
+++ b/guides/building-a-react-app/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/nextSteps.html">&lt;&lt; <strong>6</strong><span>Next Steps</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/nextSteps.html">&lt;&lt; <strong>6</strong><span>Next Steps</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -124,8 +128,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -138,13 +141,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/guide/index.html b/guides/building-a-react-app/4/guide/index.html
index efbc500ffcc..a4bccf063b4 100644
--- a/guides/building-a-react-app/4/guide/index.html
+++ b/guides/building-a-react-app/4/guide/index.html
@@ -117,8 +117,8 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/building-a-react-app.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
diff --git a/guides/building-a-react-app/4/guide/nextSteps.html b/guides/building-a-react-app/4/guide/nextSteps.html
index 3aa8b21327e..a3bb419519e 100644
--- a/guides/building-a-react-app/4/guide/nextSteps.html
+++ b/guides/building-a-react-app/4/guide/nextSteps.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Next Steps</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingReactComponents.html">&lt;&lt; <strong>5</strong><span>Writing our React components</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingReactComponents.html">&lt;&lt; <strong>5</strong><span>Writing our React components</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>7</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>7</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -117,8 +121,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -131,13 +134,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/guide/runningTheApp.html b/guides/building-a-react-app/4/guide/runningTheApp.html
index 10abd337e1d..c02a591cc6d 100644
--- a/guides/building-a-react-app/4/guide/runningTheApp.html
+++ b/guides/building-a-react-app/4/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>3</strong><span>Writing the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>3</strong><span>Writing the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingReactComponents.html"><strong>5</strong><span>Writing our React components</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingReactComponents.html"><strong>5</strong><span>Writing our React components</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -280,8 +284,7 @@ Connection: close
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -294,13 +297,14 @@ Connection: close
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/guide/training.html b/guides/building-a-react-app/4/guide/training.html
index 8933541fcf6..e2359f60104 100644
--- a/guides/building-a-react-app/4/guide/training.html
+++ b/guides/building-a-react-app/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -105,8 +109,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -119,13 +122,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/guide/writingReactComponents.html b/guides/building-a-react-app/4/guide/writingReactComponents.html
index eeafa112fe8..d8bfa8647ff 100644
--- a/guides/building-a-react-app/4/guide/writingReactComponents.html
+++ b/guides/building-a-react-app/4/guide/writingReactComponents.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Writing our React components</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>4</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>4</strong><span>Running the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/nextSteps.html"><strong>6</strong><span>Next Steps</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/nextSteps.html"><strong>6</strong><span>Next Steps</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -792,8 +796,7 @@ ReactDOM.render(&lt;Garage /&gt;, document.getElementById(<span class="string"><
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -806,13 +809,14 @@ ReactDOM.render(&lt;Garage /&gt;, document.getElementById(<span class="string"><
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-react-app/4/guide/writingTheApp.html b/guides/building-a-react-app/4/guide/writingTheApp.html
index a636b32b8ff..5a4094d94da 100644
--- a/guides/building-a-react-app/4/guide/writingTheApp.html
+++ b/guides/building-a-react-app/4/guide/writingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Writing the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-react-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>4</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>4</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -231,8 +235,7 @@ $ grails create-domain-class demo.Model</code></pre>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-react-app"><img src="https://travis-ci.org/grails-guides/building-a-react-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-react-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -245,13 +248,14 @@ $ grails create-domain-class demo.Model</code></pre>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-react-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/css/guide.css b/guides/building-a-vue-app/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/building-a-vue-app/4/css/guide.css
+++ b/guides/building-a-vue-app/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/building-a-vue-app/4/guide/gettingStarted.html b/guides/building-a-vue-app/4/guide/gettingStarted.html
index b826d7acc45..f416d9cc381 100644
--- a/guides/building-a-vue-app/4/guide/gettingStarted.html
+++ b/guides/building-a-vue-app/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>3</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>3</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -215,8 +219,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -229,13 +232,14 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/guide/helpWithGrails.html b/guides/building-a-vue-app/4/guide/helpWithGrails.html
index 79baa9504b2..7273812b2be 100644
--- a/guides/building-a-vue-app/4/guide/helpWithGrails.html
+++ b/guides/building-a-vue-app/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/nextSteps.html">&lt;&lt; <strong>6</strong><span>Next Steps</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/nextSteps.html">&lt;&lt; <strong>6</strong><span>Next Steps</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -124,8 +128,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -138,13 +141,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/guide/index.html b/guides/building-a-vue-app/4/guide/index.html
index ae943c46fdc..6ccb3e10822 100644
--- a/guides/building-a-vue-app/4/guide/index.html
+++ b/guides/building-a-vue-app/4/guide/index.html
@@ -117,8 +117,8 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/building-a-vue-app.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
diff --git a/guides/building-a-vue-app/4/guide/nextSteps.html b/guides/building-a-vue-app/4/guide/nextSteps.html
index 2562ca01575..6d0e68088d4 100644
--- a/guides/building-a-vue-app/4/guide/nextSteps.html
+++ b/guides/building-a-vue-app/4/guide/nextSteps.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Next Steps</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheClient.html">&lt;&lt; <strong>5</strong><span>Building the Client</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheClient.html">&lt;&lt; <strong>5</strong><span>Building the Client</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>7</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>7</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -117,8 +121,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -131,13 +134,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/guide/runningTheApp.html b/guides/building-a-vue-app/4/guide/runningTheApp.html
index 76d5a093241..b6aec5e16b2 100644
--- a/guides/building-a-vue-app/4/guide/runningTheApp.html
+++ b/guides/building-a-vue-app/4/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheServer.html"><strong>4</strong><span>Building the Server</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheServer.html"><strong>4</strong><span>Building the Server</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -134,8 +138,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -148,13 +151,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/guide/training.html b/guides/building-a-vue-app/4/guide/training.html
index 7eb81efc663..acafce57cb0 100644
--- a/guides/building-a-vue-app/4/guide/training.html
+++ b/guides/building-a-vue-app/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,11 +68,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -105,8 +109,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -119,13 +122,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/guide/writingTheClient.html b/guides/building-a-vue-app/4/guide/writingTheClient.html
index e67e8b79569..372b0982e3a 100644
--- a/guides/building-a-vue-app/4/guide/writingTheClient.html
+++ b/guides/building-a-vue-app/4/guide/writingTheClient.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Building the Client</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheServer.html">&lt;&lt; <strong>4</strong><span>Building the Server</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheServer.html">&lt;&lt; <strong>4</strong><span>Building the Server</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/nextSteps.html"><strong>6</strong><span>Next Steps</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/nextSteps.html"><strong>6</strong><span>Next Steps</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -1061,8 +1065,7 @@ Vue.use(Router)
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -1075,13 +1078,14 @@ Vue.use(Router)
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-a-vue-app/4/guide/writingTheServer.html b/guides/building-a-vue-app/4/guide/writingTheServer.html
index c68ffc849f7..71ab7348610 100644
--- a/guides/building-a-vue-app/4/guide/writingTheServer.html
+++ b/guides/building-a-vue-app/4/guide/writingTheServer.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Building the Server</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-a-vue-app/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Training</span></a>
                         </div>
@@ -66,13 +68,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>3</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>3</strong><span>Running the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheClient.html"><strong>5</strong><span>Building the Client</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheClient.html"><strong>5</strong><span>Building the Client</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -475,8 +479,7 @@ Connection: close
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-a-vue-app"><img src="https://travis-ci.org/grails-guides/building-a-vue-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-a-vue-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -489,13 +492,14 @@ Connection: close
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-a-vue-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/css/guide.css b/guides/building-an-android-client-powered-by-a-grails-backend/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/css/guide.css
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/conclusion.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/conclusion.html
index d5e7b65a1dd..3456ab1d4e0 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/conclusion.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/conclusion.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 Conclusion</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/version2.html">&lt;&lt; <strong>6</strong><span>API version 2.0</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/version2.html">&lt;&lt; <strong>6</strong><span>API version 2.0</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>8</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>8</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -107,8 +111,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -121,13 +124,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/gettingStarted.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
index cd0737d2ea9..55e40fc9c9b 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/overview.html"><strong>3</strong><span>Overview</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/overview.html"><strong>3</strong><span>Overview</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -275,8 +279,7 @@ You can go right to the completed version 2 of the Android example if you <code>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -289,13 +292,14 @@ You can go right to the completed version 2 of the Android example if you <code>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
index 356746e92fd..053dfbfcd6d 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>8 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,11 +71,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/conclusion.html">&lt;&lt; <strong>7</strong><span>Conclusion</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/conclusion.html">&lt;&lt; <strong>7</strong><span>Conclusion</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -127,8 +131,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -141,13 +144,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html
index d8fb55e0400..b6ee121c5fd 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html
@@ -117,8 +117,8 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/overview.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/overview.html
index b0b614f893b..9a55fbe41db 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/overview.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/overview.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Overview</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheGrailsApp.html"><strong>4</strong><span>Writing the Grails Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheGrailsApp.html"><strong>4</strong><span>Writing the Grails Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -129,8 +133,7 @@ detail screen the announcement identifier, title and HTML body. The latter will
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -143,13 +146,14 @@ detail screen the announcement identifier, title and HTML body. The latter will
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/training.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/training.html
index 9bef6d60c99..e09710169a0 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/training.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,11 +71,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -108,8 +112,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -122,13 +125,14 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/version2.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/version2.html
index 5ad54e7d72d..0aa277423e4 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/version2.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/version2.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 API version 2.0</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheAndroidApp.html">&lt;&lt; <strong>5</strong><span>Writing the Android Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheAndroidApp.html">&lt;&lt; <strong>5</strong><span>Writing the Android Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/conclusion.html"><strong>7</strong><span>Conclusion</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/conclusion.html"><strong>7</strong><span>Conclusion</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -464,8 +468,7 @@ endpoint. The next functional test verifies that behaviour.</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -478,13 +481,14 @@ endpoint. The next functional test verifies that behaviour.</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheAndroidApp.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheAndroidApp.html
index 4b42b07c7a3..d0a1a28399f 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheAndroidApp.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheAndroidApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Writing the Android Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheGrailsApp.html">&lt;&lt; <strong>4</strong><span>Writing the Grails Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheGrailsApp.html">&lt;&lt; <strong>4</strong><span>Writing the Grails Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/version2.html"><strong>6</strong><span>API version 2.0</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/version2.html"><strong>6</strong><span>API version 2.0</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -706,8 +710,7 @@ always set with the value defined in the <em>Constants.java</em> class</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -720,13 +723,14 @@ always set with the value defined in the <em>Constants.java</em> class</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
index 7b88fb627ba..0d66419c109 100644
--- a/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
+++ b/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Grails Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-android-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/overview.html">&lt;&lt; <strong>3</strong><span>Overview</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/overview.html">&lt;&lt; <strong>3</strong><span>Overview</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheAndroidApp.html"><strong>5</strong><span>Writing the Android Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheAndroidApp.html"><strong>5</strong><span>Writing the Android Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -565,8 +569,7 @@ dependency is added when we create an app with the <em>rest-api</em> profile.</p
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-android-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-android-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -579,13 +582,14 @@ dependency is added when we create an app with the <em>rest-api</em> profile.</p
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-android-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/css/guide.css b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/css/guide.css
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/conclusion.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/conclusion.html
index 5f0e86a5483..b9272cb1e30 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/conclusion.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/conclusion.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 Conclusion</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/version2.html">&lt;&lt; <strong>6</strong><span>API version 2.0</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/version2.html">&lt;&lt; <strong>6</strong><span>API version 2.0</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>8</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>8</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -107,8 +111,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -121,17 +124,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/gettingStarted.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
index fc258fd1e5c..2512957d997 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/overview.html"><strong>3</strong><span>Overview</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/overview.html"><strong>3</strong><span>Overview</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -273,8 +277,7 @@ You can go right to the completed version 2 of the iOS example if you <code>cd</
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -287,17 +290,18 @@ You can go right to the completed version 2 of the iOS example if you <code>cd</
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
index 1e8786ca0b3..6e4e2874b0c 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>8 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,11 +71,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/conclusion.html">&lt;&lt; <strong>7</strong><span>Conclusion</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/conclusion.html">&lt;&lt; <strong>7</strong><span>Conclusion</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -127,8 +131,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -141,17 +144,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html
index 487781151fb..2f892b5159c 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html
@@ -117,13 +117,13 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
         <script>var clipboard = new Clipboard('.clippy');</script>
-        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip&quot;">Download ZIP</button>
+        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip&quot;">Download ZIP</button>
         
         <div id="table-of-content">
             <h3>Table of Contents</h3>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/overview.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/overview.html
index a624d677fe5..e76d0ed2974 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/overview.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/overview.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Overview</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheGrailsApp.html"><strong>4</strong><span>Writing the Grails Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheGrailsApp.html"><strong>4</strong><span>Writing the Grails Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -131,8 +135,7 @@ The latter will be rendered in a <em>UIWebView</em></p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -145,17 +148,18 @@ The latter will be rendered in a <em>UIWebView</em></p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/training.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/training.html
index fc31d8f9e80..9a821a21f74 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/training.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,11 +71,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -108,8 +112,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -122,17 +125,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/version2.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/version2.html
index 5dd9c171b7f..527041553a2 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/version2.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/version2.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 API version 2.0</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheiOSApp.html">&lt;&lt; <strong>5</strong><span>Writing the iOS Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheiOSApp.html">&lt;&lt; <strong>5</strong><span>Writing the iOS Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/conclusion.html"><strong>7</strong><span>Conclusion</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/conclusion.html"><strong>7</strong><span>Conclusion</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -629,8 +633,7 @@ in <em>MasterViewController</em> as illustrated below:</p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -643,17 +646,18 @@ in <em>MasterViewController</em> as illustrated below:</p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
index 1d3ba2bf733..d1aa29446a1 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Grails Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/overview.html">&lt;&lt; <strong>3</strong><span>Overview</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/overview.html">&lt;&lt; <strong>3</strong><span>Overview</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheiOSApp.html"><strong>5</strong><span>Writing the iOS Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheiOSApp.html"><strong>5</strong><span>Writing the iOS Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -568,8 +572,7 @@ dependency is added when we create an app with the <em>rest-api</em> profile.</p
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -582,17 +585,18 @@ dependency is added when we create an app with the <em>rest-api</em> profile.</p
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html
index a3c0c0c6f3f..2e7af6d14a2 100644
--- a/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html
+++ b/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Writing the iOS Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-objectc-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheGrailsApp.html">&lt;&lt; <strong>4</strong><span>Writing the Grails Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheGrailsApp.html">&lt;&lt; <strong>4</strong><span>Writing the Grails Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/version2.html"><strong>6</strong><span>API version 2.0</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/version2.html"><strong>6</strong><span>API version 2.0</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -1075,8 +1079,7 @@ we set the announcement property of <em>DetailViewController</em></p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -1089,17 +1092,18 @@ we set the announcement property of <em>DetailViewController</em></p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-objectc-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/css/guide.css b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/css/guide.css
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/conclusion.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/conclusion.html
index 20348e63b0b..27463d7f756 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/conclusion.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/conclusion.html
@@ -4,10 +4,12 @@
 <head>
     <title>7 Conclusion</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/version2.html">&lt;&lt; <strong>6</strong><span>API version 2.0</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/version2.html">&lt;&lt; <strong>6</strong><span>API version 2.0</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>8</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>8</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -107,8 +111,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -121,17 +124,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/gettingStarted.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
index ac7e1ccf14a..0691a219765 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/overview.html"><strong>3</strong><span>Overview</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/overview.html"><strong>3</strong><span>Overview</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -274,8 +278,7 @@ You can go right to the completed version 2 of the iOS example if you <code>cd</
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -288,17 +291,18 @@ You can go right to the completed version 2 of the iOS example if you <code>cd</
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
index 861da804795..5ae8f451c50 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>8 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,11 +71,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/conclusion.html">&lt;&lt; <strong>7</strong><span>Conclusion</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/conclusion.html">&lt;&lt; <strong>7</strong><span>Conclusion</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -127,8 +131,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -141,17 +144,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html
index 221814eb553..28c7a74fa10 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html
@@ -117,13 +117,13 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
         <script>var clipboard = new Clipboard('.clippy');</script>
-        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip&quot;">Download ZIP</button>
+        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip&quot;">Download ZIP</button>
         
         <div id="table-of-content">
             <h3>Table of Contents</h3>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/overview.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/overview.html
index b2f6900e52d..68906bcf7e5 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/overview.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/overview.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Overview</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheGrailsApp.html"><strong>4</strong><span>Writing the Grails Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheGrailsApp.html"><strong>4</strong><span>Writing the Grails Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -131,8 +135,7 @@ The latter will be rendered in a <em>UIWebView</em></p>
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -145,17 +148,18 @@ The latter will be rendered in a <em>UIWebView</em></p>
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/training.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/training.html
index 192b0cf9a1a..323b273f1d4 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/training.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,11 +71,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -108,8 +112,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -122,17 +125,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/version2.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/version2.html
index 8a803c157d3..36032830f1a 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/version2.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/version2.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 API version 2.0</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheiOSApp.html">&lt;&lt; <strong>5</strong><span>Writing the iOS Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheiOSApp.html">&lt;&lt; <strong>5</strong><span>Writing the iOS Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/conclusion.html"><strong>7</strong><span>Conclusion</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/conclusion.html"><strong>7</strong><span>Conclusion</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -566,8 +570,7 @@ class AnnouncementFetcher : NSObject, URLSessionDelegate {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -580,17 +583,18 @@ class AnnouncementFetcher : NSObject, URLSessionDelegate {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
index 710d72383f6..b9112ed15bc 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheGrailsApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Grails Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/overview.html">&lt;&lt; <strong>3</strong><span>Overview</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/overview.html">&lt;&lt; <strong>3</strong><span>Overview</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheiOSApp.html"><strong>5</strong><span>Writing the iOS Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheiOSApp.html"><strong>5</strong><span>Writing the iOS Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -568,8 +572,7 @@ dependency is added when we create an app with the <em>rest-api</em> profile.</p
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -582,17 +585,18 @@ dependency is added when we create an app with the <em>rest-api</em> profile.</p
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html
index 64e8a8ef509..b04e517a374 100644
--- a/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html
+++ b/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/writingTheiOSApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Writing the iOS Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/building-an-ios-swift-client-powered-by-a-grails-backend/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -69,13 +71,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheGrailsApp.html">&lt;&lt; <strong>4</strong><span>Writing the Grails Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheGrailsApp.html">&lt;&lt; <strong>4</strong><span>Writing the Grails Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/version2.html"><strong>6</strong><span>API version 2.0</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/version2.html"><strong>6</strong><span>API version 2.0</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -601,8 +605,7 @@ class DetailViewController: UIViewController, UIWebViewDelegate {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend"><img src="https://travis-ci.org/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -615,17 +618,18 @@ class DetailViewController: UIViewController, UIWebViewDelegate {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/building-an-ios-swift-client-powered-by-a-grails-backend/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/categories/grailsasync.html b/guides/categories/grailsasync.html
index 032789efd98..5fcf5ee9658 100644
--- a/guides/categories/grailsasync.html
+++ b/guides/categories/grailsasync.html
@@ -126,7 +126,7 @@
     </div>
 </header>
 
-<article><div class='header-bar chalices-bg guides-header'><div class='content'><h1><a href='https://grails.apache.org/index.html'>Guides</a> → Grails Async</h1></div></div><div class='content guides-page'><div class='two-columns'><div class='column'><div></div></div><div class='column'><div class='guide-group guides-category-card'><div class='guide-group-header'><img src='https://grails.apache.org/images/async.svg' alt='' /><h2>Grails Async</h2></div><ul class='guides-category-list'><li [...]
+<article><div class='header-bar chalices-bg guides-header'><div class='content'><h1><a href='https://grails.apache.org/index.html'>Guides</a> → Grails Async</h1></div></div><div class='content guides-page'><div class='two-columns'><div class='column'><div></div></div><div class='column'><div class='guide-group guides-category-card'><div class='guide-group-header'><img src='https://grails.apache.org/images/async.svg' alt='' /><h2>Grails Async</h2></div><ul class='guides-category-list'><li [...]
 <footer>
     <div class='content'>
         <div class='apache-grails'>
diff --git a/guides/command-objects-and-forms/3/css/guide.css b/guides/command-objects-and-forms/3/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/command-objects-and-forms/3/css/guide.css
+++ b/guides/command-objects-and-forms/3/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/command-objects-and-forms/3/guide/gettingStarted.html b/guides/command-objects-and-forms/3/guide/gettingStarted.html
index afef1cfef8d..5ed1674e13c 100644
--- a/guides/command-objects-and-forms/3/guide/gettingStarted.html
+++ b/guides/command-objects-and-forms/3/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/whatAreCommandObjects.html"><strong>3</strong><span>What are command objects?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/whatAreCommandObjects.html"><strong>3</strong><span>What are command objects?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -212,8 +216,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -226,17 +229,18 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/3/guide/helpWithGrails.html b/guides/command-objects-and-forms/3/guide/helpWithGrails.html
index 3d5eb843668..5e3dfd68c87 100644
--- a/guides/command-objects-and-forms/3/guide/helpWithGrails.html
+++ b/guides/command-objects-and-forms/3/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,11 +65,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -121,8 +125,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -135,17 +138,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/3/guide/index.html b/guides/command-objects-and-forms/3/guide/index.html
index f76dab33480..cc631b42492 100644
--- a/guides/command-objects-and-forms/3/guide/index.html
+++ b/guides/command-objects-and-forms/3/guide/index.html
@@ -117,13 +117,13 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/command-objects-and-forms.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
         <script>var clipboard = new Clipboard('.clippy');</script>
-        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/command-objects-and-forms/archive/master.zip&quot;">Download ZIP</button>
+        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip&quot;">Download ZIP</button>
         
         <div id="table-of-content">
             <h3>Table of Contents</h3>
diff --git a/guides/command-objects-and-forms/3/guide/runningTheApp.html b/guides/command-objects-and-forms/3/guide/runningTheApp.html
index e2772e9a628..35333689ef6 100644
--- a/guides/command-objects-and-forms/3/guide/runningTheApp.html
+++ b/guides/command-objects-and-forms/3/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>6</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>6</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -101,8 +105,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -115,17 +118,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/3/guide/training.html b/guides/command-objects-and-forms/3/guide/training.html
index ef56cf2f642..ec3871887ff 100644
--- a/guides/command-objects-and-forms/3/guide/training.html
+++ b/guides/command-objects-and-forms/3/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,11 +65,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -102,8 +106,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -116,17 +119,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/3/guide/whatAreCommandObjects.html b/guides/command-objects-and-forms/3/guide/whatAreCommandObjects.html
index 8b48a45c929..13978b8cb9f 100644
--- a/guides/command-objects-and-forms/3/guide/whatAreCommandObjects.html
+++ b/guides/command-objects-and-forms/3/guide/whatAreCommandObjects.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 What are command objects?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -114,8 +118,7 @@ in other files (or even classes defined in the same file as the controller using
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -128,17 +131,18 @@ in other files (or even classes defined in the same file as the controller using
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/3/guide/writingTheApp.html b/guides/command-objects-and-forms/3/guide/writingTheApp.html
index 245334edd04..8df3a2f092f 100644
--- a/guides/command-objects-and-forms/3/guide/writingTheApp.html
+++ b/guides/command-objects-and-forms/3/guide/writingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/whatAreCommandObjects.html">&lt;&lt; <strong>3</strong><span>What are command objects?</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/whatAreCommandObjects.html">&lt;&lt; <strong>3</strong><span>What are command objects?</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -829,8 +833,7 @@ you define the class elsewhere and need <code>constraints</code>, you need to ad
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -843,17 +846,18 @@ you define the class elsewhere and need <code>constraints</code>, you need to ad
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/4/css/guide.css b/guides/command-objects-and-forms/4/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/command-objects-and-forms/4/css/guide.css
+++ b/guides/command-objects-and-forms/4/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/command-objects-and-forms/4/guide/gettingStarted.html b/guides/command-objects-and-forms/4/guide/gettingStarted.html
index b0802efcdc3..f3751599df1 100644
--- a/guides/command-objects-and-forms/4/guide/gettingStarted.html
+++ b/guides/command-objects-and-forms/4/guide/gettingStarted.html
@@ -4,10 +4,12 @@
 <head>
     <title>2 Getting Started</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/training.html">&lt;&lt; <strong>1</strong><span>Grails Training</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/whatAreCommandObjects.html"><strong>3</strong><span>What are command objects?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/whatAreCommandObjects.html"><strong>3</strong><span>What are command objects?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -212,8 +216,7 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -226,17 +229,18 @@ You can go right to the <strong>completed example</strong> if you <code>cd</code
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/4/guide/helpWithGrails.html b/guides/command-objects-and-forms/4/guide/helpWithGrails.html
index 467ea23f513..1d3aa6e9f60 100644
--- a/guides/command-objects-and-forms/4/guide/helpWithGrails.html
+++ b/guides/command-objects-and-forms/4/guide/helpWithGrails.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Do you need help with Grails?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,11 +65,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/runningTheApp.html">&lt;&lt; <strong>5</strong><span>Running the Application</span></a></div>
+                    
 
-                
+                    
+                </nav>
 
 
                 
@@ -121,8 +125,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -135,17 +138,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/4/guide/index.html b/guides/command-objects-and-forms/4/guide/index.html
index 3f375bf9d3c..5ddd5eaf3a9 100644
--- a/guides/command-objects-and-forms/4/guide/index.html
+++ b/guides/command-objects-and-forms/4/guide/index.html
@@ -117,13 +117,13 @@
             <li><button type="button" class="btn btn-default codeButton" onclick="document.getElementById('github-url').value='https://github.com/grails-guides/command-objects-and-forms.git'">HTTPS</button></li>
         </ul>
         <div class="input-group">
-            <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text"/>
-            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url">
+            <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text"/>
+            <button type="button" class="clippy btn btn-default" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
                 <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
             </button>
         </div>
         <script>var clipboard = new Clipboard('.clippy');</script>
-        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/command-objects-and-forms/archive/master.zip&quot;">Download ZIP</button>
+        <button type="button" class="btn btn-large" onclick="window.location.href=&quot;https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip&quot;">Download ZIP</button>
         
         <div id="table-of-content">
             <h3>Table of Contents</h3>
diff --git a/guides/command-objects-and-forms/4/guide/runningTheApp.html b/guides/command-objects-and-forms/4/guide/runningTheApp.html
index cefbcb92014..a88cfb543d7 100644
--- a/guides/command-objects-and-forms/4/guide/runningTheApp.html
+++ b/guides/command-objects-and-forms/4/guide/runningTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Running the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/writingTheApp.html">&lt;&lt; <strong>4</strong><span>Writing the Application</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>6</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>6</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -101,8 +105,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -115,17 +118,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/4/guide/training.html b/guides/command-objects-and-forms/4/guide/training.html
index fa02f385392..777f880468c 100644
--- a/guides/command-objects-and-forms/4/guide/training.html
+++ b/guides/command-objects-and-forms/4/guide/training.html
@@ -4,10 +4,12 @@
 <head>
     <title>1 Grails Training</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,11 +65,13 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/gettingStarted.html"><strong>2</strong><span>Getting Started</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -102,8 +106,7 @@ function addJsClass() {
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -116,17 +119,18 @@ function addJsClass() {
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/4/guide/whatAreCommandObjects.html b/guides/command-objects-and-forms/4/guide/whatAreCommandObjects.html
index 31a34dde984..415eab13775 100644
--- a/guides/command-objects-and-forms/4/guide/whatAreCommandObjects.html
+++ b/guides/command-objects-and-forms/4/guide/whatAreCommandObjects.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 What are command objects?</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/writingTheApp.html"><strong>4</strong><span>Writing the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -114,8 +118,7 @@ in other files (or even classes defined in the same file as the controller using
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -128,17 +131,18 @@ in other files (or even classes defined in the same file as the controller using
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/command-objects-and-forms/4/guide/writingTheApp.html b/guides/command-objects-and-forms/4/guide/writingTheApp.html
index 4e63fd3af7e..429da6fafdb 100644
--- a/guides/command-objects-and-forms/4/guide/writingTheApp.html
+++ b/guides/command-objects-and-forms/4/guide/writingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>4 Writing the Application</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/command-objects-and-forms/4/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -63,13 +65,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/whatAreCommandObjects.html">&lt;&lt; <strong>3</strong><span>What are command objects?</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/whatAreCommandObjects.html">&lt;&lt; <strong>3</strong><span>What are command objects?</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>5</strong><span>Running the Application</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -890,8 +894,7 @@ you define the class elsewhere and need <code>constraints</code>, you need to ad
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/command-objects-and-forms"><img src="https://travis-ci.org/grails-guides/command-objects-and-forms.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/command-objects-and-forms">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -904,17 +907,18 @@ you define the class elsewhere and need <code>constraints</code>, you need to ad
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/command-objects-and-forms.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/command-objects-and-forms/archive/grails4.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/creating-your-first-grails-app/3/css/guide.css b/guides/creating-your-first-grails-app/3/css/guide.css
index 7471d71ca4e..e76a9d7eef5 100644
--- a/guides/creating-your-first-grails-app/3/css/guide.css
+++ b/guides/creating-your-first-grails-app/3/css/guide.css
@@ -68,6 +68,22 @@ textarea {
 	vertical-align: middle;
 }
 
+button:focus-visible,
+a:focus-visible,
+input:focus-visible,
+select:focus-visible,
+textarea:focus-visible,
+#main pre:focus-visible,
+#navigation a:focus-visible {
+	outline: 3px solid #0969da;
+	outline-offset: 2px;
+}
+
+#navigation #nav-summary > a:focus-visible {
+	background: #1f2328;
+	color: #ffffff;
+}
+
 .input-group {
 	display: table;
 	margin-top: 12px;
@@ -325,19 +341,169 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 	color: #ffffff;
 }
 
+#footer {
+	box-sizing: border-box;
+}
+
 .local-title {
 	font-size: 1.4em;
 	font-weight: bold;
 }
 
+/* ---- Standalone chapter layout -------------------------------------------- */
+body.body {
+	text-align: left;
+}
+
+#colset {
+	table-layout: fixed;
+}
+
+#colset #col1 {
+	min-width: 0;
+}
+
+#main,
+#main .listingblock,
+#main .listingblock .content {
+	min-width: 0;
+	max-width: 100%;
+}
+
+#main h1,
+#main h2 {
+	color: #d97706;
+}
+
+@media screen {
+	#main pre {
+		box-sizing: border-box;
+		contain: paint;
+		max-width: 100%;
+		overflow-x: auto;
+		white-space: pre;
+	}
+
+	#main .tableblock,
+	#main .imageblock,
+	#main .videoblock,
+	#main .listingblock,
+	#main .literalblock {
+		overflow-x: auto;
+	}
+}
+
+@media print {
+	body.body .listingblock pre,
+	body.body .listingblock pre code,
+	body.body .literalblock pre,
+	body.body .literalblock pre code,
+	body.guide .listingblock pre,
+	body.guide .listingblock pre code,
+	body.guide .literalblock pre,
+	body.guide .literalblock pre code {
+		contain: none;
+		overflow-x: visible !important;
+		overflow-wrap: anywhere;
+		white-space: pre-wrap;
+	}
+}
+
+#main .tableblock,
+#main .imageblock,
+#main .videoblock,
+#main .listingblock,
+#main .literalblock {
+	max-width: 100%;
+}
+
+#main img,
+#main object,
+#main svg {
+	height: auto;
+	max-width: 100%;
+}
+
+.chapter-navigation {
+	display: flex;
+	justify-content: space-between;
+	gap: 16px;
+	margin-bottom: 16px;
+}
+
+.chapter-navigation .toc-item {
+	float: none;
+}
+
+.chapter-navigation .next-right {
+	margin-left: auto;
+	text-align: right;
+}
+
+#nav-summary-childs {
+	display: none;
+	box-sizing: border-box;
+	max-width: calc(100vw - 32px);
+}
+
+#nav-summary:hover #nav-summary-childs,
+#nav-summary:focus-within #nav-summary-childs {
+	display: block;
+}
+
+.downloadButton {
+	display: inline-block;
+	color: #24292f !important;
+	background: #ffffff;
+	border: 1px solid #d0d7de;
+	border-radius: 6px;
+	padding: 7px 12px;
+	text-decoration: none;
+}
+
+.downloadButton:hover {
+	background: #f6f8fa;
+}
+
 /* ---- Responsive: hide aside on small screens ----------------------------- */
-@media only screen and (max-device-width: 480px) and (orientation: portrait) {
+@media only screen and (max-width: 768px) {
+	body.body {
+		text-align: left;
+	}
+
+	.chapter-navigation {
+		align-items: flex-start;
+		flex-direction: column;
+		gap: 8px;
+	}
+
+	.chapter-navigation .next-right {
+		margin-left: 0;
+		text-align: left;
+	}
+
+	.contribute-btn {
+		clear: both;
+		float: none;
+		margin: 8px 0 16px;
+		position: static;
+		top: auto;
+	}
+
+	#colset,
+	#colset tbody,
+	#colset tr,
+	#colset #col1 {
+		display: block;
+		width: 100%;
+	}
 	#colset #col1 {
 		margin: 0;
 		padding: 0;
 	}
 	#main {
-		width: 98%;
+		box-sizing: border-box;
+		width: auto;
 		margin: 0;
 		border: 0;
 	}
@@ -345,3 +511,9 @@ body.guide article.guide aside button.btn-large + ul.githublinks + .input-group
 		display: none;
 	}
 }
+
+@media only screen and (min-width: 481px) and (max-width: 900px) {
+	body.guide article.guide > header {
+		padding-right: 72px;
+	}
+}
diff --git a/guides/creating-your-first-grails-app/3/guide/controllers.html b/guides/creating-your-first-grails-app/3/guide/controllers.html
index 15ee173e0e3..c7dd11ff64f 100644
--- a/guides/creating-your-first-grails-app/3/guide/controllers.html
+++ b/guides/creating-your-first-grails-app/3/guide/controllers.html
@@ -4,10 +4,12 @@
 <head>
     <title>6 Controllers</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/creating-your-first-grails-app/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -78,13 +80,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/domainClasses.html">&lt;&lt; <strong>5</strong><span>Domain Classes</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/domainClasses.html">&lt;&lt; <strong>5</strong><span>Domain Classes</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/views.html"><strong>7</strong><span>Views</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/views.html"><strong>7</strong><span>Views</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -821,8 +825,7 @@ Date: Wed, 11 Jan 2017 04:06:57 GMT
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/creating-your-first-grails-app"><img src="https://travis-ci.org/grails-guides/creating-your-first-grails-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/creating-your-first-grails-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -835,17 +838,18 @@ Date: Wed, 11 Jan 2017 04:06:57 GMT
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/creating-your-first-grails-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/creating-your-first-grails-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/creating-your-first-grails-app/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/creating-your-first-grails-app/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/creating-your-first-grails-app/3/guide/creatingTheApp.html b/guides/creating-your-first-grails-app/3/guide/creatingTheApp.html
index 9889e803273..b4cb5d389a2 100644
--- a/guides/creating-your-first-grails-app/3/guide/creatingTheApp.html
+++ b/guides/creating-your-first-grails-app/3/guide/creatingTheApp.html
@@ -4,10 +4,12 @@
 <head>
     <title>3 Creating your Grails App</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/creating-your-first-grails-app/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -78,13 +80,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/gettingStarted.html">&lt;&lt; <strong>2</strong><span>Getting Started</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>4</strong><span>Running the App</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/runningTheApp.html"><strong>4</strong><span>Running the App</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -424,8 +428,7 @@ When you create an app without <code>-profile</code> the default profile used is
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/creating-your-first-grails-app"><img src="https://travis-ci.org/grails-guides/creating-your-first-grails-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/creating-your-first-grails-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -438,17 +441,18 @@ When you create an app without <code>-profile</code> the default profile used is
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/creating-your-first-grails-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/creating-your-first-grails-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/creating-your-first-grails-app/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/creating-your-first-grails-app/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/creating-your-first-grails-app/3/guide/deployment.html b/guides/creating-your-first-grails-app/3/guide/deployment.html
index 4f886b8d2ed..0d8fc232b8b 100644
--- a/guides/creating-your-first-grails-app/3/guide/deployment.html
+++ b/guides/creating-your-first-grails-app/3/guide/deployment.html
@@ -4,10 +4,12 @@
 <head>
     <title>10 Deploying your App</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/creating-your-first-grails-app/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
     <link rel="stylesheet" href="../css/guide.css" type="text/css" media="screen, print" title="Style" charset="utf-8" />            
     <link rel="stylesheet" href="../css/pdf.css" type="text/css" media="print" title="PDF" charset="utf-8"/>
+    <script type="text/javascript" src="../js/clipboard.min.js"></script>
     <script type="text/javascript">
 function addJsClass() {
     var classes = document.body.className.split(" ");
@@ -26,10 +28,10 @@ function addJsClass() {
     <div class="navLinks">
         <ul>
             <li>
-                <div id="nav-summary" onmouseover="toggleNavSummary(false)" onmouseout="toggleNavSummary(true)">
-                    <a href="../guide/index.html" class="button">Table of contents</a>
+                <div id="nav-summary">
+                    <a href="../guide/index.html" class="button" aria-haspopup="true">Table of contents</a>
 
-                    <div id="nav-summary-childs" style="display:none;">
+                    <div id="nav-summary-childs">
                         
                         <div class="toc-item" style="margin-left:0"><a href="../guide/training.html"><strong>1</strong><span>Grails Training</span></a>
                         </div>
@@ -78,13 +80,15 @@ function addJsClass() {
         <td id="col1">
             <div id="main" class="corner-all">
 
-                
-                    <div class="toc-item prev-left"><a href="../guide/testing.html">&lt;&lt; <strong>9</strong><span>Testing your App</span></a></div>
-                
+                <nav class="chapter-navigation" aria-label="Chapter navigation">
+                    
+                        <div class="toc-item prev-left"><a href="../guide/testing.html">&lt;&lt; <strong>9</strong><span>Testing your App</span></a></div>
+                    
 
-                
-                    <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>11</strong><span>Do you need help with Grails?</span> >></a></div>
-                
+                    
+                        <div class="toc-item next-right"><a href="../guide/helpWithGrails.html"><strong>11</strong><span>Do you need help with Grails?</span> >></a></div>
+                    
+                </nav>
 
 
                 
@@ -154,8 +158,7 @@ BUILD SUCCESSFUL
         </td>
         <td id="col2">
             <div class="local clearfix">
-                <div class="local-title" style="text-align: right"><a href="https://travis-ci.org/grails-guides/creating-your-first-grails-app"><img src="https://travis-ci.org/grails-guides/creating-your-first-grails-app.svg?branch=master" /></a></div>            
-                 <div class="local-title">
+                <div class="local-title">
                     <a href="https://github.com/grails-guides/creating-your-first-grails-app">
                     <svg height="35" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="35" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.8 [...]
                 </div>
@@ -168,17 +171,18 @@ BUILD SUCCESSFUL
        
                     <div class="input-group">                    
                         <!-- Target -->
-                        <input id="github-url" value="git@github.com:grails-guides/creating-your-first-grails-app.git" type="text" />
+                        <input id="github-url" aria-label="Git repository URL" value="git@github.com:grails-guides/creating-your-first-grails-app.git" type="text" />
 
                         <!-- Trigger -->
-                        <button class="clipbtn" type="button" data-clipboard-target="#github-url">
+                        <button class="clipbtn" type="button" data-clipboard-target="#github-url" aria-label="Copy Git repository URL">
 
                             <img width="13" src="../img/clippy.svg" alt="Copy to clipboard">
                         </button>       
+                        <script type="text/javascript">new Clipboard('.clipbtn');</script>
 
                     </div>
                     <div class="input-group">
-                      <a href="https://github.com/grails-guides/creating-your-first-grails-app/archive/master.zip" class="downloadButton">Download ZIP</a>
+                      <a href="https://github.com/grails-guides/creating-your-first-grails-app/archive/grails3.zip" class="downloadButton">Download ZIP</a>
                     </div>
                 </div>
             </div>
diff --git a/guides/creating-your-first-grails-app/3/guide/domainClasses.html b/guides/creating-your-first-grails-app/3/guide/domainClasses.html
index 9e5f2b73780..2be8161ccbc 100644
--- a/guides/creating-your-first-grails-app/3/guide/domainClasses.html
+++ b/guides/creating-your-first-grails-app/3/guide/domainClasses.html
@@ -4,10 +4,12 @@
 <head>
     <title>5 Domain Classes</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1"/>
     <link rel="canonical" href="https://grails.apache.org/guides/creating-your-first-grails-app/3/guide/index.html"/>
     <link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, print" title="Style" charset="utf-8"/>
... 112686 lines suppressed ...