my own indieAuth provider! indiko.dunkirk.sh/docs
indieauth oauth2-server
at main 9.7 kB view raw
1/* Indiko - Consolidated Styles */ 2 3/* CSS Variables */ 4:root { 5 --mahogany: #26242b; 6 --lavender: #d9d0de; 7 --old-rose: #bc8da0; 8 --rosewood: #a04668; 9 --berry-crush: #ab4967; 10} 11 12/* Reset */ 13* { 14 margin: 0; 15 padding: 0; 16 box-sizing: border-box; 17} 18 19/* Base */ 20body { 21 font-family: "Space Grotesk", sans-serif; 22 background: var(--mahogany); 23 color: var(--lavender); 24 min-height: 100vh; 25 display: flex; 26 flex-direction: column; 27 align-items: center; 28 padding: 2.5rem 1.25rem; 29} 30 31/* Typography */ 32h1 { 33 font-size: 2rem; 34 font-weight: 700; 35 background: linear-gradient( 36 135deg, 37 var(--old-rose), 38 var(--berry-crush), 39 var(--rosewood) 40 ); 41 -webkit-background-clip: text; 42 -webkit-text-fill-color: transparent; 43 background-clip: text; 44 letter-spacing: -0.125rem; 45} 46 47h2 { 48 font-size: 1.5rem; 49 font-weight: 600; 50 color: var(--lavender); 51 margin-bottom: 1.5rem; 52 letter-spacing: -0.05rem; 53} 54 55.subtitle { 56 color: var(--old-rose); 57 font-size: 1rem; 58 font-weight: 300; 59 letter-spacing: 0.05rem; 60} 61 62/* Links */ 63a { 64 color: var(--berry-crush); 65 text-decoration: none; 66 transition: color 0.2s; 67} 68 69a:hover { 70 color: var(--rosewood); 71 text-decoration: underline; 72} 73 74/* Forms */ 75label { 76 display: block; 77 color: var(--old-rose); 78 font-size: 0.875rem; 79 font-weight: 500; 80 margin-bottom: 0.5rem; 81 text-transform: uppercase; 82 letter-spacing: 0.05rem; 83} 84 85input[type="text"], 86input[type="email"], 87input[type="url"], 88input[type="number"], 89input[type="password"], 90input[type="datetime-local"], 91textarea { 92 width: 100%; 93 padding: 0.875rem 1rem; 94 background: rgba(12, 23, 19, 0.6); 95 border: 2px solid var(--rosewood); 96 border-radius: 0; 97 color: var(--lavender); 98 font-size: 1rem; 99 font-family: "Space Grotesk", sans-serif; 100 transition: border-color 0.2s; 101 letter-spacing: 0.025rem; 102} 103 104input:focus, 105textarea:focus { 106 outline: none; 107 border-color: var(--berry-crush); 108 background: rgba(12, 23, 19, 0.8); 109} 110 111input::placeholder, 112textarea::placeholder { 113 color: rgba(217, 208, 222, 0.4); 114} 115 116input:disabled, 117textarea:disabled { 118 opacity: 0.5; 119 cursor: not-allowed; 120} 121 122textarea { 123 resize: vertical; 124 min-height: 4rem; 125} 126 127.form-group { 128 margin-bottom: 1.5rem; 129} 130 131.form-help { 132 font-size: 0.75rem; 133 color: var(--old-rose); 134 margin-top: 0.25rem; 135} 136 137/* Buttons */ 138button { 139 position: relative; 140 padding: 1rem 2rem; 141 background: var(--berry-crush); 142 color: var(--lavender); 143 border: 4px solid var(--mahogany); 144 border-radius: 0; 145 font-size: 1rem; 146 font-weight: 700; 147 cursor: pointer; 148 font-family: "Space Grotesk", sans-serif; 149 transition: all 0.15s ease; 150 text-transform: uppercase; 151 letter-spacing: 0.1rem; 152 box-shadow: 6px 6px 0 var(--mahogany); 153} 154 155button::before { 156 content: ""; 157 position: absolute; 158 top: -4px; 159 left: -4px; 160 right: -4px; 161 bottom: -4px; 162 background: transparent; 163 border: 4px solid var(--rosewood); 164 pointer-events: none; 165 transition: all 0.15s ease; 166} 167 168button:hover:not(:disabled) { 169 transform: translate(3px, 3px); 170 box-shadow: 3px 3px 0 var(--mahogany); 171} 172 173button:hover:not(:disabled)::before { 174 top: -7px; 175 left: -7px; 176 right: -7px; 177 bottom: -7px; 178} 179 180button:active:not(:disabled) { 181 transform: translate(6px, 6px); 182 box-shadow: 0 0 0 var(--mahogany); 183} 184 185button:disabled { 186 opacity: 0.5; 187 cursor: not-allowed; 188} 189 190.secondary-btn, 191.button-secondary { 192 background: transparent; 193 color: var(--old-rose); 194 box-shadow: 4px 4px 0 var(--mahogany); 195} 196 197.secondary-btn::before, 198.button-secondary::before { 199 border-color: var(--old-rose); 200} 201 202.secondary-btn:hover:not(:disabled), 203.button-secondary:hover:not(:disabled) { 204 background: rgba(188, 141, 160, 0.1); 205} 206 207/* Small action buttons - clean style with subtle backgrounds */ 208.btn-edit, 209.btn-delete, 210.btn-copy, 211.btn-disable, 212.revoke-btn { 213 padding: 0.5rem 1rem; 214 font-family: "Space Grotesk", sans-serif; 215 font-size: 0.875rem; 216 font-weight: 600; 217 cursor: pointer; 218 transition: all 0.2s; 219 text-transform: none; 220 letter-spacing: normal; 221 box-shadow: none; 222 position: static; 223 border: 2px solid transparent; 224} 225 226.btn-edit::before, 227.btn-delete::before, 228.btn-copy::before, 229.btn-disable::before, 230.revoke-btn::before { 231 display: none; 232} 233 234.btn-edit:hover:not(:disabled), 235.btn-delete:hover:not(:disabled), 236.btn-copy:hover:not(:disabled), 237.btn-disable:hover:not(:disabled), 238.revoke-btn:hover:not(:disabled) { 239 transform: none; 240} 241 242.btn-edit { 243 background: rgba(188, 141, 160, 0.2); 244 color: var(--lavender); 245 border: 2px solid var(--old-rose); 246} 247 248.btn-edit:hover:not(:disabled) { 249 background: rgba(188, 141, 160, 0.3); 250} 251 252.btn-delete, 253.revoke-btn { 254 background: rgba(160, 70, 104, 0.2); 255 color: var(--lavender); 256 border: 2px solid var(--rosewood); 257} 258 259.btn-delete:hover:not(:disabled), 260.revoke-btn:hover:not(:disabled) { 261 background: rgba(160, 70, 104, 0.3); 262} 263 264.btn-disable { 265 background: rgba(229, 115, 115, 0.2); 266 color: var(--lavender); 267 border: 2px solid #e57373; 268} 269 270.btn-disable:hover:not(:disabled) { 271 background: rgba(229, 115, 115, 0.3); 272} 273 274.btn-copy { 275 background: rgba(188, 141, 160, 0.2); 276 color: var(--lavender); 277 border: 2px solid var(--old-rose); 278} 279 280.btn-copy:hover:not(:disabled) { 281 background: rgba(188, 141, 160, 0.3); 282} 283 284.btn-edit:disabled, 285.btn-delete:disabled, 286.btn-copy:disabled, 287.btn-disable:disabled, 288.revoke-btn:disabled { 289 opacity: 0.5; 290 cursor: not-allowed; 291} 292 293/* Messages */ 294.message { 295 padding: 0.875rem; 296 margin-bottom: 1rem; 297 border-radius: 0.5rem; 298 font-size: 0.875rem; 299 letter-spacing: 0.025rem; 300 display: none; 301} 302 303.message.show { 304 display: block; 305} 306 307.message.error { 308 background: rgba(160, 70, 104, 0.2); 309 border: 2px solid var(--rosewood); 310 color: var(--lavender); 311} 312 313.message.success { 314 background: rgba(188, 141, 160, 0.2); 315 border: 2px solid var(--old-rose); 316 color: var(--lavender); 317} 318 319/* Cards */ 320.card { 321 background: rgba(188, 141, 160, 0.05); 322 border: 1px solid var(--old-rose); 323 padding: 1.5rem; 324} 325 326.card-title { 327 font-size: 1.125rem; 328 font-weight: 600; 329 color: var(--lavender); 330 margin-bottom: 1rem; 331} 332 333/* Avatars */ 334.avatar, 335.profile-avatar, 336.user-avatar { 337 width: 4rem; 338 height: 4rem; 339 border-radius: 50%; 340 background: var(--berry-crush); 341 display: flex; 342 align-items: center; 343 justify-content: center; 344 font-size: 1.5rem; 345 font-weight: 700; 346 color: var(--lavender); 347 text-transform: uppercase; 348 flex-shrink: 0; 349 overflow: hidden; 350} 351 352.avatar img, 353.profile-avatar img, 354.user-avatar img { 355 width: 100%; 356 height: 100%; 357 border-radius: 50%; 358 object-fit: cover; 359} 360 361/* Badges */ 362.badge, 363.user-badge, 364.scope-badge { 365 display: inline-block; 366 padding: 0.25rem 0.75rem; 367 font-size: 0.75rem; 368 font-weight: 700; 369 text-transform: uppercase; 370 letter-spacing: 0.05rem; 371} 372 373.badge-admin { 374 background: var(--berry-crush); 375 color: var(--lavender); 376} 377 378.badge-role { 379 background: rgba(188, 141, 160, 0.2); 380 color: var(--lavender); 381 border: 1px solid var(--old-rose); 382} 383 384.badge-status { 385 border: 1px solid var(--old-rose); 386} 387 388.badge-status.active { 389 background: rgba(139, 195, 74, 0.2); 390 color: #a5d6a7; 391 border-color: #81c784; 392} 393 394.badge-status.suspended { 395 background: rgba(244, 67, 54, 0.2); 396 color: #ef9a9a; 397 border-color: #e57373; 398} 399 400.badge-status.inactive { 401 background: rgba(158, 158, 158, 0.2); 402 color: #bdbdbd; 403 border-color: #9e9e9e; 404} 405 406/* Header */ 407header { 408 width: 100%; 409 max-width: 56.25rem; 410 margin-bottom: 2rem; 411} 412 413.header-nav { 414 display: flex; 415 gap: 1rem; 416 margin-top: 0.5rem; 417} 418 419.header-nav a { 420 color: var(--old-rose); 421 text-decoration: none; 422 font-size: 0.875rem; 423 font-weight: 500; 424 padding: 0.5rem 1rem; 425 border: 1px solid var(--old-rose); 426 transition: all 0.2s; 427} 428 429.header-nav a:hover { 430 background: rgba(188, 141, 160, 0.1); 431 color: var(--berry-crush); 432 border-color: var(--berry-crush); 433} 434 435.header-nav a.active { 436 background: var(--berry-crush); 437 color: var(--lavender); 438 border-color: var(--berry-crush); 439} 440 441/* Main */ 442main { 443 flex: 1; 444 width: 100%; 445 max-width: 56.25rem; 446} 447 448/* Footer */ 449footer { 450 width: 100%; 451 max-width: 56.25rem; 452 padding: 1rem; 453 text-align: center; 454 color: var(--old-rose); 455 font-size: 0.875rem; 456 font-weight: 300; 457 letter-spacing: 0.05rem; 458} 459 460footer a { 461 color: var(--berry-crush); 462 text-decoration: none; 463 transition: color 0.2s; 464} 465 466footer a:hover { 467 color: var(--rosewood); 468 text-decoration: underline; 469} 470 471/* Utility Classes */ 472.loading, 473.error, 474.empty { 475 text-align: center; 476 padding: 2rem; 477 color: var(--old-rose); 478 font-size: 1rem; 479} 480 481.error { 482 color: var(--rosewood); 483} 484 485.back-link { 486 text-align: center; 487 margin-top: 2rem; 488 font-size: 0.875rem; 489} 490 491.back-link a { 492 color: var(--berry-crush); 493 text-decoration: none; 494} 495 496.back-link a:hover { 497 text-decoration: underline; 498} 499 500/* Divider */ 501.divider { 502 display: flex; 503 align-items: center; 504 text-align: center; 505 margin: 1.5rem 0; 506 color: var(--old-rose); 507 font-size: 0.875rem; 508 font-weight: 300; 509} 510 511.divider::before, 512.divider::after { 513 content: ""; 514 flex: 1; 515 border-bottom: 1px solid rgba(188, 141, 160, 0.3); 516} 517 518.divider span { 519 padding: 0 1rem; 520} 521 522/* Modals */ 523.modal { 524 display: none; 525 position: fixed; 526 top: 0; 527 left: 0; 528 width: 100%; 529 height: 100%; 530 background: rgba(0, 0, 0, 0.8); 531 justify-content: center; 532 align-items: center; 533 z-index: 1000; 534} 535 536.modal-content { 537 background: var(--mahogany); 538 border: 2px solid var(--old-rose); 539 padding: 2rem; 540 max-width: 40rem; 541 width: 90%; 542 max-height: 90vh; 543 overflow-y: auto; 544} 545 546.modal-header { 547 display: flex; 548 justify-content: space-between; 549 align-items: center; 550 margin-bottom: 1.5rem; 551} 552 553.modal-header h3 { 554 font-size: 1.5rem; 555 color: var(--lavender); 556 margin: 0; 557} 558 559.modal-close { 560 background: none; 561 border: none; 562 color: var(--old-rose); 563 font-size: 1.5rem; 564 cursor: pointer; 565 padding: 0; 566 line-height: 1; 567} 568 569.modal-close:hover { 570 color: var(--berry-crush); 571} 572 573.modal-actions { 574 display: flex; 575 gap: 1rem; 576 justify-content: flex-end; 577 margin-top: 2rem; 578} 579 580/* Button Groups */ 581.button-group { 582 display: flex; 583 gap: 1rem; 584 margin-top: 2rem; 585}