an appview-less Bluesky client using Constellation and PDS Queries reddwarf.app
frontend spa bluesky reddwarf microcosm
1@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&family=Spectral+SC:wght@500&display=swap'); 2@import "tailwindcss"; 3 4/* @theme { 5 --color-gray-50: oklch(0.984 0.005 220.000); 6 --color-gray-100: oklch(0.968 0.010 220.000); 7 --color-gray-200: oklch(0.929 0.020 222.000); 8 --color-gray-300: oklch(0.869 0.035 220.000); 9 --color-gray-400: oklch(0.704 0.060 218.000); 10 --color-gray-500: oklch(0.554 0.070 218.000); 11 --color-gray-600: oklch(0.446 0.065 218.000); 12 --color-gray-700: oklch(0.372 0.060 218.000); 13 --color-gray-800: oklch(0.279 0.055 220.000); 14 --color-gray-900: oklch(0.208 0.050 222.000); 15 --color-gray-950: oklch(0.129 0.050 222.000); 16} */ 17 18:root { 19 --safe-hue: var(--tw-gray-hue, 28) 20} 21 22@theme { 23 --color-gray-50: oklch(0.984 0.012 var(--safe-hue)); 24 --color-gray-100: oklch(0.968 0.017 var(--safe-hue)); 25 --color-gray-200: oklch(0.929 0.025 var(--safe-hue)); 26 --color-gray-300: oklch(0.869 0.035 var(--safe-hue)); 27 --color-gray-400: oklch(0.704 0.05 var(--safe-hue)); 28 --color-gray-500: oklch(0.554 0.06 var(--safe-hue)); 29 --color-gray-600: oklch(0.446 0.058 var(--safe-hue)); 30 --color-gray-700: oklch(0.372 0.058 var(--safe-hue)); 31 --color-gray-800: oklch(0.279 0.055 var(--safe-hue)); 32 --color-gray-900: oklch(0.208 0.055 var(--safe-hue)); 33 --color-gray-950: oklch(0.129 0.055 var(--safe-hue)); 34} 35 36@layer base { 37 html { 38 color-scheme: light dark; 39 } 40 41 * { 42 @apply border-gray-200 dark:border-gray-800; 43 } 44 45 html, 46 body { 47 @apply text-gray-900 bg-gray-50 dark:bg-gray-950 dark:text-gray-200; 48 } 49 50 .using-mouse * { 51 outline: none !important; 52 } 53} 54 55@media (width >= 64rem /* 1024px */) { 56 html:not(:has(.disablegutter)), 57 body:not(:has(.disablegutter)) { 58 scrollbar-gutter: stable both-edges !important; 59 } 60 html:has(.disablegutter), 61 body:has(.disablegutter) { 62 scrollbar-width: none; 63 overflow-y: hidden; 64 } 65} 66 67.lightbox:has(+.lightbox-sidebar){ 68 opacity: 0; 69} 70 71.scroll-thin { 72 scrollbar-width: thin; 73 /*scrollbar-gutter: stable both-edges !important;*/ 74} 75 76.scroll-none { 77 scrollbar-width: none; 78} 79 80.dangerousFediContent { 81 & a[href]{ 82 text-decoration: none; 83 color: rgb(29, 122, 242); 84 word-break: break-all; 85 } 86} 87 88.font-inter { 89 font-family: "Inter", sans-serif; 90} 91.font-roboto { 92 font-family: "Roboto", sans-serif; 93} 94 95:root { 96 --header-bg-light: color-mix(in srgb, var(--color-white) calc(var(--is-top) * 100%), var(--color-gray-50)); 97 --header-bg-dark: color-mix(in srgb, var(--color-gray-950) calc(var(--is-top) * 100%), var(--color-gray-900)); 98} 99 100:root { 101 --header-bg: var(--header-bg-light); 102} 103@media (prefers-color-scheme: dark) { 104 :root { 105 --header-bg: var(--header-bg-dark); 106 } 107} 108 109:root { 110 --shadow-opacity: calc(1 - var(--is-top)); 111 --tw-shadow-header: 0 2px 8px hsl(0 0% 0% / calc(var(--shadow-opacity) * 0.15)); 112} 113 114 115/* m3 input */ 116:root { 117 --m3input-radius: 6px; 118 --m3input-border-width: .0625rem; 119 --m3input-font-size: 16px; 120 --m3input-transition: 150ms cubic-bezier(.2, .8, .2, 1); 121 /* light theme */ 122 --m3input-bg: var(--color-gray-50); 123 --m3input-border-color: var(--color-gray-400); 124 --m3input-label-color: var(--color-gray-500); 125 --m3input-text-color: var(--color-gray-900); 126 --m3input-focus-color: var(--color-gray-600); 127} 128 129@media (prefers-color-scheme: dark) { 130 :root { 131 --m3input-bg: var(--color-gray-950); 132 --m3input-border-color: var(--color-gray-700); 133 --m3input-label-color: var(--color-gray-400); 134 --m3input-text-color: var(--color-gray-50); 135 --m3input-focus-color: var(--color-gray-400); 136 } 137} 138 139/* reset page *//* 140html, 141body { 142 background: var(--m3input-bg); 143 margin: 0; 144 padding: 1rem; 145 color: var(--m3input-text-color); 146 font-family: system-ui, sans-serif; 147 font-size: var(--m3input-font-size); 148}*/ 149 150/* base wrapper */ 151.m3input-field.m3input-label.m3input-border { 152 position: relative; 153 display: inline-block; 154 width: 100%; 155 /*max-width: 400px;*/ 156} 157 158/* size variants */ 159.m3input-field.size-sm { 160 --m3input-h: 40px; 161} 162 163.m3input-field.size-md { 164 --m3input-h: 48px; 165} 166 167.m3input-field.size-lg { 168 --m3input-h: 56px; 169} 170 171.m3input-field.size-xl { 172 --m3input-h: 64px; 173} 174 175.m3input-field.m3input-label.m3input-border:not(.size-sm):not(.size-md):not(.size-lg):not(.size-xl) { 176 --m3input-h: 48px; 177} 178 179/* outlined input */ 180.m3input-field.m3input-label.m3input-border input { 181 width: 100%; 182 height: var(--m3input-h); 183 border: var(--m3input-border-width) solid var(--m3input-border-color); 184 border-radius: var(--m3input-radius); 185 background: var(--m3input-bg); 186 color: var(--m3input-text-color); 187 font-size: var(--m3input-font-size); 188 padding: 0 12px; 189 box-sizing: border-box; 190 outline: none; 191 transition: border-color var(--m3input-transition), box-shadow var(--m3input-transition); 192} 193 194/* focus ring */ 195.m3input-field.m3input-label.m3input-border input:focus { 196 border-color: var(--m3input-focus-color); 197 /*box-shadow: 0 0 0 2px color-mix(in srgb, var(--focus-color) 20%, transparent);*/ 198} 199 200/* label */ 201.m3input-field.m3input-label.m3input-border label { 202 position: absolute; 203 left: 12px; 204 top: 50%; 205 transform: translateY(-50%); 206 background: var(--m3input-bg); 207 padding: 0 .25em; 208 color: var(--m3input-label-color); 209 pointer-events: none; 210 transition: all var(--m3input-transition); 211} 212 213/* float on focus or when filled */ 214.m3input-field.m3input-label.m3input-border input:focus+label, 215.m3input-field.m3input-label.m3input-border input:not(:placeholder-shown)+label { 216 top: 0; 217 transform: translateY(-50%) scale(.78); 218 left: 0; 219 color: var(--m3input-focus-color); 220} 221 222/* placeholder trick */ 223.m3input-field.m3input-label.m3input-border input::placeholder { 224 color: transparent; 225}