this repo has no description
at main 370 lines 6.7 kB view raw
1/* ========================================================================== 2 @toshi - Brutalist Terminal Aesthetic 3 ========================================================================== */ 4 5/* CSS Custom Properties */ 6:root { 7 /* Colors */ 8 --color-bg: #f7f7f8; 9 --color-fg: #111; 10 --color-muted: #666; 11 --color-border: #ccc; 12 --color-input-bg: #fff; 13 --color-input-focus: #fffef0; 14 15 /* Status Colors */ 16 --color-success: #0a0; 17 --color-success-bg: #efe; 18 --color-error: #a00; 19 --color-error-bg: #fee; 20 --color-warning: #a80; 21 --color-warning-bg: #ffc; 22 23 /* Spacing Scale */ 24 --space-xs: 0.25rem; 25 --space-sm: 0.5rem; 26 --space-md: 1rem; 27 --space-lg: 1.5rem; 28 --space-xl: 2rem; 29 30 /* Typography */ 31 --font-mono: 'IBM Plex Mono', 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', monospace; 32 --font-size-base: 13px; 33 --font-size-sm: 12px; 34 --line-height: 1.6; 35 36 /* Layout */ 37 --max-width: 72ch; 38 --border-width: 2px; 39} 40 41/* Reset & Base */ 42*, *::before, *::after { 43 box-sizing: border-box; 44} 45 46body { 47 background-color: var(--color-bg); 48 color: var(--color-fg); 49 font-family: var(--font-mono); 50 font-size: var(--font-size-base); 51 line-height: var(--line-height); 52 padding: var(--space-xl); 53 margin: 0; 54 min-height: 100vh; 55} 56 57/* Typography */ 58h1, h2, h3, h4, h5, h6 { 59 margin: 0; 60 font-size: inherit; 61 font-weight: normal; 62 text-transform: uppercase; 63 letter-spacing: 0.05em; 64} 65 66p { margin: 0; } 67 68a { 69 color: var(--color-fg); 70 text-decoration: underline; 71 text-underline-offset: 2px; 72} 73 74a:hover { 75 background-color: var(--color-fg); 76 color: var(--color-bg); 77 text-decoration: none; 78} 79 80/* Terminal Container */ 81.terminal { 82 max-width: var(--max-width); 83 margin: 0 auto; 84} 85 86.terminal-header { 87 display: flex; 88 align-items: center; 89 gap: var(--space-md); 90} 91 92.terminal-title { 93 font-size: var(--font-size-base); 94} 95 96.back-link { 97 color: var(--color-muted); 98 text-decoration: none; 99 font-weight: bold; 100} 101 102.back-link:hover { 103 color: var(--color-fg); 104 background: transparent; 105} 106 107 108/* Divider */ 109.divider { 110 color: var(--color-muted); 111 user-select: none; 112 margin: var(--space-md) 0; 113} 114 115/* Sections */ 116.terminal-section { 117 padding: var(--space-md) 0; 118} 119 120.section-title { 121 color: var(--color-muted); 122 margin-bottom: var(--space-sm); 123 font-size: var(--font-size-sm); 124} 125 126/* Label-Value Pairs */ 127.label-value { 128 display: flex; 129 gap: var(--space-sm); 130} 131 132.label { 133 color: var(--color-muted); 134 flex-shrink: 0; 135} 136 137.value { 138 color: var(--color-fg); 139} 140 141.value.status-success { color: var(--color-success); } 142.value.status-error { color: var(--color-error); } 143.value.status-warning { color: var(--color-warning); } 144 145/* Data Table */ 146.data-table { 147 width: 100%; 148} 149 150.data-row { 151 display: flex; 152 gap: var(--space-md); 153 padding: var(--space-xs) 0; 154 align-items: baseline; 155} 156 157.data-header { 158 border-bottom: 1px solid var(--color-border); 159 padding-bottom: var(--space-sm); 160 margin-bottom: var(--space-xs); 161} 162 163.data-header .data-cell { 164 color: var(--color-muted); 165 font-size: var(--font-size-sm); 166} 167 168.data-cell { 169 overflow: hidden; 170 text-overflow: ellipsis; 171 white-space: nowrap; 172} 173 174.data-row-link { 175 display: block; 176 text-decoration: none; 177} 178 179.data-row-link:hover { 180 background: var(--color-fg); 181 color: var(--color-bg); 182} 183 184.data-row-link:hover .data-cell { 185 color: inherit; 186} 187 188.data-empty { 189 color: var(--color-muted); 190 padding: var(--space-md) 0; 191 font-style: italic; 192} 193 194.data-body { 195 display: flex; 196 flex-direction: column; 197} 198 199/* Action Bar */ 200.action-bar { 201 display: flex; 202 flex-wrap: wrap; 203 gap: var(--space-sm); 204 padding: var(--space-md) 0; 205} 206 207/* Status Badge */ 208.status-badge { 209 text-transform: uppercase; 210 letter-spacing: 0.05em; 211} 212 213.status-online { color: var(--color-success); } 214.status-offline { color: var(--color-error); } 215.status-loading { color: var(--color-warning); } 216 217/* Buttons */ 218button, .btn { 219 font-family: var(--font-mono); 220 font-size: var(--font-size-base); 221 background: var(--color-fg); 222 color: var(--color-bg); 223 border: var(--border-width) solid var(--color-fg); 224 padding: var(--space-sm) var(--space-md); 225 cursor: pointer; 226 transition: all 0.1s ease; 227 text-transform: uppercase; 228 letter-spacing: 0.05em; 229} 230 231button:hover, .btn:hover { 232 background: var(--color-bg); 233 color: var(--color-fg); 234} 235 236button:disabled { 237 opacity: 0.4; 238 cursor: not-allowed; 239} 240 241button.secondary, .btn.secondary { 242 background: var(--color-bg); 243 color: var(--color-fg); 244} 245 246button.secondary:hover, .btn.secondary:hover { 247 background: var(--color-fg); 248 color: var(--color-bg); 249} 250 251/* Input Fields */ 252.input-field { 253 display: flex; 254 align-items: center; 255 gap: var(--space-sm); 256 flex-wrap: wrap; 257} 258 259.input-label { 260 color: var(--color-muted); 261 flex-shrink: 0; 262} 263 264input, textarea, select { 265 font-family: var(--font-mono); 266 font-size: var(--font-size-base); 267 background: var(--color-input-bg); 268 color: var(--color-fg); 269 border: var(--border-width) solid var(--color-fg); 270 padding: var(--space-sm) var(--space-md); 271 outline: none; 272} 273 274input:focus, textarea:focus, select:focus { 275 background: var(--color-input-focus); 276} 277 278input::placeholder { 279 color: var(--color-muted); 280} 281 282/* Messages */ 283.message { 284 padding: var(--space-sm) var(--space-md); 285 border: var(--border-width) solid; 286} 287 288.message-success { 289 color: var(--color-success); 290 background: var(--color-success-bg); 291 border-color: var(--color-success); 292} 293 294.message-error { 295 color: var(--color-error); 296 background: var(--color-error-bg); 297 border-color: var(--color-error); 298} 299 300.message-info { 301 color: var(--color-fg); 302 background: var(--color-bg); 303 border-color: var(--color-border); 304} 305 306/* Legacy support */ 307.error { 308 color: var(--color-error); 309} 310 311.success { 312 color: var(--color-success); 313} 314 315/* Form Layout */ 316.form-group { 317 display: flex; 318 flex-direction: column; 319 gap: var(--space-sm); 320} 321 322.form-row { 323 display: flex; 324 align-items: center; 325 gap: var(--space-md); 326 flex-wrap: wrap; 327} 328 329/* Mobile Adjustments */ 330@media (max-width: 600px) { 331 body { 332 padding: var(--space-md); 333 font-size: var(--font-size-sm); 334 } 335 336 .data-row { 337 flex-wrap: wrap; 338 } 339 340 .data-cell { 341 white-space: normal; 342 } 343 344 .input-field { 345 flex-direction: column; 346 align-items: flex-start; 347 } 348 349 input, textarea, select { 350 width: 100%; 351 } 352} 353 354/* Utility Classes */ 355.text-muted { color: var(--color-muted); } 356.text-success { color: var(--color-success); } 357.text-error { color: var(--color-error); } 358.text-warning { color: var(--color-warning); } 359 360.visually-hidden { 361 position: absolute; 362 width: 1px; 363 height: 1px; 364 padding: 0; 365 margin: -1px; 366 overflow: hidden; 367 clip: rect(0, 0, 0, 0); 368 white-space: nowrap; 369 border: 0; 370}