♻️ Simple & Efficient Gemini-to-HTTP Proxy fuwn.net
proxy gemini-protocol protocol gemini http rust
at main 301 lines 4.0 kB view raw
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} */