Compare commits

...

2 Commits

Author SHA1 Message Date
72f0eab718 Script updates
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful
2026-03-12 16:46:41 -03:00
beffd5f4e8 CSS and @font-face fixes 2026-03-12 16:31:58 -03:00
33 changed files with 133 additions and 91 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "mifi-ventures-landing",
"version": "4.0.1",
"version": "4.0.2",
"private": true,
"repository": "https://git.mifi.dev/mifi-ventures/landing.git",
"packageManager": "pnpm@10.31.0+sha512.e3927388bfaa8078ceb79b748ffc1e8274e84d75163e67bc22e06c0d3aed43dd153151cbf11d7f8301ff4acb98c68bdc5cadf6989532801ffafe3b3e4a63c268",
@@ -12,11 +12,11 @@
"dev": "vite dev",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
"format": "prettier --write \"src/**/*.{ts,js,svelte,css,json}\"",
"format": "prettier --write \"src/**/*.{ts,js,svelte,css,json}\" \"static/**/*.{css,html,js}\"",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"lint:css": "stylelint \"src/**/*.css\" \"src/**/*.svelte\"",
"lint:css:fix": "stylelint \"src/**/*.css\" \"src/**/*.svelte\" --fix",
"lint:css": "stylelint \"src/**/*.css\" \"src/**/*.svelte\" \"static/**/*.css\"",
"lint:css:fix": "stylelint \"src/**/*.css\" \"src/**/*.svelte\" \"static/**/*.css\" --fix",
"preview": "serve dist -p 4173",
"test": "vitest run",
"test:unit": "vitest run",

View File

@@ -24,4 +24,5 @@ docker run --rm \
npx serve dist -p 4173 &
sleep 2
pnpm exec playwright test
pnpm install --config.confirmModulesPurge=false
'

View File

@@ -11,7 +11,9 @@ if [ -n "$CI" ]; then
fi
if command -v docker >/dev/null 2>&1; then
exec bash "$(dirname "$0")/run-e2e-in-docker.sh"
bash "$(dirname "$0")/run-e2e-in-docker.sh"
pnpm install --config.confirmModulesPurge=false
exit 0
fi
# No Docker: run in current environment (e.g. devcontainer; same image as CI)

View File

@@ -28,6 +28,7 @@ if command -v docker >/dev/null 2>&1; then
sleep 2
pnpm exec playwright test --update-snapshots
'
pnpm install --config.confirmModulesPurge=false
else
echo "Updating snapshots in the current environment (matches CI when using the devcontainer)."
echo ""

View File

@@ -131,6 +131,42 @@
}
}
/* ========================================
Local Font Faces
======================================== */
@font-face {
font-family: Inter;
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/assets/fonts/inter-v20-latin-regular.woff2') format('woff2');
}
@font-face {
font-family: Inter;
font-style: normal;
font-weight: 500;
font-display: swap;
src: url('/assets/fonts/inter-v20-latin-500.woff2') format('woff2');
}
@font-face {
font-family: Inter;
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('/assets/fonts/inter-v20-latin-700.woff2') format('woff2');
}
@font-face {
font-family: Fraunces;
font-style: normal;
font-weight: 600;
font-display: swap;
src: url('/assets/fonts/fraunces-v38-latin-600.woff2') format('woff2');
}
/* ========================================
Base Styles
======================================== */
@@ -178,6 +214,11 @@ body {
text-rendering: optimizeLegibility;
}
strong,
b {
font-weight: var(--font-weight-bold);
}
/* ========================================
Skip Link (Accessibility)
======================================== */

View File

@@ -47,13 +47,6 @@
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/assets/fonts/fraunces-v38-latin-700.woff2"
as="font"
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/assets/fonts/inter-v20-latin-regular.woff2"
@@ -61,13 +54,6 @@
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/assets/fonts/inter-v20-latin-italic.woff2"
as="font"
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/assets/fonts/inter-v20-latin-500.woff2"
@@ -75,13 +61,6 @@
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/assets/fonts/inter-v20-latin-600.woff2"
as="font"
type="font/woff2"
crossorigin="anonymous"
/>
<link
rel="preload"
href="/assets/fonts/inter-v20-latin-700.woff2"

View File

@@ -50,7 +50,9 @@
<h2 id={`${section.id}-heading`}>{section.heading}</h2>
{#each section.body as para}
<p>
{#if section.id === 'contact' && para === 'legal@mifi.ventures'}
{#if section.id === 'contact' && para === 'mifi Ventures LLC'}
<strong>{para}</strong>
{:else if section.id === 'contact' && para === 'legal@mifi.ventures'}
<a href="mailto:legal@mifi.ventures"
>legal@mifi.ventures</a
>

View File

@@ -28,7 +28,9 @@
<h2 id={`${section.id}-heading`}>{section.heading}</h2>
{#each section.body as para}
<p>
{#if section.id === 'contact' && para === 'legal@mifi.ventures'}
{#if section.id === 'contact' && para === 'mifi Ventures LLC'}
<strong>{para}</strong>
{:else if section.id === 'contact' && para === 'legal@mifi.ventures'}
<a href="mailto:legal@mifi.ventures"
>legal@mifi.ventures</a
>

View File

@@ -1,13 +1,17 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>404 Not Found — mifi Ventures</title>
<meta name="theme-color" content="#0052cc" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#4da6ff" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="stylesheet" href="/assets/error-pages.css">
<meta
name="theme-color"
content="#0052cc"
media="(prefers-color-scheme: light)"
/>
<meta name="theme-color" content="#4da6ff" media="(prefers-color-scheme: dark)" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="stylesheet" href="/assets/error-pages.css" />
</head>
<body class="error-page">
<main>

View File

@@ -1,13 +1,17 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>410 Gone — mifi Ventures</title>
<meta name="theme-color" content="#0052cc" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#4da6ff" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="stylesheet" href="/assets/error-pages.css">
<meta
name="theme-color"
content="#0052cc"
media="(prefers-color-scheme: light)"
/>
<meta name="theme-color" content="#4da6ff" media="(prefers-color-scheme: dark)" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="stylesheet" href="/assets/error-pages.css" />
</head>
<body class="error-page">
<main>

View File

@@ -32,22 +32,33 @@
}
/* Local fonts — same paths as +layout.svelte preloads */
@font-face {
font-family: 'Inter';
font-family: Inter;
font-style: normal;
font-weight: 400;
font-display: swap;
src: url('/assets/fonts/inter-v20-latin-regular.woff2') format('woff2');
}
@font-face {
font-family: 'Inter';
font-family: Inter;
font-style: normal;
font-weight: 500;
font-display: swap;
src: url('/assets/fonts/inter-v20-latin-500.woff2') format('woff2');
}
@font-face {
font-family: 'Fraunces';
font-family: Inter;
font-style: normal;
font-weight: 700;
font-display: swap;
src: url('/assets/fonts/inter-v20-latin-700.woff2') format('woff2');
}
@font-face {
font-family: Fraunces;
font-style: normal;
font-weight: 600;
font-display: swap;
@@ -67,15 +78,18 @@
color: var(--ep-text);
background-color: var(--ep-bg-alt);
}
.error-page main {
text-align: center;
padding: 2rem 1.5rem;
max-width: 28rem;
}
.error-page .emoji {
font-size: 4rem;
margin-bottom: 0.5rem;
}
.error-page h1 {
font-family: var(--ep-font-heading);
font-size: 2rem;
@@ -83,19 +97,23 @@
margin: 0 0 0.75rem;
color: var(--ep-text);
}
.error-page p {
margin: 0 0 1.5rem;
color: var(--ep-text-secondary);
}
.error-page a {
color: var(--ep-primary);
font-weight: 500;
text-decoration: none;
}
.error-page a:hover {
color: var(--ep-primary-hover);
text-decoration: underline;
}
.error-page a:focus-visible {
outline: 2px solid var(--ep-primary);
outline-offset: 2px;

View File

@@ -69,10 +69,7 @@
try {
var clarityScript = document.createElement('script');
clarityScript.defer = true;
setScriptSrc(
clarityScript,
'https://www.clarity.ms/tag/vuo5q3yf79?ref=bwt',
);
setScriptSrc(clarityScript, 'https://www.clarity.ms/tag/vuo5q3yf79?ref=bwt');
document.head.appendChild(clarityScript);
} catch (e2) {
console.error('Failed to load Microsoft Clarity', e2);
@@ -142,4 +139,3 @@
init();
}
})();

View File

@@ -1,8 +1,10 @@
window.dataLayer = window.dataLayer || [];
function gtag(){ window.dataLayer.push(arguments); }
function gtag() {
window.dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-36F29PDKRT", {
gtag('js', new Date());
gtag('config', 'G-36F29PDKRT', {
// optional, but often helpful:
anonymize_ip: true,
});

View File

@@ -1,8 +1,7 @@
const MOBILE_BREAKPOINT_PX = 768;
/** All focusable elements inside the menu (links). */
const getMenuFocusables = (menu) =>
menu.querySelectorAll('a[href]');
const getMenuFocusables = (menu) => menu.querySelectorAll('a[href]');
const mobileMenuHelper = () => {
const mobileMenu = document.getElementById('nav-menu');
@@ -15,10 +14,7 @@ const mobileMenuHelper = () => {
const syncMenuAriaHidden = () => {
if (isMobile()) {
const hidden = !mobileMenuToggle.checked;
mobileMenu.setAttribute(
'aria-hidden',
hidden ? 'true' : 'false',
);
mobileMenu.setAttribute('aria-hidden', hidden ? 'true' : 'false');
// inert removes the subtree from the a11y tree and makes descendants non-focusable
if (hidden) {
mobileMenu.setAttribute('inert', '');

View File

@@ -1,9 +1,6 @@
// Umami: safe track (no-op if script blocked or not loaded)
function umamiTrack(name, data) {
if (
typeof window.umami !== 'undefined' &&
typeof window.umami.track === 'function'
) {
if (typeof window.umami !== 'undefined' && typeof window.umami.track === 'function') {
if (data != null) window.umami.track(name, data);
else window.umami.track(name);
}

View File

@@ -39,7 +39,6 @@ describe('cookie-consent.js', () => {
dom = createBannerDOM();
const code = readFileSync(SCRIPT_PATH, 'utf8');
// eslint-disable-next-line no-eval
eval(code);
document.dispatchEvent(new Event('DOMContentLoaded'));
});
@@ -62,7 +61,6 @@ describe('cookie-consent.js', () => {
const appendChildSpy = vi.spyOn(document.head, 'appendChild');
const code = readFileSync(SCRIPT_PATH, 'utf8');
// eslint-disable-next-line no-eval
eval(code);
document.dispatchEvent(new Event('DOMContentLoaded'));
@@ -82,7 +80,6 @@ describe('cookie-consent.js', () => {
const appendChildSpy = vi.spyOn(document.head, 'appendChild');
const code = readFileSync(SCRIPT_PATH, 'utf8');
// eslint-disable-next-line no-eval
eval(code);
document.dispatchEvent(new Event('DOMContentLoaded'));

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 KiB

After

Width:  |  Height:  |  Size: 419 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 KiB

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 KiB

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 801 KiB

After

Width:  |  Height:  |  Size: 844 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 KiB

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 KiB

After

Width:  |  Height:  |  Size: 429 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 KiB

After

Width:  |  Height:  |  Size: 582 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 817 KiB

After

Width:  |  Height:  |  Size: 871 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 KiB

After

Width:  |  Height:  |  Size: 680 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 941 KiB

After

Width:  |  Height:  |  Size: 1009 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 KiB

After

Width:  |  Height:  |  Size: 543 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 KiB

After

Width:  |  Height:  |  Size: 746 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 886 KiB

After

Width:  |  Height:  |  Size: 632 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 891 KiB

After

Width:  |  Height:  |  Size: 960 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 KiB

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 506 KiB

After

Width:  |  Height:  |  Size: 532 KiB