aboutsummaryrefslogtreecommitdiff
path: root/examples/portfolio/src/layouts/BaseLayout.astro
diff options
context:
space:
mode:
Diffstat (limited to 'examples/portfolio/src/layouts/BaseLayout.astro')
-rw-r--r--examples/portfolio/src/layouts/BaseLayout.astro118
1 files changed, 118 insertions, 0 deletions
diff --git a/examples/portfolio/src/layouts/BaseLayout.astro b/examples/portfolio/src/layouts/BaseLayout.astro
new file mode 100644
index 000000000..235599abd
--- /dev/null
+++ b/examples/portfolio/src/layouts/BaseLayout.astro
@@ -0,0 +1,118 @@
+---
+// Learn about using Astro layouts:
+// https://docs.astro.build/en/core-concepts/layouts/
+
+// Component Imports
+import MainHead from '../components/MainHead.astro';
+import Nav from '../components/Nav.astro';
+import Footer from '../components/Footer.astro';
+
+interface Props {
+ title?: string | undefined;
+ description?: string | undefined;
+}
+
+const { title, description } = Astro.props;
+---
+
+<html lang="en">
+ <head>
+ <MainHead title={title} description={description} />
+ </head>
+ <body>
+ <div class="stack backgrounds">
+ <Nav />
+ <slot />
+ <Footer />
+ </div>
+
+ <script>
+ // Add “loaded” class once the document has completely loaded.
+ addEventListener('load', () => document.documentElement.classList.add('loaded'));
+ </script>
+
+ <style>
+ :root {
+ --_placeholder-bg: linear-gradient(transparent, transparent);
+ --bg-image-main: url('/assets/backgrounds/bg-main-light-800w.jpg');
+ --bg-image-main-curves: url('/assets/backgrounds/bg-main-light.svg');
+ --bg-image-subtle-1: var(--_placeholder-bg);
+ --bg-image-subtle-2: var(--_placeholder-bg);
+ --bg-image-footer: var(--_placeholder-bg);
+ --bg-svg-blend-mode: overlay;
+ --bg-blend-mode: darken;
+ --bg-image-aspect-ratio: 2.25;
+ --bg-scale: 1.68;
+ --bg-aspect-ratio: calc(var(--bg-image-aspect-ratio) / var(--bg-scale));
+ --bg-gradient-size: calc(var(--bg-scale) * 100%);
+ }
+
+ :root.theme-dark {
+ --bg-image-main: url('/assets/backgrounds/bg-main-dark-800w.jpg');
+ --bg-image-main-curves: url('/assets/backgrounds/bg-main-dark.svg');
+ --bg-svg-blend-mode: darken;
+ --bg-blend-mode: lighten;
+ }
+
+ /* These backgrounds are displayed below the fold, so we lazy load them
+ once the `.loaded` class has been set. */
+ :root.loaded {
+ --bg-image-subtle-1: url('/assets/backgrounds/bg-subtle-1-light-800w.jpg');
+ --bg-image-subtle-2: url('/assets/backgrounds/bg-subtle-2-light-800w.jpg');
+ --bg-image-footer: url('/assets/backgrounds/bg-footer-light-800w.jpg');
+ }
+ :root.loaded.theme-dark {
+ --bg-image-subtle-1: url('/assets/backgrounds/bg-subtle-1-dark-800w.jpg');
+ --bg-image-subtle-2: url('/assets/backgrounds/bg-subtle-2-dark-800w.jpg');
+ --bg-image-footer: url('/assets/backgrounds/bg-footer-dark-800w.jpg');
+ }
+
+ @media (min-width: 50em) {
+ :root {
+ --bg-scale: 1;
+ --bg-image-main: url('/assets/backgrounds/bg-main-light-1440w.jpg');
+ }
+ :root.theme-dark {
+ --bg-image-main: url('/assets/backgrounds/bg-main-dark-1440w.jpg');
+ }
+
+ :root.loaded {
+ --bg-image-subtle-1: url('/assets/backgrounds/bg-subtle-1-light-1440w.jpg');
+ --bg-image-subtle-2: url('/assets/backgrounds/bg-subtle-2-light-1440w.jpg');
+ --bg-image-footer: url('/assets/backgrounds/bg-footer-light-1440w.jpg');
+ }
+ :root.loaded.theme-dark {
+ --bg-image-subtle-1: url('/assets/backgrounds/bg-subtle-1-dark-1440w.jpg');
+ --bg-image-subtle-2: url('/assets/backgrounds/bg-subtle-2-dark-1440w.jpg');
+ --bg-image-footer: url('/assets/backgrounds/bg-footer-dark-1440w.jpg');
+ }
+ }
+
+ .backgrounds {
+ min-height: 100%;
+ isolation: isolate;
+ background:
+ /*noise*/
+ url('/assets/backgrounds/noise.png') top center/220px repeat,
+ /*footer*/ var(--bg-image-footer) bottom center/var(--bg-gradient-size) no-repeat,
+ /*header1*/ var(--bg-image-main-curves) top center/var(--bg-gradient-size) no-repeat,
+ /*header2*/ var(--bg-image-main) top center/var(--bg-gradient-size) no-repeat,
+ /*base*/ var(--gray-999);
+ background-blend-mode: /*noise*/
+ overlay,
+ /*footer*/ var(--bg-blend-mode),
+ /*header1*/ var(--bg-svg-blend-mode),
+ /*header2*/ normal,
+ /*base*/ normal;
+ }
+ @media (forced-colors: active) {
+ /* Deactivate custom backgrounds for high contrast users. */
+ .backgrounds {
+ background: none;
+ background-blend-mode: none;
+ --bg-gradient-size: none;
+ }
+ }
+ </style>
+ </body>
+</html>