♻️ Simple & Efficient Gemini-to-HTTP Proxy
fuwn.net
proxy
gemini-protocol
protocol
gemini
http
rust
1:root {
2 --bg: var(--base00);
3 --off-bg: var(--base01);
4 --inner-bg: var(--base02);
5 --fg: var(--base04);
6 --off-fg: var(--base04);
7 --muted: var(--base03);
8 --link: var(--primary);
9 --hover: var(--base0E);
10 --highlight: var(--primary);
11 --logo: var(--primary);
12 --font-monospace: "Fira Mono", monospace;
13 --font-size: auto;
14}
15
16@media (max-width: 600px) {
17 :root {
18 --font-size: 13.5px;
19 }
20}
21
22body {
23 background-color: var(--bg);
24 color: var(--fg);
25 font-family: var(--font-monospace);
26 font-size: var(--font-size);
27 line-height: math(1rem / var(--font-size));
28}
29
30h1,
31h2,
32h3,
33h4,
34h5,
35h6 {
36 font-size: var(--font-size);
37 margin: 1.5rem 0 0 0;
38 font-weight: 600;
39}
40
41h1 + h2,
42h1 + h3,
43h1 + h4,
44h1 + h5,
45h1 + h6,
46h2 + h3,
47h2 + h4,
48h2 + h5,
49h2 + h6,
50h3 + h4,
51h3 + h5,
52h3 + h6,
53h4 + h5,
54h4 + h6,
55h5 + h6 {
56 margin: 0;
57}
58
59h1:before {
60 content: "# ";
61}
62
63h2:before {
64 content: "## ";
65}
66
67h3:before {
68 content: "### ";
69}
70
71h4:before {
72 content: "#### ";
73}
74
75h5:before {
76 content: "##### ";
77}
78
79h6:before {
80 content: "###### ";
81}
82
83h1:before,
84h2:before,
85h3:before,
86h4:before,
87h5:before,
88h6:before {
89 color: var(--muted);
90 font-weight: 400;
91}
92
93h1:first-child {
94 margin-top: 0;
95}
96
97p {
98 margin: 0 0 1.5rem 0;
99}
100
101a:link,
102a:visited {
103 color: var(--link);
104 text-decoration: none;
105}
106
107a:hover,
108a:active,
109a.active {
110 background-color: var(--link);
111 color: var(--bg);
112}
113
114ul {
115 margin: 0 0 1.5rem 0;
116 padding-left: 1.25rem;
117}
118
119ol {
120 margin: 0 0 1.5rem 0;
121 padding-left: 1.75rem;
122}
123
124ul ul,
125ul ol,
126ol ul,
127ol ol {
128 margin: 0;
129}
130
131ul li::marker {
132 content: "∗\00A0";
133 color: var(--muted);
134}
135
136ol li::marker {
137 color: var(--muted);
138}
139
140dt {
141 margin: 0;
142 font-weight: bold;
143}
144
145dd {
146 margin: 0 0 0 1.5rem;
147 font-style: italic;
148}
149
150dd + dt {
151 margin-top: 1.5rem;
152}
153
154dl {
155 margin: 0 0 1.5rem 0;
156}
157
158blockquote {
159 position: relative;
160 margin: 0 0 1.5rem 1.5rem;
161}
162
163blockquote::before {
164 position: absolute;
165 left: -1.5rem;
166 content: ">";
167 color: var(--muted);
168}
169
170pre,
171code,
172kbd,
173samp {
174 background: var(--inner-bg) !important;
175 font-family: var(--font-monospace);
176 color: var(--off-fg);
177}
178
179pre {
180 overflow-x: auto;
181 padding: 1.5rem;
182 margin: 0 0 1.5rem 0;
183}
184
185b,
186strong {
187 font-weight: 600;
188}
189
190::selection,
191mark {
192 background-color: var(--highlight);
193 color: var(--bg);
194}
195
196hr {
197 border: 0;
198 margin-bottom: 1.5rem;
199}
200
201hr:after {
202 content: "---";
203 color: var(--muted);
204}
205
206sup,
207sub {
208 vertical-align: baseline;
209 position: relative;
210 top: -0.25rem;
211 font-size: unset;
212}
213
214sub {
215 top: 0.25rem;
216}
217
218table {
219 border-spacing: 0;
220 margin: 0 0 1.5rem 0;
221 overflow-wrap: anywhere;
222}
223
224th,
225td {
226 padding: 0 0.75rem;
227 vertical-align: top;
228}
229
230th:first-child,
231td:first-child {
232 padding-left: 0;
233}
234
235th {
236 text-align: inherit;
237}
238
239img {
240 max-width: 100%;
241 height: auto;
242}
243
244:root {
245 --base00: #f8f8f8;
246 --base001: #ffffff;
247 --base0011: #ffffff80;
248 --base01: #e8e8e8;
249 --base02: #d8d8d8;
250 --base03: #b8b8b8;
251 --base04: #585858;
252 --base05: #383838;
253 --base06: #282828;
254 --base07: #181818;
255 --base08: #ab4642;
256 --base09: #dc9656;
257 --base0A: #f7ca88;
258 --base0B: #a1b56c;
259 --base0C: #86c1b9;
260 --base0D: #7cafc2;
261 --base0E: #ba8baf;
262 --base0F: #a16946;
263}
264
265@media (prefers-color-scheme: dark) {
266 :root {
267 --base00: #080808;
268 --base001: #0c0c0c;
269 --base0011: #0c0c0c80;
270 --base01: #181818;
271 --base02: #282828;
272 --base03: #484848;
273 --base04: #a8a8a8;
274 --base05: #c8c8c8;
275 --base06: #d8d8d8;
276 --base07: #f8f8f8;
277 --base08: #9a4541;
278 --base09: #cb9555;
279 --base0A: #f6c987;
280 --base0B: #a0b45b;
281 --base0C: #85c0b8;
282 --base0D: #7baeb1;
283 --base0E: #b98aae;
284 --base0F: #a06845;
285 }
286}
287
288.gemini-fragment {
289 -webkit-touch-callout: none;
290 -webkit-user-select: none;
291 -khtml-user-select: none;
292 -moz-user-select: none;
293 -ms-user-select: none;
294 user-select: none;
295 color: var(--muted);
296}
297
298/* * {
299 transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,
300 border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
301} */