@@ -92,6 +92,42 @@ export const ACCENT_COLORS = {
9292 } ,
9393} as const satisfies Record < 'light' | 'dark' , Record < AccentColorId , string > >
9494
95+ export interface AccentColorToken {
96+ light : { oklch : string ; hex : string }
97+ dark : { oklch : string ; hex : string }
98+ }
99+
100+ export const ACCENT_COLOR_TOKENS = {
101+ sky : {
102+ light : { oklch : 'oklch(0.53 0.16 247.27)' , hex : '#006fc2' } ,
103+ dark : { oklch : 'oklch(0.787 0.128 230.318)' , hex : '#51c8fc' } ,
104+ } ,
105+ coral : {
106+ light : { oklch : 'oklch(0.56 0.17 10.75)' , hex : '#c23d5c' } ,
107+ dark : { oklch : 'oklch(0.704 0.177 14.75)' , hex : '#f9697c' } ,
108+ } ,
109+ amber : {
110+ light : { oklch : 'oklch(0.58 0.18 46.34)' , hex : '#cb4c00' } ,
111+ dark : { oklch : 'oklch(0.828 0.165 84.429)' , hex : '#f8bc1c' } ,
112+ } ,
113+ emerald : {
114+ light : { oklch : 'oklch(0.51 0.13 162.4)' , hex : '#007c4f' } ,
115+ dark : { oklch : 'oklch(0.792 0.153 166.95)' , hex : '#2edaa6' } ,
116+ } ,
117+ violet : {
118+ light : { oklch : 'oklch(0.56 0.13 282.067)' , hex : '#6a68be' } ,
119+ dark : { oklch : 'oklch(0.78 0.148 286.067)' , hex : '#b0a9ff' } ,
120+ } ,
121+ magenta : {
122+ light : { oklch : 'oklch(0.56 0.14 325)' , hex : '#9c54a1' } ,
123+ dark : { oklch : 'oklch(0.78 0.15 330)' , hex : '#ec92e5' } ,
124+ } ,
125+ neutral : {
126+ light : { oklch : 'oklch(0.145 0 0)' , hex : '#0a0a0a' } ,
127+ dark : { oklch : 'oklch(1 0 0)' , hex : '#ffffff' } ,
128+ } ,
129+ } as const satisfies Record < AccentColorId , AccentColorToken >
130+
95131export const BACKGROUND_THEMES = {
96132 neutral : 'oklch(0.555 0 0)' ,
97133 stone : 'oklch(0.555 0.013 58.123)' ,
@@ -100,6 +136,51 @@ export const BACKGROUND_THEMES = {
100136 black : 'oklch(0.4 0 0)' ,
101137} as const
102138
139+ export type BackgroundThemeId = 'neutral' | 'stone' | 'zinc' | 'slate' | 'black'
140+
141+ export interface BackgroundThemeToken {
142+ oklch : string
143+ hex : string
144+ }
145+
146+ export const BACKGROUND_THEME_TOKENS = {
147+ neutral : { oklch : 'oklch(0.555 0 0)' , hex : '#737373' } ,
148+ stone : { oklch : 'oklch(0.555 0.013 58.123)' , hex : '#79716c' } ,
149+ zinc : { oklch : 'oklch(0.555 0.016 285.931)' , hex : '#72727c' } ,
150+ slate : { oklch : 'oklch(0.555 0.046 257.407)' , hex : '#62748e' } ,
151+ black : { oklch : 'oklch(0.4 0 0)' , hex : '#484848' } ,
152+ } as const satisfies Record < BackgroundThemeId , BackgroundThemeToken >
153+
154+ /**
155+ * Static theme tokens for the share card OG image.
156+ * Must use hex/rgb — satori (the OG image renderer) does not support oklch.
157+ * Background is not included here — use BACKGROUND_THEME_TOKENS for the card bg.
158+ * Values are hex equivalents of the corresponding CSS custom properties:
159+ * border → --border
160+ * divider → --border-subtle
161+ * text → --fg
162+ * textMuted → --fg-muted
163+ * textSubtle → --fg-subtle
164+ */
165+ export const SHARE_CARD_THEMES = {
166+ dark : {
167+ bg : '#101010' , // --bg: oklch(0.171 0 0)
168+ border : '#262626' , // --border: oklch(0.269 0 0)
169+ divider : '#1f1f1f' , // --border-subtle: oklch(0.239 0 0)
170+ text : '#f9f9f9' , // --fg: oklch(0.982 0 0)
171+ textMuted : '#adadad' , // --fg-muted: oklch(0.749 0 0)
172+ textSubtle : '#969696' , // --fg-subtle: oklch(0.673 0 0)
173+ } ,
174+ light : {
175+ bg : '#ffffff' , // --bg: oklch(1 0 0)
176+ border : '#cecece' , // --border: oklch(0.8514 0 0)
177+ divider : '#e5e5e5' , // --border-subtle: oklch(0.922 0 0)
178+ text : '#0a0a0a' , // --fg: oklch(0.146 0 0)
179+ textMuted : '#474747' , // --fg-muted: oklch(0.398 0 0)
180+ textSubtle : '#5d5d5d' , // --fg-subtle: oklch(0.48 0 0)
181+ } ,
182+ } as const satisfies Record < 'light' | 'dark' , Record < string , string > >
183+
103184// INFO: Regex for capture groups
104185export const BLUESKY_URL_EXTRACT_REGEX = / p r o f i l e \/ ( [ ^ / ] + ) \/ p o s t \/ ( [ ^ / ] + ) /
105186export const BSKY_POST_AT_URI_REGEX =
0 commit comments