A URL shortener service that uses ATProto to allow self hosting and ensuring the user owns their data
at main 3.8 kB view raw
1body { 2 font-family: Arial, Helvetica, sans-serif; 3 4 --border-color: #ddd; 5 --gray-100: #fafafa; 6 --gray-500: #666; 7 --gray-700: #333; 8 --primary-100: #d2e7ff; 9 --primary-200: #b1d3fa; 10 --primary-400: #2e8fff; 11 --primary-500: #0078ff; 12 --primary-600: #0066db; 13 --error-500: #f00; 14 --error-100: #fee; 15} 16 17/* 18 Josh's Custom CSS Reset 19 https://www.joshwcomeau.com/css/custom-css-reset/ 20*/ 21*, 22*::before, 23*::after { 24 box-sizing: border-box; 25} 26* { 27 margin: 0; 28} 29body { 30 line-height: 1.5; 31 -webkit-font-smoothing: antialiased; 32} 33img, 34picture, 35video, 36canvas, 37svg { 38 display: block; 39 max-width: 100%; 40} 41input, 42button, 43textarea, 44select { 45 font: inherit; 46} 47p, 48h1, 49h2, 50h3, 51h4, 52h5, 53h6 { 54 overflow-wrap: break-word; 55} 56#root, 57#__next { 58 isolation: isolate; 59} 60 61/* 62 Common components 63*/ 64button, 65.button { 66 display: inline-block; 67 border: 0; 68 background-color: var(--primary-500); 69 border-radius: 50px; 70 color: #fff; 71 padding: 2px 10px; 72 cursor: pointer; 73 text-decoration: none; 74} 75button:hover, 76.button:hover { 77 background: var(--primary-400); 78} 79 80/* 81 Custom components 82*/ 83.error { 84 background-color: var(--error-100); 85 color: var(--error-500); 86 text-align: center; 87 padding: 1rem; 88 display: none; 89} 90.error.visible { 91 display: block; 92} 93 94#header { 95 background-color: #fff; 96 text-align: center; 97 padding: 0.5rem 0 1.5rem; 98} 99 100#header h1 { 101 font-size: 5rem; 102} 103 104.container { 105 display: flex; 106 flex-direction: column; 107 gap: 4px; 108 margin: 0 auto; 109 max-width: 600px; 110 padding: 20px; 111} 112 113.card { 114 /* border: 1px solid var(--border-color); */ 115 border-radius: 6px; 116 padding: 10px 16px; 117 background-color: #fff; 118} 119.card > :first-child { 120 margin-top: 0; 121} 122.card > :last-child { 123 margin-bottom: 0; 124} 125 126.session-form { 127 display: flex; 128 flex-direction: row; 129 align-items: center; 130 justify-content: space-between; 131} 132 133.login-form { 134 display: flex; 135 flex-direction: row; 136 gap: 6px; 137 border: 1px solid var(--border-color); 138 border-radius: 6px; 139 padding: 10px 16px; 140 background-color: #fff; 141} 142 143.login-form input { 144 flex: 1; 145 border: 0; 146} 147 148.status-options { 149 display: flex; 150 flex-direction: row; 151 flex-wrap: wrap; 152 gap: 8px; 153 margin: 10px 0; 154} 155 156.status-option { 157 font-size: 2rem; 158 width: 3rem; 159 height: 3rem; 160 padding: 0; 161 background-color: #fff; 162 border: 1px solid var(--border-color); 163 border-radius: 3rem; 164 text-align: center; 165 box-shadow: 0 1px 4px #0001; 166 cursor: pointer; 167} 168 169.status-option:hover { 170 background-color: var(--primary-100); 171 box-shadow: 0 0 0 1px var(--primary-400); 172} 173 174.status-option.selected { 175 box-shadow: 0 0 0 1px var(--primary-500); 176 background-color: var(--primary-100); 177} 178 179.status-option.selected:hover { 180 background-color: var(--primary-200); 181} 182 183.status-line { 184 display: flex; 185 flex-direction: row; 186 align-items: center; 187 gap: 10px; 188 position: relative; 189 margin-top: 15px; 190} 191 192.status-line:not(.no-line)::before { 193 content: ""; 194 position: absolute; 195 width: 2px; 196 background-color: var(--border-color); 197 left: 1.45rem; 198 bottom: calc(100% + 2px); 199 height: 15px; 200} 201 202.status-line .status { 203 font-size: 2rem; 204 background-color: #fff; 205 width: 3rem; 206 height: 3rem; 207 border-radius: 1.5rem; 208 text-align: center; 209 border: 1px solid var(--border-color); 210} 211 212.status-line .desc { 213 color: var(--gray-500); 214} 215 216.status-line .author { 217 color: var(--gray-700); 218 font-weight: 600; 219 text-decoration: none; 220} 221 222.status-line .author:hover { 223 text-decoration: underline; 224} 225 226.signup-cta { 227 text-align: center; 228 text-wrap: balance; 229 margin-top: 1rem; 230}