Compare commits

...

7 commits

Author SHA1 Message Date
Nikhil Nawgiri 8d31cb45fd Add hakken log file 2024-04-27 19:16:53 +02:00
Nikhil Nawgiri 095a0d0032 Import entire index.scss 2024-04-27 18:41:03 +02:00
Nikhil Nawgiri a726dbdeca Remove "hello world" text 2024-04-27 18:38:29 +02:00
Nikhil Nawgiri 4f1b8d053a Remove unsupported css property 'speak' 2024-04-27 18:37:52 +02:00
Nikhil Nawgiri 2c624712cc Add wrapper and apply ps-background 2024-04-27 18:37:39 +02:00
Nikhil Nawgiri 060fdfeda6 Add sass support 2024-04-27 18:32:46 +02:00
Jakob Hoefker 59db0b2f02 add styles 2024-04-27 18:24:44 +02:00
24 changed files with 1128 additions and 129 deletions

18
hakken_log.md Normal file
View file

@ -0,0 +1,18 @@
# hakken
## 27.04.2024
This file can be deleted once these goals are achieved.
### goals
* Create styles for unstyled page areas
### planned steps
[x] copy and import sass styles that were used in the past
[x] enable sass
[x] apply styles
[] build jar file
### obstacles
There are no stories available for the areas that actually require styles.
In our opinion it makes more sense for the keycloakify team to provide working stories before we continue.
We gave it a try importing the stories from the keycloakify repo (not the starter) but that didn't work.

View file

@ -46,6 +46,7 @@
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5", "eslint-plugin-react-refresh": "^0.4.5",
"eslint-plugin-storybook": "^0.8.0", "eslint-plugin-storybook": "^0.8.0",
"sass": "^1.75.0",
"storybook": "^8.0.2", "storybook": "^8.0.2",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^5.0.8", "vite": "^5.0.8",

View file

@ -6,6 +6,7 @@ import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate";
import { type TemplateProps } from "keycloakify/login/TemplateProps"; import { type TemplateProps } from "keycloakify/login/TemplateProps";
import type { KcContext } from "./kcContext"; import type { KcContext } from "./kcContext";
import type { I18n } from "./i18n"; import type { I18n } from "./i18n";
import "../resources/styles/scss/index.scss";
export default function Template(props: TemplateProps<KcContext, I18n>) { export default function Template(props: TemplateProps<KcContext, I18n>) {
const { const {
@ -46,133 +47,134 @@ export default function Template(props: TemplateProps<KcContext, I18n>) {
return null; return null;
} }
return (<> return (
<header className="ps-header"> <div className="ps-background">
{realm.internationalizationEnabled && (assert(locale !== undefined), true) && locale.supported.length > 1 && ( <header className="ps-header">
<div id="kc-locale"> {realm.internationalizationEnabled && (assert(locale !== undefined), true) && locale.supported.length > 1 && (
<div id="kc-locale-wrapper" className="ps-locale-dropdown"> <div id="kc-locale">
<div className="ps-dropdown" id="kc-locale-dropdown"> <div id="kc-locale-wrapper" className="ps-locale-dropdown">
<a href="#" id="kc-current-locale-link"> <div className="ps-dropdown" id="kc-locale-dropdown">
{labelBySupportedLanguageTag[currentLanguageTag]} <a href="#" id="kc-current-locale-link">
</a> {labelBySupportedLanguageTag[currentLanguageTag]}
<ul> </a>
{locale.supported.map(({ languageTag }) => ( <ul>
<li key={languageTag} className="ps-dropdown-item"> {locale.supported.map(({ languageTag }) => (
<a href="#" onClick={() => changeLocale(languageTag)}> <li key={languageTag} className="ps-dropdown-item">
{labelBySupportedLanguageTag[languageTag]} <a href="#" onClick={() => changeLocale(languageTag)}>
</a> {labelBySupportedLanguageTag[languageTag]}
</li> </a>
))} </li>
</ul> ))}
</div> </ul>
</div> </div>
</div> </div>
)} </div>
{!(auth !== undefined && auth.showUsername && !auth.showResetCredentials) ? ( )}
displayRequiredFields ? ( {!(auth !== undefined && auth.showUsername && !auth.showResetCredentials) ? (
<div className="ps-required-fields"> displayRequiredFields ? (
<div className="ps-required-fields--field"> <div className="ps-required-fields">
<span className="subtitle"> <div className="ps-required-fields--field">
<span className="required">*</span> <span className="subtitle">
{msg("requiredFields")} <span className="required">*</span>
</span> {msg("requiredFields")}
</div> </span>
<div className="col-md-10"> </div>
<h1 id="kc-page-title">{headerNode}</h1> <div className="col-md-10">
</div> <h1 id="kc-page-title">{headerNode}</h1>
</div> </div>
) : ( </div>
<h1 id="kc-page-title">{headerNode}</h1> ) : (
) <h1 id="kc-page-title">{headerNode}</h1>
) : displayRequiredFields ? ( )
<div className="ps-content"> ) : displayRequiredFields ? (
<div className="ps-required"> <div className="ps-content">
<span className="subtitle"> <div className="ps-required">
<span className="required">*</span> {msg("requiredFields")} <span className="subtitle">
</span> <span className="required">*</span> {msg("requiredFields")}
</div> </span>
<div className="col-md-10"> </div>
{showUsernameNode} <div className="col-md-10">
<div className="ps-form-group"> {showUsernameNode}
<div id="kc-username"> <div className="ps-form-group">
<label id="kc-attempted-username">{auth?.attemptedUsername}</label> <div id="kc-username">
<a id="reset-login" href={url.loginRestartFlowUrl}> <label id="kc-attempted-username">{auth?.attemptedUsername}</label>
<div className="kc-login-tooltip"> <a id="reset-login" href={url.loginRestartFlowUrl}>
<i className="ps-icon ps-icon_restart-flow"></i> <div className="kc-login-tooltip">
<span className="kc-tooltip-text">{msg("restartLoginTooltip")}</span> <i className="ps-icon ps-icon_restart-flow"></i>
</div> <span className="kc-tooltip-text">{msg("restartLoginTooltip")}</span>
</a> </div>
</div> </a>
</div> </div>
</div> </div>
</div> </div>
) : ( </div>
<> ) : (
{showUsernameNode} <>
<div className="ps-form-group"> {showUsernameNode}
<div id="kc-username"> <div className="ps-form-group">
<label id="kc-attempted-username">{auth?.attemptedUsername}</label> <div id="kc-username">
<a id="reset-login" href={url.loginRestartFlowUrl}> <label id="kc-attempted-username">{auth?.attemptedUsername}</label>
<div className="kc-login-tooltip"> <a id="reset-login" href={url.loginRestartFlowUrl}>
<i className="ps-icon ps-icon_restart-flow"></i> <div className="kc-login-tooltip">
<span className="kc-tooltip-text">{msg("restartLoginTooltip")}</span> <i className="ps-icon ps-icon_restart-flow"></i>
</div> <span className="kc-tooltip-text">{msg("restartLoginTooltip")}</span>
</a> </div>
</div> </a>
</div> </div>
</> </div>
)} </>
</header> )}
<div id="kc-content"> </header>
<div id="kc-content-wrapper"> <div id="kc-content">
{/* App-initiated actions should not see warning messages about the need to complete the action during login. */} <div id="kc-content-wrapper">
{displayMessage && message !== undefined && (message.type !== "warning" || !isAppInitiatedAction) && ( {/* App-initiated actions should not see warning messages about the need to complete the action during login. */}
<div className={clsx("alert", `alert-${message.type}`)}> {displayMessage && message !== undefined && (message.type !== "warning" || !isAppInitiatedAction) && (
{message.type === "success" && <span className={getClassName("kcFeedbackSuccessIcon")}></span>} <div className={clsx("alert", `alert-${message.type}`)}>
{message.type === "warning" && <span className={getClassName("kcFeedbackWarningIcon")}></span>} {message.type === "success" && <span className={getClassName("kcFeedbackSuccessIcon")}></span>}
{message.type === "error" && <span className={getClassName("kcFeedbackErrorIcon")}></span>} {message.type === "warning" && <span className={getClassName("kcFeedbackWarningIcon")}></span>}
{message.type === "info" && <span className={getClassName("kcFeedbackInfoIcon")}></span>} {message.type === "error" && <span className={getClassName("kcFeedbackErrorIcon")}></span>}
<span {message.type === "info" && <span className={getClassName("kcFeedbackInfoIcon")}></span>}
className="kc-feedback-text" <span
dangerouslySetInnerHTML={{ className="kc-feedback-text"
"__html": message.summary dangerouslySetInnerHTML={{
}} "__html": message.summary
/> }}
</div> />
)} </div>
{children} )}
{auth !== undefined && auth.showTryAnotherWayLink && showAnotherWayIfPresent && ( {children}
<form {auth !== undefined && auth.showTryAnotherWayLink && showAnotherWayIfPresent && (
id="kc-select-try-another-way-form" <form
action={url.loginAction} id="kc-select-try-another-way-form"
method="post" action={url.loginAction}
> method="post"
<div> >
<div className="ps-form-group"> <div>
<input type="hidden" name="tryAnotherWay" value="on" /> <div className="ps-form-group">
<a <input type="hidden" name="tryAnotherWay" value="on" />
href="#" <a
id="try-another-way" href="#"
onClick={() => { id="try-another-way"
document.forms["kc-select-try-another-way-form" as never].submit(); onClick={() => {
return false; document.forms["kc-select-try-another-way-form" as never].submit();
}} return false;
> }}
{msg("doTryAnotherWay")} >
</a> {msg("doTryAnotherWay")}
</div> </a>
</div> </div>
</form> </div>
)} </form>
{displayInfo && ( )}
<div id="kc-info"> {displayInfo && (
<div id="kc-info-wrapper"> <div id="kc-info">
{infoNode} <div id="kc-info-wrapper">
</div> {infoNode}
</div> </div>
)} </div>
</div> )}
</div> </div>
</> </div>
</div>
); );
} }

View file

@ -0,0 +1,27 @@
.ps-background {
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-between;
&--logo {
width: 100px;
margin: 0.1rem;
}
&--1312 {
transform: rotate(34deg);
transform-origin: center center;
color: #eee;
position: fixed;
z-index: 1;
top: -50vh;
left: -50vw;
font-weight: 900;
font-size: 7rem;
line-height: 6rem;
width: 200vw;
height: 200vh;
}
}

View file

@ -0,0 +1,32 @@
.ps-button {
font-size: 1rem;
padding: 0.5em 1em;
line-height: 1.2em;
border: 0.125em solid var(--foreground);
border-radius: 1.5em;
background-color: var(--background-darker-2);
cursor: pointer;
&:hover,
&:focus {
border-color: var(--accent);
}
&_primary {
border: 0.25em solid var(--foreground);
background-color: var(--background);
color: var(--foreground);
font-weight: bold;
&:focus,
&:hover {
background-color: var(--foreground);
color: var(--background);
}
}
&_small {
font-size: 0.8rem;
padding: 0.25em 0.7em;
}
}

View file

@ -0,0 +1,19 @@
.ps-card {
background-color: var(--background);
display: flex;
flex-direction: column;
border: 1rem solid var(--foreground);
&--header {
padding: 2rem;
}
&--title {
margin: 0;
padding: 0;
}
&--body {
padding: 0rem 2rem;
}
}

View file

@ -0,0 +1,10 @@
.ps-container {
display: flex;
flex-direction: column;
align-items: stretch;
> * {
margin: 0;
margin-bottom: 1.25rem;
}
}

View file

@ -0,0 +1,19 @@
.ps-footer {
display: flex;
margin-top: auto;
z-index: 1;
&--link {
&:hover {
text-shadow: 0.2vw 0px 0px var(--accent);
}
@media screen and (min-width: 700px) {
font-size: 4rem;
}
@media screen and (min-width: 1000px) {
font-size: 2rem;
}
}
}

View file

@ -0,0 +1,21 @@
.ps-form-group {
display: flex;
flex-direction: column;
&--label {
margin-bottom: 0.5rem;
display: flex;
font-weight: bold;
}
.ps-button {
align-self: flex-start;
}
&--error {
margin-top: 0.25rem;
color: var(--accent);
font-weight: bold;
// font-family: monospace;
}
}

View file

@ -0,0 +1,54 @@
.ps-header {
display: flex;
justify-content: space-between;
padding: 0;
margin: 0;
overflow-x: auto;
z-index: 100;
&--title {
font-size: 1.5rem;
padding: 0 1rem;
margin: 0;
border-bottom: 0.5rem solid var(--foreground);
background-color: var(--background);
border-right: 0.5rem solid var(--foreground);
pointer-events: all;
}
&--i18n {
margin-left: auto;
}
&--nav {
display: flex;
border-bottom: 0.5rem solid var(--foreground);
border-left: 0.5rem solid var(--foreground);
background-color: var(--background);
padding-left: 1rem;
pointer-events: all;
}
&--nav-list {
display: flex;
justify-content: flex-end;
align-items: center;
list-style: none;
margin: 0;
padding: 0;
}
&--nav-item {
margin: 0;
margin-right: 1rem;
&-action {
color: var(--foreground);
text-decoration: none;
&:hover {
color: var(--accent);
}
}
}
}

View file

@ -0,0 +1,25 @@
.ps-homelink {
pointer-events: all;
color: var(--foreground);
background: white;
text-decoration: none;
text-align: center;
font-weight: 900;
font-size: 24px;
padding: 8px;
line-height: 1em;
text-shadow: 0.15vw 0px 0px white;
transition: text-shadow 0.1s ease;
border: 12px solid black;
border-top: 0;
border-left: 0;
&:hover {
text-shadow: 0.3vw 0px 0px var(--accent);
}
@media screen and (min-width: 1200px) {
font-size: 32px;
padding: 12px;
}
}

View file

@ -0,0 +1,18 @@
.ps-i18n-links {
display: flex;
margin: 0;
pointer-events: all;
color: var(--foreground);
background: white;
text-decoration: none;
text-align: center;
font-weight: 900;
font-size: 24px;
padding: 8px;
line-height: 1em;
text-shadow: 0.15vw 0px 0px var(--background);
transition: text-shadow 0.1s ease;
border: 12px solid var(--foreground);
border-top: 0;
border-right: 0;
}

View file

@ -0,0 +1,54 @@
* {
box-sizing: border-box;
}
html {
--accent: #ed1c24;
--foreground: #000;
--foreground-lighter-1: rgba(0, 0, 0, 0.7);
--foreground-lighter-2: rgba(0, 0, 0, 0.3);
--background: #fff;
--background-darker-1: #f5f5f5;
--background-darker-2: #eeeeee;
font-family: 'Open Sans', Arial, sans-serif;
font-weight: 800;
background: var(--background);
color: var(--foreground);
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
box-sizing: border-box;
width: 100vw;
height: 100vh;
margin: 0;
font-size: 16px;
@media screen and (min-width: 1200px) {
font-size: 20px;
}
}
*:focus-visible {
outline: 0.2rem solid var(--accent);
}
@import './container';
@import './link';
@import './card';
@import './button';
@import './input';
@import './table';
@import './form-group';
@import './homelink';
@import './i18n-links';
@import './main';
@import './header';
@import './page';
@import './login-flow-pre';
@import './section-nav';
@import './logo';
@import './background';
@import './footer';

View file

@ -0,0 +1,23 @@
.ps-input {
padding: 0.5rem 0.5rem;
border: 2px solid var(--foreground-lighter-1);
font-size: 1.2rem;
&:hover,
&:focus {
border-color: var(--accent);
}
&:focus {
color: var(--background);
background-color: var(--foreground);
}
&:disabled {
background-color: var(--background-darker-2);
&:hover {
border-color: var(--foreground-lighter-1);
}
}
}

View file

@ -0,0 +1,11 @@
.ps-link {
cursor: pointer;
color: var(--accent);
border-bottom: 1px solid transparent;
transition: border-bottom 0.1s ease;
text-decoration: none;
&:hover {
border-bottom: 4px solid var(--accent);
}
}

View file

@ -0,0 +1,16 @@
.ps-login-flow-pre {
margin: 2rem;
display: flex;
border-bottom: 0.25rem solid var(--foreground);
padding-bottom: 0.25rem;
&--selected {
font-weight: bold;
margin-right: 1rem;
}
&--cancel {
font-weight: normal;
}
}

View file

@ -0,0 +1,45 @@
.ps-logo {
display: flex;
align-items: center;
justify-content: center;
position: relative;
z-index: 1;
width: 100px;
&--base {
animation-name: rotate;
animation-duration: 0.3s;
animation-timing-function: linear;
animation-play-state: paused;
animation-iteration-count: infinite;
&:hover {
animation-play-state: running;
}
}
&:nth-child(2n) &--base { animation-delay: -0.1s; }
&:nth-child(3n) &--base { animation-delay: -0.3s; }
&:nth-child(5n) &--base { animation-delay: -0.5s; }
&:nth-child(7n) &--base { animation-delay: -7s; }
&:nth-child(11n) &--base { animation-delay: -0.9s; }
&:nth-child(13n) &--base { animation-delay: -1s; }
&--base::before {
position: absolute;
display: block;
content: '';
width: 100%;
height: 100%;
border-radius: 50%;
}
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}

View file

@ -0,0 +1,37 @@
.ps-main {
display: flex;
flex-direction: column;
align-items: stretch;
justify-content: space-between;
height: 100vh;
width: 100vw;
margin: 0;
padding-top: 10vw;
padding-bottom: 2vw;
overflow: auto;
position: relative;
&--background {
position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
overflow: hidden;
}
&--page {
z-index: 1;
}
&_full {
padding: 0;
}
&_full &--page {
@media screen and (min-width: 1200px) {
flex-direction: column;
flex-wrap: nowrap;
}
}
}

View file

@ -0,0 +1,3 @@
.ps-nav {
display: flex;
}

View file

@ -0,0 +1,150 @@
.ps-page {
display: flex;
width: 100vw;
flex-direction: column;
align-items: center;
justify-content: flex-start;
padding: 0;
pointer-events: none;
padding-top: 4rem;
@media screen and (min-width: 1200px) {
padding: 1vw;
padding-top: 4rem;
flex-direction: row;
align-items: flex-start;
}
&_home {
flex-direction: row;
flex-wrap: wrap;
}
&--header {
width: 100%;
top: 0;
left: 0;
right: 0;
height: auto;
position: fixed;
}
&--title {
font-size: 2rem;
border-bottom: 0.5rem solid var(--foreground);
padding-bottom: 0.5rem;
margin: 2rem;
}
&--section {
border: 12px solid black;
margin-top: 2rem;
margin-bottom: 2rem;
max-width: 700px;
flex-basis: 100%;
flex-shrink: 1;
pointer-events: all;
color: var(--foreground);
background: var(--background);
overflow-wrap: break-word;
hyphens: auto;
pointer-events: all;
@media screen and (min-width: 1200px) {
margin: 1vw;
}
&_home {
padding: 5vw;
}
&_full {
max-width: unset;
width: calc(100vw - 1.6rem);
margin: 0.8rem;
@media screen and (min-width: 1200px) {
width: 96vw;
margin: 1vw;
}
}
a {
color: var(--accent);
border-bottom: 1px solid transparent;
transition: border-bottom 0.1s ease;
text-decoration: none;
&:hover {
border-bottom: 4px solid var(--accent);
}
}
img {
width: 230px;
margin-top: 1rem;
}
}
&--section-link {
position: sticky;
top: 0;
background-color: var(--background);
padding: 1rem;
display: flex;
justify-content: flex-end;
align-items: center;
text-align: right;
padding-left: 132px;
@media screen and (min-width: 1200px) {
display: none;
border-bottom: 0;
}
&-icon {
margin-left: 8px;
}
}
&--section-contents {
margin: 2rem;
margin-bottom: 0;
font-weight: 500;
line-height: 1.4;
&:last-child {
margin-bottom: 5vw;
}
pre,
code {
background-color: var(--background-darker-2);
border-radius: 4px;
padding: 4px;
}
pre {
border: 1px solid var(--foreground-lighter-2);
}
> * {
margin-bottom: 0;
margin-top: 0.5rem;
}
> .ps-table {
margin-top: 1rem;
+ * {
margin-top: 1rem;
}
}
> h2, h3, h4 {
margin-top: 1.5rem;
line-height: 1.5;
}
}
}

View file

@ -0,0 +1,38 @@
.ps-section-nav {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
position: sticky;
top: 0;
left: 0;
width: 100%;
background-color: var(--background);
border-bottom: 2px solid var(--foreground);
overflow-x: auto;
&--list {
list-style: none;
display: flex;
position: sticky;
margin: 0 -0.5rem;
}
&--link {
display: flex;
a {
padding: 1rem 0.5rem;
}
&_active {
a {
color: var(--foreground);
border-bottom: 4px solid var(--foreground);
&:hover {
border-color: var(--foreground);
}
}
}
}
}

View file

@ -0,0 +1,35 @@
.ps-table {
overflow: auto;
border-collapse: collapse;
margin-left: -0.25rem;
width: calc(100% + 0.25rem);
td, th {
padding: 0.1rem 0.25rem;
}
tr {
border: 0;
border-left: 0.25rem solid transparent;
&:nth-child(2n) {
background-color: var(--background-darker-1);
border-left: 0.25rem solid var(--background-darker-1);
}
&:hover {
background-color: var(--background-darker-2);
border-color: var(--accent);
}
}
thead tr {
border-bottom: 4px solid var(--foreground-lighter-1);
font-weight: bold;
text-align: center;
}
thead td, th {
padding: 0.1rem 0.5rem;
}
}

View file

@ -0,0 +1,322 @@
/* To regenerate this file, run $ google-font-downloader 'https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,800;1,400;1,800&display=swap' */
/* cyrillic-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
// }
// /* cyrillic */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
// }
// /* greek-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+1F00-1FFF;
// }
// /* greek */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0370-03FF;
// }
// /* hebrew */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
// }
// /* vietnamese */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
// }
// /* latin-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
// }
// /* latin */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6FxZCJgg.woff2) format('woff2');
// unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
// }
// /* cyrillic-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
// }
// /* cyrillic */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
// }
// /* greek-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+1F00-1FFF;
// }
// /* greek */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0370-03FF;
// }
// /* hebrew */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
// }
// /* vietnamese */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
// }
// /* latin-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06FxZCJgvAQ.woff2) format('woff2');
// unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
// }
// /* latin */
// @font-face {
// font-family: 'Open Sans';
// font-style: italic;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6FxZCJgg.woff2) format('woff2');
// unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
// }
// /* cyrillic-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
// }
// /* cyrillic */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
// }
// /* greek-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+1F00-1FFF;
// }
// /* greek */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0370-03FF;
// }
// /* hebrew */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
// }
// /* vietnamese */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
// }
// /* latin-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
// }
// /* latin */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 400;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2) format('woff2');
// unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
// }
// /* cyrillic-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
// }
// /* cyrillic */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
// }
// /* greek-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+1F00-1FFF;
// }
// /* greek */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0370-03FF;
// }
// /* hebrew */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F;
// }
// /* vietnamese */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
// }
// /* latin-ext */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu0SC55K5gw.woff2) format('woff2');
// unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
// }
// /* latin */
// @font-face {
// font-family: 'Open Sans';
// font-style: normal;
// font-weight: 800;
// font-stretch: 100%;
// font-display: swap;
// src: url(fonts/opensans/v34/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2) format('woff2');
// unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
// }

View file

@ -3421,7 +3421,7 @@ cheerio@^1.0.0-rc.5:
parse5 "^7.0.0" parse5 "^7.0.0"
parse5-htmlparser2-tree-adapter "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0"
chokidar@^3.5.3: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
version "3.6.0" version "3.6.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
@ -4941,6 +4941,11 @@ ignore@^5.2.0, ignore@^5.2.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
immutable@^4.0.0:
version "4.3.5"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0"
integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==
import-fresh@^3.2.1: import-fresh@^3.2.1:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
@ -6839,6 +6844,15 @@ safe-buffer@5.2.1, safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@^1.75.0:
version "1.75.0"
resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c"
integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
source-map-js ">=0.6.2 <2.0.0"
scheduler@^0.23.0: scheduler@^0.23.0:
version "0.23.0" version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
@ -6989,6 +7003,11 @@ socks@^2.6.2:
ip-address "^9.0.5" ip-address "^9.0.5"
smart-buffer "^4.2.0" smart-buffer "^4.2.0"
"source-map-js@>=0.6.2 <2.0.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
source-map-js@^1.0.2: source-map-js@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"