diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..5c4db71 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,2729 @@ +/* Nunito Sans is connected in index.html via Google Fonts. */ +/* 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-size: 100%; + font: inherit; + 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; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +body { + min-width: 320px; + margin: 0; + font-family: "Nunito Sans", "Segoe UI", Arial, sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 1.4; + color: #111111; + background: #ffffff; + text-rendering: geometricPrecision; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + color: inherit; + text-decoration: none; +} + +button, +a { + -webkit-tap-highlight-color: transparent; +} + +img, +svg { + display: block; + max-width: 100%; +} + +.container { + width: min(1200px, 100% - 32px); + margin-inline: auto; +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 46px; + padding: 0 26px; + border: 1px solid transparent; + border-radius: 999px; + font-size: 14px; + font-weight: 600; + line-height: 1; + white-space: nowrap; + transition: transform 0.2s ease, border-color 0.2s ease, background-color 0.2s ease, color 0.2s ease; +} +@media (hover: hover) and (pointer: fine) { + .btn:hover { + transform: translateY(-2px); + } +} +.btn--dark { + min-width: 172px; + gap: 12px; + color: #ffffff; + background: #111111; + box-shadow: 0 18px 38px rgba(17, 17, 17, 0.12); +} +.btn--light { + min-width: 150px; + color: #202023; + background: rgba(255, 255, 255, 0.78); + border-color: rgba(17, 17, 17, 0.14); +} + +.site-header { + position: fixed; + top: 14px; + left: 50%; + z-index: 20; + width: min(505px, 100% - 32px); + transform: translateX(-50%); +} +.site-header__inner { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 50px; + padding: 0 20px; + border: 1px solid rgba(17, 17, 17, 0.06); + border-radius: 999px; + background: rgba(248, 248, 248, 0.86); + backdrop-filter: blur(16px); +} +.site-header__logo { + flex: 0 0 auto; +} +.site-header__logo img { + width: 100px; + height: auto; +} +.site-header__nav { + display: flex; + align-items: center; + gap: 22px; + color: #6f6f73; + font-size: 12px; + font-weight: 400; + line-height: 1; +} +.site-header__nav a { + transition: color 0.2s ease; +} +@media (hover: hover) and (pointer: fine) { + .site-header__nav a:hover { + color: #111111; + } +} + +@media (max-width: 520px) { + .site-header { + top: 10px; + width: calc(100% - 20px); + } + .site-header__inner { + min-height: 46px; + padding: 0 16px; + } + .site-header__logo img { + width: 92px; + } + .site-header__nav { + gap: 12px; + font-size: 11px; + } +} +.page--landing { + min-height: 100vh; + overflow: hidden; + background: #fff; +} + +.hero { + position: relative; + height: 100vh; + max-height: 900px; + overflow: hidden; + border-bottom: 1px solid rgba(17, 17, 17, 0.05); +} +.hero::after { + content: ""; + position: absolute; + right: -155px; + bottom: 36px; + width: 560px; + height: 260px; + border-radius: 50%; + background: rgba(17, 17, 17, 0.05); + filter: blur(56px); + pointer-events: none; +} +.hero::before { + content: ""; + position: absolute; + left: -155px; + top: -156px; + width: 560px; + height: 260px; + border-radius: 50%; + background: rgba(199, 255, 79, 0.1); + filter: blur(56px); + pointer-events: none; +} +.hero__container { + position: relative; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} +.hero__content { + position: relative; + z-index: 2; + width: min(850px, 100%); + margin-inline: auto; + text-align: center; +} +.hero__badge { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + min-height: 34px; + padding: 0 20px; + border: 1px solid rgba(17, 17, 17, 0.13); + border-radius: 999px; + color: #111111; + background: rgba(255, 255, 255, 0.82); + font-size: 14px; + font-weight: 500; + line-height: 1; +} +.hero__badge span { + position: relative; + width: 10px; + height: 10px; + flex: 0 0 auto; + color: #333333; +} +.hero__title { + margin-top: 36px; + color: #333333; + font-size: 82px; + font-weight: 700; + line-height: 0.95; + letter-spacing: -0.058em; +} +.hero__title span { + color: #c9c9cc; +} +.hero__text { + margin: 36px auto 0; + color: #888888; + font-size: 16px; + font-weight: 400; + line-height: 1.24; + letter-spacing: 0.002em; +} +.hero__actions { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + margin-top: 36px; +} +.hero__actions .btn { + font-size: 16px; +} +.hero__tags { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 15px 34px; + margin-top: 36px; + color: #888888; + font-size: 14px; + font-weight: 600; + line-height: 1.2; +} +.hero__tags li { + position: relative; + padding-left: 15px; +} +.hero__tags li::before { + content: ""; + position: absolute; + top: 50%; + left: 0; + width: 6px; + height: 6px; + border-radius: 50%; + background: #C7FF4F; + transform: translateY(-50%); +} + +.hero-card { + position: absolute; + z-index: 3; + border: 1px solid rgba(15, 15, 16, 0.12); + border-radius: 11px; + backdrop-filter: blur(12px); +} +.hero-card--conversion { + bottom: calc(50% - 190px); + left: calc(50% - 462px); + display: flex; + align-items: center; + gap: 14px; + width: 146px; + min-height: 84px; + padding: 17px 18px; + background: rgba(255, 255, 255, 0.84); + box-shadow: 0 17px 26px rgba(17, 17, 17, 0.18); +} +.hero-card--conversion .hero-card__icon { + display: flex; + align-items: center; + justify-content: center; + width: 38px; + height: 38px; + flex: 0 0 38px; + border-radius: 50%; + background: #C7FF4F; +} +.hero-card--conversion .hero-card__icon img { + width: 20px; + height: 20px; +} +.hero-card--conversion span { + display: block; + margin-bottom: 1px; + color: #888888; + font-size: 14px; + font-weight: 400; + line-height: 1.2; +} +.hero-card--conversion strong { + display: block; + color: #141416; + font-size: 24px; + font-weight: 700; + line-height: 1; + letter-spacing: -0.04em; +} +.hero-card--launch { + left: calc(50% + 380px); + width: fit-content; + min-height: 70px; + padding: 14px 20px; + color: #ffffff; + background: #0b0b0c; + border-color: rgba(255, 255, 255, 0.04); + box-shadow: 0 20px 35px rgba(17, 17, 17, 0.25); +} +.hero-card--launch span, +.hero-card--launch strong { + display: block; +} +.hero-card--launch span { + font-size: 18px; + font-weight: 600; + line-height: 1.05; +} +.hero-card--launch strong { + margin-top: 5px; + color: #C7FF4F; + font-size: 16px; + font-weight: 400; + line-height: 1; +} + +@media (max-width: 1120px) { + .hero { + max-height: 860px; + } + .hero__title { + font-size: clamp(62px, 7.2vw, 78px); + } + .hero__text { + max-width: 620px; + } + .hero-card--conversion { + left: max(24px, 50% - 410px); + bottom: calc(50% - 176px); + } + .hero-card--launch { + left: auto; + right: max(24px, 50% - 500px); + } +} +@media (max-width: 760px) { + .hero { + height: auto; + min-height: 100svh; + max-height: none; + padding: 104px 0 56px; + } + .hero::before { + left: -250px; + top: -110px; + width: 440px; + height: 250px; + filter: blur(48px); + } + .hero::after { + right: -250px; + bottom: -24px; + width: 460px; + height: 260px; + filter: blur(50px); + } + .hero__container { + height: auto; + min-height: calc(100svh - 160px); + flex-direction: column; + justify-content: center; + } + .hero__content { + width: min(620px, 100%); + } + .hero__badge { + min-height: 32px; + padding: 0 16px; + font-size: 13px; + } + .hero__title { + margin-top: 26px; + font-size: clamp(46px, 10.2vw, 64px); + line-height: 0.98; + letter-spacing: -0.055em; + text-wrap: balance; + } + .hero__text { + max-width: 520px; + margin-top: 24px; + font-size: 15px; + line-height: 1.36; + } + .hero__actions { + flex-wrap: wrap; + gap: 12px; + margin-top: 28px; + } + .hero__actions .btn { + min-width: 160px; + min-height: 46px; + font-size: 15px; + } + .hero__tags { + gap: 11px 22px; + margin-top: 28px; + font-size: 13px; + } + .hero-card { + position: relative; + inset: auto; + } + .hero-card--conversion { + left: auto; + bottom: auto; + width: 146px; + min-height: 76px; + margin-top: 34px; + padding: 14px 16px; + transform: translateX(-72px); + box-shadow: 0 14px 24px rgba(17, 17, 17, 0.14); + } + .hero-card--conversion .hero-card__icon { + width: 34px; + height: 34px; + flex-basis: 34px; + } + .hero-card--conversion .hero-card__icon img { + width: 18px; + height: 18px; + } + .hero-card--conversion span { + font-size: 13px; + } + .hero-card--conversion strong { + font-size: 22px; + } + .hero-card--launch { + left: auto; + right: auto; + min-height: 64px; + margin-top: -18px; + padding: 12px 18px; + transform: translateX(76px); + box-shadow: 0 16px 28px rgba(17, 17, 17, 0.2); + } + .hero-card--launch span { + font-size: 16px; + } + .hero-card--launch strong { + font-size: 15px; + } +} +@media (max-width: 520px) { + .hero { + min-height: 100svh; + padding: 92px 0 44px; + } + .hero__container { + width: calc(100% - 24px); + min-height: calc(100svh - 136px); + } + .hero__badge { + min-height: 30px; + padding: 0 14px; + font-size: 12px; + } + .hero__title { + margin-top: 22px; + font-size: clamp(37px, 11.5vw, 50px); + line-height: 1; + letter-spacing: -0.05em; + } + .hero__text { + margin-top: 20px; + font-size: 14px; + line-height: 1.42; + } + .hero__actions { + width: min(100%, 330px); + margin: 26px auto 0; + flex-direction: column; + gap: 10px; + } + .hero__actions .btn { + width: 100%; + min-width: 0; + min-height: 48px; + } + .hero__tags { + width: min(100%, 330px); + margin: 24px auto 0; + justify-content: flex-start; + gap: 10px 18px; + font-size: 12px; + } + .hero__tags li { + padding-left: 13px; + } + .hero-card--conversion { + margin-top: 28px; + transform: translateX(-48px); + } + .hero-card--launch { + transform: translateX(48px); + } +} +@media (max-width: 420px) { + .hero { + padding: 86px 0 38px; + } + .hero__container { + width: calc(100% - 22px); + min-height: calc(100svh - 124px); + } + .hero__title { + font-size: clamp(34px, 9.6vw, 38px); + letter-spacing: -0.044em; + } + .hero__tags { + justify-content: center; + } + .hero-card--conversion, .hero-card--launch { + transform: none; + } + .hero-card--conversion { + margin-top: 24px; + } + .hero-card--launch { + margin-top: 10px; + } +} +.results { + position: relative; + min-height: 100vh; + overflow: hidden; +} +.results__container { + position: relative; + height: 100vh; + min-height: 680px; + display: flex; + align-items: center; + justify-content: center; +} +.results__content { + position: relative; + z-index: 2; + width: min(1120px, 100%); + text-align: center; +} +.results__label { + margin-bottom: 14px; + color: #6f6f73; + font-size: 16px; + font-weight: 700; + line-height: 1.1; +} +.results__slider { + width: min(1120px, 100%); + margin-inline: auto; + position: relative; + height: 190px; + overflow: visible; +} +.results__track { + position: relative; + height: 100%; +} +.results__slide { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + min-height: 100%; + visibility: hidden; + pointer-events: none; + transition: opacity 0.35s ease; +} +.results__slide.is-active { + opacity: 1; + visibility: visible; + pointer-events: auto; +} +.results__title { + margin: 0; + color: #333333; + font-size: clamp(40px, 4.6vw, 72px); + font-weight: 700; + line-height: 1.03; + letter-spacing: -0.02em; + transform: translateY(26px); + transition: opacity 0.45s ease, transform 0.55s ease; +} +.results__slide.is-active .results__title { + opacity: 1; + transform: translateY(0); +} +.results__dots { + margin-top: 28px; + display: flex; + align-items: center; + justify-content: center; + gap: 10px; +} +.results__dots span { + width: 8px; + height: 8px; + border-radius: 50%; + background: rgba(17, 17, 17, 0.22); + transition: width 0.3s ease, background-color 0.3s ease; +} +.results__dots span.is-active { + width: 24px; + border-radius: 999px; + background: #333333; +} +.results__icons { + position: absolute; + inset: 0; + pointer-events: none; + height: 200%; + transform: translateY(-23%); +} +.results__icon { + position: absolute; + width: 45px; + height: 45px; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + background: var(--icon-bg, #ffffff); + box-shadow: 0 10px 20px rgba(17, 17, 17, 0.07); + opacity: 1; + transform: scale(1) translateY(16px); + transition: transform 0.55s cubic-bezier(0.21, 1, 0.31, 1), opacity 0.45s ease; +} +.results__icon.is-visible { + opacity: 1; + transform: scale(1) translateY(0); +} +.results__icon img { + width: 32px; + height: 32px; + object-fit: contain; +} +.results__icon--yandex { + top: 16px; + left: 92px; +} +.results__icon--wordpress { + top: 84px; + left: 238px; +} +.results__icon--shopify { + top: 36px; + left: 540px; +} +.results__icon--aistudio { + top: 22px; + right: 240px; +} +.results__icon--bitrix { + top: 78px; + right: 86px; +} +.results__icon--cloudflare { + top: 154px; + right: 168px; +} +.results__icon--google { + right: 94px; + bottom: 128px; +} +.results__icon--openai { + right: 298px; + bottom: 34px; +} +.results__icon--tilda { + bottom: 58px; + left: 156px; +} +.results__icon--n8n { + bottom: 96px; + left: 388px; +} +.results__icon--vk { + left: 0; + top: 196px; +} +.results.is-static .results__slider { + height: auto; +} +.results.is-static .results__track { + display: grid; + gap: 12px; + height: auto; +} +.results.is-static .results__slide { + position: relative; + inset: auto; + min-height: 0; + opacity: 1; + visibility: visible; + pointer-events: auto; +} +.results.is-static .results__title { + opacity: 1; + transform: none; +} +.results.is-static .results__icon { + opacity: 1; + transform: none; +} +.results.is-animation-ready .results__label { + opacity: 0; + transform: translateY(14px); + will-change: opacity, transform; +} +.results.is-animation-ready .results__title { + opacity: 0; + transform: translateY(46px); + will-change: opacity, transform; +} +.results.is-animation-ready .results__icon { + opacity: 0; + transform: scale(0.86) translateY(36px) rotate(-4deg); + will-change: opacity, transform; +} +.results.is-animation-ready.is-in-view .results__label { + animation: resultsFadeUp 0.65s cubic-bezier(0.21, 1, 0.31, 1) 0.1s forwards; +} +.results.is-animation-ready.is-in-view .results__title { + animation: resultsTitleIn 0.8s cubic-bezier(0.21, 1, 0.31, 1) 0.22s forwards; +} +.results.is-animation-ready.is-in-view .results__icon { + animation: resultsIconIn 0.72s cubic-bezier(0.21, 1, 0.31, 1) var(--results-icon-delay, 0s) forwards, resultsIconFloat 5.8s ease-in-out calc(var(--results-icon-delay, 0s) + 0.78s) infinite; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(1) { + --results-icon-delay: 0.04s; + --results-float-offset: -8px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(2) { + --results-icon-delay: 0.1s; + --results-float-offset: 7px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(3) { + --results-icon-delay: 0.16s; + --results-float-offset: -6px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(4) { + --results-icon-delay: 0.22s; + --results-float-offset: 8px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(5) { + --results-icon-delay: 0.28s; + --results-float-offset: -7px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(6) { + --results-icon-delay: 0.34s; + --results-float-offset: 6px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(7) { + --results-icon-delay: 0.4s; + --results-float-offset: -9px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(8) { + --results-icon-delay: 0.46s; + --results-float-offset: 7px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(9) { + --results-icon-delay: 0.52s; + --results-float-offset: -6px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(10) { + --results-icon-delay: 0.58s; + --results-float-offset: 8px; +} +.results.is-animation-ready.is-in-view .results__icon:nth-child(11) { + --results-icon-delay: 0.64s; + --results-float-offset: -7px; +} + +@keyframes resultsFadeUp { + from { + opacity: 0; + transform: translateY(14px); + } + to { + opacity: 1; + transform: translateY(0); + } +} +@keyframes resultsTitleIn { + from { + opacity: 0; + transform: translateY(46px); + } + to { + opacity: 1; + transform: translateY(26px); + } +} +@keyframes resultsIconIn { + from { + opacity: 0; + transform: scale(0.86) translateY(36px) rotate(-4deg); + } + to { + opacity: 1; + transform: scale(1) translateY(16px) rotate(0deg); + } +} +@keyframes resultsIconFloat { + 0%, 100% { + opacity: 1; + transform: scale(1) translateY(16px) rotate(0deg); + } + 50% { + opacity: 1; + transform: scale(1) translateY(calc(16px + var(--results-float-offset, -8px))) rotate(1.2deg); + } +} +@keyframes resultsIconInMobile { + from { + opacity: 0; + transform: scale(0.9) translateY(18px) rotate(-3deg); + } + to { + opacity: 1; + transform: none; + } +} +@media (max-width: 1120px) { + .results__container { + min-height: 620px; + } + .results__title { + font-size: clamp(34px, 5.1vw, 56px); + } + .results__icon--yandex { + left: 34px; + } + .results__icon--wordpress { + left: 150px; + } + .results__icon--shopify { + left: 410px; + } + .results__icon--aistudio { + right: 182px; + } + .results__icon--bitrix { + right: 40px; + } + .results__icon--cloudflare { + right: 124px; + } + .results__icon--google { + right: 52px; + } + .results__icon--openai { + right: 222px; + } + .results__icon--tilda { + left: 90px; + } + .results__icon--n8n { + left: 292px; + } +} +@media (max-width: 760px) { + .results { + min-height: unset; + padding: 74px 0 92px; + } + .results__container { + height: auto; + min-height: unset; + display: block; + } + .results__content { + max-width: 620px; + margin-inline: auto; + } + .results__label { + margin-bottom: 12px; + font-size: clamp(20px, 4.2vw, 28px); + } + .results__slide { + min-height: 132px; + } + .results__title { + font-size: clamp(30px, 8.7vw, 44px); + line-height: 1.05; + } + .results__dots { + margin-top: 16px; + } + .results__icons { + position: static; + margin: 0 auto 36px; + width: min(420px, 100%); + display: grid; + grid-template-columns: repeat(4, 45px); + justify-content: center; + gap: 14px; + } + .results__icon { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + opacity: 1; + transform: none; + } + .results.is-animation-ready.is-in-view .results__icon { + animation: resultsIconInMobile 0.62s cubic-bezier(0.21, 1, 0.31, 1) var(--results-icon-delay, 0s) forwards; + } +} +@media (max-width: 420px) { + .results { + padding: 62px 0 78px; + } + .results__icons { + width: min(320px, 100%); + grid-template-columns: repeat(3, 45px); + gap: 12px; + margin-bottom: 28px; + } + .results__slide { + min-height: 120px; + } + .results__title { + font-size: clamp(28px, 9vw, 38px); + letter-spacing: -0.01em; + } +} +@media (prefers-reduced-motion: reduce) { + .results.is-animation-ready .results__label { + opacity: 1; + transform: none; + animation: none !important; + will-change: auto; + } + .results.is-animation-ready .results__title { + opacity: 1; + transform: translateY(26px); + animation: none !important; + will-change: auto; + } + .results.is-animation-ready .results__icon { + opacity: 1; + transform: scale(1) translateY(16px); + animation: none !important; + will-change: auto; + } +} +@media (max-width: 760px) and (prefers-reduced-motion: reduce) { + .results.is-animation-ready .results__icon { + transform: none; + } +} +.expertise { + position: relative; + padding: 44px 0 40px; + overflow: hidden; + background: #ffffff; +} +.expertise__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; +} +.expertise__header { + display: grid; + grid-template-columns: minmax(0, 1fr) 448px; + gap: 80px; + align-items: start; +} +.expertise__label { + margin: 0 0 2px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.expertise__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; +} +.expertise__title span { + color: #C2C2C2; +} +.expertise__text { + max-width: 448px; + margin: 22px 0 0; + color: #111111; + font-size: 18px; + font-weight: 400; + line-height: 1.55; + letter-spacing: 0.005em; +} +.expertise__tabs { + width: fit-content; + min-height: 39px; + display: flex; + align-items: center; + gap: 2px; + margin: 36px auto 0; + padding: 2px; + border-radius: 999px; + background: #f2f2f2; + box-shadow: inset 0 0 0 1px rgba(17, 17, 17, 0.02); +} +.expertise__tab { + min-height: 35px; + padding: 0 17px; + border: 0; + border-radius: 999px; + color: #a6a6a8; + background: transparent; + font: inherit; + font-size: 13px; + font-weight: 600; + line-height: 1; + white-space: nowrap; + cursor: pointer; + transition: color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease; +} +.expertise__tab.is-active { + color: #111111; + background: #ffffff; + box-shadow: 0 2px 7px rgba(17, 17, 17, 0.05); +} +@media (hover: hover) and (pointer: fine) { + .expertise__tab:hover { + color: #111111; + } +} +.expertise__cases { + position: relative; + width: 100vw; + margin-top: 50px; + margin-inline: calc(50% - 50vw); + overflow: visible; +} +.expertise__track { + display: flex; + align-items: stretch; +} + +.expertise-card { + width: 300px; + min-height: 430px; + height: auto; + flex: 0 0 300px; + overflow: hidden; + border: 1px solid rgba(17, 17, 17, 0.16); + border-radius: 12px; + background: #ffffff; +} +.expertise-card__media { + height: 279px; + overflow: hidden; + background: #f2f2f2; +} +.expertise-card__media img { + width: 100%; + height: 100%; + object-fit: cover; +} +.expertise-card__body { + padding: 13px 10px 7px; +} +.expertise-card__title { + margin: 0; + color: #111111; + font-size: 24px; + font-weight: 800; + line-height: 1.15; + letter-spacing: -0.03em; + text-align: center; +} +.expertise-card__list { + display: grid; + gap: 7px; + margin: 11px 0 0; + padding: 0 0 0 2px; + color: #6f6f73; + font-size: 14px; + font-weight: 500; + line-height: 1.2; + list-style: none; +} +.expertise-card__list li { + position: relative; + padding-left: 19px; +} +.expertise-card__list li::before { + content: ""; + position: absolute; + top: 0.5em; + left: 0; + width: 6px; + height: 6px; + border-radius: 50%; + background: #C7FF4F; + transform: translateY(-50%); +} +.expertise-card__tags { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: nowrap; + gap: 9px; + margin: 16px 0 0; + padding: 0; + list-style: none; +} +.expertise-card__tags li { + min-height: 27px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 11px; + border: 1px solid rgba(17, 17, 17, 0.16); + border-radius: 999px; + color: #111111; + background: rgba(242, 242, 242, 0.55); + font-size: 12px; + font-weight: 500; + line-height: 1; + white-space: nowrap; +} + +@media (max-width: 1120px) { + .expertise__header { + grid-template-columns: minmax(0, 1fr) 390px; + gap: 48px; + } + .expertise__track { + align-items: stretch; + } +} +@media (max-width: 760px) { + .expertise { + padding: 70px 0 72px; + } + .expertise__container { + width: min(100% - 32px, 620px); + } + .expertise__header { + display: block; + } + .expertise__title { + font-size: clamp(36px, 9vw, 46px); + } + .expertise__text { + max-width: 100%; + margin-top: 20px; + font-size: 16px; + line-height: 1.45; + } + .expertise__tabs { + width: 100%; + justify-content: flex-start; + margin-top: 28px; + overflow-x: auto; + scrollbar-width: none; + } + .expertise__tabs::-webkit-scrollbar { + display: none; + } + .expertise__tab { + padding-inline: 15px; + } + .expertise__cases { + margin-top: 32px; + overflow: visible; + } + .expertise__track { + align-items: stretch; + } + .expertise-card { + width: 286px; + flex-basis: 286px; + } + .expertise-card__media { + height: 266px; + } + .expertise-card__title { + font-size: 23px; + } + .expertise-card__list { + font-size: 13px; + } + .expertise-card__tags { + gap: 6px; + } + .expertise-card__tags li { + padding-inline: 9px; + } +} +@media (max-width: 420px) { + .expertise { + padding: 60px 0 64px; + } + .expertise__container { + width: calc(100% - 24px); + } + .expertise__label { + font-size: 15px; + } + .expertise__tabs { + min-height: 37px; + } + .expertise__tab { + min-height: 33px; + padding-inline: 13px; + font-size: 12px; + } + .expertise__track { + align-items: stretch; + } + .expertise-card { + width: 272px; + min-height: 420px; + flex-basis: 272px; + } + .expertise-card__media { + height: 254px; + } + .expertise-card__body { + padding-inline: 9px; + } + .expertise-card__tags { + flex-wrap: wrap; + } +} +.process { + position: relative; + padding: 44px 0 100px; + background: #ffffff; +} +.process__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; +} +.process__heading { + max-width: 1100px; +} +.process__label { + margin: 0 0 2px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.process__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; +} +.process__title span { + color: #C2C2C2; +} +.process__grid { + width: min(1192px, 100%); + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 24px; + margin: 58px auto 0; +} + +.process-card { + min-height: 190px; + padding: 16px 28px 20px; + border: 1px solid rgba(17, 17, 17, 0.16); + border-radius: 30px; + background: #ffffff; +} +.process-card__number { + display: block; + margin: 0 0 18px; + color: #f4f3f0; + font-size: 60px; + font-weight: 900; + line-height: 0.96; + letter-spacing: -0.055em; +} +.process-card__title { + margin: 0; + color: #111111; + font-size: 20px; + font-weight: 800; + line-height: 1.2; + letter-spacing: -0.02em; +} +.process-card__text { + max-width: 310px; + margin: 12px 0 0; + color: #6f6f73; + font-size: 15px; + font-weight: 400; + line-height: 1.75; + letter-spacing: -0.01em; +} + +@media (max-width: 1120px) { + .process__grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} +@media (max-width: 760px) { + .process { + padding: 70px 0 72px; + } + .process__container { + width: min(100% - 32px, 620px); + } + .process__title { + font-size: clamp(36px, 9vw, 46px); + } + .process__grid { + grid-template-columns: 1fr; + gap: 16px; + margin-top: 32px; + } + .process-card { + min-height: 172px; + padding: 16px 24px 20px; + border-radius: 24px; + } + .process-card__number { + margin-bottom: 16px; + font-size: 54px; + } + .process-card__text { + max-width: 100%; + font-size: 14px; + line-height: 1.6; + } +} +@media (max-width: 420px) { + .process { + padding: 60px 0 64px; + } + .process__container { + width: calc(100% - 24px); + } + .process__label { + font-size: 15px; + } + .process-card { + min-height: 166px; + padding: 15px 20px 19px; + border-radius: 22px; + } + .process-card__number { + font-size: 50px; + } + .process-card__title { + font-size: 19px; + } +} +.technologies { + position: relative; + padding: 44px 0 66px; + overflow: hidden; + background: #ffffff; +} +.technologies__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; +} +.technologies__label { + margin: 0 0 2px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.technologies__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; +} +.technologies__title span { + color: #C2C2C2; +} +.technologies__marquee { + width: 100vw; + display: grid; + gap: 32px; + margin-top: 60px; + margin-inline: calc(50% - 50vw); +} +.technologies__row { + width: 100%; + overflow: hidden; +} +.technologies__track { + width: max-content; + display: flex; + align-items: center; + will-change: transform; +} +.technologies__track--left { + animation: technologies-marquee-left 38s linear infinite; +} +.technologies__track--right { + animation: technologies-marquee-right 42s linear infinite; +} +.technologies__row--top .technologies__track { + margin-left: -82px; +} +.technologies__row--bottom .technologies__track { + margin-left: 10px; +} +.technologies__group { + display: flex; + align-items: center; + gap: 41px; + padding-right: 41px; + flex: 0 0 auto; +} +@media (prefers-reduced-motion: reduce) { + .technologies__track { + animation: none; + } +} + +.technology-item { + display: inline-flex; + align-items: center; + gap: 11px; + flex: 0 0 auto; + color: #111111; + font-size: 22px; + font-weight: 500; + line-height: 1; + letter-spacing: -0.03em; + white-space: nowrap; +} +.technology-item__icon { + width: 44px; + height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + flex: 0 0 44px; + border-radius: 7px; + background: #f2f2f2; + overflow: hidden; +} +.technology-item__icon img { + display: block; + width: 32px; + height: 32px; + object-fit: contain; +} +.technology-item__icon--wordpress { + background: #057da3; +} +.technology-item__icon--n8n { + background: #e83e73; +} +.technology-item__icon--bitrix { + background: #42b9ea; +} +.technology-item__icon--bitrix img { + width: 32px; + height: auto; +} +.technology-item__icon--react { + background: #1f1f1f; +} +.technology-item__icon--nuxt, .technology-item__icon--woo, .technology-item__icon--docker, .technology-item__icon--vue { + background: #f2f2f2; +} +.technology-item__icon--modx { + background: #f4f4f4; +} +.technology-item__icon--php { + background: #535f99; +} +.technology-item__icon--git { + background: #fb5036; +} +.technology-item__icon--mysql { + background: #ed8a00; +} +.technology-item__icon--tilda { + background: #ff5b3a; +} + +@keyframes technologies-marquee-left { + 0% { + transform: translate3d(0, 0, 0); + } + 100% { + transform: translate3d(-50%, 0, 0); + } +} +@keyframes technologies-marquee-right { + 0% { + transform: translate3d(-50%, 0, 0); + } + 100% { + transform: translate3d(0, 0, 0); + } +} +@media (max-width: 760px) { + .technologies { + padding: 70px 0 72px; + } + .technologies__container { + width: min(100% - 32px, 620px); + } + .technologies__title { + font-size: clamp(36px, 9vw, 46px); + } + .technologies__marquee { + gap: 22px; + margin-top: 38px; + } + .technologies__group { + gap: 28px; + padding-right: 28px; + } + .technologies__row--top .technologies__track { + margin-left: -54px; + } + .technologies__row--bottom .technologies__track { + margin-left: 12px; + } + .technology-item { + gap: 9px; + font-size: 18px; + } + .technology-item__icon { + width: 38px; + height: 38px; + flex-basis: 38px; + border-radius: 7px; + } + .technology-item__icon img { + width: 28px; + height: 28px; + } +} +@media (max-width: 420px) { + .technologies { + padding: 60px 0 64px; + } + .technologies__container { + width: calc(100% - 24px); + } + .technologies__label { + font-size: 15px; + } + .technologies__marquee { + gap: 18px; + margin-top: 34px; + } + .technologies__group { + gap: 22px; + padding-right: 22px; + } + .technology-item { + font-size: 16px; + } + .technology-item__icon { + width: 34px; + height: 34px; + flex-basis: 34px; + } + .technology-item__icon img { + width: 25px; + height: 25px; + } +} +.turnkey { + position: relative; + padding: 40px 0 20px; + background: #ffffff; +} +.turnkey__container { + width: min(1194px, 100% - 40px); + margin-inline: auto; +} +.turnkey__card { + min-height: 590px; + display: grid; + grid-template-columns: minmax(0, 1fr) 520px; + gap: 84px; + padding: 48px 48px 50px; + border: 1px solid rgba(17, 17, 17, 0.16); + border-radius: 30px; + background: #ffffff; +} +.turnkey__content { + max-width: 475px; +} +.turnkey__label { + margin: 0 0 13px; + color: #929292; + font-size: 14px; + font-weight: 600; + line-height: 1.2; + letter-spacing: 0.04em; + text-transform: uppercase; +} +.turnkey__title { + margin: 0; + color: #111111; + font-size: clamp(34px, 2.5vw, 38px); + font-weight: 700; + line-height: 1.02; + letter-spacing: -0.035em; +} +.turnkey__text { + margin: 27px 0 0; + color: #6f6f73; + font-size: 16px; + font-weight: 400; + line-height: 1.45; + letter-spacing: -0.01em; +} +.turnkey__button { + min-width: 244px; + min-height: 54px; + margin-top: 34px; + padding-inline: 30px; + font-size: 16px; +} +.turnkey__list { + align-self: start; + display: grid; + gap: 14px; + margin: 0; + padding: 0; + color: #111111; + font-size: 16px; + font-weight: 500; + line-height: 1.38; + letter-spacing: -0.01em; + list-style: none; +} +.turnkey__list li { + position: relative; + min-height: 20px; + padding-left: 32px; +} +.turnkey__list li::before { + content: ""; + position: absolute; + top: 0.64em; + left: 0; + width: 20px; + height: 20px; + border-radius: 50%; + background: #C7FF4F; + transform: translateY(-50%); +} + +@media (max-width: 1120px) { + .turnkey__card { + grid-template-columns: minmax(0, 1fr) minmax(430px, 0.9fr); + gap: 48px; + } +} +@media (max-width: 760px) { + .turnkey { + padding: 70px 0 72px; + } + .turnkey__container { + width: min(100% - 32px, 620px); + } + .turnkey__card { + min-height: auto; + grid-template-columns: 1fr; + gap: 36px; + padding: 34px 30px 36px; + border-radius: 26px; + } + .turnkey__content { + max-width: 100%; + } + .turnkey__title { + font-size: clamp(32px, 8vw, 42px); + } + .turnkey__text { + margin-top: 20px; + font-size: 15px; + } + .turnkey__button { + min-width: 220px; + margin-top: 28px; + } + .turnkey__list { + gap: 13px; + font-size: 15px; + line-height: 1.45; + } +} +@media (max-width: 420px) { + .turnkey { + padding: 60px 0 64px; + } + .turnkey__container { + width: calc(100% - 24px); + } + .turnkey__card { + padding: 28px 20px 30px; + border-radius: 22px; + } + .turnkey__label { + font-size: 13px; + } + .turnkey__title { + font-size: clamp(29px, 10vw, 36px); + } + .turnkey__button { + width: 100%; + min-width: 0; + } + .turnkey__list li { + padding-left: 28px; + } + .turnkey__list li::before { + width: 18px; + height: 18px; + } +} +.clients { + position: relative; + padding: 44px 0 88px; + overflow: hidden; + background: #ffffff; +} +.clients__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; +} +.clients__label { + margin: 0 0 2px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.clients__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; +} +.clients__title span { + color: #C2C2C2; +} +.clients__marquee { + width: 100vw; + display: grid; + gap: 10px; + margin-top: 35px; + margin-inline: calc(50% - 50vw); +} +.clients__row { + width: 100%; + overflow: hidden; +} +.clients__track { + width: max-content; + display: flex; + will-change: transform; +} +.clients__track--left { + animation: clients-marquee-left 48s linear infinite; +} +.clients__track--right { + animation: clients-marquee-right 52s linear infinite; +} +.clients__row--top .clients__track { + margin-left: 8px; +} +.clients__row--bottom .clients__track { + margin-left: -160px; +} +.clients__group { + display: flex; + gap: 10px; + padding-right: 10px; +} + +.review-card { + width: 382px; + min-height: 206px; + flex: 0 0 382px; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 19px 20px 20px; + border: 1px solid rgba(17, 17, 17, 0.16); + border-radius: 30px; + background: #ffffff; +} +.review-card__text { + max-width: 335px; + margin: 0; + color: #111111; + font-size: 16px; + font-weight: 500; + line-height: 1.53; + letter-spacing: -0.01em; +} +.review-card__author { + display: flex; + align-items: center; + gap: 13px; + margin-top: 24px; +} +.review-card__avatar { + width: 48px; + height: 48px; + flex: 0 0 48px; + border: 1px solid rgba(17, 17, 17, 0.14); + border-radius: 50%; + background: #faf9f6; +} +.review-card__name { + margin: 0; + color: #111111; + font-size: 18px; + font-weight: 600; + line-height: 1.15; + letter-spacing: -0.02em; +} +.review-card__position { + margin: 4px 0 0; + color: #888888; + font-size: 15px; + font-weight: 400; + line-height: 1.2; + letter-spacing: -0.01em; +} + +@keyframes clients-marquee-left { + 0% { + transform: translate3d(0, 0, 0); + } + 100% { + transform: translate3d(-50%, 0, 0); + } +} +@keyframes clients-marquee-right { + 0% { + transform: translate3d(-50%, 0, 0); + } + 100% { + transform: translate3d(0, 0, 0); + } +} +@media (max-width: 760px) { + .clients { + padding: 70px 0 72px; + } + .clients__container { + width: min(100% - 32px, 620px); + } + .clients__title { + font-size: clamp(36px, 9vw, 46px); + } + .clients__marquee { + gap: 12px; + margin-top: 34px; + } + .clients__group { + gap: 12px; + padding-right: 12px; + } + .clients__row--top .clients__track { + margin-left: -70px; + } + .clients__row--bottom .clients__track { + margin-left: -190px; + } + .review-card { + width: 340px; + min-height: 196px; + flex-basis: 340px; + padding: 18px 18px 19px; + border-radius: 26px; + } + .review-card__text { + font-size: 15px; + line-height: 1.48; + } + .review-card__name { + font-size: 17px; + } + .review-card__position { + font-size: 14px; + } +} +@media (max-width: 420px) { + .clients { + padding: 60px 0 64px; + } + .clients__container { + width: calc(100% - 24px); + } + .clients__label { + font-size: 15px; + } + .clients__row--top .clients__track { + margin-left: -90px; + } + .clients__row--bottom .clients__track { + margin-left: -220px; + } + .review-card { + width: 300px; + min-height: 188px; + flex-basis: 300px; + padding: 17px 17px 18px; + border-radius: 24px; + } + .review-card__text { + font-size: 14px; + } + .review-card__avatar { + width: 44px; + height: 44px; + flex-basis: 44px; + } +} +.values { + padding: 46px 0 82px; + background: #ffffff; +} +.values__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; +} +.values__label { + margin: 0 0 2px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.values__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; +} +.values__title span { + color: #C2C2C2; +} +.values__grid { + width: min(100%, 966px); + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 32px; + margin: 58px auto 0; +} + +.value-card { + min-width: 0; + text-align: center; +} +.value-card__media { + height: 216px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + background: #f2f2f2; +} +.value-card__media img { + width: 64px; + height: 64px; + display: block; + opacity: 0.94; +} +.value-card__title { + margin: 11px 0 0; + color: #111111; + font-size: 16px; + font-weight: 800; + line-height: 1.18; + letter-spacing: -0.015em; +} +.value-card__text { + max-width: 276px; + margin: 8px auto 0; + color: #888888; + font-size: 12px; + font-weight: 400; + line-height: 1.28; + letter-spacing: -0.01em; +} + +@media (max-width: 1120px) { + .values__grid { + gap: 24px; + } + .value-card__media { + height: 200px; + } +} +@media (max-width: 760px) { + .values { + padding: 70px 0 72px; + } + .values__container { + width: min(100% - 32px, 620px); + } + .values__title { + font-size: clamp(36px, 9vw, 46px); + } + .values__grid { + grid-template-columns: 1fr; + gap: 28px; + margin-top: 34px; + } + .value-card__media { + height: 220px; + } + .value-card__title { + margin-top: 12px; + font-size: 17px; + } + .value-card__text { + max-width: 330px; + font-size: 14px; + line-height: 1.35; + } +} +@media (max-width: 420px) { + .values { + padding: 60px 0 64px; + } + .values__container { + width: calc(100% - 24px); + } + .values__label { + font-size: 15px; + } + .values__grid { + gap: 24px; + } + .value-card__media { + height: 196px; + } +} +.faq { + padding: 46px 0 83px; + background: #ffffff; +} +.faq__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; +} +.faq__label { + margin: 0 0 2px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.faq__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; +} +.faq__title span { + color: #C2C2C2; +} +.faq__list { + width: min(100%, 1256px); + margin: 58px auto 0; + overflow: hidden; + border: 1px solid rgba(17, 17, 17, 0.16); + border-radius: 20px; + background: #ffffff; +} + +.faq-item + .faq-item { + border-top: 1px solid rgba(17, 17, 17, 0.14); +} +.faq-item__button { + width: 100%; + min-height: 69px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; + padding: 18px 24px 18px 20px; + border: 0; + background: transparent; + color: #111111; + font: inherit; + font-size: 16px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.01em; + text-align: left; + cursor: pointer; + transition: background 0.2s ease; +} +@media (hover: hover) and (pointer: fine) { + .faq-item__button:hover { + background: rgba(17, 17, 17, 0.025); + } +} +.faq-item__button[aria-expanded=true] .faq-item__icon { + transform: rotate(45deg); +} +.faq-item__icon { + position: relative; + width: 18px; + height: 18px; + flex: 0 0 18px; + transition: transform 0.2s ease; +} +.faq-item__icon::before, .faq-item__icon::after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + width: 11px; + height: 1px; + border-radius: 999px; + background: #111111; + transform: translate(-50%, -50%); +} +.faq-item__icon::after { + width: 1px; + height: 11px; +} +.faq-item__panel { + padding: 0 68px 22px 20px; + color: #888888; + font-size: 15px; + font-weight: 400; + line-height: 1.48; + letter-spacing: -0.01em; +} +.faq-item__panel p { + max-width: 820px; + margin: 0; +} + +@media (max-width: 760px) { + .faq { + padding: 70px 0 72px; + } + .faq__container { + width: min(100% - 32px, 620px); + } + .faq__title { + font-size: clamp(36px, 9vw, 46px); + } + .faq__list { + margin-top: 34px; + border-radius: 18px; + } + .faq-item__button { + min-height: 64px; + padding: 17px 18px; + font-size: 15px; + } + .faq-item__panel { + padding: 0 18px 18px; + font-size: 14px; + } +} +@media (max-width: 420px) { + .faq { + padding: 60px 0 64px; + } + .faq__container { + width: calc(100% - 24px); + } + .faq__label { + font-size: 15px; + } + .faq-item__button { + gap: 16px; + min-height: 60px; + padding: 15px 16px; + } + .faq-item__panel { + padding: 0 16px 17px; + } +} +.contact { + padding: 46px 0 88px; + background: #ffffff; +} +.contact__container { + width: min(1420px, 100% - 40px); + margin-inline: auto; + display: grid; + grid-template-columns: minmax(300px, 470px) minmax(620px, 1fr); + gap: clamp(48px, 6.5vw, 150px); + align-items: start; +} +.contact__content { + padding-top: 0; +} +.contact__label { + margin: 0 0 8px; + color: #6f6f73; + font-size: 16px; + font-weight: 600; + line-height: 1.2; +} +.contact__title { + margin: 0; + color: #333333; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 700; + line-height: 1.03; + letter-spacing: -0.052em; +} +.contact__title span { + color: #C2C2C2; +} +.contact__text { + max-width: 440px; + margin: 28px 0 0; + color: #888888; + font-size: 19px; + font-weight: 400; + line-height: 1.42; + letter-spacing: -0.022em; +} + +.contact-sentence { + width: 100%; + margin: 0; +} +.contact-sentence__text { + margin: 0; + color: #111111; + font-size: clamp(32px, 2.33vw, 40px); + font-weight: 400; + line-height: 1.19; + letter-spacing: -0.055em; +} +.contact-sentence__actions { + display: flex; + align-items: center; + gap: 18px; + margin-top: 28px; +} +.contact-sentence__submit { + min-width: 184px; +} +.contact-sentence__status { + min-height: 22px; + margin: 0; + color: #888888; + font-size: 14px; + line-height: 1.35; + letter-spacing: -0.01em; +} +.contact-sentence__status.is-success { + color: #333333; +} + +.contact-field { + display: inline; + position: relative; + min-width: 1.5em; + padding: 0 0.04em; + border: 0; + border-bottom: 1px solid currentColor; + border-radius: 0; + background: transparent; + color: #C2C2C2; + outline: none; + cursor: text; + transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease; +} +.contact-field[contenteditable=true], .contact-field:focus-visible { + color: #111111; + border-color: #111111; + background: rgba(17, 17, 17, 0.035); +} +.contact-field--selector { + cursor: pointer; + user-select: none; +} +.contact-field.is-filled { + color: #111111; +} +.contact-field.is-error { + color: #d73a31; + border-color: #d73a31; + background: rgba(215, 58, 49, 0.07); +} + +.contact-dropdown { + position: absolute; + z-index: 80; + min-width: 220px; + max-width: min(320px, 100vw - 24px); + margin: 0; + padding: 8px; + list-style: none; + border: 1px solid rgba(17, 17, 17, 0.12); + border-radius: 16px; + background: #ffffff; + box-shadow: 0 18px 45px rgba(17, 17, 17, 0.12); +} +.contact-dropdown li { + padding: 11px 12px; + border-radius: 10px; + color: #111111; + font-size: 15px; + font-weight: 500; + line-height: 1.2; + cursor: pointer; + transition: background 0.2s ease; +} +@media (hover: hover) and (pointer: fine) { + .contact-dropdown li:hover { + background: rgba(17, 17, 17, 0.055); + } +} + +.contact-date-input { + position: fixed; + left: -1000px; + top: -1000px; + width: 24px; + height: 24px; + opacity: 0; + pointer-events: auto; +} + +@media (max-width: 1120px) { + .contact__container { + grid-template-columns: minmax(280px, 390px) minmax(520px, 1fr); + gap: 64px; + } + .contact-sentence__text { + font-size: clamp(30px, 3.1vw, 36px); + } +} +@media (max-width: 760px) { + .contact { + padding: 70px 0 72px; + } + .contact__container { + width: min(100% - 32px, 620px); + grid-template-columns: 1fr; + gap: 34px; + } + .contact__title { + font-size: clamp(36px, 9vw, 46px); + } + .contact__text { + margin-top: 20px; + font-size: 17px; + } + .contact-sentence__text { + font-size: clamp(26px, 7vw, 36px); + line-height: 1.22; + } + .contact-sentence__actions { + flex-direction: column; + align-items: flex-start; + gap: 12px; + } +} +@media (max-width: 420px) { + .contact { + padding: 60px 0 64px; + } + .contact__container { + width: calc(100% - 24px); + } + .contact__label { + font-size: 15px; + } + .contact-sentence__text { + font-size: 25px; + } + .contact-dropdown { + min-width: 200px; + } +} +.site-footer { + padding: 82px 0 50px; + background: #ffffff; +} +.site-footer__container { + width: min(1192px, 100% - 40px); + margin-inline: auto; +} +.site-footer__top { + display: grid; + grid-template-columns: minmax(320px, 1fr) 180px 262px; + gap: clamp(70px, 6.8vw, 130px); + align-items: start; + padding-bottom: 66px; + border-bottom: 1px solid rgba(17, 17, 17, 0.16); +} +.site-footer__brand { + display: flex; + flex-direction: column; + align-items: flex-start; +} +.site-footer__logo { + display: inline-flex; + width: 190px; + transition: opacity 0.2s ease; +} +.site-footer__logo img { + width: 190px; + height: auto; +} +@media (hover: hover) and (pointer: fine) { + .site-footer__logo:hover { + opacity: 0.72; + } +} +.site-footer__description { + max-width: 330px; + margin: 29px 0 0; + color: #888888; + font-size: 18px; + font-weight: 400; + line-height: 1.55; + letter-spacing: -0.022em; +} +.site-footer__title { + margin: 3px 0 22px; + color: #111111; + font-size: 14px; + font-weight: 500; + line-height: 1.2; + text-transform: uppercase; + letter-spacing: -0.01em; +} +.site-footer__list { + display: flex; + flex-direction: column; + gap: 14px; + margin: 0; + padding: 0; + list-style: none; + color: #888888; + font-size: 17px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.018em; +} +.site-footer__list a { + transition: color 0.2s ease; +} +@media (hover: hover) and (pointer: fine) { + .site-footer__list a:hover { + color: #111111; + } +} +.site-footer__bottom { + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; + padding-top: 33px; + color: #888888; + font-size: 15px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; +} +.site-footer__bottom p { + margin: 0; +} +.site-footer__bottom a { + transition: color 0.2s ease; +} +@media (hover: hover) and (pointer: fine) { + .site-footer__bottom a:hover { + color: #111111; + } +} + +@media (max-width: 1120px) { + .site-footer__top { + grid-template-columns: minmax(280px, 1fr) 160px 240px; + gap: 54px; + } +} +@media (max-width: 760px) { + .site-footer { + padding: 64px 0 40px; + } + .site-footer__container { + width: min(100% - 32px, 620px); + } + .site-footer__top { + grid-template-columns: 1fr 1fr; + gap: 40px 32px; + padding-bottom: 42px; + } + .site-footer__brand { + grid-column: 1/-1; + } + .site-footer__description { + margin-top: 22px; + font-size: 17px; + } + .site-footer__bottom { + align-items: flex-start; + flex-direction: column; + gap: 12px; + padding-top: 26px; + } +} +@media (max-width: 520px) { + .site-footer { + padding: 52px 0 34px; + } + .site-footer__container { + width: calc(100% - 24px); + } + .site-footer__top { + grid-template-columns: 1fr; + gap: 34px; + } + .site-footer__logo, .site-footer__logo img { + width: 168px; + } + .site-footer__title { + margin-bottom: 16px; + } + .site-footer__list { + gap: 12px; + font-size: 16px; + } + .site-footer__bottom { + font-size: 14px; + } +} diff --git a/assets/css/main.min.css b/assets/css/main.min.css new file mode 100644 index 0000000..5192112 --- /dev/null +++ b/assets/css/main.min.css @@ -0,0 +1 @@ +a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{border:0;font-size:100%;font:inherit;margin:0;padding:0;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:after,blockquote:before,q:after,q:before{content:"";content:none}table{border-collapse:collapse;border-spacing:0}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth}body{background:#fff;color:#111;font-family:Nunito Sans,Segoe UI,Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.4;margin:0;min-width:320px;text-rendering:geometricPrecision;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:inherit;text-decoration:none}a,button{-webkit-tap-highlight-color:transparent}img,svg{display:block;max-width:100%}.container{margin-inline:auto;width:min(1200px,100% - 32px)}.btn{align-items:center;border:1px solid transparent;border-radius:999px;display:inline-flex;font-size:14px;font-weight:600;justify-content:center;line-height:1;min-height:46px;padding:0 26px;transition:transform .2s ease,border-color .2s ease,background-color .2s ease,color .2s ease;white-space:nowrap}@media (hover:hover) and (pointer:fine){.btn:hover{transform:translateY(-2px)}}.btn--dark{background:#111;box-shadow:0 18px 38px rgba(17,17,17,.12);color:#fff;gap:12px;min-width:172px}.btn--light{background:hsla(0,0%,100%,.78);border-color:rgba(17,17,17,.14);color:#202023;min-width:150px}.site-header{left:50%;position:fixed;top:14px;transform:translateX(-50%);width:min(505px,100% - 32px);z-index:20}.site-header__inner{align-items:center;backdrop-filter:blur(16px);background:hsla(0,0%,97.3%,.86);border:1px solid rgba(17,17,17,.06);border-radius:999px;display:flex;justify-content:space-between;min-height:50px;padding:0 20px}.site-header__logo{flex:0 0 auto}.site-header__logo img{height:auto;width:100px}.site-header__nav{align-items:center;color:#6f6f73;display:flex;font-size:12px;font-weight:400;gap:22px;line-height:1}.site-header__nav a{transition:color .2s ease}@media (hover:hover) and (pointer:fine){.site-header__nav a:hover{color:#111}}@media (max-width:520px){.site-header{top:10px;width:calc(100% - 20px)}.site-header__inner{min-height:46px;padding:0 16px}.site-header__logo img{width:92px}.site-header__nav{font-size:11px;gap:12px}}.page--landing{background:#fff;min-height:100vh;overflow:hidden}.hero{border-bottom:1px solid rgba(17,17,17,.05);height:100vh;max-height:900px;overflow:hidden;position:relative}.hero:after{background:rgba(17,17,17,.05);bottom:36px;right:-155px}.hero:after,.hero:before{border-radius:50%;content:"";filter:blur(56px);height:260px;pointer-events:none;position:absolute;width:560px}.hero:before{background:rgba(199,255,79,.1);left:-155px;top:-156px}.hero__container{align-items:center;display:flex;height:100%;justify-content:center;position:relative;width:100%}.hero__content{margin-inline:auto;position:relative;text-align:center;width:min(850px,100%);z-index:2}.hero__badge{align-items:center;background:hsla(0,0%,100%,.82);border:1px solid rgba(17,17,17,.13);border-radius:999px;color:#111;display:inline-flex;font-size:14px;font-weight:500;gap:8px;justify-content:center;line-height:1;min-height:34px;padding:0 20px}.hero__badge span{color:#333;flex:0 0 auto;height:10px;position:relative;width:10px}.hero__title{color:#333;font-size:82px;font-weight:700;letter-spacing:-.058em;line-height:.95;margin-top:36px}.hero__title span{color:#c9c9cc}.hero__text{color:#888;font-size:16px;font-weight:400;letter-spacing:.002em;line-height:1.24;margin:36px auto 0}.hero__actions{align-items:center;display:flex;gap:16px;justify-content:center;margin-top:36px}.hero__actions .btn{font-size:16px}.hero__tags{align-items:center;color:#888;display:flex;flex-wrap:wrap;font-size:14px;font-weight:600;gap:15px 34px;justify-content:center;line-height:1.2;margin-top:36px}.hero__tags li{padding-left:15px;position:relative}.hero__tags li:before{background:#c7ff4f;border-radius:50%;content:"";height:6px;left:0;position:absolute;top:50%;transform:translateY(-50%);width:6px}.hero-card{backdrop-filter:blur(12px);border:1px solid rgba(15,15,16,.12);border-radius:11px;position:absolute;z-index:3}.hero-card--conversion{align-items:center;background:hsla(0,0%,100%,.84);bottom:calc(50% - 190px);box-shadow:0 17px 26px rgba(17,17,17,.18);display:flex;gap:14px;left:calc(50% - 462px);min-height:84px;padding:17px 18px;width:146px}.hero-card--conversion .hero-card__icon{align-items:center;background:#c7ff4f;border-radius:50%;display:flex;flex:0 0 38px;height:38px;justify-content:center;width:38px}.hero-card--conversion .hero-card__icon img{height:20px;width:20px}.hero-card--conversion span{color:#888;display:block;font-size:14px;font-weight:400;line-height:1.2;margin-bottom:1px}.hero-card--conversion strong{color:#141416;display:block;font-size:24px;font-weight:700;letter-spacing:-.04em;line-height:1}.hero-card--launch{background:#0b0b0c;border-color:hsla(0,0%,100%,.04);box-shadow:0 20px 35px rgba(17,17,17,.25);color:#fff;left:calc(50% + 380px);min-height:70px;padding:14px 20px;width:-moz-fit-content;width:fit-content}.hero-card--launch span,.hero-card--launch strong{display:block}.hero-card--launch span{font-size:18px;font-weight:600;line-height:1.05}.hero-card--launch strong{color:#c7ff4f;font-size:16px;font-weight:400;line-height:1;margin-top:5px}@media (max-width:1120px){.hero{max-height:860px}.hero__title{font-size:clamp(62px,7.2vw,78px)}.hero__text{max-width:620px}.hero-card--conversion{bottom:calc(50% - 176px);left:max(24px,50% - 410px)}.hero-card--launch{left:auto;right:max(24px,50% - 500px)}}@media (max-width:760px){.hero{height:auto;max-height:none;min-height:100svh;padding:104px 0 56px}.hero:before{filter:blur(48px);height:250px;left:-250px;top:-110px;width:440px}.hero:after{bottom:-24px;filter:blur(50px);height:260px;right:-250px;width:460px}.hero__container{flex-direction:column;height:auto;justify-content:center;min-height:calc(100svh - 160px)}.hero__content{width:min(620px,100%)}.hero__badge{font-size:13px;min-height:32px;padding:0 16px}.hero__title{font-size:clamp(46px,10.2vw,64px);letter-spacing:-.055em;line-height:.98;margin-top:26px;text-wrap:balance}.hero__text{font-size:15px;line-height:1.36;margin-top:24px;max-width:520px}.hero__actions{flex-wrap:wrap;gap:12px;margin-top:28px}.hero__actions .btn{font-size:15px;min-height:46px;min-width:160px}.hero__tags{font-size:13px;gap:11px 22px;margin-top:28px}.hero-card{inset:auto;position:relative}.hero-card--conversion{bottom:auto;box-shadow:0 14px 24px rgba(17,17,17,.14);left:auto;margin-top:34px;min-height:76px;padding:14px 16px;transform:translateX(-72px);width:146px}.hero-card--conversion .hero-card__icon{flex-basis:34px;height:34px;width:34px}.hero-card--conversion .hero-card__icon img{height:18px;width:18px}.hero-card--conversion span{font-size:13px}.hero-card--conversion strong{font-size:22px}.hero-card--launch{box-shadow:0 16px 28px rgba(17,17,17,.2);left:auto;margin-top:-18px;min-height:64px;padding:12px 18px;right:auto;transform:translateX(76px)}.hero-card--launch span{font-size:16px}.hero-card--launch strong{font-size:15px}}@media (max-width:520px){.hero{min-height:100svh;padding:92px 0 44px}.hero__container{min-height:calc(100svh - 136px);width:calc(100% - 24px)}.hero__badge{font-size:12px;min-height:30px;padding:0 14px}.hero__title{font-size:clamp(37px,11.5vw,50px);letter-spacing:-.05em;line-height:1;margin-top:22px}.hero__text{font-size:14px;line-height:1.42;margin-top:20px}.hero__actions{flex-direction:column;gap:10px;margin:26px auto 0;width:min(100%,330px)}.hero__actions .btn{min-height:48px;min-width:0;width:100%}.hero__tags{font-size:12px;gap:10px 18px;justify-content:flex-start;margin:24px auto 0;width:min(100%,330px)}.hero__tags li{padding-left:13px}.hero-card--conversion{margin-top:28px;transform:translateX(-48px)}.hero-card--launch{transform:translateX(48px)}}@media (max-width:420px){.hero{padding:86px 0 38px}.hero__container{min-height:calc(100svh - 124px);width:calc(100% - 22px)}.hero__title{font-size:clamp(34px,9.6vw,38px);letter-spacing:-.044em}.hero__tags{justify-content:center}.hero-card--conversion,.hero-card--launch{transform:none}.hero-card--conversion{margin-top:24px}.hero-card--launch{margin-top:10px}}.results{min-height:100vh;overflow:hidden;position:relative}.results__container{align-items:center;display:flex;height:100vh;justify-content:center;min-height:680px;position:relative}.results__content{position:relative;text-align:center;width:min(1120px,100%);z-index:2}.results__label{color:#6f6f73;font-size:16px;font-weight:700;line-height:1.1;margin-bottom:14px}.results__slider{height:190px;margin-inline:auto;overflow:visible;position:relative;width:min(1120px,100%)}.results__track{height:100%;position:relative}.results__slide{align-items:center;display:flex;inset:0;justify-content:center;min-height:100%;pointer-events:none;position:absolute;transition:opacity .35s ease;visibility:hidden}.results__slide.is-active{opacity:1;pointer-events:auto;visibility:visible}.results__title{color:#333;font-size:clamp(40px,4.6vw,72px);font-weight:700;letter-spacing:-.02em;line-height:1.03;margin:0;transform:translateY(26px);transition:opacity .45s ease,transform .55s ease}.results__slide.is-active .results__title{opacity:1;transform:translateY(0)}.results__dots{align-items:center;display:flex;gap:10px;justify-content:center;margin-top:28px}.results__dots span{background:rgba(17,17,17,.22);border-radius:50%;height:8px;transition:width .3s ease,background-color .3s ease;width:8px}.results__dots span.is-active{background:#333;border-radius:999px;width:24px}.results__icons{height:200%;inset:0;pointer-events:none;position:absolute;transform:translateY(-23%)}.results__icon{align-items:center;background:var(--icon-bg,#fff);border-radius:8px;box-shadow:0 10px 20px rgba(17,17,17,.07);display:flex;height:45px;justify-content:center;opacity:1;position:absolute;transform:scale(1) translateY(16px);transition:transform .55s cubic-bezier(.21,1,.31,1),opacity .45s ease;width:45px}.results__icon.is-visible{opacity:1;transform:scale(1) translateY(0)}.results__icon img{height:32px;-o-object-fit:contain;object-fit:contain;width:32px}.results__icon--yandex{left:92px;top:16px}.results__icon--wordpress{left:238px;top:84px}.results__icon--shopify{left:540px;top:36px}.results__icon--aistudio{right:240px;top:22px}.results__icon--bitrix{right:86px;top:78px}.results__icon--cloudflare{right:168px;top:154px}.results__icon--google{bottom:128px;right:94px}.results__icon--openai{bottom:34px;right:298px}.results__icon--tilda{bottom:58px;left:156px}.results__icon--n8n{bottom:96px;left:388px}.results__icon--vk{left:0;top:196px}.results.is-static .results__slider{height:auto}.results.is-static .results__track{display:grid;gap:12px;height:auto}.results.is-static .results__slide{inset:auto;min-height:0;opacity:1;pointer-events:auto;position:relative;visibility:visible}.results.is-static .results__icon,.results.is-static .results__title{opacity:1;transform:none}.results.is-animation-ready .results__label{opacity:0;transform:translateY(14px);will-change:opacity,transform}.results.is-animation-ready .results__title{opacity:0;transform:translateY(46px);will-change:opacity,transform}.results.is-animation-ready .results__icon{opacity:0;transform:scale(.86) translateY(36px) rotate(-4deg);will-change:opacity,transform}.results.is-animation-ready.is-in-view .results__label{animation:resultsFadeUp .65s cubic-bezier(.21,1,.31,1) .1s forwards}.results.is-animation-ready.is-in-view .results__title{animation:resultsTitleIn .8s cubic-bezier(.21,1,.31,1) .22s forwards}.results.is-animation-ready.is-in-view .results__icon{animation:resultsIconIn .72s cubic-bezier(.21,1,.31,1) var(--results-icon-delay,0s) forwards,resultsIconFloat 5.8s ease-in-out calc(var(--results-icon-delay, 0s) + .78s) infinite}.results.is-animation-ready.is-in-view .results__icon:first-child{--results-icon-delay:0.04s;--results-float-offset:-8px}.results.is-animation-ready.is-in-view .results__icon:nth-child(2){--results-icon-delay:0.1s;--results-float-offset:7px}.results.is-animation-ready.is-in-view .results__icon:nth-child(3){--results-icon-delay:0.16s;--results-float-offset:-6px}.results.is-animation-ready.is-in-view .results__icon:nth-child(4){--results-icon-delay:0.22s;--results-float-offset:8px}.results.is-animation-ready.is-in-view .results__icon:nth-child(5){--results-icon-delay:0.28s;--results-float-offset:-7px}.results.is-animation-ready.is-in-view .results__icon:nth-child(6){--results-icon-delay:0.34s;--results-float-offset:6px}.results.is-animation-ready.is-in-view .results__icon:nth-child(7){--results-icon-delay:0.4s;--results-float-offset:-9px}.results.is-animation-ready.is-in-view .results__icon:nth-child(8){--results-icon-delay:0.46s;--results-float-offset:7px}.results.is-animation-ready.is-in-view .results__icon:nth-child(9){--results-icon-delay:0.52s;--results-float-offset:-6px}.results.is-animation-ready.is-in-view .results__icon:nth-child(10){--results-icon-delay:0.58s;--results-float-offset:8px}.results.is-animation-ready.is-in-view .results__icon:nth-child(11){--results-icon-delay:0.64s;--results-float-offset:-7px}@keyframes resultsFadeUp{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes resultsTitleIn{0%{opacity:0;transform:translateY(46px)}to{opacity:1;transform:translateY(26px)}}@keyframes resultsIconIn{0%{opacity:0;transform:scale(.86) translateY(36px) rotate(-4deg)}to{opacity:1;transform:scale(1) translateY(16px) rotate(0deg)}}@keyframes resultsIconFloat{0%,to{opacity:1;transform:scale(1) translateY(16px) rotate(0deg)}50%{opacity:1;transform:scale(1) translateY(calc(16px + var(--results-float-offset, -8px))) rotate(1.2deg)}}@keyframes resultsIconInMobile{0%{opacity:0;transform:scale(.9) translateY(18px) rotate(-3deg)}to{opacity:1;transform:none}}@media (max-width:1120px){.results__container{min-height:620px}.results__title{font-size:clamp(34px,5.1vw,56px)}.results__icon--yandex{left:34px}.results__icon--wordpress{left:150px}.results__icon--shopify{left:410px}.results__icon--aistudio{right:182px}.results__icon--bitrix{right:40px}.results__icon--cloudflare{right:124px}.results__icon--google{right:52px}.results__icon--openai{right:222px}.results__icon--tilda{left:90px}.results__icon--n8n{left:292px}}@media (max-width:760px){.results{min-height:unset;padding:74px 0 92px}.results__container{display:block;height:auto;min-height:unset}.results__content{margin-inline:auto;max-width:620px}.results__label{font-size:clamp(20px,4.2vw,28px);margin-bottom:12px}.results__slide{min-height:132px}.results__title{font-size:clamp(30px,8.7vw,44px);line-height:1.05}.results__dots{margin-top:16px}.results__icons{display:grid;gap:14px;grid-template-columns:repeat(4,45px);justify-content:center;margin:0 auto 36px;position:static;width:min(420px,100%)}.results__icon{bottom:auto;left:auto;opacity:1;position:relative;right:auto;top:auto;transform:none}.results.is-animation-ready.is-in-view .results__icon{animation:resultsIconInMobile .62s cubic-bezier(.21,1,.31,1) var(--results-icon-delay,0s) forwards}}@media (max-width:420px){.results{padding:62px 0 78px}.results__icons{gap:12px;grid-template-columns:repeat(3,45px);margin-bottom:28px;width:min(320px,100%)}.results__slide{min-height:120px}.results__title{font-size:clamp(28px,9vw,38px);letter-spacing:-.01em}}@media (prefers-reduced-motion:reduce){.results.is-animation-ready .results__label{animation:none!important;opacity:1;transform:none;will-change:auto}.results.is-animation-ready .results__title{animation:none!important;opacity:1;transform:translateY(26px);will-change:auto}.results.is-animation-ready .results__icon{animation:none!important;opacity:1;transform:scale(1) translateY(16px);will-change:auto}}@media (max-width:760px) and (prefers-reduced-motion:reduce){.results.is-animation-ready .results__icon{transform:none}}.expertise{background:#fff;overflow:hidden;padding:44px 0 40px;position:relative}.expertise__container{margin-inline:auto;width:min(1420px,100% - 40px)}.expertise__header{align-items:start;display:grid;gap:80px;grid-template-columns:minmax(0,1fr) 448px}.expertise__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 2px}.expertise__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:600;letter-spacing:-.052em;line-height:1.03;margin:0}.expertise__title span{color:#c2c2c2}.expertise__text{color:#111;font-size:18px;font-weight:400;letter-spacing:.005em;line-height:1.55;margin:22px 0 0;max-width:448px}.expertise__tabs{align-items:center;background:#f2f2f2;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(17,17,17,.02);display:flex;gap:2px;margin:36px auto 0;min-height:39px;padding:2px;width:-moz-fit-content;width:fit-content}.expertise__tab{background:transparent;border:0;border-radius:999px;color:#a6a6a8;cursor:pointer;font:inherit;font-size:13px;font-weight:600;line-height:1;min-height:35px;padding:0 17px;transition:color .2s ease,background-color .2s ease,box-shadow .2s ease;white-space:nowrap}.expertise__tab.is-active{background:#fff;box-shadow:0 2px 7px rgba(17,17,17,.05);color:#111}@media (hover:hover) and (pointer:fine){.expertise__tab:hover{color:#111}}.expertise__cases{margin-top:50px;margin-inline:calc(50% - 50vw);overflow:visible;position:relative;width:100vw}.expertise__track{align-items:stretch;display:flex}.expertise-card{background:#fff;border:1px solid rgba(17,17,17,.16);border-radius:12px;flex:0 0 300px;height:auto;min-height:430px;overflow:hidden;width:300px}.expertise-card__media{background:#f2f2f2;height:279px;overflow:hidden}.expertise-card__media img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.expertise-card__body{padding:13px 10px 7px}.expertise-card__title{color:#111;font-size:24px;font-weight:800;letter-spacing:-.03em;line-height:1.15;margin:0;text-align:center}.expertise-card__list{color:#6f6f73;display:grid;font-size:14px;font-weight:500;gap:7px;line-height:1.2;list-style:none;margin:11px 0 0;padding:0 0 0 2px}.expertise-card__list li{padding-left:19px;position:relative}.expertise-card__list li:before{background:#c7ff4f;border-radius:50%;content:"";height:6px;left:0;position:absolute;top:.5em;transform:translateY(-50%);width:6px}.expertise-card__tags{align-items:center;display:flex;flex-wrap:nowrap;gap:9px;justify-content:center;list-style:none;margin:16px 0 0;padding:0}.expertise-card__tags li{align-items:center;background:hsla(0,0%,95%,.55);border:1px solid rgba(17,17,17,.16);border-radius:999px;color:#111;display:inline-flex;font-size:12px;font-weight:500;justify-content:center;line-height:1;min-height:27px;padding:0 11px;white-space:nowrap}@media (max-width:1120px){.expertise__header{gap:48px;grid-template-columns:minmax(0,1fr) 390px}.expertise__track{align-items:stretch}}@media (max-width:760px){.expertise{padding:70px 0 72px}.expertise__container{width:min(100% - 32px,620px)}.expertise__header{display:block}.expertise__title{font-size:clamp(36px,9vw,46px)}.expertise__text{font-size:16px;line-height:1.45;margin-top:20px;max-width:100%}.expertise__tabs{justify-content:flex-start;margin-top:28px;overflow-x:auto;scrollbar-width:none;width:100%}.expertise__tabs::-webkit-scrollbar{display:none}.expertise__tab{padding-inline:15px}.expertise__cases{margin-top:32px;overflow:visible}.expertise__track{align-items:stretch}.expertise-card{flex-basis:286px;width:286px}.expertise-card__media{height:266px}.expertise-card__title{font-size:23px}.expertise-card__list{font-size:13px}.expertise-card__tags{gap:6px}.expertise-card__tags li{padding-inline:9px}}@media (max-width:420px){.expertise{padding:60px 0 64px}.expertise__container{width:calc(100% - 24px)}.expertise__label{font-size:15px}.expertise__tabs{min-height:37px}.expertise__tab{font-size:12px;min-height:33px;padding-inline:13px}.expertise__track{align-items:stretch}.expertise-card{flex-basis:272px;min-height:420px;width:272px}.expertise-card__media{height:254px}.expertise-card__body{padding-inline:9px}.expertise-card__tags{flex-wrap:wrap}}.process{background:#fff;padding:44px 0 100px;position:relative}.process__container{margin-inline:auto;width:min(1420px,100% - 40px)}.process__heading{max-width:1100px}.process__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 2px}.process__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:600;letter-spacing:-.052em;line-height:1.03;margin:0}.process__title span{color:#c2c2c2}.process__grid{display:grid;gap:24px;grid-template-columns:repeat(3,minmax(0,1fr));margin:58px auto 0;width:min(1192px,100%)}.process-card{background:#fff;border:1px solid rgba(17,17,17,.16);border-radius:30px;min-height:190px;padding:16px 28px 20px}.process-card__number{color:#f4f3f0;display:block;font-size:60px;font-weight:900;letter-spacing:-.055em;line-height:.96;margin:0 0 18px}.process-card__title{color:#111;font-size:20px;font-weight:800;letter-spacing:-.02em;line-height:1.2;margin:0}.process-card__text{color:#6f6f73;font-size:15px;font-weight:400;letter-spacing:-.01em;line-height:1.75;margin:12px 0 0;max-width:310px}@media (max-width:1120px){.process__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:760px){.process{padding:70px 0 72px}.process__container{width:min(100% - 32px,620px)}.process__title{font-size:clamp(36px,9vw,46px)}.process__grid{gap:16px;grid-template-columns:1fr;margin-top:32px}.process-card{border-radius:24px;min-height:172px;padding:16px 24px 20px}.process-card__number{font-size:54px;margin-bottom:16px}.process-card__text{font-size:14px;line-height:1.6;max-width:100%}}@media (max-width:420px){.process{padding:60px 0 64px}.process__container{width:calc(100% - 24px)}.process__label{font-size:15px}.process-card{border-radius:22px;min-height:166px;padding:15px 20px 19px}.process-card__number{font-size:50px}.process-card__title{font-size:19px}}.technologies{background:#fff;overflow:hidden;padding:44px 0 66px;position:relative}.technologies__container{margin-inline:auto;width:min(1420px,100% - 40px)}.technologies__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 2px}.technologies__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:600;letter-spacing:-.052em;line-height:1.03;margin:0}.technologies__title span{color:#c2c2c2}.technologies__marquee{display:grid;gap:32px;margin-top:60px;margin-inline:calc(50% - 50vw);width:100vw}.technologies__row{overflow:hidden;width:100%}.technologies__track{align-items:center;display:flex;width:-moz-max-content;width:max-content;will-change:transform}.technologies__track--left{animation:technologies-marquee-left 38s linear infinite}.technologies__track--right{animation:technologies-marquee-right 42s linear infinite}.technologies__row--top .technologies__track{margin-left:-82px}.technologies__row--bottom .technologies__track{margin-left:10px}.technologies__group{align-items:center;display:flex;flex:0 0 auto;gap:41px;padding-right:41px}@media (prefers-reduced-motion:reduce){.technologies__track{animation:none}}.technology-item{align-items:center;color:#111;display:inline-flex;flex:0 0 auto;font-size:22px;font-weight:500;gap:11px;letter-spacing:-.03em;line-height:1;white-space:nowrap}.technology-item__icon{align-items:center;background:#f2f2f2;border-radius:7px;display:inline-flex;flex:0 0 44px;height:44px;justify-content:center;overflow:hidden;width:44px}.technology-item__icon img{display:block;height:32px;-o-object-fit:contain;object-fit:contain;width:32px}.technology-item__icon--wordpress{background:#057da3}.technology-item__icon--n8n{background:#e83e73}.technology-item__icon--bitrix{background:#42b9ea}.technology-item__icon--bitrix img{height:auto;width:32px}.technology-item__icon--react{background:#1f1f1f}.technology-item__icon--docker,.technology-item__icon--nuxt,.technology-item__icon--vue,.technology-item__icon--woo{background:#f2f2f2}.technology-item__icon--modx{background:#f4f4f4}.technology-item__icon--php{background:#535f99}.technology-item__icon--git{background:#fb5036}.technology-item__icon--mysql{background:#ed8a00}.technology-item__icon--tilda{background:#ff5b3a}@keyframes technologies-marquee-left{0%{transform:translateZ(0)}to{transform:translate3d(-50%,0,0)}}@keyframes technologies-marquee-right{0%{transform:translate3d(-50%,0,0)}to{transform:translateZ(0)}}@media (max-width:760px){.technologies{padding:70px 0 72px}.technologies__container{width:min(100% - 32px,620px)}.technologies__title{font-size:clamp(36px,9vw,46px)}.technologies__marquee{gap:22px;margin-top:38px}.technologies__group{gap:28px;padding-right:28px}.technologies__row--top .technologies__track{margin-left:-54px}.technologies__row--bottom .technologies__track{margin-left:12px}.technology-item{font-size:18px;gap:9px}.technology-item__icon{border-radius:7px;flex-basis:38px;height:38px;width:38px}.technology-item__icon img{height:28px;width:28px}}@media (max-width:420px){.technologies{padding:60px 0 64px}.technologies__container{width:calc(100% - 24px)}.technologies__label{font-size:15px}.technologies__marquee{gap:18px;margin-top:34px}.technologies__group{gap:22px;padding-right:22px}.technology-item{font-size:16px}.technology-item__icon{flex-basis:34px;height:34px;width:34px}.technology-item__icon img{height:25px;width:25px}}.turnkey{background:#fff;padding:40px 0 20px;position:relative}.turnkey__container{margin-inline:auto;width:min(1194px,100% - 40px)}.turnkey__card{background:#fff;border:1px solid rgba(17,17,17,.16);border-radius:30px;display:grid;gap:84px;grid-template-columns:minmax(0,1fr) 520px;min-height:590px;padding:48px 48px 50px}.turnkey__content{max-width:475px}.turnkey__label{color:#929292;font-size:14px;font-weight:600;letter-spacing:.04em;line-height:1.2;margin:0 0 13px;text-transform:uppercase}.turnkey__title{color:#111;font-size:clamp(34px,2.5vw,38px);font-weight:700;letter-spacing:-.035em;line-height:1.02;margin:0}.turnkey__text{color:#6f6f73;font-size:16px;font-weight:400;letter-spacing:-.01em;line-height:1.45;margin:27px 0 0}.turnkey__button{font-size:16px;margin-top:34px;min-height:54px;min-width:244px;padding-inline:30px}.turnkey__list{align-self:start;color:#111;display:grid;font-size:16px;font-weight:500;gap:14px;letter-spacing:-.01em;line-height:1.38;list-style:none;margin:0;padding:0}.turnkey__list li{min-height:20px;padding-left:32px;position:relative}.turnkey__list li:before{background:#c7ff4f;border-radius:50%;content:"";height:20px;left:0;position:absolute;top:.64em;transform:translateY(-50%);width:20px}@media (max-width:1120px){.turnkey__card{gap:48px;grid-template-columns:minmax(0,1fr) minmax(430px,.9fr)}}@media (max-width:760px){.turnkey{padding:70px 0 72px}.turnkey__container{width:min(100% - 32px,620px)}.turnkey__card{border-radius:26px;gap:36px;grid-template-columns:1fr;min-height:auto;padding:34px 30px 36px}.turnkey__content{max-width:100%}.turnkey__title{font-size:clamp(32px,8vw,42px)}.turnkey__text{font-size:15px;margin-top:20px}.turnkey__button{margin-top:28px;min-width:220px}.turnkey__list{font-size:15px;gap:13px;line-height:1.45}}@media (max-width:420px){.turnkey{padding:60px 0 64px}.turnkey__container{width:calc(100% - 24px)}.turnkey__card{border-radius:22px;padding:28px 20px 30px}.turnkey__label{font-size:13px}.turnkey__title{font-size:clamp(29px,10vw,36px)}.turnkey__button{min-width:0;width:100%}.turnkey__list li{padding-left:28px}.turnkey__list li:before{height:18px;width:18px}}.clients{background:#fff;overflow:hidden;padding:44px 0 88px;position:relative}.clients__container{margin-inline:auto;width:min(1420px,100% - 40px)}.clients__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 2px}.clients__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:600;letter-spacing:-.052em;line-height:1.03;margin:0}.clients__title span{color:#c2c2c2}.clients__marquee{display:grid;gap:10px;margin-top:35px;margin-inline:calc(50% - 50vw);width:100vw}.clients__row{overflow:hidden;width:100%}.clients__track{display:flex;width:-moz-max-content;width:max-content;will-change:transform}.clients__track--left{animation:clients-marquee-left 48s linear infinite}.clients__track--right{animation:clients-marquee-right 52s linear infinite}.clients__row--top .clients__track{margin-left:8px}.clients__row--bottom .clients__track{margin-left:-160px}.clients__group{display:flex;gap:10px;padding-right:10px}.review-card{background:#fff;border:1px solid rgba(17,17,17,.16);border-radius:30px;display:flex;flex:0 0 382px;flex-direction:column;justify-content:space-between;min-height:206px;padding:19px 20px 20px;width:382px}.review-card__text{color:#111;font-size:16px;font-weight:500;letter-spacing:-.01em;line-height:1.53;margin:0;max-width:335px}.review-card__author{align-items:center;display:flex;gap:13px;margin-top:24px}.review-card__avatar{background:#faf9f6;border:1px solid rgba(17,17,17,.14);border-radius:50%;flex:0 0 48px;height:48px;width:48px}.review-card__name{color:#111;font-size:18px;font-weight:600;letter-spacing:-.02em;line-height:1.15;margin:0}.review-card__position{color:#888;font-size:15px;font-weight:400;letter-spacing:-.01em;line-height:1.2;margin:4px 0 0}@keyframes clients-marquee-left{0%{transform:translateZ(0)}to{transform:translate3d(-50%,0,0)}}@keyframes clients-marquee-right{0%{transform:translate3d(-50%,0,0)}to{transform:translateZ(0)}}@media (max-width:760px){.clients{padding:70px 0 72px}.clients__container{width:min(100% - 32px,620px)}.clients__title{font-size:clamp(36px,9vw,46px)}.clients__marquee{gap:12px;margin-top:34px}.clients__group{gap:12px;padding-right:12px}.clients__row--top .clients__track{margin-left:-70px}.clients__row--bottom .clients__track{margin-left:-190px}.review-card{border-radius:26px;flex-basis:340px;min-height:196px;padding:18px 18px 19px;width:340px}.review-card__text{font-size:15px;line-height:1.48}.review-card__name{font-size:17px}.review-card__position{font-size:14px}}@media (max-width:420px){.clients{padding:60px 0 64px}.clients__container{width:calc(100% - 24px)}.clients__label{font-size:15px}.clients__row--top .clients__track{margin-left:-90px}.clients__row--bottom .clients__track{margin-left:-220px}.review-card{border-radius:24px;flex-basis:300px;min-height:188px;padding:17px 17px 18px;width:300px}.review-card__text{font-size:14px}.review-card__avatar{flex-basis:44px;height:44px;width:44px}}.values{background:#fff;padding:46px 0 82px}.values__container{margin-inline:auto;width:min(1420px,100% - 40px)}.values__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 2px}.values__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:600;letter-spacing:-.052em;line-height:1.03;margin:0}.values__title span{color:#c2c2c2}.values__grid{display:grid;gap:32px;grid-template-columns:repeat(3,minmax(0,1fr));margin:58px auto 0;width:min(100%,966px)}.value-card{min-width:0;text-align:center}.value-card__media{align-items:center;background:#f2f2f2;border-radius:8px;display:flex;height:216px;justify-content:center}.value-card__media img{display:block;height:64px;opacity:.94;width:64px}.value-card__title{color:#111;font-size:16px;font-weight:800;letter-spacing:-.015em;line-height:1.18;margin:11px 0 0}.value-card__text{color:#888;font-size:12px;font-weight:400;letter-spacing:-.01em;line-height:1.28;margin:8px auto 0;max-width:276px}@media (max-width:1120px){.values__grid{gap:24px}.value-card__media{height:200px}}@media (max-width:760px){.values{padding:70px 0 72px}.values__container{width:min(100% - 32px,620px)}.values__title{font-size:clamp(36px,9vw,46px)}.values__grid{gap:28px;grid-template-columns:1fr;margin-top:34px}.value-card__media{height:220px}.value-card__title{font-size:17px;margin-top:12px}.value-card__text{font-size:14px;line-height:1.35;max-width:330px}}@media (max-width:420px){.values{padding:60px 0 64px}.values__container{width:calc(100% - 24px)}.values__label{font-size:15px}.values__grid{gap:24px}.value-card__media{height:196px}}.faq{background:#fff;padding:46px 0 83px}.faq__container{margin-inline:auto;width:min(1420px,100% - 40px)}.faq__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 2px}.faq__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:600;letter-spacing:-.052em;line-height:1.03;margin:0}.faq__title span{color:#c2c2c2}.faq__list{background:#fff;border:1px solid rgba(17,17,17,.16);border-radius:20px;margin:58px auto 0;overflow:hidden;width:min(100%,1256px)}.faq-item+.faq-item{border-top:1px solid rgba(17,17,17,.14)}.faq-item__button{align-items:center;background:transparent;border:0;color:#111;cursor:pointer;display:flex;font:inherit;font-size:16px;font-weight:400;gap:24px;justify-content:space-between;letter-spacing:-.01em;line-height:1.35;min-height:69px;padding:18px 24px 18px 20px;text-align:left;transition:background .2s ease;width:100%}@media (hover:hover) and (pointer:fine){.faq-item__button:hover{background:rgba(17,17,17,.025)}}.faq-item__button[aria-expanded=true] .faq-item__icon{transform:rotate(45deg)}.faq-item__icon{flex:0 0 18px;height:18px;position:relative;transition:transform .2s ease;width:18px}.faq-item__icon:after,.faq-item__icon:before{background:#111;border-radius:999px;content:"";height:1px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:11px}.faq-item__icon:after{height:11px;width:1px}.faq-item__panel{color:#888;font-size:15px;font-weight:400;letter-spacing:-.01em;line-height:1.48;padding:0 68px 22px 20px}.faq-item__panel p{margin:0;max-width:820px}@media (max-width:760px){.faq{padding:70px 0 72px}.faq__container{width:min(100% - 32px,620px)}.faq__title{font-size:clamp(36px,9vw,46px)}.faq__list{border-radius:18px;margin-top:34px}.faq-item__button{font-size:15px;min-height:64px;padding:17px 18px}.faq-item__panel{font-size:14px;padding:0 18px 18px}}@media (max-width:420px){.faq{padding:60px 0 64px}.faq__container{width:calc(100% - 24px)}.faq__label{font-size:15px}.faq-item__button{gap:16px;min-height:60px;padding:15px 16px}.faq-item__panel{padding:0 16px 17px}}.contact{background:#fff;padding:46px 0 88px}.contact__container{align-items:start;display:grid;gap:clamp(48px,6.5vw,150px);grid-template-columns:minmax(300px,470px) minmax(620px,1fr);margin-inline:auto;width:min(1420px,100% - 40px)}.contact__content{padding-top:0}.contact__label{color:#6f6f73;font-size:16px;font-weight:600;line-height:1.2;margin:0 0 8px}.contact__title{color:#333;font-size:clamp(42px,2.9vw,48px);font-weight:700;letter-spacing:-.052em;line-height:1.03;margin:0}.contact__title span{color:#c2c2c2}.contact__text{color:#888;font-size:19px;font-weight:400;letter-spacing:-.022em;line-height:1.42;margin:28px 0 0;max-width:440px}.contact-sentence{margin:0;width:100%}.contact-sentence__text{color:#111;font-size:clamp(32px,2.33vw,40px);font-weight:400;letter-spacing:-.055em;line-height:1.19;margin:0}.contact-sentence__actions{align-items:center;display:flex;gap:18px;margin-top:28px}.contact-sentence__submit{min-width:184px}.contact-sentence__status{color:#888;font-size:14px;letter-spacing:-.01em;line-height:1.35;margin:0;min-height:22px}.contact-sentence__status.is-success{color:#333}.contact-field{background:transparent;border:0;border-bottom:1px solid;border-radius:0;color:#c2c2c2;cursor:text;display:inline;min-width:1.5em;outline:none;padding:0 .04em;position:relative;transition:color .2s ease,border-color .2s ease,background .2s ease}.contact-field:focus-visible,.contact-field[contenteditable=true]{background:rgba(17,17,17,.035);border-color:#111;color:#111}.contact-field--selector{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.contact-field.is-filled{color:#111}.contact-field.is-error{background:rgba(215,58,49,.07);border-color:#d73a31;color:#d73a31}.contact-dropdown{background:#fff;border:1px solid rgba(17,17,17,.12);border-radius:16px;box-shadow:0 18px 45px rgba(17,17,17,.12);list-style:none;margin:0;max-width:min(320px,100vw - 24px);min-width:220px;padding:8px;position:absolute;z-index:80}.contact-dropdown li{border-radius:10px;color:#111;cursor:pointer;font-size:15px;font-weight:500;line-height:1.2;padding:11px 12px;transition:background .2s ease}@media (hover:hover) and (pointer:fine){.contact-dropdown li:hover{background:rgba(17,17,17,.055)}}.contact-date-input{height:24px;left:-1000px;opacity:0;pointer-events:auto;position:fixed;top:-1000px;width:24px}@media (max-width:1120px){.contact__container{gap:64px;grid-template-columns:minmax(280px,390px) minmax(520px,1fr)}.contact-sentence__text{font-size:clamp(30px,3.1vw,36px)}}@media (max-width:760px){.contact{padding:70px 0 72px}.contact__container{gap:34px;grid-template-columns:1fr;width:min(100% - 32px,620px)}.contact__title{font-size:clamp(36px,9vw,46px)}.contact__text{font-size:17px;margin-top:20px}.contact-sentence__text{font-size:clamp(26px,7vw,36px);line-height:1.22}.contact-sentence__actions{align-items:flex-start;flex-direction:column;gap:12px}}@media (max-width:420px){.contact{padding:60px 0 64px}.contact__container{width:calc(100% - 24px)}.contact__label{font-size:15px}.contact-sentence__text{font-size:25px}.contact-dropdown{min-width:200px}}.site-footer{background:#fff;padding:82px 0 50px}.site-footer__container{margin-inline:auto;width:min(1192px,100% - 40px)}.site-footer__top{align-items:start;border-bottom:1px solid rgba(17,17,17,.16);display:grid;gap:clamp(70px,6.8vw,130px);grid-template-columns:minmax(320px,1fr) 180px 262px;padding-bottom:66px}.site-footer__brand{align-items:flex-start;display:flex;flex-direction:column}.site-footer__logo{display:inline-flex;transition:opacity .2s ease;width:190px}.site-footer__logo img{height:auto;width:190px}@media (hover:hover) and (pointer:fine){.site-footer__logo:hover{opacity:.72}}.site-footer__description{color:#888;font-size:18px;font-weight:400;letter-spacing:-.022em;line-height:1.55;margin:29px 0 0;max-width:330px}.site-footer__title{color:#111;font-size:14px;font-weight:500;letter-spacing:-.01em;line-height:1.2;margin:3px 0 22px;text-transform:uppercase}.site-footer__list{color:#888;display:flex;flex-direction:column;font-size:17px;font-weight:400;gap:14px;letter-spacing:-.018em;line-height:1.35;list-style:none;margin:0;padding:0}.site-footer__list a{transition:color .2s ease}@media (hover:hover) and (pointer:fine){.site-footer__list a:hover{color:#111}}.site-footer__bottom{align-items:center;color:#888;display:flex;font-size:15px;font-weight:400;gap:24px;justify-content:space-between;letter-spacing:-.02em;line-height:1.35;padding-top:33px}.site-footer__bottom p{margin:0}.site-footer__bottom a{transition:color .2s ease}@media (hover:hover) and (pointer:fine){.site-footer__bottom a:hover{color:#111}}@media (max-width:1120px){.site-footer__top{gap:54px;grid-template-columns:minmax(280px,1fr) 160px 240px}}@media (max-width:760px){.site-footer{padding:64px 0 40px}.site-footer__container{width:min(100% - 32px,620px)}.site-footer__top{gap:40px 32px;grid-template-columns:1fr 1fr;padding-bottom:42px}.site-footer__brand{grid-column:1/-1}.site-footer__description{font-size:17px;margin-top:22px}.site-footer__bottom{align-items:flex-start;flex-direction:column;gap:12px;padding-top:26px}}@media (max-width:520px){.site-footer{padding:52px 0 34px}.site-footer__container{width:calc(100% - 24px)}.site-footer__top{gap:34px;grid-template-columns:1fr}.site-footer__logo,.site-footer__logo img{width:168px}.site-footer__title{margin-bottom:16px}.site-footer__list{font-size:16px;gap:12px}.site-footer__bottom{font-size:14px}} \ No newline at end of file diff --git a/assets/img/expertise-case-dark.jpg b/assets/img/expertise-case-dark.jpg new file mode 100644 index 0000000..ec96ba4 Binary files /dev/null and b/assets/img/expertise-case-dark.jpg differ diff --git a/assets/img/expertise-case-laptop.jpg b/assets/img/expertise-case-laptop.jpg new file mode 100644 index 0000000..a23b436 Binary files /dev/null and b/assets/img/expertise-case-laptop.jpg differ diff --git a/assets/img/expertise-case-web.jpg b/assets/img/expertise-case-web.jpg new file mode 100644 index 0000000..be6ab54 Binary files /dev/null and b/assets/img/expertise-case-web.jpg differ diff --git a/assets/img/icon-aistudio.svg b/assets/img/icon-aistudio.svg new file mode 100644 index 0000000..9203662 --- /dev/null +++ b/assets/img/icon-aistudio.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/img/icon-bitrix.svg b/assets/img/icon-bitrix.svg new file mode 100644 index 0000000..64c17e8 --- /dev/null +++ b/assets/img/icon-bitrix.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/img/icon-cloudflare.svg b/assets/img/icon-cloudflare.svg new file mode 100644 index 0000000..caa2115 --- /dev/null +++ b/assets/img/icon-cloudflare.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/img/icon-docker.svg b/assets/img/icon-docker.svg new file mode 100644 index 0000000..0fa5a03 --- /dev/null +++ b/assets/img/icon-docker.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/img/icon-git.svg b/assets/img/icon-git.svg new file mode 100644 index 0000000..0948683 --- /dev/null +++ b/assets/img/icon-git.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/img/icon-google.svg b/assets/img/icon-google.svg new file mode 100644 index 0000000..1fced85 --- /dev/null +++ b/assets/img/icon-google.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/img/icon-modx.svg b/assets/img/icon-modx.svg new file mode 100644 index 0000000..b2c81bf --- /dev/null +++ b/assets/img/icon-modx.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/img/icon-mysql.svg b/assets/img/icon-mysql.svg new file mode 100644 index 0000000..280f7a4 --- /dev/null +++ b/assets/img/icon-mysql.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/img/icon-n8n.svg b/assets/img/icon-n8n.svg new file mode 100644 index 0000000..5bc9e13 --- /dev/null +++ b/assets/img/icon-n8n.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/img/icon-nuxt.svg b/assets/img/icon-nuxt.svg new file mode 100644 index 0000000..27b964c --- /dev/null +++ b/assets/img/icon-nuxt.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/icon-openai.svg b/assets/img/icon-openai.svg new file mode 100644 index 0000000..335425a --- /dev/null +++ b/assets/img/icon-openai.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/img/icon-php.svg b/assets/img/icon-php.svg new file mode 100644 index 0000000..95a8ef0 --- /dev/null +++ b/assets/img/icon-php.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/img/icon-placeholder.svg b/assets/img/icon-placeholder.svg new file mode 100644 index 0000000..a0432e8 --- /dev/null +++ b/assets/img/icon-placeholder.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/img/icon-react.svg b/assets/img/icon-react.svg new file mode 100644 index 0000000..061fc8a --- /dev/null +++ b/assets/img/icon-react.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/img/icon-shopify.svg b/assets/img/icon-shopify.svg new file mode 100644 index 0000000..e20309c --- /dev/null +++ b/assets/img/icon-shopify.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/img/icon-star.svg b/assets/img/icon-star.svg new file mode 100644 index 0000000..4e770f6 --- /dev/null +++ b/assets/img/icon-star.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/img/icon-tilda.svg b/assets/img/icon-tilda.svg new file mode 100644 index 0000000..26732e0 --- /dev/null +++ b/assets/img/icon-tilda.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/icon-vk.svg b/assets/img/icon-vk.svg new file mode 100644 index 0000000..16b98fd --- /dev/null +++ b/assets/img/icon-vk.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/img/icon-vue.svg b/assets/img/icon-vue.svg new file mode 100644 index 0000000..9df0197 --- /dev/null +++ b/assets/img/icon-vue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/icon-woo.svg b/assets/img/icon-woo.svg new file mode 100644 index 0000000..a373c31 --- /dev/null +++ b/assets/img/icon-woo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/img/icon-wordpress.svg b/assets/img/icon-wordpress.svg new file mode 100644 index 0000000..e9ed442 --- /dev/null +++ b/assets/img/icon-wordpress.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/img/icon-yandex.svg b/assets/img/icon-yandex.svg new file mode 100644 index 0000000..30a98a4 --- /dev/null +++ b/assets/img/icon-yandex.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/img/logo.svg b/assets/img/logo.svg new file mode 100644 index 0000000..89b14eb --- /dev/null +++ b/assets/img/logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..8740333 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,561 @@ +(function ($) { + 'use strict'; + + $(function () { + const $expertise = $('.expertise'); + + if (!$expertise.length || typeof Swiper !== 'function') { + return; + } + + const $slider = $expertise.find('.expertise__cases'); + const $wrapper = $expertise.find('.expertise__track'); + const $tabs = $expertise.find('.expertise__tab'); + const sourceSlides = $wrapper.find('.expertise-card').map(function () { + const $slide = $(this); + + return { + group: $slide.data('expertise-group'), + html: this.outerHTML, + }; + }).get(); + + let expertiseSwiper = null; + let activeFilter = null; + + const getSlidesByFilter = function (filter) { + return sourceSlides.filter(function (slide) { + return slide.group === filter; + }); + }; + + const updateTabs = function (filter) { + $tabs.each(function () { + const $tab = $(this); + const isActive = $tab.data('expertise-filter') === filter; + + $tab + .toggleClass('is-active', isActive) + .attr({ + 'aria-selected': String(isActive), + 'aria-pressed': String(isActive), + }); + }); + }; + + const destroySlider = function () { + if (!expertiseSwiper) { + return; + } + + expertiseSwiper.destroy(true, true); + expertiseSwiper = null; + }; + + const getLoopSlidesHtml = function (slides) { + // Для loop в Swiper важно, чтобы реальных слайдов было заметно больше, + // чем помещается в видимой области. Иначе Swiper отключает loop на широких экранах. + const minSlidesForLoop = 24; + const repeatCount = Math.max(1, Math.ceil(minSlidesForLoop / slides.length)); + let html = ''; + + for (let i = 0; i < repeatCount; i += 1) { + slides.forEach(function (slide) { + html += slide.html; + }); + } + + return html; + }; + + const initSlider = function () { + const slidesCount = $wrapper.children('.swiper-slide').length; + const loopEnabled = slidesCount > 1; + + expertiseSwiper = new Swiper($slider[0], { + slidesPerView: 'auto', + spaceBetween: 16, + speed: 650, + grabCursor: true, + allowTouchMove: true, + watchOverflow: false, + loop: loopEnabled, + loopedSlides: Math.min(12, slidesCount), + loopAdditionalSlides: Math.min(12, slidesCount), + loopPreventsSliding: false, + normalizeSlideIndex: true, + observer: true, + observeParents: true, + breakpoints: { + 768: { + spaceBetween: 24, + }, + 1200: { + spaceBetween: 32, + }, + }, + }); + }; + + const renderSlides = function (filter) { + const slides = getSlidesByFilter(filter); + + if (!slides.length) { + return; + } + + destroySlider(); + $wrapper.html(getLoopSlidesHtml(slides)); + initSlider(); + }; + + const setActiveFilter = function (filter) { + if (activeFilter === filter || !getSlidesByFilter(filter).length) { + return; + } + + activeFilter = filter; + updateTabs(filter); + renderSlides(filter); + }; + + const initialFilter = $tabs.filter('.is-active').first().data('expertise-filter') + || $tabs.first().data('expertise-filter'); + + setActiveFilter(initialFilter); + + $tabs.on('click', function () { + setActiveFilter($(this).data('expertise-filter')); + }); + }); +})(jQuery); + + +(function ($) { + 'use strict'; + + $(function () { + const $results = $('.results'); + + if (!$results.length) { + return; + } + + $results.addClass('is-animation-ready'); + + const showResults = function (target) { + $(target).addClass('is-in-view'); + }; + + if (!('IntersectionObserver' in window)) { + $results.each(function () { + showResults(this); + }); + + return; + } + + const observer = new IntersectionObserver(function (entries, currentObserver) { + entries.forEach(function (entry) { + if (!entry.isIntersecting) { + return; + } + + showResults(entry.target); + currentObserver.unobserve(entry.target); + }); + }, { + threshold: 0.24, + rootMargin: '0px 0px -12% 0px', + }); + + $results.each(function () { + observer.observe(this); + }); + }); +})(jQuery); + +(function ($) { + 'use strict'; + + $(function () { + const $faq = $('.faq'); + + if (!$faq.length) { + return; + } + + $faq.on('click', '.faq-item__button', function () { + const $button = $(this); + const $item = $button.closest('.faq-item'); + const $panel = $item.find('.faq-item__panel').first(); + const isOpen = $button.attr('aria-expanded') === 'true'; + + $button.attr('aria-expanded', String(!isOpen)); + + if (isOpen) { + $panel.stop(true, true).slideUp(220, function () { + $panel.attr('hidden', true).removeAttr('style'); + }); + } else { + $panel.removeAttr('hidden').hide().stop(true, true).slideDown(220, function () { + $panel.removeAttr('style'); + }); + } + }); + }); +})(jQuery); + + +(function ($) { + 'use strict'; + + $(function () { + const $forms = $('.contact-sentence'); + + if (!$forms.length) { + return; + } + + const options = { + task: ['лендинг', 'интернет-магазин', 'интеграцию', 'дизайн', 'доработку сайта'], + method: ['Telegram', 'WhatsApp', 'звонок', 'email'], + time: ['09:00–12:00', '12:00–15:00', '15:00–18:00', 'любое время'], + }; + + let $dateInput = $('.contact-date-input'); + + if (!$dateInput.length) { + $dateInput = $('').appendTo('body'); + } + + const cleanValue = function ($field) { + const text = $.trim($field.text()).replace(/\s+/g, ' '); + const placeholder = $.trim($field.data('placeholder') || ''); + const normalized = text.replace(/[()]/g, '').replace(/▾/g, '').trim(); + + if ($field.hasClass('is-placeholder') || normalized === placeholder) { + return ''; + } + + return normalized; + }; + + const getPlaceholderText = function ($field) { + const placeholder = $.trim($field.data('placeholder') || ''); + const withArrow = $field.hasClass('contact-field--selector'); + + return '(' + placeholder + (withArrow ? ' ▾' : '') + ')'; + }; + + const setFieldValue = function ($field, value, isPlaceholder) { + const text = isPlaceholder ? getPlaceholderText($field) : value; + + $field + .text(text) + .toggleClass('is-placeholder', !!isPlaceholder) + .toggleClass('is-filled', !isPlaceholder && !!value) + .removeClass('is-error'); + + updateHidden($field.closest('form')); + }; + + const updateHidden = function ($form) { + $form.find('.contact-field').each(function () { + const $field = $(this); + const name = $field.data('field'); + + if (!name) { + return; + } + + $form.find('input[name="' + name + '"]').val(cleanValue($field)); + }); + }; + + const selectAll = function (el) { + const range = document.createRange(); + const selection = window.getSelection(); + + range.selectNodeContents(el); + selection.removeAllRanges(); + selection.addRange(range); + }; + + const setCaretEnd = function (el) { + const range = document.createRange(); + const selection = window.getSelection(); + + range.selectNodeContents(el); + range.collapse(false); + selection.removeAllRanges(); + selection.addRange(range); + }; + + const formatPhone = function (value) { + const raw = String(value || '').replace(/\s+/g, ''); + const hasPlus = raw.indexOf('+') === 0; + const digits = raw.replace(/\D/g, '').slice(0, 11); + + if (!digits) { + return hasPlus ? '+' : ''; + } + + let formatted = hasPlus || digits.charAt(0) === '7' ? '+' : ''; + + formatted += digits.slice(0, 1); + + if (digits.length > 1) { + formatted += ' ' + digits.slice(1, 4); + } + + if (digits.length > 4) { + formatted += ' ' + digits.slice(4, 7); + } + + if (digits.length > 7) { + formatted += ' ' + digits.slice(7, 9); + } + + if (digits.length > 9) { + formatted += ' ' + digits.slice(9, 11); + } + + return formatted; + }; + + const openDropdown = function ($field) { + const type = $field.data('type'); + const values = options[type] || []; + + if (!values.length) { + return; + } + + $('.contact-dropdown').remove(); + + const rect = $field[0].getBoundingClientRect(); + const $dropdown = $(''); + + values.forEach(function (value) { + $('
  • ').text(value).appendTo($dropdown); + }); + + $('body').append($dropdown); + + const left = Math.min(rect.left + window.pageXOffset - 10, window.pageXOffset + window.innerWidth - $dropdown.outerWidth() - 12); + + $dropdown.css({ + top: rect.bottom + window.pageYOffset + 8, + left: Math.max(12, left), + }); + + $dropdown.on('click', 'li', function () { + setFieldValue($field, $(this).text(), false); + $dropdown.remove(); + }); + }; + + const openDatePicker = function ($field) { + const rect = $field[0].getBoundingClientRect(); + const picker = $dateInput[0]; + + $dateInput + .val('') + .css({ + left: rect.left + 'px', + top: rect.top + 'px', + width: Math.max(rect.width, 24) + 'px', + height: Math.max(rect.height, 24) + 'px', + }) + .off('change.contact') + .one('change.contact', function () { + if (this.value) { + setFieldValue($field, this.value, false); + } + }); + + requestAnimationFrame(function () { + try { + if (typeof picker.showPicker === 'function') { + picker.showPicker(); + } else { + picker.focus(); + picker.click(); + } + } catch (error) { + picker.focus(); + picker.click(); + } + }); + }; + + const isEmail = function (value) { + return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value); + }; + + const validateForm = function ($form) { + let valid = true; + let $firstError = null; + + const markError = function ($field) { + valid = false; + $field.addClass('is-error'); + + if (!$firstError) { + $firstError = $field; + } + }; + + $form.find('.contact-field').removeClass('is-error'); + + const required = ['name', 'task', 'phone', 'email', 'method', 'date', 'time']; + + required.forEach(function (name) { + const $field = $form.find('.contact-field[data-field="' + name + '"]'); + const value = cleanValue($field); + + if (!value) { + markError($field); + } + }); + + const $name = $form.find('.contact-field[data-field="name"]'); + const $phone = $form.find('.contact-field[data-field="phone"]'); + const $email = $form.find('.contact-field[data-field="email"]'); + const name = cleanValue($name); + const phone = cleanValue($phone); + const email = cleanValue($email); + + if (name && name.length < 2) { + markError($name); + } + + if (phone && phone.replace(/\D/g, '').length < 10) { + markError($phone); + } + + if (email && !isEmail(email)) { + markError($email); + } + + if (!valid && $firstError) { + $form.find('.contact-sentence__status') + .removeClass('is-success') + .text('Заполните подсвеченные поля.'); + $('html, body').animate({ scrollTop: $firstError.offset().top - 120 }, 260); + } + + return valid; + }; + + $forms.each(function () { + updateHidden($(this)); + }); + + $(document).on('click keydown', '.contact-field--editable', function (event) { + const $field = $(this); + + if ($field.attr('contenteditable')) { + return; + } + + if (event.type === 'keydown' && event.key !== 'Enter' && event.key !== ' ') { + return; + } + + event.preventDefault(); + + const value = cleanValue($field); + + $field.attr('contenteditable', 'true'); + $field.text(value); + $field.removeClass('is-placeholder is-error'); + $field.focus(); + selectAll($field[0]); + }); + + $(document).on('input', '.contact-field--editable', function () { + const $field = $(this); + + if ($field.data('type') === 'phone') { + $field.text(formatPhone($field.text())); + setCaretEnd(this); + } + + updateHidden($field.closest('form')); + }); + + $(document).on('paste', '.contact-field--editable[data-type="phone"]', function (event) { + event.preventDefault(); + + const clipboard = event.originalEvent.clipboardData || window.clipboardData; + const text = clipboard ? clipboard.getData('text') : ''; + + $(this).text(formatPhone(text)); + setCaretEnd(this); + updateHidden($(this).closest('form')); + }); + + $(document).on('blur keydown', '.contact-field--editable[contenteditable="true"]', function (event) { + if (event.type === 'keydown' && event.key !== 'Enter') { + return; + } + + event.preventDefault(); + + const $field = $(this); + const value = $.trim($field.text()).replace(/\s+/g, ' '); + + $field.removeAttr('contenteditable'); + + if (!value) { + setFieldValue($field, '', true); + } else { + setFieldValue($field, value, false); + } + }); + + $(document).on('click keydown', '.contact-field--selector', function (event) { + if (event.type === 'keydown' && event.key !== 'Enter' && event.key !== ' ') { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + const $field = $(this); + + if ($field.data('type') === 'date') { + openDatePicker($field); + } else { + openDropdown($field); + } + }); + + $(document).on('click', function () { + $('.contact-dropdown').remove(); + }); + + $forms.on('submit', function (event) { + event.preventDefault(); + + const $form = $(this); + const $status = $form.find('.contact-sentence__status'); + + updateHidden($form); + + if (!validateForm($form)) { + return; + } + + const payload = Object.fromEntries(new FormData($form[0]).entries()); + + console.log('Contact form payload:', payload); + + $status + .addClass('is-success') + .text('Заявка подготовлена. Подключите обработчик отправки формы.'); + }); + }); +})(jQuery); diff --git a/assets/scss/_base.scss b/assets/scss/_base.scss new file mode 100644 index 0000000..a690452 --- /dev/null +++ b/assets/scss/_base.scss @@ -0,0 +1,150 @@ +@use "vars" as *; +@use "mixins" as *; + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +body { + min-width: 320px; + margin: 0; + font-family: $font-main; + font-size: 16px; + font-weight: 400; + line-height: 1.4; + color: $color-black; + background: $color-white; + text-rendering: geometricPrecision; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + color: inherit; + text-decoration: none; +} + +button, +a { + -webkit-tap-highlight-color: transparent; +} + +img, +svg { + display: block; + max-width: 100%; +} + +.container { + width: min($container-width, calc(100% - 32px)); + margin-inline: auto; +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 46px; + padding: 0 26px; + border: 1px solid transparent; + border-radius: $radius-pill; + font-size: 14px; + font-weight: 600; + line-height: 1; + white-space: nowrap; + transition: transform $transition-fast, border-color $transition-fast, background-color $transition-fast, color $transition-fast; + + @include hover-supported { + transform: translateY(-2px); + } + + &--dark { + min-width: 172px; + gap: 12px; + color: $color-white; + background: $color-black; + box-shadow: 0 18px 38px rgba($color-black, 0.12); + } + + &--light { + min-width: 150px; + color: $color-btn-light-text; + background: rgba($color-white, 0.78); + border-color: rgba($color-black, 0.14); + } +} + +.site-header { + position: fixed; + top: 14px; + left: 50%; + z-index: 20; + width: min(505px, calc(100% - 32px)); + transform: translateX(-50%); + + &__inner { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 50px; + padding: 0 20px; + border: 1px solid rgba($color-black, 0.06); + border-radius: $radius-pill; + background: rgba(248, 248, 248, 0.86); + backdrop-filter: blur(16px); + } + + &__logo { + flex: 0 0 auto; + + img { + width: 100px; + height: auto; + } + } + + &__nav { + display: flex; + align-items: center; + gap: 22px; + color: $color-header-text; + font-size: 12px; + font-weight: 400; + line-height: 1; + + a { + transition: color $transition-fast; + + @include hover-supported { + color: $color-black; + } + } + } +} + +@include media-down($bp-mobile) { + .site-header { + top: 10px; + width: calc(100% - 20px); + + &__inner { + min-height: 46px; + padding: 0 16px; + } + + &__logo img { + width: 92px; + } + + &__nav { + gap: 12px; + font-size: 11px; + } + } +} diff --git a/assets/scss/_fonts.scss b/assets/scss/_fonts.scss new file mode 100644 index 0000000..058f5c4 --- /dev/null +++ b/assets/scss/_fonts.scss @@ -0,0 +1 @@ +/* Nunito Sans is connected in index.html via Google Fonts. */ diff --git a/assets/scss/_mixins.scss b/assets/scss/_mixins.scss new file mode 100644 index 0000000..5795a7f --- /dev/null +++ b/assets/scss/_mixins.scss @@ -0,0 +1,13 @@ +@mixin hover-supported { + @media (hover: hover) and (pointer: fine) { + &:hover { + @content; + } + } +} + +@mixin media-down($width) { + @media (max-width: $width) { + @content; + } +} \ No newline at end of file diff --git a/assets/scss/_reset.scss b/assets/scss/_reset.scss new file mode 100644 index 0000000..0bd81cf --- /dev/null +++ b/assets/scss/_reset.scss @@ -0,0 +1,134 @@ +/* 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-size: 100%; + font: inherit; + 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; +} \ No newline at end of file diff --git a/assets/scss/_vars.scss b/assets/scss/_vars.scss new file mode 100644 index 0000000..4cb3a25 --- /dev/null +++ b/assets/scss/_vars.scss @@ -0,0 +1,29 @@ +$font-main: "Nunito Sans", "Segoe UI", Arial, sans-serif; + +$color-black: #111111; +$color-dark: #333333; +$color-gray: #C2C2C2; +$color-light-gray: #c9c9cc; +$color-border: rgba(15, 15, 16, 0.12); +$color-white: #ffffff; +$color-accent: #C7FF4F; +$color-red: #ff1d25; +$color-page-start: #fbfff4; +$color-muted-text: #888888; +$color-muted-text-soft: #828286; +$color-header-text: #6f6f73; +$color-badge-text: #3b3b3e; +$color-btn-light-text: #202023; +$color-launch-bg: #0b0b0c; +$color-section-gray: #f2f2f2; + +$container-width: 1200px; +$radius-pill: 999px; +$radius-card: 11px; + +$bp-desktop-md: 1120px; +$bp-tablet: 760px; +$bp-mobile: 520px; +$bp-mobile-sm: 420px; + +$transition-fast: 0.2s ease; diff --git a/assets/scss/main.scss b/assets/scss/main.scss new file mode 100644 index 0000000..8e0c28d --- /dev/null +++ b/assets/scss/main.scss @@ -0,0 +1,2964 @@ +@use "fonts"; +@use "reset"; +@use "vars" as *; +@use "mixins" as *; +@use "base"; + +.page--landing { + min-height: 100vh; + overflow: hidden; + background: #fff; +} + +.hero { + position: relative; + height: 100vh; + max-height: 900px; + overflow: hidden; + border-bottom: 1px solid rgba($color-black, 0.05); + + &::after { + content: ""; + position: absolute; + right: -155px; + bottom: 36px; + width: 560px; + height: 260px; + border-radius: 50%; + background: rgba($color-black, 0.05); + filter: blur(56px); + pointer-events: none; + } + + &::before { + content: ""; + position: absolute; + left: -155px; + top: -156px; + width: 560px; + height: 260px; + border-radius: 50%; + background: rgba($color-accent, 0.1); + filter: blur(56px); + pointer-events: none; + } + + + &__container { + position: relative; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + } + + &__content { + position: relative; + z-index: 2; + width: min(850px, 100%); + margin-inline: auto; + text-align: center; + } + + &__badge { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + min-height: 34px; + padding: 0 20px; + border: 1px solid rgba($color-black, 0.13); + border-radius: $radius-pill; + color: $color-black; + background: rgba($color-white, 0.82); + font-size: 14px; + font-weight: 500; + line-height: 1; + + span { + position: relative; + width: 10px; + height: 10px; + flex: 0 0 auto; + color: $color-dark; + } + } + + &__title { + margin-top: 36px; + color: $color-dark; + font-size: 82px; + font-weight: 700; + line-height: 0.95; + letter-spacing: -0.058em; + + span { + color: $color-light-gray; + } + } + + &__text { + margin: 36px auto 0; + color: $color-muted-text; + font-size: 16px; + font-weight: 400; + line-height: 1.24; + letter-spacing: 0.002em; + } + + &__actions { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + margin-top: 36px; + + .btn{ + font-size: 16px; + } + } + + &__tags { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 15px 34px; + margin-top: 36px; + color: $color-muted-text; + font-size: 14px; + font-weight: 600; + line-height: 1.2; + + li { + position: relative; + padding-left: 15px; + + &::before { + content: ""; + position: absolute; + top: 50%; + left: 0; + width: 6px; + height: 6px; + border-radius: 50%; + background: $color-accent; + transform: translateY(-50%); + } + } + } +} + +.hero-card { + position: absolute; + z-index: 3; + border: 1px solid $color-border; + border-radius: $radius-card; + backdrop-filter: blur(12px); + + &--conversion { + bottom: calc(50% - 190px); + left: calc(50% - 462px); + display: flex; + align-items: center; + gap: 14px; + width: 146px; + min-height: 84px; + padding: 17px 18px; + background: rgba($color-white, 0.84); + box-shadow: 0 17px 26px rgba($color-black, 0.18); + + .hero-card__icon { + display: flex; + align-items: center; + justify-content: center; + width: 38px; + height: 38px; + flex: 0 0 38px; + border-radius: 50%; + background: $color-accent; + + img { + width: 20px; + height: 20px; + } + } + + span { + display: block; + margin-bottom: 1px; + color: $color-muted-text; + font-size: 14px; + font-weight: 400; + line-height: 1.2; + } + + strong { + display: block; + color: #141416; + font-size: 24px; + font-weight: 700; + line-height: 1; + letter-spacing: -0.04em; + } + } + + &--launch { + left: calc(50% + 380px); + width: fit-content; + min-height: 70px; + padding: 14px 20px; + color: $color-white; + background: $color-launch-bg; + border-color: rgba($color-white, 0.04); + box-shadow: 0 20px 35px rgba($color-black, 0.25); + + span, + strong { + display: block; + } + + span { + font-size: 18px; + font-weight: 600; + line-height: 1.05; + } + + strong { + margin-top: 5px; + color: $color-accent; + font-size: 16px; + font-weight: 400; + line-height: 1; + } + } +} + + +@include media-down($bp-desktop-md) { + .hero { + max-height: 860px; + + &__title { + font-size: clamp(62px, 7.2vw, 78px); + } + + &__text { + max-width: 620px; + } + } + + .hero-card { + &--conversion { + left: max(24px, calc(50% - 410px)); + bottom: calc(50% - 176px); + } + + &--launch { + left: auto; + right: max(24px, calc(50% - 500px)); + } + } +} + +@include media-down($bp-tablet) { + .hero { + height: auto; + min-height: 100svh; + max-height: none; + padding: 104px 0 56px; + + &::before { + left: -250px; + top: -110px; + width: 440px; + height: 250px; + filter: blur(48px); + } + + &::after { + right: -250px; + bottom: -24px; + width: 460px; + height: 260px; + filter: blur(50px); + } + + &__container { + height: auto; + min-height: calc(100svh - 160px); + flex-direction: column; + justify-content: center; + } + + &__content { + width: min(620px, 100%); + } + + &__badge { + min-height: 32px; + padding: 0 16px; + font-size: 13px; + } + + &__title { + margin-top: 26px; + font-size: clamp(46px, 10.2vw, 64px); + line-height: 0.98; + letter-spacing: -0.055em; + text-wrap: balance; + } + + &__text { + max-width: 520px; + margin-top: 24px; + font-size: 15px; + line-height: 1.36; + } + + &__actions { + flex-wrap: wrap; + gap: 12px; + margin-top: 28px; + + .btn { + min-width: 160px; + min-height: 46px; + font-size: 15px; + } + } + + &__tags { + gap: 11px 22px; + margin-top: 28px; + font-size: 13px; + } + } + + .hero-card { + position: relative; + inset: auto; + + &--conversion { + left: auto; + bottom: auto; + width: 146px; + min-height: 76px; + margin-top: 34px; + padding: 14px 16px; + transform: translateX(-72px); + box-shadow: 0 14px 24px rgba($color-black, 0.14); + + .hero-card__icon { + width: 34px; + height: 34px; + flex-basis: 34px; + + img { + width: 18px; + height: 18px; + } + } + + span { + font-size: 13px; + } + + strong { + font-size: 22px; + } + } + + &--launch { + left: auto; + right: auto; + min-height: 64px; + margin-top: -18px; + padding: 12px 18px; + transform: translateX(76px); + box-shadow: 0 16px 28px rgba($color-black, 0.2); + + span { + font-size: 16px; + } + + strong { + font-size: 15px; + } + } + } +} + +@include media-down($bp-mobile) { + .hero { + min-height: 100svh; + padding: 92px 0 44px; + + &__container { + width: calc(100% - 24px); + min-height: calc(100svh - 136px); + } + + &__badge { + min-height: 30px; + padding: 0 14px; + font-size: 12px; + } + + &__title { + margin-top: 22px; + font-size: clamp(37px, 11.5vw, 50px); + line-height: 1; + letter-spacing: -0.05em; + } + + &__text { + margin-top: 20px; + font-size: 14px; + line-height: 1.42; + } + + &__actions { + width: min(100%, 330px); + margin: 26px auto 0; + flex-direction: column; + gap: 10px; + + .btn { + width: 100%; + min-width: 0; + min-height: 48px; + } + } + + &__tags { + width: min(100%, 330px); + margin: 24px auto 0; + justify-content: flex-start; + gap: 10px 18px; + font-size: 12px; + + li { + padding-left: 13px; + } + } + } + + .hero-card { + &--conversion { + margin-top: 28px; + transform: translateX(-48px); + } + + &--launch { + transform: translateX(48px); + } + } +} + +@include media-down($bp-mobile-sm) { + .hero { + padding: 86px 0 38px; + + &__container { + width: calc(100% - 22px); + min-height: calc(100svh - 124px); + } + + &__title { + font-size: clamp(34px, 9.6vw, 38px); + letter-spacing: -0.044em; + } + + &__tags { + justify-content: center; + } + } + + .hero-card { + &--conversion, + &--launch { + transform: none; + } + + &--conversion { + margin-top: 24px; + } + + &--launch { + margin-top: 10px; + } + } +} +.results { + position: relative; + min-height: 100vh; + overflow: hidden; + + &__container { + position: relative; + height: 100vh; + min-height: 680px; + display: flex; + align-items: center; + justify-content: center; + } + + &__content { + position: relative; + z-index: 2; + width: min(1120px, 100%); + text-align: center; + } + + &__label { + margin-bottom: 14px; + color: $color-header-text; + font-size: 16px; + font-weight: 700; + line-height: 1.1; + } + + &__slider { + width: min(1120px, 100%); + margin-inline: auto; + position: relative; + height: 190px; + overflow: visible; + } + + &__track { + position: relative; + height: 100%; + } + + &__slide { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + min-height: 100%; + visibility: hidden; + pointer-events: none; + transition: opacity 0.35s ease; + + &.is-active { + opacity: 1; + visibility: visible; + pointer-events: auto; + } + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(40px, 4.6vw, 72px); + font-weight: 700; + line-height: 1.03; + letter-spacing: -0.02em; + transform: translateY(26px); + transition: opacity 0.45s ease, transform 0.55s ease; + } + + &__slide.is-active .results__title { + opacity: 1; + transform: translateY(0); + } + + &__dots { + margin-top: 28px; + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + + span { + width: 8px; + height: 8px; + border-radius: 50%; + background: rgba($color-black, 0.22); + transition: width 0.3s ease, background-color 0.3s ease; + + &.is-active { + width: 24px; + border-radius: 999px; + background: $color-dark; + } + } + } + + &__icons { + position: absolute; + inset: 0; + pointer-events: none; + height: 200%; + transform: translateY(-23%); + } + + &__icon { + position: absolute; + width: 45px; + height: 45px; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + background: var(--icon-bg, $color-white); + box-shadow: 0 10px 20px rgba($color-black, 0.07); + opacity: 1; + transform: scale(1) translateY(16px); + transition: transform 0.55s cubic-bezier(0.21, 1, 0.31, 1), opacity 0.45s ease; + + &.is-visible { + opacity: 1; + transform: scale(1) translateY(0); + } + + img { + width: 32px; + height: 32px; + object-fit: contain; + } + + &--yandex { + top: 16px; + left: 92px; + } + + &--wordpress { + top: 84px; + left: 238px; + } + + &--shopify { + top: 36px; + left: 540px; + } + + &--aistudio { + top: 22px; + right: 240px; + } + + &--bitrix { + top: 78px; + right: 86px; + } + + &--cloudflare { + top: 154px; + right: 168px; + } + + &--google { + right: 94px; + bottom: 128px; + } + + &--openai { + right: 298px; + bottom: 34px; + } + + &--tilda { + bottom: 58px; + left: 156px; + } + + &--n8n { + bottom: 96px; + left: 388px; + } + + &--vk { + left: 0; + top: 196px; + } + } + + &.is-static { + .results__slider { + height: auto; + } + + .results__track { + display: grid; + gap: 12px; + height: auto; + } + + .results__slide { + position: relative; + inset: auto; + min-height: 0; + opacity: 1; + visibility: visible; + pointer-events: auto; + } + + .results__title { + opacity: 1; + transform: none; + } + + .results__icon { + opacity: 1; + transform: none; + } + } + + &.is-animation-ready { + .results__label { + opacity: 0; + transform: translateY(14px); + will-change: opacity, transform; + } + + .results__title { + opacity: 0; + transform: translateY(46px); + will-change: opacity, transform; + } + + .results__icon { + opacity: 0; + transform: scale(0.86) translateY(36px) rotate(-4deg); + will-change: opacity, transform; + } + } + + &.is-animation-ready.is-in-view { + .results__label { + animation: resultsFadeUp 0.65s cubic-bezier(0.21, 1, 0.31, 1) 0.1s forwards; + } + + .results__title { + animation: resultsTitleIn 0.8s cubic-bezier(0.21, 1, 0.31, 1) 0.22s forwards; + } + + .results__icon { + animation: + resultsIconIn 0.72s cubic-bezier(0.21, 1, 0.31, 1) var(--results-icon-delay, 0s) forwards, + resultsIconFloat 5.8s ease-in-out calc(var(--results-icon-delay, 0s) + 0.78s) infinite; + } + + .results__icon:nth-child(1) { + --results-icon-delay: 0.04s; + --results-float-offset: -8px; + } + + .results__icon:nth-child(2) { + --results-icon-delay: 0.1s; + --results-float-offset: 7px; + } + + .results__icon:nth-child(3) { + --results-icon-delay: 0.16s; + --results-float-offset: -6px; + } + + .results__icon:nth-child(4) { + --results-icon-delay: 0.22s; + --results-float-offset: 8px; + } + + .results__icon:nth-child(5) { + --results-icon-delay: 0.28s; + --results-float-offset: -7px; + } + + .results__icon:nth-child(6) { + --results-icon-delay: 0.34s; + --results-float-offset: 6px; + } + + .results__icon:nth-child(7) { + --results-icon-delay: 0.4s; + --results-float-offset: -9px; + } + + .results__icon:nth-child(8) { + --results-icon-delay: 0.46s; + --results-float-offset: 7px; + } + + .results__icon:nth-child(9) { + --results-icon-delay: 0.52s; + --results-float-offset: -6px; + } + + .results__icon:nth-child(10) { + --results-icon-delay: 0.58s; + --results-float-offset: 8px; + } + + .results__icon:nth-child(11) { + --results-icon-delay: 0.64s; + --results-float-offset: -7px; + } + } +} + +@keyframes resultsFadeUp { + from { + opacity: 0; + transform: translateY(14px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes resultsTitleIn { + from { + opacity: 0; + transform: translateY(46px); + } + + to { + opacity: 1; + transform: translateY(26px); + } +} + +@keyframes resultsIconIn { + from { + opacity: 0; + transform: scale(0.86) translateY(36px) rotate(-4deg); + } + + to { + opacity: 1; + transform: scale(1) translateY(16px) rotate(0deg); + } +} + +@keyframes resultsIconFloat { + 0%, 100% { + opacity: 1; + transform: scale(1) translateY(16px) rotate(0deg); + } + + 50% { + opacity: 1; + transform: scale(1) translateY(calc(16px + var(--results-float-offset, -8px))) rotate(1.2deg); + } +} + +@keyframes resultsIconInMobile { + from { + opacity: 0; + transform: scale(0.9) translateY(18px) rotate(-3deg); + } + + to { + opacity: 1; + transform: none; + } +} + +@include media-down($bp-desktop-md) { + .results { + &__container { + min-height: 620px; + } + + &__title { + font-size: clamp(34px, 5.1vw, 56px); + } + + &__icon { + &--yandex { + left: 34px; + } + + &--wordpress { + left: 150px; + } + + &--shopify { + left: 410px; + } + + &--aistudio { + right: 182px; + } + + &--bitrix { + right: 40px; + } + + &--cloudflare { + right: 124px; + } + + &--google { + right: 52px; + } + + &--openai { + right: 222px; + } + + &--tilda { + left: 90px; + } + + &--n8n { + left: 292px; + } + } + } +} + +@include media-down($bp-tablet) { + .results { + min-height: unset; + padding: 74px 0 92px; + + &__container { + height: auto; + min-height: unset; + display: block; + } + + &__content { + max-width: 620px; + margin-inline: auto; + } + + &__label { + margin-bottom: 12px; + font-size: clamp(20px, 4.2vw, 28px); + } + + &__slide { + min-height: 132px; + } + + &__title { + font-size: clamp(30px, 8.7vw, 44px); + line-height: 1.05; + } + + &__dots { + margin-top: 16px; + } + + &__icons { + position: static; + margin: 0 auto 36px; + width: min(420px, 100%); + display: grid; + grid-template-columns: repeat(4, 45px); + justify-content: center; + gap: 14px; + } + + &__icon { + position: relative; + top: auto; + right: auto; + bottom: auto; + left: auto; + opacity: 1; + transform: none; + } + + &.is-animation-ready.is-in-view { + .results__icon { + animation: resultsIconInMobile 0.62s cubic-bezier(0.21, 1, 0.31, 1) var(--results-icon-delay, 0s) forwards; + } + } + } +} + +@include media-down($bp-mobile-sm) { + .results { + padding: 62px 0 78px; + + &__icons { + width: min(320px, 100%); + grid-template-columns: repeat(3, 45px); + gap: 12px; + margin-bottom: 28px; + } + + &__slide { + min-height: 120px; + } + + &__title { + font-size: clamp(28px, 9vw, 38px); + letter-spacing: -0.01em; + } + } +} + +@media (prefers-reduced-motion: reduce) { + .results.is-animation-ready { + .results__label { + opacity: 1; + transform: none; + animation: none !important; + will-change: auto; + } + + .results__title { + opacity: 1; + transform: translateY(26px); + animation: none !important; + will-change: auto; + } + + .results__icon { + opacity: 1; + transform: scale(1) translateY(16px); + animation: none !important; + will-change: auto; + } + } +} + +@include media-down($bp-tablet) { + @media (prefers-reduced-motion: reduce) { + .results.is-animation-ready { + .results__icon { + transform: none; + } + } + } +} + +.expertise { + position: relative; + padding: 44px 0 40px; + overflow: hidden; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + } + + &__header { + display: grid; + grid-template-columns: minmax(0, 1fr) 448px; + gap: 80px; + align-items: start; + } + + &__label { + margin: 0 0 2px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__text { + max-width: 448px; + margin: 22px 0 0; + color: $color-black; + font-size: 18px; + font-weight: 400; + line-height: 1.55; + letter-spacing: 0.005em; + } + + &__tabs { + width: fit-content; + min-height: 39px; + display: flex; + align-items: center; + gap: 2px; + margin: 36px auto 0; + padding: 2px; + border-radius: $radius-pill; + background: $color-section-gray; + box-shadow: inset 0 0 0 1px rgba($color-black, 0.02); + } + + &__tab { + min-height: 35px; + padding: 0 17px; + border: 0; + border-radius: $radius-pill; + color: #a6a6a8; + background: transparent; + font: inherit; + font-size: 13px; + font-weight: 600; + line-height: 1; + white-space: nowrap; + cursor: pointer; + transition: color $transition-fast, background-color $transition-fast, box-shadow $transition-fast; + + &.is-active { + color: $color-black; + background: $color-white; + box-shadow: 0 2px 7px rgba($color-black, 0.05); + } + + @include hover-supported { + color: $color-black; + } + } + + &__cases { + position: relative; + width: 100vw; + margin-top: 50px; + margin-inline: calc(50% - 50vw); + overflow: visible; + } + + &__track { + display: flex; + align-items: stretch; + } +} + +.expertise-card { + width: 300px; + min-height: 430px; + height: auto; + flex: 0 0 300px; + overflow: hidden; + border: 1px solid rgba($color-black, 0.16); + border-radius: 12px; + background: $color-white; + + &__media { + height: 279px; + overflow: hidden; + background: $color-section-gray; + + img { + width: 100%; + height: 100%; + object-fit: cover; + } + } + + &__body { + padding: 13px 10px 7px; + } + + &__title { + margin: 0; + color: $color-black; + font-size: 24px; + font-weight: 800; + line-height: 1.15; + letter-spacing: -0.03em; + text-align: center; + } + + &__list { + display: grid; + gap: 7px; + margin: 11px 0 0; + padding: 0 0 0 2px; + color: $color-header-text; + font-size: 14px; + font-weight: 500; + line-height: 1.2; + list-style: none; + + li { + position: relative; + padding-left: 19px; + + &::before { + content: ""; + position: absolute; + top: 0.5em; + left: 0; + width: 6px; + height: 6px; + border-radius: 50%; + background: $color-accent; + transform: translateY(-50%); + } + } + } + + &__tags { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: nowrap; + gap: 9px; + margin: 16px 0 0; + padding: 0; + list-style: none; + + li { + min-height: 27px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 11px; + border: 1px solid rgba($color-black, 0.16); + border-radius: $radius-pill; + color: $color-black; + background: rgba($color-section-gray, 0.55); + font-size: 12px; + font-weight: 500; + line-height: 1; + white-space: nowrap; + } + } +} + +@include media-down($bp-desktop-md) { + .expertise { + &__header { + grid-template-columns: minmax(0, 1fr) 390px; + gap: 48px; + } + + &__track { + align-items: stretch; + } + } +} + +@include media-down($bp-tablet) { + .expertise { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__header { + display: block; + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__text { + max-width: 100%; + margin-top: 20px; + font-size: 16px; + line-height: 1.45; + } + + &__tabs { + width: 100%; + justify-content: flex-start; + margin-top: 28px; + overflow-x: auto; + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } + } + + &__tab { + padding-inline: 15px; + } + + &__cases { + margin-top: 32px; + overflow: visible; + } + + &__track { + align-items: stretch; + } + } + + .expertise-card { + width: 286px; + flex-basis: 286px; + + &__media { + height: 266px; + } + + &__title { + font-size: 23px; + } + + &__list { + font-size: 13px; + } + + &__tags { + gap: 6px; + + li { + padding-inline: 9px; + } + } + } +} + +@include media-down($bp-mobile-sm) { + .expertise { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + + &__tabs { + min-height: 37px; + } + + &__tab { + min-height: 33px; + padding-inline: 13px; + font-size: 12px; + } + + &__track { + align-items: stretch; + } + } + + .expertise-card { + width: 272px; + min-height: 420px; + flex-basis: 272px; + + &__media { + height: 254px; + } + + &__body { + padding-inline: 9px; + } + + &__tags { + flex-wrap: wrap; + } + } +} + +.process { + position: relative; + padding: 44px 0 100px; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + } + + &__heading { + max-width: 1100px; + } + + &__label { + margin: 0 0 2px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__grid { + width: min(1192px, 100%); + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 24px; + margin: 58px auto 0; + } +} + +.process-card { + min-height: 190px; + padding: 16px 28px 20px; + border: 1px solid rgba($color-black, 0.16); + border-radius: 30px; + background: $color-white; + + &__number { + display: block; + margin: 0 0 18px; + color: #f4f3f0; + font-size: 60px; + font-weight: 900; + line-height: 0.96; + letter-spacing: -0.055em; + } + + &__title { + margin: 0; + color: $color-black; + font-size: 20px; + font-weight: 800; + line-height: 1.2; + letter-spacing: -0.02em; + } + + &__text { + max-width: 310px; + margin: 12px 0 0; + color: $color-header-text; + font-size: 15px; + font-weight: 400; + line-height: 1.75; + letter-spacing: -0.01em; + } +} + +@include media-down($bp-desktop-md) { + .process { + &__grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } +} + +@include media-down($bp-tablet) { + .process { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__grid { + grid-template-columns: 1fr; + gap: 16px; + margin-top: 32px; + } + } + + .process-card { + min-height: 172px; + padding: 16px 24px 20px; + border-radius: 24px; + + &__number { + margin-bottom: 16px; + font-size: 54px; + } + + &__text { + max-width: 100%; + font-size: 14px; + line-height: 1.6; + } + } +} + +@include media-down($bp-mobile-sm) { + .process { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + } + + .process-card { + min-height: 166px; + padding: 15px 20px 19px; + border-radius: 22px; + + &__number { + font-size: 50px; + } + + &__title { + font-size: 19px; + } + } +} + + +.technologies { + position: relative; + padding: 44px 0 66px; + overflow: hidden; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + } + + &__label { + margin: 0 0 2px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__marquee { + width: 100vw; + display: grid; + gap: 32px; + margin-top: 60px; + margin-inline: calc(50% - 50vw); + } + + &__row { + width: 100%; + overflow: hidden; + } + + &__track { + width: max-content; + display: flex; + align-items: center; + will-change: transform; + + &--left { + animation: technologies-marquee-left 38s linear infinite; + } + + &--right { + animation: technologies-marquee-right 42s linear infinite; + } + } + + &__row--top &__track { + margin-left: -82px; + } + + &__row--bottom &__track { + margin-left: 10px; + } + + &__group { + display: flex; + align-items: center; + gap: 41px; + padding-right: 41px; + flex: 0 0 auto; + } + + @media (prefers-reduced-motion: reduce) { + &__track { + animation: none; + } + } +} + +.technology-item { + display: inline-flex; + align-items: center; + gap: 11px; + flex: 0 0 auto; + color: $color-black; + font-size: 22px; + font-weight: 500; + line-height: 1; + letter-spacing: -0.03em; + white-space: nowrap; + + &__icon { + width: 44px; + height: 44px; + display: inline-flex; + align-items: center; + justify-content: center; + flex: 0 0 44px; + border-radius: 7px; + background: $color-section-gray; + overflow: hidden; + + img { + display: block; + width: 32px; + height: 32px; + object-fit: contain; + } + + &--wordpress { + background: #057da3; + } + + &--n8n { + background: #e83e73; + } + + &--bitrix { + background: #42b9ea; + + img { + width: 32px; + height: auto; + } + } + + &--react { + background: #1f1f1f; + } + + &--nuxt, + &--woo, + &--docker, + &--vue { + background: $color-section-gray; + } + + &--modx { + background: #f4f4f4; + } + + &--php { + background: #535f99; + } + + &--git { + background: #fb5036; + } + + &--mysql { + background: #ed8a00; + } + + &--tilda { + background: #ff5b3a; + } + } +} + +@keyframes technologies-marquee-left { + 0% { + transform: translate3d(0, 0, 0); + } + + 100% { + transform: translate3d(-50%, 0, 0); + } +} + +@keyframes technologies-marquee-right { + 0% { + transform: translate3d(-50%, 0, 0); + } + + 100% { + transform: translate3d(0, 0, 0); + } +} + +@include media-down($bp-tablet) { + .technologies { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__marquee { + gap: 22px; + margin-top: 38px; + } + + &__group { + gap: 28px; + padding-right: 28px; + } + + &__row--top &__track { + margin-left: -54px; + } + + &__row--bottom &__track { + margin-left: 12px; + } + } + + .technology-item { + gap: 9px; + font-size: 18px; + + &__icon { + width: 38px; + height: 38px; + flex-basis: 38px; + border-radius: 7px; + + img { + width: 28px; + height: 28px; + } + } + } +} + +@include media-down($bp-mobile-sm) { + .technologies { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + + &__marquee { + gap: 18px; + margin-top: 34px; + } + + &__group { + gap: 22px; + padding-right: 22px; + } + } + + .technology-item { + font-size: 16px; + + &__icon { + width: 34px; + height: 34px; + flex-basis: 34px; + + img { + width: 25px; + height: 25px; + } + } + } +} + +.turnkey { + position: relative; + padding: 40px 0 20px; + background: $color-white; + + &__container { + width: min(1194px, calc(100% - 40px)); + margin-inline: auto; + } + + &__card { + min-height: 590px; + display: grid; + grid-template-columns: minmax(0, 1fr) 520px; + gap: 84px; + padding: 48px 48px 50px; + border: 1px solid rgba($color-black, 0.16); + border-radius: 30px; + background: $color-white; + } + + &__content { + max-width: 475px; + } + + &__label { + margin: 0 0 13px; + color: #929292; + font-size: 14px; + font-weight: 600; + line-height: 1.2; + letter-spacing: 0.04em; + text-transform: uppercase; + } + + &__title { + margin: 0; + color: $color-black; + font-size: clamp(34px, 2.5vw, 38px); + font-weight: 700; + line-height: 1.02; + letter-spacing: -0.035em; + } + + &__text { + margin: 27px 0 0; + color: $color-header-text; + font-size: 16px; + font-weight: 400; + line-height: 1.45; + letter-spacing: -0.01em; + } + + &__button { + min-width: 244px; + min-height: 54px; + margin-top: 34px; + padding-inline: 30px; + font-size: 16px; + } + + &__list { + align-self: start; + display: grid; + gap: 14px; + margin: 0; + padding: 0; + color: $color-black; + font-size: 16px; + font-weight: 500; + line-height: 1.38; + letter-spacing: -0.01em; + list-style: none; + } + + &__list li { + position: relative; + min-height: 20px; + padding-left: 32px; + + &::before { + content: ""; + position: absolute; + top: 0.64em; + left: 0; + width: 20px; + height: 20px; + border-radius: 50%; + background: $color-accent; + transform: translateY(-50%); + } + } +} + +@include media-down($bp-desktop-md) { + .turnkey { + &__card { + grid-template-columns: minmax(0, 1fr) minmax(430px, 0.9fr); + gap: 48px; + } + } +} + +@include media-down($bp-tablet) { + .turnkey { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__card { + min-height: auto; + grid-template-columns: 1fr; + gap: 36px; + padding: 34px 30px 36px; + border-radius: 26px; + } + + &__content { + max-width: 100%; + } + + &__title { + font-size: clamp(32px, 8vw, 42px); + } + + &__text { + margin-top: 20px; + font-size: 15px; + } + + &__button { + min-width: 220px; + margin-top: 28px; + } + + &__list { + gap: 13px; + font-size: 15px; + line-height: 1.45; + } + } +} + +@include media-down($bp-mobile-sm) { + .turnkey { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__card { + padding: 28px 20px 30px; + border-radius: 22px; + } + + &__label { + font-size: 13px; + } + + &__title { + font-size: clamp(29px, 10vw, 36px); + } + + &__button { + width: 100%; + min-width: 0; + } + + &__list li { + padding-left: 28px; + + &::before { + width: 18px; + height: 18px; + } + } + } +} + + +.clients { + position: relative; + padding: 44px 0 88px; + overflow: hidden; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + } + + &__label { + margin: 0 0 2px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__marquee { + width: 100vw; + display: grid; + gap: 10px; + margin-top: 35px; + margin-inline: calc(50% - 50vw); + } + + &__row { + width: 100%; + overflow: hidden; + } + + &__track { + width: max-content; + display: flex; + will-change: transform; + + &--left { + animation: clients-marquee-left 48s linear infinite; + } + + &--right { + animation: clients-marquee-right 52s linear infinite; + } + } + + &__row--top &__track { + margin-left: 8px; + } + + &__row--bottom &__track { + margin-left: -160px; + } + + &__group { + display: flex; + gap: 10px; + padding-right: 10px; + } +} + +.review-card { + width: 382px; + min-height: 206px; + flex: 0 0 382px; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 19px 20px 20px; + border: 1px solid rgba($color-black, 0.16); + border-radius: 30px; + background: $color-white; + + &__text { + max-width: 335px; + margin: 0; + color: $color-black; + font-size: 16px; + font-weight: 500; + line-height: 1.53; + letter-spacing: -0.01em; + } + + &__author { + display: flex; + align-items: center; + gap: 13px; + margin-top: 24px; + } + + &__avatar { + width: 48px; + height: 48px; + flex: 0 0 48px; + border: 1px solid rgba($color-black, 0.14); + border-radius: 50%; + background: #faf9f6; + } + + &__name { + margin: 0; + color: $color-black; + font-size: 18px; + font-weight: 600; + line-height: 1.15; + letter-spacing: -0.02em; + } + + &__position { + margin: 4px 0 0; + color: $color-muted-text; + font-size: 15px; + font-weight: 400; + line-height: 1.2; + letter-spacing: -0.01em; + } +} + +@keyframes clients-marquee-left { + 0% { + transform: translate3d(0, 0, 0); + } + + 100% { + transform: translate3d(-50%, 0, 0); + } +} + +@keyframes clients-marquee-right { + 0% { + transform: translate3d(-50%, 0, 0); + } + + 100% { + transform: translate3d(0, 0, 0); + } +} + +@include media-down($bp-tablet) { + .clients { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__marquee { + gap: 12px; + margin-top: 34px; + } + + &__group { + gap: 12px; + padding-right: 12px; + } + + &__row--top &__track { + margin-left: -70px; + } + + &__row--bottom &__track { + margin-left: -190px; + } + } + + .review-card { + width: 340px; + min-height: 196px; + flex-basis: 340px; + padding: 18px 18px 19px; + border-radius: 26px; + + &__text { + font-size: 15px; + line-height: 1.48; + } + + &__name { + font-size: 17px; + } + + &__position { + font-size: 14px; + } + } +} + +@include media-down($bp-mobile-sm) { + .clients { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + + &__row--top &__track { + margin-left: -90px; + } + + &__row--bottom &__track { + margin-left: -220px; + } + } + + .review-card { + width: 300px; + min-height: 188px; + flex-basis: 300px; + padding: 17px 17px 18px; + border-radius: 24px; + + &__text { + font-size: 14px; + } + + &__avatar { + width: 44px; + height: 44px; + flex-basis: 44px; + } + } +} + +.values { + padding: 46px 0 82px; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + } + + &__label { + margin: 0 0 2px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__grid { + width: min(100%, 966px); + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 32px; + margin: 58px auto 0; + } +} + +.value-card { + min-width: 0; + text-align: center; + + &__media { + height: 216px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + background: #f2f2f2; + + img { + width: 64px; + height: 64px; + display: block; + opacity: 0.94; + } + } + + &__title { + margin: 11px 0 0; + color: $color-black; + font-size: 16px; + font-weight: 800; + line-height: 1.18; + letter-spacing: -0.015em; + } + + &__text { + max-width: 276px; + margin: 8px auto 0; + color: $color-muted-text; + font-size: 12px; + font-weight: 400; + line-height: 1.28; + letter-spacing: -0.01em; + } +} + +@include media-down($bp-desktop-md) { + .values { + &__grid { + gap: 24px; + } + } + + .value-card { + &__media { + height: 200px; + } + } +} + +@include media-down($bp-tablet) { + .values { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__grid { + grid-template-columns: 1fr; + gap: 28px; + margin-top: 34px; + } + } + + .value-card { + &__media { + height: 220px; + } + + &__title { + margin-top: 12px; + font-size: 17px; + } + + &__text { + max-width: 330px; + font-size: 14px; + line-height: 1.35; + } + } +} + +@include media-down($bp-mobile-sm) { + .values { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + + &__grid { + gap: 24px; + } + } + + .value-card { + &__media { + height: 196px; + } + } +} + +.faq { + padding: 46px 0 83px; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + } + + &__label { + margin: 0 0 2px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 600; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__list { + width: min(100%, 1256px); + margin: 58px auto 0; + overflow: hidden; + border: 1px solid rgba($color-black, 0.16); + border-radius: 20px; + background: $color-white; + } +} + +.faq-item { + & + & { + border-top: 1px solid rgba($color-black, 0.14); + } + + &__button { + width: 100%; + min-height: 69px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; + padding: 18px 24px 18px 20px; + border: 0; + background: transparent; + color: $color-black; + font: inherit; + font-size: 16px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.01em; + text-align: left; + cursor: pointer; + transition: background $transition-fast; + + @include hover-supported { + background: rgba($color-black, 0.025); + } + + &[aria-expanded="true"] { + .faq-item__icon { + transform: rotate(45deg); + } + } + } + + &__icon { + position: relative; + width: 18px; + height: 18px; + flex: 0 0 18px; + transition: transform $transition-fast; + + &::before, + &::after { + content: ""; + position: absolute; + left: 50%; + top: 50%; + width: 11px; + height: 1px; + border-radius: 999px; + background: $color-black; + transform: translate(-50%, -50%); + } + + &::after { + width: 1px; + height: 11px; + } + } + + &__panel { + padding: 0 68px 22px 20px; + color: $color-muted-text; + font-size: 15px; + font-weight: 400; + line-height: 1.48; + letter-spacing: -0.01em; + + p { + max-width: 820px; + margin: 0; + } + } +} + +@include media-down($bp-tablet) { + .faq { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__list { + margin-top: 34px; + border-radius: 18px; + } + } + + .faq-item { + &__button { + min-height: 64px; + padding: 17px 18px; + font-size: 15px; + } + + &__panel { + padding: 0 18px 18px; + font-size: 14px; + } + } +} + +@include media-down($bp-mobile-sm) { + .faq { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + } + + .faq-item { + &__button { + gap: 16px; + min-height: 60px; + padding: 15px 16px; + } + + &__panel { + padding: 0 16px 17px; + } + } +} + + +.contact { + padding: 46px 0 88px; + background: $color-white; + + &__container { + width: min(1420px, calc(100% - 40px)); + margin-inline: auto; + display: grid; + grid-template-columns: minmax(300px, 470px) minmax(620px, 1fr); + gap: clamp(48px, 6.5vw, 150px); + align-items: start; + } + + &__content { + padding-top: 0; + } + + &__label { + margin: 0 0 8px; + color: $color-header-text; + font-size: 16px; + font-weight: 600; + line-height: 1.2; + } + + &__title { + margin: 0; + color: $color-dark; + font-size: clamp(42px, 2.9vw, 48px); + font-weight: 700; + line-height: 1.03; + letter-spacing: -0.052em; + + span { + color: $color-gray; + } + } + + &__text { + max-width: 440px; + margin: 28px 0 0; + color: $color-muted-text; + font-size: 19px; + font-weight: 400; + line-height: 1.42; + letter-spacing: -0.022em; + } +} + +.contact-sentence { + width: 100%; + margin: 0; + + &__text { + margin: 0; + color: $color-black; + font-size: clamp(32px, 2.33vw, 40px); + font-weight: 400; + line-height: 1.19; + letter-spacing: -0.055em; + } + + &__actions { + display: flex; + align-items: center; + gap: 18px; + margin-top: 28px; + } + + &__submit { + min-width: 184px; + } + + &__status { + min-height: 22px; + margin: 0; + color: $color-muted-text; + font-size: 14px; + line-height: 1.35; + letter-spacing: -0.01em; + + &.is-success { + color: $color-dark; + } + } +} + +.contact-field { + display: inline; + position: relative; + min-width: 1.5em; + padding: 0 0.04em; + border: 0; + border-bottom: 1px solid currentColor; + border-radius: 0; + background: transparent; + color: $color-gray; + outline: none; + cursor: text; + transition: color $transition-fast, border-color $transition-fast, background $transition-fast; + + &[contenteditable="true"], + &:focus-visible { + color: $color-black; + border-color: $color-black; + background: rgba($color-black, 0.035); + } + + &--selector { + cursor: pointer; + user-select: none; + } + + &.is-filled { + color: $color-black; + } + + &.is-error { + color: #d73a31; + border-color: #d73a31; + background: rgba(#d73a31, 0.07); + } +} + +.contact-dropdown { + position: absolute; + z-index: 80; + min-width: 220px; + max-width: min(320px, calc(100vw - 24px)); + margin: 0; + padding: 8px; + list-style: none; + border: 1px solid rgba($color-black, 0.12); + border-radius: 16px; + background: $color-white; + box-shadow: 0 18px 45px rgba($color-black, 0.12); + + li { + padding: 11px 12px; + border-radius: 10px; + color: $color-black; + font-size: 15px; + font-weight: 500; + line-height: 1.2; + cursor: pointer; + transition: background $transition-fast; + + @include hover-supported { + background: rgba($color-black, 0.055); + } + } +} + +.contact-date-input { + position: fixed; + left: -1000px; + top: -1000px; + width: 24px; + height: 24px; + opacity: 0; + pointer-events: auto; +} + +@include media-down($bp-desktop-md) { + .contact { + &__container { + grid-template-columns: minmax(280px, 390px) minmax(520px, 1fr); + gap: 64px; + } + } + + .contact-sentence { + &__text { + font-size: clamp(30px, 3.1vw, 36px); + } + } +} + +@include media-down($bp-tablet) { + .contact { + padding: 70px 0 72px; + + &__container { + width: min(100% - 32px, 620px); + grid-template-columns: 1fr; + gap: 34px; + } + + &__title { + font-size: clamp(36px, 9vw, 46px); + } + + &__text { + margin-top: 20px; + font-size: 17px; + } + } + + .contact-sentence { + &__text { + font-size: clamp(26px, 7vw, 36px); + line-height: 1.22; + } + + &__actions { + flex-direction: column; + align-items: flex-start; + gap: 12px; + } + } +} + +@include media-down($bp-mobile-sm) { + .contact { + padding: 60px 0 64px; + + &__container { + width: calc(100% - 24px); + } + + &__label { + font-size: 15px; + } + } + + .contact-sentence { + &__text { + font-size: 25px; + } + } + + .contact-dropdown { + min-width: 200px; + } +} + +.site-footer { + padding: 82px 0 50px; + background: $color-white; + + &__container { + width: min(1192px, calc(100% - 40px)); + margin-inline: auto; + } + + &__top { + display: grid; + grid-template-columns: minmax(320px, 1fr) 180px 262px; + gap: clamp(70px, 6.8vw, 130px); + align-items: start; + padding-bottom: 66px; + border-bottom: 1px solid rgba($color-black, 0.16); + } + + &__brand { + display: flex; + flex-direction: column; + align-items: flex-start; + } + + &__logo { + display: inline-flex; + width: 190px; + transition: opacity $transition-fast; + + img { + width: 190px; + height: auto; + } + + @include hover-supported { + opacity: 0.72; + } + } + + &__description { + max-width: 330px; + margin: 29px 0 0; + color: $color-muted-text; + font-size: 18px; + font-weight: 400; + line-height: 1.55; + letter-spacing: -0.022em; + } + + &__title { + margin: 3px 0 22px; + color: $color-black; + font-size: 14px; + font-weight: 500; + line-height: 1.2; + text-transform: uppercase; + letter-spacing: -0.01em; + } + + &__list { + display: flex; + flex-direction: column; + gap: 14px; + margin: 0; + padding: 0; + list-style: none; + color: $color-muted-text; + font-size: 17px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.018em; + + a { + transition: color $transition-fast; + + @include hover-supported { + color: $color-black; + } + } + } + + &__bottom { + display: flex; + align-items: center; + justify-content: space-between; + gap: 24px; + padding-top: 33px; + color: $color-muted-text; + font-size: 15px; + font-weight: 400; + line-height: 1.35; + letter-spacing: -0.02em; + + p { + margin: 0; + } + + a { + transition: color $transition-fast; + + @include hover-supported { + color: $color-black; + } + } + } +} + +@include media-down($bp-desktop-md) { + .site-footer { + &__top { + grid-template-columns: minmax(280px, 1fr) 160px 240px; + gap: 54px; + } + } +} + +@include media-down($bp-tablet) { + .site-footer { + padding: 64px 0 40px; + + &__container { + width: min(100% - 32px, 620px); + } + + &__top { + grid-template-columns: 1fr 1fr; + gap: 40px 32px; + padding-bottom: 42px; + } + + &__brand { + grid-column: 1 / -1; + } + + &__description { + margin-top: 22px; + font-size: 17px; + } + + &__bottom { + align-items: flex-start; + flex-direction: column; + gap: 12px; + padding-top: 26px; + } + } +} + +@include media-down($bp-mobile) { + .site-footer { + padding: 52px 0 34px; + + &__container { + width: calc(100% - 24px); + } + + &__top { + grid-template-columns: 1fr; + gap: 34px; + } + + &__logo, + &__logo img { + width: 168px; + } + + &__title { + margin-bottom: 16px; + } + + &__list { + gap: 12px; + font-size: 16px; + } + + &__bottom { + font-size: 14px; + } + } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..e247413 --- /dev/null +++ b/index.html @@ -0,0 +1,1486 @@ + + + + + + + AdConversion — веб-разработка + + + + + + + + + +
    + + +
    +
    +
    +
    +
    + + веб-разработка +
    + +

    + Создаем сайты,
    + которые работают +

    + +

    + Проектируем, дизайним и собираем продукты под бизнес-задачи: заявки, продажи, доверие и рост. +

    + + + +
      +
    • UI/UX Design
    • +
    • Frontend
    • +
    • Backend & API
    • +
    • CMS Systems
    • +
    +
    + +
    +
    + +
    +
    + Конверсия + +38% +
    +
    + +
    + Срок запуска + от 2 недель +
    +
    +
    + +
    +
    +
    + + +

    Наши результаты

    +

    + 1000 заказов
    + 1000 положительных отзывов
    + 238 122 приведенных пользователя +

    +
    +
    +
    + +
    +
    +
    +
    +

    Экспертиза

    +

    + Что мы создаем +

    +
    + +

    + Закрываем весь цикл: от аналитики и первых прототипов до сложного backend'а и поддержки. +

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

    MVP-продукты

    +
      +
    • Запуск MVP за 4 недели
    • +
    • Интеграция банковских API
    • +
    +
      +
    • React Native
    • +
    • Node.js
    • +
    • Security
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Лендинги

    +
      +
    • Структура под заявки
    • +
    • Адаптивная верстка
    • +
    +
      +
    • HTML
    • +
    • SCSS
    • +
    • JS
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Промо-страницы

    +
      +
    • Быстрый запуск кампании
    • +
    • Формы и аналитика
    • +
    +
      +
    • Figma
    • +
    • Frontend
    • +
    • Analytics
    • +
    +
    +
    + +
    +
    + +
    +
    +

    B2B-страницы

    +
      +
    • Сложная подача услуги
    • +
    • Подключение CRM
    • +
    +
      +
    • Bitrix24
    • +
    • API
    • +
    • Forms
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Квиз-воронки

    +
      +
    • Сценарии вопросов
    • +
    • Передача лидов в CRM
    • +
    +
      +
    • Quiz
    • +
    • CRM
    • +
    • Webhook
    • +
    +
    +
    + +
    +
    + +
    +
    +

    SEO-лендинги

    +
      +
    • Семантическая структура
    • +
    • Базовая оптимизация
    • +
    +
      +
    • SEO
    • +
    • Schema
    • +
    • Speed
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Интернет-магазины

    +
      +
    • Каталог и карточки товаров
    • +
    • Корзина, оплата, доставка
    • +
    +
      +
    • WooCommerce
    • +
    • PHP
    • +
    • API
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Каталоги

    +
      +
    • Фильтры и сортировка
    • +
    • Удобная структура категорий
    • +
    +
      +
    • WordPress
    • +
    • ACF
    • +
    • AJAX
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Личный кабинет

    +
      +
    • История заказов
    • +
    • Профиль покупателя
    • +
    +
      +
    • Auth
    • +
    • Backend
    • +
    • UX
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Checkout

    +
      +
    • Сценарии оформления заказа
    • +
    • Валидация и подсказки
    • +
    +
      +
    • JS
    • +
    • Payment
    • +
    • Delivery
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Маркетплейс

    +
      +
    • Карточки продавцов
    • +
    • Разделение заказов
    • +
    +
      +
    • CMS
    • +
    • CRM
    • +
    • Logistics
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Товарные витрины

    +
      +
    • Быстрая загрузка каталога
    • +
    • Промо-блоки и подборки
    • +
    +
      +
    • Catalog
    • +
    • Cache
    • +
    • SEO
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Интеграции

    +
      +
    • Обмен товарами и заказами
    • +
    • Синхронизация статусов
    • +
    +
      +
    • 1C
    • +
    • Bitrix24
    • +
    • API
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Платежные API

    +
      +
    • Оплата и возвраты
    • +
    • Безопасная обработка данных
    • +
    +
      +
    • YooKassa
    • +
    • Webhook
    • +
    • Security
    • +
    +
    +
    + +
    +
    + +
    +
    +

    CRM-связки

    +
      +
    • Передача лидов
    • +
    • Автоматизация воронок
    • +
    +
      +
    • CRM
    • +
    • REST
    • +
    • Forms
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Складские остатки

    +
      +
    • Обновление наличия
    • +
    • Контроль резервов
    • +
    +
      +
    • Inventory
    • +
    • API
    • +
    • Cron
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Email-сервисы

    +
      +
    • Подписки и сегменты
    • +
    • Триггерные уведомления
    • +
    +
      +
    • Unisender
    • +
    • SMTP
    • +
    • Events
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Сервисные API

    +
      +
    • Карты, доставка, аналитика
    • +
    • Единый слой интеграций
    • +
    +
      +
    • Yandex
    • +
    • Maps
    • +
    • Analytics
    • +
    +
    +
    + +
    +
    + +
    +
    +

    UI-концепции

    +
      +
    • Визуальная система сайта
    • +
    • Главные экраны и состояния
    • +
    +
      +
    • Figma
    • +
    • UI
    • +
    • UX
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Дизайн-системы

    +
      +
    • Компоненты и состояния
    • +
    • Подготовка к разработке
    • +
    +
      +
    • Design Kit
    • +
    • Tokens
    • +
    • Components
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Прототипы

    +
      +
    • Кликабельные сценарии
    • +
    • Проверка логики до разработки
    • +
    +
      +
    • Prototype
    • +
    • CJM
    • +
    • UX
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Редизайн

    +
      +
    • Обновление визуала
    • +
    • Сохранение рабочей структуры
    • +
    +
      +
    • Audit
    • +
    • UI
    • +
    • Frontend
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Mobile UI

    +
      +
    • Адаптивные макеты
    • +
    • Удобные мобильные сценарии
    • +
    +
      +
    • Mobile
    • +
    • Responsive
    • +
    • UX
    • +
    +
    +
    + +
    +
    + +
    +
    +

    Креативы

    +
      +
    • Баннеры и промо-блоки
    • +
    • Единый стиль коммуникаций
    • +
    +
      +
    • Creative
    • +
    • Brand
    • +
    • Promo
    • +
    +
    +
    +
    +
    +
    + +
    +
    +
    +

    Процесс

    +

    + Как будет проходить работа? +

    +
    + +
    +
    + 01 +

    Бриф и цели

    +

    + Разбираем задачу, аудиторию, конкурентов, воронку и критерии результата. +

    +
    + +
    + 02 +

    Структура и прототип

    +

    + Собираем логику страниц, блоки, сценарии и будущую навигацию. +

    +
    + +
    + 03 +

    Дизайн

    +

    + Создаем визуальную концепцию, UI-kit, адаптивы и состояния. +

    +
    + +
    + 04 +

    Разработка

    +

    + Верстаем, подключаем CMS, формы, интеграции, анимации и админку. +

    +
    + +
    + 05 +

    Тестирование

    +

    + Проверяем адаптив, скорость, формы, SEO-базу, аналитику и ошибки. +

    +
    + +
    + 06 +

    Запуск и поддержка

    +

    + Публикуем проект, отслеживаем работу и развиваем сайт после релиза. +

    +
    +
    +
    +
    + +
    +
    +

    Технологии

    +

    + Технологии, с которыми мы работаем +

    +
    + +
    +
    +
    +
    + + + + + WordPress + + + + + + n8n + + + + + + Bitrix + + + + + + React.js + + + + + + Nuxt + + + + + + WooCommerce + + + + + + MODX + + + + + + PHP + + + + + + Docker + + + + + + GIT + + + + + + MySQL + + + + + + Tilda + + + + + + Vue.js + +
    + +
    +
    + +
    +
    +
    + + + + + Tilda + + + + + + Vue.js + + + + + + WordPress + + + + + + MODX + + + + + + PHP + + + + + + Docker + + + + + + GIT + + + + + + MySQL + + + + + + Tilda + + + + + + Vue.js + + + + + + WordPress + + + + + + n8n + + + + + + Bitrix + + + + + + React.js + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +

    Под ключ

    +

    + Что входит в разработку под ключ +

    +

    + Полный цикл от аналитики до запуска и поддержки. +

    + Получить предложение +
    + +
      +
    • Аналитика и структура страниц
    • +
    • UX-прототип
    • +
    • UI-дизайн
    • +
    • Адаптив под desktop / tablet / mobile
    • +
    • Frontend-разработка
    • +
    • CMS или backend
    • +
    • Формы и заявки
    • +
    • Интеграции с CRM / Bitrix24 / 1C / Telegram
    • +
    • Базовая SEO-подготовка
    • +
    • Настройка аналитики
    • +
    • Тестирование
    • +
    • Перенос на хостинг
    • +
    • Инструкция по управлению сайтом
    • +
    • Поддержка после запуска
    • +
    +
    +
    +
    + +
    +
    +

    Наши клиенты

    +

    + Что говорят клиенты +

    +
    + +
    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

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

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

    +
    +
    +
    +
    +

    "Получили не просто красивый сайт, а понятную структуру, удобную админку и нормальную техническую основу для рекламы."

    +
    + +
    +

    Анна

    +

    руководитель проекта

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

    Ценности

    +

    + Почему с нами удобно работать? +

    + +
    +
    + +

    Бизнес-ориентированность

    +

    + Разбираем задачу, аудиторию, конкурентов, воронку и критерии результата. +

    +
    + +
    + +

    Хорошая техническая база

    +

    + Разбираем задачу, аудиторию, конкурентов, воронку и критерии результата. +

    +
    + +
    + +

    Абсолютная прозрачность

    +

    + Разбираем задачу, аудиторию, конкурентов, воронку и критерии результата. +

    +
    +
    +
    +
    + +
    +
    +

    FAQ

    +

    + Ответы на часто задаваемые вопросы +

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

    Обсудить проект

    +

    + Готовы обсудить
    + ваш проект? +

    +

    + Оставьте заявку, и мы свяжемся с вами в течение рабочего дня для бесплатной консультации. +

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

    + Мое имя + (Иван Иванов) + и
    + Я хотел бы обсудить + (тип задачи ). +
    + Мой номер телефона + (+79000000000) + и
    + моя почта + (почтовый адрес). +
    + Лучший способ связаться со мной + (метод ). +
    + Удобным временем для беседы было бы + (дата ) + и + (время ). + Давайте создадим вместе нечто исключительное! +

    + +
    + +

    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..72b051b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4216 @@ +{ + "name": "adconversion", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "adconversion", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "autoprefixer": "^10.4.27", + "cssnano": "^7.1.2", + "npm-run-all": "^4.1.5", + "postcss": "^8.5.6", + "postcss-cli": "^11.0.1", + "sass": "^1.97.3" + } + }, + "node_modules/@colordx/core": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@colordx/core/-/core-5.3.3.tgz", + "integrity": "sha512-G8zo59+F4jAEbMUSL8xmcXZmW8MCu7WuYrn58ZgUMai6k0xLj3gEidpKViZ4GXVcKsiLrhBNASOpuG9ZyoxzWw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", + "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001790", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", + "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "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, + "license": "MIT" + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", + "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.7.tgz", + "integrity": "sha512-N5LGn/OlhMxDTvKACwUPMzT34SSj1b022pvUAE/Vh6r2WD1aUCbc+QNIP/JjX9VVxebdJWZQ3352Lt4oF7dQ/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.15", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.15.tgz", + "integrity": "sha512-60kx7lJ40//HA85cIfQXSOJFby2D2V1pOMNHVCxue3KFWCjRzmiQyL9OvI+NAhwUlaojOfF9eK3nGvrJLCBUfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.2", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.9", + "postcss-convert-values": "^7.0.11", + "postcss-discard-comments": "^7.0.7", + "postcss-discard-duplicates": "^7.0.3", + "postcss-discard-empty": "^7.0.2", + "postcss-discard-overridden": "^7.0.2", + "postcss-merge-longhand": "^7.0.6", + "postcss-merge-rules": "^7.0.10", + "postcss-minify-font-values": "^7.0.2", + "postcss-minify-gradients": "^7.0.4", + "postcss-minify-params": "^7.0.8", + "postcss-minify-selectors": "^7.1.0", + "postcss-normalize-charset": "^7.0.2", + "postcss-normalize-display-values": "^7.0.2", + "postcss-normalize-positions": "^7.0.3", + "postcss-normalize-repeat-style": "^7.0.3", + "postcss-normalize-string": "^7.0.2", + "postcss-normalize-timing-functions": "^7.0.2", + "postcss-normalize-unicode": "^7.0.8", + "postcss-normalize-url": "^7.0.2", + "postcss-normalize-whitespace": "^7.0.2", + "postcss-ordered-values": "^7.0.3", + "postcss-reduce-initial": "^7.0.8", + "postcss-reduce-transforms": "^7.0.2", + "postcss-svgo": "^7.1.2", + "postcss-unique-selectors": "^7.0.6" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.2.tgz", + "integrity": "sha512-kt41WLK7FLKfePzPi645Y+/NtW/nNM7Su6nlNUfJyRNW3JcuU3JU7+cWJc+JexTeZ8dRBvFufefdG2XpXkIo0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "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.5.343", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.343.tgz", + "integrity": "sha512-YHnQ3MXI08icvL9ZKnEBy05F2EQ8ob01UaMOuMbM8l+4UcAq6MPPbBTJBbsBUg3H8JeZNt+O4fjsoWth3p6IFg==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "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-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-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/immutable": { + "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" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "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/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/minimatch": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-cli": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.1.tgz", + "integrity": "sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^1.0.0", + "fs-extra": "^11.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^5.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "tinyglobby": "^0.2.12", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.9.tgz", + "integrity": "sha512-EZpoUlmbXQUpe+g4ZaGM2kjGlHrQ7Bjzb3xHcNrC9ysI1tGoib6DAYvxg6aB7MGxsjgLF+Qx/jwZQkJ5cKDvXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colordx/core": "^5.2.0", + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.11.tgz", + "integrity": "sha512-H+s7P0f9jJylSysAHs3/5MhAx7GthDO05uw1h56L2xyEqpiLTFLEqBNw3PUYzD5p/AKwWaigCXf6FGELpOw9lw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.7.tgz", + "integrity": "sha512-FJhE3fSte7HaRNL4iwD8LTG9vWqj3puxXIdig6LfrFqc1TJRUhY4kXOkeTXZZfTXYny+k+SO7fd2fymj1wduJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.3.tgz", + "integrity": "sha512-9cRxXwhEM/aNZon1qZyToX4NmjbFbxOGbww+0CnbYFDbbPRGZ8jg4IbM8UlA+CzkXxM35itxyaHKNqBBg/RTDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.2.tgz", + "integrity": "sha512-NZFouOmOwtngJVgkNeI1LtkzFdYqIurxgy4wq3qNvIiXFURTZ3b/K7q3dP3QitlWQ5imHDQL0qSorItQhoxb1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.2.tgz", + "integrity": "sha512-Ym01X4v6U3sY8X0P1J9P+RTar+7JyLTOzDrxKSeaArFsLmkVu4KcAKPBWDYRIyZ/q4jwpSPnOnekeSSqXSXKUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-load-config": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.6.tgz", + "integrity": "sha512-lDsWeKRsssX/9vKFpingoRiuvGajtOGCJhs1kyaTJ5fzaVzs0aPPYe38UZ/ukMFEA5iuRIjQJHIkH2niYO3ubQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.10" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.10.tgz", + "integrity": "sha512-UXYKxkg8Cy1so/evF7AE/25PNXZb3E0SrvjdbtbGf+MW+doLenKqRLQzz6YZW469ktiXK2MVLFWtel/DftCV0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.2", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.2.tgz", + "integrity": "sha512-Z82NUmnvhPrvMUaHfkaAVBmWQq9F8Dox4Dy0LiwbaTxfmDUWLQtS+0WCgKViwdWCPPajiY9YzoQftgqKdXkM5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.4.tgz", + "integrity": "sha512-g8MNeNyN+lbwKy8DCtJ6zU6awBL0InBsSOaKmgZ1MdRLVItLQUNFNAzzzBnOp4qowOcyyB6GetTlQ0/0UNXvag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colordx/core": "^5.2.0", + "cssnano-utils": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.8.tgz", + "integrity": "sha512-DIUKM5DZGTmxN7KFKT+rxt0FdPDmRrdK/k3n3+6Po+N/QYn06juwagHcfOVBG0CfCHwcnI612GAUCZc3eT+ZEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "cssnano-utils": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.1.0.tgz", + "integrity": "sha512-HYl/6I0aL+UvpA10t65BSa7h+tVjBgE6oRI5N/3ylX3vtwvlDL67G3FT3vYDPnTksxr0riiyJcT0tBtyRVoloA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-api": "^3.0.0", + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.2.tgz", + "integrity": "sha512-YoINoiR4YKlzfB95Y93b0DSxWy7FLw+1SADIaznMHb88AKizpzfF80tolmiDEbYr1UM4r4Hw+NZq37SwT5f3uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.2.tgz", + "integrity": "sha512-wu/NTSjnp8sX5TnEHVPN+eScjAtRs18ELtEduG+Ek3GxjeUDUT+VAA3PJjVIXBcVIk6fiLYFj2iKH0q99S3T2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.3.tgz", + "integrity": "sha512-1CJI++oA3yK/fQlPUcEngUfcSWS08Pkt9fK+jVgL53mmtHDBHi0YiuB0m3D9BXwZjmfvCc2GQmFqCAF/CVcPzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.3.tgz", + "integrity": "sha512-RvImJ2Ml4LZSx31qC2C8LDiz65IgBNATtwEr9r3Aue+D0cCGbj4rjNojb/uGpEm4QxnOTzFqMvaDYuKiT1Cmpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.2.tgz", + "integrity": "sha512-FqtrUh2BU2MnVeLeWBbJ2rwOjuDnA91XvoImc1BbgMWIxdxiPTaquflBHsmFBA3xh3pC3wPZO9W5MaIc7wU/Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.2.tgz", + "integrity": "sha512-5H5fpXBnMACEXzn7k9RP7qWZ1eWg8cuZkUuFygStY7icOj+UucwMWXeMmdkF/iITvTVa7fP85tdRCJeznpdFfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.8.tgz", + "integrity": "sha512-imCM3cwK3hvlAG4z1AzYM24m8BPA3/Jk/S71wfbn2I6+E2b+UwFaGvlNqydihXTSl3OFPeQXztqCzg+NGeSibQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.2.tgz", + "integrity": "sha512-bLnNY7t76NLRb9QQyCVmCN4qwoHxiq6vABH/CXav9wTuR6dNGHGQ72AyO/+h2quWxZk3l7BqxNL1vtDi9H6y1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.2.tgz", + "integrity": "sha512-TNSVkuhkeOhl36WruQlflxOb7HweoeZowSusNpfsM1+ZvqJ24Mc+xksu05ecMQxlu+0zgI8pyznO2EWqDCQbLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.3.tgz", + "integrity": "sha512-FTt6R9RF7NAYfpOHa2XFPm89FVuo5GiIbcfwOXFy1MYF38BeiNW9ke8ybw9Pk62eEsUlRVVbxHWA3B7ERYqOOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.8.tgz", + "integrity": "sha512-VeVRmbgpgTZuRcDQdqnsB4iYTeS2dBRV07UdwK6V3x61F1xTQ2pgIzHBIR4rQYRlXRNKBTGYYhEL1eNA7w9vaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.2.tgz", + "integrity": "sha512-OV5P9hMnf7kEkeXVXyS5ESqxbIls7a3TqFymUAV5JICO/9YCBEU+QQhQjZiDHaLwFdV7/CL481kVeBUk5FdY3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-reporter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.2.tgz", + "integrity": "sha512-ixExc8m+/68yuSYQzV/1DgtTup/7nI2dN9eiDS5GMRUzeCH4q9UcqeZPwcSVhdf8ay9fRwXDUHwcY5/XzQSszQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.6.tgz", + "integrity": "sha512-cDxnYw1QuBMW5w3svZ0BlYF0IA4Amr+1JoTLXzu6vDFPNwohN2QU+sPZNx15b930LR7ce+/600h28/cYoxO9vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/stylehacks": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.10.tgz", + "integrity": "sha512-sRJ7klmhe/Fl5woJcbJUa2qP1Ueffsl1CQI4ePvqXLkZmcIuAt09aP9uT/FOFPqXh9Rh8M5UkgEnwTdTKn/Aag==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.5.10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^11.1.0", + "css-select": "^5.1.0", + "css-tree": "^3.0.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.1.1", + "sax": "^1.5.0" + }, + "bin": { + "svgo": "bin/svgo.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/thenby": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.4.1.tgz", + "integrity": "sha512-D5a/bO0KdalOE3q8MlrRmSxjbKZHT3MQmXkJP+r97Vw8MMwOZKOwUSEyTtK7eSMj2y0kyAjpYMRMZmmLw1FtNQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/wrap-ansi/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..09014f7 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "adconversion", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "scss:build": "sass assets/scss/main.scss assets/css/main.css --no-source-map", + "css:minify": "postcss assets/css/main.css -o assets/css/main.min.css", + "css:build": "npm-run-all scss:build css:minify", + "scss:watch": "sass --watch assets/scss:assets/css --no-source-map", + "css:watch": "postcss assets/css/main.css -o assets/css/main.min.css --watch", + "dev": "npm-run-all --parallel scss:watch css:watch" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "autoprefixer": "^10.4.27", + "cssnano": "^7.1.2", + "npm-run-all": "^4.1.5", + "postcss": "^8.5.6", + "postcss-cli": "^11.0.1", + "sass": "^1.97.3" + } +} \ No newline at end of file diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..4783756 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: [ + require('autoprefixer'), + require('cssnano')({ preset: 'default' }) + ] +}; \ No newline at end of file