CSS and @font-face fixes
@@ -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",
|
||||
|
||||
41
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)
|
||||
======================================== */
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
>
|
||||
|
||||
@@ -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
|
||||
>
|
||||
|
||||
@@ -1,20 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<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">
|
||||
</head>
|
||||
<body class="error-page">
|
||||
<main>
|
||||
<div class="emoji" aria-hidden="true">🔍</div>
|
||||
<h1>404 Not Found</h1>
|
||||
<p>This page went off to find itself. We’re not sure it’s coming back.</p>
|
||||
<p><a href="/">Back to mifi Ventures →</a></p>
|
||||
</main>
|
||||
</body>
|
||||
<head>
|
||||
<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" />
|
||||
</head>
|
||||
<body class="error-page">
|
||||
<main>
|
||||
<div class="emoji" aria-hidden="true">🔍</div>
|
||||
<h1>404 Not Found</h1>
|
||||
<p>This page went off to find itself. We’re not sure it’s coming back.</p>
|
||||
<p><a href="/">Back to mifi Ventures →</a></p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,20 +1,24 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<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">
|
||||
</head>
|
||||
<body class="error-page">
|
||||
<main>
|
||||
<div class="emoji" aria-hidden="true">👋</div>
|
||||
<h1>410 Gone</h1>
|
||||
<p>This page has left the building. We’ve moved on—and so should you.</p>
|
||||
<p><a href="/">Back to mifi Ventures →</a></p>
|
||||
</main>
|
||||
</body>
|
||||
<head>
|
||||
<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" />
|
||||
</head>
|
||||
<body class="error-page">
|
||||
<main>
|
||||
<div class="emoji" aria-hidden="true">👋</div>
|
||||
<h1>410 Gone</h1>
|
||||
<p>This page has left the building. We’ve moved on—and so should you.</p>
|
||||
<p><a href="/">Back to mifi Ventures →</a></p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
@@ -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();
|
||||
})();
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
@@ -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', '');
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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'));
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 554 KiB After Width: | Height: | Size: 419 KiB |
|
Before Width: | Height: | Size: 571 KiB After Width: | Height: | Size: 609 KiB |
|
Before Width: | Height: | Size: 784 KiB After Width: | Height: | Size: 565 KiB |
|
Before Width: | Height: | Size: 801 KiB After Width: | Height: | Size: 844 KiB |
|
Before Width: | Height: | Size: 397 KiB After Width: | Height: | Size: 296 KiB |
|
Before Width: | Height: | Size: 398 KiB After Width: | Height: | Size: 429 KiB |
|
Before Width: | Height: | Size: 805 KiB After Width: | Height: | Size: 582 KiB |
|
Before Width: | Height: | Size: 817 KiB After Width: | Height: | Size: 871 KiB |
|
Before Width: | Height: | Size: 927 KiB After Width: | Height: | Size: 680 KiB |
|
Before Width: | Height: | Size: 941 KiB After Width: | Height: | Size: 1009 KiB |
|
Before Width: | Height: | Size: 703 KiB After Width: | Height: | Size: 543 KiB |
|
Before Width: | Height: | Size: 695 KiB After Width: | Height: | Size: 746 KiB |
|
Before Width: | Height: | Size: 886 KiB After Width: | Height: | Size: 632 KiB |
|
Before Width: | Height: | Size: 891 KiB After Width: | Height: | Size: 960 KiB |
|
Before Width: | Height: | Size: 494 KiB After Width: | Height: | Size: 357 KiB |
|
Before Width: | Height: | Size: 506 KiB After Width: | Height: | Size: 532 KiB |