A fast, local-first "redirection engine" for !bang users with a few extra features ^-^
1/* Font fallback that closely matches Inter metrics */ 2@font-face { 3 font-family: "Inter Fallback"; 4 size-adjust: 107%; 5 ascent-override: 90%; 6 src: local("Arial"); 7} 8 9:root { 10 font-family: 11 Inter, 12 "Inter Fallback", 13 system-ui, 14 -apple-system, 15 BlinkMacSystemFont, 16 "Segoe UI", 17 Roboto, 18 Oxygen, 19 Ubuntu, 20 Cantarell, 21 "Open Sans", 22 "Helvetica Neue", 23 sans-serif; 24 font-synthesis: none; 25 text-rendering: optimizeLegibility; 26 -webkit-font-smoothing: antialiased; 27 -moz-osx-font-smoothing: grayscale; 28 29 /* Light mode colors */ 30 --text-color: #1a1a1a; 31 --text-color-secondary: #666; 32 --text-color-hover: #333; 33 --bg-color: #fff; 34 --bg-color-secondary: #f5f5f5; 35 --bg-color-hover: #f0f0f0; 36 --bg-color-active: #e5e5e5; 37 --bg-color-danger: #e9808a; 38 --border-color: #ddd; 39} 40 41@media (prefers-color-scheme: dark) { 42 :root { 43 --text-color: #e0e0e0; 44 --text-color-secondary: #999; 45 --text-color-hover: #fff; 46 --bg-color: #121212; 47 --bg-color-secondary: #1e1e1e; 48 --bg-color-hover: #2a2a2a; 49 --bg-color-active: #333; 50 --bg-color-danger: #f15f6d; 51 --border-color: #444; 52 } 53} 54 55* { 56 margin: 0; 57 padding: 0; 58 box-sizing: border-box; 59 outline: none; 60} 61*:focus { 62 outline: 2px solid var(--text-color-secondary); 63} 64 65html, 66body { 67 height: 100%; 68 width: 100%; 69} 70 71body { 72 line-height: 1.5; 73 font-weight: 400; 74 font-size: 16px; 75 color: var(--text-color); 76 background-color: var(--bg-color); 77} 78 79h1, 80h2, 81h3, 82h4, 83h5, 84h6 { 85 font-weight: 600; 86 line-height: 1.2; 87 padding-bottom: 0.75rem; 88} 89 90a { 91 color: var(--text-color-secondary); 92} 93a:hover { 94 color: var(--text-color-hover); 95} 96footer a { 97 color: var(--text-color) !important; 98} 99footer a:hover { 100 color: var(--text-color-hover) !important; 101} 102 103button { 104 font: inherit; 105 border: none; 106 background: none; 107 cursor: pointer; 108} 109 110input, 111textarea { 112 font: inherit; 113} 114 115/* Add these new styles */ 116.url-container { 117 display: flex; 118 align-items: center; 119 gap: 8px; 120 margin-top: 16px; 121} 122 123.content-container { 124 max-width: 37rem; 125 text-align: center; 126 padding: 0 8px; 127 text-wrap: pretty; 128} 129 130input { 131 margin: 2px 0px !important; 132 padding: 8px 12px; 133 border: 1px solid var(--border-color); 134 border-radius: 4px; 135 width: 100%; 136 background: var(--bg-color-secondary); 137 color: var(--text-color); 138} 139 140.flash-white { 141 outline: 2px solid var(--text-color-secondary); 142 background: color-mix(in srgb, var(--text-color) 75%, var(--bg-color)); 143 opacity: 0.2; 144 animation: flash 0.275s forwards; 145} 146 147@keyframes flash { 148 0% { 149 opacity: 0.2; 150 outline: 2px solid var(--text-color-secondary); 151 background: color-mix(in srgb, var(--text-color) 55%, var(--bg-color)); 152 } 153 50% { 154 opacity: 1; 155 outline: 2px solid var(--text-color-hover); 156 background: color-mix(in srgb, var(--text-color) 75%, var(--bg-color)); 157 } 158 100% { 159 opacity: 0.2; 160 outline: 2px solid var(--text-color-secondary); 161 background: color-mix(in srgb, var(--text-color) 55%, var(--bg-color)); 162 } 163} 164 165.copy-button { 166 padding: 8px; 167 color: var(--text-color-secondary); 168 border-radius: 4px; 169 transition: all 0.2s; 170 display: flex; 171 align-items: center; 172 justify-content: center; 173} 174 175.copy-button:hover { 176 background: var(--bg-color-hover); 177} 178 179.copy-button:active { 180 background: var(--bg-color-active); 181} 182 183.copy-button img { 184 width: 20px; 185 height: 20px; 186} 187 188.copy-button.copied { 189 background: #28a745; 190} 191 192/* Add footer styles */ 193.footer { 194 position: fixed; 195 bottom: 16px; 196 left: 0; 197 right: 0; 198 text-align: center; 199 font-size: 14px; 200 color: var(--text-color-secondary); 201} 202 203.footer a { 204 color: var(--text-color-secondary); 205 text-decoration: none; 206 font-weight: 500; 207} 208 209.footer a:hover { 210 color: var(--text-color-hover); 211} 212 213.settings-button { 214 padding: 8px; 215 color: var(--text-color-secondary); 216 border-radius: 4px; 217 transition: all 0.2s; 218 display: flex; 219 align-items: center; 220 justify-content: center; 221} 222 223.settings-button:hover { 224 background: var(--bg-color-hover); 225} 226 227.settings-button:hover { 228 background: var(--bg-color-active); 229} 230 231.settings-button:hover img, 232.settings-button.rotate img { 233 transform: rotate(180deg); 234 transition: transform 0.6s ease; 235} 236 237.settings-button:active { 238 transform: scale(0.95); 239} 240 241.settings { 242 transition: transform 0.6s ease; 243} 244 245.settings-button:not(:hover):not(.rotate) .settings { 246 transform: rotate(0deg); 247} 248 249.modal { 250 display: none; 251 position: fixed; 252 top: 0; 253 left: 0; 254 width: 100%; 255 height: 100%; 256 background-color: rgba(0, 0, 0, 0.5); 257 z-index: 1000; 258} 259 260.modal-content { 261 position: relative; 262 background-color: var(--bg-color); 263 border: 1px solid var(--border-color); 264 margin: 5% auto; /* Reduced from 15% to 5% to give more space */ 265 padding: 20px; 266 border-radius: 8px; 267 width: 80%; 268 max-width: 500px; 269 max-height: 80vh; /* 80% of viewport height */ 270 overflow-y: auto; /* Makes content scrollable */ 271} 272 273.close-modal { 274 position: absolute; 275 right: 10px; 276 top: 10px; 277 cursor: pointer; 278 font-size: 24px; 279 color: var(--text-color-secondary); 280 padding-left: 8px; 281 padding-right: 8px; 282} 283 284.bang-select { 285 width: 100%; 286 padding: 8px; 287 margin-top: 10px; 288 border-radius: 4px; 289 padding-right: 30px; 290} 291 292.bang-select-container { 293 position: relative; 294 display: inline-block; 295 width: 100%; 296} 297 298.bang-select-container::after { 299 content: "↵"; 300 position: absolute; 301 right: 10px; 302 top: 18%; 303 color: var(--text-color-secondary); 304 pointer-events: none; 305 font-size: 1.2em; 306} 307 308@keyframes shake { 309 0%, 310 100% { 311 transform: translateX(0); 312 } 313 25% { 314 transform: translateX(-5px); 315 } 316 75% { 317 transform: translateX(5px); 318 } 319} 320 321@keyframes flash-red { 322 0%, 323 100% { 324 background-color: transparent; 325 } 326 50% { 327 background-color: rgba(255, 0, 0, 0.2); 328 } 329} 330 331.shake { 332 animation: shake 0.2s ease-in-out; 333} 334 335.flash-red { 336 animation: flash-red 0.3s ease-in-out; 337} 338 339.settings-section { 340 margin-bottom: 1rem; 341} 342 343.switch { 344 display: flex; 345 align-items: center; 346 gap: 8px; 347 margin: 8px 0; 348} 349 350.switch input { 351 width: 40px; 352 height: 20px; 353 appearance: none; 354 background-color: var(--bg-color-secondary); 355 border-radius: 20px; 356 position: relative; 357 cursor: pointer; 358 transition: background-color 0.3s; 359} 360 361.switch input:checked { 362 background-color: var(--text-color); 363} 364 365.switch input:before { 366 content: ""; 367 width: 16px; 368 height: 16px; 369 background-color: var(--text-color); 370 position: absolute; 371 border-radius: 50%; 372 top: 2px; 373 left: 2px; 374 transition: 375 left 0.3s, 376 background-color 0.3s; 377} 378 379.switch input:checked:before { 380 background-color: var(--bg-color-secondary); 381 left: 22px; 382} 383 384.clear-history, 385.remove-bang { 386 margin-top: 8px; 387 padding: 8px 16px; 388 background-color: var(--bg-color-danger); 389 color: var(--text-color); 390 border-radius: 4px; 391 transition: all 0.2s; 392} 393 394.remove-bang { 395 padding: 4px 6px; 396} 397 398.clear-history:hover, 399.remove-bang:hover { 400 background-color: var(--bg-color-hover); 401} 402 403.clear-history:active, 404.remove-bang:active { 405 background-color: var(--bg-color-active); 406 transform: scale(0.98); 407} 408 409.add-bang { 410 margin-top: 8px; 411 padding: 8px 16px; 412 background-color: var(--text-color); 413 color: var(--bg-color); 414 border-radius: 4px; 415 transition: all 0.2s; 416} 417 418.add-bang:hover { 419 background-color: var(--bg-color-hover); 420 color: var(--text-color-hover); 421} 422 423.add-bang:active { 424 background-color: var(--bg-color-active); 425 transform: scale(0.98); 426} 427 428.custom-bang-item { 429 display: flex; 430 flex-direction: column; 431 gap: 8px; 432 padding: 12px; 433 border: 1px solid var(--border-color); 434 border-radius: 4px; 435 margin-top: 8px; 436} 437 438.custom-bang-info { 439 width: 100%; 440 border-collapse: collapse; 441 border: 1px solid var(--border-color); 442} 443 444.custom-bang-info td { 445 color: var(--text-color-secondary); 446 padding: 8px 16px; 447 border: 1px solid var(--border-color); 448} 449 450.custom-bang-info td:nth-child(2) code { 451 padding: 0.3rem; 452 border-radius: 4px; 453 word-break: break-all; 454 background-color: var(--bg-color-secondary); 455} 456 457.custom-bang-info td:last-child { 458 border-right: 1px solid var(--border-color); 459} 460 461.custom-bang-name { 462 font-weight: 500; 463} 464 465.custom-bang-url { 466 word-break: break-all; 467 color: var(--text-color-secondary); 468}