v120 - okay

This commit is contained in:
Arseny Sazhin (via WeWeb) 2025-08-06 15:58:47 +03:00
parent c2b6a6f17c
commit e27b11c26c
40 changed files with 129 additions and 68 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"cacheVersion":119,"page":{"id":"cf9f551f-e733-4934-a682-535575cb7c70","paths":{"en":"promo","default":"promo"},"cmsDataSetPath":null,"workflows":[]},"sections":{"4a2188f6-d98c-4150-9ba7-5918c72f3421":{"uid":"4a2188f6-d98c-4150-9ba7-5918c72f3421","linkId":"416695e7-e54e-4897-9f9a-befeb223f1b0","_state":{"style":{"default":{}}},"content":{"default":{"wwObjects":[],"_ww-layout_alignItems":"flex-start","_ww-layout_flexDirection":"column"}},"sectionBaseId":"99586bd3-2b15-4d6b-a025-6a50d07ca845","sectionTitle":"Section"}},"wwObjects":{},"collections":[],"variables":[],"workflows":[],"formulas":[],"libraryComponents":[]}
{"cacheVersion":120,"page":{"id":"cf9f551f-e733-4934-a682-535575cb7c70","paths":{"en":"promo","default":"promo"},"cmsDataSetPath":null,"workflows":[]},"sections":{"4a2188f6-d98c-4150-9ba7-5918c72f3421":{"uid":"4a2188f6-d98c-4150-9ba7-5918c72f3421","linkId":"416695e7-e54e-4897-9f9a-befeb223f1b0","_state":{"style":{"default":{}}},"content":{"default":{"wwObjects":[],"_ww-layout_alignItems":"flex-start","_ww-layout_flexDirection":"column"}},"sectionBaseId":"99586bd3-2b15-4d6b-a025-6a50d07ca845","sectionTitle":"Section"}},"wwObjects":{},"collections":[],"variables":[],"workflows":[],"formulas":[],"libraryComponents":[]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"name":"Образовательная платформа Meetguru","short_name":"Образовательная платформа Meetguru","icons":[{"src":"images/48-favicon.png?_wwcv=119","type":"image/png","sizes":"48x48"},{"src":"images/72-favicon.png?_wwcv=119","type":"image/png","sizes":"72x72"},{"src":"images/96-favicon.png?_wwcv=119","type":"image/png","sizes":"96x96"},{"src":"images/128-favicon.png?_wwcv=119","type":"image/png","sizes":"128x128"},{"src":"images/144-favicon.png?_wwcv=119","type":"image/png","sizes":"144x144"},{"src":"images/152-favicon.png?_wwcv=119","type":"image/png","sizes":"152x152"},{"src":"images/192-favicon.png?_wwcv=119","type":"image/png","sizes":"192x192"},{"src":"images/256-favicon.png?_wwcv=119","type":"image/png","sizes":"256x256"},{"src":"images/384-favicon.png?_wwcv=119","type":"image/png","sizes":"384x384"},{"src":"images/512-favicon.png?_wwcv=119","type":"image/png","sizes":"512x512"}],"start_url":"/","display":"fullscreen","scope":"/","background_color":"#FFFFFF","theme_color":"#FFFFFF"}
{"name":"Образовательная платформа Meetguru","short_name":"Образовательная платформа Meetguru","icons":[{"src":"images/48-favicon.png?_wwcv=120","type":"image/png","sizes":"48x48"},{"src":"images/72-favicon.png?_wwcv=120","type":"image/png","sizes":"72x72"},{"src":"images/96-favicon.png?_wwcv=120","type":"image/png","sizes":"96x96"},{"src":"images/128-favicon.png?_wwcv=120","type":"image/png","sizes":"128x128"},{"src":"images/144-favicon.png?_wwcv=120","type":"image/png","sizes":"144x144"},{"src":"images/152-favicon.png?_wwcv=120","type":"image/png","sizes":"152x152"},{"src":"images/192-favicon.png?_wwcv=120","type":"image/png","sizes":"192x192"},{"src":"images/256-favicon.png?_wwcv=120","type":"image/png","sizes":"256x256"},{"src":"images/384-favicon.png?_wwcv=120","type":"image/png","sizes":"384x384"},{"src":"images/512-favicon.png?_wwcv=120","type":"image/png","sizes":"512x512"}],"start_url":"/","display":"fullscreen","scope":"/","background_color":"#FFFFFF","theme_color":"#FFFFFF"}

View File

@ -1,4 +1,4 @@
const version = 119;
const version = 120;
self.addEventListener('install', event => {
// eslint-disable-next-line no-console
console.log(`Service worker v${version} installed`);

View File

@ -44,6 +44,7 @@ export const TEXT_CONFIGURATION = {
responsive: true,
states: true,
classes: true,
isStyle: true,
},
'_ww-text_fontSize': {
label: 'Size',
@ -63,6 +64,7 @@ export const TEXT_CONFIGURATION = {
bindable: true,
hidden: (content, _, boundProps) => content['_ww-text_font'] || boundProps['_ww-text_font'],
bindingValidation: { markdown: 'font-size', type: 'string', cssSupports: 'font-size' },
isStyle: true,
},
'_ww-text_fontFamily': {
label: 'Font family',
@ -74,6 +76,7 @@ export const TEXT_CONFIGURATION = {
bindable: true,
hidden: (content, _, boundProps) => content['_ww-text_font'] || boundProps['_ww-text_font'],
bindingValidation: { markdown: 'font-family', type: 'string', cssSupports: 'font-family' },
isStyle: true,
},
'_ww-text_fontWeight': {
label: 'Font weight',
@ -99,6 +102,7 @@ export const TEXT_CONFIGURATION = {
bindable: true,
hidden: (content, _, boundProps) => content['_ww-text_font'] || boundProps['_ww-text_font'],
bindingValidation: { markdown: 'font-weight', type: 'string', cssSupports: 'font-weight' },
isStyle: true,
},
'_ww-text_fontStyle': {
label: 'Font Style',
@ -116,6 +120,7 @@ export const TEXT_CONFIGURATION = {
classes: true,
hidden: (content, _, boundProps) => content['_ww-text_font'] || boundProps['_ww-text_font'],
bindingValidation: { markdown: 'font-style', type: 'string', cssSupports: 'font-style' },
isStyle: true,
},
'_ww-text_lineHeight': {
label: 'Line height',
@ -138,6 +143,7 @@ export const TEXT_CONFIGURATION = {
bindable: true,
hidden: (content, _, boundProps) => content['_ww-text_font'] || boundProps['_ww-text_font'],
bindingValidation: { markdown: 'line-height', type: 'string', cssSupports: 'line-height' },
isStyle: true,
},
'_ww-text_textAlign': {
label: 'Alignment',
@ -155,6 +161,7 @@ export const TEXT_CONFIGURATION = {
classes: true,
bindable: true,
bindingValidation: { markdown: 'text-align', type: 'string', cssSupports: 'text-align' },
isStyle: true,
},
'_ww-text_color': {
label: 'Text color',
@ -166,6 +173,7 @@ export const TEXT_CONFIGURATION = {
responsive: true,
states: true,
classes: true,
isStyle: true,
},
'_ww-text_textDecoration': {
label: 'Decoration',
@ -184,6 +192,7 @@ export const TEXT_CONFIGURATION = {
states: true,
classes: true,
bindingValidation: { markdown: 'text-decoration', type: 'string', cssSupports: 'text-decoration' },
isStyle: true,
},
'_ww-text_textDecorationStyle': {
label: 'Decoration style',
@ -208,6 +217,7 @@ export const TEXT_CONFIGURATION = {
type: 'string',
cssSupports: 'text-decoration-style',
},
isStyle: true,
},
'_ww-text_textDecorationColor': {
label: 'Decoration color',
@ -220,6 +230,7 @@ export const TEXT_CONFIGURATION = {
states: true,
classes: true,
hidden: content => content['_ww-text_textDecoration'] === 'none' || !content['_ww-text_textDecoration'],
isStyle: true,
},
'_ww-text_nowrap': {
label: 'No-wrap',
@ -230,6 +241,7 @@ export const TEXT_CONFIGURATION = {
states: true,
classes: true,
bindingValidation: { type: 'boolean', markdown: 'no-wrap' },
isStyle: true,
},
'_ww-text_ellipsis': {
hidden: content => !content['_ww-text_nowrap'],
@ -241,6 +253,7 @@ export const TEXT_CONFIGURATION = {
states: true,
classes: true,
bindingValidation: { type: 'boolean', markdown: 'ellipsis' },
isStyle: true,
},
'_ww-text_textTransform': {
label: 'Character case',
@ -259,6 +272,7 @@ export const TEXT_CONFIGURATION = {
bindingValidation: { markdown: 'text-transform', type: 'string', cssSupports: 'text-transform' },
states: true,
classes: true,
isStyle: true,
},
'_ww-text_textShadow': {
label: 'Text Shadows',
@ -270,6 +284,7 @@ export const TEXT_CONFIGURATION = {
states: true,
classes: true,
bindingValidation: { markdown: 'text-shadow', type: 'string', cssSupports: 'text-shadow' },
isStyle: true,
},
'_ww-text_letterSpacing': {
label: 'Letter spacing',
@ -288,6 +303,7 @@ export const TEXT_CONFIGURATION = {
classes: true,
bindable: true,
bindingValidation: { markdown: 'letter-spacing', type: 'string', cssSupports: 'letter-spacing' },
isStyle: true,
},
'_ww-text_wordSpacing': {
label: 'Word spacing',
@ -302,6 +318,7 @@ export const TEXT_CONFIGURATION = {
classes: true,
bindable: true,
bindingValidation: { markdown: 'word-spacing', type: 'string', cssSupports: 'word-spacing' },
isStyle: true,
},
'_ww-text_links': {
hidden: true,

View File

@ -219,7 +219,7 @@ export default {
const wwTechnicalAttributes = computed(() => {
let attributes = {
'data-ww-element': true,
'data-ww-element': !props.noInteraction,
'data-ww-uid': props.uid,
'data-ww-component-id': id,
};

View File

@ -1,11 +1,11 @@
<template>
<wwLocalContext :methods="localMethods" element-key="popup">
<wwLocalContext :methods="localMethods" :data="data" element-key="popup">
<wwLibraryComponent :uid="modal.uid" is-popup></wwLibraryComponent>
</wwLocalContext>
</template>
<script>
import { provide } from 'vue';
import { provide, computed } from 'vue';
import wwLibraryComponent from './wwLibraryComponent.vue';
import { usePopupStore } from '@/pinia/popup.js';
@ -17,14 +17,15 @@ export default {
type: Object,
required: true,
},
stacked: { type: Boolean, default: false },
},
setup(props) {
const modalsStore = usePopupStore();
const popupStore = usePopupStore();
const localMethods = {
close: {
description: 'Close the popup',
method(data) {
modalsStore.close(props.modal?.uid, data);
popupStore.close(props.modal?.uid, data);
},
editor: {
label: 'Close this popup instance',
@ -53,10 +54,21 @@ export default {
},
},
};
const data = computed(() => {
const instances = Object.values(popupStore.instances).filter(
m => m.libraryComponentBaseId === props.modal?.libraryComponentBaseId
);
return {
instancesCount: instances.length,
index: instances.findIndex(m => m.uid === props.modal?.uid),
totalCount: Object.keys(popupStore.instances).length,
};
});
provide('dragZoneId', props.modal?.uid);
provide('_wwPopupStacked', props.stacked);
return { localMethods };
return { localMethods, data };
},
};
</script>

File diff suppressed because one or more lines are too long

View File

@ -24,7 +24,10 @@
:section-id="activeLinkPopup.sectionId"
/>
</transition>
<wwFrontPopup v-for="(modal, uid) in modalsStore.instances" :key="uid" :modal="modal" />
<wwElement v-for="(popups, uid) in popupStore.stackedPopupUids" :key="uid" :uid="uid" no-interaction>
<wwFrontPopup v-for="pUid in popups" :key="pUid" :modal="popupStore.instances[pUid]" stacked />
</wwElement>
<wwFrontPopup v-for="uid in popupStore.singlePopupUids" :key="uid" :modal="popupStore.instances[uid]" />
</div>
</template>
@ -49,7 +52,7 @@ export default {
setup() {
const store = useStore();
const page = computed(() => store.getters['websiteData/getPage'] || { id: null, meta: {} });
const modalsStore = usePopupStore();
const popupStore = usePopupStore();
const designInfo = computed(() => store.getters['websiteData/getDesignInfo'] || {});
@ -70,7 +73,7 @@ export default {
x: 0,
y: 0,
},
modalsStore,
popupStore,
/* wwFront:start */
sections: computed(() => {
const sections = store.getters['websiteData/getSections'];

View File

@ -1,5 +1,6 @@
<template>
<div
v-if="!isStacked"
class="ww-dialog"
:style="!content.overlay && dialogStyle"
:class="[
@ -29,6 +30,7 @@
]"
></wwLayout>
</div>
<wwLayout v-else path="children" role="dialog"></wwLayout>
</template>
<script>
@ -40,7 +42,10 @@ export default {
content: { type: Object, required: true },
uid: { type: String, required: true },
},
events: [],
setup(props, { emit }) {
const isStacked = inject('_wwPopupStacked', false);
const isEditing = computed(() => {
// eslint-disable-next-line no-unreachable
return false;
@ -50,13 +55,14 @@ export default {
// TODO: will not work with several instances
watchEffect(() => {
if (props.content.preventScroll && !isEditing.value) {
if (props.content.preventScroll && !isEditing.value && !unref(isStacked)) {
wwLib.getFrontDocument().documentElement.classList.add('ww-dialog-open');
} else {
wwLib.getFrontDocument().documentElement.classList.remove('ww-dialog-open');
}
});
const animationDuration = computed(() => {
return props.content.animationDuration + 'ms';
});
@ -92,7 +98,7 @@ export default {
}
watchEffect(() => {
if (props.content.escClose) {
if (props.content.escClose && !isStacked) {
wwLib.getFrontDocument().addEventListener('keydown', onEscapeKeyDown);
} else {
wwLib.getFrontDocument().removeEventListener('keydown', onEscapeKeyDown);
@ -149,6 +155,7 @@ export default {
}
},
isEditing,
isStacked,
};
},
};

View File

@ -57,11 +57,9 @@ export default {
],
},
defaultValue: 'center',
hidden: content => content.type !== 'modal',
bindable: true,
},
customPositionX: {
hidden: content => content.sideModal !== 'custom' || content.type !== 'modal',
label: {
en: 'Horizontal',
fr: 'Horizontal',
@ -91,12 +89,11 @@ export default {
{ value: 'bottom', label: { en: 'Bottom', fr: 'Bas' } },
],
},
hidden: content => content.type !== 'sheet',
hidden: (content, sidepanelcontent) => content.type !== 'sheet' || sidepanelcontent?.isStacked,
defaultValue: 'top',
bindable: true,
},
align: {
hidden: content => content.type !== 'modal',
label: {
en: 'Align',
fr: 'Alignement',
@ -115,7 +112,6 @@ export default {
bindable: true,
},
customPositionY: {
hidden: content => content.align !== 'custom' || content.type !== 'modal',
label: {
en: 'Vertical',
fr: 'Vertical',
@ -149,7 +145,8 @@ export default {
bindable: true,
},
slideInDirection: {
hidden: content => content.animation !== 'slide-in' || content.animation === null,
hidden: (content, sidepanelcontent) =>
content.animation !== 'slide-in' || content.animation === null || sidepanelcontent?.isStacked,
label: {
en: 'Direction',
fr: 'Direction',
@ -180,7 +177,7 @@ export default {
max: 10000,
},
bindable: true,
hidden: content => content.animation === null,
hidden: (content, sidepanelcontent) => content.animation === null || sidepanelcontent?.isStacked,
},
animationEasing: {
label: {
@ -200,7 +197,7 @@ export default {
},
defaultValue: 'linear',
bindable: true,
hidden: content => content.animation === null,
hidden: (content, sidepanelcontent) => content.animation === null || sidepanelcontent?.isStacked,
},
preventScroll: {
@ -252,7 +249,6 @@ export default {
propertyHelp: {
tooltip: 'Whether the dialog should be closed when the user clicks outside the dialog.',
},
hidden: content => content.overlay,
},
overlayClickCloses: {
type: 'OnOff',
@ -266,7 +262,6 @@ export default {
propertyHelp: {
tooltip: 'You can prevent the dialog from closing when the user clicks the overlay.',
},
hidden: content => !content.overlay,
},
overlayBackgroundColor: {
label: {
@ -278,7 +273,7 @@ export default {
bindable: true,
responsive: true,
classes: true,
hidden: content => !content.overlay,
hidden: (content, sidepanelcontent) => !content.overlay || sidepanelcontent?.isStacked,
options: {
nullable: true,
},

View File

@ -34,8 +34,8 @@ import wwobject1be951afde7143e6ad1ee9b36de15529 from '@/components/elements/elem
import wwobject9ecb2cfccef74be8b7363e17a3b7e9ff from '@/components/elements/element-9ecb2cfc-cef7-4be8-b736-3e17a3b7e9ff/ww-config.js';
import wwobjecta823467cbdc74ceca38c71875c4c214a from '@/components/elements/element-a823467c-bdc7-4cec-a38c-71875c4c214a/ww-config.js';
import wwobject9ae1fce82e314bfda4d20450235bdfd5 from '@/components/elements/element-9ae1fce8-2e31-4bfd-a4d2-0450235bdfd5/ww-config.js';
import wwobjectc6c0c00e49fd4cb9bd785bc09945721e from '@/components/elements/element-c6c0c00e-49fd-4cb9-bd78-5bc09945721e/ww-config.js';
import wwobjectdeb10a015eef4aa190171b51c2ad6fd0 from '@/components/elements/element-deb10a01-5eef-4aa1-9017-1b51c2ad6fd0/ww-config.js';
import wwobjectc6c0c00e49fd4cb9bd785bc09945721e from '@/components/elements/element-c6c0c00e-49fd-4cb9-bd78-5bc09945721e/ww-config.js';
/* wwFront:end */
export const useComponentBasesStore = defineStore('componentBases', () => {
@ -74,8 +74,8 @@ export const useComponentBasesStore = defineStore('componentBases', () => {
'wwobject-9ecb2cfc-cef7-4be8-b736-3e17a3b7e9ff': getInheritedConfiguration({ ...wwobject9ecb2cfccef74be8b7363e17a3b7e9ff, name: 'wwobject-9ecb2cfc-cef7-4be8-b736-3e17a3b7e9ff' }),
'wwobject-a823467c-bdc7-4cec-a38c-71875c4c214a': getInheritedConfiguration({ ...wwobjecta823467cbdc74ceca38c71875c4c214a, name: 'wwobject-a823467c-bdc7-4cec-a38c-71875c4c214a' }),
'wwobject-9ae1fce8-2e31-4bfd-a4d2-0450235bdfd5': getInheritedConfiguration({ ...wwobject9ae1fce82e314bfda4d20450235bdfd5, name: 'wwobject-9ae1fce8-2e31-4bfd-a4d2-0450235bdfd5' }),
'wwobject-c6c0c00e-49fd-4cb9-bd78-5bc09945721e': getInheritedConfiguration({ ...wwobjectc6c0c00e49fd4cb9bd785bc09945721e, name: 'wwobject-c6c0c00e-49fd-4cb9-bd78-5bc09945721e' }),
'wwobject-deb10a01-5eef-4aa1-9017-1b51c2ad6fd0': getInheritedConfiguration({ ...wwobjectdeb10a015eef4aa190171b51c2ad6fd0, name: 'wwobject-deb10a01-5eef-4aa1-9017-1b51c2ad6fd0' })};
'wwobject-deb10a01-5eef-4aa1-9017-1b51c2ad6fd0': getInheritedConfiguration({ ...wwobjectdeb10a015eef4aa190171b51c2ad6fd0, name: 'wwobject-deb10a01-5eef-4aa1-9017-1b51c2ad6fd0' }),
'wwobject-c6c0c00e-49fd-4cb9-bd78-5bc09945721e': getInheritedConfiguration({ ...wwobjectc6c0c00e49fd4cb9bd785bc09945721e, name: 'wwobject-c6c0c00e-49fd-4cb9-bd78-5bc09945721e' })};
/* wwFront:end */
return {

View File

@ -58,5 +58,32 @@ export const usePopupStore = defineStore('popups', () => {
close,
closeAll,
instances,
stackedPopupUids: computed(() => {
const stacks = {};
Object.values(instances.value).forEach(popup => {
const isStacked =
wwLib.$store.getters['libraries/getComponents'][popup.libraryComponentBaseId]?.configuration?.popup
?.isStacked &&
wwLib.$store.getters['libraries/getComponents'][popup.libraryComponentBaseId]?.configuration?.popup
?.containerUid;
if (!isStacked) return;
const containerUid =
wwLib.$store.getters['libraries/getComponents'][popup.libraryComponentBaseId]?.configuration?.popup
?.containerUid;
if (!stacks[containerUid]) {
stacks[containerUid] = [];
}
stacks[containerUid].push(popup.uid);
});
return stacks;
}),
singlePopupUids: computed(() => {
return Object.keys(instances.value).filter(uid => {
const popup = instances.value[uid];
return !wwLib.$store.getters['libraries/getComponents'][popup.libraryComponentBaseId]?.configuration
?.popup?.isStacked;
});
}),
};
});

View File

@ -12,20 +12,20 @@
<link rel="icon" type="image/x-icon" href="favicon.ico?_wwcv={{cacheVersion}}" />
<link rel="manifest" href="manifest.json?_wwcv=119" />
<link rel="manifest" href="manifest.json?_wwcv=120" />
<meta name="theme-color" content="" />
<link rel="apple-touch-icon" sizes="48x48" href="images/48-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="72x72" href="images/72-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="96x96" href="images/96-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="128x128" href="images/128-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="144x144" href="images/144-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="152x152" href="images/152-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="192x192" href="images/192-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="256x256" href="images/256-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="384x384" href="images/384-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="512x512" href="images/512-favicon.png?_wwcv=119">
<link rel="apple-touch-icon" sizes="48x48" href="images/48-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="72x72" href="images/72-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="96x96" href="images/96-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="128x128" href="images/128-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="144x144" href="images/144-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="152x152" href="images/152-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="192x192" href="images/192-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="256x256" href="images/256-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="384x384" href="images/384-favicon.png?_wwcv=120">
<link rel="apple-touch-icon" sizes="512x512" href="images/512-favicon.png?_wwcv=120">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link href="/fonts/Phosphor/font.css?_wwcv=119" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link href="/fonts/Phosphor/font.css?_wwcv=120" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
<link href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'">
<style>:root{ --ww-default-font-family: 'Raleway', sans-serif }</style>
<style>

File diff suppressed because one or more lines are too long