mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-17 00:39:41 +02:00
- Add uload project with apps/web structure
- Reorganize from flat to monorepo structure
- Remove PocketBase binary and local data
- Update to pnpm and @uload/web namespace
- Add picture project to monorepo
- Remove embedded git repository
- Unify all package names to @{project}/{app} schema:
- @maerchenzauber/* (was @storyteller/*)
- @manacore/* (was manacore-*, manacore)
- @manadeck/* (was web, backend, manadeck)
- @memoro/* (was memoro-web, landing, memoro)
- @picture/* (already unified)
- @uload/web
- Add convenient dev scripts for all apps:
- pnpm dev:{project}:web
- pnpm dev:{project}:landing
- pnpm dev:{project}:mobile
- pnpm dev:{project}:backend
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
103 lines
3.2 KiB
HTML
103 lines
3.2 KiB
HTML
<!doctype html>
|
|
<html lang="%paraglide.lang%" dir="%paraglide.dir%">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
|
|
<!-- PWA Meta Tags -->
|
|
<meta name="theme-color" content="#3b82f6" />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
<meta name="apple-mobile-web-app-title" content="uLoad" />
|
|
<meta name="mobile-web-app-capable" content="yes" />
|
|
|
|
<!-- PWA Manifest -->
|
|
<link rel="manifest" href="/manifest.json" />
|
|
|
|
<!-- Apple Touch Icons -->
|
|
<link rel="apple-touch-icon" href="/icons/icon-192x192.png" />
|
|
<link rel="apple-touch-icon" sizes="152x152" href="/icons/icon-152x152.png" />
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/icons/icon-192x192.png" />
|
|
|
|
<!-- Preconnect für Performance -->
|
|
<link rel="preconnect" href="https://pb.ulo.ad" />
|
|
<link rel="dns-prefetch" href="https://pb.ulo.ad" />
|
|
|
|
%sveltekit.head%
|
|
<!-- Umami Analytics -->
|
|
<script>
|
|
// Only load Umami if configured
|
|
if ('%sveltekit.env.PUBLIC_UMAMI_URL%'.startsWith('http')) {
|
|
const script = document.createElement('script');
|
|
script.defer = true;
|
|
script.src = '%sveltekit.env.PUBLIC_UMAMI_URL%/script.js';
|
|
script.dataset.websiteId = '%sveltekit.env.PUBLIC_UMAMI_WEBSITE_ID%';
|
|
document.head.appendChild(script);
|
|
}
|
|
</script>
|
|
<script>
|
|
// Initialize theme early to prevent flash
|
|
(function () {
|
|
// Load theme mode (light/dark/system)
|
|
const themeMode = localStorage.getItem('theme-mode') || 'system';
|
|
const themePreset = localStorage.getItem('theme-preset') || 'minimal';
|
|
|
|
// Determine if dark mode should be active
|
|
let isDark = false;
|
|
if (themeMode === 'dark') {
|
|
isDark = true;
|
|
} else if (themeMode === 'system') {
|
|
isDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
}
|
|
|
|
// Apply dark class if needed
|
|
if (isDark) {
|
|
document.documentElement.classList.add('dark');
|
|
}
|
|
|
|
// Load theme preset colors
|
|
const themes = {
|
|
minimal: {
|
|
light: {
|
|
primary: '#171717',
|
|
primaryHover: '#0a0a0a',
|
|
background: '#fafafa',
|
|
surface: '#ffffff',
|
|
surfaceHover: '#f5f5f5',
|
|
text: '#171717',
|
|
textMuted: '#737373',
|
|
border: '#e5e5e5',
|
|
accent: '#525252',
|
|
accentHover: '#404040'
|
|
},
|
|
dark: {
|
|
primary: '#fafafa',
|
|
primaryHover: '#ffffff',
|
|
background: '#0a0a0a',
|
|
surface: '#171717',
|
|
surfaceHover: '#262626',
|
|
text: '#fafafa',
|
|
textMuted: '#a3a3a3',
|
|
border: '#404040',
|
|
accent: '#d4d4d4',
|
|
accentHover: '#e5e5e5'
|
|
}
|
|
}
|
|
};
|
|
|
|
// Apply CSS variables for the theme
|
|
const preset = themes[themePreset] || themes.minimal;
|
|
const colors = isDark ? preset.dark : preset.light;
|
|
const root = document.documentElement;
|
|
|
|
Object.entries(colors).forEach(([key, value]) => {
|
|
const cssKey = key.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase());
|
|
root.style.setProperty(`--theme-${cssKey}`, value);
|
|
});
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body data-sveltekit-preload-data="hover">
|
|
<div style="display: contents">%sveltekit.body%</div>
|
|
</body>
|
|
</html>
|