Footer.astro

 1---
 2interface Props {
 3	// compact: the console-scale footer used on single-task pages, matching
 4	// brandFooter in internal/appview/ui/layout.templ: minimum height equal
 5	// to the compact masthead (4.5rem, 4rem below 800px), 16px tagline.
 6	compact?: boolean;
 7}
 8const { compact = false } = Astro.props;
 9---
10
11<footer class:list={['footer', 'on-dark', { compact }]}>
12		<p class="footer-line">
13			<span class="footer-mark">sovrn</span>
14			<span>Independent tools for small business.</span>
15			<span>Part of the Atmosphere.</span>
16		</p>
17		<div class="corner" aria-hidden="true"></div>
18	</footer>
19
20<style>
21	.footer {
22		display: grid;
23		grid-template-columns: 1fr 11.8%;
24		min-height: clamp(5rem, min(12.1svh, 8.1vw), 8.5rem);
25		background: var(--ptt);
26		color: var(--paper);
27	}
28
29	/* ——— Footer ——— */
30	.footer-line {
31		display: flex;
32		flex-wrap: wrap;
33		align-items: center;
34		align-content: center;
35		gap: 0.25rem 1.5rem;
36		padding: 1.25rem var(--gutter);
37		color: var(--ptt-soft);
38	}
39
40	.footer-mark {
41		color: var(--paper);
42		font-size: 1.75rem;
43		font-weight: 900;
44		letter-spacing: -0.06em;
45	}
46
47	.corner {
48		background: var(--signal);
49	}
50
51	@media (max-width: 800px) {
52		.footer {
53			grid-template-columns: 1fr 3rem;
54		}
55	}
56
57	.footer.compact {
58		min-height: 4.5rem;
59	}
60
61	.compact .footer-line {
62		gap: 0.25rem 1.5rem;
63		padding-block: 1rem;
64		font-size: 1rem;
65		line-height: 1.5;
66	}
67
68	.compact .footer-mark {
69		line-height: 1;
70	}
71
72	/* console breakpoint (Tailwind sm): 11.8% corner above, 3rem below */
73	@media (max-width: 800px) {
74		.footer.compact {
75			grid-template-columns: 1fr 11.8%;
76		}
77	}
78
79	@media (max-width: 639.98px) {
80		.footer.compact {
81			grid-template-columns: 1fr 3rem;
82			min-height: 4rem;
83		}
84	}
85</style>