diff --git a/.Rprofile b/.Rprofile index a0881b1..45d58ef 100644 --- a/.Rprofile +++ b/.Rprofile @@ -12,23 +12,5 @@ cat("Sourcing .Rprofile.", fill = TRUE) source("renv/activate.R") -# Function to run tests -run_tests_locally <- function() { - Sys.unsetenv("http_proxy") - Sys.unsetenv("https_proxy") - source("global.r") - # message("================================================================================") - # message("== testthat ====================================================================") - # message("") - # testthat::test_dir("tests/testthat") - # message("") - message("================================================================================") - message("== shinytest ===================================================================") - message("") - shinytest::testApp() - message("") - message("================================================================================") -} - # Install commit-hooks locally statusWriteCommit <- file.copy(".hooks/pre-commit.R", ".git/hooks/pre-commit", overwrite = TRUE) diff --git a/.github/workflows/automated-tests.yaml b/.github/workflows/automated-tests.yaml new file mode 100644 index 0000000..57d728d --- /dev/null +++ b/.github/workflows/automated-tests.yaml @@ -0,0 +1,42 @@ +on: + push: + branches: + - main + + pull_request: + +name: Automated tests + +jobs: + automatedTests: + runs-on: ubuntu-latest + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - name: Install git2r dependencies + run: sudo apt-get install -y libgit2-dev + + - name: Cache renv packages + id: cache-renv + uses: actions/cache@v4 + with: + path: cache-renv + key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} + restore-keys: | + ${{ runner.os }}-renv- + + - uses: r-lib/actions/setup-renv@v2 + + - name: Run tests + shell: Rscript {0} + run: | + shinytest2::test_app() + \ No newline at end of file diff --git a/.github/workflows/deploy-shiny.yaml b/.github/workflows/deploy-shiny.yaml index b67eed0..bde642f 100644 --- a/.github/workflows/deploy-shiny.yaml +++ b/.github/workflows/deploy-shiny.yaml @@ -3,6 +3,10 @@ on: branches: - main - development + pull_request: + branches: + - main + - development name: deploy-shiny @@ -25,11 +29,11 @@ jobs: RENV_PATHS_ROOT: ~/.local/share/renv steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: r-lib/actions/setup-r@v2 with: - r-version: 4.2.1 + r-version: 4.4.1 use-public-rspm: true - name: Set env vars (dev) @@ -45,14 +49,14 @@ jobs: - name: Cache R packages if: runner.os != 'Windows' - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ${{ env.R_LIBS_USER }} key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - name: Cache renv packages - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ${{ env.RENV_PATHS_ROOT }} key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} @@ -75,6 +79,7 @@ jobs: # Get in touch with the Stats Development team if you need to add the below secrets to publish to shinyapps.io - name: Push to shiny.io + if: github.event_name != 'pull_request' run: > Rscript -e "rsconnect::setAccountInfo(name = 'department-for-education', token = '${{secrets.SHINYAPPS_TOKEN}}', secret = '${{secrets.SHINYAPPS_SECRET}}')" diff --git a/.github/workflows/shiny-tests.yaml b/.github/workflows/shiny-tests.yaml deleted file mode 100644 index efefe99..0000000 --- a/.github/workflows/shiny-tests.yaml +++ /dev/null @@ -1,81 +0,0 @@ -on: - push: - branches: - - main - - development - pull_request: - -name: shiny-tests - -jobs: - automatedTests: - runs-on: ${{ matrix.config.os }} - - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) - - strategy: - fail-fast: false - matrix: - config: - # Running on mac as it's quicker to build - - {os: macOS-latest, r: 'release'} - - env: - R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - RSPM: ${{ matrix.config.rspm }} - RENV_PATHS_ROOT: ~/.local/share/renv - - steps: - - uses: actions/checkout@v2 - - - uses: r-lib/actions/setup-r@v2 - with: - r-version: 4.2.1 - use-public-rspm: true - - - name: Cache R packages - if: runner.os != 'Windows' - uses: actions/cache@v1 - with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - - - name: Cache renv packages - uses: actions/cache@v1 - with: - path: ${{ env.RENV_PATHS_ROOT }} - key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} - restore-keys: | - ${{ runner.os }}-renv- - - - name: Restore renv snapshot - shell: Rscript {0} - run: | - if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv") - renv::restore() - - name: Find PhantomJS path - id: phantomjs - run: | - echo "::set-output name=path::$(Rscript -e 'cat(shinytest:::phantom_paths()[[1]])')" - - name: Cache PhantomJS - uses: actions/cache@v1 - with: - path: ${{ steps.phantomjs.outputs.path }} - key: ${{ runner.os }}-phantomjs - restore-keys: ${{ runner.os }}-phantomjs - - name: Install PhantomJS - shell: Rscript {0} - run: | - options(install.packages.check.source = "no") - if (!shinytest::dependenciesInstalled()) shinytest::installDependencies() - - name: Run tests - shell: Rscript {0} - run: | - shiny::runTests(".", assert = TRUE) - - name: Upload test results - if: failure() - uses: actions/upload-artifact@master - with: - name: ${{ runner.os }}-r${{ matrix.config.r }}-tests - path: tests diff --git a/.github/workflows/tidyCode.yaml b/.github/workflows/tidyCode.yaml index 49cdd3b..c6887d8 100644 --- a/.github/workflows/tidyCode.yaml +++ b/.github/workflows/tidyCode.yaml @@ -11,7 +11,7 @@ jobs: tidyCode: runs-on: ${{ matrix.config.os }} - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + name: tidyCode strategy: fail-fast: false @@ -26,29 +26,20 @@ jobs: RENV_PATHS_ROOT: ~/.local/share/renv steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: r-lib/actions/setup-r@v2 with: - r-version: 4.2.1 use-public-rspm: true - name: Cache R packages if: runner.os != 'Windows' - uses: actions/cache@v1 + uses: actions/cache@v4 with: path: ${{ env.R_LIBS_USER }} key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - - name: Cache renv packages - uses: actions/cache@v1 - with: - path: ${{ env.RENV_PATHS_ROOT }} - key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} - restore-keys: | - ${{ runner.os }}-renv- - - name: Restore renv snapshot shell: Rscript {0} run: | @@ -58,8 +49,6 @@ jobs: - name: Tidy code shell: Rscript {0} run: | - source("global.R") - codeChecks <- dfeshiny::tidy_code() if(any(is.na(codeChecks))) { diff --git a/R/utils.R b/R/utils.R deleted file mode 100644 index 381b8ef..0000000 --- a/R/utils.R +++ /dev/null @@ -1,74 +0,0 @@ -customDisconnectMessage <- function(refresh = "Refresh page", - links = sites_list, - publication_name = ees_pub_name, - publication_link = ees_publication) { - checkmate::assert_string(refresh) - htmltools::tagList( - htmltools::tags$script( - paste0( - "$(function() {", - " $(document).on('shiny:disconnected', function(event) {", - " $('#custom-disconnect-dialog').show();", - " $('#ss-overlay').show();", - " })", - "});" - ) - ), - htmltools::tags$div( - id = "custom-disconnect-dialog", - style = "display: none !important;", - htmltools::tags$div( - id = "ss-connect-refresh", - tags$p("You've lost connection to the dashboard server - please try refreshing the page:"), - tags$p(tags$a( - id = "ss-reload-link", - href = "#", "Refresh page", - onclick = "window.location.reload(true);" - )), - if (length(links) > 1) { - tags$p( - "If this persists, you can also view the dashboard at one of our mirror sites:", - tags$p( - tags$a(href = links[1], "Site 1"), - " - ", - tags$a(href = links[2], "Site 2"), - if (length(links) == 3) { - "-" - }, - if (length(links) == 3) { - tags$a(href = links[3], "Site 3") - } - ) - ) - }, - if (!is.null(publication_name)) { - tags$p( - "All the data used in this dashboard can also be viewed or downloaded via the ", - tags$a( - href = "https://explore-education-statistics.service.gov.uk/find-statistics/a-level-and-other-16-to-18-results/2021-22", - "A level and other 16 to 18 results " - ), - "on Explore Education Statistics." - ) - }, - tags$p( - "Please contact", - tags$a(href = "mailto:statistics.development@education.gov.uk", "statistics.development@education.gov.uk"), - "with details of any problems with this resource." - ) - ) - ), - htmltools::tags$div(id = "ss-overlay", style = "display: none;"), - htmltools::tags$head(htmltools::tags$style( - glue::glue( - .open = "{{", .close = "}}", - "#custom-disconnect-dialog a { - display: {{ if (refresh == '') 'none' else 'inline' }} !important; - color: #1d70b8 !important; - font-size: 16px !important; - font-weight: normal !important; - }" - ) - )) - ) -} diff --git a/global.R b/global.R index 0d003b6..dadf109 100644 --- a/global.R +++ b/global.R @@ -15,7 +15,7 @@ shhh(library(shiny)) shhh(library(shinyjs)) # shhh(library(tools)) shhh(library(testthat)) -shhh(library(shinytest)) +shhh(library(shinytest2)) shhh(library(shinydashboard)) shhh(library(shinytitle)) shhh(library(shinyWidgets)) @@ -102,6 +102,7 @@ appLoadingCSS <- " } " +site_title <- "16 to 18 time series attainment and single year entry" site_primary <- "https://department-for-education.shinyapps.io/ks5-timeseries-attainment-and-single-year-entries/" site_overflow <- "https://department-for-education.shinyapps.io/ks5-timeseries-attainment-and-single-year-entries-overflow/" sites_list <- c(site_primary, site_overflow) # We can add further mirrors where necessary. Each one can generally handle about 2,500 users simultaneously diff --git a/renv.lock b/renv.lock index 9fa1076..c32a9ae 100644 --- a/renv.lock +++ b/renv.lock @@ -13,7 +13,7 @@ "Package": "AsioHeaders", "Version": "1.22.1-2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Hash": "85bf3bd8fa58da21a22d84fd4f4ef0a8" }, "DT": { @@ -182,16 +182,6 @@ ], "Hash": "cad6cf7f1d5f6e906700b9d3e718c796" }, - "assertthat": { - "Package": "assertthat", - "Version": "0.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "tools" - ], - "Hash": "50c838a310445e954bc13f26f26a6ecf" - }, "backports": { "Package": "backports", "Version": "1.5.0", @@ -439,18 +429,6 @@ ], "Hash": "8ee9ac56ef633d0c7cab8b2ca87d683e" }, - "debugme": { - "Package": "debugme", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "crayon", - "grDevices" - ], - "Hash": "62e5354b9a514d3a2e1d68311956a8f7" - }, "desc": { "Package": "desc", "Version": "1.4.3", @@ -469,11 +447,11 @@ "Version": "0.5.1.9000", "Source": "GitHub", "RemoteType": "github", - "RemoteHost": "api.github.com", "RemoteUsername": "dfe-analytical-services", "RemoteRepo": "dfeshiny", "RemoteRef": "main", "RemoteSha": "ceab34a1cac64d9734247de905b0fdcf9eea9174", + "RemoteHost": "api.github.com", "Requirements": [ "R", "RCurl", @@ -725,7 +703,7 @@ "Package": "globals", "Version": "0.16.3", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R", "codetools" @@ -1053,13 +1031,6 @@ ], "Hash": "2bcca3848e4734eb3b16103bc9aa4b8e" }, - "parsedate": { - "Package": "parsedate", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7f5024cc7af45eeecef657fa62beb568" - }, "patchwork": { "Package": "patchwork", "Version": "1.3.0", @@ -1186,16 +1157,6 @@ ], "Hash": "a1ac5c03ad5ad12b9d1597e00e23c3dd" }, - "png": { - "Package": "png", - "Version": "0.1-8", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "bd54ba8a0a5faded999a7aab6e46b374" - }, "praise": { "Package": "praise", "Version": "1.0.0", @@ -1315,13 +1276,6 @@ ], "Hash": "9de96463d2117f6ac49980577939dfb3" }, - "rematch": { - "Package": "rematch", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "cbff1b666c6fa6d21202f07e2318d4f1" - }, "rematch2": { "Package": "rematch2", "Version": "2.1.2", @@ -1386,13 +1340,6 @@ ], "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.16.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "96710351d642b70e8f02ddeb237c46a7" - }, "sass": { "Package": "sass", "Version": "0.4.9", @@ -1547,34 +1494,30 @@ ], "Hash": "802e4786b353a4bb27116957558548d5" }, - "shinytest": { - "Package": "shinytest", - "Version": "1.6.1", + "shinytest2": { + "Package": "shinytest2", + "Version": "0.3.2", "Source": "Repository", - "Repository": "CRAN", + "Repository": "RSPM", "Requirements": [ "R6", - "assertthat", "callr", + "checkmate", + "chromote", + "cpp11", "crayon", - "debugme", - "digest", - "htmlwidgets", - "httpuv", + "fs", + "globals", "httr", "jsonlite", - "parsedate", "pingr", - "rematch", "rlang", - "rstudioapi", + "rmarkdown", "shiny", "testthat", - "utils", - "webdriver", "withr" ], - "Hash": "47528912d55d13cbcf59fde00d03edd8" + "Hash": "a414c1bb2eb6e2a920742d3ebce84962" }, "shinytest2": { "Package": "shinytest2", @@ -1611,17 +1554,6 @@ ], "Hash": "12a2972d88910692c1a125d6e1e95d51" }, - "showimage": { - "Package": "showimage", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "png", - "tools" - ], - "Hash": "841927b226db842d24d9c288c99ed27b" - }, "sourcetools": { "Package": "sourcetools", "Version": "0.1.7-1", @@ -1886,24 +1818,18 @@ ], "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" }, - "webdriver": { - "Package": "webdriver", - "Version": "1.0.6", + "websocket": { + "Package": "websocket", + "Version": "1.4.2", "Source": "Repository", "Repository": "CRAN", "Requirements": [ + "AsioHeaders", "R6", - "base64enc", - "callr", - "curl", - "debugme", - "httr", - "jsonlite", - "showimage", - "utils", - "withr" + "cpp11", + "later" ], - "Hash": "adc1e0db3ac0d75dcdb4b8179e7ca796" + "Hash": "e77c5569354172d0d04d54a9dec89e33" }, "websocket": { "Package": "websocket", diff --git a/tests/shinytest.R b/tests/shinytest.R deleted file mode 100644 index 8904f91..0000000 --- a/tests/shinytest.R +++ /dev/null @@ -1,2 +0,0 @@ -library(shinytest) -expect_pass(testApp("../", compareImages = grepl("^macOS", utils::osVersion))) diff --git a/tests/shinytest/initial_load_test.R b/tests/shinytest/initial_load_test.R deleted file mode 100644 index b5e3a0c..0000000 --- a/tests/shinytest/initial_load_test.R +++ /dev/null @@ -1,59 +0,0 @@ -inputs <- c( - "alevelInstitute", - "allGender", - "cookieAccept", - "cookieLink", - "cookieReject", - "ees_1", - "ees_2a", - "ees_2b", - "headlineAps", - "hideAccept", - "hideReject", - "link_to_alevelAllSubject_tab", - "link_to_alevelFmSubject_tab", - "link_to_headline_tab", - "navlistPanel", - "resByAll", - "resByFm", - "resetApsAll", - "resetEntries", - "resetSubFm", - "subByAll", - "subCompareAll", - "subjectFm", - "tabsetpanels", - "tabsetpanels2a", - "tabsetpanels2b", - "year_end", - "year_end_fm", - "year_start", - "year_start_fm" -) - -outputs <- c( - "dropdown_label", - "headBox1", - "headBox2", - "headBox3", - "plotAlevelSubject", - "plotHeadline", - "plotSubjectFm", - "tabHeadline", - "textHeadline", - "textSubAll", - "textSubFm" -) - -app <- ShinyDriver$new("../../", loadTimeout = 6.4e4) -app$snapshotInit("initial_load_test", screenshot = FALSE) -app$snapshot(list(input = inputs, output = outputs)) - -app$setInputs(navlistPanel = "dashboard") -app$snapshot(list(input = inputs, output = outputs)) - -app$setInputs(navlistPanel = "dashboard_alse") -app$snapshot(list(input = inputs, output = outputs)) - -app$setInputs(navlistPanel = "dashboard_fm") -app$snapshot(list(input = inputs, output = outputs)) diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..7d25b5b --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1 @@ +shinytest2::test_app() diff --git a/tests/shinytest/initial_load_test-expected/001.json b/tests/testthat/_snaps/initial_load_test/001.json similarity index 100% rename from tests/shinytest/initial_load_test-expected/001.json rename to tests/testthat/_snaps/initial_load_test/001.json diff --git a/tests/shinytest/initial_load_test-expected/002.json b/tests/testthat/_snaps/initial_load_test/003.json similarity index 100% rename from tests/shinytest/initial_load_test-expected/002.json rename to tests/testthat/_snaps/initial_load_test/003.json diff --git a/tests/shinytest/initial_load_test-expected/003.json b/tests/testthat/_snaps/initial_load_test/005.json similarity index 100% rename from tests/shinytest/initial_load_test-expected/003.json rename to tests/testthat/_snaps/initial_load_test/005.json diff --git a/tests/shinytest/initial_load_test-expected/004.json b/tests/testthat/_snaps/initial_load_test/007.json similarity index 100% rename from tests/shinytest/initial_load_test-expected/004.json rename to tests/testthat/_snaps/initial_load_test/007.json diff --git a/tests/testthat/setup-shinytest2.R b/tests/testthat/setup-shinytest2.R new file mode 100644 index 0000000..be65b4f --- /dev/null +++ b/tests/testthat/setup-shinytest2.R @@ -0,0 +1,2 @@ +# Load application support files into testing environment +shinytest2::load_app_env() diff --git a/tests/testthat/test-initial_load_test.R b/tests/testthat/test-initial_load_test.R new file mode 100644 index 0000000..e5a3107 --- /dev/null +++ b/tests/testthat/test-initial_load_test.R @@ -0,0 +1,63 @@ +library(shinytest2) + +test_that("Migrated shinytest test: initial_load_test.R", { + inputs <- c( + "alevelInstitute", + "allGender", + "cookieAccept", + "cookieLink", + "cookieReject", + "ees_1", + "ees_2a", + "ees_2b", + "headlineAps", + "hideAccept", + "hideReject", + "link_to_alevelAllSubject_tab", + "link_to_alevelFmSubject_tab", + "link_to_headline_tab", + "navlistPanel", + "resByAll", + "resByFm", + "resetApsAll", + "resetEntries", + "resetSubFm", + "subByAll", + "subCompareAll", + "subjectFm", + "tabsetpanels", + "tabsetpanels2a", + "tabsetpanels2b", + "year_end", + "year_end_fm", + "year_start", + "year_start_fm" + ) + + + outputs <- c( + "dropdown_label", + "headBox1", + "headBox2", + "headBox3", + "plotAlevelSubject", + "plotHeadline", + "plotSubjectFm", + "tabHeadline", + "textHeadline", + "textSubAll", + "textSubFm" + ) + + app <- AppDriver$new(load_timeout = 64000) + app$expect_values(input = inputs, output = outputs) + + app$set_inputs(navlistPanel = "dashboard") + app$expect_values(input = inputs, output = outputs) + + app$set_inputs(navlistPanel = "dashboard_alse") + app$expect_values(input = inputs, output = outputs) + + app$set_inputs(navlistPanel = "dashboard_fm") + app$expect_values(input = inputs, output = outputs) +}) diff --git a/ui.R b/ui.R index f0c679e..f8072af 100644 --- a/ui.R +++ b/ui.R @@ -64,7 +64,11 @@ ui <- function(input, output, session) { href = "dfefavicon.png" )), shinyjs::useShinyjs(), - customDisconnectMessage(), + dfeshiny::custom_disconnect_message( + dashboard_title = site_title, + publication_name = ees_pub_name, + publication_link = ees_publication + ), useShinydashboard(), # Setting up cookie consent based on a cookie recording the consent: # https://book.javascript-for-r.com/shiny-cookies.html @@ -85,11 +89,11 @@ ui <- function(input, output, session) { href = "dfe_shiny_gov_style.css" ) ), - shinyGovstyle::cookieBanner("KS5 attainment and single year entry"), + shinyGovstyle::cookieBanner(site_title), shinyGovstyle::header( main_text = "", main_link = "https://www.gov.uk/government/organisations/department-for-education", - secondary_text = "16 to 18 time series attainment and single year entry", + secondary_text = site_title, logo = "images/DfE_logo_landscape.png", logo_width = 150, logo_height = 32 @@ -97,16 +101,7 @@ ui <- function(input, output, session) { shinyGovstyle::banner( "beta banner", "beta", - paste0( - "We're looking for volunteers! We've developed several new dashboards ", - "in the last 12 months and we'd really like to know what you think of them. ", - "If you're interested in helping us improve our products, please sign up ", - "using our user-testing volunteer form.
", - "This Dashboard is in beta phase and we are still reviewing performance and reliability. ", - "In case of slowdown or connection issues due to high demand, we have produced two instances of this site which can be accessed at the following links: ", - "Site 1 and ", - "Site 2." - ) + "This Dashboard is in beta phase and we are still reviewing performance and reliability. " ), shiny::navlistPanel( "", diff --git a/www/dfe_shiny_gov_style.css b/www/dfe_shiny_gov_style.css index 0462ddd..f63dfa5 100644 --- a/www/dfe_shiny_gov_style.css +++ b/www/dfe_shiny_gov_style.css @@ -195,42 +195,6 @@ template. 80% works well here to reduce white space on the right hand side.*/ color: #ffffff; } - -#ss-connect-dialog { display: none !important; } -#shiny-disconnected-overlay { display: none !important; } - -#ss-overlay { - background-color: #000000 !important; - opacity: 0.6 !important; - position: fixed !important; - top: 0 !important; - left: 0 !important; - bottom: 0 !important; - right: 0 !important; - z-index: 99998 !important; - overflow: hidden !important; - cursor: not-allowed !important; - } - -#custom-disconnect-dialog { - background: #000000 !important; - color: #FFFFFF !important; - width: full !important; - transform: translateX(-50%) translateY(-50%) !important; - font-size: 16px !important; - top: 50% !important; - position: fixed !important; - bottom: auto !important; - left: 50% !important; - padding: 0.8em 1.5em !important; - text-align: center !important; - height: auto !important; - opacity: 1 !important; - z-index: 99999 !important; - border-radius: 3px !important; - box-shadow: rgba(0, 0, 0, 0.3) 3px 3px 10px !important; - } - .govuk-width-container { width: 100% !important; max-width: 100% !important;