diff --git a/.eslintignore b/.eslintignore index c925c21d56..89f52aaca4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,2 @@ +/backstop_data /dist -/node_modules diff --git a/.github/workflows/test.yml-template b/.github/workflows/test.yml-template new file mode 100644 index 0000000000..8b5743ecb4 --- /dev/null +++ b/.github/workflows/test.yml-template @@ -0,0 +1,29 @@ +name: Test + +on: + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test + - name: Upload HTML report(backstop data) + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: report + path: backstop_data diff --git a/.gitignore b/.gitignore index 885c5fa6a4..1558091fd7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,15 @@ +# IDE .idea .vscode -build -dist + +# Node node_modules -.DS_Store -npm-debug.log* -yarn-debug.log* -yarn-error.log* +# MacOS +.DS_Store -raw_reports -reports -cypress/screenshots -cypress/videos +# Generated files +backstop_data +dist +.cache +.parcel-cache diff --git a/README.md b/README.md index 97d3c9060a..dc36e164df 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,6 @@ In this task, you will learn how to implement a landing page. To do that: - [Nothing](https://www.figma.com/file/DtkQmQ797hk0nI4KfMi2Uq/BOSE-New-Version?type=design&node-id=6802-139&t=L7eKz5YKLN0m5WxR-0) - watch the lesson videos and implement your page blocks similarly to the videos; - **DON'T** try to do it `Pixel Perfect` - implement it the most `simple` way so it looks similar; -- when you finish the first block of your page deploy it and create a Pull Request with a [DEMO LINK](https://.github.io/layout_miami/) +- when you finish the first block of your page deploy it and create a Pull Request with a [DEMO LINK](https://TomekSzatal.github.io/layout_miami/) - after each next block do the same (add, commit and push the changes, and deploy the updated demo; - check yourself using the [CHECKLIST](https://github.com/mate-academy/layout_miami/blob/master/checklist.md) when finished; diff --git a/dist/assets/1-Chp9Ez2K.jpg b/dist/assets/1-Chp9Ez2K.jpg new file mode 100644 index 0000000000..441f0e3f2d Binary files /dev/null and b/dist/assets/1-Chp9Ez2K.jpg differ diff --git a/dist/assets/2-Bx040N0C.jpg b/dist/assets/2-Bx040N0C.jpg new file mode 100644 index 0000000000..c41544c26e Binary files /dev/null and b/dist/assets/2-Bx040N0C.jpg differ diff --git a/dist/assets/3-DUivDC0m.jpg b/dist/assets/3-DUivDC0m.jpg new file mode 100644 index 0000000000..81ff964e09 Binary files /dev/null and b/dist/assets/3-DUivDC0m.jpg differ diff --git a/dist/assets/4-Dfowdv9E.jpg b/dist/assets/4-Dfowdv9E.jpg new file mode 100644 index 0000000000..47bedaba66 Binary files /dev/null and b/dist/assets/4-Dfowdv9E.jpg differ diff --git a/dist/assets/5-CBZdhIGE.jpg b/dist/assets/5-CBZdhIGE.jpg new file mode 100644 index 0000000000..05be7f67af Binary files /dev/null and b/dist/assets/5-CBZdhIGE.jpg differ diff --git a/dist/assets/6-UglAWDOj.jpg b/dist/assets/6-UglAWDOj.jpg new file mode 100644 index 0000000000..d796318855 Binary files /dev/null and b/dist/assets/6-UglAWDOj.jpg differ diff --git a/dist/assets/Roboto-Regular-webfont-Fd-ZVn32.woff b/dist/assets/Roboto-Regular-webfont-Fd-ZVn32.woff new file mode 100644 index 0000000000..8aa07d7310 Binary files /dev/null and b/dist/assets/Roboto-Regular-webfont-Fd-ZVn32.woff differ diff --git a/dist/assets/bike_1-Co44olEm.jpg b/dist/assets/bike_1-Co44olEm.jpg new file mode 100644 index 0000000000..f6f51a6a9a Binary files /dev/null and b/dist/assets/bike_1-Co44olEm.jpg differ diff --git a/dist/assets/bike_2-45uj5N9x.jpg b/dist/assets/bike_2-45uj5N9x.jpg new file mode 100644 index 0000000000..52684043fa Binary files /dev/null and b/dist/assets/bike_2-45uj5N9x.jpg differ diff --git a/dist/assets/bike_3-vbmd6ifD.jpg b/dist/assets/bike_3-vbmd6ifD.jpg new file mode 100644 index 0000000000..f8542af192 Binary files /dev/null and b/dist/assets/bike_3-vbmd6ifD.jpg differ diff --git a/dist/assets/favicon-6g5HnVdl.png b/dist/assets/favicon-6g5HnVdl.png new file mode 100644 index 0000000000..4d3948f9ec Binary files /dev/null and b/dist/assets/favicon-6g5HnVdl.png differ diff --git a/dist/assets/footer-Du1Gsr1n.jpg b/dist/assets/footer-Du1Gsr1n.jpg new file mode 100644 index 0000000000..179ad0b134 Binary files /dev/null and b/dist/assets/footer-Du1Gsr1n.jpg differ diff --git a/dist/assets/header-background-DzB5SpGN.jpg b/dist/assets/header-background-DzB5SpGN.jpg new file mode 100644 index 0000000000..3109c16e38 Binary files /dev/null and b/dist/assets/header-background-DzB5SpGN.jpg differ diff --git a/dist/assets/index-DFyGyIub.css b/dist/assets/index-DFyGyIub.css new file mode 100644 index 0000000000..6c504183c3 --- /dev/null +++ b/dist/assets/index-DFyGyIub.css @@ -0,0 +1 @@ +h1{font-family:Roboto,sans-serif;font-weight:400}@font-face{font-family:Roboto,Arial,Helvetica,sans-serif;src:url(/layout_miami/assets/Roboto-Regular-webfont-Fd-ZVn32.woff) format("woff");font-weight:400;font-style:normal}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:"";content:none}table{border-collapse:collapse;border-spacing:0}.title{font-family:Poppins,sans-serif;font-weight:700;font-style:Bold;font-size:36px;line-height:100%;letter-spacing:-1.5px;text-align:center;vertical-align:middle;color:#fff}@media (min-width: 744px){.title{font-size:64px}}@media (min-width: 1260px){.title{font-size:80px}}.title--secondary{font-family:Poppins,sans-serif;font-weight:500;font-style:Medium;font-size:32px;line-height:100%;letter-spacing:-1.5px;text-align:left;color:fff}@media (min-width: 744px){.title--secondary{font-size:48px}}@media (min-width: 1260px){.title--secondary{font-size:64px}}.title--section{color:#fff;font-weight:500;font-style:medium;font-size:32px;line-height:100%;text-align:center;letter-spacing:-1.5px}@media (min-width: 744px){.title--section{font-size:48px}}@media (min-width: 1260px){.title--section{font-size:64px}}.header{background-color:#000;background-image:url(/layout_miami/assets/header-background-DzB5SpGN.jpg);background-repeat:no-repeat;background-size:cover;background-position:calc(100% + 50px) center;min-height:100vh;padding:0 20px 88px;box-sizing:border-box;grid-template-rows:1fr 1fr}@media (min-width: 744px){.header{background-position:center}}@media (min-width: 1260px){.header{background-position:center}}.header{display:grid;justify-content:center;grid-template-columns:repeat(2,130px);gap:20px}@media (min-width: 744px){.header{grid-template-columns:repeat(6,80px);gap:24px}}@media (min-width: 1260px){.header{grid-template-columns:repeat(12,63px);gap:24px}}.header__navigation{align-self:start;grid-column:1/3;grid-row:1/2}.header__navigation>div{display:flex;align-items:center;gap:24px}@media (min-width: 744px){.header__navigation>div{gap:36px}}@media (min-width: 1260px){.header__navigation>div{gap:32px}}@media (min-width: 744px){.header__navigation{grid-column:1/7}}@media (min-width: 1260px){.header__navigation{grid-column:1/13}}.header__title{align-self:end;grid-column:1/3;grid-row:2/3}@media (min-width: 744px){.header__title{grid-column:1/7}}@media (min-width: 1260px){.header__title{grid-column:1/13}}.main{padding:60px 20px;font-family:Poppins,sans-serif;font-weight:500;font-style:medium;font-size:23px;line-height:140%;letter-spacing:0;color:#fff;background:#1d1d1d}@media (min-width: 744px){.main{padding:120px 70px}}@media (min-width: 1260px){.main{padding:120px}}.main{display:grid;justify-content:center;grid-template-columns:repeat(2,130px);gap:20px}@media (min-width: 744px){.main{grid-template-columns:repeat(6,80px);gap:24px}}@media (min-width: 1260px){.main{grid-template-columns:repeat(12,63px);gap:24px}}.main__title{margin-bottom:32px;grid-column:1/3}@media (min-width: 744px){.main__title{grid-column:1/4}}@media (min-width: 1260px){.main__title{grid-column:1/5}}.main__content{grid-column:1/3}@media (min-width: 744px){.main__content{grid-column:4/7}}@media (min-width: 1260px){.main__content{grid-column:6/12}}.main__compare{grid-column:1/3}@media (min-width: 744px){.main__compare{grid-column:2/6}}@media (min-width: 1260px){.main__compare{grid-column:1/13}}.main__section{grid-column:1/3}@media (min-width: 744px){.main__section{grid-column:1/7}}@media (min-width: 1260px){.main__section{grid-column:1/13}}.article__title{font-family:Poppins,sans-serif;font-weight:700;font-style:Bold;font-size:24px;line-height:140%;letter-spacing:0;margin-bottom:8px}.article__description{font-family:Poppins,sans-serif;font-weight:400;font-style:Regular;font-size:16px;line-height:140%;letter-spacing:0;margin-bottom:40px}@media (min-width: 744px){.article__description{margin-bottom:48px}}@media (min-width: 1260px){.article__description{margin-bottom:48px;max-width:66%}}.pictures{grid-template-columns:1fr 1fr;margin-bottom:16px;display:grid;justify-content:center;grid-template-columns:repeat(2,130px);gap:20px}@media (min-width: 744px){.pictures{grid-template-columns:repeat(6,80px);gap:24px}}@media (min-width: 1260px){.pictures{grid-template-columns:repeat(12,63px);gap:24px}}.pictures__item{width:100%;position:relative;padding-top:100%}@media (min-width: 744px){.pictures__item{padding-top:187px}.pictures__item--big{grid-column:span 4}.pictures__item--small{grid-column:span 2}}@media (min-width: 1260px){.pictures__item{padding-top:320px}.pictures__item--big{grid-column:span 8}.pictures__item--small{grid-column:span 4}}.pictures__image{top:0;width:100%;height:100%;position:absolute;object-fit:cover;transition:transform .3s ease}.pictures__item:hover .pictures__image{transform:scale(1.05)}.button{background:#fff;border-radius:40px;display:block;text-decoration:none;text-align:center;height:56px;width:278px;font-family:Poppins,sans-serif;font-style:bold;font-size:16px;line-height:56px;font-weight:700;color:#1d1d1d;margin:0 auto}@media (min-width: 744px){.button{width:392px}}@media (min-width: 1260px){.button{width:324px}}.button--primary{width:280px}@media (min-width: 744px){.button--primary{width:288px}}@media (min-width: 1260px){.button--primary{width:411px}}.button--primary:hover{box-shadow:1px 4px 16px #e8e8f066}.bike__photo{width:280px;height:228px;object-fit:cover;object-position:top;display:block;margin:0 auto 32px}@media (min-width: 744px){.bike__photo{width:392px;height:319px}}@media (min-width: 1260px){.bike__photo{width:324px;height:256px}}.bike__name{font-family:Poppins,sans-serif;font-style:bold;font-weight:700;font-size:24px;line-height:140%;color:#fff;margin-bottom:8px}.bike__description{font-family:Poppins,sans-serif;font-weight:400;font-style:Regular;font-size:16px;line-height:140%;letter-spacing:0;color:#fff;margin-bottom:16px}.bike__price{font-family:Poppins,sans-serif;font-style:bold;font-weight:700;font-size:24px;line-height:140%;color:#fff;margin-bottom:40px}.address__label{font-family:Poppins,sans-serif;font-style:Regular;font-weight:400;font-size:14px;line-height:140%;color:#fff;margin-bottom:8px}.address__content{font-family:Poppins,sans-serif;font-style:medium;font-weight:500;font-size:16px;line-height:140%;margin-bottom:24px;color:#fff;text-decoration:none;transition:color .3s}.address__content:hover{color:#7e7e83}.form{display:flex;flex-direction:column;gap:20px}.form__input{background:#f7f8ff;border-radius:48px;border:0;width:100%;box-sizing:border-box;height:48px;line-height:48px;padding-left:17px}.form__input::placeholder{font-family:Poppins,sans-serif;font-style:normal;font-weight:500;font-size:14px;line-height:27px;color:#8f99a8}.form__textarea{background:#f7f8ff;border-radius:16px;border:0;width:100%;box-sizing:border-box;line-height:48px;padding-top:14px;padding-left:17px}.form__textarea::placeholder{font-family:Poppins,sans-serif;font-style:normal;font-weight:500;font-size:14px;line-height:27px;color:#8f99a8}.form__label:not(:focus,:active){clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.footer{height:200px;background-image:url(/layout_miami/assets/footer-Du1Gsr1n.jpg);background-repeat:no-repeat;display:flex;flex-direction:column;justify-content:flex-end;background-size:cover;align-items:center;box-sizing:border-box;background-position:90% center}@media (min-width: 744px){.footer{height:480px}}@media (min-width: 1260px){.footer{height:555px}}.navigation{display:flex;justify-content:space-between;padding-top:25px;align-items:center}.navigation__item--hidden{opacity:0}.menu{position:fixed;top:0;left:0;right:0;z-index:1000;transform:translate(-100%);transition:transform .4s ease-in-out;background:#c2c2c2;padding:0 20px 20px;min-height:100vh;display:grid;justify-content:center;grid-template-columns:repeat(2,130px);gap:20px}@media (min-width: 744px){.menu{grid-template-columns:repeat(6,80px);gap:24px}}@media (min-width: 1260px){.menu{grid-template-columns:repeat(12,63px);gap:24px}}.menu{align-content:start}.menu:target{transform:translate(0)}.menu__navigation{grid-column:span 2}@media (min-width: 744px){.menu__navigation{grid-column:span 6}}@media (min-width: 1260px){.menu__navigation{grid-column:span 12}}.menu__links{margin-bottom:40px;grid-column:span 2}@media (min-width: 744px){.menu__links{grid-column:span 6}}@media (min-width: 1260px){.menu__links{grid-column:span 12}}.menu__paragraph{font-family:Poppins,sans-serif;font-style:normal;font-weight:700;font-size:12px;line-height:16px;color:#1d1d1d;letter-spacing:2px;text-transform:uppercase;margin-bottom:16px;grid-column:span 2}@media (min-width: 744px){.menu__paragraph{grid-column:span 6}}@media (min-width: 1260px){.menu__paragraph{grid-column:span 12}}.menu__link{font-family:Poppins,sans-serif;font-style:normal;font-weight:700;font-size:12px;line-height:16px;letter-spacing:2px;text-transform:uppercase;text-decoration:none;padding-bottom:8px;border-bottom:1px solid rgb(29,29,29);color:#1d1d1d}.menu__link:hover{border-bottom:1px solid transparent}.menu{overflow-y:auto}body:has(.menu:target){overflow:hidden}.links{padding-top:50px}.links__item{margin-bottom:23px}.links__link{font-family:Poppins,sans-serif;font-style:normal;font-weight:700;font-size:22px;line-height:22px;letter-spacing:2px;text-transform:uppercase;color:#1d1d1d;text-decoration:none;border-bottom:1px solid transparent;padding-bottom:8px;display:inline-block}.links__link:hover{border-bottom:1px solid rgb(29,29,29)}.section{padding-top:64px}.section__title{margin-bottom:48px}.bikes{display:grid;justify-content:center;grid-template-columns:repeat(2,130px);gap:20px}@media (min-width: 744px){.bikes{grid-template-columns:repeat(6,80px);gap:24px}}@media (min-width: 1260px){.bikes{grid-template-columns:repeat(12,63px);gap:24px}}.bikes__bike{grid-column:span 2}@media (min-width: 744px){.bikes__bike{grid-column:2/6}}@media (min-width: 1260px){.bikes__bike{grid-column:span 4}}.contact{display:grid;justify-content:center;grid-template-columns:repeat(2,130px);gap:20px}@media (min-width: 744px){.contact{grid-template-columns:repeat(6,80px);gap:24px}}@media (min-width: 1260px){.contact{grid-template-columns:repeat(12,63px);gap:24px}}.contact__address{grid-column:span 2}@media (min-width: 744px){.contact__address{grid-column:span 3}}@media (min-width: 1260px){.contact__address{grid-column:8/13}}.contact__form{grid-column:span 2}@media (min-width: 744px){.contact__form{grid-column:span 3}}@media (min-width: 1260px){.contact__form{grid-column:1/6}}.burger{display:flex}.burger__label{font-family:Poppins,sans-serif;font-style:normal;font-weight:700;font-size:10px;line-height:133%;letter-spacing:2px;text-transform:uppercase;color:#fff;position:absolute}.burger__icon{width:18px;height:12px}@media (min-width: 744px){.burger__icon{width:24px;height:16px}}@media (min-width: 1260px){.burger__icon{width:24px;height:16px}}.burger:not(:hover) .burger__label{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.phone{display:flex}.phone__label{font-family:Poppins,sans-serif;font-style:normal;font-weight:700;font-size:10px;line-height:133%;letter-spacing:2px;text-transform:uppercase;color:#fff;position:absolute;transform:translate(calc(-100% - 20px)) translateY(3px)}.phone__icon{width:18px;height:18px}@media (min-width: 744px){.phone__icon{width:24px;height:24px}}@media (min-width: 1260px){.phone__icon{width:24px;height:24px}}.phone:not(:hover) .phone__label{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.logo__image{height:38px;width:auto}@media (min-width: 744px){.logo__image{height:56px;width:auto}}@media (min-width: 1260px){.logo__image{height:56px;width:auto}}.cross__icon{width:24px;height:24px}@media (min-width: 744px){.cross__icon{width:32px;height:32px}}@media (min-width: 1260px){.cross__icon{width:32px;height:32px}}body{background:#eee} diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 0000000000..5227a42530 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,292 @@ + + + + + + MyBike + + + + + + + + +
+ +

+ Take the Streets +

+
+ + + +
+

+ Move Free +

+
+

+ Shift your ride, not gears. Find the fastest way to move in the city as the bike adapts intuitively to power the speed you need. +

+
+
+

+ Compare bikes +

+
+
+ Sporty 4 +

Sporty 4

+

+ The iconic frame brought to a new performance height as a sporty, active ride. +

+

$ 2 590

+
+
+ Ride in town ST +

Ride in town ST

+

+ An open frame for an upright riding position as the most comfortable ride in town. +

+

$ 2 590

+
+
+ Agile ride 3 +

Agile ride 3

+

+ The lightweight frame that has earned its street tread as a sleek, agile ride. +

+

$ 2 090

+
+
+
+
+

+ The Details +

+
+
+
+ Marina Palms property +
+
+ Marina Palms property +
+
+

+ Auto Unlock +

+

+ The app senses when you're nearby to unlock automatically. GPS tracking so you know where your bike is and can track it anytime. +

+
+
+ Edition Residens property +
+
+ Edition Residens property +
+
+

+ Range & Integrated lights +

+

+ The removable battery has up to 70km battery autonomy and weighs only 2.4 kg. Lights integrated into the frame give you always-on visibility day and night. +

+
+
+ Faena House property +
+
+ Faena House property +
+
+

+ Hydraulic disc brakes & Lightweight +

+

+ Brakes with total stopping power the second you make contact. The removable battery has up to 70km battery autonomy and weighs only 2.4 kg. Lights integrated into the frame give you always-on visibility day and night. +

+
+ Explore +
+
+

+ Contact us +

+
+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+

Phone

+ + +1 234 5555-55-55 + +

Email

+ + hello@miami.com + +

Address

+ + 400 first ave.
+ suite 700
+ Minneapolis, MN 55401 +
+
+
+
+
+ + + diff --git a/index.html b/index.html index 06bcd7773a..eb4d2f73a8 100644 --- a/index.html +++ b/index.html @@ -6,7 +6,16 @@ name="viewport" content="width=device-width, initial-scale=1.0" /> - Miami + MyBike + + + + -

Miami

+
+ +

+ Take the Streets +

+
+ + + +
+

+ Move Free +

+
+

+ Shift your ride, not gears. Find the fastest way to move in the city as the bike adapts intuitively to power the speed you need. +

+
+
+

+ Compare bikes +

+
+
+ Sporty 4 +

Sporty 4

+

+ The iconic frame brought to a new performance height as a sporty, active ride. +

+

$ 2 590

+
+
+ Ride in town ST +

Ride in town ST

+

+ An open frame for an upright riding position as the most comfortable ride in town. +

+

$ 2 590

+
+
+ Agile ride 3 +

Agile ride 3

+

+ The lightweight frame that has earned its street tread as a sleek, agile ride. +

+

$ 2 090

+
+
+
+
+

+ The Details +

+
+
+
+ Marina Palms property +
+
+ Marina Palms property +
+
+

+ Auto Unlock +

+

+ The app senses when you're nearby to unlock automatically. GPS tracking so you know where your bike is and can track it anytime. +

+
+
+ Edition Residens property +
+
+ Edition Residens property +
+
+

+ Range & Integrated lights +

+

+ The removable battery has up to 70km battery autonomy and weighs only 2.4 kg. Lights integrated into the frame give you always-on visibility day and night. +

+
+
+ Faena House property +
+
+ Faena House property +
+
+

+ Hydraulic disc brakes & Lightweight +

+

+ Brakes with total stopping power the second you make contact. The removable battery has up to 70km battery autonomy and weighs only 2.4 kg. Lights integrated into the frame give you always-on visibility day and night. +

+
+ Explore +
+
+

+ Contact us +

+
+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+

Phone

+ + +1 234 5555-55-55 + +

Email

+ + hello@miami.com + +

Address

+ + 400 first ave.
+ suite 700
+ Minneapolis, MN 55401 +
+
+
+
+
+ diff --git a/package-lock.json b/package-lock.json index 5cfe8293fe..0e53e7c245 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,9 @@ "@linthtml/linthtml": "^0.9.6", "@mate-academy/bemlint": "latest", "@mate-academy/linthtml-config": "latest", - "@mate-academy/scripts": "^2.1.2", + "@mate-academy/scripts": "^2.1.3", "@mate-academy/stylelint-config": "latest", + "cross-env": "^10.1.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "prettier": "^3.3.2", @@ -38,13 +39,15 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -242,19 +245,21 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -269,100 +274,28 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.29.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -548,14 +481,15 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -583,14 +517,14 @@ } }, "node_modules/@babel/types": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", - "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -698,6 +632,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "dev": true, + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.10", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", @@ -1140,6 +1081,28 @@ "node": ">=18" } }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1572,9 +1535,9 @@ "dev": true }, "node_modules/@mate-academy/scripts": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.2.tgz", - "integrity": "sha512-gUXFdqqOfYzF9R3RSx2pCa5GLdOkxB9bFbF+dpUpzucdgGAANqOGdqpmNnMj+e3xA9YHraUWq3xo9cwe5vD9pQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-2.1.3.tgz", + "integrity": "sha512-a07wHTj/1QUK2Aac5zHad+sGw4rIvcNl5lJmJpAD7OxeSbnCdyI6RXUHwXhjF5MaVo9YHrJ0xVahyERS2IIyBQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1777,10 +1740,11 @@ } }, "node_modules/@mate-academy/stylelint-config/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "argparse": "^2.0.1" @@ -2902,9 +2866,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", - "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -2916,9 +2880,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", - "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -2930,9 +2894,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", - "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -2944,9 +2908,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", - "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -2958,9 +2922,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", - "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -2972,9 +2936,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", - "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -2986,9 +2950,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", - "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -3000,9 +2964,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", - "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -3014,9 +2978,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", - "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -3028,9 +2992,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", - "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -3042,9 +3006,23 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", - "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -3056,9 +3034,23 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", - "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -3070,9 +3062,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", - "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -3084,9 +3076,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", - "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -3098,9 +3090,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", - "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -3112,9 +3104,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", - "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -3126,9 +3118,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", - "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -3139,10 +3131,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", - "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -3154,9 +3160,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", - "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -3168,9 +3174,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", - "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -3182,9 +3188,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", - "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -3196,9 +3202,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", - "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -3506,10 +3512,11 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -3796,10 +3803,11 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3897,6 +3905,20 @@ "glob": "^7.1.1" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3978,10 +4000,11 @@ } }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" }, "node_modules/chokidar": { "version": "4.0.3", @@ -4204,6 +4227,24 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/cross-env": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", + "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4440,9 +4481,9 @@ } }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4557,6 +4598,21 @@ "node": ">=10" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.832", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.832.tgz", @@ -4621,6 +4677,55 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.25.10", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", @@ -4781,20 +4886,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/fast-content-type-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", @@ -4946,13 +5037,16 @@ "dev": true }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -5022,6 +5116,31 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -5044,6 +5163,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -5162,6 +5295,19 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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", @@ -5186,6 +5332,35 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -5314,15 +5489,20 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { @@ -5355,9 +5535,9 @@ } }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", "dev": true, "license": "MIT" }, @@ -5457,16 +5637,17 @@ "dev": true }, "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "version": "8.2.7", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz", + "integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==", "dev": true, + "license": "MIT", "dependencies": { + "@inquirer/external-editor": "^1.0.0", "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", "cli-cursor": "^3.1.0", "cli-width": "^3.0.0", - "external-editor": "^3.0.3", "figures": "^3.0.0", "lodash": "^4.17.21", "mute-stream": "0.0.8", @@ -6302,13 +6483,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -6515,10 +6698,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", @@ -6620,6 +6804,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -6690,10 +6884,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -6742,10 +6937,11 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7030,15 +7226,6 @@ "node": ">=6" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -7716,9 +7903,9 @@ } }, "node_modules/rollup": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", - "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { @@ -7732,28 +7919,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.3", - "@rollup/rollup-android-arm64": "4.52.3", - "@rollup/rollup-darwin-arm64": "4.52.3", - "@rollup/rollup-darwin-x64": "4.52.3", - "@rollup/rollup-freebsd-arm64": "4.52.3", - "@rollup/rollup-freebsd-x64": "4.52.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", - "@rollup/rollup-linux-arm-musleabihf": "4.52.3", - "@rollup/rollup-linux-arm64-gnu": "4.52.3", - "@rollup/rollup-linux-arm64-musl": "4.52.3", - "@rollup/rollup-linux-loong64-gnu": "4.52.3", - "@rollup/rollup-linux-ppc64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-musl": "4.52.3", - "@rollup/rollup-linux-s390x-gnu": "4.52.3", - "@rollup/rollup-linux-x64-gnu": "4.52.3", - "@rollup/rollup-linux-x64-musl": "4.52.3", - "@rollup/rollup-openharmony-arm64": "4.52.3", - "@rollup/rollup-win32-arm64-msvc": "4.52.3", - "@rollup/rollup-win32-ia32-msvc": "4.52.3", - "@rollup/rollup-win32-x64-gnu": "4.52.3", - "@rollup/rollup-win32-x64-msvc": "4.52.3", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, @@ -8296,10 +8486,11 @@ } }, "node_modules/stylelint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8507,33 +8698,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8732,9 +8902,9 @@ } }, "node_modules/vite": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", - "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", "dev": true, "license": "MIT", "dependencies": { @@ -9178,21 +9348,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index e1ec547e1a..ec1c2ca491 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,9 @@ "@linthtml/linthtml": "^0.9.6", "@mate-academy/bemlint": "latest", "@mate-academy/linthtml-config": "latest", - "@mate-academy/scripts": "^2.1.2", + "@mate-academy/scripts": "^2.1.3", "@mate-academy/stylelint-config": "latest", + "cross-env": "^10.1.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "prettier": "^3.3.2", diff --git a/src/images/cross.svg b/src/images/cross.svg index 08f1f27cea..100fda0661 100644 --- a/src/images/cross.svg +++ b/src/images/cross.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/images/crown.svg b/src/images/crown.svg deleted file mode 100644 index 962d90e9ca..0000000000 --- a/src/images/crown.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/images/favicon.png b/src/images/favicon.png index 0e04c361e1..4d3948f9ec 100644 Binary files a/src/images/favicon.png and b/src/images/favicon.png differ diff --git a/src/images/logo.png b/src/images/logo.png deleted file mode 100644 index 9b6a4dd7d4..0000000000 Binary files a/src/images/logo.png and /dev/null differ diff --git a/src/images/logo.svg b/src/images/logo.svg new file mode 100644 index 0000000000..4fa6cd0bc6 --- /dev/null +++ b/src/images/logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/images/logo_black.svg b/src/images/logo_black.svg new file mode 100644 index 0000000000..9cc9b3784a --- /dev/null +++ b/src/images/logo_black.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/images/menu.svg b/src/images/menu.svg index 5d6b5a0b38..b5ea4b25d0 100644 --- a/src/images/menu.svg +++ b/src/images/menu.svg @@ -1,3 +1,3 @@ - - + + diff --git a/src/images/menu_hover.svg b/src/images/menu_hover.svg deleted file mode 100644 index 39263b75bc..0000000000 --- a/src/images/menu_hover.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/images/phone.svg b/src/images/phone.svg index 0c2c52cb54..49d2a5283a 100644 --- a/src/images/phone.svg +++ b/src/images/phone.svg @@ -1,3 +1,10 @@ - + + + + + + + + diff --git a/src/images/photos/1.jpg b/src/images/photos/1.jpg index f796f55605..441f0e3f2d 100644 Binary files a/src/images/photos/1.jpg and b/src/images/photos/1.jpg differ diff --git a/src/images/photos/2.jpg b/src/images/photos/2.jpg index d9053b6a20..c41544c26e 100644 Binary files a/src/images/photos/2.jpg and b/src/images/photos/2.jpg differ diff --git a/src/images/photos/3.jpg b/src/images/photos/3.jpg index 5e40be94d2..81ff964e09 100644 Binary files a/src/images/photos/3.jpg and b/src/images/photos/3.jpg differ diff --git a/src/images/photos/4.jpg b/src/images/photos/4.jpg index de64313343..47bedaba66 100644 Binary files a/src/images/photos/4.jpg and b/src/images/photos/4.jpg differ diff --git a/src/images/photos/5.jpg b/src/images/photos/5.jpg index aad06bff54..05be7f67af 100644 Binary files a/src/images/photos/5.jpg and b/src/images/photos/5.jpg differ diff --git a/src/images/photos/6.jpg b/src/images/photos/6.jpg index 104ff18faa..d796318855 100644 Binary files a/src/images/photos/6.jpg and b/src/images/photos/6.jpg differ diff --git a/src/images/photos/bike_1.jpg b/src/images/photos/bike_1.jpg new file mode 100644 index 0000000000..f6f51a6a9a Binary files /dev/null and b/src/images/photos/bike_1.jpg differ diff --git a/src/images/photos/bike_2.jpg b/src/images/photos/bike_2.jpg new file mode 100644 index 0000000000..52684043fa Binary files /dev/null and b/src/images/photos/bike_2.jpg differ diff --git a/src/images/photos/bike_3.jpg b/src/images/photos/bike_3.jpg new file mode 100644 index 0000000000..f8542af192 Binary files /dev/null and b/src/images/photos/bike_3.jpg differ diff --git a/src/images/photos/footer.jpg b/src/images/photos/footer.jpg new file mode 100644 index 0000000000..179ad0b134 Binary files /dev/null and b/src/images/photos/footer.jpg differ diff --git a/src/images/photos/header-background.jpg b/src/images/photos/header-background.jpg new file mode 100644 index 0000000000..3109c16e38 Binary files /dev/null and b/src/images/photos/header-background.jpg differ diff --git a/src/styles/blocks/address.scss b/src/styles/blocks/address.scss new file mode 100644 index 0000000000..c131f45da5 --- /dev/null +++ b/src/styles/blocks/address.scss @@ -0,0 +1,27 @@ +.address { + &__label { + font-family: Poppins, sans-serif; + font-style: Regular; + font-weight: 400; + font-size: 14px; + line-height: 140%; + color: rgba(255, 255, 255, 1); + margin-bottom: 8px; + } + + &__content { + font-family: Poppins, sans-serif; + font-style: medium; + font-weight: 500; + font-size: 16px; + line-height: 140%; + margin-bottom: 24px; + color: rgba(255, 255, 255, 1); + text-decoration: none; + transition: color 0.3s; + + &:hover { + color: rgba(126, 126, 131, 1); + } + } +} diff --git a/src/styles/blocks/article.scss b/src/styles/blocks/article.scss new file mode 100644 index 0000000000..5a90e927cf --- /dev/null +++ b/src/styles/blocks/article.scss @@ -0,0 +1,32 @@ +@use '../utils/mixins' as *; + +.article { + &__title { + font-family: Poppins, sans-serif; + font-weight: 700; + font-style: Bold; + font-size: 24px; + line-height: 140%; + letter-spacing: 0; + margin-bottom: 8px; + } + + &__description { + font-family: Poppins, sans-serif; + font-weight: 400; + font-style: Regular; + font-size: 16px; + line-height: 140%; + letter-spacing: 0; + margin-bottom: 40px; + + @include for-ipad { + margin-bottom: 48px; + } + + @include for-desktop { + margin-bottom: 48px; + max-width: 66%; + } + } +} diff --git a/src/styles/blocks/bike.scss b/src/styles/blocks/bike.scss new file mode 100644 index 0000000000..9562f63dc3 --- /dev/null +++ b/src/styles/blocks/bike.scss @@ -0,0 +1,51 @@ +.bike { + &__photo { + width: 280px; + height: 228px; + object-fit: cover; + object-position: top; + display: block; + margin: 0 auto 32px; + + @include for-ipad { + width: 392px; + height: 319px; + } + + @include for-desktop { + width: 324px; + height: 256px; + } + } + + &__name { + font-family: Poppins, sans-serif; + font-style: bold; + font-weight: 700; + font-size: 24px; + line-height: 140%; + color: rgba(255, 255, 255, 1); + margin-bottom: 8px; + } + + &__description { + font-family: Poppins, sans-serif; + font-weight: 400; + font-style: Regular; + font-size: 16px; + line-height: 140%; + letter-spacing: 0; + color: rgba(255, 255, 255, 1); + margin-bottom: 16px; + } + + &__price { + font-family: Poppins, sans-serif; + font-style: bold; + font-weight: 700; + font-size: 24px; + line-height: 140%; + color: rgba(255, 255, 255, 1); + margin-bottom: 40px; + } +} diff --git a/src/styles/blocks/bikes.scss b/src/styles/blocks/bikes.scss new file mode 100644 index 0000000000..436d1dc9ee --- /dev/null +++ b/src/styles/blocks/bikes.scss @@ -0,0 +1,17 @@ +@use '../utils/mixins' as *; + +.bikes { + @include grid; + + &__bike { + grid-column: span 2; + + @include for-ipad { + grid-column: 2 / 6; + } + + @include for-desktop { + grid-column: span 4; + } + } +} diff --git a/src/styles/blocks/burger.scss b/src/styles/blocks/burger.scss new file mode 100644 index 0000000000..efe7abc64a --- /dev/null +++ b/src/styles/blocks/burger.scss @@ -0,0 +1,35 @@ +@use '../utils/mixins' as *; + +.burger { + display: flex; + &__label { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 700; + font-size: 10px; + line-height: 133%; + letter-spacing: 2px; + text-transform: uppercase; + color: #fff; + position: absolute; + } + + &__icon { + width: 18px; + height: 12px; + + @include for-ipad { + width: 24px; + height: 16px; + } + + @include for-desktop { + width: 24px; + height: 16px; + } + } + + &:not(:hover) &__label { + @include visually-hidden; + } +} diff --git a/src/styles/blocks/button.scss b/src/styles/blocks/button.scss new file mode 100644 index 0000000000..7c1a400f2a --- /dev/null +++ b/src/styles/blocks/button.scss @@ -0,0 +1,40 @@ +.button { + background: rgba(255, 255, 255, 1); + border-radius: 40px; + display: block; + text-decoration: none; + text-align: center; + height: 56px; + width: 278px; + font-family: Poppins, sans-serif; + font-style: bold; + font-size: 16px; + line-height: 56px; + font-weight: 700; + color: rgba(29, 29, 29, 1); + margin: 0 auto; + + @include for-ipad { + width: 392px; + } + + @include for-desktop { + width: 324px; + } + + &--primary { + width: 280px; + + @include for-ipad { + width: 288px; + } + + @include for-desktop { + width: 411px; + } + + &:hover { + box-shadow: 1px 4px 16px 0 rgba(232, 232, 240, 0.4); + } + } +} diff --git a/src/styles/blocks/contact.scss b/src/styles/blocks/contact.scss new file mode 100644 index 0000000000..48e91682a0 --- /dev/null +++ b/src/styles/blocks/contact.scss @@ -0,0 +1,29 @@ +@use '../utils/mixins' as *; + +.contact { + @include grid; + + &__address { + grid-column: span 2; + + @include for-ipad { + grid-column: span 3; + } + + @include for-desktop { + grid-column: 8 / 13; + } + } + + &__form { + grid-column: span 2; + + @include for-ipad { + grid-column: span 3; + } + + @include for-desktop { + grid-column: 1 / 6; + } + } +} diff --git a/src/styles/blocks/cross.scss b/src/styles/blocks/cross.scss new file mode 100644 index 0000000000..1dc773cee1 --- /dev/null +++ b/src/styles/blocks/cross.scss @@ -0,0 +1,18 @@ +@use '../utils/mixins' as *; + +.cross { + &__icon { + width: 24px; + height: 24px; + + @include for-ipad { + width: 32px; + height: 32px; + } + + @include for-desktop { + width: 32px; + height: 32px; + } + } +} diff --git a/src/styles/blocks/footer.scss b/src/styles/blocks/footer.scss new file mode 100644 index 0000000000..1ea05656a6 --- /dev/null +++ b/src/styles/blocks/footer.scss @@ -0,0 +1,22 @@ +@use '../utils/mixins' as *; + +.footer { + height: 200px; + background-image: url('../images/photos/footer.jpg'); + background-repeat: no-repeat; + display: flex; + flex-direction: column; + justify-content: flex-end; + background-size: cover; + align-items: center; + box-sizing: border-box; + background-position: 90% center; + + @include for-ipad { + height: 480px; + } + + @include for-desktop { + height: 555px; + } +} diff --git a/src/styles/blocks/form.scss b/src/styles/blocks/form.scss new file mode 100644 index 0000000000..6f47377a99 --- /dev/null +++ b/src/styles/blocks/form.scss @@ -0,0 +1,53 @@ +@use '../utils/mixins' as *; + +.form { + display: flex; + flex-direction: column; + gap: 20px; + + &__input { + background: #f7f8ff; + border-radius: 48px; + border: 0; + width: 100%; + box-sizing: border-box; + height: 48px; + line-height: 48px; + padding-left: 17px; + + &::placeholder { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 500; + font-size: 14px; + line-height: 27px; + color: #8f99a8; + } + } + + &__textarea { + background: #f7f8ff; + border-radius: 16px; + border: 0; + width: 100%; + box-sizing: border-box; + line-height: 48px; + padding-top: 14px; + padding-left: 17px; + + &::placeholder { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 500; + font-size: 14px; + line-height: 27px; + color: #8f99a8; + } + } + + &__label { + &:not(:focus, :active) { + @include visually-hidden; + } + } +} diff --git a/src/styles/blocks/header.scss b/src/styles/blocks/header.scss new file mode 100644 index 0000000000..194c9aa0e4 --- /dev/null +++ b/src/styles/blocks/header.scss @@ -0,0 +1,65 @@ +@use '../utils/mixins' as *; + +.header { + background-color: black; + background-image: url('../images/photos/header-background.jpg'); + background-repeat: no-repeat; + background-size: cover; + background-position: calc(100% + 50px) center; + min-height: 100vh; + padding: 0 20px 88px; + box-sizing: border-box; + grid-template-rows: 1fr 1fr; + + @include for-ipad { + background-position: center; + } + + @include for-desktop { + background-position: center; + } + + @include grid; + + &__navigation { + align-self: start; + grid-column: 1 / 3; + grid-row: 1 / 2; + + > div { + display: flex; + align-items: center; + gap: 24px; + + @include for-ipad { + gap: 36px; + } + + @include for-desktop { + gap: 32px; + } + } + + @include for-ipad { + grid-column: 1 / 7; + } + + @include for-desktop { + grid-column: 1 / 13; + } + } + + &__title { + align-self: end; + grid-column: 1 / 3; + grid-row: 2 / 3; + + @include for-ipad { + grid-column: 1 / 7; + } + + @include for-desktop { + grid-column: 1 / 13; + } + } +} diff --git a/src/styles/blocks/links.scss b/src/styles/blocks/links.scss new file mode 100644 index 0000000000..55bbb0a5cd --- /dev/null +++ b/src/styles/blocks/links.scss @@ -0,0 +1,26 @@ +.links { + padding-top: 50px; + + &__item { + margin-bottom: 23px; + } + + &__link { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 700; + font-size: 22px; + line-height: 22px; + letter-spacing: 2px; + text-transform: uppercase; + color: rgba(29, 29, 29, 1); + text-decoration: none; + border-bottom: 1px solid transparent; + padding-bottom: 8px; + display: inline-block; + + &:hover { + border-bottom: 1px solid rgba(29, 29, 29, 1); + } + } +} diff --git a/src/styles/blocks/logo.scss b/src/styles/blocks/logo.scss new file mode 100644 index 0000000000..bdb87d1a1b --- /dev/null +++ b/src/styles/blocks/logo.scss @@ -0,0 +1,18 @@ +@use '../utils/mixins' as *; + +.logo { + &__image { + height: 38px; + width: auto; + + @include for-ipad { + height: 56px; + width: auto; + } + + @include for-desktop { + height: 56px; + width: auto; + } + } +} diff --git a/src/styles/blocks/main.scss b/src/styles/blocks/main.scss new file mode 100644 index 0000000000..4b1d270c5f --- /dev/null +++ b/src/styles/blocks/main.scss @@ -0,0 +1,72 @@ +@use '../utils/mixins' as *; + +.main { + padding: 60px 20px; + font-family: Poppins, sans-serif; + font-weight: 500; + font-style: medium; + font-size: 23px; + line-height: 140%; + letter-spacing: 0; + color: #fff; + background: rgba(29, 29, 29, 1); + + @include for-ipad { + padding: 120px 70px; + } + + @include for-desktop { + padding: 120px; + } + + @include grid; + + &__title { + margin-bottom: 32px; + grid-column: 1 / 3; + + @include for-ipad { + grid-column: 1 / 4; + } + + @include for-desktop { + grid-column: 1 / 5; + } + } + + &__content { + grid-column: 1 / 3; + + @include for-ipad { + grid-column: 4 / 7; + } + + @include for-desktop { + grid-column: 6 / 12; + } + } + + &__compare { + grid-column: 1 / 3; + + @include for-ipad { + grid-column: 2 / 6; + } + + @include for-desktop { + grid-column: 1 / 13; + } + } + + &__section { + grid-column: 1 / 3; + + @include for-ipad { + grid-column: 1 / 7; + } + + @include for-desktop { + grid-column: 1 / 13; + } + } +} diff --git a/src/styles/blocks/menu.scss b/src/styles/blocks/menu.scss new file mode 100644 index 0000000000..83a21024ef --- /dev/null +++ b/src/styles/blocks/menu.scss @@ -0,0 +1,92 @@ +@use '../utils/mixins' as *; + +.menu { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + transform: translateX(-100%); + transition: transform 0.4s ease-in-out; + background: rgba(194, 194, 194, 1); + padding: 0 20px 20px; + min-height: 100vh; + + @include grid; + + align-content: start; + + &:target { + transform: translateX(0); + } + + &__navigation { + grid-column: span 2; + + @include for-ipad { + grid-column: span 6; + } + + @include for-desktop { + grid-column: span 12; + } + } + + &__links { + margin-bottom: 40px; + grid-column: span 2; + + @include for-ipad { + grid-column: span 6; + } + + @include for-desktop { + grid-column: span 12; + } + } + + &__paragraph { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 700; + font-size: 12px; + line-height: 16px; + color: rgba(29, 29, 29, 1); + letter-spacing: 2px; + text-transform: uppercase; + margin-bottom: 16px; + grid-column: span 2; + + @include for-ipad { + grid-column: span 6; + } + + @include for-desktop { + grid-column: span 12; + } + } + + &__link { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 700; + font-size: 12px; + line-height: 16px; + letter-spacing: 2px; + text-transform: uppercase; + text-decoration: none; + padding-bottom: 8px; + border-bottom: 1px solid rgba(29, 29, 29, 1); + color: rgba(29, 29, 29, 1); + + &:hover { + border-bottom: 1px solid transparent; + } + } + + overflow-y: auto; +} + +body:has(.menu:target) { + overflow: hidden; +} diff --git a/src/styles/blocks/navigation.scss b/src/styles/blocks/navigation.scss new file mode 100644 index 0000000000..365b597b0d --- /dev/null +++ b/src/styles/blocks/navigation.scss @@ -0,0 +1,12 @@ +.navigation { + display: flex; + justify-content: space-between; + padding-top: 25px; + align-items: center; + + &__item { + &--hidden { + opacity: 0; + } + } +} diff --git a/src/styles/blocks/phone.scss b/src/styles/blocks/phone.scss new file mode 100644 index 0000000000..3357930f11 --- /dev/null +++ b/src/styles/blocks/phone.scss @@ -0,0 +1,36 @@ +@use '../utils/mixins' as *; + +.phone { + display: flex; + &__label { + font-family: Poppins, sans-serif; + font-style: normal; + font-weight: 700; + font-size: 10px; + line-height: 133%; + letter-spacing: 2px; + text-transform: uppercase; + color: #fff; + position: absolute; + transform: translateX(calc(-100% - 20px)) translateY(3px); + } + + &__icon { + width: 18px; + height: 18px; + + @include for-ipad { + width: 24px; + height: 24px; + } + + @include for-desktop { + width: 24px; + height: 24px; + } + } + + &:not(:hover) &__label { + @include visually-hidden; + } +} diff --git a/src/styles/blocks/pictures.scss b/src/styles/blocks/pictures.scss new file mode 100644 index 0000000000..3fa594fa75 --- /dev/null +++ b/src/styles/blocks/pictures.scss @@ -0,0 +1,51 @@ +@use '../utils/mixins' as *; + +.pictures { + grid-template-columns: 1fr 1fr; + margin-bottom: 16px; + + @include grid; + + &__item { + width: 100%; + position: relative; + padding-top: 100%; + + @include for-ipad { + padding-top: 187px; + + &--big { + grid-column: span 4; + } + + &--small { + grid-column: span 2; + } + } + + @include for-desktop { + padding-top: 320px; + + &--big { + grid-column: span 8; + } + + &--small { + grid-column: span 4; + } + } + } + + &__image { + top: 0; + width: 100%; + height: 100%; + position: absolute; + object-fit: cover; + transition: transform 0.3s ease; + } + + &__item:hover &__image { + transform: scale(1.05); + } +} diff --git a/src/styles/blocks/section.scss b/src/styles/blocks/section.scss new file mode 100644 index 0000000000..9468681c43 --- /dev/null +++ b/src/styles/blocks/section.scss @@ -0,0 +1,7 @@ +.section { + padding-top: 64px; + + &__title { + margin-bottom: 48px; + } +} diff --git a/src/styles/blocks/title.scss b/src/styles/blocks/title.scss new file mode 100644 index 0000000000..8ecdf4dbe3 --- /dev/null +++ b/src/styles/blocks/title.scss @@ -0,0 +1,59 @@ +@use '../utils/mixins' as *; + +.title { + font-family: Poppins, sans-serif; + font-weight: 700; + font-style: Bold; + font-size: 36px; + line-height: 100%; + letter-spacing: -1.5px; + text-align: center; + vertical-align: middle; + + color: white; + + @include for-ipad { + font-size: 64px; + } + + @include for-desktop { + font-size: 80px; + } + + &--secondary { + font-family: Poppins, sans-serif; + font-weight: 500; + font-style: Medium; + font-size: 32px; + line-height: 100%; + letter-spacing: -1.5px; + text-align: left; + color: fff; + + @include for-ipad { + font-size: 48px; + } + + @include for-desktop { + font-size: 64px; + } + } + + &--section { + color: rgba(255, 255, 255, 1); + font-weight: 500; + font-style: medium; + font-size: 32px; + line-height: 100%; + text-align: center; + letter-spacing: -1.5px; + + @include for-ipad { + font-size: 48px; + } + + @include for-desktop { + font-size: 64px; + } + } +} diff --git a/src/styles/main.scss b/src/styles/main.scss index fb9195d128..6cd4bcba86 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -1,6 +1,27 @@ @import 'utils'; @import 'fonts'; @import 'typography'; +@import 'utils/reset'; +@import 'blocks/title'; +@import 'blocks/header'; +@import 'blocks/main'; +@import 'blocks/article'; +@import 'blocks/pictures'; +@import 'blocks/button'; +@import 'blocks/bike'; +@import 'blocks/address'; +@import 'blocks/form'; +@import 'blocks/footer'; +@import 'blocks/navigation'; +@import 'blocks/menu'; +@import 'blocks/links'; +@import 'blocks/section'; +@import 'blocks/bikes'; +@import 'blocks/contact'; +@import 'blocks/burger'; +@import 'blocks/phone'; +@import 'blocks/logo'; +@import 'blocks/cross'; body { background: $c-gray; diff --git a/src/styles/utils/_mixins.scss b/src/styles/utils/_mixins.scss index 80c79780dc..4ba0a84f26 100644 --- a/src/styles/utils/_mixins.scss +++ b/src/styles/utils/_mixins.scss @@ -4,3 +4,42 @@ #{$_property}: $_toValue; } } + +@mixin for-desktop { + @media (min-width: 1260px) { + @content; + } +} + +@mixin for-ipad { + @media (min-width: 744px) { + @content; + } +} + +@mixin grid { + display: grid; + justify-content: center; + grid-template-columns: repeat(2, 130px); + gap: 20px; + + @include for-ipad { + grid-template-columns: repeat(6, 80px); + gap: 24px; + } + + @include for-desktop { + grid-template-columns: repeat(12, 63px); + gap: 24px; + } +} + +@mixin visually-hidden() { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} diff --git a/src/styles/utils/_reset.scss b/src/styles/utils/_reset.scss new file mode 100644 index 0000000000..8e7d301bf7 --- /dev/null +++ b/src/styles/utils/_reset.scss @@ -0,0 +1,135 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* HTML5 display-role reset for older browsers */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} + +body { + line-height: 1; +} + +ol, +ul { + list-style: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote::before, +blockquote::after, +q::before, +q::after { + content: ''; + content: none; +} + +table { + border-collapse: collapse; + border-spacing: 0; +}