Mirror of Lumina
1/*
2 * Lumina/Peonies
3 * Copyright (C) 2018-2026 MLC 'Strawmelonjuice' Bloeiman and contributors.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as published
7 * by the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19@import "tailwindcss";
20
21@source "./src/**/*.gleam";
22
23@font-face {
24 /* The Josefin Sans is used for:
25 * Menu items
26 */
27 font-family: "Josefin Sans";
28 src: url(/assets/fonts/Josefin_Sans/JosefinSans-VariableFont_wght.ttf);
29}
30
31@font-face {
32 /* The Syne Font is used for:
33 * Main theme
34 */
35 font-family: "Vend Sans";
36 src: url(/assets/fonts/Vend_Sans/VendSans-VariableFont_wght.ttf);
37}
38
39@font-face {
40 /* The Gantari font is used for:
41 * 'Lumina' name typography
42 */
43 font-family: "Gantari";
44 src: url(/assets/fonts/Gantari/Gantari-VariableFont_wght.ttf);
45}
46
47@font-face {
48 /* The Elms sans is used for:
49 * (User-generated) Content on pages, form input fields.
50 */
51 font-family: "Elms Sans";
52 src: url(/assets/fonts/Elms_Sans/ElmsSans-VariableFont_wght.ttf);
53}
54
55@font-face {
56 /* The DM Mono font is used for:
57 * Code blocks and monospaced text
58 */
59 font-family: "DM Mono";
60 src: url(/assets/fonts/DM_Mono/DMMono-Regular.ttf);
61}
62
63@theme {
64 --font-sans: "Vend Sans";
65 --font-logo: "Gantari";
66 --font-content: "Elms Sans";
67 --font-menuitems: "Josefin Sans";
68 --font-script: "DM Mono";
69}
70
71@plugin "daisyui" {
72}
73
74@plugin "daisyui/theme" {
75 name: "lumina-light";
76 default: true;
77 prefersdark: false;
78 color-scheme: "light";
79 --color-base-100: oklch(96% 0.044 156.743);
80 --color-base-200: oklch(97% 0.071 103.193);
81 --color-base-300: oklch(94% 0.028 342.258);
82 --color-base-content: oklch(51% 0.096 186.391);
83 --color-primary: oklch(87% 0.15 154.449);
84 --color-primary-content: oklch(30% 0.056 229.695);
85 --color-secondary: oklch(51% 0.253 323.949);
86 --color-secondary-content: oklch(94% 0.028 342.258);
87 --color-accent: oklch(80% 0.114 19.571);
88 --color-accent-content: oklch(44% 0.043 257.281);
89 --color-neutral: oklch(98% 0.003 247.858);
90 --color-neutral-content: oklch(12% 0.042 264.695);
91 --color-info: oklch(85% 0.138 181.071);
92 --color-info-content: oklch(29% 0.066 243.157);
93 --color-success: oklch(76% 0.233 130.85);
94 --color-success-content: oklch(37% 0.077 168.94);
95 --color-warning: oklch(70% 0.213 47.604);
96 --color-warning-content: oklch(27% 0.077 45.635);
97 --color-error: oklch(63% 0.237 25.331);
98 --color-error-content: oklch(27% 0.105 12.094);
99 --radius-selector: 0.75rem;
100 --radius-field: 1.25rem;
101 --radius-box: 1.5rem;
102 --size-selector: 0.25rem;
103 --size-field: 0.25rem;
104 --border: 1px;
105 --depth: 1;
106 --noise: 0;
107 /* --spacing: 0.5rem; */
108}
109
110@plugin "daisyui/theme" {
111 name: "lumina-dark";
112 default: false;
113 prefersdark: true;
114 color-scheme: "dark";
115
116 --color-base-100: oklch(14% 0.02 156.743);
117 /* Darker background */
118 --color-base-200: oklch(20% 0.03 103.193);
119 --color-base-300: oklch(25% 0.02 342.258);
120 --color-base-content: oklch(85% 0.08 186.391);
121 /* Brighter text */
122 --color-primary: oklch(50% 0.15 154.449);
123 /* Stronger primary */
124 --color-primary-content: oklch(88% 0.09 229.695);
125 /* Brighter */
126 --color-secondary: oklch(38% 0.23 323.949);
127 --color-secondary-content: oklch(90% 0.05 342.258);
128 /* Higher contrast */
129 --color-accent: oklch(55% 0.12 19.571);
130 --color-accent-content: oklch(87% 0.07 257.281);
131 --color-neutral: oklch(12% 0.01 247.858);
132 /* Darker neutral */
133 --color-neutral-content: oklch(88% 0.06 264.695);
134 /* Higher contrast */
135 --color-info: oklch(55% 0.14 181.071);
136 --color-info-content: oklch(90% 0.08 243.157);
137 --color-success: oklch(42% 0.22 130.85);
138 --color-success-content: oklch(85% 0.09 168.94);
139 --color-warning: oklch(50% 0.2 47.604);
140 --color-warning-content: oklch(88% 0.08 45.635);
141 --color-error: oklch(45% 0.23 25.331);
142 --color-error-content: oklch(90% 0.11 12.094);
143 --radius-selector: 0.75rem;
144 --radius-field: 1.25rem;
145 --radius-box: 1.5rem;
146 --size-selector: 0.25rem;
147 --size-field: 0.25rem;
148 --border: 1px;
149 --depth: 1;
150 --noise: 0;
151 /* --spacing: 0.5rem; */
152}
153
154@layer base {
155 html {
156 /* HTML overflow hidden */
157 overflow: clip;
158 }
159
160 * {
161 /* By default, none is selectable, selectable stuff gets 'text-select' class so tailwind re-enables it there. */
162 -webkit-user-select: none;
163 user-select: none;
164 }
165
166 /*Pride month banner*/
167 body:has(.monthclass-6) main::before {
168 margin: 0;
169 content: "Happy Pride Month! 💖🏳️🌈";
170 justify-content: center;
171 align-items: center;
172 height: 1.4em;
173 color: black;
174 width: 100vw;
175 border-radius: 0;
176 display: inline-flex;
177 background-image: linear-gradient(
178 to right,
179 rgb(237, 34, 36),
180 rgb(243, 91, 34),
181 rgb(249, 150, 33),
182 rgb(245, 193, 30),
183 rgb(241, 235, 27) 27%,
184 rgb(241, 235, 27),
185 rgb(241, 235, 27) 33%,
186 rgb(99, 199, 32),
187 rgb(12, 155, 73),
188 rgb(33, 135, 141),
189 rgb(57, 84, 165),
190 rgb(97, 55, 155),
191 rgb(147, 40, 142)
192 );
193 }
194
195 body:has(.monthclass-6) {
196 --bs: 300% 100%;
197 }
198
199 body:has(.monthclass-6) main:hover::before {
200 animation: prideBannerAnimation 10s linear infinite;
201 }
202
203 @keyframes prideBannerAnimation {
204 0% {
205 }
206
207 25% {
208 background-position: 0 0;
209 background-size: var(--bs);
210 background-repeat: repeat;
211 }
212
213 30% {
214 background-position: 50% 0;
215 content: "Protect LGBTQ+ Rights! 🏳️🌈✊";
216 background-size: var(--bs);
217 background-repeat: repeat;
218 }
219
220 50% {
221 background-position: 100% 0;
222 content: "Protect LGBTQ+ Rights! 🏳️🌈✊";
223 background-size: var(--bs);
224 background-repeat: repeat;
225 }
226
227 75% {
228 background-position: 0 0;
229 background-size: var(--bs);
230 background-repeat: repeat;
231 }
232
233 80% {
234 background-position: 50% 0;
235 content: "Protect LGBTQ+ Rights! 🏳️🌈 ✊";
236 background-size: var(--bs);
237 background-repeat: repeat;
238 }
239
240 100% {
241 }
242 }
243
244 body:has(.monthclass-6):active main::before {
245 animation: none;
246 animation-delay: 3s;
247 animation-duration: 999s;
248 animation-name: transrights;
249 animation-iteration-count: 1;
250 animation-timing-function: ease-in-out;
251 }
252
253 @keyframes transrights {
254 0% {
255 content: "Protect trans Rights! ✊ 🩵🩷🤍🩷🩵";
256 background-image: linear-gradient(
257 to right,
258 rgb(85, 205, 252),
259 rgb(179, 157, 233),
260 rgb(247, 168, 184),
261 rgb(246, 216, 221),
262 rgb(255, 255, 255) 45%,
263 rgb(255, 255, 255),
264 rgb(255, 255, 255) 55%,
265 rgb(246, 216, 221),
266 rgb(247, 168, 184),
267 rgb(179, 157, 233),
268 rgb(85, 205, 252)
269 );
270 }
271 }
272
273 /*29th of februari is nonexistent in non-leap years*/
274 body:has(.dayclass-29.monthclass-2) main::before {
275 margin-top: 0.8em;
276 margin-bottom: 0.8em;
277 content: "[This day does not exist]";
278 justify-content: center;
279 align-items: center;
280 height: 2.4em;
281 flex: none;
282 color: yellow;
283 width: 100%;
284 display: inline-flex;
285 background-color: black;
286 text-shadow: 22px 4px 2px rgba(255, 255, 0, 0.6);
287 box-shadow: 2px 2px 10px 8px #3d3a3a;
288 animation-name: glitched;
289 animation-duration: 3s;
290 animation-iteration-count: infinite;
291 animation-timing-function: linear;
292 animation-direction: alternate;
293 }
294
295 @keyframes glitched {
296 0% {
297 transform: skew(-20deg);
298 left: -4px;
299 }
300
301 10% {
302 transform: skew(-20deg);
303 left: -4px;
304 }
305
306 11% {
307 transform: skew(0deg);
308 left: 2px;
309 }
310
311 50% {
312 transform: skew(0deg);
313 }
314
315 51% {
316 transform: skew(10deg);
317 }
318
319 59% {
320 transform: skew(10deg);
321 }
322
323 60% {
324 transform: skew(0deg);
325 }
326
327 100% {
328 transform: skew(0deg);
329 }
330 }
331 .lg\:freeroam {
332 @media (width >= 64rem) {
333 left: var(--left);
334 top: var(--top);
335 transform: var(--transform);
336 position: absolute;
337 }
338 }
339}