tangled
alpha
login
or
join now
finxol.io
/
portfolio
0
fork
atom
Personal site
staging.colinozanne.co.uk
portfolio
astro
0
fork
atom
overview
issues
pulls
pipelines
fix: apply theme to all pages
finxol.io
2 months ago
e8f1cb95
da9ff76a
verified
This commit was signed with the committer's
known signature
.
finxol.io
SSH Key Fingerprint:
SHA256:olFE3asYdoBMScuJOt60UxXdJ0RFdGv5kVKrdOtIcPI=
+132
-17
2 changed files
expand all
collapse all
unified
split
src
components
customise.astro
layouts
Layout.astro
-17
src/components/customise.astro
reviewed
···
253
253
randomButton.addEventListener("click", () => {
254
254
applyRandomColors(...pickRandomColors());
255
255
});
256
256
-
257
257
-
// Restore random colors on load if they exist
258
258
-
window.onload = () => {
259
259
-
// Trigger theme initialization
260
260
-
store.theme;
261
261
-
262
262
-
// Restore random colors if saved
263
263
-
const saved = localStorage.getItem("randomColors");
264
264
-
if (saved) {
265
265
-
try {
266
266
-
const [primary, secondary, accent] = JSON.parse(saved);
267
267
-
applyRandomColors(primary, secondary, accent);
268
268
-
} catch {
269
269
-
localStorage.removeItem("randomColors");
270
270
-
}
271
271
-
}
272
272
-
};
273
256
</script>
274
257
275
258
<style>
+132
src/layouts/Layout.astro
reviewed
···
24
24
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
25
25
<meta name="generator" content={Astro.generator} />
26
26
<title>Colin Ozanne</title>
27
27
+
<script is:inline>
28
28
+
// Theme initialization - runs before page renders to prevent flash
29
29
+
(function () {
30
30
+
const theme = localStorage.getItem("theme") || "light";
31
31
+
document.documentElement.dataset.theme = theme;
32
32
+
33
33
+
// Apply random colors if saved
34
34
+
const saved = localStorage.getItem("randomColors");
35
35
+
if (saved) {
36
36
+
try {
37
37
+
const [primary, secondary, accent] = JSON.parse(saved);
38
38
+
const isDark = theme === "dark";
39
39
+
const level = isDark ? "500" : "400";
40
40
+
const textLevel = "950";
41
41
+
const mutedLevel = isDark ? "600" : "300";
42
42
+
const bgLevel = isDark ? "900" : "100";
43
43
+
const root = document.documentElement;
44
44
+
45
45
+
root.style.setProperty(
46
46
+
"--primary",
47
47
+
`var(--${primary}-${level})`,
48
48
+
);
49
49
+
root.style.setProperty(
50
50
+
"--primary-text",
51
51
+
`var(--${primary}-${textLevel})`,
52
52
+
);
53
53
+
root.style.setProperty(
54
54
+
"--primary-muted",
55
55
+
`var(--${primary}-${mutedLevel})`,
56
56
+
);
57
57
+
root.style.setProperty(
58
58
+
"--secondary",
59
59
+
`var(--${secondary}-${level})`,
60
60
+
);
61
61
+
root.style.setProperty(
62
62
+
"--secondary-text",
63
63
+
`var(--${secondary}-${textLevel})`,
64
64
+
);
65
65
+
root.style.setProperty(
66
66
+
"--accent",
67
67
+
`var(--${accent}-${level})`,
68
68
+
);
69
69
+
root.style.setProperty(
70
70
+
"--accent-text",
71
71
+
`var(--${accent}-${textLevel})`,
72
72
+
);
73
73
+
root.style.setProperty(
74
74
+
"--link",
75
75
+
`var(--${accent}-${level})`,
76
76
+
);
77
77
+
root.style.setProperty(
78
78
+
"--link-text",
79
79
+
`var(--${accent}-${textLevel})`,
80
80
+
);
81
81
+
root.style.setProperty(
82
82
+
"--background",
83
83
+
`var(--${primary}-${bgLevel})`,
84
84
+
);
85
85
+
root.style.setProperty(
86
86
+
"--foreground",
87
87
+
`var(--${primary}-${isDark ? "100" : "950"})`,
88
88
+
);
89
89
+
root.style.setProperty(
90
90
+
"--name-color",
91
91
+
`var(--${primary}-${isDark ? "800" : "500"})`,
92
92
+
);
93
93
+
root.style.setProperty(
94
94
+
"--name-color-text",
95
95
+
`var(--${primary}-${isDark ? "100" : "950"})`,
96
96
+
);
97
97
+
root.style.setProperty(
98
98
+
"--lang-bg",
99
99
+
`var(--${primary}-${isDark ? "900" : "100"})`,
100
100
+
);
101
101
+
root.style.setProperty(
102
102
+
"--lang",
103
103
+
`var(--${primary}-${isDark ? "800" : "200"})`,
104
104
+
);
105
105
+
root.style.setProperty(
106
106
+
"--lang-hover",
107
107
+
`var(--${primary}-${isDark ? "700" : "300"})`,
108
108
+
);
109
109
+
root.style.setProperty(
110
110
+
"--lang-active",
111
111
+
`var(--${primary}-${isDark ? "600" : "400"})`,
112
112
+
);
113
113
+
root.style.setProperty(
114
114
+
"--lang-active-text",
115
115
+
`var(--${primary}-${textLevel})`,
116
116
+
);
117
117
+
root.style.setProperty(
118
118
+
"--lang-text",
119
119
+
`var(--${primary}-${isDark ? "200" : "800"})`,
120
120
+
);
121
121
+
root.style.setProperty(
122
122
+
"--intro-container",
123
123
+
`var(--${secondary}-${level})`,
124
124
+
);
125
125
+
root.style.setProperty(
126
126
+
"--blog-container",
127
127
+
`var(--${accent}-${level})`,
128
128
+
);
129
129
+
root.style.setProperty(
130
130
+
"--project-1",
131
131
+
`var(--${secondary}-${level})`,
132
132
+
);
133
133
+
root.style.setProperty(
134
134
+
"--project-1-text",
135
135
+
`var(--${secondary}-${textLevel})`,
136
136
+
);
137
137
+
root.style.setProperty(
138
138
+
"--project-2",
139
139
+
`var(--${primary}-${level})`,
140
140
+
);
141
141
+
root.style.setProperty(
142
142
+
"--project-2-text",
143
143
+
`var(--${primary}-${textLevel})`,
144
144
+
);
145
145
+
root.style.setProperty(
146
146
+
"--project-3",
147
147
+
`var(--${accent}-${level})`,
148
148
+
);
149
149
+
root.style.setProperty(
150
150
+
"--project-3-text",
151
151
+
`var(--${accent}-${textLevel})`,
152
152
+
);
153
153
+
} catch {
154
154
+
localStorage.removeItem("randomColors");
155
155
+
}
156
156
+
}
157
157
+
})();
158
158
+
</script>
27
159
</head>
28
160
<body>
29
161
<div class="wip-banner">