2
0
Files
website/src/layouts/Layout.astro
Noa Virellia 20885990ca feat: website
Signed-off-by: Noa Virellia <noa@requiem.garden>
2026-01-27 16:20:44 +08:00

182 lines
4.3 KiB
Plaintext

---
interface Props {
title?: string;
description?: string;
canonicalPath?: string;
noindex?: boolean;
}
const {
title = 'Ignis Network - Cat-Inspired Meditation & Mindfulness',
description = 'Redefining the digital frontier with next-generation internet services and advanced AI.',
canonicalPath = '',
noindex = false,
} = Astro.props;
const siteUrl = Astro.site?.href || '';
const canonicalUrl = `${siteUrl.replace(/\/$/, '')}${canonicalPath}`;
---
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content={description} />
<meta name="theme-color" content="#E8A598" />
{noindex && <meta name="robots" content="noindex, nofollow" />}
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="canonical" href={canonicalUrl} />
<title>{title}</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&family=Patrick+Hand&display=swap"
rel="stylesheet"
/>
<script
type="application/ld+json"
set:html={JSON.stringify({
'@context': 'https://schema.org',
'@type': 'WebApplication',
name: 'Ignis Network',
description: 'Cat-inspired meditation and mindfulness application',
applicationCategory: 'HealthApplication',
operatingSystem: 'Web',
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'USD',
},
})}
/>
</head>
<body>
<slot />
</body>
</html>
<style is:global>
@import 'tailwindcss';
@custom-variant hover (&:hover);
@theme inline {
--color-background: hsl(var(--background));
--color-foreground: hsl(var(--foreground));
--color-card: hsl(var(--card));
--color-card-foreground: hsl(var(--card-foreground));
--color-popover: hsl(var(--popover));
--color-popover-foreground: hsl(var(--popover-foreground));
--color-primary: hsl(var(--primary));
--color-primary-foreground: hsl(var(--primary-foreground));
--color-secondary: hsl(var(--secondary));
--color-secondary-foreground: hsl(var(--secondary-foreground));
--color-muted: hsl(var(--muted));
--color-muted-foreground: hsl(var(--muted-foreground));
--color-accent: hsl(var(--accent));
--color-accent-foreground: hsl(var(--accent-foreground));
--color-destructive: hsl(var(--destructive));
--color-destructive-foreground: hsl(var(--destructive-foreground));
--color-border: hsl(var(--border));
--color-input: hsl(var(--input));
--color-ring: hsl(var(--ring));
--radius-sm: 0.5rem;
--radius-md: 0.75rem;
--radius-lg: 1rem;
--radius-xl: 1.5rem;
--font-sans: 'Nunito', sans-serif;
--font-heading: 'Fredoka', sans-serif;
--font-hand: 'Patrick Hand', cursive;
}
:root {
--background: 40 33% 96%;
--foreground: 25 10% 30%;
--primary: 5 78% 75%;
--primary-foreground: 25 10% 20%;
--secondary: 140 25% 85%;
--secondary-foreground: 140 30% 25%;
--card: 0 0% 100%;
--card-foreground: 25 10% 30%;
--popover: 0 0% 100%;
--popover-foreground: 25 10% 30%;
--muted: 40 20% 90%;
--muted-foreground: 25 10% 50%;
--accent: 45 80% 90%;
--accent-foreground: 25 10% 30%;
--destructive: 0 84% 60%;
--destructive-foreground: 0 0% 98%;
--border: 40 20% 90%;
--input: 40 20% 90%;
--ring: 6 78% 75%;
--radius: 1rem;
}
@layer base {
html {
scroll-behavior: smooth;
}
* {
@apply border-border;
}
body {
@apply bg-background text-foreground font-sans antialiased;
}
h1,
h2,
h3,
h4,
h5,
h6 {
@apply font-heading font-semibold tracking-tight;
}
}
button,
a,
nav,
[role='button'],
.no-select {
@apply select-none;
}
[role='presentation'],
.pointer-none,
svg[aria-hidden='true'] {
pointer-events: none;
}
.absolute.blur-3xl,
[class*='blob'],
[class*='pattern'] {
@apply pointer-events-none;
}
svg:not([role='img']) {
pointer-events: none;
}
.font-hand {
font-family: var(--font-hand);
}
</style>