managarten/uload/apps/web/src/app.html
Till-JS c712a2504a feat: integrate uload and picture, unify package naming
- 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>
2025-11-25 04:00:36 +01:00

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>