From e77b92fa2ae5c7cd58336c23a249420621eb616e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 24 Apr 2024 09:19:23 -0300 Subject: [PATCH 01/21] Added T3 and T4 --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/README.md b/README.md index ac03d20e..12bd30de 100644 --- a/README.md +++ b/README.md @@ -71,4 +71,36 @@ Nesta atividade iremos personalizar o texto presente na página [CSS Zen Garden: 2. Espaçamento entre as linhas de `1.5` para os parágrafos da seção principal. 4. **Abreviaturas.** Customize todos as abreviaturas para que a fonte seja carregada em `small-caps`. + +### T3: Box Model + +1. Vamos definir algumas diretivas gerais para nossa página. +    - Defina a largura geral da página em 80%, limitado a no máximo `1280px` de largura. Centralize a página na tela. +    - Defina a altura da seção de introdução em `550px` +    - Remova o container `#design-archives` da renderização da página +2. Agora vamos incrementar o cabeçalho da página. +    - Inverta a cor do cabeçalho aplicando o fundo escuro e a fonte clara. +    - Coloque título e subtítulo lado-a-lado, mas mantendo espaçamento entre eles e o restante da página. +    - Adicione um espaçamento lateral de 1em para o título principal. +3. É hora de incrementar os menus! +    - Remova os bullets dos itens de menu presentes no painel lateral. +    - Aumente o espaçamento entre os itens do menu para 1em, pelo menos. +    - Centralize os itens presentes em cada menu. +4. Por fim, vamos aplicar uma inversão de cores no rodapé para ele ganhar um contraste em relação ao restante da página. +    - Adicione 4% de espaçamento externo no rodapé. +    - Transforme cada link do rodapé em uma caixa colocando borda sólida de 2px, e espaçamento interno de 0.5em. + +### T4: Posicionamento + +O foco dessa atividade será reposicionar os elementos da nossa página! + +1. Defina o elemento `.page-wrapper` como referência para posicionamento. +2. Faça com que o painel `.explanation` ocupe 60% da largura disponível, mas crie um espaçamento a direita de 35% utilizando `margin`. +    - Adicione uma borda à direita do painel de 1px, com a cor `#1f295c` +    - Adicione um espaçamento interno de 2% no lado direito do painel. +3. Agora mova o menu de designs para a direita da página, ocupando o espaço em branco deixado pelo elemento `.explanation`. +    - Faça-o iniciar na parte superior da página, após a parte de introdução (por exemplo, aplicando `top: 560px`). +    - Faça-o iniciar após o elemento `.explanation` (por exemplo, aplicando `left: 62%`). +    - Adicione um espaçamento interno horizontal de 2% no menu para centralizá-lo. + [^1]: [CSS Zen Garden: The Beauty of CSS Design](https://www.csszengarden.com/) From 7561dca71ec7f7686d8eae50ba152cab03aff643 Mon Sep 17 00:00:00 2001 From: Ketelinluana <160741453+Ketelinluana@users.noreply.github.com> Date: Wed, 1 May 2024 17:27:54 -0300 Subject: [PATCH 02/21] T3 e T4 --- style.css | 72 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/style.css b/style.css index 7337e537..ce9eeab9 100644 --- a/style.css +++ b/style.css @@ -1,27 +1,24 @@ body { - background-color: #A6A6A6; /* Cor do fundo */ - color: #0D0D0D; /* Cor da fonte */ + background-color: #A6A6A6; + color: #0D0D0D; + width: 80%; + max-width: 1280px; + margin: 0 auto; } .intro { - background-color: #D9D9D9; -} - -body { - width: 800px; - font-family: Arial, sans-serif; -} - -p { - text-indent: 1em; + background-color: #D9D9D9; + height: 550px; + text-align: right; } -h1, h2, h3 { - text-align: center; +#design-archives { + display: none; } h1 { - font-size: 1.8rem; + font-size: 1.8rem; + margin-left: 1em; } h2 { @@ -29,18 +26,47 @@ h2 { } h3 { - font-size: 1.2rem; -} - -.intro { - text-align: right; + font-size: 1.2rem; } .main { - text-align: center; - line-height: 1.5; + text-align: center; + line-height: 1.5; } abbr { - font-variant: small-caps; + font-variant: small-caps; +} + +header { + background-color: #0D0D0D; + color: #FFFFFF; + padding: 1em; +} + +h1, h2 { + display: inline-block; + margin-right: 1em; +} + +nav ul { + list-style-type: none; + padding-left: 0; +} + +nav li { + margin-bottom: 1em; + text-align: center; +} + +footer { + background-color: #0D0D0D; + color: #FFFFFF; + margin-top: 4%; +} + +footer a { + display: inline-block; + border: 2px solid #FFFFFF; + padding: 0.5em; } From 9bcf005c3ce26abdd7705862b95da7186a74d0aa Mon Sep 17 00:00:00 2001 From: Ketelinluana Date: Wed, 1 May 2024 18:03:52 -0300 Subject: [PATCH 03/21] T3 e T4 --- style.css | 121 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 100 insertions(+), 21 deletions(-) diff --git a/style.css b/style.css index 7337e537..2d868c6e 100644 --- a/style.css +++ b/style.css @@ -1,27 +1,37 @@ body { - background-color: #A6A6A6; /* Cor do fundo */ - color: #0D0D0D; /* Cor da fonte */ + background-color: #A6A6A6; + color: #0D0D0D; + width: 80%; + max-width: 1280px; + margin: 0 auto; } - -.intro { - background-color: #D9D9D9; +.page-wrapper { + position: relative; } -body { - width: 800px; - font-family: Arial, sans-serif; +.intro { + background-color: #D9D9D9; + height: 550px; + text-align: right; } -p { - text-indent: 1em; +#design-archives { + position: absolute; + top: 560px; + left: calc(62% + 2%); + padding: 0 2%; } -h1, h2, h3 { - text-align: center; +.explanation { + width: 60%; + margin-right: 35%; + border-right: 1px solid #1f295c; + padding-right: 2%; } h1 { - font-size: 1.8rem; + font-size: 1.8rem; + margin-left: 1em; } h2 { @@ -29,18 +39,87 @@ h2 { } h3 { - font-size: 1.2rem; -} - -.intro { - text-align: right; + font-size: 1.2rem; } .main { - text-align: center; - line-height: 1.5; + text-align: center; + line-height: 1.5; } abbr { - font-variant: small-caps; + font-variant: small-caps; +} + +header { + background-color: #0D0D0D; + color: #FFFFFF; + padding: 1em; +} + +h1, h2 { + display: inline-block; + margin-right: 1em; +} + +nav ul { + list-style-type: none; + padding-left: 0; +} + +nav li { + margin-bottom: 1em; + text-align: center; +} + +footer { + background-color: #FFFFFF; + color: #0D0D0D; + margin-top: 4%; + padding: 1em; } + +footer a { + display: inline-block; + border: 2px solid #0D0D0D; + padding: 0.5em; + text-decoration: none; + color: #0D0D0D; +} + +footer a:hover { + background-color: #0D0D0D; + color: #FFFFFF; +} + +header h1, header h2 { + margin-right: 1em; +} + +nav li { + margin-bottom: 1em; + text-align: center; +} + +nav ul { + padding-left: 0; +} + +nav li { + list-style-type: none; + margin-bottom: 1em; + text-align: center; +} + +nav a { + display: block; + padding: 1em; + text-decoration: none; + color: #FFFFFF; +} + +nav a:hover { + background-color: #0D0D0D; +} + + From 101a620f025994854685d906ddb35b9fcbfa81b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Tue, 14 May 2024 21:33:09 -0300 Subject: [PATCH 04/21] Added T5 and T6 --- README.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/README.md b/README.md index 12bd30de..17aa1936 100644 --- a/README.md +++ b/README.md @@ -103,4 +103,34 @@ O foco dessa atividade será reposicionar os elementos da nossa página!     - Faça-o iniciar após o elemento `.explanation` (por exemplo, aplicando `left: 62%`).     - Adicione um espaçamento interno horizontal de 2% no menu para centralizá-lo. +### T5: Seletores de Pseudo-Classe + +1. Customize a aparência dos links da seguinte forma: + - Por padrão, devem ter a cor de destaque e estarem em negrito. + - Se sobrepostos, devem ter sua cor alterada para uma tonalidade mais clara/escura. + - Os links visitados não devem ficar mais em negrito. +2. Vamos dar um destaque a primeira letra do primeiro parágrafo da seção principal. Você deverá customizá-lo para que: + - Tenha tamanho de fonte 3 vezes maior que o padrão. + - Seja de uma fonte diferente da escolhida para o site. + - Fique flutuando a esquerda. + - *OBS: você precisará aplicar mais de um pseudo-seletor para realizar essa estilização. Fique atento!* +3. Utilize bordas para criar um separador entre os itens presentes no menu de design. + - Aplique uma borda superior no topo de todos os itens de menu. + - Aplique uma borda inferior apenas no último item da lista. + +### T6: Flexbox + +1. Aplique o flexbox no rodapé da seção principal, e posicione os links de forma que fiquem centralizados e com espaçamento entre eles. +    - Defina um mesmo tamanho para os links. +    - Não se esqueça de tratar o caso de quebra de linha. +2. Configure um layout de flexbox para a seção de benefícios da seguinte forma: +    - O texto deve ficar à esquerda, e o título à direita. +    - O título deve ficar centralizado verticalmente. +    - O texto deve ocupar aproximadamente 70% da largura, e o título 30%. +3. Configure um layout de flexbox para a seção de participação da seguinte forma: +    - Cada item deve ocupar 50% do espaço disponível. +    - O título deverá ficar centralizado verticalmente. +4. Inclua uma linha no topo e embaixo das seções de benefícios e participação, utilizando a propriedade `border-bottom` e `border-top` respectivamente. +    - Remova a ocorrência de borda duplicada entre as duas seções + [^1]: [CSS Zen Garden: The Beauty of CSS Design](https://www.csszengarden.com/) From c49276081c8aa5f38af3e96a46585713098c5615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Tue, 14 May 2024 23:59:57 -0300 Subject: [PATCH 05/21] First version of cypress tests --- .github/actions/css/cypress.config.js | 16 + .../css/cypress/integration/t1.test.js | 11 + .../css/cypress/integration/t2.test.js | 45 + .../css/cypress/integration/t3.test.js | 29 + .../css/cypress/integration/t4.test.js | 37 + .../css/cypress/integration/t5.test.js | 20 + .../css/cypress/integration/t6.test.js | 31 + .../actions/css/cypress/videos/t1.test.js.mp4 | Bin 0 -> 48648 bytes .github/actions/css/package-lock.json | 1806 +++++++++++++++++ .github/actions/css/package.json | 14 + .github/autograder.dockerfile | 18 + .github/workflows/autograder.yml | 65 + 12 files changed, 2092 insertions(+) create mode 100644 .github/actions/css/cypress.config.js create mode 100644 .github/actions/css/cypress/integration/t1.test.js create mode 100644 .github/actions/css/cypress/integration/t2.test.js create mode 100644 .github/actions/css/cypress/integration/t3.test.js create mode 100644 .github/actions/css/cypress/integration/t4.test.js create mode 100644 .github/actions/css/cypress/integration/t5.test.js create mode 100644 .github/actions/css/cypress/integration/t6.test.js create mode 100644 .github/actions/css/cypress/videos/t1.test.js.mp4 create mode 100644 .github/actions/css/package-lock.json create mode 100644 .github/actions/css/package.json create mode 100644 .github/autograder.dockerfile create mode 100644 .github/workflows/autograder.yml diff --git a/.github/actions/css/cypress.config.js b/.github/actions/css/cypress.config.js new file mode 100644 index 00000000..f75e8321 --- /dev/null +++ b/.github/actions/css/cypress.config.js @@ -0,0 +1,16 @@ +module.exports = { + e2e: { + baseUrl: "http://localhost:8080", + specPattern: `${process.env.CYPRESS_PATH}/cypress/integration/**/*.test.js`, + video: true, + screenshotsFolder: `${process.env.CYPRESS_PATH}/cypress/screenshots`, + videosFolder: `${process.env.CYPRESS_PATH}/cypress/videos`, + viewportWidth: 1280, + viewportHeight: 720, + supportFile: false, + reporter: 'junit', + reporterOptions: { + mochaFile: `${process.env.CYPRESS_PATH}/cypress/reports/report-[hash].xml` + }, + } +} \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t1.test.js b/.github/actions/css/cypress/integration/t1.test.js new file mode 100644 index 00000000..d47db29e --- /dev/null +++ b/.github/actions/css/cypress/integration/t1.test.js @@ -0,0 +1,11 @@ +describe('T1: Paleta de Cores', () => { + before(() => { + cy.visit('/index.html') + }) + it('Deve ter uma cor customizada para o texto da página', () => { + cy.get('body, html, .page-wrapper').should('have.css', 'background-color').and('not.equal', 'rgb(255, 255, 255)') + }) + it('Deve ter uma cor customizada para o fundo da página', () => { + cy.get('body, html, .page-wrapper').should('have.css', 'color').and('not.equal', 'rgb(0, 0, 0)') + }) +}); \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t2.test.js b/.github/actions/css/cypress/integration/t2.test.js new file mode 100644 index 00000000..f8412065 --- /dev/null +++ b/.github/actions/css/cypress/integration/t2.test.js @@ -0,0 +1,45 @@ +describe('T2: Estrutura Textual', () => { + before(() => { + cy.visit('/index.html') + }) + + it('Aspectos gerais de tamanho e fonte devem estar conforme o enunciado', () => { + // 1.1. Check if the page has a fixed size + cy.get('body').should('have.css', 'width') + cy.get('body').should('have.css', 'height') + + // 1.2. Check if the page font is sans-serif + cy.get('body').should('have.css', 'font-family').and('match', /sans-serif/) + + // 1.3. Check if the paragraphs are indented by 1em + cy.get('p').should('have.css', 'text-indent', '1em') + }) + + it('Títulos e parágrafos devem possuir o tamanho correto', () => { + cy.get('h1').should('have.css', 'font-size', '1.8rem'); + cy.get('h2').should('have.css', 'font-size', '1.4rem'); + cy.get('h3').should('have.css', 'font-size', '1.2rem'); + cy.get('p').should('have.css', 'text-indent', '1em'); + }); + + it('Deve ter alinhamento do resumo modificado', () => { + cy.get('.summary').should(($summary) => { + const style = window.getComputedStyle($summary[0]); + expect(style.textAlign).to.satisfy(val => val === 'right' || val === 'center'); + }); + }); + + it('Deve ter espaçamento entre as linhas customizado', () => { + cy.get('.main p').should(($p) => { + const style = window.getComputedStyle($p[0]); + expect(style.lineHeight).to.equal('1.5'); + }); + }); + + it('Deve ter a abreviatura em small-caps', () => { + cy.get('abbr').each(($abbr) => { + cy.wrap($abbr) + .should('have.css', 'font-variant', 'small-caps'); + }); + }); +}) \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t3.test.js b/.github/actions/css/cypress/integration/t3.test.js new file mode 100644 index 00000000..6e3818e9 --- /dev/null +++ b/.github/actions/css/cypress/integration/t3.test.js @@ -0,0 +1,29 @@ +describe('T3: Box Model', () => { + before(() => { + cy.visit('/index.html') + }) + + it('Deve definir diretivas gerais para a página', () => { + cy.get('.page-wrapper').should('have.css', 'width', '80%') + cy.get('.page-wrapper').should('have.css', 'max-width', '1280px') + cy.get('.page-wrapper').should('have.css', 'margin', 'auto') + cy.get('.intro').should('have.css', 'height', '550px') + cy.get('#design-archives').should('not.be.visible') + }) + + it('Deve incrementar o cabeçalho da página', () => { + cy.get('h1').should('have.css', 'margin-right', '1em') + }) + + it('Deve incrementar os menus', () => { + cy.get('.menu').should('have.css', 'list-style', 'none') + cy.get('.menu li').should('have.css', 'margin-bottom', '1em') + cy.get('.menu li').should('have.css', 'text-align', 'center') + }) + + it('Deve estilizar o rodapé da página', () => { + cy.get('footer').should('have.css', 'margin', '4%') + cy.get('footer a').should('have.css', 'border', '2px solid') + cy.get('footer a').should('have.css', 'padding', '0.5em') + }) +}); \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t4.test.js b/.github/actions/css/cypress/integration/t4.test.js new file mode 100644 index 00000000..1d708791 --- /dev/null +++ b/.github/actions/css/cypress/integration/t4.test.js @@ -0,0 +1,37 @@ +describe('T4: Posicionamento', () => { + before(() => { + cy.visit('/index.html') + }) + + it('deve ter o .page-wrapper como referência de posicionamento', () => { + cy.get('.page-wrapper').should('have.css', 'position', 'relative') + }) + + it('deve modificar o tamanho do painel .explanation', () => { + cy.get('.explanation').then(($el) => { + // Check width + const windowWidth = Cypress.$(cy.state('window')).width(); + const elementWidth = $el.width(); + expect(elementWidth).to.be.closeTo(windowWidth * 0.6, 1); + + // Check right margin + const marginRight = parseInt($el.css('marginRight'), 10); + expect(marginRight).to.be.closeTo(windowWidth * 0.35, 1); + + // Check right border + const borderRight = $el.css('borderRight'); + expect(borderRight).to.equal('1px solid #1f295c'); + + // Check right padding + const paddingRight = parseInt($el.css('paddingRight'), 10); + expect(paddingRight).to.be.closeTo(elementWidth * 0.02, 1); + }); + }); + + it('deve ter o menu de design na posição certa', () => { + cy.get('#design-archives').should('have.css', 'top', '560px'); + cy.get('#design-archives').should('have.css', 'left', '62%'); + cy.get('#design-archives').should('have.css', 'padding-left', '2%'); + cy.get('#design-archives').should('have.css', 'padding-right', '2%'); + }); +}); \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t5.test.js b/.github/actions/css/cypress/integration/t5.test.js new file mode 100644 index 00000000..d2b2e733 --- /dev/null +++ b/.github/actions/css/cypress/integration/t5.test.js @@ -0,0 +1,20 @@ +describe('T5: Seletores Pseudo-Classe', () => { + before(() => { + cy.visit('/index.html') + }) + + it('deve customizar a aparência dos links', () => { + cy.get('a').should('have.css', 'color', 'rgb(0, 128, 0)').and('have.css', 'font-weight', '700'); + cy.get('a').first().click(); + cy.get('a').first().should('not.have.css', 'font-weight', '700'); + }); + + it('deve customizar a primeira letra do primeiro parágrafo da seção principal', () => { + cy.get('.main p').first().should('have.css', 'font-size', '48px').and('have.css', 'font-family', 'Arial, sans-serif').and('have.css', 'float', 'left'); + }); + + it('deve conter um separador entre os itens presentes no menu de design', () => { + cy.get('.menu-item').should('have.css', 'border-top-style', 'solid'); + cy.get('.menu-item').last().should('have.css', 'border-bottom-style', 'solid'); + }); +}); \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t6.test.js b/.github/actions/css/cypress/integration/t6.test.js new file mode 100644 index 00000000..cfa7731b --- /dev/null +++ b/.github/actions/css/cypress/integration/t6.test.js @@ -0,0 +1,31 @@ +describe('T6: Flexbox', () => { + before(() => { + cy.visit('/index.html') + }) + + + it('deve aplicar flexbox nos links do footer', () => { + cy.get('.main footer a').should('have.css', 'display', 'flex') + .and('have.css', 'justify-content', 'center') + }); + + it('deve aplicar flexbox na seção de benefícios', () => { + cy.get('.benefits').should('have.css', 'display', 'flex') + .and('have.css', 'flex-direction', 'row-reverse'); + cy.get('.benefits h3').should('have.css', 'align-self', 'center') + .and('have.css', 'flex', '0 0 30%'); + cy.get('.benefits .text').should('have.css', 'flex', '0 0 70%'); + }); + + it('deve aplicar flexbox na seção de participação', () => { + cy.get('.participation').should('have.css', 'display', 'flex'); + cy.get('.participation > *').should('have.css', 'flex', '0 0 50%'); + cy.get('.participation > h3').should('have.css', 'align-self', 'center'); + }); + + it('deve incluir linha entre as seções de benefícios e participação', () => { + cy.get('.benefits').should('have.css', 'border-bottom'); + cy.get('.participation').should('have.css', 'border-top'); + }); + +}); \ No newline at end of file diff --git a/.github/actions/css/cypress/videos/t1.test.js.mp4 b/.github/actions/css/cypress/videos/t1.test.js.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..d3cb72133cf3c585b9cb0ae1060c571cc4c1522a GIT binary patch literal 48648 zcmce-2Ut|gvM9VJGUOo#2}2H&bCe+mi3$Qrlq@+3C}GGTC_y9%k^~eHP!U1WkR*zL z2%-o>MnR$^8JIWjz0d#d*=L{o_IdYxf6rR0t7~gww1>NNlWpj?B({5%4Ey#W9W z{ECUUl;d?LNpC+HNdN#4t^qDC0Pxz^+u1RQn8yMRBM{7{wZFD5PwBnN7Ws&p;@Q{? zm6DS|iK3i*16)v&vht_^DMe{nl&p-bvx}4~@r9lkF@v~~skW}D3`+fyCNZb8ixcsM zrmtU^my2rA5*H5%2@$*Q;q2n;<>({k8{j7Xs}(W#Aa5^X z9$&v84_}`^C6trnRYxaP2~>cKtEwc*+2yL2ual>$gc9+Ga`bWZ3JY}kl|p&Ds5*N% zq5^}j5+MncUtkz9JMn2B;H)YsCPBl+^>F7>O+5ZD6jSBSga3c2Q9|#GQPrz?& zIC*$G2L0-Xhfk18fR`gN6A^#aD>%S0%-+e@+t2a09ub)n6yWILL#%?BF~IRx9@hXz zZkDrHVlg%v9p4LtLDs<{g1Q+@cyI z_nu@M6HazweN%T6=LmNI7*DLgzYi1+3IIX|1H`xk2vQ7?o%t&b2Y{IK%>Mv5NdORl z1(5nzsQ@qt1E4Z{-vA(mk#0wBi6WZbBgOwTD9wogdO)MN$tif(O`h+MLVE@B z7N&u94YXINCbZc@=c_C#lSu>t6jdBQN={M(DR_xbZSk^N6x4QQa9uair@^n-Cg6H? zka4MBTya|@wQI;=@A|^?365$*Fy*=tWz=iVHP+~@%Xm7z`&%mjRNl>D>E20CmbG?N zOqWc90=&)USwuj!`hzzWy6s=giigSVbvu%e3AVwL#ETun{i&gBwzKvIb5No`g_33? zBNn_MlSE1As~~LocqH}(G>C9F&GnO61!&|D61Bj2b@5`z5vz1w{-V!*-hS3t5arb8 z_}Y!>X&x%Q3tgG?Es9*{i4b-r;N!^#%02Q-r*t}m9GKH=K1Akl%hz4$j4&*PZ@y_h zgT{Y^P6Ir0Le4cAgcX@inJ_PIsq>B!v2XMp7kFRAPlJd`6Ascy&J@-w+r{&AExm0# z@Q~QP$WGLGJ;PB9BI%g&;_{5TBQm0pSMAUB zoO+AhH75A`8c3|di&wQS5Cgq5%U_rR$)vAaj2GuCCu}W#8B&xFBz1s%=lU>_(SF+h z7U7`%ggHPXn=QROx`%2dkzTowkB*lejP+Ff^1(C{1J#9-JxabzTPCp>FG6H3k;A_# z>*{6U(#+b3?WGZdWN+Lv9ODP2E{9wytK}eyGivFU=B&}ao@}RAraCHm@^xatua?>F zdul%dZHhkuRK22$aL8z{+71(YPJ6ZT7|r5`)x3C-Ek!g4gm`~hh~L6Yo$$GZ7yEmo z>hz-;LN44n(M?ZS(lH#Mii7>wV1a->)Nux5>jc@jN{+qy2QrQXxE%(Spoziw9*rI*hHH5=9xmbMsa^H^0fVDj#NrQn@Jfg#F zb6C)|JORx;zuT{`V}dWE45VbKefPt$9=bQ) z^W>bx$jxsBp3WHQb}uOrjG!%=1Y#ERRop1kPR49H4w;BFM@BY^jl9smWm z?gI1-((T{RHRFGLR9hILC9hTgeld=(KL9#^CEf8X>UrK;vVM%43GH8t7T+Op_iQpu7#?U>@mI`+0raj%_ zmdcCUeN(=omhGaY-|&1B1rcB}2z>QWJFwbI;eJSZ9?8oQ5gd>NeL*_B*D0fqg>O+Zd_QyHA_aT*1?~HOnwVy^HnXTv z$-APtl8gY4hS|7r5bhk(E3@pL;Z`!?X*&+`gC!w_Z%JYn^2ilgAi1J;J^H5Mg}edH zh$|)ln0Ap={1A?Lg~%J6s{cd|_w>!>O)whmnYtP5cH$dWM*+xx>16S1#=tQ0(C7^D ztDk}zhH7`A0Y4-0*k;YEBI-Js9gXC=HP+1N0=NFRdM`(=pTZl>S4%}xe6!#?(H}15vn$GA2Hh=#z_uCQU?9fj=$(5^g>W<$G>!x9GePdYjmh?Mz%if(KRV^Ha9e z9In3pz#U$3OdTMMaI8$SRyZKw`~U}#5F3DmNSFmP9O`31axv3~-1_WNCby#hkjp>B z6eq0CoTxxmG9#%T(@lEN5k~?ZBdIj`GFk_MG5RW@fWEwReZ}e9uupl+=M@X8AskGm zkX(6W7?jrNE<=?4k+W${jK<0|L>D_MVCoo9(IJioW*kxzwoGZo7NN>1?6*WF^Ho7j zGSq9PNSil#j{E2Dtjf`1+59=3See>m1-#pdGMb11&`PDnAS~jMz-&~^PY5zu=Glxb z&I!o1;;N82b=RdmO)%3b`tm#gI&GCXl-|Pw?Ff{J8@yrj@K6>kDdq1(^Xl>zlm)Xhb`<35t+E>TPx~r=Z z$Bhs^#OfSjI!wb3@JMjD$KO&Zj*Zv?F6jX{bKhO_`)V7(4j{fNj*HTO#@XS|k+i0e zN7z*cu;PSPH6KC!Pu$hFGIwJgtH{6^1DD@o1*O=W)5296B6gHxSlgPWl~>^c7atg= zF~Oy4P%m^sP5l=;Tpv;^Hw}@>q77f#M=J`GD*&rtD<)-K?IW@AVdC`ouQMgqFwVS; zFNJez@U1jZc=G{kQO{J1^1#DA`2}~addt^zS}Y=oWa1Y(IrT6 zXKeqCTg$UWQ(PZRZk08}_6h>4L;V1GA%z18+>859b(6?`Su@7Tb}nnY@iU{BElc5_ zACK8TMsDe=*I$WhuTNtd1B^UMSug9lb*YnP3pCa6i9UK;3SoTfbTUoe2q{gCzo?-7 z%90>Neq`L)R1`UU#YJ`V6{f)75E^Ebo@56P#=3V+i6$$Pi zLcSsOv9oK|FpMU1S-DA*eQVLViAv{u@?K{sJqCCU#uFTb-=r&bino-~;2x4C(2!$_ z?QYB`t*T{UASj5vQUlGs^o|ElszSTcv599RE+yhxF6ZNyLoJ?!sq)!58(x7mCUvBF0W_4or46$=GdhN&8{RKn(P3%7a7Am z`F2!z=$dKXxT2sYiH#yGXJphNhR_sB8d{VqAB$GBq>QUPVvjFIF6CkBoiocI_)xN1 z`!(jAYH@B*y9E=$Cc3~jGHY8nThonsvxIC5Zr^R&(2v)o9 z?f^E=6)wLkvV{RKE*P51ckeQ^i{lCp>VLd_QTpnX&FTl!>|s=zyND_vkLp#4S z6-+{-G+`-uF;HpHCLr^ecbk?T3{+K#1PKf~PDXkDWKEL5cxSVnaY?URO0){VtNr-7 zR`YtTMj5zNWOI|S?!Xa#S28iT22Kwk`!3W8_G}l3FEWK-P0zida`=p&NI^FnsaBz` zU&vgzxJqt}eazPS)-*Pm${MVhGhczUeIWd`qe~Mv`nvOG66lmH;sKr?3?39F-m~_l zC37RTOnM5CdvbOm5riHJ)C-9NAR#uBXnz)FPjqZhTn?9R(_mRj)KqCF#2)~_7KP%< zgRqt5TU&HuJXs)<1Hw-wjB!hU4WT39w+k^w`Ok zY^~(6H2R}z*O0zJBuU;Xw|d9QO+?o9 z;DUT|H2T%%wCvdEwe-FbSu~0%>c`gVT>w%Xcp7^r4x;HDT57+)`tW?YK?vbgjnKx> zFvh1rv6Kw1ay>>|^9)=8q*=-hgTNnB`_>(QBrv4ix&!#Pe!Vai( z%M*FV2){?8dUShi9aZN@C3(yJJPowW1l+OBW3L>TvkZ%mifPFS9szUmw1f$X9l!PQ zo0})Or^r|Gu^t}<0Yp_mm(cKqgS>JA;Yi~Ug5{%7YF1yA;_fC)^s&UOm`aTRmT#Hf zA87%gLKGz0@B1a8k~Q1_q+|GID5k{!}+*7oxi3+lC30!Kyl7|0Wa1D zkYE?f5kF)07zPS2L-w zORUkL^OG#Cv}sq!eUG!n_`XtK5&vYT0~a%5~Bh5-jOrE7Z`uW9{m7ntpeVP;{vO>0A?#Fy`{15I^ zqep6+{?Ln3P+HxbO~T1VqXs;G8@!h@8>D=2vXv^|)z3kFAr5Jc&~9n90}vB}!0WF2 z%u?4UP!%QzTJ)yQlNYs+gPi~vK!HlXtT3teI`mPzb4Bopm!pAerWDZgMTvxT(|iod z)Ip1jS*zQLCfD{>$T!iN@pJ&0(?}VDj;80$)hh~-rUF6?fMP@6ozJ1eO`kv*u+BQ_lOl$R~~$9N=qvmPZGbX zvXXbZOZMg_vr{vM|0*piHGtI=p(rJ^s`bRgK5JZ;H_%|C=|dqWMLHgUtuypvX$x?aMYB0)lzTZ{o`=v^kVUNuGoAOM$x08pJZpnl@= z5tz>J$cs2La#jYVrP9S`$VR*`aRt{=_@)>`M1Q6u*Ui|)NBE+KG*5v0g z?{viMxk-(bu+|+1;-HaK`D&HjMDGhZ2W4%Ghxo(%T;}d+{S_)*!eMBhQ01YKdp&VE zt7-vo&>^}XPouqLk?ThA3Kej!Y75!zIcg~smn{p7Rjtdgf~BW1^OL8M6^LPE2n#u* zcs{#RrhshP1*dd7{i=79_=N~Lu#i-kli4eK0)Z`V5({!b^*bvXM(SE$6rOTV_)aTF zKZfS2^n+_bKlWPIF$LV()jTVmd#jVy*PoK*b5g#!T_amz5dfTi+SD@hSljjEFsiPs{w2e0_Z} zyds1z6ALV51N7vWjoQPI>X$)}sBK_c4eq3oll&BxL)MGgdl%Gg%^epa?5GKN@k1wk zyZRmvtt3q;>q`lWrv>^XLVAnJ0?LmaXd>txjqeW01+7uk=Ep7mS zFmP~Ti*+3I=Y3O&(!_Q`uX~y=aRx&C%?^QlO9reRD_8v{7i5nY*<2`b8dvtoVvPcz zpmCVK2Ph?@L6*VoCf?6!V@}-pK7wpJmWBO?v-$`1TBxm3*JWwv7bAT&Ni3HXq?y(o=eP;F|5z_ zK>O7T)wu4oPf8eu;tt)m2W4ONzM3x5nGgs}cV;_Jl2QREoUB{{K*GG-KV<{}nAb*7 z+HAi8wN}2oOrH9U*z*Ic=v^~#Jupix(0K{Mo=p+K9&hvci*y?uz&-35my!PPr^EQeBiKHDS~GEc<;r(&Z|~qqQU?WVS}Q88v91i6*9-_ny7NSM)m;4GC9%@K z481Dwt4%$Gt!F3&K!YBDRzQ+S6D0gWlDfEg@YPf{w4vEy^7&T$+RcBo__yQBb8Z0i zEg6nuh0tYN2SS0-6PGo~=TU$rX|^Ctfzz=Re^wj=&O+nB%!YNOUHU?X;s|p~3=EY4 zG9>A9XxB#rXo|9syITOCxb)HVHKH!ArM&YB2dQZ_hA~Lx4pFBQl>z(hcf|`Cnw_wn zU-p30<&tvISHx{<0ntyfQ!Ig+8x@_($lyGL-?rJS6xavQIp9t|tq->hyY5Os3sx>r zRMZmEsm%^a%NywKag46PLvZvXA5aaKx(F{bmV>JRF!<4vO!f7}q97UGV#sZCvb_rI zUC?dsfZRsJyNSr7mpMjJg)3aQMo%y6*SOmYX!yQ9*naI|VWMa{xyW&yj}&3ZOg5!W z6XQ|b)aeQ!04U7gJ22LImp>Y8HS)=1<)DEFqv}s@&bB8iH4?U8C{##hDjmUni-EZF zUgxuV$&P{H+z8OdZOUv#lT{iGhOb!EzmmpqI zv@op#Ak)IAZWhJy4N~QZF59`rCBc#2MZEeiZ;a4m^+MpyGS@CbP%-xhzwrAIL}NHZCB#SRD;ePWZV zUuRG0!du9vLhroND-IIVh<+a4r(3sx=al&8fn_tLYRY3};Cc??zYoms!CjV{t`a$(i z9sjGO&8+#}uXBb!UqRm<{GTZNjRiOUk`uuuf3ELeTL_+%|3?q~8UO^COkay$pD)`? zo6*|-6r8YxH>F^76MBX}Q{ApT=4|EEU#3gWtf3{dGUqGJVpa{u$hZ-`xL~X+;@Wyp zzS;B5Y{K!WIiQzIzJ$#L1p|BG0vo*?9@AKhTbS`#8;;JgES_VB<5I8Gv`=fg9VD@D zMA&g?67u~8hIqt^7M{z2c726Ak-CoPHpOVR=oSP|SUZ%(8)Oj(SmoNhEmFB~sDnin zmTqYdepjc;tX=M%s~QwA7LK{#{_f!%D;c=mB-S(LkmwcWNt3OVh)o80CMh|cqR=me z@IQEgou{6Q_HqMm5yk9tV)F@l>t{cJFto=rdE$Cz)#qac;QnCvODXc9H{t$su{|-Y ztZWWx<8^gq9bN!0$P^4VEWHI8;A{^k5CAdZcJD(KTK2JYbd>Ivuzjfohjs=@$Lpv) z1lu$UkRkIZ>Uh`)T4+CHo2pZZu#8diP6wFFwypqhkl73^cg&e$0S6yL?^9N$Pz-35 zgLGL4Tz5dd`1xJas-5_jYTW{qoihd|!*kM2Ngqe64sdfFp=U03^hjS=l?R;7O*ti$ zLNTN7!H0kh3`|QOUSNjth;FiebwmUDB#c=v?;T=ObU_J_a-Re4F)L~+81NkOQf68? z0IE6fx5LUDcD@^1cLER`v%drez_M)vo5lWm<1iy;){MHdBv+jQV=UV}T)y0MQdMlw z)U)Ux$QKxL082$Kldli`K$Ag3ju&QqPLHB1J!H^q9(qx%O8J^PqQvK?;CWWG8qtk{ zW4^)#fFzdaWk=Kf%k+xD2ZCTm@i(R79HE1O>Hvk;B1<``0)PTA5}9%1u;6X+$^=Y& zP{*l?22difmcgKl>qry5HbO3}D@g7*&rO0pdioF!5U`DZ|m-HsU7Boz5_GZ-f3ve$JwRZOjYpmu$BkJHC`!V6hAJgUU%@5l@ zCa~WN3>fG{^3h+=kBK)b_29)*7(xfAAE0C!zOi_V0Y9vQ8tx-epr59cbR)3ZewK%klgdg688#u0N+A%}lN$fGAD!A8-~v$O zRSUHqr>!=#5jnpWMpN=7+5mX;am+9fow^Y^$@UtN^7Hd1VQXszGQHstZwcwxAbC90 zK~@trC-4NreDz)%WVs^EHsf;#2Aa0>z0W81QFm<&0Oe^p>rXnX`B5Uj%kkpDtrmw4 zmiF^ev9<99fFH`TzzL{%eKee$efcDPj3O3=PWE9?hn`5QuxY&_Q-`igt7yJY;kbn) zsR1a%=h4tdsI!*$FF$+9aEhA#_!F3e?Vg%AaV;+gjUN!aNqhk6f+ACh=WY_U-p_mIrB*L8pmv$-Yys6QsJNY9QV($LA+ zL}Q7+c^AOa7jCWM=uL2W<3PBf?YiK6u}PB#Cyp0~Ao{>!obSP8E^jsSm@Ssq)pf>G zECz(o_Dv0fJL1S#KH@g`c-%xb{kem54shbYYwkpb3kkY7$7dO)^%9za8(bPXmPYA+|@Oabn!(>MRn>*b0s@^7}D2h$gh#Pr}w87DeS>uf=~_ zI|Cyw{;^zpdVcr5-q1Gb`8}fc4}+xeAMgJA1^BPmXXD3zxtjk8x%~6D?l!IiND4Pt zgiI#CVTSWyjwk^K8ohq}yu_>!vt3sv&_EhjmSfVW$G%kg{+TZ;>WDEU~SPBa| z!USpK?tEC9r+l3lHjismm!XCzOsS_lAn zp~?$#IYt>NKSGmlMW2AT97Lk(bf^%$M!9Bp)Nn5=@+%2D;7qcmDTPv17gE?XtM3cX z97gGuJWV?{fc#gF0Zckt98oRbn)SJ>q%cSPN%HZ}Gn2OyL2in z2mr-1`;%Psv-R|pVt;#s0KQ3DV4KfHX(a=NVf^q+qed7Qy3WCyo6ce{lLh{$6kT4A z;v)g^T^AG7=bOi#B`MHm95aFzZwJ_L3z8-|jC7JI<||Yw5D!5Qaw!}?{#s3A{06Q) z3>46N#Dq2?q?;@9l+cPYI1n&S*l7Fv%g{4AUAD0%^Fo=l>7Ygq{tn3G^(hhNv(M}6 zx=tZaqt0y#9vXOi$1`V~qkK%>M&t=NraM*YDJB57gn@Lw zcjcFJ->Kf!!T2Mi3%Eh2Sa@a#zziLMyqTS~5AgT1JI+6>T`8;6#~_^x9(u~Mt%Lje%y8o znRKb#v{VyqlZO{*R679>0-*7WGx1XZxB##i6&48~sr^7H8xUXT+6>LtRBfDCs(IQF z(W{a+@Fom^QL#tEL0dOErN~C$#k8)^q=?Q+kQpB>Js%552sRq>vAJxE^C7css?eME z0xs_dSwKJewHK^iNH1*bJPX%+Wg-s1U}1Q&__xf;K1*x6%gKf;I&-<_w^g?Q*ynh_rjG~{3C!n{Ex(~)$;3e z$yo0KY%J(VfC`9yGpbMeZSNpL+)AGS-KCm@Qy+I1L(LsnNw&v~4V7&;xY@{>7m{e3 z7X`aTruzipPsa@6i3-OWPxcW#E**MM~d~T#nER``@Oxet^*}?-NSRa{)=3v?G z{hXitcde_(JY@6VewGh@druwS*ZWigRt}?~-o2FWEJQ{5R7CdlvoNlGfNW~Z{L%7y zG_%?aqUG*;=(lhh8n?$wa_L-IV|M2|oIGrQOzQ|=54?~&H^}%)5W2EddEe_FJctmO zxrrA6D+;*pb6%-e56q&*K|Ij_x-3%ned@_?3jXgY-?iU#Z}S3yD95}A()+LnB8$^^ zv9w9t&mQ0b2WlD=J-*vVLt;hC9-usgo3fj3UDih=mBKrijXR$l)=QSV%B(YH&3H0d zrO2U>>X%&U?DwVCk$if?@1dyKi=5|%fp}27>J)+STN{9croJ=W!|lCducFh^`6LPkp(9rKV2dJQmm3`i;B3-uzu zH&S88v0D2cMj2!nD&=FRBKzxm0f`EvX0!lp0){0RAU|kh+~U41LON;BNj#+^`naHI z1-bxVfM@^38u}`#59wZWZ6}A2&m-{!cE)k0EH8OT_>C#>Oz|4Eo4JPnht)I42TQf( zG4E4d)N+8nqZNkOk*xI+eN)a_iJRi`;61KJpsg!7{(U$A3D;z*Q&oz4P zTiW^8Wv@Kv2O4$0#e!{T_iHIMzwVDdN1harQ$fq@;xq8a&Q-$mac4s`DW@f}9q3`5 z9~5hNp{94r5wEg*BC!sMkG_Z)!Bq)(l_(t7N9iTaWW8{%xaWdb$4_Vqgucu8f!i@WhO(aIhZW*_A%_IgdJ(MU(Dib}-HV;}Q zy7vSf;6-&sr<}iyAw7nSWI@m4S>yrM*7h~!_lwHSb(x~z5(jcO`jC@&y%(IP!O_#~ zs1s9ByGlx;rGNdDK-eZ= z02D6?I8OP#M}y-lWkmHe1)>%t9(_gGvR?Cf4vodm$`u$1mq9IWvEQW_7sq&hEQoMb ziIYq`o<(qE7l+@WRG(Mi6~Qo7g%y+KL=vcpRVpxSS&{JHT)9Vn_JiF3$#a1SSjVY3 z1$)%1$~vdS3(t}@&S#>25Kka3KmcAsAf+$8g0LI7x|sQ`3=kaL6c`6&FkNsUc}I%F z-o20QxvyeRJUhnC7caEFor?US^ibm&t=ox799BmiwX`{U=d;mpIEQ32E*IJ*aw z=x1#Dj)EjJxAZ_oCkxSPD6%^8>y{!CywMfit$D2)O<3XW;0Erv~H@~>lyO{OvR{uxU{D!Ca;k6@eHHP$UPk+m9qs zk+eQzhs=6URPJv9XNitTDoeJ;dA6%%cxz<{Ln@43*8c6|=oHJcGyL7cjB=gVHbm>< z7_E7+6ec6%FxuvcyHE#(%tylmRt6Gk*hD8}zE`~sG<_5aU@z_;pxNmUcWy<7BWf2~ z0a!Fc8XO`zam{Ad-q~5%pbe%H-S&n#J8ci82peA0Ep*O8PCcj#ExSTsmfVlRV;{aa z`^It0v%U9Z21aczLfY(09v-zXc$uOExz|XM*)^ zl9bH~M3Sy(UeX{6b0Wt#QvG$P0-FZ01~L;&PAf5Y=CaJ<*xFhNgwtP+um4-`*}?C| z@?UK5J3j)3esph5xI@j)wBu0f+sIWAw5!^YPr`^4<}notXmFY(0Pvg5cj95Y`_7+z z7wQ0w5FYT?WCLlKMf;Y-Sut?)mqv)TliDknS&cQ%=&#j$Zr<~tMQSD^Sd{2hfq(Hy ze*Kf>{(JJTNF#G_XMGByyx}sD&PvcIe$^bcn^4Obry6AY>NHT6WVPyuS<2!po2A2g8 z)LXF0NOt~`im)tB;}YjfZ-|H?9sRbk)V-6O`2EkG!}@NRUN0*%A$h8(Q+3P#!O+<5 z{ZHunmxhTl@c+bT`=?Fm-*#C4l}P@*P3zme|H-cPcf;w|)c&XIKizWw^S1hZ)nD`S zpPC>llRu?@PyW?B{O9U_4g7y1#DAjgx8z@U@Gtb!pQVi0_W$Rg|9?8zx(d`DgHhQM zX@c{YI~_@$XLAf(8BA+C-uypYhvxyA9}_>L>T=OHg&fz*#{_du{@UB|{_*60d?x#^ zod1RSyT>5^g8}~QhJ*j6X#HiwYkyCw|1_%qNdC=@$X^NDTFu{^%6}nizu53MmB>HO z;D7Yv?}_wZbNm07VeWMR?ipe)!Sx>|YM& z-=oatIzamHvp)YP69V=J8V~F8Dk5M?TK6J%wYc6!F^ACdF=V5N|5_|m&qrMY=fLD^ z_5!*$E*jT(y{k>RcWnCUn3JJDU}gEk2mipFR?Bdk(wrg2s>O^BtvS3vS@qYun|GU! zpU%x70>q;Dg_I5^#k2hskdc>DP7!PNmP}bcSJbL-w|s+@?4dU%+n$BfT6mI7=7qKd zsa;($Z6lR}F@0_1YkkKs1^RR(<70tmT*~V@H#)JIG_z^d*1E@MLt`6Rb9DL1{YGnr zFtMt|rB=`64|Y53dpQ&K))6j$E9&60%;{kNrrjT|Yw@`JNEm%IEHI!3eJTDez}`~S zrw#GaHvDc1vw0-}sx-`S%b4L?In}$TpM7U9k|C7dN9d#PPumh0E>F~X_a}@P_bW#X zL=&LF;a|zwaf6Sla_(Bkw+>w_$E9TUQOO>lf))>cy{ImkIcy%@68sHZXdxpBm0A;Q zBd__^apiAHb2ZCz;I`kzp!McUTR zuh}`$rnK2?3br-fXwR=bG^nx;db0Fnt);iB=^Cf)T8oYP40V&RY1`qQs*-w|w8h6J zk$U)}*Bk7sD;s+uvlfao6t4$3l)F@K&i^bhsATJSHpBYOIYH?cPK9>=ma)_3K?mbQ zw^cdijvQ;v-cWj~Etd(??HL&4zxIfl9cTJ48QOdHBBq(QEFvs}Lnks5@BCttsWP_s z7Zu>>Uo{Z9MXc{1=vX}ffIF$@qq$p$VOw}u^f2SZ%c>`QF1X2*2LqN;$j;f#w-iWA z6%0XSeyMiXG3QpZZp+K)h++|0!8sePXW8|cco*LK%s!EGUOy8hE+!v-)A!&T)o}{< zCStoDTXPxoe{E7+?%CqmcmLKN$v#j;Zl{!aSwC!mtupmtcBbtL$)%9P0b-%&l0nu( ztIX2xw&^o>@2hRy=B<|!OX!*VT=MKxide#jNujC7Mwl+dMXM>TYQn?&mtS81v(ftxwZu zyL!d1w!!(lGGPd!fAV-1{@7!Y|szoRvf1OupS6fCUNUUr+wY`Ra1`PkW?Pu)kvb2 z*oNV?aI~K>s=l_BzDb{;6xYjtK6)TrQ`_A%7kXpfLxtz2k@!8uv)gy4HkWw)>CaDn zm;L1VMo*QoQ}w~=`zuDFQGF`@-zysOnRpt!-kUBO)N6W#sW?~Kh47Iaf0wPFOnoLr zvZiu#Kc864$~Z$3YAJa}pnl@Lop}A|+oCQ!m*&+~FS}{)h>8|23ICFg(Vs1m$41_= zb8I-%oV3*|IfF8%@9j1}RpWv}5)~gF*Ra&osGJgLn0-Aa;zVq21O#t0G?lfzX?=m3 zX+u;f-1%zaOLFfV>)n9{^T+L{JbD|Muyo#0R}Si(uu!I~$%=RlE4TkE}KrBPPO!7J2Bit2a{}|Zqf8AVaVJpA$b=F8b1m59+D+z+%UnIK2s(rW82c?Xjf97cbu#kv&_cE;WeU?6e1~ z*baXcc0{M0O(eW=q2+4eRHIZd8MbbS5I?ncqqNbig0^vQj*(0*e-E~9R9lRuZhP&% z{>~S2y!ennBVjGv%9yPcxHH)ua;Lk%W;9f;Hc}}lI|8ex20}-IF?f3!r-If~=IXd) zRJY{dIMxW_UxlZMcol95^LLtw$ z$K0z^%i{<0&ke%#tmG+e#i5KIKNH-4#;AC_tO=i{cCWO#L$T7n<>)E;GJnVpx&I8K z!+G=h_UrEhPxWdMg(*Et_`=KgEVbodPmb~iyNXBRy(zyZ#8?-YCMRd84kQ12F^+*Yumcb*7@K%jkrh4@I_}? z24jP{szS=bo3lL~@^{L9SXK>oJ%3ACV|mz&brU{S4^Vz%tY*!s`D{Vrn@tkxMGG9a ztDP&-lS{oF_|pGmRzU_)pbh=u7H|grS|0kIo38ts#BlZ5b@szMU$X?gdv`b(rrVP~ zwKL)z)wx!pf@$%(VlnoVy|r~2GY@#2R96n3)4Px_zM~mjvSuWHA{GK`(VCYdPjEiO z?uA7qt>_q(v^#aqspSq{Y1~ZO5V>{$>kA{$cwC$eSo8Z@9zQQeQliiQ{;Oka>l3oX zSKZ;0C`PuFu7wwugCCBLLD1YM!?x2DQ*tEhhtYxO@I0+i(@+ut+-$blS-g#Zqy{70 zc;t}ous@@TdhDvmciK;K&NB=0sP(zcoYYdmCheyLxg{6lOFbL%e38s*aJ+WWxfa69 zd11TjU$YX*`W@W=5M3DPkPJc`Hk_cMrxhe%se}4^^eT-z88}L&@BBk?KLCK9QO|ea zZylVT(8gf}w*yG}qATwWvMw*yWNWXnMqLP?T*&$h^R)>9BdegPOYM+Eb++b4)5@3RJ=e(Q*v9m}8g1;* z3}2y2MAe*1cTFgg`)9g{bjHy)R)x|j+`=BYiPL7ww=oVYq6t zSHtI~J&(|<=8Q$@jD9j|HB$HN%F?0|=AK->?d7!gBnu**-xzGT9k7l(Ois9Z@**l5 zz2&2?iHxZ3(gv%^oLg35zW?~CUyIj@iGY&D20rFioIMYri+vc(WmLExp5@a$6mf1INTQ>;eU)4R}=CBhP$W!iH1S}^M6l2!3oLI9-2W=!FZjD4SN@j;=DoumFm z1$mlp#IF9 zs_QAPX*5B+&UhKbCa7k=unQg7kNYBH#xmJrCtBBH6u!~rO6K;0N`Ya+R3SK+4V99Oh%^1nk(bvPOL%u^8qK_lZqhaf&;KQe zQ4#a%POGxP0RRc5dOk)NQ{KTFmqbyZ7qM$dL9yRQ=$SEps;D6_?$ur7-x~1F>S~Bp z4TW+xpH!t%Li+5P%_AQ_f&f#YRiEy3cPf=eLz~zY?eqs91D3+%)Su`ywp|e&STYI0 zkF|7+vEuo3xo#9%-Jn?OjGi%$QE44!y{u)@!Oz}Shv#qU-_pJDdZ36YOV~k}VUbPv zDfCr1eK5)nuI?PUu{Cf`9SYtD`<(UYyv}{DYkjvbVmlz^Ns&2U zZzny0>0TcANxJj=cQFf{%fT)5p}3so(Bq}_*RRFN4|&tAiZx*6!dqr5cIp=xt0T6r zFUUzNQx1N|Jt10Cri&#q8RDGbZCj?}Qn(aOCVX-@?V=csGJ87Xs{->F?ZtVoq1=Yl9S$d#_V9aV+VZiZf>YOr7J#aKab|3=pLz@MKkV}%sj!wAcs=t zW#u~M0hKpp;OJUXuY}050hL3xWoWYe;?$%_gWHRf3Egk@mT@IDx%cfG9Mz<3UT$;D z@H)tQEPlKGv#_nw_wncd9Pr2;VBON5Yg9R+TdZe^eirK6FQ_J{yi%2VK=2zs&vaF3 z@JYAV^Ng@upA`a4HY`@|^8Q03{&((C-B+d|h01sW@4%YPd;PfCo}Ek~k%za=cRMyp zCtg@&=H33B3@Vxzg+IMtIvxIf$K=LgatB{jRd5@Rf>OZqoi;={P3X>e-pv6uZcZAB z3O^ogLDqJiM1Neu9A79|zBA02J3yDOAfw-}v>=;k07rETMr0?MzPZe$xn8f4AT>(H z=~7BBNkkosB1=;1H4>-X<0*)!bAwufPDIo`F(-?AJoWQYGG-#`zbjlPKPToe2iirQ zP1i2jw%Oqzn_v<&EB0lX5!+>w)IQ+OzcH)OE@}y*$=n^Vq_pe6WTq@-1*yS3N|q^m zS~&{?Yl4THCY4rf*8T~sW((G9DQH>3YkSY=U3O@Gy3}pRIdHprflqk*UC@(^+IK6v zNBGkywW9w5;8v2BcrRG%(`N}j>fl%@*J5=$5jMm)9XcFMymXf({>F3Y}wgp9?N?BbCB4JF^#D_v8KU z_#K@_mZlQb0o#Q;ahY~_n;mD`W<5PaL4W7iPeWoqAI^Y!CcO$J%1 zFXL>=keY-T%~pF<&kPw#0n;RmE&NfBul(lAq(S`nv>`v%hUJkOc%qVi+n@1;VC}o> zxZ2lW0-NS~B+t>Tkmoi5%Op3HK7QT~^V$tnP!*Ly>WWaS&95@Ya;P!%9KP?4uH_Kg zz_mEv2xgNM1@mL4SCdXd&!0SHcWnp}bhMY68QcyXAW^UO<7UoYzF)huq3mejfC$%N zt0wj537V!BWG`!fjgWf864w^uKT9)w&eShBQY|Rf)K*2SW8xO`mXk6xD{)1e&2EzP z@Rlr&J}>g}hg)4Io)12>XmH z8#%;Kzm33tl3~6yvoMz(*sa^uBhp-Jb9&$(Jq#J!W~(%Sc{xkPewwgL><*!lVC^tT zhboDyM9vI$rV8)8p>;oX@Si>8Fl6u!@NJdVt6C?he!To>BH4O0mSyfwA^=)GlC-}b$gV1MAtDbzTdfnW7 zNCwRAS=d`xeE2epHH8zZs(x10)NGuBWAER7Ro@8dST3k8{$I?!2UJsEw>WrH2|YmQ zE%aUlqzFQ2Qk55xqH``(*3 z^Ivb)TQl>UHEZQ$-*a;B$-VdNa`ry^?Cqa~0RX^3Jr5^})eaC1H_Y@Kq0JIw>=1nU zkuTr^=FzyQ?XQWohrsW($H3i?kd7Y7=2A|xjW(NMe84ZmMq}RP6*44MQ!73M_G>6= zn}1io{fg3OlgogheQ0Nq@qto`?VQCo>|}JqMX(=Z{`Yt4U<$Mc!MoTEF=0$lZT8 zP10Sst7l$K?#r8n&6-l=o8~R=sOB*71<~?<)kffyoT1Rvp%NEYg5UG3AfjU zCBD1}O7YpZ3UT~@k$e50SfBNDzCu8UMZQ9y=k%d=&oZ+e#kChfF2ghKt=!9u1?JZa zVe+2Sq#Id^P29=;dn7EDw=3i8%{{*7Lzu`7W;}KNd-aIPgRdMnhia1hNN1BecwyQ5 zubvz$M-9kwx!ofZUbs{a=ha5D%imt8Y)bg0v7GpDm@-c=Ebwm!{Ze%KhspA{e|~8> z9F%vj{!&>jOXk-#7MQ7BWd8y2Fj(Y;%jR%?+qbR_cyS@AGg77f{$J31i*P}1w4xY- z9hVbz#m=eVai1u+Sj|aI&Sn~AiJ5QT?_e)BS@*jAy)`}8;|bA3w$M|-H(tRasd8pH zv^@t;90}3Yj+KW3S={faT(4JVDkc+j1G!|AZxtr){s5;>EY-h!8q|DUSx|GjMlAaD zt;)XN9cQBkDx0mj_?F_Wga>xhXI+*O^xuhXp%+hbIfcXUTY{!bN=Hw3^RyRk*F58z zQnt|=3h8XjnK4$n=F$4nBx&Jse|vJl8^nAdbo$4Ol&+AQjp+16l9*~G$s>{^rv6@x zQY48fZ&K4AF&^R?M?(_h?4%}Nl9-wyHIc;lz1=a=1h^QbKx+EGy4YJ{I$w={aHzcl zKF5j-CJjKUzs7P@_^y9sC$sK(3BH&cG!vwNfPV_fEpaEE5O9lp^>{gMn2l7pWb79V zr#`-)QZ8ikv9=j)F8Ncs%?1U0P4V0-LcDPUvNy<{L?CWcb%v-6*t`z(oPg48AJ0#% zOdqt)4g4V9A0OeqjX#PRR}vWJqL3sF^b3~@cC2Mtds&RB)J@{QrU=M}N$vs0Y|rs) zFScXjm@Qm}E%Mc1{%J09`@{Jy@~$ry`7Azmjcsr}z4>r#_=twK{K1?< zvB4;<81RATpRSWtkgP82(k#; z4T_{253r+~KKQ5LouH9z$DsK8M>AAcws&TgI}&HOlvje!DfjGghbbv090s5-exDeP z2~WS}L8Q@SUi{>37oT(JP30vJ_$XBNEbNz^% znzHZIh)+Z=ucRF|)84wOc(oPv+Yp`nxA$J36~DCFH+~dZYV$)$SJ)H7A8=E@+CKAe z_Jl!4E)MsMh=i$ON;a4uy)f$f!Y*bh8*_6Z{%XT}vB-`%4+(j8?#FaGR9wN4gXyZX z^It!+wT(odNSkF9*cQsabSKED?iI@{s=l;*i*NN2UQBJl_G-`Nm5JBD;*FKV>`e=b z|JMiZ_IIG{D%=T4GrSe@h-NM(I>JT?mNmDW9O976=c@sg$Y<#3XY91(iv8jL{CjJ1 z{m%7Pn-OwFikz}BcjkyOI|UYr!U##9*Jg1Duq$z1>=JlHne&NpGNet)FZLJs84ZnV z)27A}S#!5vD=sK{i2T&1U%wul%FWww?<-2@bK>7O)4hW-p|rQ{@Rq*ecte-}Xe7S5 zv;Hv6*6FIVT0+^tAj2)SJKI66^F%r{w+w{2D#R#ZnIer-j`oJvuKopMMF&y@8y)$_ zH))Gj{M9nE@cXA)ulm0#t~xa`>@WwWG*Nggq)-xA?6)|buf(LxiO^Y{&`BUN$s+wJ z?#J&k`UtOtZNY_tgSQ^fKcSFye;L+cozVo*B>UTPpWNBpV%i~iZz;I!@X(;Q>Su5S z8?NV=i)Q>n*XJ(KkmMSi<_{Wmaa?lUl5X$tmSI4YKK1?A<#XLzw4A?MSsu?Xwgts7 zw5t4fxYyP9ANTOzT|$&%ji|@<6_Td+|Fg9waHD!YS`yngIBqa#X(=+5d~~5UVe_Ot zVeQR73fn51?pIYF{wV@$Zz?`6zNxA7Ch)!4Y*VXTduk*tyKteV>TgkQ+uEwE;r)1J zLvHK8HvZ@Fg&I;{TP=V3I@zqPfY~&^Ym=>buvK|Da1Ubg5yq{SA z$Oy$4Z5|v+MYhbeye05nK()O(|p=^GOC`B`GdLBgM$G9e=t}1AII81RMEEiFKi=WoWSNu zGs6N2K^HEx)&7Nlj{nwcsc_TiH<{qHU7$t|15f6#Mbv!!-{^mu>E-};}nzom`)|I-;r z2gw%!I7*7T#cU7+giZfYC?C}j9;?b!oMAeU4VA$y3Xd$3XTbrG9( z;4c<22bKQf&yr_8MPB?F;m1t&*cpN|8; z8d*kNO#NVM_55f&&>X`s`niF=LsI7#MKH~r&_|W%7ZVu3{>S6!X)VSf03@FIMr{zA z2>oX8vDehJ@C2)#{iH(5ti13PKZ_03l#+K*=Ygf+_oN6ngLL7o}IvA8u~4DC3{ zHOE~&-~Rsx(&%4;r)K@X$e5}>bWIXO|4GaLLC=5Sze?4A2+p>(<8+g=Jv$)_g@6FR zKQ#T1)AJvGapd0gq*VWVt7)+qk;-!W^N z1fAI=Eo>&gsd`iUfF$|ffO4grn7GDRtocZEd?TlxC zRBg1wursm9WK}`ODsb-FE{sOJ0OgBS_JRzJQs|t!62N5U@U{u6$Jvk<`lbCWgz3Z+ z)c)%p2*aBZ!TyBDmrLzb29(f`-SfX=@#6t|46ck#DxJ@hu$%1$pjgc+K4AKCWxVDS zyjXtt72wH0VlO`>a})1I6*-2d&BGdlKt)ACY{h}$wxRH!>(K!dmqaxlqis3nuSJZ~ zT&OaPBvNTOP#;j=e}0DxxOYY@Rl!2o-FWXy1En)9>!8|e5FJ^M4s*Ggv&7g8go;QZ zf0GtP9^dOpA|;l(iL@{23=0}h2M&ujYoL=F2p)StBmI)?)38X9D!_pZ3!+bW_mVcP zYabZHP?{u4g~k&(`<(ATgZ#Wbi6t8pqrP$P_ysSu$;(kG!Z@W~$-BoVD=d02^$gU! zUki2y444?FQ-NLxme#}|>vP6+lK2D6rl^6}Iay3h*LH`WT>Po4bvrYu3Qv8u-J6Kv zzym<_HXzhmC=m>~c;J0=>-wlS%Tyj;JRW#XbqKLwoCM{cDxSysD=P~wd1507c&tRBEUc5tHVU@O^bCM`}nBI|_YSNsl9}^rk_E zIeD(LSto@-Zw{|H`INKSD4yj?vK_IUD=PBqh}jy#xt-alCX-?%xQyjwvOa=G|GIsq z)MuifMjLAvQA!y}b?KFJ2kK177#af-(MPNLvAXIG# zSDRTU={6|q$inr(fL_lW+`cm+e!UEYKPI3XcL<=+(MShFb{gNkTSs~GKCIa|3%&Tl zjO~x31`otAkq5{HECdrhx*(bG?b)h8a~xg~7(h$=!R~D05H5zn43R6+%A{RLMw!9n zyyJVigAf(0n@Gp+`G9l-zG&=EAhonHTTF+sqP}Ha0S;CX$7Uyb4y0}eXn>5Lqh7G9 zcw8~W0~pFMy!{~}*o~Rz=;nZ z`3;!~)@}9OS>+}gNJCCVq_*?FH}%7Z^}(Z(N7bN~xWh-LR%C>-l6_!d_e#)_hAaeS66>Hw38Ay$`rHmjuANLASH0v6PvRXp6rxO2x>a{FxYyBLo*zjyk^WIG%)6nD}^w8~!c3*!iVVpCS%HGG%hGFTDBT+Uq1nya4C@1G@Y% z4IL!&>=yv(A!ZhD4*0u>wVXp(2HqkPX|x7Ri-5r_7K-#vP&%&p=H=tF9{RaK@fwBu zS@LrT(w;FS2t(%7B%bH@=9dDToRVjm75h#%A{=n7rMT{vGaB3}&FV_~9tTHkmo8_7 zBatjsv2-V~P`K!vpPG*+77kL;Aooms#mNgMJrm%_K?zBW&K$l?jd>KG!uSAORsBVO ztbc+~HzXxqNoAyWO-=+EO!d>hHpVUr0M)T9bOK0a2S7Dm-UIdmV3ARzRltA$LfY$$ zjmfdzapf(g`T^WgoKpfg&gA)ZrzkLrCKxsSZQ2q%sFV5?KT3JVhgBa?{w1Re`4m4C zd3r};d+}2P24uy-LUf6#k~gp8`Xb4-%4f?w$Mvm0i2=CwqW}WldHOjQIOHE8x5~d- zMf*HNAO&^i9jryJb@^xL^2))d(E;HvBJ25sA`Z1LjKBcc-JW>t(F+^(PTIpx02h)9++Mla}Smm!-D3Gn~J|Cp?1eU(dRPsRN zXs%Jt$lB6+v&<;!xH;52@|U&!{(hh%=WaT_ZT1}r1v4=T6T=%T&zUbg|L|?sI=4(u zD*S%ujaU|no~gVn3;hfe_*f$6PzqY08>(rlO>i?1p-SF!pO~!>I-eim!Xu;3~meGN~dlwT?fwBTSaSr?}kAde?K=JyYmX({xXrjP3o0wlEC5H zDD03%VG4EU7Srb8wDmFvNXOguS^5f3|kenQpzEo=v?ZenZrltb&#w zVnoOE6axa3kpy1;&5ddjPO+d%_JKU&;gsp$A5{50lYGL8BPE$GFDo^QVKIs@Dmr21}5=g5UV-AR)OSHu3 za1}qW57me0*q|9pOediAI}h_>P7D#hkI)-nVdAV?lr0)yY@?&Kk4yiy`-ko!x_R}a zfQS!=WO$$Ix8F-FO-AJtob0po zdNmWbf+1olQ_C4{`&nW{AMhRhjrje%hv17SZcNx=Hyu}0kt@ZAk$bqp`Qh31seUUH z3?%@)X`*voGbLgA^&xCXtInbx)*;KoO*J7Eh%*qBYXnlm<1rF!U*bCp5R>9;)rVxCdqb$ax*~V>mT*V*vnC>R^=7CG6*BPr*;C0kqt;GD7c1 zxUDhn+38Qfbk9j!#FDs8=t`a=gETU^&(}5J-zKh=GjK2*-FxLtXrX^R)dM`8JW~Y! zbeNr(x#c3e>a$!M(Jf}_3k&pXHjtZ=FT7|jB(S7dxiUG$YS4;$VWvhT2scVJ&UR5& zi#{{U{jLapdhwd$M<_*gQO@|dlJsxDC{#a2E?Vxh&bLs`i%f*89>in%8TArB>TIw1 z5vH5*o0hiio0kC@4H&!T3Xz!8A(c;0{(4X@(y_>!Xv0vgzE6g_7~yA?Q6lKV%Ro5k zGhwUcqsx0Rg@J;;JLJC=s@U4|;a$=EbbD4yl$}RnpTn3x7n+>N$}&`-Kk1SG?5qDA zojCBeN#KzceNy7_IY1ehKOmkDxf98J5ob>?SmByTTU_iuE(0v3b4b`l5{W%tFFz8Y zZ=KdJ+Y}xM+yth_#Gs8dB3oO=j~X3iWq8Sg7%A)Rb(B7(2h?_XcD_cCr*EkS4-eBP=|DUJ@#N&< zEapOh*qWZvt5(b}U3(ALqpHX`e%rM+$elOcZN!u8L}>ttOi7VG!I7a=>ajfS!IU_q zcwO+d;R{r1LCC&ak$f6CZFg!>in9!fV%E@!&UByj*laR#gq}N1474X1i9QxLMhALe z^U=mU7aip?`L5LCKzG2KQsAD#Jr{-H1gScK@B6StG9Eq5)S34jrK}EVa>5(}Oesbs zGW`5u$J+xIDSNg3nuBxomB9gbNPG8Tvn}oslP3ew;* zWPzc}6bHl049uRv!>e9B`b6hMP(!HZV+LnTxdVmJI zhqrSG`*Om!%@{W-ZGFZ)#tH|lNRqYFhOV0?q+8fNKI0PE65t0~zf2|A$!WrPc!K)5 zRT~-ZEOSO(mO7zY6hkb$hWq3LU{GrX|0^L)qC zglDDZIXC7X?NpQ01QEw_0Kqz$A_mRP{c^T73UZ<{hTA8Ju$A*(hmHY2bjb(+24e-4 zH?QTuT!pDxF_K%K*-Z5=rcD!HVkwd0oao>#yU>beg*_tC%0fBqh~V^& z?Z1N~1AXkj3aOV+9*}83azFC#L%j?q>THRw7)Y#FX2vRWy(S~j5DY*a;yXU?Cd%LV z;@I~R6aG-5y5l?fQ+fbFcQ`MNUwy< zb`gxI;!$T2oL=XAhYq4~yxbW^uaS}Xv8z1Sk^(@p`rK^-n1(7w*$%R!Ap43T&SwUo zbDyJ&>fPx*^LL=g$B{PTP^xtLJC@UG-IZNNgvJHg!Vn_yj3p3Hj6~4*gJ*R5e=r1c zT>teM1eJq6QYAjV-^IqpN{PSxTwKYi@nhS3Wta$v*TKldjn&0xjP2D%!l8CzDo#Cq z!g1gjO(GTm1U`I$2c^xFDgz*(xRg{M1^6~vc>&O2JjAo8=u;MRdg{6Kpp*}fIaQ3RhMJ~%Mwz7|@GzKK|KT=njp-MjF~@P~Odb)09h zv-i%9`z`>1bDS6)uNz)r8k!CTO&OEHGGcv-PzgvPlvDAfni}%+8+iFfcDx1A>Z`kpfxQz79gu;c02xq@XFNNBV8u{a zYL22T)Wi`EKR;=*qyK8yy!nY$^b$SxOT- z8EZEi97St1qRQc{dQTecgV50O%&bh|KSRWs^#WDKU@S9O$qJ_y#8)LR<^>p2VWGV` zXY0KHPgpOOJZMaP`;h?ehP@?x6!iKPnjtKJ_$_x$rbbJFPiRpA=Ir^Y?M7UD7n>5j zrjJa-Vkq>5qV5AhyI;|1wcry%SN+5nuhKJWv&9I0ByE@KQ4XyxF2eCPwWlxzm%&4M z^ce%~$tVKaQQKP2%fPfAG17{cXPqmm4X~;S2z?EGVps&_7xEj6r^pD!hWKJ=Hr8BW z;Pc4a;sBEEWdRPjUYCtA+XI$3(cedPY2s)XTe1BtA+RaYXzwMrYh)mtOCp121oO$G z#sz-ZT|2d-R}@Eu)JK556J$`~KJF1GLP2;tsWbYL#nuaW!}Y{+(K#)2Z#sD?e^^Fm zDF@60-vJepjlV}HPNezt(W`w&mBkaEC_v~)kbH9ml<1)n+Hdx>m;A0*D+KOqPAzhU z1M1c5S4T>@VeYU5FzRZ81^ksL6_I8Iw{KU0+E9)k52TT1u=t})RtLTio*Y&#Y;*r` z%TFCkOvZ4Y4<)E4@Tn3u-9O>mO}EtNE|J7TX8&AQ6!%Ue#KRCIOk?<_ojI2&h5MLk za?t-C;aB;yT;Q1t%n@0<#V!{+0luS=MRS}>WlW~1Y&IVcU@lRZ4m#*dIK7HhAfAHu zp4%xknNnY=x8tn6u_72G#yR=rzF0R)nsag1xGUz*hx0ow3cdDK;E$I4ZI-qcAPbqgR`Dx%Kuj+|AG01ag zHpK8YDu(NyMcnvHrY=c^c7p^l988fl+a{EcI9iO(y2jDdKdltO0|r>*ch3*XgFV_n zXi!Hg(HNR0WXIiR$m2#!TwduS=QFQ-F3$?mnqQH0h+jWya-NGu+RD+q6t4V5msP&w&+_~uF;)t<@zN7I zA1p|2tK(WcZ^#}swW?=dr2G&RzWZ5eFy~S_6vJ2eD~8E7AdQ)Nxe}2hh+3^Lr7kyV z`f=-wjDM6Lf1xSxM5k{L5XR6Z7#kvej1uynNq-~*)RkNFcm)c*8+Uw+!yN~nKR)$g zZH26;0l;W4q$KXb67*AyAX1@gs;b~M)||BG6$6Mrt}++mtQc^Lw%UV#8aCJ zVu#d+OMoOVmqH5$fEOnQ5+#X93F4+O zm&*_!Otxm~Bi9MMV+#975C#G9)75n^#3%=pk@ZGfcT#Eq2j_=hmFY_-h-w{D3Fo~o z*{krynuIx3B=ZAUC?G6NTz?OzImkYFZg|hCUgL>0_zHTV=F*FU9>H+QJ0wYtmcZgW z2p$;mYGWLtdv^|Dt>G$u(P@%5o|=o`s$XPQY7)b5oN?c7E+-aR9EqIM7(&s9zDZ=m zq9GOl2Uqx$U4X%!9G}M{?qH(#d_~YX@54B z=Ek`$>twKnsZC3dUrp8l(R+smboU@EI=@UQAQl%PWTTejyep$LY{7sp22D45Kb!0q2=nGbL`QF_Vhk~_ZqN40dj zw0u~s=|$lY>my?oyvW5-qT2od(8u&X{NY_CH(o$EJFQ*O#2!E!0$^Y+y_0>{N+tk= z1I@?3#lZnb7PnMi@tqxE^IojXgbz$5CQXGSq3dier;MuLwlh^5E`W6^3dtGNO*I0Z=!}olm|{`AJv>LFm=a<#2 zy6}=^16EUT`=ZIEiRc6bD^1K1H;Yhz>3f=Y4l@fOn#Q(T%^>AeS9`gLA5RavHmDwN z;IREy&>0G$#`I0)W?>Dq4!Z2}lotR!z{ff=Z4^KPr!bH*FfoITJwL{`sh&ku$4L%%I5Gi3Ri`o)`tva^8Wp21}p#Z(EN#o)JG z90#0~rp-`$4$NuY1Tr=gr&HrY|5mmLJ|QKBSj+MjzUhgm7j56Kr55<0Mqm4tGdPVj z=M*$%7Cqa7A$iLosGc;gEpMwF8w!VhrnKi!YRdkdmtPg;NcndGIF_1;`0J6B0A>_w zoosAl%+1Vp=79hrAX604#! zNa@xF(e60dP{QNEN1S5>JO?G&LYyAEO2>x7{px0Q>kB~oH~|Emillt~Y&t=$C_d#@ zx$L)keUY~3OnY(E37QPV*CyZ_jjP~wfdr#%`VNrtgT$~WAX6**B26e(6aXX6kursl zV;{UfYG1vnc~2%jga7qikh(?`c_&l+^O);1RE{g-H=> zXEgURx~|3%!Ge?&_Eil>Fop4`19x)(&VC%XPw1w)C`DJopND?DD9G#sV8Cc4J+jJ> zPg9jxA@txW43oYvX;{xOrFZ&OaIQUo&)M<}|1=N_py`BM({l3e@__7oH9pDpt=bat zTJ(x-Qe1t3!GX8w0T6Hw8ZucrZzCQw0z9FUJMXT^O)M@HB!$-l05m&4ai)sA39#zo z(H_U9ro6M`3EFBu?BlraGx(HJU9LXUuu8q=DJ1BO_d;?+27!3kW0U6x(eS{sL1QbW zQu~Ssd5m@70tb3gjyHAA#A_PlPh6=UzC;kMGR~a{SvTKPM>xXq02<0Tf1C4`fC-DJ z^mp%*wM?<602qb_;qiOK$%fOwGpsm*wg8ide(_UR`_ZiuuKOP%hN%SIvb4)xb5{Wb z0Pl8sboTj9;Z=DM=6hgzjEAIrQG@6u6|oQ2)Mu^Nh?VhaD!ph z5^RY>_K60xbkxH7myEt(*f|utuZBfM?w{4qt^w5NfXL}MtLs+AdJM!--r(mT;D;&S z6CVb~sBP}ttSCr>+6I$KST7t9wQL``!72?PV7mRyyE|77FXKV1>0=h0kH)^Ve-x#? z3pct;P!6U6&qJyobGglWovjy=HbR|p?;7jfY{!)&O|gbu>#|Y(VOPLuKYyxaKL1sA zJdyAQ17I{U08)v>MupGv6=S5S>jZ1Q*nlNgAS!RXPT-~%-dR;9ug|PWgNUIKt$RQ2 z){tAx8X&u?*Ex}}Do1lZuz#M@{6i;Y^xSrPR^FHy{|;|9(K4)ZGK@$##&eZoDMs_P z9wy!0h8rVPGQ%%fqn>|iyCmirNuYRf?SLd&isFnO{Mu)9jH8I~#a32N>3&n% zGsGMX`0FPbpIl0q0{B@N!M#Zr$WsokO_4(Sy{wFX|6aZK=TpwhCR^9Z&!E0tsE`yw zqUqz=sZrC0St8v*j2}lNDv{*g-)GaosVT>nRPfEwI6ZP$uN^Xb^~N<~8sWl{r@P-= zHwUt0DDvb3UENdsH&z3XIC;U@gHgiw_wk_wzJ4W&N?r7s;<{ZkOgbCn|FYO=iLCvX z^^Et^7Dmo9rn=AOpGlEVw@PAEQniEN_ze1VibaFjz$s1r&*qU6-QoAsmg5_Dy~E8| zQ8;BU)(_?_Z%y<>s?HAPq<4?_2wNYW5Z11u@e(Cd7gs58`k{i3cE# z&H8oXAwC_97MnTcrK_Mzes}KTrHa+91q0^V58-y}%j7I9b$1)G?{9r3&S0JFQReAa zzD2ai7U+#V4|+=|B3GOsdtXVmtwDYn&fdiLAcc7w{WV;t4(}wkt!@$<`;7R7ZRJ5@ z6g$Y0XFdND!sl7m&G8Rf8MDV@9v2UT?q3-NI1Yb{bSDcBND;&BJ;M|e>qfFHL_EaS zTEd)K&HJODric}SxKZTL#b29l!7hxG;w)e{H_VS!==q;=9b^Xy`t>Q?ZOclBVaUYm#h&@_ceLF{ z%^I~2;NImNB0yX;bqgPFeClhDQ<P2hw6LhvX_<+g?U1X3Qzd}cZQ!lmdPE9 zPV%wJBlOuN8_$+Ly`xGD)DsV%{dIFJC&)Pzi>2ERLw#@sk6OOn8GYEB0xX?iREy-s)%uP&yoIThSW@k+X_ zm6zC;SO*|)aR5+68UfGDWfW$YT=x+yj1AZHl)cRzankwl&KWv-T}?s>1(>|a~4Hqzi6>tHmB)jYFJMVl}xf6J0cb zpi@vJu@iLx00hY;8FcO+Zs0T(q1$wJo;6WIzoXjtZTW~3+fc0Y1KxzDCuXkwJJ&t# z|8BeA2LewHN#v^gk+*n{oAY{C;z zcYoFj1o-QdD`kRi?Ppu-(4(!1Q^qR8xqvb4r>Apnv7jvRqi3haU=VG~H3yfg%$b2a zj)gNnSZ#pLL9v&C0tU5&_Re(5|K}?30=2bCE-hjnWydP&H~^qQ00ouW@vn}Ux8K{= z&3LlKji03e4-yosGOEvZ^a>3g0{}LG(q39RGH;Yp3`LsSsWgF^M)N3XugN2dx^&v} z=*!K2nA;Da_;2PMnlj5M1s0yfSE{#6*7?9PbAY0U)?3Eg6JcNsB!-=UBj>u(rWTf~ z@qwE-{Qe&Or3#Ddo-*LXu3k3MjwERZkZ@tQBJu?c`ed{C5)J{3W5~z~Z?$5flVBgg z1Opax(_2sK6@t5bfl8F(_3MG47~S!j4G$WpLl(qqdU84@_J|Qa2d(m}aWm1vnu97` zTdJ(aP(F2zU49Rr^ws?+R`lep2Ul2EbUOTsepHZ^Xm^yux{X#*bh$`xt63Zwp{Dgp68aa)D1198FSc)@qtd_U-283%nc|uqg`wkX zBLcE5rg5x}A#N^LAb_(tIZpaEnSYT$bnK=%>|oGpMbefHLkHZC9HF`v@L2@{O`VTW zpC@0=cBErUkP*QG?|y;bQZGALI6){rQT z#Dz?|0th%@^X^{z-i=}SwIZ?o3A@Fd%n%4miLOv0509*{&5Nk)ql$;WnRf85O+c{Y z$gN$~@w3Q=a&s^=@M*unP36ZRi?xgaH^M0I?>qIb3;inn;?;*yT_ zepP}55zDYSKL8V*vb~?YadrU?#y&6$kgu9oTKf-7mzg)-5!P#9J8^^t) zArW*GUt#1>1%!c0JtchH>*Q5KIPteRE6*##EIP_kP2A z8Jdy#vTldc`%%8B$1(#SXgj&;*+KvyiZpVdAqa$f^f)7>!BF1K60JMsC*#(y*$4#ytFSbT58D%{&!rSuz5nSS}38;8+sB zS)}_USg2$c#j5>8TYx_uP}sKzu#!c~q!3^O*D$N=Q9q@zag6#t-fjRX&G9=WfQrfV zd?6hv6H$QP7hDue$jXRd0w{{#);62!g%AW}`Z)$-z@S1!?#B@Hb`qe6fUPRyWGZ5A zpkfJkTW__(xtJP?b{NS3Q6cfwEq2E51Hi-}kMbV@?($mR&{OFx+8CeJlc~f7M-1R(Q?=260igm%7UE zFbu8D4;%src0rQI$NLlYz(-JF4Yo0%LVw!xusS-P{^9_>&3%>ZxBQNG_^y)J79hLL zj~pKs!HlxMWHtTun~j@)@2MyFEf+>H@b^h;!U|t6cQ%fav#^SI%3)HrwROVMPh%ia z29EP$jDhcESB8{PZxijY+x8FO6*o>tl=q|Q=}6nSy*!rCgfV~t!a?p&7fqRHwTb3u ze)ZNnUF$x_GAOCta5)#MbDbt2E)l5>397OexCg_;L-dW_d|C6};NrWt68uJ!gGNmi zMY=_eyu=1;51*SwZ94eJ`t1QFBB+C=_OM`e6Y#C9a}4o|pNy+1UB~C2lc6+LHca=Z*D-jPS903imNl zdgV9Ada?G~=S*oTTj_XgSjhXfOKW$Ieq1I@G03WI3X@ay#p)|^irs(xRFL1eIZlzT z-=W*`0ixyew}yKhFaSxn%nyh#>h=Jl2AZp45-(pz64m+YHX4arvyr6u|B~gQ{8_76 z&~pUp%e}fNb^o@av59dxxV_NaYklcLpw|Iy^H|j9u{0H>$vK{mZzT^H@f8TamLzCS zN+#P!)~;ma`)fbu?{F!=a+$JW8WkH|6aHxGjD0|nY@OQfM7@v2!|LI(^vF8324w@8 zdHdj`#-qG`6w{-W8dB=_mQzFL1|nIj&w7UhR517V#UUf}t=CsM=QMB~DmD-Br#Vk5 zahg0GEWW)DJR`49s?8NcVq^L16m>NW?r_3s=#iQDc^+~J^-=Ex(3S8`GoB$QS{Jv)`4EYTbv>^O;awu^*3 z;w*741cv0`=MjkN)S$l}gX z)T02xC@|~YFl$XDpoWC?#5F6NF68vF(v+sJ+4vH>g{6HdI=aQkkkuR-b^puZcdTM2 zf2Gv(h8NGGM&m}B{(hP#kbggaqj%VA{vTp-{8385JfCr7>m;Wu;LV>fj98tW0Go%( zb#^`L0XC4-!Twq5Dqe2ZO=u_>69UL1!BU8jtQf%y;H)l-*rW!VYhDs~F71chyCtJnWF- zo2B~h+;)0Vl45DGWcV1Ws&_-zX^U#_?$T5YvH7>m!S3a#FZM*(MBK<5X0=QNaCGkI z$ql{VxB~JizVYz@n;7Nw+SDh2-uyPMAG$C|L*A1!kB1KUQ7HnCB-PJuaz0|>G0LDY zOfXy0c)*J~LO$(}Q`HiY`JXqUjL#L`MSwo2dI=?{5g8|n2#7bl0N-s$p73>x)jQ!% zjHD#wAUqiXGcw0&2a9tzypl#-*1XJBK?no0&&6j3tN(TtBB$h^B0G4bXLQhzl)G^} zYkltPvUjU1J|9c_s!YOZ)6nkF;M=+}5Q@{u9728GNl**J7U(&2`U>>A4BwPlu7C8x zYN)x|#q+bQqz7yM`IN!D|64yeq)@+aKO=Jh6#060Ln_xl1SB1Q2i=@ni2DAHda5dj zU!q6*9*pS?Ir}Gz-`buuC3-PG`0?)6cJX2YNB10bsiTw1CsrVXt(~s3@&fT0)9h7t z`;Zj&ev|h3KxwLuOsH01oyek|08f7SI?vS}F}j|s?QU6MR^h#zl1X3ot2Vw_BrD)COdq6-QhsnRpV>Oj!k*bh!D?${;9grCFLo64xVBJZRUNON z*@b;5Ks>#fnz@R2@=EG@lu#Uw+V1&m?t2@xUldzdKm(u{v-q=f1BfN-A*BYQLICbeat=NEfv93emfE>-J0yiM5wyv|z#bh`HNT31ZolO; ztCjrrPr+1gjdW&`y4-qI}J`!;V6w8lS(wk#%9A4wvn1oe|$I54k5NeV&9sS4D z_R+T?_s+jfZBc3Mx;#d+-wp~vCBIK+K>qW($_Q-@chj3JQvQ`(=0 zb&xK4_v4F&iYW3q-q1u?tf%_J7_8n)L#sKEC`TFBFB6v3$Mzr>y+ntRP4x+a)$kCg<7+uHVgK+O5#^SCI z5`3d*X$ZhL7AlaZRu?DcS3LqHpYsj%r1iS~_eOHNl>{ZtZLE)A>sNa-En-^52+ zN3qqF{mgowPJ0Kh3aT@E9+?0tsBk&2cu=L%atmYZ$RpL(j5&HqW#+J_*Yz8#zeJM= zs@XHwNq3uCxx>N=Vz$^8ieo0eDxoEICIt^t(6o{T#XKX6+!pjP0t_}+6nr+mehS); zYA*f+KmjnY0|0YDk#8T&MPGA~d45Uj93y6OY>@N=2nb0Be3aW~QV-RsWXZ3_@FJ3m zUlXUM=dPCuZ*834sYhDdrnP^EwoRObL!s>N(56|DEOHFzy8#$J0_0)j9FLO?ZQ@Gb zJUCQ4JXHO5qHxj*kmn*U#+j_WHMma}9|i~N^FXzIwGZ?WaX~3mSOit;#;fRtuoaV8 z2;~zV?#%XO_;R;0QOS({l#FPN$q1HtpTfEta8v;{sXVVjM$%NUcK{lF#P(gY$1!~` zz+c=UC#PDxqukv}``<3B?bPigUh#N;)TMwuPz9ncE8?!nT;5CM7pR&AqKz5YX9Tnu ze8FkvdEkx{Jd@7%k27lbKVmg?RYQNgxRf2`Y)A|y<$V#pih%75ifKk5^i%DkicEh@ z_5neJZDdb$ON)|y5g+^SRwIqO7p4ji0_WI>d$`E<8No}MBs)1R;Fti_Rtx`>kV0jK zrPTQ530|do-G1@(;nO?e1e);1k4E$7A-VlNptVc@4Chb*yk=oNcMWc?e5R2Lt=bya z7^OHbY+24^fAU4h3rhw0&JxXz#n%`GJ-FT>Tsw2Ug?NGk5KtYGb~#t}Z5{G4FX^1` zBxzW+-QTcaeAt<>g298fP^doIp)F4 z@;btilQcYf-Qqx_PZjrFBeSdJ1>NNwW=~`;dBmW{yg+bjs*(wp?F3DW;^sL!fZ0TJ*s~C6f2@b}|Tf?JSYy zbFQ65WzYiO74;BRe7P8)0vY82RoPr6P4a?uNM5O38orwPur|zM~+c!|8I?bcUV(Tvv3l6uhNm;tAGO1 zLQ|xJbdZ1q>Aee*(4|Nd0Yy641*CUE5ov-2=@>fFI|K;HckuVV_rBl#?jPSg+05?D zoY_5R&$HRx%+AQ;eQkr=&G7i|eZa!f62!e-f!@xI)kffow_0id=dCGvTM9dK)7KBx z@CRMm3O$5abP9}MoZ%F-2JMviFr00Zz|H^!)&g~A`9|;!+dxw?&(sdA; zzj{0zi4VB|G5U%@Jq#VQ>}VVi3m|C|a$CRZH@Fg3*%eTiF`Yw?nSmzDHA+MPdpch~ z{WsSA;YWlW=1GHNHu#BBHsyJhW-D(r1m^LFo<06?xF;P3 zNz6b+&T+@ibo2REyd3!t{Mc_C-mea;&u`OrhQN=J*`64#c3`a_AO*RuH*c!y_#d5> z_2*6UZM1ZSLflEh(?Jww#E3Tb$h(EuV))+lx~J?AX)8lF#Uatl!5vg!WP1mOWF(8& zI^p_aiGzhlX-CHZe<6|(JVz;s7-T=lE>y)~#(TTG{J%8w1bo0>FtMhCMdGN;GBq}E zKiQ~y9*&l3+!(yz{CM8I2H)P1Hy$Ghxk7e_iNQLZ*7~t<25E_CNnR`=sxu#N7Ci@o z<6^*JflKdO5TnF~Qkn;lleoKOH#0XKm{&l}3AE4r46HRu)JBh1&e7=8!P4lDyZFVu zk-r@z8qvUKFY$|~s*t~J=wZ-Au6;C_bmnvvl>rtm?^i2Kww2|(pW|7Aq8-^uiQe`4uzbSP&S-_E$=ROoSGnSgvE!>Hs4T zzwSKWTCAZ;E1((n*_BQyl8eao(D)*|13%AWhnT=@7npLRdLxt+I!o|qxYWu4@j`WC zj5o)~1tMW!55K+f&)}yG(QvhMxtZUSjZoKx6r8J;(~5XDIY+INKzp}_iap{{kl|u0 z_jtC1{+*GeET+Od{MS)CYK2p0B!P<(kT1P2H(L0X}sy3*j zt?SEhw%zn@1qK;v=c7>$$gMY;ZTmqUoJc4Gac&LSZ1Yrbi?-BZ{dGmDoyZ$9qUw9& z{GcY2s4l@t-<#ZHx{cPN4R*|Ox)}WQ%i$2Ui^#etg#mBny{UV+BMSJnShX7aE0)>D;x+<*i=@ZNScIi1#!Hx*%3XKv`(1Oz4tXi;?K-@w6)3Zm!~CK7 z;ODfefqk15)r(CF(P9P=>2VWMUL68BtWVVc#I^b8LR{j;i8>b1E}ajyGaN5%yR*s7 zz6f!OyQ}@>;j6nAMDI!1FPf1-UFTnOUfdB$wsomKp0C4tj(D5VATCBh8Z*+Ltj!*! zFcQ{xeQ?uh0q@XE3UuuJ;S{k$oKAxJ-}a?1NT9cTsi-0MN|d{Z(Oa2Q-@u(eQgG9o5f2R z2a+drR3;qTiVqK9n?!P;1j}dZICB(-m=<4sE%3Mc2e^1Z^vcabJr4r<|VxYk*waPo`p2 zEwVqq>ZU72*`+joCX*6h45XHZmC{nhNI!uoK%QRAqg#EcU#w9x+yk-5kE%d#u4`2H z-boivbM*PN9!T@uTdBKp5gnpxaOE^E*Pjg=9~SAJU7Y&T_0w`_OL$;0Oag z=v$tYIT1_eUjd@t=ON@AbR2iHOsWgChvUSqWxhd@zLs zA*NY3&Jzo4e z!hoQHI&O)&zo;iSiz`3`($h#e3()j;0UFE&N5L zT$S$1!zK90QV^%ffEfSQO%igyOl#Wi;j(66&X1($mB)kt4-2k(S`@~YQ`s>~8rS-X z94#$gi()o2Q+TeFkxq3%NKZ64_DUSd6sh4%ZIId<`7Y<+tuBY9In4fpk5%|&7J=t| zZVpN9n&_f7Z+gkc6U>W|&*rAFypq82uicUuV+U6G8c^e^8uDk?_CePEnEGvGI$Y3> z>uz?e(|MH4a9|Jw5~B6Qb?CZjQBhsSJhfWqZuYAP#GXT(Zm?~``2r=y+0(Z9@1DqI z4pJ3$xKRP~hgK8s^w`NVoRH4VJz`0Hp~Z=i!f)&rvms(eXD?TA0anDf97%0*jV)?@ zD5Dh>;T)`8p*(s5?RY;(|4ig&d=}X)RbMcBRuPF%=LJS{;0L1bk;|+{q=RfRYI&t5 zdntY&ockKW5c=DnjFM(tg~v9&nwb{$BTs4TOl|E>RvUZ_LB@tLl~#u1?<(?bLC zYHhdJ#oL|Q$#Z=Icc-jc-nZ_fh?C*9PgfopAR!^kV2ynmmMt!9cq`u8F%C?XiW1@t z02AK#yvmkuKT>$E*cVWRDJ1013tu`#m%VF;K?!+(6xCf95ls^Y(bEyxj2T!{rkI8X z-g2DXT*JsvobG0WcxRjVYax&0P4wuyE2fQ(K9!r+bv|;!e|&y5Gei57V|UCPuoTw* z-QWdc(xl5K%=z$C22~fKJB2vQGfmP+KA$OBz=)tjtKRME=b}h+zP|y@b0$V6?YzaJ zi7awD+Htnlw}_A$q+v@fg78=lq4dszxm`+YYyt^}xX^H!Fl_aXMo8mT#Zzuq#%@+z zD4~D4MnNS7U36npj|T7E(?lB_-kCtOv18}BVuid`Z)cp+z5Q&}#hB9jv-Do*jlFD& zTOW^IZShA@k(G}mj5=KKyJZv)O{edkAg?7J&eQ9CH1a8a#b_gE@bMOdmRc8s{A+Gh z?PRl~+G)G#_ZHv~(#7?!Z@|97f=!Yp3KsJ}w$p)QxomtLmB#w+SK9i*KX1XT^dE8} z`gMMUc?F*~kBwr>kTU`Hdr~KPaV;Zg|F2vj$C2j+S~q<(8yi)YiU=b5 zjHlxLj05_0h>tkwIowCk%obyPU^g;>P; zs|CkR8!IF&U+GY@x=ATz(m|UN-I}u8h_pKKQx2!s{SJAYeuRmEUm`~e{WckfEiM<< zb)qlZW}N&&6`xNKdABCj%~{WaH9FSl@UHYsG4*5HL9{;~z483Hd_LZgkYU_t2fjBe zfy4t={N}#)Y&B}Qgy2pQOh{v1sNN2~;wjDkQKVw$JCF9cs1hk*$k7J7A9}0#*37C8 zBpI=lcbIX4R`Py#fmxmQlEbmt13%#BvHrhy9q--lI3s#LtCnYi@$bWI2S3&pGZg*I z``+g~x5qt}F4b6F@~gy+i>pL&a*JHJpU?#3&%bVSERG_MNllA$eYxJbD=#<*(uV7u z>)h1}tKx&2$2icQRra#%xq#w$A%iB zK1syUyk-zT9ve*j{lkcNmSKjL)B*%f<{vf2{w~i!?P9xB zz1##u@r^Q!U)T4=z23p+h#8{KOATk%C9oDLD5z+1?)*#Uah|bcQfuUXa`r49|EgAq z9yg;?Aeh~|fVTD#*wOORZhuf~JAb*Z!pgKdd|8Svhl_wrJRhiWL&m;s)e)a@wFOUt zNL3l!18z%Q3~@4T1%66c_Rt$DeWWc0?~5d+_Z-HY2Te5f-CZF=O45-A zo{BSnvC7oTx5XRHxcP0wF~7eBzE}jQI6UEQmTOSEP?q9Xk@^YqN12hT5YF=a7SvOK zl$=J%f3Da1fyias^nJH<>>s{HaPb%ioQIubNYUJt=}#T8Sm&9$&V=S|IIvh>F8}Zt zHYz3gZSWc$`}c=0)Ssvo&D=A`cfT07ycl!hdQ<4Fux>M?aa@@_eq}?f+^PN0(>P>+ z5e6dVEhvjVcvlY2E80V0=zW&MmR)%QJC#<8mbt=BT_LXtufywV&(&G9soZLt)=aQ$ z4m6})evAgQxp*9rhOtgv$3le&OJ;26MrQt}5|C@BPfvyo*Obv_8zafDXx{jh^gcny zs|om*>|71_)Aot$Cx^Qe9QqW_`(hMS$fa)d;Vp*!yWiFyoL{MDfq}h+H?CU9L@rZ& zxD_>RblBUzI>yJCeTPi#2uITO;*2g!gL!=6U6lZ@GHXI&Clx~6fShT{O)ab>>0Tjy z;YBBBRIR5_gRY>}4`psaXf_{>mG{T?7=0}Y;qk>Kjc0N_nq9Q^Hqm4b4K~dreC;_& zc8Un>Aw_b3<=TT>%a=&7dQI!mE_r2aowYM5;Cfvr%tW^F8j;R`E{kpz)0bTB*pYExJp2{6!mOl* zNnrPo)jwmJ9aujQM7Z&dAV1d&U&lCmcLx(CLVR}n%k*PHnYDhxjx`UVreeC(0F<=N zTE$TuVA?ByXj&tv{*{LAi@v55zQ1pCXQqmj4S;x`&-sK&{*{L&N%Sj zB9UT($_w4J(QHryP@>`-BD(VC&hu?>wMUa58&lv_85i@OFbL5b-@;;yH}p6D`V--x z<3;VKgAcByGllzq&dFO9W&eceNu~B*dT`6*#xu}y76}#aqb)nB5Q~2;g2Bch*-`M# z+YCz0L_K}puAhTmqd=q##E-#i$1m?tGSNslqkwSCO%qjw)K3B=tsmTh+`WjBrPNG{ zQCR~ODpDdp&wMYE#}stJ@NXdy!Ds1r;4QEZoEz&OHzovP<6s)J?VvuuY0h@z;(`XTFJbT$)rLB=d# zK%s0)ypsA36_w6OAhV;iF|#S+fez8>RHqXn;P(y}=Dcw}AA8q1_2R8qD(u~*ON1Ms z$3k`O*iq4psU|PrC>~;!NyQ&YDS9{e9e#$G-NsZ%3w~?T2RJ~-O+99)cCoV9x^uD{ z@rpxTg=bla$cl7V?(JfFNvYq~c|WO(5n7R{VH!?HaxhpjBC#I!t-?qNKVtkyLYSC0 zy}0af>ln*~_i8&}#G$v?ZvC@a{wY~w3Ka`@-8 zM{^&Z3PjIKb_~{RB_P5mC zZT07B?&YheGV_It(ZaucO%^b3#^>MuGBf-5mMz|_)u56;2lGYsa#8Rjs+jUy&yk7_ zt>v{m@HcNX2ETwDa3GY>(=N{~e|?-gz%}|Hj?F_c?}U}ge4`P>!PhVn)7Lg`o`w~M zXBr~5XF-hIJgDdXPn~l5QyvJ@E}G?(SmWzy_*wE59GxO0V!#g~F~B&DMVhO=!yVVG z`xoQupaxOKLrWBZV{wwXz}o{m~&LDOcx{^px@#+c%*wK9&M zvu8_3%K3+lty~F;dWq+HIi!2K2US9!YZc;t(osNol%H{EkVTYR`n0wdyGh`G|M;d@ zwf-t;ph&ER$C&QC^`i|Ai#2K>@eL*Ey!is-=G$7f1LvfPAZP`xR)IiZB_M_mFVbpv zoUg!KzF{%;L0^|ayuL;rFXJTbtG>7!S|Zgv1{vg@kMF|&KZyq(zRY%76+@{%jK2iL z80vwZ?#>L(v?YuT9Lq8puvxy)aVMOcK1D0xLWc1iPN1%>UQ~YLgbaP3QRd0%3e$4s zoY1M{b`i5ZeS!FZY3|_H5rA+FwtXI@)C7ftXZH_c2&|;K9}V2I^^(Jq&de+B)I|8=>K_Ln)h2%hy_ zWzTcCyc|7814eoFRM7w_V4rpYAs|wLZ3i9OAeeHDfRO_2LiOU}ylp6KVE|X1t zI#ep3`LT@_0>6A`kZb1x*~6|-2t_6o{(*KnOWM05`HimdMAUTCPR_;TNmy9ks8;ly z<;z=_z#r(^S80-JML<>);q}xAGlikrU3|ywI0DKiOWaSADKFMB5x2NeVR$a7^_0mN z8@cPsZ%^;y)wYVhMvh#B)*ybL#WJPa*qIr5ZP&_B4K_9Asnr-8-mQNwHGZ9Ho%m&Y zZW3;{z@~z8<*h)werWB|f(&@0yFnmeAvp;TcItr+zbum%_MRyZURpD!=;?(LK_-HR zere~QbnZ6MhP_Y2pAqWHVea|a9G6-JMy0qrZ9hi0(zZP{R|=0AJoHv#6TiwZvd_^S z@x&O!%Q`})?Z&sW20@&uzPyb-K{C>U`v?_SWirl{Cvm57ekWK#g}AC(7>) zG1Gi3)_lSWxi*V|D?-R5Lf)=N*!c z-JBvMq0&oYQ!9h-)UtwWkf8b9nl0NtkSoae_WhX2R;WFh_VDSXAp!k_;r)3KTpk_R zK8VJMbvt+(e?+8|G=;$80*z56zciqZT?jcTBgUGkRGEgI*=HD%Oi_3ZQ*27iy4ysP`DZ{1FZ~cwVcPLB7VHdko zQZ-QApW@Z4@q}FQj37HuGYNf{xj{C^;fz7=2SE@ydDU;;8&|5t2`b!HKvG@x;cJF) z68A<;bCNHyDO~W zQAAyq+1Go+#>h2r5fpF}ThR#kpRSO6|6hJ&{}PY`^D6cGF$BzFd$Qa>I7)jZ8A2T0 z8tV-j*O`O`SH;C5q0sjmmYBD;81Lot;R}CfFH8TQQS6y)8S==D9vtGN^teDqGp|+%hw9hViKdQXK$nLh1U$HlodGVF9 zw@uUL-0&pH$>57d<(1XPx{GBIHF4v1Fu~=U9govL4bEd)f9E9UANR>Q>}ig!<;5=Z zI-+m(QslhY#ctttza&cd$s*wa%5lS7b^`GW*rRmnym`v6Ugi4b4@f>AByANlOhM$nSb4?0PoLLccs1Z2zRL5$M;quDXjOPBJ$s01$o6kE*t+`K)#dGr zM)!QN<8Nz7vDIaKeCsv-wBs=B(>x$UIxcHQqss}kHK~_d8y$-=3HYn=8a()XDrP3cp;lD zxu|hq`9|C8Ey*A(v$xap)R*k}Vy*WB=iWoqD2GK&EXW(pBlg(jH(#t|*#N%pzC9CR z>R{%s_6pY~_-Wp6Ly5IJnjlWh#585Fux1gv#JJwUyj8WbdqBK-4nllPJCMAw2U)>dk39 zvvA~CnQesq{nx3Enz0rU*J=|p1CnS-JFe~JZ)C4bN0Gd9w0n+51Sj&v{Eq1{Hh$8} zgR(4Ks5mvuzusd!5VoqI;f8U)-|}WB>@cK_E57y6Z z&qVtUOv*wpv9#DTg+Cmaly#XUpDdaMA;glFk^^b0nY%OptD{e0bh+VQPCTZB{Q?AB zWofuaZD2;dM)#1e&n5nSzr1!!;GDzAoAkkZou2c)OQQ~DLY#@okvHLjME>N@Y5l35 zlDp7wbTnU!TE)rqEgz6`C_kuMb%S>1vbNqs?Ofa8OsVFTh&s!nf3}>^+PL;P=0-Sl zVj79`3L{8PeYx3H6EmnPuZB5uT7rc|BQy4A@q6+rr!Q{R_A!L8^ z24?Qj3g243Dt$c_D=<`@lBEVgP%hT6i#kui7FWd0hpv8kjr|+~R{X3Z?%R-MwScp0 z5Vq_!5bFJ1NfeS!Xej1_dZt5%>_*H{Cm7A^|7hv{r2j9;B2 z$i2$itj7GUq-{U$mDoavLQUsRgAHMI2}GV%LD`wER&P_B7X!iTwwJ`U)oUZ@a>|#l z2zSKt6Q*R8`W+LyfUl@R-+v@2WF=HnJLCu{eyR}aO*Zx`#SG=O+Ab>t7fS0qQOJ3I zdLp#VrJh(Zy5UB zm&GL`D!gw{M)#*k@!LPANLuZkheVH7ToE^vIpws{tw_WdQ3s8i4!HEpH{Lgd6-XmuU#Tcq&CQJt1jI%-PlY0i za(=E_C<2;)wRBN3n3W0?1mxqAo zzlz)&7ZT<~3ub8B6Ggn-tJt^=N)9l>P~#*uTTF@c^By!BsxvV6F}_rTSPDJO$qb*< zUTDr$4nO)z0}l@^u=i0D{|HQR0H?zQeqKI4!9Y!(Ucs(#0RION04*Ru0e??je*PQ& zuL3~+A7$u&Oa5;;2;hl6FVNr717O+(di<@E;6DWar46X}f5QK$=YOl02)G9DCv^$@ z&hWqh0CPBd1_b`4{B7yK^#0WaVeo>xIRZRxFZlnwcNu^z4KnZfd!>Xc+|&PGIzYj0 zaOZ#LFR=ws_R(?lhI=|+%7ELw+`JzE8OC6*ze@kJ+5GT-cpPwl=S!JOxa3m?`FnEz zlLtoz1m5=q@~;8{1ODA1monLo!A{ozd}9%y|3~5<@_&4@;PF67 z8qlf<)Z!5~7{VVXWbp4Qhfz!$)m`Y#hp zK;YlU3}pW)108UgX9QY*`S>s4-?AJ4&FLS~f6-X}#Sa8{5C6rxL;zi(9?(?`0uj3a z@wB;spt*Da{qoTZ{*y@g0e&;k#!&!!16UTI(*iRM4FEF&36K{E0&qJB*i{3X0l4HL z+6B^efOh{t@pts~z3id?0tvT& i-Z6o=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@types/node": { + "version": "20.11.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.22.tgz", + "integrity": "sha512-/G+IxWxma6V3E+pqK1tSl2Fo1kl41pK1yeCyDsgkF9WlVAme4j5ISYM2zR11bgLFJGLN5sVK40T4RJNuiZbEjA==", + "optional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==" + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cypress": { + "version": "13.6.6", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.6.tgz", + "integrity": "sha512-S+2S9S94611hXimH9a3EAYt81QM913ZVA03pUmGDfLTFa5gyp85NJ8dJGSlEAEmyRsYkioS1TtnWtbv/Fzt11A==", + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^3.0.0", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "engines": { + "node": "> 0.8" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==" + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "optional": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/.github/actions/css/package.json b/.github/actions/css/package.json new file mode 100644 index 00000000..0f166000 --- /dev/null +++ b/.github/actions/css/package.json @@ -0,0 +1,14 @@ +{ + "name": "autograder", + "version": "1.0.0", + "description": "Autograder for HTML exercise", + "main": "index.js", + "scripts": { + "test": "cypress run" + }, + "author": "João Eduardo Montandon", + "license": "ISC", + "dependencies": { + "cypress": "^13.6.6" + } +} diff --git a/.github/autograder.dockerfile b/.github/autograder.dockerfile new file mode 100644 index 00000000..70547aaf --- /dev/null +++ b/.github/autograder.dockerfile @@ -0,0 +1,18 @@ +FROM cypress/included:13.6.6 + +RUN apt-get update && apt-get install curl + +RUN adduser grader +RUN su grader +WORKDIR /home/grader +RUN mkdir actions-runner +WORKDIR /home/grader/actions-runner +RUN curl -O -L https://github.com/actions/runner/releases/download/v2.273.4/actions-runner-linux-x64-2.273.4.tar.gz +RUN tar xzf ./actions-runner-linux-x64-2.273.4.tar.gz +RUN exit +WORKDIR /home/grader/actions-runner/ +RUN bin/installdependencies.sh || true + +USER grader +WORKDIR /home/grader/actions-runner/ +CMD [ "./run.sh" ] \ No newline at end of file diff --git a/.github/workflows/autograder.yml b/.github/workflows/autograder.yml new file mode 100644 index 00000000..f6fe26dc --- /dev/null +++ b/.github/workflows/autograder.yml @@ -0,0 +1,65 @@ +name: Correção + +on: + pull_request: + types: [opened, synchronize] + workflow_dispatch: + + +permissions: + checks: write + actions: read + contents: read + pull-requests: write + +env: + FILES_PATH: ${{ github.workspace }} + CYPRESS_PATH: .github/actions/css + +jobs: + setup: + name: Correção + runs-on: [self-hosted, html] + if: github.actor != 'github-classroom[bot]' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Inicialização do servidor + run: npm install && npm start & + + - name: Cypress run + uses: cypress-io/github-action@v6 + with: + project: ${{github.workspace}} + browser: chrome + wait-on: "http://localhost:8080" + working-directory: ${{ env.CYPRESS_PATH }} + config-file: ${{ env.CYPRESS_PATH }}/cypress.config.js + + # - name: Report Full + # uses: dorny/test-reporter@v1 + # if: always() + # with: + # name: Relatório da Correção # Name of the check run which will be created + # path: 'reports/*.xml' # Path to test results (inside artifact .zip) + # reporter: jest-junit # Format of test results + # fail-on-error: false + # fail-on-empty: false + + - name: Report Summary + id: reportSummary + uses: test-summary/action@v2 + with: + paths: "${{ env.CYPRESS_PATH }}/cypress/reports/**/*.xml" + output: "${{ env.CYPRESS_PATH }}/cypress/reports/summary.md" + show: "all, skip" + if: always() + + - name: Pull Request Comment + uses: thollander/actions-comment-pull-request@v2 + with: + filePath: "${{ env.CYPRESS_PATH }}/cypress/reports/summary.md" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + create_if_not_exists: true + if: always() From 21359acd22d89a7b7b8a46848b0fa2ddad5eae95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 00:47:11 -0300 Subject: [PATCH 06/21] Updated configuration --- .devcontainer/devcontainer.json | 36 -- .github/actions/css/cypress.config.js | 10 +- .../actions/css/cypress/videos/t1.test.js.mp4 | Bin 48648 -> 0 bytes .github/actions/css/package-lock.json | 211 +++++++- .gitignore | 6 + package-lock.json | 505 ++++++++++++++++++ package.json | 14 + 7 files changed, 741 insertions(+), 41 deletions(-) delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .github/actions/css/cypress/videos/t1.test.js.mp4 create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 37069091..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,36 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.217.4/containers/alpine -{ - "name": "E02-CSS", - "build": { - "dockerfile": "Dockerfile", - "args": { - "--name": "DAW-E02-CSS" - } - }, - - "remoteEnv": { - "FILES_PATH": "${containerWorkspaceFolder}" - }, - - // Set *default* container specific settings.json values on container create. - "settings": { - "--name": "DAW-E02-CSS" - }, - - // Add the IDs of extensions you want installed when the container is created. - // Note that some extensions may not work in Alpine Linux. See https://aka.ms/vscode-remote/linux. - "extensions": [], - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "uname -a", - - // Replace when using a ptrace-based debugger like C++, Go, and Rust - // "runArgs": [ "--init", "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ], - - // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "node" -} diff --git a/.github/actions/css/cypress.config.js b/.github/actions/css/cypress.config.js index f75e8321..84ab301c 100644 --- a/.github/actions/css/cypress.config.js +++ b/.github/actions/css/cypress.config.js @@ -1,16 +1,18 @@ +const cypressPath = process.env.cypressPath || "."; + module.exports = { e2e: { baseUrl: "http://localhost:8080", - specPattern: `${process.env.CYPRESS_PATH}/cypress/integration/**/*.test.js`, + specPattern: `${cypressPath}/cypress/integration/**/*.test.js`, video: true, - screenshotsFolder: `${process.env.CYPRESS_PATH}/cypress/screenshots`, - videosFolder: `${process.env.CYPRESS_PATH}/cypress/videos`, + screenshotsFolder: `${cypressPath}/cypress/screenshots`, + videosFolder: `${cypressPath}/cypress/videos`, viewportWidth: 1280, viewportHeight: 720, supportFile: false, reporter: 'junit', reporterOptions: { - mochaFile: `${process.env.CYPRESS_PATH}/cypress/reports/report-[hash].xml` + mochaFile: `${cypressPath}/cypress/reports/report-[hash].xml` }, } } \ No newline at end of file diff --git a/.github/actions/css/cypress/videos/t1.test.js.mp4 b/.github/actions/css/cypress/videos/t1.test.js.mp4 deleted file mode 100644 index d3cb72133cf3c585b9cb0ae1060c571cc4c1522a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48648 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 i-Z6o= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -472,6 +489,14 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -663,6 +688,11 @@ "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", @@ -750,6 +780,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -923,6 +972,64 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/http-signature": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", @@ -944,6 +1051,17 @@ "node": ">=8.12.0" } }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -1219,6 +1337,17 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1254,6 +1383,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1300,6 +1440,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -1345,6 +1493,35 @@ "node": ">=0.10.0" } }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -1472,6 +1649,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -1707,6 +1889,17 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "optional": true }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -1723,6 +1916,11 @@ "node": ">=8" } }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -1753,6 +1951,17 @@ "extsprintf": "^1.2.0" } }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/.gitignore b/.gitignore index c6bba591..360a0e8a 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,9 @@ dist .yarn/build-state.yml .yarn/install-state.gz .pnp.* + +# Cypress +**/cypress/videos +**/cypress/screenshots +**/cypress/logs +**/cypress/reports \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..5789183e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,505 @@ +{ + "name": "html-autograder", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "html-autograder", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "http-server": "^14.1.1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..6e191c46 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "html-autograder", + "version": "1.0.0", + "description": "Autograder for HTML exercise", + "main": "index.js", + "scripts": { + "start": "http-server -p 8080" + }, + "author": "João Eduardo Montandon", + "license": "ISC", + "dependencies": { + "http-server": "^14.1.1" + } +} From 46577dc309887cee5ee472aa315fd801b6f5639e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 00:49:32 -0300 Subject: [PATCH 07/21] Fixed t1 --- .github/actions/css/cypress/integration/t1.test.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/actions/css/cypress/integration/t1.test.js b/.github/actions/css/cypress/integration/t1.test.js index d47db29e..b03eeb3f 100644 --- a/.github/actions/css/cypress/integration/t1.test.js +++ b/.github/actions/css/cypress/integration/t1.test.js @@ -2,10 +2,11 @@ describe('T1: Paleta de Cores', () => { before(() => { cy.visit('/index.html') }) - it('Deve ter uma cor customizada para o texto da página', () => { - cy.get('body, html, .page-wrapper').should('have.css', 'background-color').and('not.equal', 'rgb(255, 255, 255)') - }) it('Deve ter uma cor customizada para o fundo da página', () => { - cy.get('body, html, .page-wrapper').should('have.css', 'color').and('not.equal', 'rgb(0, 0, 0)') + console.log() + cy.get('body').should('have.css', 'background-color').and('not.equal', 'rgba(0, 0, 0, 0)') + }) + it('Deve ter uma cor customizada para o texto da página', () => { + cy.get('body').should('have.css', 'color').and('not.equal', 'rgb(46, 50, 71)') }) }); \ No newline at end of file From 7b3d1b86f71354c9d99eb7ba9cf59b8b7bd9639b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 01:22:54 -0300 Subject: [PATCH 08/21] Fixed t2.test.js --- .../css/cypress/integration/t2.test.js | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/actions/css/cypress/integration/t2.test.js b/.github/actions/css/cypress/integration/t2.test.js index f8412065..0ccf6a81 100644 --- a/.github/actions/css/cypress/integration/t2.test.js +++ b/.github/actions/css/cypress/integration/t2.test.js @@ -1,5 +1,5 @@ describe('T2: Estrutura Textual', () => { - before(() => { + beforeEach(() => { cy.visit('/index.html') }) @@ -12,14 +12,26 @@ describe('T2: Estrutura Textual', () => { cy.get('body').should('have.css', 'font-family').and('match', /sans-serif/) // 1.3. Check if the paragraphs are indented by 1em - cy.get('p').should('have.css', 'text-indent', '1em') + cy.get('p').should('have.css', 'text-indent', '16px') }) it('Títulos e parágrafos devem possuir o tamanho correto', () => { - cy.get('h1').should('have.css', 'font-size', '1.8rem'); - cy.get('h2').should('have.css', 'font-size', '1.4rem'); - cy.get('h3').should('have.css', 'font-size', '1.2rem'); - cy.get('p').should('have.css', 'text-indent', '1em'); + cy.get('h1').should(($h1) => { + const fontSize = parseFloat(window.getComputedStyle($h1[0]).fontSize); + expect(fontSize).to.be.at.least(24); + }); + cy.get('h2').should(($h2) => { + const fontSize = parseFloat(window.getComputedStyle($h2[0]).fontSize); + expect(fontSize).to.be.at.least(22); + }); + cy.get('h3').should(($h3) => { + const fontSize = parseFloat(window.getComputedStyle($h3[0]).fontSize); + expect(fontSize).to.be.at.least(18); + }); + cy.get('h2').should(($h2) => { + const textIndent = parseFloat(window.getComputedStyle($h2[0]).textIndent); + expect(textIndent).to.be.at.least(16); + }); }); it('Deve ter alinhamento do resumo modificado', () => { @@ -32,7 +44,7 @@ describe('T2: Estrutura Textual', () => { it('Deve ter espaçamento entre as linhas customizado', () => { cy.get('.main p').should(($p) => { const style = window.getComputedStyle($p[0]); - expect(style.lineHeight).to.equal('1.5'); + expect(style.lineHeight).to.be.equal('24px'); }); }); From e701b59a63c628d7e1085a254a08c5cbfbed25c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 01:54:11 -0300 Subject: [PATCH 09/21] Updated t3.js --- .../css/cypress/integration/t3.test.js | 63 +++++++++++++++---- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/.github/actions/css/cypress/integration/t3.test.js b/.github/actions/css/cypress/integration/t3.test.js index 6e3818e9..5bc46c67 100644 --- a/.github/actions/css/cypress/integration/t3.test.js +++ b/.github/actions/css/cypress/integration/t3.test.js @@ -1,29 +1,68 @@ describe('T3: Box Model', () => { - before(() => { + beforeEach(() => { cy.visit('/index.html') }) it('Deve definir diretivas gerais para a página', () => { - cy.get('.page-wrapper').should('have.css', 'width', '80%') - cy.get('.page-wrapper').should('have.css', 'max-width', '1280px') - cy.get('.page-wrapper').should('have.css', 'margin', 'auto') - cy.get('.intro').should('have.css', 'height', '550px') + // cy.get('.page-wrapper').should('have.css', 'width', '80%') + cy.get('.page-wrapper').should(($elem) => { + const style = window.getComputedStyle($elem[0]); + const margin = parseInt(style.marginLeft.replace('px', ''), 10); + const maxWidth = style.maxWidth; + expect(maxWidth).to.be.equals('1280px'); + expect(margin).to.be.at.least(50); + }) + + cy.get('.intro').should(($el) => { + const style = window.getComputedStyle($el[0]); + const height = parseInt(style.height.replace('px', ''), 10); + expect(height).to.be.at.least(500); + }); cy.get('#design-archives').should('not.be.visible') }) it('Deve incrementar o cabeçalho da página', () => { - cy.get('h1').should('have.css', 'margin-right', '1em') + cy.get('h1').should(($el) => { + const style = window.getComputedStyle($el[0]); + const marginRight = parseInt(style.marginRight.replace('px', ''), 10); + const display = style.display; + + expect(marginRight).to.be.at.least(16); + expect(display).to.contain('inline'); + }); }) it('Deve incrementar os menus', () => { - cy.get('.menu').should('have.css', 'list-style', 'none') - cy.get('.menu li').should('have.css', 'margin-bottom', '1em') - cy.get('.menu li').should('have.css', 'text-align', 'center') + cy.get('aside ul').should(($el) => { + const style = window.getComputedStyle($el[0]); + const listStyle = style['list-style']; + expect(listStyle).to.include('none'); + }); + cy.get('aside li').should(($el) => { + const style = window.getComputedStyle($el[0]); + const marginBottom = parseInt(style.marginBottom.replace('px', ''), 10); + const textAlign = style.textAlign; + + expect(marginBottom).to.be.at.least(16); + expect(textAlign).to.be.equals('center'); + }); }) it('Deve estilizar o rodapé da página', () => { - cy.get('footer').should('have.css', 'margin', '4%') - cy.get('footer a').should('have.css', 'border', '2px solid') - cy.get('footer a').should('have.css', 'padding', '0.5em') + cy.get('footer').should(($el) => { + const style = window.getComputedStyle($el[0]); + const margin = parseInt(style.margin.replace('px', ''), 10); + expect(margin).to.be.greaterThan(20); + }); + cy.get('footer a').should(($el) => { + const style = window.getComputedStyle($el[0]); + const borderWidth = parseInt(style.borderWidth.replace('px', ''), 10); + const borderStyle = style.borderStyle; + const padding = parseInt(style.padding.replace('px', ''), 10); + + expect(borderWidth).to.be.at.least(1); + expect(borderStyle).to.be.equals('solid'); + expect(padding).to.be.at.least(5); + }); }) }); \ No newline at end of file From a97e0d61adc3743ee7708ac177fed635515af0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 01:54:58 -0300 Subject: [PATCH 10/21] Updated remained tests as pending --- .../css/cypress/integration/t4.test.js | 62 +++++++++---------- .../css/cypress/integration/t5.test.js | 34 +++++----- .../css/cypress/integration/t6.test.js | 50 +++++++-------- 3 files changed, 73 insertions(+), 73 deletions(-) diff --git a/.github/actions/css/cypress/integration/t4.test.js b/.github/actions/css/cypress/integration/t4.test.js index 1d708791..221a73fd 100644 --- a/.github/actions/css/cypress/integration/t4.test.js +++ b/.github/actions/css/cypress/integration/t4.test.js @@ -1,37 +1,37 @@ -describe('T4: Posicionamento', () => { - before(() => { - cy.visit('/index.html') - }) +// describe('T4: Posicionamento', () => { +// before(() => { +// cy.visit('/index.html') +// }) - it('deve ter o .page-wrapper como referência de posicionamento', () => { - cy.get('.page-wrapper').should('have.css', 'position', 'relative') - }) +// it('deve ter o .page-wrapper como referência de posicionamento', () => { +// cy.get('.page-wrapper').should('have.css', 'position', 'relative') +// }) - it('deve modificar o tamanho do painel .explanation', () => { - cy.get('.explanation').then(($el) => { - // Check width - const windowWidth = Cypress.$(cy.state('window')).width(); - const elementWidth = $el.width(); - expect(elementWidth).to.be.closeTo(windowWidth * 0.6, 1); +// it('deve modificar o tamanho do painel .explanation', () => { +// cy.get('.explanation').then(($el) => { +// // Check width +// const windowWidth = Cypress.$(cy.state('window')).width(); +// const elementWidth = $el.width(); +// expect(elementWidth).to.be.closeTo(windowWidth * 0.6, 1); - // Check right margin - const marginRight = parseInt($el.css('marginRight'), 10); - expect(marginRight).to.be.closeTo(windowWidth * 0.35, 1); +// // Check right margin +// const marginRight = parseInt($el.css('marginRight'), 10); +// expect(marginRight).to.be.closeTo(windowWidth * 0.35, 1); - // Check right border - const borderRight = $el.css('borderRight'); - expect(borderRight).to.equal('1px solid #1f295c'); +// // Check right border +// const borderRight = $el.css('borderRight'); +// expect(borderRight).to.equal('1px solid #1f295c'); - // Check right padding - const paddingRight = parseInt($el.css('paddingRight'), 10); - expect(paddingRight).to.be.closeTo(elementWidth * 0.02, 1); - }); - }); +// // Check right padding +// const paddingRight = parseInt($el.css('paddingRight'), 10); +// expect(paddingRight).to.be.closeTo(elementWidth * 0.02, 1); +// }); +// }); - it('deve ter o menu de design na posição certa', () => { - cy.get('#design-archives').should('have.css', 'top', '560px'); - cy.get('#design-archives').should('have.css', 'left', '62%'); - cy.get('#design-archives').should('have.css', 'padding-left', '2%'); - cy.get('#design-archives').should('have.css', 'padding-right', '2%'); - }); -}); \ No newline at end of file +// it('deve ter o menu de design na posição certa', () => { +// cy.get('#design-archives').should('have.css', 'top', '560px'); +// cy.get('#design-archives').should('have.css', 'left', '62%'); +// cy.get('#design-archives').should('have.css', 'padding-left', '2%'); +// cy.get('#design-archives').should('have.css', 'padding-right', '2%'); +// }); +// }); \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t5.test.js b/.github/actions/css/cypress/integration/t5.test.js index d2b2e733..66986011 100644 --- a/.github/actions/css/cypress/integration/t5.test.js +++ b/.github/actions/css/cypress/integration/t5.test.js @@ -1,20 +1,20 @@ -describe('T5: Seletores Pseudo-Classe', () => { - before(() => { - cy.visit('/index.html') - }) +// describe('T5: Seletores Pseudo-Classe', () => { +// before(() => { +// cy.visit('/index.html') +// }) - it('deve customizar a aparência dos links', () => { - cy.get('a').should('have.css', 'color', 'rgb(0, 128, 0)').and('have.css', 'font-weight', '700'); - cy.get('a').first().click(); - cy.get('a').first().should('not.have.css', 'font-weight', '700'); - }); +// it('deve customizar a aparência dos links', () => { +// cy.get('a').should('have.css', 'color', 'rgb(0, 128, 0)').and('have.css', 'font-weight', '700'); +// cy.get('a').first().click(); +// cy.get('a').first().should('not.have.css', 'font-weight', '700'); +// }); - it('deve customizar a primeira letra do primeiro parágrafo da seção principal', () => { - cy.get('.main p').first().should('have.css', 'font-size', '48px').and('have.css', 'font-family', 'Arial, sans-serif').and('have.css', 'float', 'left'); - }); +// it('deve customizar a primeira letra do primeiro parágrafo da seção principal', () => { +// cy.get('.main p').first().should('have.css', 'font-size', '48px').and('have.css', 'font-family', 'Arial, sans-serif').and('have.css', 'float', 'left'); +// }); - it('deve conter um separador entre os itens presentes no menu de design', () => { - cy.get('.menu-item').should('have.css', 'border-top-style', 'solid'); - cy.get('.menu-item').last().should('have.css', 'border-bottom-style', 'solid'); - }); -}); \ No newline at end of file +// it('deve conter um separador entre os itens presentes no menu de design', () => { +// cy.get('.menu-item').should('have.css', 'border-top-style', 'solid'); +// cy.get('.menu-item').last().should('have.css', 'border-bottom-style', 'solid'); +// }); +// }); \ No newline at end of file diff --git a/.github/actions/css/cypress/integration/t6.test.js b/.github/actions/css/cypress/integration/t6.test.js index cfa7731b..8c081e2b 100644 --- a/.github/actions/css/cypress/integration/t6.test.js +++ b/.github/actions/css/cypress/integration/t6.test.js @@ -1,31 +1,31 @@ -describe('T6: Flexbox', () => { - before(() => { - cy.visit('/index.html') - }) +// describe('T6: Flexbox', () => { +// before(() => { +// cy.visit('/index.html') +// }) - it('deve aplicar flexbox nos links do footer', () => { - cy.get('.main footer a').should('have.css', 'display', 'flex') - .and('have.css', 'justify-content', 'center') - }); +// it('deve aplicar flexbox nos links do footer', () => { +// cy.get('.main footer a').should('have.css', 'display', 'flex') +// .and('have.css', 'justify-content', 'center') +// }); - it('deve aplicar flexbox na seção de benefícios', () => { - cy.get('.benefits').should('have.css', 'display', 'flex') - .and('have.css', 'flex-direction', 'row-reverse'); - cy.get('.benefits h3').should('have.css', 'align-self', 'center') - .and('have.css', 'flex', '0 0 30%'); - cy.get('.benefits .text').should('have.css', 'flex', '0 0 70%'); - }); +// it('deve aplicar flexbox na seção de benefícios', () => { +// cy.get('.benefits').should('have.css', 'display', 'flex') +// .and('have.css', 'flex-direction', 'row-reverse'); +// cy.get('.benefits h3').should('have.css', 'align-self', 'center') +// .and('have.css', 'flex', '0 0 30%'); +// cy.get('.benefits .text').should('have.css', 'flex', '0 0 70%'); +// }); - it('deve aplicar flexbox na seção de participação', () => { - cy.get('.participation').should('have.css', 'display', 'flex'); - cy.get('.participation > *').should('have.css', 'flex', '0 0 50%'); - cy.get('.participation > h3').should('have.css', 'align-self', 'center'); - }); +// it('deve aplicar flexbox na seção de participação', () => { +// cy.get('.participation').should('have.css', 'display', 'flex'); +// cy.get('.participation > *').should('have.css', 'flex', '0 0 50%'); +// cy.get('.participation > h3').should('have.css', 'align-self', 'center'); +// }); - it('deve incluir linha entre as seções de benefícios e participação', () => { - cy.get('.benefits').should('have.css', 'border-bottom'); - cy.get('.participation').should('have.css', 'border-top'); - }); +// it('deve incluir linha entre as seções de benefícios e participação', () => { +// cy.get('.benefits').should('have.css', 'border-bottom'); +// cy.get('.participation').should('have.css', 'border-top'); +// }); -}); \ No newline at end of file +// }); \ No newline at end of file From 8e51ede0e8a7958e2438824056157fd8e9c1b401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 09:50:16 -0300 Subject: [PATCH 11/21] FIxed t4 --- .../css/cypress/integration/t4.test.js | 77 +++++++++++-------- README.md | 2 +- 2 files changed, 47 insertions(+), 32 deletions(-) diff --git a/.github/actions/css/cypress/integration/t4.test.js b/.github/actions/css/cypress/integration/t4.test.js index 221a73fd..4c53b6a8 100644 --- a/.github/actions/css/cypress/integration/t4.test.js +++ b/.github/actions/css/cypress/integration/t4.test.js @@ -1,37 +1,52 @@ -// describe('T4: Posicionamento', () => { -// before(() => { -// cy.visit('/index.html') -// }) +describe('T4: Posicionamento', () => { + beforeEach(() => { + cy.visit('/index.html') + }) -// it('deve ter o .page-wrapper como referência de posicionamento', () => { -// cy.get('.page-wrapper').should('have.css', 'position', 'relative') -// }) + it('deve ter o .page-wrapper como referência de posicionamento', () => { + cy.get('.page-wrapper').should('have.css', 'position', 'relative') + }) -// it('deve modificar o tamanho do painel .explanation', () => { -// cy.get('.explanation').then(($el) => { -// // Check width -// const windowWidth = Cypress.$(cy.state('window')).width(); -// const elementWidth = $el.width(); -// expect(elementWidth).to.be.closeTo(windowWidth * 0.6, 1); + it('deve modificar o tamanho do painel .explanation', () => { + cy.get('.explanation').then(($el) => { + // Check width + const windowWidth = Cypress.$(cy.state('window')).width(); + const elementWidth = $el.width(); + expect(elementWidth).to.be.at.most(windowWidth * 0.6, 1); -// // Check right margin -// const marginRight = parseInt($el.css('marginRight'), 10); -// expect(marginRight).to.be.closeTo(windowWidth * 0.35, 1); + // Check right margin + const marginRight = parseInt($el.css('marginRight'), 10); + expect(marginRight).to.be.at.most(windowWidth * 0.35, 1); -// // Check right border -// const borderRight = $el.css('borderRight'); -// expect(borderRight).to.equal('1px solid #1f295c'); + // Check right border + const borderRight = $el.css('borderRight'); + expect(borderRight).to.not.contain('0px'); + expect(borderRight).to.contain('solid'); -// // Check right padding -// const paddingRight = parseInt($el.css('paddingRight'), 10); -// expect(paddingRight).to.be.closeTo(elementWidth * 0.02, 1); -// }); -// }); + // Check right padding + const paddingRight = parseInt($el.css('paddingRight'), 10); + expect(paddingRight).to.be.greaterThan(0); + }); + }); -// it('deve ter o menu de design na posição certa', () => { -// cy.get('#design-archives').should('have.css', 'top', '560px'); -// cy.get('#design-archives').should('have.css', 'left', '62%'); -// cy.get('#design-archives').should('have.css', 'padding-left', '2%'); -// cy.get('#design-archives').should('have.css', 'padding-right', '2%'); -// }); -// }); \ No newline at end of file + it('deve ter o menu de design na posição certa', () => { + cy.get('#design-archives').should(($el) => { + const windowWidth = Cypress.$(cy.state('window')).width(); + + const style = window.getComputedStyle($el[0]); + const top = parseInt(style.top.replace('px', ''), 10); + const left = parseInt(style.left.replace('%', ''), 10); + const paddingRight = parseInt(style.paddingRight, 10); + const paddingLeft = parseInt(style.paddingLeft, 10); + const position = style.position; + + + expect(position).to.be.equals('absolute'); + expect(top).to.be.at.least(400); + expect(left).to.be.at.least(50); + expect(paddingRight).to.be.greaterThan(0); + expect(paddingLeft).to.be.greaterThan(0); + + }); + }); +}); \ No newline at end of file diff --git a/README.md b/README.md index 17aa1936..5130a156 100644 --- a/README.md +++ b/README.md @@ -96,7 +96,7 @@ O foco dessa atividade será reposicionar os elementos da nossa página! 1. Defina o elemento `.page-wrapper` como referência para posicionamento. 2. Faça com que o painel `.explanation` ocupe 60% da largura disponível, mas crie um espaçamento a direita de 35% utilizando `margin`. -    - Adicione uma borda à direita do painel de 1px, com a cor `#1f295c` +    - Adicione uma borda à direita do painel de 1px     - Adicione um espaçamento interno de 2% no lado direito do painel. 3. Agora mova o menu de designs para a direita da página, ocupando o espaço em branco deixado pelo elemento `.explanation`.     - Faça-o iniciar na parte superior da página, após a parte de introdução (por exemplo, aplicando `top: 560px`). From e2ae183ef8cc055dfc3f591c8b038a9ddacd0a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 10:23:35 -0300 Subject: [PATCH 12/21] Fixed t5 --- .../css/cypress/integration/t5.test.js | 43 +++++++++++-------- README.md | 1 - 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/.github/actions/css/cypress/integration/t5.test.js b/.github/actions/css/cypress/integration/t5.test.js index 66986011..09312e46 100644 --- a/.github/actions/css/cypress/integration/t5.test.js +++ b/.github/actions/css/cypress/integration/t5.test.js @@ -1,20 +1,29 @@ -// describe('T5: Seletores Pseudo-Classe', () => { -// before(() => { -// cy.visit('/index.html') -// }) +describe('T5: Seletores Pseudo-Classe', () => { + beforeEach(() => { + cy.visit('/index.html') + }) -// it('deve customizar a aparência dos links', () => { -// cy.get('a').should('have.css', 'color', 'rgb(0, 128, 0)').and('have.css', 'font-weight', '700'); -// cy.get('a').first().click(); -// cy.get('a').first().should('not.have.css', 'font-weight', '700'); -// }); + it('deve customizar a aparência dos links', () => { + cy.get('a').should(($el) => { + const style = window.getComputedStyle($el[0]); + const color = style.color; + const fontWeight = parseInt(style.fontWeight); -// it('deve customizar a primeira letra do primeiro parágrafo da seção principal', () => { -// cy.get('.main p').first().should('have.css', 'font-size', '48px').and('have.css', 'font-family', 'Arial, sans-serif').and('have.css', 'float', 'left'); -// }); + // $el.trigger('mouseover'); + // const hoveredColor = style.color; -// it('deve conter um separador entre os itens presentes no menu de design', () => { -// cy.get('.menu-item').should('have.css', 'border-top-style', 'solid'); -// cy.get('.menu-item').last().should('have.css', 'border-bottom-style', 'solid'); -// }); -// }); \ No newline at end of file + expect(color).not.to.equal('rgb(0, 0, 238)'); + expect(fontWeight).to.be.greaterThan(400); + // expect(color).not.to.equal(hoveredColor); + }); + }); + + // it('deve customizar a primeira letra do primeiro parágrafo da seção principal', () => { + // cy.get('.main p').first().should('have.css', 'font-size', '48px').and('have.css', 'font-family', 'Arial, sans-serif').and('have.css', 'float', 'left'); + // }); + + it('deve conter um separador entre os itens presentes no menu de design', () => { + cy.get('.design-selection li').should('have.css', 'border-top-style', 'solid'); + cy.get('.design-selection li').last().should('have.css', 'border-bottom-style', 'solid'); + }); +}); \ No newline at end of file diff --git a/README.md b/README.md index 5130a156..3630119d 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,6 @@ O foco dessa atividade será reposicionar os elementos da nossa página! 1. Customize a aparência dos links da seguinte forma: - Por padrão, devem ter a cor de destaque e estarem em negrito. - Se sobrepostos, devem ter sua cor alterada para uma tonalidade mais clara/escura. - - Os links visitados não devem ficar mais em negrito. 2. Vamos dar um destaque a primeira letra do primeiro parágrafo da seção principal. Você deverá customizá-lo para que: - Tenha tamanho de fonte 3 vezes maior que o padrão. - Seja de uma fonte diferente da escolhida para o site. From 6f6943833efb007f9a14b95cad25225b0bc5f6cb Mon Sep 17 00:00:00 2001 From: Ketelinluana Date: Wed, 15 May 2024 11:00:28 -0300 Subject: [PATCH 13/21] Style.css --- 2.css | 138 ++++++++ 3.css | 961 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4.css | 220 ++++++++++++ index.html | 2 - style.css | 197 ++++++++++- 5 files changed, 1504 insertions(+), 14 deletions(-) create mode 100644 2.css create mode 100644 3.css create mode 100644 4.css diff --git a/2.css b/2.css new file mode 100644 index 00000000..170feb22 --- /dev/null +++ b/2.css @@ -0,0 +1,138 @@ +/* Paleta de Cores */ +body { + background-color: #EBD3FF; + color: #0D0D0D; + margin: 0; + padding: 0; +} + +.highlight { + color: #EBD3FF; +} + +/* Estrutura Textual */ +body { + width: 100%; + font-family: sans-serif; + font-size: 16px; +} + +p { + text-indent: 1em; +} + +h1, h2, h3 { + text-align: center; + margin: 0; +} + +h1 { + font-size: 1.8rem; +} + +h2 { + font-size: 1.4rem; +} + +h3 { + font-size: 1.2rem; +} + +.intro { + text-align: right; +} + +.main { + text-align: center; + line-height: 1.5; +} + +abbr { + font-variant: small-caps; +} + +/* Box Model */ +body { + width: 80%; + max-width: 1280px; + margin: 0 auto; +} + +.intro { + max-height: 550px; +} + +header { + background: #0D0D0D; + color: #EBD3FF; + padding: 20px; +} + +header h1 { + margin-right: 1em; +} + +.navbar ul { + list-style: none; + padding: 0; +} + +/* Footer */ +.footer { + background-color: #0D0D0D; + color: #EBD3FF; + padding: 20px 0; + display: flex; + justify-content: center; /* Centraliza os links horizontalmente */ + gap: 20px; /* Adiciona espaçamento entre os links */ + flex-wrap: wrap; /* Permite a quebra de linha */ +} + +.footer a { + border: 2px solid #EBD3FF; + background-color: #6c03c2; + color: #0D0D0D; + padding: 10px; + flex: 0 0 150px; /* Define um mesmo tamanho para os links */ + text-align: center; /* Centraliza o texto dentro dos links */ + margin-bottom: 10px; /* Adiciona espaçamento entre as linhas de links */ +} +.participation-section { + display: flex; /* Ativa o flex container */ + justify-content: space-between; /* Distribui os itens uniformemente ao longo do eixo principal */ + align-items: center; /* Centraliza verticalmente os itens */ +} +.participation-section .participation-item { + flex: 1; /* Cada item ocupa 50% do espaço disponível */ + text-align: center; /* Centraliza o texto horizontalmente */ +} +/* Benefícios e Participação */ +.benefits-section, +.participation-section { + width: 100%; + padding: 10px 0; + border: 1px solid #000; /* Adiciona a linha superior e inferior */ +} + +.benefits-section h3, +.participation-section h3 { + margin: 0; +} + +.benefit, +.participation-item { + display: flex; + justify-content: space-between; /* Coloca o texto à esquerda e o título à direita */ + align-items: center; /* Centraliza verticalmente */ +} + +.benefit p { + flex: 0 0 70%; + text-align: left; +} + +.benefit h3, +.participation-item h3 { + flex: 0 0 30%; + text-align: right; +} diff --git a/3.css b/3.css new file mode 100644 index 00000000..201e9eb3 --- /dev/null +++ b/3.css @@ -0,0 +1,961 @@ +@import url(http://fonts.googleapis.com/css?family=Julius+Sans+One|Libre+Baskerville:400,400italic); + + + +/* base CSS */ +* { + -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */ + -moz-box-sizing: border-box; /* Firefox, other Gecko */ + box-sizing: border-box; /* Opera/IE 8+ */ +} + +html, body { + padding: 0; + margin: 0; +} +body { + color: #325050; + background: #fff; + font-family: 'Libre Baskerville', sans-serif; + font-size: 70%; +} +a { + color: #0d8ba1; + text-decoration: none; +} +a:visited { + color: #1a5952; +} +a:hover, a:focus { + color: #0599c2; + text-decoration: underline; + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; +} + +abbr { + border: none; + text-transform: uppercase; + font-size: 0.9em; + letter-spacing: 0.01em; +} +header { + height: 230px; + padding: 20px 0 70px 0; + background: #2d6360 50% 0 url(huntington.jpg) no-repeat; /* old IE fallback */ + background-attachment: fixed, fixed, fixed, scroll; + background-image: url(contours.png), url(noise.png), url(gridlines.png), url(huntington.jpg); + background-position: 0 0, 0 0, -5px -25px, 0 50%; + background-repeat: repeat, repeat, repeat, no-repeat; + background-size: auto, auto, auto, cover; + text-align: center; +} + +h1, h2 { + padding: 0 10%; + margin: 0; + color: #fff; + font-weight: normal; +} + +h1 { + padding-top: 0; + padding-bottom: 5px; + border-bottom: none; + font-family: 'Julius Sans One', sans-serif; + font-size: 3.2em; + text-transform: uppercase; +} +h1::before { + display: inline-block; + position: relative; + top: 20px; + content: ""; + width: 80px; + height: 80px; + margin: -20px 20px 0 0; + background: url(enso.svg); + background-repeat: no-repeat; + background-size: 100%; + opacity: 0.6; +} +h2 { + display: block; + padding-top: 5px; + padding-bottom: 30px; + border-top: none; + color: rgba(255,255,255,0.6); + font-size: 1.6em; + font-style: italic; +} + +h2::before { + content: " "; + padding: 50px; +} +h3 { + margin: 2em 0 0 0; + color: #2e484c; + font-family: 'Julius Sans One', sans-serif; + font-size: 1.8em; + font-weight: normal; + text-transform: uppercase; +} +p { + margin: 0.75em 0; + line-height: 2; +} + + +.page-wrapper { + position: relative; +} +.summary, .preamble { + width: 80%; + margin: 0 auto; + +} +.supporting h3, .supporting p { + width: 80%; + margin-left: auto; + margin-right: auto; +} +.summary { + padding-top: 2em; +} + + +/* intro block links -- download HTML/CSS */ +.intro a, .intro a:visited { + position: relative; + display: inline-block; + padding: 1px 10px 0 32px; + margin: -1px -10px -1px -6px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + color: #809b7e; + font-family: 'Julius Sans One', sans-serif; + text-transform: uppercase; +} +.intro a:hover, .intro a:focus { + z-index: 2; + color: #fff; + background: #3d8a9f; + text-decoration: none; +} +.intro a::before { + display: inline-block; + position: absolute; + top: 6px; + left: 8px; + padding: 2px; + color: #a9b995; + background: #d9e1cd; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -o-border-radius: 2px; + content: "D"; + font-size: 16px; + text-indent: 0; + + /* icomoon.io defaults */ + font-family: 'verdemoderna'; + speak: none; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; +} +.intro a:hover::before { + color: #fff; + background: #357d93; +} + + + + +/* coloured cutoff */ +div.participation, div.benefits { + background-attachment: scroll, scroll, fixed; + background-color: rgba(138,188,159,0.5); + background-image: url(contours-opaque.png), url(gridlines-opaque.png), url(bamboo.png); + background-repeat: repeat, repeat, no-repeat; + background-size: auto, auto, cover; +} + +/* extra padding at the cutoffs */ +div.participation { + padding: 3em 0; + margin-top: 3em; +} +div.benefits { + padding-bottom: 3em; + margin-bottom: 3em; +} +div.participation h3, div.benefits h3 { + margin-top: 0; +} +div.participation p, div.benefits p { + margin-bottom: 0; +} + +/* sidebar base styles */ +.sidebar { + background: #edf4f0; +} +.sidebar h3 { + display: none; +} +.sidebar a { + color: #607476; + text-decoration: none; +} +.sidebar a:hover, .sidebar a:focus { + color: #49968e; +} +.sidebar ul { + padding: 0; + margin: 0; + list-style: none; + overflow: hidden; +} + +/* shared sidebar styling */ + +.design-selection ul, .zen-resources ul { + margin: 0; +} + +.design-selection li, .zen-resources li { + float: left; + width: 50%; + padding: 1.5em 10%; + border-top: solid 1px #d9e3dc; + color: #c0cac3; + font-style: italic; +} +.design-selection li:hover, .design-selection li:focus { + background: -moz-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0.5) 50%, + rgba(255,255,255,0) 100%) + ; /* FF3.6+ */ + background: -webkit-gradient(linear, left top, right top, + color-stop(0%,rgba(255,255,255,0)), + color-stop(50%,rgba(255,255,255,0.5)), + color-stop(100%,rgba(255,255,255,0))) + ; /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0.5) 50%, + rgba(255,255,255,0) 100%) + ; /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0.5) 50%, + rgba(255,255,255,0) 100%) + ; /* Opera 11.10+ */ + background: -ms-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0.5) 50%, + rgba(255,255,255,0) 100%) + ; /* IE10+ */ + background: linear-gradient(to right, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0.5) 50%, + rgba(255,255,255,0) 100%) + ; /* W3C */ +} +.design-selection li:nth-child(2n+1), .zen-resources li:nth-child(2n+1) { + clear: left; +} +.design-selection .design-name, .zen-resources a, li.viewall a { + display: block; + margin-bottom: 0.25em; + font-family: 'Julius Sans One', sans-serif; + font-size: 1.2em; + font-style: normal; + text-transform: uppercase; +} + + +/* select a design */ +.design-selection h3 { + display: none; +} +.design-selection .designer-name { + color: #616857; + font-size: 0.9em; + font-style: normal; +} + + + +/* archives navigation */ +.design-archives { + position: absolute; + top: 160px; + right: 0; + width: 100%; + height: 70px; + background: rgba(255,255,255,0.2); +} +.design-archives h3 { + display: none; +} +.design-archives ul { + margin: 0; +} +.design-archives li { + position: absolute; + top: 0; + padding: 0; + margin: 0; + border: none; + list-style: none; +} +.design-archives li.viewall { + top: 0; + left: 0; + width: 100%; + padding: 0 71px; + line-height: 50px; +} +.previous, .next { + left: 0; + z-index: 3; +} +.next { + left: auto; + right: 0; +} +.design-archives a, .design-archives a:visited { + color: rgba(255, 255, 255, 0.65); +} +.design-archives a:hover, .design-archives a:focus { + color: #fff; +} +.design-archives .previous a, .design-archives .next a { + display: block; + overflow: hidden; + width: 70px; + height: 70px; + text-indent: 100%; + text-decoration: none; + white-space: nowrap; +} +.design-archives .viewall a { + z-index: 2; + width: 100%; + min-height: 70px; + padding: 12px 0 0 0; + text-align: center; +} +.design-archives a::before { + position: absolute; + left: 0; + width: 70px; + height: 70px; + text-align: center; + text-indent: 0; + font-size: 44px; + /* icomoon.io defaults */ + font-family: 'verdemoderna'; + speak: none; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 70px; + -webkit-font-smoothing: antialiased; +} +.design-archives .viewall a:hover, .design-archives .viewall a:focus, .design-archives .viewall a:active, +.design-archives a:hover::before, .design-archives a:focus::before, .design-archives a:active::before { + background-color: rgba(255,255,255,0.25); + box-shadow: inset 0 0 10px rgba(255,255,255,0.1); +} +.design-archives .previous a::before { + content: "<"; +} +.design-archives .next a::before { + content: ">"; +} + + +/* resources */ + +.zen-resources { + overflow: hidden; + background-color: rgba(138,188,159,0.5); + background-image: url(bamboo.png); +} +.zen-resources li { + border-top: solid 1px #a0b9ad; + font-style: normal; +} +.zen-resources li:last-child { + float: none; + width: auto; + border-bottom: solid 1px #a0b9ad; +} + +/* busting out the credits block */ + +.requirements p:nth-child(5) { + padding-bottom: 2em; +} +.supporting .requirements { + float: none; + clear: both; + width: 100%; + padding-left: 0; + padding-right: 0; +} +.supporting .requirements a { + text-decoration: none; +} +.supporting .requirements a:hover, .supporting .requirements a:focus { + text-decoration: underline; +} +.supporting .requirements h3 { + padding-top: 0; +} +.requirements p:last-child { + width: auto; + padding: 1em 12%; + margin: 0; + color: rgba(255, 255, 255, 0.4); + background: #3e5d67; + background-attachment: fixed, fixed, fixed, scroll; + background-image: url(contours.png), url(gridlines.png), url(noise.png), url(koi.jpg); + background-position: 0 0, -5px -25px, 0 0, 0 50%; + background-repeat: repeat, repeat, repeat, no-repeat; + background-size: auto, auto, auto, cover; + font-size: 2em; + font-style: italic; + text-align: center; +} +.requirements p:last-child a { + color: rgba(255, 255, 255, 0.7); + font-style: normal; +} + + +/* main footer */ +footer { + clear: both; + padding: 3em 10%; + color: #fff; + background: #134347; + text-align: center; +} +footer a { + display: inline-block; + overflow: hidden; + width: 40px; + height: 40px; + padding: 40px 0 0 0; + margin: 0 0.5em; + position: relative; + color: rgba(255, 255, 255, 0.5); + -webkit-transition: color 0.25s ease-out, box-shadow 0.25s ease-out; + -moz-transition: color 0.25s ease-out, box-shadow 0.25s ease-out; + transition: color 0.25s ease-out, box-shadow 0.25s ease-out; +} +footer a:hover, footer a:focus { + color: rgba(255, 255, 255, 0.3); + text-decoration: none; +} +footer a:visited { + color: rgba(255, 255, 255, 0.2); +} +footer a::before { + display: block; + position: absolute; + top: 3px; + left: 0; + overflow: visible; + font-size: 36px; + text-indent: 0; + /* icomoon.io defaults */ + font-family: 'verdemoderna'; + speak: none; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; +} +footer a.zen-validate-html::before {content: "5";} +footer a.zen-validate-html:hover::before, footer a.zen-validate-html:focus::before {content: "%";} +footer a.zen-validate-css::before {content: "3";} +footer a.zen-validate-css:hover::before, footer a.zen-validate-css:focus::before {content: "#";} +footer a.zen-license::before {content: "c";} +footer a.zen-license:hover::before, footer a.zen-license:focus::before {content: "C";} +footer a.zen-accessibility::before {content: "a";} +footer a.zen-accessibility:hover::before, footer a.zen-accessibility:focus::before {content: "A";} +footer a.zen-github::before {content: "g";} +footer a.zen-github:hover::before, footer a.zen-github:focus::before {content: "G";} + + + +/* low-res CSS */ +@media only screen and (max-width: 600px) { + + /* these download links make approximately zero sense + on a phone without a user-accessible file system. */ + .summary p:last-child { + display: none; + } + /* type adjustments */ + h1 { + margin-top: 30px; + font-size: 2.5em; + } + h1::before { + width: 50px; + height: 50px; + } + h2::before { + padding: 25px; + } + .requirements p:last-child { + padding: 1em 6%; + } + +} + + +@media only screen and (max-width: 500px) { + header { + height: 250px; + padding-top: 0; + } + h1 { + margin: 0; + } + h1::before { + display: block; + left: 50%; + width: 50px; + height: 50px; + margin: 0 0 0 -25px; + padding: 0 0 35px 0; + } + h2::before { + padding: 0; + } + .design-archives { + top: 180px; + } + .design-selection li, .zen-resources li { + padding: 1em 5%; + } + footer a { + margin: 0 0.5em; + } +} + + +@media only screen and (max-width: 320px) { + + /* adjusting the site header type size */ + h1 { + font-size: 2em; + } + h2 { + font-size: 1.3em; + } + /* linearizing the design list on small screens */ + .design-selection li, .zen-resources li { + float: none; + width: 100%; + } + /* adjusting footer type, icons */ + .requirements p:last-child { + font-size: 1.4em; + } + footer { + padding: 2em 5%; + } + footer a { + width: 35px; + height: 35px; + padding: 35px 0 0 0; + margin: 0 0.5em; + } + footer a::before { + font-size: 32px; + } + +} + + +/* mid-res CSS */ +@media only screen and (max-width: 1132px) { + + header { + border-top: solid 10px rgba(19, 67, 71, 0.9); + } + p, li { + font-size: 1.2em; + } + +} + +@media only screen and (min-width: 500px) and (max-width: 1150px) { + + .requirements p:last-child { + padding-bottom: 2em; + padding-top: 2em; + } + /* page footer */ + footer { + padding: 3em 0; + } + footer a { + width: 52px; + height: 52px; + padding: 52px 0 0 0; + margin: 0 2em; + } + footer a::before { + font-size: 48px; + } + +} + + +/* high-res CSS */ +@media only screen and (min-width: 1132px) { +body { + background: #ffffff; + background: -moz-linear-gradient(left, #ffffff 0%, #ffffff 66%, #e5ede8 66%, #e5ede8 100%); + background: -webkit-gradient(linear, left top, right top, color-stop(0%,#ffffff), color-stop(66%,#ffffff), color-stop(66%,#e5ede8), color-stop(100%,#e5ede8)); + background: -webkit-linear-gradient(left, #ffffff 0%,#ffffff 66%,#e5ede8 66%,#e5ede8 100%); + background: -o-linear-gradient(left, #ffffff 0%,#ffffff 66%,#e5ede8 66%,#e5ede8 100%); + background: -ms-linear-gradient(left, #ffffff 0%,#ffffff 66%,#e5ede8 66%,#e5ede8 100%); + background: linear-gradient(to right, #ffffff 0%,#ffffff 66%,#e5ede8 66%,#e5ede8 100%); + font-size: 100%; +} +header { + width: 100%; + height: 310px; + padding: 0 10%; + border-top: solid 12px rgba(19, 67, 71, 0.8); + box-shadow: inset 0 0 100px rgba(255, 255, 255, 0.3); + vertical-align: middle; + text-align: left; +} +header::before, header::after { + display: block; + content: " "; + position: absolute; + z-index: 3; + top: 9px; + left: 0; + width: 100%; + height: 7px; + background: rgba(0, 39, 43, 0.2); +} +header::after { + top: 306px; + height: 4px; + background: rgba(0, 39, 43, 0.075); +} +h1 { + display: inline-block; + position: relative; + margin: 15px 0 0 0; + padding: 60px 0 5px 0; +} +h1::before { + display: inline-block; + position: relative; + top: 65px; + content: ""; + width: 125px; + height: 125px; + margin: -65px 40px 0 0; + background: url(enso.svg); + background-size: 100%; + opacity: 0.6; + -webkit-animation: koan 36000s infinite alternate; + -moz-animation: koan 36000s infinite alternate; + animation: koan 36000s infinite alternate; +} +h2 { + display: block; + margin: 0; + padding: 5px 0 60px 70px; +} +p { + font-size: 1em; +} +/* main layout blocks */ +nav, .supporting { + display: inline; +} +.summary, .preamble, .supporting div, .requirements h3, .requirements p { + float: left; + clear: left; + width: 66%; + padding: 1em 5% 1em 10%; +} +.explanation h3, .explanation p, +.participation h3, .participation p, +.benefits h3, .benefits p { + width: 100%; +} +.summary { + padding-top: 3.25em; +} +.requirements h3, .requirements p { + margin: 0; + padding-bottom: 0; +} + +/* coloured cutoff */ +div.participation, div.benefits { + width: 100%; + padding-left: 10%; + padding-right: 38%; + margin: 0; +} +/* extra padding at the cutoffs */ +div.participation, div.requirements { + padding-top: 4em; +} +div.explanation, div.benefits { + padding-bottom: 4em; +} +.requirements p:nth-child(5) { + padding-bottom: 4em; +} + +.intro h3, .supporting h3 { + margin-top: 0; +} +.intro p:last-child, .supporting p:last-child { + margin-bottom: 0; +} + +.requirements p:last-child { + padding-bottom: 3em; + padding-top: 3em; + box-shadow: inset 0 0 100px rgba(255, 255, 255, 0.3); +} + +/* sidebar styling */ +.design-selection, .zen-resources { + position: absolute; + top: 360px; + right: 0; + width: 33.3%; + padding: 0 0 20px 0; + margin: 0; + overflow: visible; + background: transparent; +} +.sidebar li { + float: none; + width: auto; + padding-left: 0; + padding-right: 0; + margin: 0 29.4% 0 14.7%; /* 0 10% 0 5% of total width */ +} + +/* select a design */ +.design-selection li:first-child { + border-top: 0; +} +.design-selection li:hover, .design-selection li:focus { + background: none; +} +/* archives navigation */ +.design-archives { + position: absolute; + z-index: 2; + top: 0; + left: 0; + width: 100%; + height: 310px; + background: -moz-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0) 66%, + rgba(0,0,0,0.2) 66%, + rgba(33,84,95,0.3) 100%) + ; /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0) 66%, + rgba(33,84,95,0.3) 66%, + rgba(33,84,95,0) 100%) + ; /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0) 66%, + rgba(33,84,95,0.3) 66%, + rgba(33,84,95,0) 100%) + ; /* Opera 11.10+ */ + background: -ms-linear-gradient(left, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0) 66%, + rgba(33,84,95,0.3) 66%, + rgba(33,84,95,0) 100%) + ; /* IE10+ */ + background: linear-gradient(to right, + rgba(255,255,255,0) 0%, + rgba(255,255,255,0) 66%, + rgba(33,84,95,0.3) 66%, + rgba(33,84,95,0) 100%) + ; /* W3C */ +} +.design-archives nav { + display: block; + position: absolute; + right: 1%; + top: 120px; + width: 32%; +} +.design-archives li { + margin: 0; +} +.design-archives .viewall a, .design-archives a::before { + background: rgba(255,255,255,0.1); + text-decoration: none; +} +.design-archives .viewall a:hover, .design-archives a:hover::before { + background-color: rgba(255,255,255,0.2); +} + +/* resources navigation */ +.zen-resources { + position: absolute; + top: 1310px; + right: 0; + width: 34%; + background: transparent; +} +.zen-resources h3 { + display: none; +} +.zen-resources ul { + width: 55.9%; + margin: 0 29.4% 0 14.7%; +} +.zen-resources li { + padding: 1.5em 0 1.25em 0; + margin: 0; +} + +} + + +@media only screen and (min-width: 1150px) { + + /* page footer */ + footer a { + width: 76px; + height: 76px; + padding: 76px 0 0 0; + margin: 0 3em; + } + footer a::before { + font-size: 72px; + } + +} + + +/* +Okay, look, I feel rather awful about this. But due to source order it +seems like the only way to pull off the separated sidebar. Perhaps +flexbox is the way forward here, once the syntax settles down a bit. +*/ +@media only screen and (min-width: 1120px) {.zen-resources {top: 1490px;}} +@media only screen and (min-width: 1240px) {.zen-resources {top: 1460px;}} +@media only screen and (min-width: 1260px) {.zen-resources {top: 1420px;}} +@media only screen and (min-width: 1320px) {.zen-resources {top: 1390px;}} +@media only screen and (min-width: 1370px) {.zen-resources {top: 1360px;}} +@media only screen and (min-width: 1520px) {.zen-resources {top: 1330px;}} +@media only screen and (min-width: 1812px) {.zen-resources {top: 1300px;}} +@media only screen and (min-width: 1848px) {.zen-resources {top: 1270px;}} +@media only screen and (min-width: 2015px) {.zen-resources {top: 1240px;}} +@media only screen and (min-width: 2115px) {.zen-resources {top: 1210px;}} +@media only screen and (min-width: 2400px) {/* you're kidding, right? */} + + +@-webkit-keyframes koan { + from { + -webkit-transform: scale(1); + opacity: 1; + } + to { + -webkit-transform: scale(3); + opacity: 0; + } +} +@-moz-keyframes koan { + from { + -moz-transform: scale(1); + opacity: 1; + } + to { + -moz-transform: scale(3); + opacity: 0; + } +} +@keyframes koan { + from { + transform: scale(1); + opacity: 1; + } + to { + transform: scale(3); + opacity: 0; + } +} + +/* high-DPI adjustments */ +@media + (min--moz-device-pixel-ratio: 1.5), + (-o-min-device-pixel-ratio: 3 / 2), + (-webkit-min-device-pixel-ratio: 1.5), + (min-device-pixel-ratio: 1.5), + (min-resolution: 1.5dppx) { + header { + background-image: url(contours@2x.png), url(noise.png), url(gridlines.png), url(huntington.jpg); + background-size: 50% auto, auto, auto, cover; + } + .requirements p:last-child { + background-image: url(contours@2x.png), url(gridlines.png), url(noise.png), url(koi.jpg); + background-size: 50% auto, auto, auto, cover; + } + /* + This shouldn't be necessary, but it is. Due to differences in how + Chrome calculates gradients and % widths / padding, the archives + spill out of the visual container at some screen sizes. + */ + .design-archives nav { + right: 3%; + width: 29%; + } +} + +/* icon fonts */ +@font-face { + font-family: 'verdemoderna'; + src:url('verdemoderna.eot'); + src:url('verdemoderna.eot?#iefix') format('embedded-opentype'), + url('verdemoderna.woff') format('woff'), + url('verdemoderna.ttf') format('truetype'), + url('verdemoderna.svg#verdemoderna') format('svg'); + font-weight: normal; + font-style: normal; +} /* 1000+ lines?! */ diff --git a/4.css b/4.css new file mode 100644 index 00000000..3df7b562 --- /dev/null +++ b/4.css @@ -0,0 +1,220 @@ +body { + background-color: #EBD3FF; + color: #0D0D0D; + margin: 0; + padding: 0; + } + + .highlight { + color: #EBD3FF; + } + + body { + margin: 0; + width: 100%; + font-family: sans-serif; + font-size: 16px; + } + + p { + text-indent: 1em; + } + + h1, h2, h3 { + text-align: center; + margin: 0; + } + + h1 { + font-size: 1.8rem; + } + + h2 { + font-size: 1.4rem; + } + + h3 { + font-size: 1.2rem; + } + + .intro { + text-align: right; + } + + .main { + line-height: 1.5; + } + + abbr { + font-variant: small-caps; + } + + + body { + width: 80%; + max-width: 1280px; + margin: 0 auto; + } + + .intro { + max-height: 550px; + } + + header { + background: #0D0D0D; + color: #EBD3FF; + padding: 20px; + } + + header h1 { + margin-right: 1em; + } + + .navbar ul { + list-style: none; + padding: 0; + } + + .navbar li { + display: inline-block; + margin-right: 1em; + } + + .footer { + background-color: #0D0D0D; + color: #EBD3FF; + padding: 20px 0; + display: flex; + justify-content: center; + flex-wrap: wrap; + position: relative; + } + + .footer a { + border: 2px solid #EBD3FF; + padding: 0.5em; + margin: 0.5em; + background-color: #EBD3FF; + color: #0D0D0D; + flex: 0 0 150px; + + position: absolute; + bottom: 20px; + right: 20px; + } + + .benefits-section, + .participation-section { + width: 100%; + padding: 10px 0; + } + + .benefits-section h3, + .participation-section h3 { + margin: 0; + } + + .benefits-section { + border-bottom: 1px solid #000; + } + + .participation-section { + border-top: 1px solid #000; + } + + + .page-wrapper { + position: relative; + } + + .explanation { + width: 60%; + margin-right: 35%; + border-right: 1px solid #010205; + padding-right: 2%; + padding: 70px 2%; + } + + .design-menu { + position: absolute; + top: 560px; + left: 62%; + width: 35%; + padding: 20px 2%; + } + + a { + color: #000000; + font-weight: bold; + text-decoration: none; + } + + a:hover { + color: #a101db; + } + + a:visited { + font-weight: normal; + } + + .main-content p:first-of-type:first-letter { + font-size: 300%; + float: left; + font-family: 'Times New Roman', Times, serif; + } + + .design-menu li { + border-top: 2px solid #000; + } + + .design-menu li:last-child { + border-bottom: 2px solid #000; + } + + + .benefits-section .benefit { + display: flex; + } + + .benefit p { + flex: 0 0 70%; + text-align: left; + } + + .benefit h3 { + flex: 0 0 30%; + text-align: right; + align-self: center; + } + + .participation-section .participation-item { + display: flex; + flex: 1 1 50%; + justify-content: center; + } + + .participation-item h3 { + align-self: center; + } + .participation-section { + display: flex; /* Ativa o flex container */ + justify-content: space-between; /* Distribui os itens uniformemente ao longo do eixo principal */ + align-items: center; /* Centraliza verticalmente os itens */ +} + +.participation-section .participation-item { + flex: 1; /* Cada item ocupa 50% do espaço disponível */ + text-align: center; /* Centraliza o texto horizontalmente */ +} + + .wrapper{ + position: absolute; /* Define a posição absoluta */ + top: 350px; /* Define a distância do topo da página */ + left: 800px; /* Define a distância da esquerda da página */ + font-size: 15px; + padding: 1px; + } + footer{ + text-align: center; + } + \ No newline at end of file diff --git a/index.html b/index.html index c1e8f60e..090a8364 100644 --- a/index.html +++ b/index.html @@ -14,13 +14,11 @@
-

CSS Zen Garden

The Beauty of CSS Design

-

A demonstration of what can be accomplished through CSS-based design. Select any style sheet from the list to diff --git a/style.css b/style.css index 7337e537..2b2d6805 100644 --- a/style.css +++ b/style.css @@ -1,15 +1,19 @@ body { - background-color: #A6A6A6; /* Cor do fundo */ - color: #0D0D0D; /* Cor da fonte */ + background-color: #EBD3FF; + color: #0D0D0D; + margin: 0; + padding: 0; } -.intro { - background-color: #D9D9D9; +.highlight { + color: #EBD3FF; } body { - width: 800px; - font-family: Arial, sans-serif; + margin: 0; + width: 100%; + font-family: sans-serif; + font-size: 16px; } p { @@ -17,11 +21,12 @@ p { } h1, h2, h3 { - text-align: center; + text-align: center; + margin: 0; } h1 { - font-size: 1.8rem; + font-size: 1.8rem; } h2 { @@ -29,7 +34,7 @@ h2 { } h3 { - font-size: 1.2rem; + font-size: 1.2rem; } .intro { @@ -37,10 +42,178 @@ h3 { } .main { - text-align: center; - line-height: 1.5; + line-height: 1.5; } abbr { - font-variant: small-caps; + font-variant: small-caps; +} + + +body { + width: 80%; + max-width: 1280px; + margin: 0 auto; +} + +.intro { + max-height: 550px; +} + +header { + background: #0D0D0D; + color: #EBD3FF; + padding: 20px; +} + +header h1 { + margin-right: 1em; +} + +.navbar ul { + list-style: none; + padding: 0; +} + +.navbar li { + display: inline-block; + margin-right: 1em; +} + +.footer { + background-color: #0D0D0D; + color: #EBD3FF; + padding: 20px 0; + display: flex; + justify-content: center; + flex-wrap: wrap; + position: relative; +} + +.footer a { + border: 2px solid #EBD3FF; + padding: 0.5em; + margin: 0.5em; + background-color: #EBD3FF; + color: #0D0D0D; + flex: 0 0 150px; + + position: absolute; + bottom: 20px; + right: 20px; +} + +.benefits-section, +.participation-section { + width: 100%; + padding: 10px 0; +} + +.benefits-section h3, +.participation-section h3 { + margin: 0; +} + +.benefits-section { + border-bottom: 1px solid #000; +} + +.participation-section { + border-top: 1px solid #000; +} + + +.page-wrapper { + position: relative; +} + +.explanation { + width: 60%; + margin-right: 35%; + border-right: 1px solid #010205; + padding-right: 2%; + padding: 70px 2%; +} + +.design-menu { + position: absolute; + top: 560px; + left: 62%; + width: 35%; + padding: 20px 2%; +} + +a { + color: #000000; + font-weight: bold; + text-decoration: none; +} + +a:hover { + color: #a101db; +} + +a:visited { + font-weight: normal; +} + +.main-content p:first-of-type:first-letter { + font-size: 300%; + float: left; + font-family: 'Times New Roman', Times, serif; +} + +.design-menu li { + border-top: 2px solid #000; +} + +.design-menu li:last-child { + border-bottom: 2px solid #000; +} + + +.benefits-section .benefit { + display: flex; +} + +.benefit p { + flex: 0 0 70%; + text-align: left; +} + +.benefit h3 { + flex: 0 0 30%; + text-align: right; + align-self: center; +} + +.participation-section .participation-item { + display: flex; + flex: 1 1 50%; + justify-content: center; +} + +.participation-item h3 { + align-self: center; +} +.participation-section { + display: flex; /* Ativa o flex container */ + justify-content: space-between; /* Distribui os itens uniformemente ao longo do eixo principal */ + align-items: center; /* Centraliza verticalmente os itens */ +} + +.participation-section .participation-item { + flex: 1; /* Cada item ocupa 50% do espaço disponível */ + text-align: center; /* Centraliza o texto horizontalmente */ +} + +.wrapper{ + position: absolute; /* Define a posição absoluta */ + top: 350px; /* Define a distância do topo da página */ + left: 800px; /* Define a distância da esquerda da página */ + font-size: 15px; + padding: 1px; +} +footer{ + text-align: center; } From 6bd989b364b252db0df00fc3b802b6db8d4269fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 11:11:58 -0300 Subject: [PATCH 14/21] Fixed t6 --- .../css/cypress/integration/t6.test.js | 67 ++++++++++++------- README.md | 2 +- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/.github/actions/css/cypress/integration/t6.test.js b/.github/actions/css/cypress/integration/t6.test.js index 8c081e2b..772fb579 100644 --- a/.github/actions/css/cypress/integration/t6.test.js +++ b/.github/actions/css/cypress/integration/t6.test.js @@ -1,31 +1,48 @@ -// describe('T6: Flexbox', () => { -// before(() => { -// cy.visit('/index.html') -// }) +describe('T6: Flexbox', () => { + beforeEach(() => { + cy.visit('/index.html') + }) -// it('deve aplicar flexbox nos links do footer', () => { -// cy.get('.main footer a').should('have.css', 'display', 'flex') -// .and('have.css', 'justify-content', 'center') -// }); + it('deve aplicar flexbox nos links do footer', () => { + cy.get('.main footer').should('have.css', 'display', 'flex') + .and('have.css', 'justify-content') + .and('contain', 'space') + }); -// it('deve aplicar flexbox na seção de benefícios', () => { -// cy.get('.benefits').should('have.css', 'display', 'flex') -// .and('have.css', 'flex-direction', 'row-reverse'); -// cy.get('.benefits h3').should('have.css', 'align-self', 'center') -// .and('have.css', 'flex', '0 0 30%'); -// cy.get('.benefits .text').should('have.css', 'flex', '0 0 70%'); -// }); + it('deve aplicar flexbox na seção de benefícios', () => { + cy.get('.benefits').should('have.css', 'display', 'flex'); + cy.get('.benefits > *').last().should('match', 'p'); + cy.get('.benefits h3').should('have.css', 'align-self', 'center') + .and('have.css', 'flex').and('contain', '30%'); + cy.get('.benefits p').should('have.css', 'flex').and('contain', '70%'); + }); -// it('deve aplicar flexbox na seção de participação', () => { -// cy.get('.participation').should('have.css', 'display', 'flex'); -// cy.get('.participation > *').should('have.css', 'flex', '0 0 50%'); -// cy.get('.participation > h3').should('have.css', 'align-self', 'center'); -// }); + it('deve aplicar flexbox na seção de participação', () => { + cy.get('.participation').should('have.css', 'display', 'flex'); + cy.get('.participation').should('have.css', 'flex-wrap', 'wrap'); + cy.get('.participation > *').should('have.css', 'flex').and('contain', '50%'); + cy.get('.participation > h3').should('have.css', 'align-self', 'center'); + }); -// it('deve incluir linha entre as seções de benefícios e participação', () => { -// cy.get('.benefits').should('have.css', 'border-bottom'); -// cy.get('.participation').should('have.css', 'border-top'); -// }); + it('deve incluir linha entre as seções de benefícios e participação', () => { + cy.get('.benefits').should(($el) => { + const style = window.getComputedStyle($el[0]); + const borderBottomStyle = style.borderBottomStyle; + // const borderBottomWidth = parseInt(style.borderBottomWidth.replace('px', ''), 10); + + expect(borderBottomStyle).to.be.equals('solid'); + // expect(borderBottomWidth).to.not.equal(0); + }); + + cy.get('.participation').should(($el) => { + const style = window.getComputedStyle($el[0]); + const borderTopStyle = style.borderTopStyle; + // const borderTopWidth = parseInt(style.borderTopWidth.replace('px', ''), 10); + + expect(borderTopStyle).to.be.equals('solid'); + // expect(borderTopWidth).to.not.equal(0); + }); + }); -// }); \ No newline at end of file +}); \ No newline at end of file diff --git a/README.md b/README.md index 3630119d..11e7689a 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ O foco dessa atividade será reposicionar os elementos da nossa página! 3. Configure um layout de flexbox para a seção de participação da seguinte forma:     - Cada item deve ocupar 50% do espaço disponível.     - O título deverá ficar centralizado verticalmente. -4. Inclua uma linha no topo e embaixo das seções de benefícios e participação, utilizando a propriedade `border-bottom` e `border-top` respectivamente. +4. Inclua uma linha no topo e embaixo das seções de participação e benefícios, utilizando a propriedade `border-bottom` e `border-top` respectivamente.     - Remova a ocorrência de borda duplicada entre as duas seções [^1]: [CSS Zen Garden: The Beauty of CSS Design](https://www.csszengarden.com/) From 521909a22213495b83f8e8f1395b345e37acda91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 11:13:13 -0300 Subject: [PATCH 15/21] fixing cypress path for local execution --- .github/actions/css/cypress.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/css/cypress.config.js b/.github/actions/css/cypress.config.js index 84ab301c..15e3e761 100644 --- a/.github/actions/css/cypress.config.js +++ b/.github/actions/css/cypress.config.js @@ -1,4 +1,4 @@ -const cypressPath = process.env.cypressPath || "."; +const cypressPath = process.env.cypressPath ? process.env.cypressPath : '.'; module.exports = { e2e: { From 84cce32de3dc4eab06da9cffcf73300dbfebf0bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 11:19:58 -0300 Subject: [PATCH 16/21] Updated cypress configuration file --- .github/actions/css/cypress.config.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/actions/css/cypress.config.js b/.github/actions/css/cypress.config.js index 15e3e761..8354eb94 100644 --- a/.github/actions/css/cypress.config.js +++ b/.github/actions/css/cypress.config.js @@ -1,18 +1,16 @@ -const cypressPath = process.env.cypressPath ? process.env.cypressPath : '.'; - module.exports = { e2e: { baseUrl: "http://localhost:8080", - specPattern: `${cypressPath}/cypress/integration/**/*.test.js`, + specPattern: `${process.env.cypressPath}/cypress/integration/**/*.test.js`, video: true, - screenshotsFolder: `${cypressPath}/cypress/screenshots`, - videosFolder: `${cypressPath}/cypress/videos`, + screenshotsFolder: `${process.env.cypressPath}/cypress/screenshots`, + videosFolder: `${process.env.cypressPath}/cypress/videos`, viewportWidth: 1280, viewportHeight: 720, supportFile: false, reporter: 'junit', reporterOptions: { - mochaFile: `${cypressPath}/cypress/reports/report-[hash].xml` + mochaFile: `${process.env.cypressPath}/cypress/reports/report-[hash].xml` }, } } \ No newline at end of file From bf6968c16dc4b0cfe09b48cebae467547c265dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Eduardo=20Montandon?= Date: Wed, 15 May 2024 13:21:51 -0300 Subject: [PATCH 17/21] Fixed cypress environment variable --- .github/actions/css/cypress.config.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/actions/css/cypress.config.js b/.github/actions/css/cypress.config.js index 8354eb94..6ef4f25d 100644 --- a/.github/actions/css/cypress.config.js +++ b/.github/actions/css/cypress.config.js @@ -1,16 +1,18 @@ +const cypressPath = process.env.CYPRESS_PATH ? process.env.CYPRESS_PATH : '.'; + module.exports = { e2e: { baseUrl: "http://localhost:8080", - specPattern: `${process.env.cypressPath}/cypress/integration/**/*.test.js`, + specPattern: `${cypressPath}/cypress/integration/**/*.test.js`, video: true, - screenshotsFolder: `${process.env.cypressPath}/cypress/screenshots`, - videosFolder: `${process.env.cypressPath}/cypress/videos`, + screenshotsFolder: `${cypressPath}/cypress/screenshots`, + videosFolder: `${cypressPath}/cypress/videos`, viewportWidth: 1280, viewportHeight: 720, supportFile: false, reporter: 'junit', reporterOptions: { - mochaFile: `${process.env.cypressPath}/cypress/reports/report-[hash].xml` + mochaFile: `${cypressPath}/cypress/reports/report-[hash].xml` }, } } \ No newline at end of file From c240705c2beef9de635cf55134297f93348b262a Mon Sep 17 00:00:00 2001 From: Ketelin Date: Sun, 9 Jun 2024 15:11:01 -0300 Subject: [PATCH 18/21] T5 e T6 --- style.css | 273 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 210 insertions(+), 63 deletions(-) diff --git a/style.css b/style.css index 97872860..1d7a5cb8 100644 --- a/style.css +++ b/style.css @@ -1,37 +1,32 @@ body { - background-color: #A6A6A6; + background-color: #EBD3FF; color: #0D0D0D; - width: 80%; - max-width: 1280px; - margin: 0 auto; + margin: 0; + padding: 0; } -.page-wrapper { - position: relative; + +.highlight { + color: #EBD3FF; } -.intro { - background-color: #D9D9D9; - height: 550px; - text-align: right; +body { + margin: 0; + width: 100%; + font-family: sans-serif; + font-size: 16px; } -#design-archives { - position: absolute; - top: 560px; - left: calc(62% + 2%); - padding: 0 2%; +p { + text-indent: 1em; } -.explanation { - width: 60%; - margin-right: 35%; - border-right: 1px solid #1f295c; - padding-right: 2%; +h1, h2, h3 { + text-align: center; + margin: 0; } h1 { font-size: 1.8rem; - margin-left: 1em; } h2 { @@ -42,8 +37,11 @@ h3 { font-size: 1.2rem; } +.intro { + text-align: right; +} + .main { - text-align: center; line-height: 1.5; } @@ -51,73 +49,222 @@ abbr { font-variant: small-caps; } +body { + width: 80%; + max-width: 1280px; + margin: 0 auto; +} + +.intro { + max-height: 550px; +} + header { - background-color: #0D0D0D; - color: #FFFFFF; - padding: 1em; + background: #0D0D0D; + color: #EBD3FF; + padding: 20px; } -h1, h2 { - display: inline-block; +header h1 { margin-right: 1em; } -nav ul { - list-style-type: none; - padding-left: 0; +.navbar ul { + list-style: none; + padding: 0; } -nav li { - margin-bottom: 1em; - text-align: center; +.navbar li { + display: inline-block; + margin-right: 1em; } -footer { - background-color: #FFFFFF; - color: #0D0D0D; - margin-top: 4%; - padding: 1em; +.footer { + background-color: #0D0D0D; + color: #EBD3FF; + padding: 20px 0; + display: flex; + justify-content: center; + flex-wrap: wrap; + position: relative; } -footer a { - display: inline-block; - border: 2px solid #0D0D0D; +.footer a { + border: 2px solid #EBD3FF; padding: 0.5em; + margin: 0.5em; + background-color: #EBD3FF; + color: #0D0D0D; + flex: 0 0 150px; + position: absolute; + bottom: 20px; + right: 20px; +} + +.benefits-section, +.participation-section { + width: 100%; + padding: 10px 0; +} + +.benefits-section h3, +.participation-section h3 { + margin: 0; +} + +.benefits-section { + border-bottom: 1px solid #000; +} + +.participation-section { + border-top: 1px solid #000; +} + +.page-wrapper { + position: relative; +} + +.explanation { + width: 60%; + margin-right: 35%; + border-right: 1px solid #010205; + padding-right: 2%; + padding: 70px 2%; +} + +.design-menu { + position: absolute; + top: 560px; + left: 62%; + width: 35%; + padding: 20px 2%; +} + +a { + color: #000000; + font-weight: bold; text-decoration: none; - color: #0D0D0D; } -footer a:hover { - background-color: #0D0D0D; - color: #FFFFFF; +a:hover { + color: #a101db; } -header h1, header h2 { - margin-right: 1em; +a:visited { + font-weight: normal; } -nav li { - margin-bottom: 1em; - text-align: center; +.main-content p:first-of-type:first-letter { + font-size: 300%; + float: left; + font-family: 'Times New Roman', Times, serif; +} + +.design-menu li { + border-top: 2px solid #000; +} + +.design-menu li:last-child { + border-bottom: 2px solid #000; +} + +.benefits-section .benefit { + display: flex; +} + +.benefit p { + flex: 0 0 70%; + text-align: left; +} + +.benefit h3 { + flex: 0 0 30%; + text-align: right; + align-self: center; +} + +.participation-section .participation-item { + display: flex; + flex: 1 1 50%; + justify-content: center; +} + +.participation-item h3 { + align-self: center; +} + +.participation-section { + display: flex; + justify-content: space-between; + align-items: center; +} + +.participation-section .participation-item { + flex: 1; + text-align: center; } -nav ul { - padding-left: 0; +.wrapper { + position: absolute; + top: 350px; + left: 800px; + font-size: 15px; + padding: 1px; } -nav li { - list-style-type: none; - margin-bottom: 1em; +footer { text-align: center; } -nav a { - display: block; - padding: 1em; - text-decoration: none; - color: #FFFFFF; +.preamble p:first-of-type::first-letter { + font-size: 300%; + font-family: 'Times New Roman', Times, serif; + float: left; } -nav a:hover { - background-color: #0D0D0D; -} \ No newline at end of file +/* Aplicar o Flexbox no rodapé da seção principal */ +.footer { + display: flex; + justify-content: center; + gap: 20px; + flex-wrap: wrap; +} + +.footer a { + flex: 0 0 auto; +} + +/* Configurar o layout de flexbox para a seção de benefícios */ +.benefits-section { + display: flex; + align-items: center; +} + +.benefit p { + flex: 0 0 70%; +} + +.benefit h3 { + flex: 0 0 30%; + text-align: right; + align-self: center; +} + +/* Configurar o layout de flexbox para a seção de participação */ +.participation-section .participation-item { + flex: 1 1 50%; + display: flex; + justify-content: center; + align-items: center; +} + +/* Incluir linhas no topo e na parte inferior das seções de participação e benefícios */ +.benefits-section { + border-top: 1px solid #000; + border-bottom: 1px solid #000; +} + +.participation-section { + border-top: none; + border-bottom: 1px solid #000; +} From 77577c77e2527ce382716b273ca64bc93beb818d Mon Sep 17 00:00:00 2001 From: Ketelin Date: Sun, 9 Jun 2024 15:57:02 -0300 Subject: [PATCH 19/21] T7 --- style.css | 231 +++++++++--------------------------------------------- 1 file changed, 37 insertions(+), 194 deletions(-) diff --git a/style.css b/style.css index 59178652..02ff681e 100644 --- a/style.css +++ b/style.css @@ -3,14 +3,6 @@ body { color: #0D0D0D; margin: 0; padding: 0; - background-color: #EBD3FF; - color: #0D0D0D; - margin: 0; - padding: 0; -} - -.highlight { - color: #EBD3FF; } .highlight { @@ -28,21 +20,6 @@ p { text-indent: 1em; } -h1, h2, h3 { - text-align: center; - margin: 0; -} -body { - margin: 0; - width: 100%; - font-family: sans-serif; - font-size: 16px; -} - -p { - text-indent: 1em; -} - h1, h2, h3 { text-align: center; margin: 0; @@ -50,8 +27,6 @@ h1, h2, h3 { h1 { font-size: 1.8rem; - font-size: 1.8rem; - font-size: 1.8rem; } h2 { @@ -75,175 +50,6 @@ abbr { font-variant: small-caps; } - -body { - width: 80%; - max-width: 1280px; - margin: 0 auto; -} - -.intro { - max-height: 550px; -} - -header { - background: #0D0D0D; - color: #EBD3FF; - padding: 20px; -} - -header h1 { - margin-right: 1em; -} - -.navbar ul { - list-style: none; - padding: 0; -} - -.navbar li { - display: inline-block; - margin-right: 1em; -} - -.footer { - background-color: #0D0D0D; - color: #EBD3FF; - padding: 20px 0; - display: flex; - justify-content: center; - flex-wrap: wrap; - position: relative; -} - -.footer a { - border: 2px solid #EBD3FF; - padding: 0.5em; - margin: 0.5em; - background-color: #EBD3FF; - color: #0D0D0D; - flex: 0 0 150px; - - position: absolute; - bottom: 20px; - right: 20px; -} - -.benefits-section, -.participation-section { - width: 100%; - padding: 10px 0; -} - -.benefits-section h3, -.participation-section h3 { - margin: 0; -} - -.benefits-section { - border-bottom: 1px solid #000; -} - -.participation-section { - border-top: 1px solid #000; -} - - -.page-wrapper { - position: relative; -} - -.explanation { - width: 60%; - margin-right: 35%; - border-right: 1px solid #010205; - padding-right: 2%; - padding: 70px 2%; -} - -.design-menu { - position: absolute; - top: 560px; - left: 62%; - width: 35%; - padding: 20px 2%; -} - -a { - color: #000000; - font-weight: bold; - text-decoration: none; -} - -a:hover { - color: #a101db; -} - -a:visited { - font-weight: normal; -} - -.main-content p:first-of-type:first-letter { - font-size: 300%; - float: left; - font-family: 'Times New Roman', Times, serif; -} - -.design-menu li { - border-top: 2px solid #000; -} - -.design-menu li:last-child { - border-bottom: 2px solid #000; -} - - -.benefits-section .benefit { - display: flex; -} - -.benefit p { - flex: 0 0 70%; - text-align: left; -} - -.benefit h3 { - flex: 0 0 30%; - text-align: right; - align-self: center; -} - -.participation-section .participation-item { - display: flex; - flex: 1 1 50%; - justify-content: center; -} - -.participation-item h3 { - align-self: center; -} -.participation-section { - display: flex; /* Ativa o flex container */ - justify-content: space-between; /* Distribui os itens uniformemente ao longo do eixo principal */ - align-items: center; /* Centraliza verticalmente os itens */ -} - -.participation-section .participation-item { - flex: 1; /* Cada item ocupa 50% do espaço disponível */ - text-align: center; /* Centraliza o texto horizontalmente */ -} - -.wrapper{ - position: absolute; /* Define a posição absoluta */ - top: 350px; /* Define a distância do topo da página */ - left: 800px; /* Define a distância da esquerda da página */ - font-size: 15px; - padding: 1px; -} -footer{ - text-align: center; -} - body { width: 80%; max-width: 1280px; @@ -463,3 +269,40 @@ footer { border-top: none; border-bottom: 1px solid #000; } + +/* Layout mobile */ +@media screen and (max-width: 768px) { + .design-menu { + position: static; + } + + .explanation { + border-right: none; + } + + .participation-section .participation-item { + flex-direction: column; + } + + header { + max-height: none; + } + + p { + margin-top: 0; + } +} + +/* Mídia de impressão */ +@media print { + body { + font-family: 'Times New Roman', Times, serif; + color: #0D0D0D; + background-color: #EBD3FF; + } + + header, .footer { + background-color: #EBD3FF; + color: #0D0D0D; + } +} From 699f3d53b42a1f7def7b19fb756aa3205eae4186 Mon Sep 17 00:00:00 2001 From: Ketelinluana Date: Mon, 10 Jun 2024 07:54:07 -0300 Subject: [PATCH 20/21] T7 --- 5.css | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 2 +- style.css | 177 ++++++++++++++++++++----------------------- 3 files changed, 304 insertions(+), 94 deletions(-) create mode 100644 5.css diff --git a/5.css b/5.css new file mode 100644 index 00000000..2c18d636 --- /dev/null +++ b/5.css @@ -0,0 +1,219 @@ +body { + background-color: #EBD3FF; + color: #0D0D0D; + margin: 0; + padding: 0; +} + +.highlight { + color: #EBD3FF; +} + +body { + margin: 0; + width: 100%; + font-family: sans-serif; + font-size: 16px; +} + +p { + text-indent: 1em; +} + +h1, h2, h3 { + text-align: center; + margin: 0; +} + +h1 { + font-size: 1.8rem; +} + +h2 { + font-size: 1.4rem; +} + +h3 { + font-size: 1.2rem; +} + +.intro { + text-align: right; +} + +.main { + line-height: 1.5; +} + +abbr { + font-variant: small-caps; +} + + +body { + width: 80%; + max-width: 1280px; + margin: 0 auto; +} + +.intro { + max-height: 550px; +} + +header { + background: #0D0D0D; + color: #EBD3FF; + padding: 20px; +} + +header h1 { + margin-right: 1em; +} + +.navbar ul { + list-style: none; + padding: 0; +} + +.navbar li { + display: inline-block; + margin-right: 1em; +} + +.footer { + background-color: #0D0D0D; + color: #EBD3FF; + padding: 20px 0; + display: flex; + justify-content: center; + flex-wrap: wrap; + position: relative; +} + +.footer a { + border: 2px solid #EBD3FF; + padding: 0.5em; + margin: 0.5em; + background-color: #EBD3FF; + color: #0D0D0D; + flex: 0 0 150px; + + position: absolute; + bottom: 20px; + right: 20px; +} + +.benefits-section, +.participation-section { + width: 100%; + padding: 10px 0; +} + +.benefits-section h3, +.participation-section h3 { + margin: 0; +} + +.benefits-section { + border-bottom: 1px solid #000; +} + +.participation-section { + border-top: 1px solid #000; +} + + +.page-wrapper { + position: relative; +} + +.explanation { + width: 60%; + margin-right: 35%; + border-right: 1px solid #010205; + padding-right: 2%; + padding: 70px 2%; +} + +.design-menu { + position: absolute; + top: 560px; + left: 62%; + width: 35%; + padding: 20px 2%; +} + +a { + color: #000000; + font-weight: bold; + text-decoration: none; +} + +a:hover { + color: #a101db; +} + +a:visited { + font-weight: normal; +} + +.main-content p:first-of-type:first-letter { + font-size: 300%; + float: left; + font-family: 'Times New Roman', Times, serif; +} + +.design-menu li { + border-top: 2px solid #000; +} + +.design-menu li:last-child { + border-bottom: 2px solid #000; +} + + +.benefits-section .benefit { + display: flex; +} + +.benefit p { + flex: 0 0 70%; + text-align: left; +} + +.benefit h3 { + flex: 0 0 30%; + text-align: right; + align-self: center; +} + +.participation-section .participation-item { + display: flex; + flex: 1 1 50%; + justify-content: center; +} + +.participation-item h3 { + align-self: center; +} +.participation-section { + display: flex; /* Ativa o flex container */ + justify-content: space-between; /* Distribui os itens uniformemente ao longo do eixo principal */ + align-items: center; /* Centraliza verticalmente os itens */ +} + +.participation-section .participation-item { + flex: 1; /* Cada item ocupa 50% do espaço disponível */ + text-align: center; /* Centraliza o texto horizontalmente */ +} + +.wrapper{ + position: absolute; /* Define a posição absoluta */ + top: 350px; /* Define a distância do topo da página */ + left: 800px; /* Define a distância da esquerda da página */ + font-size: 15px; + padding: 1px; +} +footer{ + text-align: center; +} \ No newline at end of file diff --git a/index.html b/index.html index 090a8364..b84aff32 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ CSS Zen Garden: The Beauty of CSS Design - + diff --git a/style.css b/style.css index c6334fa0..54ebd2f7 100644 --- a/style.css +++ b/style.css @@ -3,14 +3,6 @@ body { color: #0D0D0D; margin: 0; padding: 0; - background-color: #A6A6A6; - color: #0D0D0D; - width: 80%; - max-width: 1280px; - margin: 0 auto; -} -.page-wrapper { - position: relative; } .highlight { @@ -32,30 +24,9 @@ h1, h2, h3 { text-align: center; margin: 0; } -.intro { - background-color: #D9D9D9; - height: 550px; - text-align: right; -} - -#design-archives { - position: absolute; - top: 560px; - left: calc(62% + 2%); - padding: 0 2%; -} - -.explanation { - width: 60%; - margin-right: 35%; - border-right: 1px solid #1f295c; - padding-right: 2%; -} h1 { font-size: 1.8rem; - font-size: 1.8rem; - margin-left: 1em; } h2 { @@ -66,8 +37,11 @@ h3 { font-size: 1.2rem; } +.intro { + text-align: right; +} + .main { - line-height: 1.5; text-align: center; line-height: 1.5; } @@ -76,7 +50,6 @@ abbr { font-variant: small-caps; } - body { width: 80%; max-width: 1280px; @@ -124,7 +97,6 @@ header h1 { background-color: #EBD3FF; color: #0D0D0D; flex: 0 0 150px; - position: absolute; bottom: 20px; right: 20px; @@ -149,7 +121,6 @@ header h1 { border-top: 1px solid #000; } - .page-wrapper { position: relative; } @@ -164,7 +135,7 @@ header h1 { .design-menu { position: absolute; - top: 560px; + top: 500px; left: 62%; width: 35%; padding: 20px 2%; @@ -198,7 +169,6 @@ a:visited { border-bottom: 2px solid #000; } - .benefits-section .benefit { display: flex; } @@ -223,95 +193,116 @@ a:visited { .participation-item h3 { align-self: center; } + .participation-section { - display: flex; /* Ativa o flex container */ - justify-content: space-between; /* Distribui os itens uniformemente ao longo do eixo principal */ - align-items: center; /* Centraliza verticalmente os itens */ + display: flex; + justify-content: space-between; + align-items: center; } .participation-section .participation-item { - flex: 1; /* Cada item ocupa 50% do espaço disponível */ - text-align: center; /* Centraliza o texto horizontalmente */ + flex: 1; + text-align: center; } -.wrapper{ - position: absolute; /* Define a posição absoluta */ - top: 350px; /* Define a distância do topo da página */ - left: 800px; /* Define a distância da esquerda da página */ +.wrapper { + position: absolute; + top: 350px; + left: 800px; font-size: 15px; padding: 1px; } -footer{ + +footer { text-align: center; } -header { - background-color: #0D0D0D; - color: #FFFFFF; - padding: 1em; +.preamble p:first-of-type::first-letter { + font-size: 300%; + font-family: 'Times New Roman', Times, serif; + float: left; } -h1, h2 { - display: inline-block; - margin-right: 1em; +/* Aplicar o Flexbox no rodapé da seção principal */ +.footer { + display: flex; + justify-content: center; + gap: 20px; + flex-wrap: wrap; } -nav ul { - list-style-type: none; - padding-left: 0; +.footer a { + flex: 0 0 auto; } -nav li { - margin-bottom: 1em; - text-align: center; +/* Configurar o layout de flexbox para a seção de benefícios */ +.benefits-section { + display: flex; + align-items: center; } -footer { - background-color: #FFFFFF; - color: #0D0D0D; - margin-top: 4%; - padding: 1em; +.benefit p { + flex: 0 0 70%; } -footer a { - display: inline-block; - border: 2px solid #0D0D0D; - padding: 0.5em; - text-decoration: none; - color: #0D0D0D; +.benefit h3 { + flex: 0 0 30%; + text-align: right; + align-self: center; } -footer a:hover { - background-color: #0D0D0D; - color: #FFFFFF; +/* Configurar o layout de flexbox para a seção de participação */ +.participation-section .participation-item { + flex: 1 1 50%; + display: flex; + justify-content: center; + align-items: center; } -header h1, header h2 { - margin-right: 1em; +/* Incluir linhas no topo e na parte inferior das seções de participação e benefícios */ +.benefits-section { + border-top: 1px solid #000; + border-bottom: 1px solid #000; } -nav li { - margin-bottom: 1em; - text-align: center; +.participation-section { + border-top: none; + border-bottom: 1px solid #000; } -nav ul { - padding-left: 0; -} +/* Layout mobile */ +@media screen and (max-width: 768px) { + .design-menu { + position: static; + } -nav li { - list-style-type: none; - margin-bottom: 1em; - text-align: center; -} + .explanation { + border-right: none; + } -nav a { - display: block; - padding: 1em; - text-decoration: none; - color: #FFFFFF; + .participation-section .participation-item { + flex-direction: column; + } + + header { + max-height: none; + } + + p { + margin-top: 0; + } } -nav a:hover { - background-color: #0D0D0D; -} \ No newline at end of file +/* Mídia de impressão */ +@media print { + body { + font-family: 'Times New Roman', Times, serif; + color: #0D0D0D; + background-color: #EBD3FF; + } + + header, .footer { + background-color: #EBD3FF; + color: #0D0D0D; + } +} From 3b0a5276d63e6036e6ee02dbccb656bd8f746cda Mon Sep 17 00:00:00 2001 From: Ketelinluana <160741453+Ketelinluana@users.noreply.github.com> Date: Wed, 28 Aug 2024 17:18:15 -0300 Subject: [PATCH 21/21] style.css --- style.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/style.css b/style.css index 54ebd2f7..56194532 100644 --- a/style.css +++ b/style.css @@ -251,7 +251,6 @@ footer { align-self: center; } -/* Configurar o layout de flexbox para a seção de participação */ .participation-section .participation-item { flex: 1 1 50%; display: flex; @@ -259,7 +258,6 @@ footer { align-items: center; } -/* Incluir linhas no topo e na parte inferior das seções de participação e benefícios */ .benefits-section { border-top: 1px solid #000; border-bottom: 1px solid #000; @@ -270,7 +268,6 @@ footer { border-bottom: 1px solid #000; } -/* Layout mobile */ @media screen and (max-width: 768px) { .design-menu { position: static; @@ -293,7 +290,6 @@ footer { } } -/* Mídia de impressão */ @media print { body { font-family: 'Times New Roman', Times, serif;