Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
at main 390 lines 7.7 kB view raw
1/** 2 * IMPORTANT 3 * 4 * Some of these styles are duplicated in the `web/index.html` and 5 * `bskyweb/templates/base.html` files. Depending on what you're updating, you 6 * may need to touch all three. Ask Eric if you aren't sure. 7 */ 8 9/** 10 * BEGIN STYLES 11 * 12 * HTML & BODY STYLES IN `web/index.html` and `bskyweb/templates/base.html` 13 */ 14:root { 15 --text: black; 16 --background: #fefbfb; 17 --backgroundLight: #fefbfb; 18} 19@media (prefers-color-scheme: dark) { 20 :root { 21 color-scheme: dark; 22 --text: white; 23 --background: #222020; 24 --backgroundLight: #222020; 25 } 26} 27 28html.theme--light { 29 --text: black; 30 --background: #fefbfb; 31 --backgroundLight: #fefbfb; 32 background-color: #fefbfb; 33} 34html.theme--dark { 35 color-scheme: dark; 36 background-color: #000000; 37 --text: white; 38 --background: #000000; 39 --backgroundLight: #000000; 40} 41html.theme--dim { 42 color-scheme: dark; 43 background-color: #222020; 44 --text: white; 45 --background: #222020; 46 --backgroundLight: #222020; 47} 48/* Buttons and inputs have a font set by UA, so we'll have to reset that */ 49button, 50input, 51textarea { 52 font: inherit; 53 line-height: inherit; 54} 55 56/* Remove autofill styles on Webkit */ 57input:autofill, 58input:-webkit-autofill, 59input:-webkit-autofill:hover, 60input:-webkit-autofill:focus, 61input:-webkit-autofill:active { 62 -webkit-background-clip: text; 63 -webkit-text-fill-color: var(--text); 64 transition: background-color 5000s ease-in-out 0s; 65 box-shadow: inset 0 0 20px 20px var(--background); 66 background: var(--background); 67 color: var(--text); 68} 69/* Force left-align date/time inputs on iOS mobile */ 70input::-webkit-date-and-time-value { 71 text-align: left; 72} 73 74/* Remove default link styling */ 75a { 76 color: inherit; 77} 78a[role='link']:hover { 79 text-decoration: underline; 80} 81a[role='link'][data-no-underline='1']:hover { 82 text-decoration: none; 83} 84 85/* Styling hacks */ 86*[data-word-wrap] { 87 word-break: break-word; 88} 89*[data-stable-gutters] { 90 scrollbar-gutter: stable both-edges; 91} 92 93/* ProseMirror */ 94.ProseMirror { 95 min-height: inherit; 96} 97.ProseMirror-dark { 98 color: white; 99} 100.ProseMirror p { 101 margin: 0; 102} 103.ProseMirror p.is-editor-empty:first-child::before { 104 color: #8d8e96; 105 content: attr(data-placeholder); 106 float: left; 107 height: 0; 108 pointer-events: none; 109} 110.ProseMirror .mention { 111 color: var(--mention-color, #ed5345); 112} 113.ProseMirror a, 114.ProseMirror .autolink { 115 color: var(--mention-color, #ed5345); 116} 117/* OLLIE: TODO -- this is not accessible */ 118/* Remove focus state on inputs */ 119.ProseMirror-focused { 120 outline: 0; 121} 122textarea:focus, 123input:focus { 124 outline: 0; 125} 126.tippy-content .items { 127 width: fit-content; 128} 129 130/* Tooltips */ 131[data-tooltip] { 132 position: relative; 133 z-index: 10; 134} 135[data-tooltip]::after { 136 content: attr(data-tooltip); 137 display: none; 138 position: absolute; 139 bottom: 0; 140 left: 50%; 141 transform: translateY(100%) translateY(8px) translateX(-50%); 142 padding: 4px 10px; 143 border-radius: 10px; 144 background: var(--backgroundLight); 145 color: var(--text); 146 text-align: center; 147 white-space: nowrap; 148 font-size: 12px; 149 z-index: 10; 150} 151[data-tooltip]::before { 152 content: ''; 153 display: none; 154 position: absolute; 155 border-bottom: 6px solid var(--backgroundLight); 156 border-left: 6px solid transparent; 157 border-right: 6px solid transparent; 158 bottom: 0; 159 left: 50%; 160 transform: translateY(100%) translateY(2px) translateX(-50%); 161 z-index: 10; 162} 163[data-tooltip]:hover::after, 164[data-tooltip]:hover::before { 165 display: block; 166} 167 168/* NativeDropdown component */ 169.radix-dropdown-item:focus, 170.nativeDropdown-item:focus { 171 outline: none; 172} 173 174/* Spinner component */ 175@keyframes rotate { 176 0% { 177 transform: rotate(0deg); 178 } 179 100% { 180 transform: rotate(360deg); 181 } 182} 183.rotate-500ms { 184 position: absolute; 185 inset: 0; 186 animation: rotate 500ms linear infinite; 187} 188 189/* animations for atoms */ 190@keyframes fadeIn { 191 from { 192 opacity: 0; 193 } 194 to { 195 opacity: 1; 196 } 197} 198 199@keyframes fadeOut { 200 from { 201 opacity: 1; 202 } 203 to { 204 opacity: 0; 205 } 206} 207 208@keyframes zoomIn { 209 from { 210 transform: scale(0.95); 211 } 212 to { 213 transform: scale(1); 214 } 215} 216 217@keyframes slideInLeft { 218 from { 219 transform: translateX(-100%); 220 } 221 to { 222 transform: translateX(0); 223 } 224} 225 226@keyframes slideOutLeft { 227 from { 228 transform: translateX(0); 229 } 230 to { 231 transform: translateX(-100%); 232 } 233} 234 235/* animating radix dropdowns requires knowing the data attributes */ 236.dropdown-menu-transform-origin > * { 237 transform-origin: var(--radix-dropdown-menu-content-transform-origin); 238} 239.dropdown-menu-constrain-size > * { 240 max-height: var(--radix-dropdown-menu-content-available-height); 241} 242 243.force-no-clicks > *, 244.force-no-clicks * { 245 pointer-events: none !important; 246} 247 248input[type='range'][orient='vertical'] { 249 writing-mode: vertical-lr; 250 direction: rtl; 251 appearance: slider-vertical; 252 width: 16px; 253 vertical-align: bottom; 254 -webkit-appearance: none; 255 appearance: none; 256 background: transparent; 257 cursor: pointer; 258} 259 260input[type='range'][orient='vertical']::-webkit-slider-runnable-track { 261 background: white; 262 height: 100%; 263 width: 4px; 264 border-radius: 4px; 265} 266 267input[type='range'][orient='vertical']::-moz-range-track { 268 background: white; 269 height: 100%; 270 width: 4px; 271 border-radius: 4px; 272} 273 274input[type='range']::-webkit-slider-thumb { 275 -webkit-appearance: none; 276 appearance: none; 277 border-radius: 50%; 278 background-color: white; 279 height: 16px; 280 width: 16px; 281 margin-left: -6px; 282} 283 284input[type='range'][orient='vertical']::-moz-range-thumb { 285 border: none; 286 border-radius: 50%; 287 background-color: white; 288 height: 16px; 289 width: 16px; 290 margin-left: -6px; 291} 292 293/* 294 * EmojiReactionPicker dropdown elements, within Radix components 295 */ 296.EmojiReactionPicker__Pressable { 297 cursor: pointer; 298 border: 1px solid transparent; 299} 300.EmojiReactionPicker__Pressable:focus { 301 outline: none; 302 border-color: var(--text); 303} 304.EmojiReactionPicker__Pressable:hover { 305 outline: none; 306 transform: scale(1.1); 307 border-color: transparent; 308} 309.EmojiReactionPicker__Pressable:not(.__selected).__disabled { 310 transform: scale(1) !important; 311 border-color: transparent !important; 312 opacity: 0.7; 313} 314.EmojiReactionPicker__Pressable ~ button { 315 cursor: pointer; 316 border: 1px solid transparent; 317} 318.EmojiReactionPicker__Pressable ~ button:focus { 319 outline: none; 320 border-color: var(--text); 321} 322.EmojiReactionPicker__Pressable ~ button:hover { 323 outline: none; 324 background-color: var(--backgroundLight); 325 border-color: transparent; 326} 327 328/* #/components/Select/index.web.tsx */ 329.radix-select-content { 330 box-shadow: 331 0px 6px 24px -10px rgba(22, 23, 24, 0.25), 332 0px 6px 12px -12px rgba(22, 23, 24, 0.15); 333 min-width: var(--radix-select-trigger-width); 334 max-height: var(--radix-select-content-available-height); 335} 336 337/* 338 * #/components/Tooltip/index.web.tsx 339 */ 340.radix-popover-content { 341 animation-duration: 300ms; 342 animation-timing-function: cubic-bezier(0.17, 0.73, 0.14, 1); 343 will-change: transform, opacity; 344} 345.radix-popover-content[data-state='open'][data-side='top'] { 346 animation-name: radixPopoverSlideUpAndFade; 347} 348.radix-popover-content[data-state='open'][data-side='bottom'] { 349 animation-name: radixPopoverSlideDownAndFade; 350} 351@keyframes radixPopoverSlideUpAndFade { 352 from { 353 opacity: 0; 354 transform: translateY(2px); 355 } 356 to { 357 opacity: 1; 358 transform: translateY(0); 359 } 360} 361@keyframes radixPopoverSlideDownAndFade { 362 from { 363 opacity: 0; 364 transform: translateY(-2px); 365 } 366 to { 367 opacity: 1; 368 transform: translateY(0); 369 } 370} 371 372/* 373 * #/components/Toast/index.web.tsx 374 */ 375@keyframes toastFadeIn { 376 from { 377 opacity: 0; 378 } 379 to { 380 opacity: 1; 381 } 382} 383@keyframes toastFadeOut { 384 from { 385 opacity: 1; 386 } 387 to { 388 opacity: 0; 389 } 390}