diff --git a/package.json b/package.json
index 00653a4..048866e 100644
--- a/package.json
+++ b/package.json
@@ -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",
diff --git a/src/app.css b/src/app.css
index b844881..642084f 100644
--- a/src/app.css
+++ b/src/app.css
@@ -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)
======================================== */
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 34f2065..5267c94 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -47,13 +47,6 @@
type="font/woff2"
crossorigin="anonymous"
/>
-
-
-
{section.heading}
{#each section.body as para}
- {#if section.id === 'contact' && para === 'legal@mifi.ventures'}
+ {#if section.id === 'contact' && para === 'mifi Ventures LLC'}
+ {para}
+ {:else if section.id === 'contact' && para === 'legal@mifi.ventures'}
legal@mifi.ventures
diff --git a/src/routes/terms-of-service/+page.svelte b/src/routes/terms-of-service/+page.svelte
index 986660a..bfc49ee 100644
--- a/src/routes/terms-of-service/+page.svelte
+++ b/src/routes/terms-of-service/+page.svelte
@@ -28,7 +28,9 @@
{section.heading}
{#each section.body as para}
- {#if section.id === 'contact' && para === 'legal@mifi.ventures'}
+ {#if section.id === 'contact' && para === 'mifi Ventures LLC'}
+ {para}
+ {:else if section.id === 'contact' && para === 'legal@mifi.ventures'}
legal@mifi.ventures
diff --git a/static/404.html b/static/404.html
index a815eb5..c296c96 100644
--- a/static/404.html
+++ b/static/404.html
@@ -1,20 +1,24 @@
-
+
-
-
-
- 404 Not Found — mifi Ventures
-
-
-
-
-
-
-
- 🔍
- 404 Not Found
- This page went off to find itself. We’re not sure it’s coming back.
- Back to mifi Ventures →
-
-
+
+
+
+ 404 Not Found — mifi Ventures
+
+
+
+
+
+
+
+ 🔍
+ 404 Not Found
+ This page went off to find itself. We’re not sure it’s coming back.
+ Back to mifi Ventures →
+
+
diff --git a/static/410.html b/static/410.html
index fa2db08..afff3fe 100644
--- a/static/410.html
+++ b/static/410.html
@@ -1,20 +1,24 @@
-
+
-
-
-
- 410 Gone — mifi Ventures
-
-
-
-
-
-
-
- 👋
- 410 Gone
- This page has left the building. We’ve moved on—and so should you.
- Back to mifi Ventures →
-
-
+
+
+
+ 410 Gone — mifi Ventures
+
+
+
+
+
+
+
+ 👋
+ 410 Gone
+ This page has left the building. We’ve moved on—and so should you.
+ Back to mifi Ventures →
+
+
diff --git a/static/assets/error-pages.css b/static/assets/error-pages.css
index 4251131..a9de8ff 100644
--- a/static/assets/error-pages.css
+++ b/static/assets/error-pages.css
@@ -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;
diff --git a/static/assets/js/cookie-consent.js b/static/assets/js/cookie-consent.js
index 0908572..32e11a0 100644
--- a/static/assets/js/cookie-consent.js
+++ b/static/assets/js/cookie-consent.js
@@ -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();
}
})();
-
diff --git a/static/assets/js/copyright-year.js b/static/assets/js/copyright-year.js
index 23eead6..f0561ad 100644
--- a/static/assets/js/copyright-year.js
+++ b/static/assets/js/copyright-year.js
@@ -1,5 +1,5 @@
(function () {
- 'use strict';
- var el = document.getElementById('copyright-year');
- if (el) el.textContent = new Date().getFullYear();
+ 'use strict';
+ var el = document.getElementById('copyright-year');
+ if (el) el.textContent = new Date().getFullYear();
})();
diff --git a/static/assets/js/ga-init.js b/static/assets/js/ga-init.js
index 5e66bd2..108454a 100644
--- a/static/assets/js/ga-init.js
+++ b/static/assets/js/ga-init.js
@@ -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,
});
diff --git a/static/assets/js/mobile-menu-helper.js b/static/assets/js/mobile-menu-helper.js
index b9c0ff9..4f3d03d 100644
--- a/static/assets/js/mobile-menu-helper.js
+++ b/static/assets/js/mobile-menu-helper.js
@@ -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', '');
diff --git a/static/assets/js/umami-helper.js b/static/assets/js/umami-helper.js
index 17c9f14..80c64a1 100644
--- a/static/assets/js/umami-helper.js
+++ b/static/assets/js/umami-helper.js
@@ -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);
}
diff --git a/tests/unit/cookie-consent.test.ts b/tests/unit/cookie-consent.test.ts
index 7c0d678..8a5e0c5 100644
--- a/tests/unit/cookie-consent.test.ts
+++ b/tests/unit/cookie-consent.test.ts
@@ -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'));
diff --git a/tests/visual.spec.ts-snapshots/home-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/home-chromium-desktop-linux.png
index b2a0895..0698112 100644
Binary files a/tests/visual.spec.ts-snapshots/home-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/home-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/home-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/home-chromium-mobile-linux.png
index d4b89bc..91cfa26 100644
Binary files a/tests/visual.spec.ts-snapshots/home-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/home-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/privacy-policy-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/privacy-policy-chromium-desktop-linux.png
index a773a39..a2ce647 100644
Binary files a/tests/visual.spec.ts-snapshots/privacy-policy-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/privacy-policy-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/privacy-policy-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/privacy-policy-chromium-mobile-linux.png
index ddea19a..42c093d 100644
Binary files a/tests/visual.spec.ts-snapshots/privacy-policy-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/privacy-policy-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/services-chromium-desktop-linux.png
index 4545a2f..fd9f04e 100644
Binary files a/tests/visual.spec.ts-snapshots/services-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/services-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/services-chromium-mobile-linux.png
index da47c15..50fb136 100644
Binary files a/tests/visual.spec.ts-snapshots/services-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/services-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-desktop-linux.png
index f641f5f..1b8a8b8 100644
Binary files a/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-mobile-linux.png
index f687805..35cc5ff 100644
Binary files a/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/services-fractional-cto-for-early-stage-saas-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-desktop-linux.png
index ed82f7b..979143c 100644
Binary files a/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-mobile-linux.png
index daaeda6..08345ee 100644
Binary files a/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/services-hands-on-saas-architecture-consultant-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-desktop-linux.png
index a8bd853..e26443d 100644
Binary files a/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-mobile-linux.png
index 0eba1dd..9196b2d 100644
Binary files a/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/services-mvp-architecture-and-launch-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-desktop-linux.png
index c0b1eee..4b2e63e 100644
Binary files a/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-mobile-linux.png
index 5e2759a..7fa1818 100644
Binary files a/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/services-stage-aligned-infrastructure-chromium-mobile-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/terms-of-service-chromium-desktop-linux.png b/tests/visual.spec.ts-snapshots/terms-of-service-chromium-desktop-linux.png
index 7468c16..a4a90e8 100644
Binary files a/tests/visual.spec.ts-snapshots/terms-of-service-chromium-desktop-linux.png and b/tests/visual.spec.ts-snapshots/terms-of-service-chromium-desktop-linux.png differ
diff --git a/tests/visual.spec.ts-snapshots/terms-of-service-chromium-mobile-linux.png b/tests/visual.spec.ts-snapshots/terms-of-service-chromium-mobile-linux.png
index 3c1c4b9..412ceaf 100644
Binary files a/tests/visual.spec.ts-snapshots/terms-of-service-chromium-mobile-linux.png and b/tests/visual.spec.ts-snapshots/terms-of-service-chromium-mobile-linux.png differ