this repo has no description
at main 3193 lines 76 kB view raw
1@import url('@szhsin/react-menu/dist/core.css'); 2@import url('toastify-js/src/toastify.css'); 3 4html, 5body { 6 margin: 0; 7 padding: 0; 8 background-color: var(--bg-color); 9 color: var(--text-color); 10 overflow-x: hidden; 11} 12body { 13 touch-action: pan-x pan-y; 14} 15 16#app { 17 min-height: 100vh; 18 min-height: 100dvh; 19 display: flex; 20 align-items: center; 21 justify-content: center; 22} 23#app-standalone { 24 background-color: var(--bg-faded-color); 25} 26 27/* MENTIONS */ 28 29a.mention { 30 text-decoration-line: none; 31} 32a.mention span { 33 text-decoration-line: underline; 34 text-decoration-color: inherit; 35 text-decoration-thickness: 2px; 36 text-underline-offset: 2px; 37 font-variant-numeric: slashed-zero; 38 font-feature-settings: 'ss01'; 39} 40/* a.mention:has(span).hashtag { 41 color: var(--link-light-color); 42} */ 43a.mention span { 44 color: var(--text-color); 45} 46a[href^='http'][rel*='nofollow']:visited:not(:has(div)) { 47 color: var(--link-visited-color); 48 text-decoration-color: var(--link-visited-color); 49} 50 51.deck-container { 52 width: 100%; 53 height: 100vh; 54 height: 100dvh; 55 overflow: auto; 56 overflow-x: hidden; 57 transition: opacity 0.1s ease-in-out; 58 overscroll-behavior: contain; 59 scroll-behavior: smooth; 60 background-color: var(--bg-color); 61 flex-grow: 1; 62 /* This `transform` fixes carousel blocking vertical scrolling for pointer devices on iPad */ 63 transform: translateZ(0); 64} 65 66@media (hover: hover) { 67 .deck-container { 68 overscroll-behavior: auto; 69 } 70} 71.deck-container[hidden] { 72 display: block; 73 position: absolute; 74 user-select: none; 75 pointer-events: none; 76 opacity: 0; 77 content-visibility: hidden; 78} 79 80.deck-container, 81.deck.contained { 82 scroll-padding-top: 4em; 83 84 &:has(~ #shortcuts > .tab-bar) { 85 scroll-padding-top: 7em; 86 } 87} 88 89:is(#home-page, #welcome, #columns, #loader-root) ~ .deck-container { 90 z-index: 10; 91 position: fixed; 92 inset: 0; 93} 94:is(#home-page, #welcome, #columns, #loader-root):has(~ .deck-container) { 95 /* display: block; */ 96 position: absolute; 97 user-select: none; 98 pointer-events: none; 99 opacity: 0; 100 /* This causes scrollTop to be reset to 0 when the page is hidden */ 101 /* content-visibility: hidden; */ 102} 103 104.deck { 105 min-height: 100vh; 106 min-height: 100dvh; 107 margin: auto; 108 width: var(--main-width); 109 max-width: 100%; 110 background-color: var(--bg-color); 111 overflow-anchor: auto; 112 113 &.wide { 114 width: 60em; 115 } 116} 117.deck.contained { 118 overflow: auto; 119 overflow-x: hidden; 120 height: 100vh; 121 height: 100dvh; 122 overscroll-behavior: contain; 123} 124@media (hover: hover) { 125 .deck.contained { 126 overscroll-behavior: auto; 127 } 128} 129 130.deck > header { 131 position: sticky; 132 top: 0; 133 z-index: 1; 134 cursor: default; 135 z-index: 10; 136 user-select: none; 137 transition: transform 0.5s ease-in-out; 138 user-select: none; 139 140 .header-double-lines { 141 font-size: 90% !important; 142 cursor: pointer; 143 144 div { 145 font-weight: normal; 146 color: var(--text-insignificant-color); 147 } 148 } 149} 150.deck > header[hidden] { 151 display: block; 152 transform: translateY(-100%); 153 pointer-events: none; 154 user-select: none; 155} 156.deck > header .header-grid { 157 background-color: var(--bg-color); 158 /* background-color: var(--bg-blur-color); 159 background-image: linear-gradient(to bottom, var(--bg-color), transparent); 160 backdrop-filter: saturate(180%) blur(20px); */ 161 border-bottom: var(--hairline-width) solid var(--divider-color); 162 min-height: 3em; 163 display: grid; 164 grid-template-columns: 1fr minmax(0, max-content) 1fr; 165 align-items: center; 166 white-space: nowrap; 167} 168.deck > header .header-grid > .header-side:last-of-type { 169 text-align: end; 170 grid-column: 3; 171} 172.deck > header .header-grid :is(button, .button).plain { 173 backdrop-filter: none; 174} 175.deck > header .header-grid h1 { 176 margin: 0 8px; 177 padding: 0; 178 font-size: 1.2em; 179 text-align: center; 180 overflow: hidden; 181 text-overflow: ellipsis; 182 white-space: nowrap; 183} 184.deck > header .header-grid.header-grid-2 { 185 grid-template-columns: 1fr max-content; 186} 187.deck > header .header-grid-2 h1 { 188 text-align: start; 189 padding-inline-start: 8px; 190} 191.deck > header .header-grid h1:has(.ancestors-indicator) { 192 display: flex; 193 gap: 8px; 194 align-items: center; 195 max-width: fit-content; 196} 197.deck > header .header-grid h1:has(.ancestors-indicator) .hero-heading { 198 flex: 1; 199 overflow: hidden; 200 text-overflow: ellipsis; 201 white-space: nowrap; 202} 203.deck h2 { 204 font-size: 1.45em; 205} 206.deck.padded-bottom .timeline > li:last-child { 207 padding-bottom: 80vh !important; 208 padding-bottom: 80dvh !important; 209} 210 211@keyframes indeterminate-bar { 212 0% { 213 transform: translateX(-50%); 214 opacity: 0.25; 215 } 216 50% { 217 opacity: 1; 218 } 219 100% { 220 transform: translateX(50%); 221 opacity: 0.25; 222 } 223} 224@keyframes indeterminate-bar-rtl { 225 0% { 226 transform: translateX(50%); 227 opacity: 0.25; 228 } 229 50% { 230 opacity: 1; 231 } 232 100% { 233 transform: translateX(-50%); 234 opacity: 0.25; 235 } 236} 237.deck > header.loading:after { 238 pointer-events: none; 239 content: ''; 240 display: block; 241 height: 4px; 242 position: absolute; 243 bottom: 0; 244 width: 50%; 245 left: 25%; 246 background-image: radial-gradient( 247 farthest-side at bottom, 248 var(--link-color), 249 transparent 250 ); 251 animation: indeterminate-bar 1s ease-in-out infinite alternate; 252 &:dir(rtl) { 253 animation-name: indeterminate-bar-rtl; 254 } 255} 256@media (min-width: 40em) { 257 .deck > header.loading:after { 258 height: 8px; 259 } 260} 261 262.timeline { 263 margin: 0 auto; 264 padding: 0; 265 266 &.timeline-media { 267 --grid-gap: 8px; 268 display: grid; 269 grid-template-columns: 1fr; 270 grid-auto-rows: fit-content; 271 gap: var(--grid-gap); 272 padding: var(--grid-gap); 273 274 &:not(#columns &) { 275 background-color: var(--bg-faded-color); 276 } 277 278 @media (min-width: 320px) { 279 grid-template-columns: 1fr 1fr; 280 } 281 282 @media (min-width: 40em) { 283 &:not(#columns &) { 284 --grid-gap: 16px; 285 grid-template-columns: 1fr 1fr 1fr; 286 287 @media (min-width: 40em) { 288 width: 95vw; 289 max-width: calc(320px * 3.3); 290 transform: translateX(calc(-50% + var(--main-width) / 2)); 291 &:dir(rtl) { 292 transform: translateX(calc(50% - var(--main-width) / 2)); 293 } 294 } 295 } 296 297 #columns & { 298 padding-inline: 0; 299 } 300 } 301 302 li { 303 padding: 0 !important; 304 margin: 0 !important; 305 border: 0 !important; 306 overflow: visible !important; 307 background-color: transparent !important; 308 box-shadow: none !important; 309 } 310 311 @supports (grid-template-rows: masonry) { 312 grid-template-rows: masonry; 313 masonry-auto-flow: pack; 314 315 .media-post a { 316 aspect-ratio: revert !important; 317 318 video, 319 img, 320 audio { 321 min-height: var(--min-dimension); /* for extreme dimensions */ 322 } 323 } 324 } 325 } 326} 327 328.deck-container-media-first { 329 .timeline { 330 > li:not(.timeline-item-carousel, .timeline-item-container) { 331 &:has(.status-media-first) { 332 @media (min-width: 40em) { 333 width: fit-content; 334 max-width: min(480px, 100%); 335 } 336 337 background-color: transparent !important; 338 border: 0 !important; 339 box-shadow: none !important; 340 margin-inline: auto !important; 341 342 &:not(:first-child) { 343 margin-block: 32px; 344 } 345 346 &:has(.skeleton) { 347 width: 100%; 348 } 349 } 350 351 &:has(.media[data-orientation='landscape']) { 352 max-width: 100%; 353 } 354 } 355 356 .status-link:has(.status-media-first):hover { 357 background-color: transparent; 358 } 359 } 360} 361 362.timeline.grow { 363 /* min-height: 100vh; 364 min-height: 100dvh; */ 365 padding-bottom: calc(env(safe-area-inset-bottom) + 16px); 366} 367.timeline > li { 368 list-style: none; 369 margin: 0; 370 padding: 0; 371 border-bottom: var(--hairline-width) solid var(--divider-color); 372 --line-dir: var(--to-forward); 373} 374.timeline > li + li:not(.timeline-item-carousel, .hero, .ancestor) { 375 content-visibility: auto; 376 contain-intrinsic-size: auto 160px; 377} 378.timeline.contextual 379 > li:is(:hover, :focus-visible, :focus-within, :has(.status-menu-open)) { 380 /* Needed to undo the overflow: hidden "effect" due to "content-visibility: auto" */ 381 content-visibility: visible !important; 382} 383.timeline.flat > li { 384 border-bottom: none; 385} 386 387.timeline.contextual { 388 --indent-large-start: 40px; 389 --indent-small-start: 10px; 390 --thread-start: var(--indent-small-start); 391 --line-start: var(--indent-small-start); 392 --line-width: 3px; 393 --line-end: calc(var(--line-start) + var(--line-width)); 394 --indent-large-end: calc(var(--indent-large-start) + var(--line-width)); 395 --indent-small-end: calc(var(--indent-small-start) + var(--line-width)); 396 --line-margin-end: 16px; 397 --line-radius: 10px; 398 --line-diameter: calc(var(--line-radius) * 2); 399 --avatar-size: 50px; 400 --avatar-margin-start: 16px; 401 --avatar-margin-end: 12px; 402 --line-curve: 45deg; 403 :dir(rtl) & { 404 --line-curve: -45deg; 405 } 406 407 > li:is(.hero:has(+ .thread), .hero:last-child, .thread, .ancestor) { 408 --thread-start: var(--indent-large-start); 409 --line-start: var(--indent-large-start); 410 --line-end: calc(var(--line-start) + var(--line-width)); 411 } 412 413 > li.descendant.thread:has(+ .descendant:not(.thread)):after { 414 position: absolute; 415 inset-inline-start: 10px; 416 bottom: 0; 417 content: ''; 418 display: block; 419 --curves-width: calc(var(--line-start) + var(--line-width) - 10px); 420 width: var(--curves-width); 421 background-color: var(--bg-color); 422 background-repeat: no-repeat; 423 /* border-bottom: var(--line-width) dotted var(--comment-line-color); */ 424 /* height: calc(var(--line-diameter) - var(--line-width)); 425 background-image: linear-gradient( 426 transparent calc(var(--line-radius) - var(--line-width)), 427 var(--comment-line-color) calc(var(--line-radius) - var(--line-width)) 428 var(--line-radius), 429 transparent var(--line-radius) 430 ), 431 radial-gradient( 432 circle at bottom var(--forward), 433 transparent calc(var(--line-radius) - var(--line-width)), 434 var(--comment-line-color) calc(var(--line-radius) - var(--line-width)) 435 var(--line-radius), 436 transparent var(--line-radius) 437 ), 438 radial-gradient( 439 circle at top var(--backward), 440 transparent calc(var(--line-radius) - var(--line-width)), 441 var(--comment-line-color) calc(var(--line-radius) - var(--line-width)) 442 var(--line-radius), 443 transparent var(--line-radius) 444 ); 445 background-position: var(--line-radius) 0, bottom var(--backward), 446 top var(--forward); 447 background-size: calc(100% - var(--line-radius) * 2) auto, 448 var(--line-radius), var(--line-radius); */ 449 --curves-radius: calc(var(--curves-width) / 2); 450 height: calc(var(--curves-width) - var(--line-width)); 451 background-image: 452 radial-gradient( 453 circle at bottom var(--forward), 454 transparent calc(var(--curves-radius) - var(--line-width)), 455 var(--comment-line-color) calc(var(--curves-radius) - var(--line-width)) 456 var(--curves-radius), 457 transparent var(--curves-radius) 458 ), 459 radial-gradient( 460 circle at top var(--backward), 461 transparent calc(var(--curves-radius) - var(--line-width)), 462 var(--comment-line-color) calc(var(--curves-radius) - var(--line-width)) 463 var(--curves-radius), 464 transparent var(--curves-radius) 465 ); 466 background-size: var(--curves-radius); 467 background-position: 468 top var(--backward), 469 bottom var(--forward); 470 } 471} 472.timeline.contextual > li { 473 background-image: linear-gradient( 474 var(--line-dir), 475 transparent, 476 transparent var(--line-start), 477 var(--comment-line-color) var(--line-start), 478 var(--comment-line-color) var(--line-end), 479 transparent var(--line-end), 480 transparent 481 ); 482 &.hero:not(:has(+ .thread), :first-child, :only-child, :last-child) { 483 background-image: 484 linear-gradient( 485 var(--line-dir), 486 transparent, 487 transparent var(--indent-small-start), 488 var(--comment-line-color) var(--indent-small-start), 489 var(--comment-line-color) var(--indent-small-end), 490 transparent var(--indent-small-end), 491 transparent 492 ), 493 linear-gradient( 494 var(--line-dir), 495 transparent, 496 transparent var(--indent-large-start), 497 var(--comment-line-color) var(--indent-large-start), 498 var(--comment-line-color) var(--indent-large-end), 499 transparent var(--indent-large-end), 500 transparent 501 ); 502 background-size: 100% 50%; 503 background-position: bottom, top; 504 } 505 background-repeat: no-repeat; 506 transition: opacity 0.3s ease-in-out; 507} 508.timeline.contextual > li:first-child { 509 background-position: 0 calc(16px + var(--avatar-size)); 510} 511.timeline.contextual > li:last-child { 512 background-size: 100% 20px; 513} 514.timeline.contextual > li:only-child { 515 background-image: none; 516} 517.timeline.contextual > li.descendant { 518 position: relative; 519} 520.timeline.contextual > li.descendant { 521 padding-bottom: 1em; 522} 523.timeline.contextual 524 > li.descendant:not(.thread) 525 > :is(.status-link, .status-focus) { 526 padding-inline-start: var(--line-start); 527} 528.timeline.contextual .replies[data-scroll-left]:not([data-scroll-left='0']) { 529 background-color: var(--bg-color); 530 box-shadow: 531 inset 0 -3px var(--comment-line-color), 532 inset 0 3px var(--comment-line-color); 533 overscroll-behavior-x: contain; 534 /* touch-action: pan-x; */ 535} 536.timeline.contextual .replies[data-comments-level='4'] { 537 overflow-x: auto; 538} 539.timeline.contextual .replies[data-comments-level='4']:has(.replies) { 540 overflow-x: auto; 541 mask-image: linear-gradient(var(--to-backward), transparent, black 32px); 542} 543.timeline.contextual 544 .replies[data-comments-level='4']:has(.replies) 545 > .replies-summary { 546 border-top: 2px dashed var(--divider-color); 547} 548.timeline.contextual 549 .replies[data-comments-level='4'] 550 .replies[data-comments-level-overflow='true'] 551 .status { 552 min-width: min(20em, 80vw); 553} 554.timeline.contextual 555 > li.descendant.thread 556 > :is(.status-link, .status-focus) 557 + .replies 558 .replies-summary { 559 margin-inline-start: calc( 560 var(--avatar-size) + 561 var(--avatar-margin-start) + 562 var(--avatar-margin-end) + 563 (var(--line-margin-end) * (var(--comments-level) - 1)) 564 ); 565} 566.timeline.contextual 567 > li.descendant.thread 568 > :is(.status-link, .status-focus) 569 + .replies 570 :is(.status-link, .status-focus) { 571 padding-inline-start: calc( 572 var(--avatar-size) + 573 var(--avatar-margin-start) + 574 var(--avatar-margin-end) + 575 (var(--line-margin-end) * (var(--comments-level) - 1)) 576 ); 577} 578.timeline.contextual 579 > li.descendant:not(.thread) 580 > :is(.status-link, .status-focus) 581 + .replies 582 .replies-summary { 583 margin-inline-start: calc( 584 var(--thread-start) + 585 var(--line-margin-end) * 586 var(--comments-level) 587 ); 588} 589.timeline.contextual 590 > li.descendant:not(.thread) 591 > :is(.status-link, .status-focus) 592 + .replies 593 :is(.status-link, .status-focus) { 594 padding-inline-start: calc( 595 var(--thread-start) + 596 var(--line-margin-end) * 597 var(--comments-level) 598 ); 599} 600.timeline.contextual > li.descendant:not(.thread):before { 601 content: ''; 602 position: absolute; 603 top: 10px; 604 inset-inline-start: var(--line-start); 605 width: var(--line-diameter); 606 height: var(--line-diameter); 607 border-radius: var(--line-radius); 608 border-style: solid; 609 border-width: var(--line-width); 610 border-color: transparent transparent var(--comment-line-color) transparent; 611 transform: rotate(var(--line-curve)); 612} 613.timeline.contextual > li .replies-link { 614 color: var(--text-insignificant-color); 615 margin-inline-start: 16px; 616 margin-top: -12px; 617 padding-bottom: 12px; 618 font-size: 90%; 619} 620.timeline.contextual > li.ancestor .replies-link { 621 margin-inline-start: calc( 622 var(--avatar-size) + 623 var(--avatar-margin-start) + 624 var(--avatar-margin-end) 625 ); 626} 627.timeline.contextual 628 > li.thread 629 > :is(.status-link, .status-focus) 630 .replies-link { 631 margin-inline-start: calc( 632 var(--avatar-size) + 633 var(--avatar-margin-start) + 634 var(--avatar-margin-end) 635 ); 636} 637.timeline.contextual > li .replies-link * { 638 vertical-align: middle; 639} 640.timeline.contextual > li .replies { 641 margin-top: -12px; 642} 643.timeline.contextual > li .replies :is(ul, li):not(.content *) { 644 margin: 0; 645 padding: 0; 646 list-style: none; 647} 648.timeline.contextual > li .replies > .replies-summary { 649 --summary-padding: 8px; 650 padding: var(--summary-padding); 651 background-color: var(--bg-faded-color); 652 display: inline-flex; 653 border-radius: 8px; 654 cursor: pointer; 655 text-transform: uppercase; 656 font-size: 12px; 657 color: var(--text-insignificant-color); 658 user-select: none; 659 box-shadow: 0 0 0 2px var(--bg-color); 660 position: relative; 661 list-style: none; 662 gap: 8px; 663 align-items: center; 664 margin-inline-end: calc(44px + 8px); 665 666 b { 667 font-weight: 500; 668 color: var(--text-color); 669 } 670 671 .avatars { 672 flex-shrink: 0; 673 transition: opacity 0.3s ease; 674 675 .avatar { 676 transition: transform 0.3s ease; 677 678 &:not(:first-child) { 679 transform: rotate(0deg); 680 margin: 0; 681 margin-inline-start: -4px; 682 } 683 } 684 } 685 686 .replies-counts { 687 /* flex-grow: 1; */ 688 689 > * { 690 display: inline-block; 691 } 692 } 693 694 .replies-summary-chevron { 695 transition: transform 0.3s ease; 696 } 697 698 .replies-parent-link { 699 position: absolute; 700 inset-inline-end: 4px; 701 height: 100%; 702 z-index: 2; 703 font-size: 16px; 704 font-weight: bold; 705 align-self: stretch; 706 text-decoration: none; 707 display: flex; 708 align-items: center; 709 padding: var(--summary-padding) calc(var(--summary-padding) * 2); 710 transform: translateX(100%); 711 &:dir(rtl) { 712 transform: translateX(-100%); 713 } 714 margin: calc(-1 * var(--summary-padding)) 0; 715 margin-inline-end: calc(-1 * var(--summary-padding)); 716 border-radius: 8px; 717 background-color: var(--link-bg-color); 718 719 &:is(:hover, :focus) { 720 color: var(--link-text-color); 721 box-shadow: inset 0 0 0 2px var(--link-faded-color); 722 } 723 724 &:active { 725 background-color: var(--link-faded-color); 726 } 727 } 728} 729.timeline.contextual > li .replies > .replies-summary::-webkit-details-marker { 730 display: none; 731} 732.timeline.contextual > li .replies > .replies-summary > * { 733 vertical-align: middle; 734} 735.timeline.contextual 736 > li 737 .replies 738 > .replies-summary 739 .timeline.contextual 740 > li 741 .replies 742 > .replies-summary:active, 743.timeline.contextual > li .replies[open] > .replies-summary { 744 color: var(--text-color); 745 background-color: var(--comment-line-color); 746 background-image: linear-gradient( 747 to top var(--forward), 748 var(--comment-line-color), 749 var(--bg-faded-color) 750 ); 751} 752@keyframes summary-fade { 753 0% { 754 opacity: 0; 755 transform: translateY(-8px); 756 } 757 100% { 758 opacity: 1; 759 transform: translateY(0); 760 } 761} 762.timeline.contextual > li .replies[open] > .replies-summary { 763 border-end-start-radius: 0; 764 765 .avatars { 766 opacity: 0.5; 767 768 .avatar { 769 transform: rotate(-15deg); 770 } 771 } 772 773 .replies-summary-chevron { 774 transform: rotate(180deg); 775 } 776 777 + * { 778 animation: summary-fade 0.3s ease-out both; 779 } 780} 781.timeline.contextual > li .replies .replies-summary[hidden] { 782 display: none; 783} 784.timeline.contextual > li .replies li:not(.content li) { 785 position: relative; 786} 787.timeline.contextual > li .replies li:not(.content li) { 788 --line-start: calc( 789 var(--thread-start) + 790 var(--line-margin-end) * 791 var(--comments-level) 792 ); 793 --line-end: calc(var(--line-start) + var(--line-width)); 794 background-image: linear-gradient( 795 var(--line-dir), 796 transparent, 797 transparent var(--line-start), 798 var(--comment-line-color) var(--line-start), 799 var(--comment-line-color) var(--line-end), 800 transparent var(--line-end), 801 transparent 802 ); 803 background-repeat: no-repeat; 804} 805/* .timeline.contextual > li .replies .replies li { 806 --line-start: calc(var(--thread-start) + (var(--line-margin-end) * 2)); 807} 808.timeline.contextual > li .replies .replies .replies li { 809 --line-start: calc(var(--thread-start) + (var(--line-margin-end) * 3)); 810} */ 811.timeline.contextual > li.thread .replies li:not(.content li) { 812 --line-start: calc( 813 var(--avatar-size) + 814 var(--avatar-margin-start) + 815 var(--avatar-margin-end) + 816 (var(--line-margin-end) * (var(--comments-level) - 1)) 817 ); 818} 819/* .timeline.contextual > li.thread .replies .replies li { 820 --line-start: calc( 821 var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + 822 var(--line-margin-end) 823 ); 824} 825.timeline.contextual > li.thread .replies .replies .replies li { 826 --line-start: calc( 827 var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + 828 (var(--line-margin-end) * 2) 829 ); 830} */ 831.timeline.contextual > li .replies li:not(.content li):last-child { 832 background-size: 100% 20px; 833} 834.timeline.contextual > li .replies li:not(.content li):before { 835 content: ''; 836 position: absolute; 837 top: 10px; 838 inset-inline-start: var(--line-start); 839 width: var(--line-diameter); 840 height: var(--line-diameter); 841 border-radius: var(--line-radius); 842 border-style: solid; 843 border-width: var(--line-width); 844 border-color: transparent transparent var(--comment-line-color) transparent; 845 transform: rotate(var(--line-curve)); 846} 847/* .timeline.contextual > li .replies .replies li:before { 848 --line-start: calc( 849 var(--thread-start) + var(--line-margin-end) + var(--line-margin-end) 850 ); 851} 852.timeline.contextual > li .replies .replies .replies li:before { 853 --line-start: calc( 854 var(--thread-start) + var(--line-margin-end) + (var(--line-margin-end) * 2) 855 ); 856} */ 857.timeline.contextual > li.thread .replies li:not(.content li):before { 858 --line-start: calc( 859 var(--avatar-size) + 860 var(--avatar-margin-start) + 861 var(--avatar-margin-end) + 862 (var(--line-margin-end) * (var(--comments-level) - 1)) 863 ); 864} 865/* .timeline.contextual > li.thread .replies .replies li:before { 866 --line-start: calc( 867 var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + 868 var(--line-margin-end) 869 ); 870} 871.timeline.contextual > li.thread .replies .replies .replies li:before { 872 --line-start: calc( 873 var(--avatar-size) + var(--avatar-margin-start) + var(--avatar-margin-end) + 874 (var(--line-margin-end) * 2) 875 ); 876} */ 877.timeline.contextual.loading > li:not(.hero) { 878 /* opacity: 0.5; */ 879 pointer-events: none; 880} 881 882.timeline.contextual > li .replies { 883 > ul > li:only-child { 884 > .replies { 885 > ul > li:only-child { 886 margin-inline-start: calc(-1 * var(--line-margin-end)); 887 background-position: 16px 0; 888 &:dir(rtl) { 889 background-position: -16px 0; 890 } 891 background-size: 100% calc(20px + 8px); 892 893 &:before { 894 display: none; 895 } 896 } 897 } 898 } 899} 900 901.timeline.contextual .time-gap { 902 padding-block: calc(24px + var(--time-gap-range, 0) * 4px) !important; 903 padding-inline-start: calc(var(--line-start) + 16px); 904 padding-inline-end: 16px; 905 color: var(--text-insignificant-color); 906 font-style: italic; 907 font-size: 0.9em; 908 position: relative; 909 910 &:before { 911 content: none !important; 912 } 913 &:after { 914 content: ''; 915 position: absolute; 916 inset-block: 0; 917 inset-inline-start: var(--line-start); 918 width: var(--line-width); 919 background-image: repeating-linear-gradient( 920 to bottom, 921 transparent, 922 transparent var(--line-width), 923 var(--bg-color) var(--line-width), 924 var(--bg-color) calc(var(--line-width) * 2) 925 ); 926 mask-image: linear-gradient(to bottom, transparent, black, transparent); 927 } 928} 929 930.timeline-deck.compact .status { 931 max-height: max(25vh, 160px); 932 overflow: hidden; 933 mask-image: linear-gradient( 934 rgba(0, 0, 0, 1), 935 rgba(0, 0, 0, 1) 80%, 936 transparent 95% 937 ); 938} 939.timeline-deck.compact .status .meta ~ * { 940 pointer-events: none; 941} 942 943.timeline-header { 944 padding: 0 16px; 945 opacity: 0.75; 946} 947 948.timeline-empty { 949 color: var(--text-insignificant-color); 950 padding: 0 16px; 951 margin-bottom: 3em; 952} 953 954.timeline:not(.flat) > li.timeline-item-container { 955 --avatar-size: 50px; 956 --line-start: 40px; 957 --line-width: 3px; 958 --line-end: calc(var(--line-start) + var(--line-width)); 959 background-image: linear-gradient( 960 var(--line-dir), 961 transparent, 962 transparent var(--line-start), 963 var(--comment-line-color) var(--line-start), 964 var(--comment-line-color) var(--line-end), 965 transparent var(--line-end), 966 transparent 967 ); 968 background-repeat: no-repeat; 969} 970.timeline:not(.flat) > li.timeline-item-container-start { 971 margin-bottom: 0; 972 border-end-start-radius: 0; 973 border-end-end-radius: 0; 974 border-bottom: 0; 975 background-position: 0 calc(16px + var(--avatar-size)); 976} 977.timeline:not(.flat) > li.timeline-item-container-middle { 978 margin-top: 0; 979 margin-bottom: 0; 980 border-radius: 0; 981 border-bottom: 0; 982 border-top: 0; 983} 984.timeline:not(.flat) > li.timeline-item-container-end { 985 margin-top: 0; 986 border-start-start-radius: 0; 987 border-start-end-radius: 0; 988 border-top: 0; 989 background-size: 100% 16px; 990 991 &:has(.status-pre-meta) { 992 /* 20px = icon of the pre-meta */ 993 background-size: 100% calc(16px + 20px); 994 } 995} 996.timeline:not(.flat) 997 > li:is(.timeline-item-container-middle, .timeline-item-container-end) 998 .status-reply-to:not(.visibility-direct):not(.status-card) { 999 background-image: none; 1000} 1001.timeline:not(.flat) 1002 > li.timeline-item-diff-author 1003 > :is(.status-link, .status-focus) 1004 > .status 1005 > a 1006 > .avatar { 1007 transform: scale(0.8); 1008 filter: drop-shadow(0 0 16px var(--bg-color)) 1009 drop-shadow(0 0 8px var(--bg-color)) drop-shadow(0 0 8px var(--bg-color)); 1010} 1011.timeline:not(.flat) { 1012 > li.timeline-item-container-type-thread.timeline-item-container-middle:not( 1013 .timeline-item-diff-author 1014 ) { 1015 > :is(.status-link, .status-focus) { 1016 > .status > .container { 1017 > .meta { 1018 display: none; 1019 } 1020 } 1021 } 1022 } 1023} 1024 1025.timeline .show-more { 1026 padding-inline-start: calc(var(--line-end) + var(--line-margin-end)) !important; 1027 text-align: start; 1028 background-color: transparent !important; 1029 backdrop-filter: none !important; 1030 position: relative; 1031 border-radius: 0; 1032 padding-block: 16px !important; 1033 1034 .avatars-bunch > .avatar:not(:first-child) { 1035 margin-inline-start: -4px; 1036 } 1037} 1038.timeline .show-more:hover { 1039 filter: none !important; 1040 color: var(--text-color) !important; 1041 background-color: var(--bg-faded-blur-color) !important; 1042} 1043.timeline .show-more:before { 1044 content: ''; 1045 position: absolute; 1046 top: 10px; 1047 inset-inline-start: var(--line-start); 1048 width: var(--line-diameter); 1049 height: var(--line-diameter); 1050 border-radius: var(--line-radius); 1051 border-style: solid; 1052 border-width: var(--line-width); 1053 border-color: transparent transparent var(--comment-line-color) transparent; 1054 transform: rotate(var(--line-curve)); 1055} 1056 1057.status-loading { 1058 text-align: center; 1059 color: var(--text-insignificant-color); 1060 max-width: var(--main-width); 1061} 1062.status-error { 1063 text-align: center; 1064 color: var(--text-insignificant-color); 1065 max-width: var(--main-width); 1066} 1067 1068.status-link { 1069 display: block; 1070 text-decoration-line: none; 1071 color: inherit; 1072 user-select: none; 1073 transition: background-color 0.1s ease-out; 1074 -webkit-tap-highlight-color: transparent; 1075 animation: appear 0.2s ease-out; 1076 -webkit-touch-callout: none; 1077} 1078@media (pointer: coarse) { 1079 .status-focus:not(.hero .status-focus) { 1080 /* Only the hero doesn't have context menu */ 1081 user-select: none; 1082 -webkit-tap-highlight-color: transparent; 1083 -webkit-touch-callout: none; 1084 } 1085} 1086@media not (pointer: coarse) { 1087 :is(.status-link, .status-focus):is(:focus, .is-active) { 1088 background-color: var(--link-bg-hover-color); 1089 outline-offset: -2px; 1090 } 1091} 1092@media (hover: hover) { 1093 .status-link:hover { 1094 background-color: var(--link-bg-hover-color); 1095 outline-offset: -2px; 1096 } 1097} 1098.status-link:active:not(:has(:is(.media, button):active)) { 1099 filter: brightness(0.95); 1100} 1101 1102.status-carousel { 1103 --carousel-faded-color: var(--bg-faded-color); 1104 background: linear-gradient( 1105 to bottom var(--forward), 1106 var(--carousel-faded-color), 1107 transparent 1108 ); 1109 position: relative; 1110 container-type: inline-size; 1111} 1112.status-carousel:after { 1113 content: ''; 1114 position: absolute; 1115 inset: 0; 1116 pointer-events: none; 1117 background-image: 1118 radial-gradient( 1119 ellipse 50% 32px at bottom center, 1120 var(--carousel-faded-color), 1121 transparent 1122 ), linear-gradient(to top, var(--bg-color) 8px, transparent 64px); 1123 background-repeat: no-repeat; 1124 background-position: bottom center; 1125} 1126.status-carousel header { 1127 padding: 8px 16px 0; 1128 display: flex; 1129 justify-content: space-between; 1130 align-items: center; 1131} 1132.status-carousel h3 { 1133 margin: 0; 1134 padding: 0; 1135 font-size: 14px; 1136 text-transform: uppercase; 1137 color: var(--carousel-color); 1138 text-shadow: 0 1px var(--bg-color); 1139} 1140.status-carousel > ul { 1141 --carousel-gap: 16px; 1142 display: flex; 1143 overflow-x: auto; 1144 overflow-y: clip; 1145 scroll-snap-type: x mandatory; 1146 scroll-behavior: smooth; 1147 margin: 0; 1148 padding: 8px 16px; 1149 gap: var(--carousel-gap); 1150 align-items: flex-start; 1151 counter-reset: index; 1152 min-height: 160px; 1153 max-height: 65vh; 1154 max-height: 65dvh; 1155} 1156.status-carousel > ul > li { 1157 scroll-snap-align: center; 1158 scroll-snap-stop: always; 1159 flex-shrink: 0; 1160 display: flex; 1161 width: 100%; 1162 max-width: min(320px, calc(100% - 16px)); 1163 list-style: none; 1164 margin: 0; 1165 padding: 0; 1166 /* max-height: 65vh; 1167 max-height: 65dvh; */ 1168 counter-increment: index; 1169 position: relative; 1170} 1171.status-carousel > ul > li:is(:empty, :has(> a:empty)) { 1172 display: none; 1173} 1174.status-carousel .status-carousel-beacon { 1175 margin-inline-end: calc(-1 * var(--carousel-gap)); 1176 pointer-events: none; 1177 opacity: 0; 1178 1179 ~ .status-carousel-beacon { 1180 margin-inline-start: calc(-1 * var(--carousel-gap)); 1181 } 1182} 1183/* 1184 Assume that browsers that do support inline-size property also support container queries. 1185 https://www.smashingmagazine.com/2021/05/css-container-queries-use-cases-migration-strategies/#progressive-enhancement-polyfills 1186*/ 1187@supports not (contain: inline-size) { 1188 @media (hover: hover) or (pointer: fine) or (min-width: 40em) { 1189 .status-carousel > ul { 1190 scroll-snap-type: none; 1191 } 1192 } 1193} 1194@container (min-width: 640px) { 1195 .status-carousel > ul { 1196 scroll-snap-type: none; 1197 } 1198} 1199.status-carousel .content-container .content:only-child { 1200 font-size: calc(100% + 25% * max(2 - var(--content-text-weight), 0)); 1201 1202 &:has(.status-card) { 1203 font-size: unset; 1204 } 1205} 1206/* .status-carousel 1207 .content-container[data-content-text-weight='1'] 1208 .media-container.media-eq1 { 1209 /* LOL, this is madness, reading a value from the style attribute * / 1210 height: auto; 1211 min-height: 160px; 1212 max-height: max(160px, 50vh); 1213} */ 1214.status-carousel.boosts-carousel { 1215 --carousel-color: var(--reblog-color); 1216 --carousel-faded-color: var(--reblog-faded-color); 1217} 1218.status-carousel.boosts-carousel .status-reblog { 1219 background-image: none; 1220} 1221.status-carousel.boosts-carousel > ul > li:before { 1222 content: counter(index); 1223 position: absolute; 1224 inset-inline-start: 0; 1225 font-size: 10px; 1226 color: var(--text-insignificant-color); 1227 padding: 6px; 1228} 1229 1230.status-carousel.boosts-carousel .timeline-item-carousel-group { 1231 flex-direction: column; 1232 gap: 8px; 1233 1234 &:before { 1235 content: ''; 1236 } 1237} 1238 1239.ui-state { 1240 padding: 16px; 1241 text-align: center; 1242 1243 .icon { 1244 vertical-align: middle; 1245 } 1246} 1247 1248.status-carousel-link { 1249 display: block; 1250 width: 100%; 1251 text-decoration-line: none; 1252 color: inherit; 1253 user-select: none; 1254 transition: background-color 0.2s ease-out; 1255 -webkit-tap-highlight-color: transparent; 1256 animation: appear 0.2s ease-out; 1257 border: 1px solid var(--outline-color); 1258 background-color: var(--bg-blur-color); 1259 border-radius: 16px; 1260 overflow: clip; 1261 box-shadow: 0 1px var(--bg-color); 1262 1263 &:has(.status-badge:not(:empty)) { 1264 border-start-end-radius: 8px; 1265 } 1266 1267 .status-carousel.boosts-carousel &:not(.timeline-item-carousel-group &) { 1268 border-start-start-radius: 8px; 1269 } 1270} 1271.status-carousel-link::focus { 1272 background-color: var(--link-bg-hover-color); 1273} 1274@media (hover: hover) { 1275 .status-carousel-link:hover { 1276 background-color: var(--link-bg-hover-color); 1277 } 1278} 1279.status-carousel-link:active:not(:has(:is(.media, button):active)) { 1280 filter: brightness(0.95); 1281} 1282 1283.deck-backdrop { 1284 position: fixed; 1285 top: 0; 1286 right: 0; 1287 height: 100%; 1288 width: 100%; 1289 z-index: 1000; 1290 display: flex; 1291 background-color: var(--backdrop-color); 1292 animation: appear 0.1s ease-out; 1293} 1294.deck-backdrop > a { 1295 flex-grow: 1; 1296 /* backdrop-filter: saturate(0.75); */ 1297} 1298@keyframes slide-in { 1299 0% { 1300 transform: translate3d(100%, 0, 0); 1301 } 1302 100% { 1303 transform: translate3d(0, 0, 0); 1304 } 1305} 1306@keyframes slide-in-rtl { 1307 0% { 1308 transform: translate3d(-100%, 0, 0); 1309 } 1310 100% { 1311 transform: translate3d(0, 0, 0); 1312 } 1313} 1314.deck-backdrop .deck { 1315 width: var(--main-width); 1316 max-width: 100vw; 1317 background-color: var(--bg-color); 1318 box-shadow: -1px 0 var(--bg-color); 1319 &:dir(rtl) { 1320 box-shadow: 1px 0 var(--bg-color); 1321 } 1322} 1323.deck-backdrop .deck.slide-in:not(.deck-view-full) { 1324 animation: slide-in 0.5s var(--timing-function); 1325 1326 &:dir(rtl) { 1327 animation-name: slide-in-rtl; 1328 } 1329} 1330.deck-backdrop .deck .status { 1331 max-width: var(--main-width); 1332} 1333.deck-backdrop .deck :is(.button-switch-view, .menu-switch-view) { 1334 display: none; 1335} 1336@media (min-width: 40em) { 1337 .deck-backdrop .deck .button-switch-view { 1338 display: inline-block; 1339 } 1340 .deck-backdrop .deck .menu-switch-view { 1341 display: flex; 1342 } 1343 .deck-backdrop .deck.deck-view-full { 1344 /* min-width: 100%; */ 1345 width: 100%; 1346 background-image: radial-gradient( 1347 circle, 1348 transparent 30em, 1349 var(--bg-faded-color) 1350 ); 1351 } 1352 .deck-backdrop .deck.deck-view-full > * { 1353 max-width: calc(var(--main-width) + 32px); 1354 margin: 0 auto; 1355 } 1356 .deck-backdrop .deck.deck-view-full .status { 1357 max-width: 100%; 1358 } 1359} 1360 1361.deck-close { 1362 color: var(--text-insignificant-color) !important; 1363} 1364.deck-close:is(:hover, :focus) { 1365 color: var(--text-color) !important; 1366} 1367 1368:is(button, .button).plain.has-badge:after { 1369 content: ''; 1370 display: inline-block; 1371 position: absolute; 1372 inset-inline-end: 10px; 1373 width: 4px; 1374 height: 4px; 1375 border-radius: 50%; 1376 background-color: var(--link-color); 1377 opacity: 0.5; 1378} 1379 1380@keyframes fade-from-top { 1381 0% { 1382 transform: translate(-50%, -200%); 1383 opacity: 0; 1384 } 1385 100% { 1386 transform: translate(-50%, 0); 1387 opacity: 1; 1388 } 1389} 1390.updates-button { 1391 position: absolute; 1392 z-index: 2; 1393 top: 3em; 1394 animation: fade-from-top 0.3s var(--timing-function); 1395 left: 50%; 1396 margin-top: 16px; 1397 transform: translate(-50%, 0); 1398 font-size: 90%; 1399 pointer-events: auto; 1400 transition: all 0.3s ease-in-out; 1401 1402 header[hidden] & { 1403 opacity: 0; 1404 transform: translate(-50%, -100%) scale(0.9); 1405 pointer-events: none; 1406 animation: none !important; 1407 } 1408} 1409.updates-button .icon { 1410 vertical-align: top; 1411} 1412@media (pointer: coarse) { 1413 .updates-button:after { 1414 content: ''; 1415 position: absolute; 1416 inset: -16px; 1417 } 1418} 1419 1420/* BOX */ 1421 1422.box { 1423 width: var(--main-width); 1424 max-width: 100vw; 1425 padding: 16px; 1426} 1427 1428/* CAROUSEL */ 1429/* use snap, center children, max width viewport */ 1430 1431.media-modal-container { 1432 position: relative; 1433 width: 70%; 1434 flex-grow: 1; 1435 background-color: var(--backdrop-solid-color); 1436 animation: appear 0.1s var(--timing-function) both; 1437 transition: width 0.3s var(--timing-function); 1438 1439 &:only-child { 1440 width: 100%; 1441 } 1442} 1443.media-modal-container.loading { 1444 display: flex; 1445 justify-content: center; 1446 align-items: center; 1447 background-image: radial-gradient( 1448 closest-side, 1449 var(--bg-blur-color), 1450 transparent 1451 ); 1452} 1453 1454.carousel { 1455 display: flex; 1456 overflow-x: auto; 1457 scroll-snap-type: x mandatory; 1458 /* scroll-behavior: smooth; */ 1459 scrollbar-width: none; 1460 overscroll-behavior: contain; 1461 touch-action: pan-x; 1462 user-select: none; 1463 width: 100%; 1464 gap: 16px; 1465 --accent-gradient: var(--accent-gradient-light); 1466 @media (prefers-color-scheme: dark) { 1467 --accent-gradient: var(--accent-gradient-dark); 1468 } 1469 background-image: linear-gradient(to var(--forward), var(--accent-gradient)); 1470} 1471.carousel::-webkit-scrollbar { 1472 display: none; 1473} 1474.carousel .carousel-item { 1475 scroll-snap-align: center; 1476 scroll-snap-stop: always; 1477 flex-shrink: 0; 1478 display: flex; 1479 justify-content: center; 1480 align-items: center; 1481 width: 100%; 1482 height: 100vh; 1483 height: 100dvh; 1484 background-color: var(--accent-light-color); 1485 @media (prefers-color-scheme: dark) { 1486 background-color: var(--accent-dark-color); 1487 } 1488 /* background-image: radial-gradient( 1489 closest-side, 1490 var(--accent-color) 10%, 1491 var(--accent-alpha-color) 40%, 1492 transparent 100% 1493 ); */ 1494} 1495.carousel .carousel-item :is(img, video) { 1496 width: auto; 1497 max-width: 100%; 1498 height: auto; 1499 max-height: 100vh; 1500 max-height: 100svh; 1501 vertical-align: middle; 1502} 1503.carousel .carousel-item video { 1504 min-height: 80px; 1505 max-height: 80vh; /* prevent other UI elements from obscuring video */ 1506} 1507.carousel .carousel-item .media { 1508 background-size: contain; 1509 background-repeat: no-repeat; 1510 background-position: center; 1511 width: 100%; 1512 height: 100%; 1513 overflow: hidden; 1514 display: flex; 1515 justify-content: center; 1516 align-items: center; 1517 padding: env(safe-area-inset-top, 0) env(safe-area-inset-right, 0) 1518 env(safe-area-inset-bottom, 0) env(safe-area-inset-left, 0); 1519 background-origin: content-box; 1520} 1521 1522.carousel-top-controls { 1523 top: 0; 1524 top: env(safe-area-inset-top, 0); 1525} 1526:is(.carousel-top-controls, .carousel-controls) { 1527 /* mix-blend-mode: luminosity; */ 1528 position: absolute; 1529 left: 0; 1530 left: env(safe-area-inset-left, 0); 1531 right: 0; 1532 right: env(safe-area-inset-right, 0); 1533 padding: 16px; 1534 display: flex; 1535 gap: 8px; 1536 justify-content: space-between; 1537 text-align: center; 1538 pointer-events: none; 1539} 1540:is(.carousel-top-controls, .carousel-controls)[hidden] { 1541 opacity: 0; 1542} 1543.carousel-controls { 1544 top: 45%; 1545} 1546 1547:is(.button, button).carousel-button, 1548button.carousel-dot { 1549 pointer-events: auto; 1550 font-weight: bold; 1551 color: var(--text-color); 1552 background-color: var(--bg-faded-blur-color); 1553 border: 1px solid var(--outline-color); 1554 box-shadow: 0 4px 32px var(--drop-shadow-color); 1555 transition: all 0.2s ease-out; 1556} 1557button.carousel-dot { 1558 background-color: transparent; 1559} 1560:is(.button, button).carousel-button { 1561 background-color: var(--bg-blur-color); 1562} 1563:is(.button, button).carousel-button:is(:hover, :focus):not(:active) { 1564 background-color: var(--bg-color); 1565} 1566.carousel-top-controls .szh-menu-container { 1567 pointer-events: auto; 1568} 1569:is(.button, button).carousel-button[hidden] { 1570 display: inline-block; 1571 opacity: 0; 1572 pointer-events: none; 1573} 1574.carousel-dots { 1575 border-radius: 999px; 1576 background-color: var(--bg-faded-blur-color); 1577 border: 1px solid var(--outline-color); 1578 box-shadow: 0 4px 32px var(--drop-shadow-color); 1579 /* backdrop-filter: blur(12px) invert(0.25); */ 1580 transition: background-color 0.2s ease-out; 1581 &:hover { 1582 background-color: var(--bg-color); 1583 } 1584} 1585button.carousel-dot { 1586 backdrop-filter: none !important; 1587 border: none; 1588 box-shadow: none; 1589} 1590/* button.carousel-dot[disabled] { 1591 pointer-events: none; 1592} */ 1593button.carousel-dot .icon { 1594 transition: all 0.2s; 1595 transform: scale(0.5); 1596} 1597button.carousel-dot:not(.active) .icon { 1598 opacity: 0.5; 1599} 1600button.carousel-dot:not(.active):is(:hover, :focus) .icon { 1601 opacity: 1; 1602} 1603button.carousel-dot:is(.active, [disabled].active) { 1604 opacity: 1; 1605} 1606button.carousel-dot:is(.active, [disabled].active) .icon { 1607 opacity: 1; 1608 transform: scale(1); 1609} 1610@media (hover: hover) { 1611 .carousel-top-controls { 1612 transform: translateY(-100%); 1613 transition: transform 0.2s ease-in-out; 1614 } 1615 .carousel-controls { 1616 transform: scale(0); 1617 /* transition: transform 0.2s ease-in-out; */ 1618 } 1619 .carousel-controls 1620 :is(.button, button).carousel-button:is(:hover, :focus):not(:active) { 1621 transform: scale(1.2); 1622 } 1623 .carousel-controls :is(.button, button).carousel-button:active { 1624 transition-duration: 0s; 1625 } 1626 1627 .carousel:hover + .carousel-top-controls, 1628 .carousel:hover + .carousel-top-controls + .carousel-controls, 1629 .carousel-top-controls:hover, 1630 .carousel-controls:hover, 1631 .carousel-top-controls:focus-within, 1632 .carousel-controls:focus-within { 1633 transform: translateY(0); 1634 } 1635} 1636 1637/* CAROUSEL + STATUS PAGE COMBO */ 1638 1639.media-post-link .button-label { 1640 display: none; 1641} 1642body:has(.status-deck) .media-post-link { 1643 display: none; 1644} 1645.media-modal-count-1 .button-label { 1646 display: inline; 1647} 1648 1649/* ✨ New */ 1650body:has(.media-modal-container + .status-deck) .media-post-link { 1651 display: inline-block; 1652} 1653.media-modal-container + .status-deck { 1654 /* display: none; */ 1655 position: absolute; 1656 inset-inline-end: 0; 1657 z-index: -1; 1658 pointer-events: none; 1659 user-select: none; 1660 animation: none; 1661} 1662 1663@media (min-width: calc(40em + 350px)) { 1664 .media-post-link .button-label { 1665 display: inline; 1666 } 1667 #modal-container > div, 1668 .status-deck { 1669 transition: all 0.3s ease-in-out; 1670 } 1671 /* Don't do this if there's a modal sheet (.sheet) */ 1672 :has(#modal-container .carousel):has(.status-deck):not( 1673 :has(.sheet, #compose-container) 1674 ) 1675 .status-deck { 1676 width: 350px; 1677 min-width: 0; 1678 } 1679 :has(#modal-container .carousel):has(.status-deck):not( 1680 :has(.sheet, #compose-container) 1681 ) 1682 #modal-container 1683 > div { 1684 inset-inline-start: 0; 1685 inset-inline-end: 350px; 1686 width: auto; 1687 } 1688 /* ✨ New */ 1689 /* .deck-backdrop > a { 1690 width: 100%; 1691 flex-grow: 0; 1692 } */ 1693 .deck-backdrop .media-modal-container + .status-deck:not(.deck-view-full) { 1694 /* display: block; */ 1695 width: 30%; 1696 /* min-width: 350px; */ 1697 position: static; 1698 z-index: 1; 1699 pointer-events: auto; 1700 user-select: auto; 1701 } 1702 .deck-backdrop .media-modal-container + .status-deck:not(.slide-in) { 1703 animation: appear 0.3s ease-in-out; 1704 } 1705 body:has(.media-modal-container + .status-deck) .media-post-link { 1706 display: none; 1707 } 1708} 1709 1710/* COMPOSE BUTTON */ 1711 1712#compose-button { 1713 position: fixed; 1714 bottom: 16px; 1715 bottom: max(16px, env(safe-area-inset-bottom)); 1716 inset-inline-end: 16px; 1717 inset-inline-end: max(16px, env(safe-area-inset-right)); 1718 padding: 16px; 1719 background-color: var(--button-bg-blur-color); 1720 /* backdrop-filter: blur(16px); */ 1721 z-index: 20; 1722 box-shadow: 1723 0 3px 8px -1px var(--drop-shadow-color), 1724 0 10px 36px -4px var(--button-bg-blur-color); 1725 transition: all 0.3s ease-in-out; 1726} 1727.deck-container:has(header[hidden]) ~ #compose-button:not(.loading), 1728#compose-button[hidden]:not(.loading) { 1729 transform: translateY(200%); 1730 pointer-events: none; 1731 user-select: none; 1732 opacity: 0; 1733} 1734#compose-button .icon { 1735 transition: transform 0.3s ease-in-out; 1736} 1737#compose-button[hidden] .icon { 1738 transform: rotate3d(0, 0, 1, -25deg); 1739} 1740#compose-button:is(:hover, :focus) { 1741 background-color: var(--button-bg-color); 1742 filter: none; 1743} 1744#compose-button:active { 1745 transform: scale(0.95); 1746 transition: none; 1747} 1748#compose-button .icon { 1749 filter: drop-shadow(0 1px 2px var(--button-bg-color)); 1750} 1751@media (max-width: calc(40em - 1px)) { 1752 #app[data-shortcuts-view-mode='tab-menu-bar'] #compose-button { 1753 bottom: calc(16px + 52px); 1754 bottom: calc(16px + env(safe-area-inset-bottom) + 52px); 1755 1756 body.exp-tab-bar-v2 & { 1757 --inset-inline-end: max(16px, var(--inset-new), var(--sai-inline-end)); 1758 inset-inline-end: var(--inset-inline-end); 1759 bottom: max(16px, var(--inset-new)); 1760 } 1761 } 1762} 1763#compose-button { 1764 &.min { 1765 outline: 2px solid var(--button-text-color); 1766 z-index: 1001; /* Higher than modal */ 1767 1768 &:after { 1769 content: ''; 1770 display: block; 1771 position: absolute; 1772 top: 0; 1773 inset-inline-end: 0; 1774 width: 14px; 1775 height: 14px; 1776 border-radius: 50%; 1777 background-color: var(--button-bg-color); 1778 border: 2px solid var(--button-text-color); 1779 box-shadow: 0 2px 8px var(--drop-shadow-color); 1780 opacity: 0; 1781 transition: opacity 0.2s ease-out 0.5s; 1782 opacity: 1; 1783 } 1784 } 1785 1786 &.loading { 1787 outline-color: var(--button-bg-blur-color); 1788 1789 &:before { 1790 position: absolute; 1791 inset: 0; 1792 content: ''; 1793 border-radius: 50%; 1794 animation: spin 5s linear infinite; 1795 border: 2px dashed var(--button-text-color); 1796 } 1797 } 1798 1799 &.error { 1800 &:after { 1801 background-color: var(--red-color); 1802 } 1803 } 1804} 1805 1806.menu-post-text { 1807 max-width: 40em; 1808 overflow: hidden; 1809 /* ellipsis 2 lines */ 1810 white-space: normal; 1811 display: -webkit-box; 1812 -webkit-box-orient: vertical; 1813 -webkit-line-clamp: 2; 1814 line-clamp: 2; 1815 text-overflow: ellipsis; 1816} 1817 1818/* SHEET */ 1819 1820.sheet { 1821 timeline-scope: --sheet-scroll; 1822 align-self: flex-end; 1823 display: flex; 1824 flex-direction: column; 1825 max-height: 90vh; 1826 max-height: 90dvh; 1827 /* overflow: hidden; */ 1828 background-color: var(--bg-color); 1829 width: 100%; 1830 max-width: calc(var(--main-width) - 50px - 16px); 1831 border-radius: 16px 16px 0 0; 1832 box-shadow: 0 -1px 32px var(--drop-shadow-color); 1833 animation: slide-up 0.3s var(--timing-function); 1834 /* border: 1px solid var(--outline-color); */ 1835 position: relative; 1836} 1837.sheet-max { 1838 max-width: none; 1839 height: 90vh; 1840 height: 90dvh; 1841} 1842@media (min-width: 40em) { 1843 .sheet { 1844 width: 90vw; 1845 width: 90dvw; 1846 } 1847} 1848.sheet .sheet-close { 1849 position: absolute; 1850 border-radius: 0; 1851 padding: 0; 1852 right: env(safe-area-inset-right); 1853 &:dir(rtl) { 1854 right: auto; 1855 left: env(safe-area-inset-left); 1856 } 1857 width: 44px; 1858 height: 44px; 1859 display: inline-flex; 1860 align-items: center; 1861 justify-content: center; 1862 z-index: 2; 1863 background-color: transparent; 1864 background-image: radial-gradient( 1865 circle, 1866 var(--close-button-bg-color) 0px 14px, 1867 transparent 14px 1868 ); 1869 color: var(--close-button-color); 1870} 1871.sheet .sheet-close.outer { 1872 margin-top: -44px; 1873 background-image: radial-gradient( 1874 circle, 1875 var(--bg-faded-color) 0px 13px, 1876 var(--outline-color) 13px 14px, 1877 transparent 14px 1878 ); 1879} 1880.sheet .sheet-close:is(:hover, :focus) { 1881 color: var(--close-button-hover-color); 1882} 1883.sheet .sheet-close:active { 1884 background-image: radial-gradient( 1885 circle, 1886 var(--close-button-bg-active-color) 0px 14px, 1887 transparent 14px 1888 ); 1889} 1890.sheet header { 1891 padding: 16px 16px 8px; 1892 padding-left: max(16px, env(safe-area-inset-left)); 1893 padding-right: max(16px, env(safe-area-inset-right)); 1894 user-select: none; 1895} 1896@keyframes header-border { 1897 0% { 1898 box-shadow: none; 1899 } 1900 100% { 1901 box-shadow: 1902 0 0 0 1px var(--outline-color), 1903 0 8px 16px -8px var(--drop-shadow-color); 1904 } 1905} 1906@supports ((animation-timeline: scroll()) and (animation-range: 0% 100%)) { 1907 .sheet header { 1908 animation: header-border 1s linear both; 1909 animation-timeline: --sheet-scroll; 1910 animation-range: 0 8px; 1911 position: relative; 1912 z-index: 1; 1913 } 1914 .sheet header + main { 1915 mask-image: none !important; 1916 } 1917} 1918.sheet .sheet-close:not(.outer) + header { 1919 padding-right: max(44px, env(safe-area-inset-right)); 1920 1921 &:dir(rtl) { 1922 padding-right: max(16px, env(safe-area-inset-right)); 1923 padding-left: max(44px, env(safe-area-inset-left)); 1924 } 1925} 1926.sheet header :is(h1, h2, h3) { 1927 margin: 0; 1928} 1929.sheet header.header-grid { 1930 display: grid; 1931 grid-template-columns: 1fr auto; 1932 grid-gap: 8px; 1933 align-items: center; 1934} 1935.sheet main { 1936 scroll-timeline: --sheet-scroll; 1937 overflow: auto; 1938 overflow-x: hidden; 1939 overscroll-behavior: contain; 1940 padding: 16px 16px; 1941 padding-left: max(16px, env(safe-area-inset-left)); 1942 padding-right: max(16px, env(safe-area-inset-right)); 1943 padding-bottom: max(16px, env(safe-area-inset-bottom)); 1944} 1945.sheet header + main { 1946 padding-top: 0; 1947 mask-image: linear-gradient(to bottom, transparent 0%, black 10px); 1948} 1949 1950/* ICON */ 1951 1952.icon { 1953 flex-shrink: 0; 1954 display: inline-block; 1955 overflow: hidden; 1956 line-height: 0; 1957 1958 svg { 1959 contain: none; 1960 width: 100%; 1961 height: 100%; 1962 } 1963 1964 :dir(rtl) &.rtl-flip { 1965 transform: scaleX(-1); 1966 } 1967} 1968 1969/* TAG */ 1970 1971.tag { 1972 font-size: smaller; 1973 color: var(--bg-faded-color); 1974 background-color: var(--text-insignificant-color); 1975 padding: 2px 4px; 1976 border-radius: 4px; 1977 display: inline-block; 1978 margin: 4px; 1979 align-self: center; 1980 text-align: center; 1981 1982 &.clickable { 1983 cursor: pointer; 1984 } 1985} 1986.tag .icon { 1987 vertical-align: middle; 1988} 1989.tag.collapsed { 1990 margin: 0; 1991} 1992.tag.insignificant { 1993 border: 1px solid var(--outline-color); 1994 color: var(--text-insignificant-color); 1995 background-color: var(--bg-faded-color); 1996} 1997.tag.danger { 1998 background-color: var(--red-color); 1999} 2000.tag.minimal { 2001 margin: 0; 2002 color: var(--text-insignificant-color); 2003 background-color: var(--bg-faded-color); 2004 text-shadow: 0 1px var(--bg-color); 2005 line-height: 1; 2006} 2007 2008/* MENU POPUP */ 2009 2010.szh-menu-container { 2011 user-select: none; 2012 -webkit-touch-callout: none; 2013 -webkit-user-drag: none; 2014} 2015body > .szh-menu-container { 2016 position: fixed !important; 2017 z-index: 10; 2018} 2019.szh-menu-container:not(:empty) { 2020 inset: 0; 2021 inset: env(safe-area-inset-top) env(safe-area-inset-right) 2022 env(safe-area-inset-bottom) env(safe-area-inset-left); 2023} 2024.szh-menu { 2025 padding: 4px 0; 2026 margin: 0; 2027 font-size: var(--text-size); 2028 background-color: var(--bg-color); 2029 border: 1px solid var(--outline-stronger-color); 2030 border-radius: 8px; 2031 box-shadow: 2032 0 3px 8px var(--drop-shadow-color), 2033 0 6px 32px -6px var(--drop-shadow-color); 2034 text-align: start; 2035 /* animation: appear-smooth 0.15s ease-in-out; */ 2036 min-width: 16em; 2037 max-width: 90vw; 2038 /* overflow: hidden; */ 2039} 2040.szh-menu[aria-label='Submenu'].menu-blur { 2041 background-color: var(--bg-blur-color); 2042 backdrop-filter: blur(4px); 2043 box-shadow: 0 3px 24px -3px var(--drop-shadow-color); 2044} 2045.szh-menu__header { 2046 margin: -4px 0 8px; 2047 padding: 8px 16px; 2048 color: var(--text-insignificant-color); 2049 font-size: 90%; 2050 background-color: var(--bg-faded-color); 2051 /* background-image: linear-gradient(to top, var(--bg-faded-color), transparent); */ 2052 text-shadow: 0 1px 0 var(--bg-color); 2053 line-height: 1.2; 2054 /* border-bottom: 1px solid var(--outline-color); */ 2055 border-radius: 8px 8px 0 0; 2056} 2057.szh-menu__header.plain { 2058 margin-bottom: 0; 2059 background-color: transparent; 2060} 2061.szh-menu__header * { 2062 vertical-align: middle; 2063} 2064.szh-menu.menu-emphasized { 2065 border-color: var(--outline-hover-color); 2066 box-shadow: 2067 0 3px 16px -3px var(--drop-shadow-color), 2068 0 3px 32px var(--drop-shadow-color), 2069 0 3px 48px var(--drop-shadow-color); 2070 background-color: var(--bg-color); 2071 animation-duration: 0.3s; 2072 animation-timing-function: ease-in-out; 2073 width: auto; 2074 min-width: min(12em, 90vw); 2075} 2076.szh-menu .footer { 2077 margin: 8px 0 -4px; 2078 padding: 8px 16px; 2079 color: var(--text-insignificant-color); 2080 font-size: 90%; 2081 background-color: var(--bg-faded-color); 2082 text-shadow: 0 1px 0 var(--bg-color); 2083 line-height: 1.2; 2084 display: flex; 2085 gap: 8px; 2086 align-items: center; 2087 border-radius: 0 0 8px 8px; 2088} 2089.szh-menu .szh-menu__item { 2090 display: flex; 2091 gap: 8px; 2092 align-items: center; 2093 line-height: 1.3; 2094 padding: 8px 16px !important; 2095 /* transition: all 0.1s ease-in-out; */ 2096 text-decoration: none; 2097 white-space: nowrap; 2098 overflow: hidden; 2099 text-overflow: ellipsis; 2100 2101 --menu-item-bg-inset: 0 4px; 2102 --menu-item-bg-color: var(--button-bg-color); 2103} 2104.szh-menu .szh-menu__item--focusable { 2105 background-color: transparent; 2106} 2107.szh-menu .szh-menu__item span { 2108 white-space: nowrap; 2109 overflow: hidden; 2110 text-overflow: ellipsis; 2111} 2112/* .szh-menu .szh-menu__item * { 2113 vertical-align: middle; 2114} */ 2115.szh-menu .szh-menu__item a { 2116 flex: 1; 2117 overflow: hidden; 2118 text-overflow: ellipsis; 2119 display: flex; 2120 gap: 8px; 2121 color: inherit; 2122 text-decoration: none; 2123 padding: 8px 16px !important; 2124 margin: -8px -16px !important; 2125 align-items: center; 2126 user-select: none; 2127 -webkit-touch-callout: none; 2128} 2129.szh-menu .szh-menu__item a.is-active { 2130 font-weight: bold; 2131} 2132.szh-menu .szh-menu__item .icon { 2133 opacity: 0.5; 2134} 2135.szh-menu 2136 .szh-menu__item:not(.szh-menu__item--disabled, .szh-menu__item--hover) { 2137 color: var(--text-color); 2138} 2139.szh-menu .szh-menu__item:not(.menu-field) { 2140 position: relative; 2141 & > * { 2142 /* z-index: 1; */ 2143 } 2144 2145 &:before { 2146 content: ''; 2147 background-color: var(--menu-item-bg-color); 2148 position: absolute; 2149 inset: var(--menu-item-bg-inset); 2150 border-radius: 4px; 2151 z-index: -1; 2152 opacity: 0; 2153 } 2154} 2155.szh-menu .szh-menu__item--hover:not(.menu-field) { 2156 color: var(--button-text-color); 2157 /* background-color: var(--button-bg-color); */ 2158 background-color: transparent; 2159 2160 &:before { 2161 opacity: 1; 2162 } 2163} 2164.szh-menu__divider { 2165 background-color: var(--divider-color); 2166 margin-block: 4px; 2167 2168 > &:first-child, 2169 li[role='none']:not(.szh-menu__header):first-child + & { 2170 display: none; 2171 } 2172} 2173.szh-menu .szh-menu__item .menu-grow { 2174 flex-grow: 1; 2175 text-overflow: ellipsis; 2176 overflow: hidden; 2177} 2178.szh-menu .menu-double-lines { 2179 white-space: normal !important; 2180 display: -webkit-box; 2181 -webkit-line-clamp: 2; 2182 -webkit-box-orient: vertical; 2183 overflow: hidden !important; 2184} 2185.szh-menu .menu-double-lines span { 2186 white-space: normal; 2187 line-height: inherit; 2188 font-size: inherit; 2189} 2190.szh-menu .menu-horizontal { 2191 display: grid; 2192 /* two columns only */ 2193 grid-template-columns: repeat(2, 1fr); 2194} 2195.szh-menu .menu-horizontal:has(> .szh-menu__item:only-child), 2196.szh-menu .menu-horizontal:has(> .szh-menu__submenu:only-child) { 2197 grid-template-columns: 1fr; 2198} 2199.szh-menu .menu-horizontal > .szh-menu__item:not(:only-child):first-child, 2200.szh-menu .menu-horizontal > *:not(:only-child):first-child .szh-menu__item { 2201 padding-inline-end: 4px !important; 2202} 2203.szh-menu 2204 .menu-horizontal 2205 > .szh-menu__item:not(:only-child):not(:first-child):not(:last-child), 2206.szh-menu 2207 .menu-horizontal 2208 > *:not(:only-child):not(:first-child):not(:last-child) 2209 .szh-menu__item { 2210 padding-inline-start: 8px !important; 2211 padding-inline-end: 4px !important; 2212} 2213.szh-menu .menu-horizontal > .szh-menu__item:not(:only-child):last-child, 2214.szh-menu .menu-horizontal > *:not(:only-child):last-child .szh-menu__item { 2215 padding-inline-start: 8px !important; 2216} 2217.szh-menu .szh-menu__item .menu-shortcut { 2218 opacity: 0.5; 2219 font-weight: normal; 2220} 2221.szh-menu .szh-menu__item form { 2222 display: flex; 2223 flex: 1; 2224 gap: 8px; 2225 align-items: center; 2226} 2227.szh-menu .szh-menu__item form > input[type='text'] { 2228 flex-grow: 1; 2229 width: 100%; 2230} 2231.szh-menu .szh-menu__item--hover .danger-icon { 2232 color: var(--red-color); 2233 opacity: 1; 2234} 2235.szh-menu 2236 .szh-menu__item:not(.szh-menu__item--disabled):not( 2237 .szh-menu__item--hover 2238 ).danger { 2239 color: var(--red-text-color); 2240} 2241.szh-menu 2242 .szh-menu__item.danger:not(.szh-menu__item--disabled).szh-menu__item--hover { 2243 /* background-color: var(--red-text-color); */ 2244 --menu-item-bg-color: var(--red-text-color); 2245 2246 @media (prefers-color-scheme: dark) { 2247 /* background-color: var(--red-color); */ 2248 --menu-item-bg-color: var(--red-color); 2249 } 2250} 2251.szh-menu 2252 .szh-menu__item:not(.szh-menu__item--disabled):not( 2253 .szh-menu__item--hover 2254 ).danger 2255 .icon { 2256 opacity: 1; 2257} 2258 2259.szh-menu { 2260 .menu-control-group-horizontal { 2261 display: grid; 2262 /* auto columns */ 2263 grid-template-columns: repeat(auto-fit, minmax(44px, 1fr)); 2264 2265 .szh-menu__item { 2266 display: flex; 2267 flex-direction: column; 2268 padding: 8px !important; 2269 gap: 2px; 2270 2271 .icon { 2272 opacity: 1; 2273 2274 + span { 2275 font-size: 80%; 2276 /* line-height: 1.2; */ 2277 width: 100%; 2278 text-align: center; 2279 opacity: 0.5; 2280 text-overflow: clip; 2281 mask-image: linear-gradient( 2282 var(--to-backward), 2283 transparent, 2284 black 16px 2285 ); 2286 } 2287 } 2288 2289 &:before { 2290 content: ''; 2291 } 2292 } 2293 2294 .szh-menu__item--hover { 2295 background-color: var(--menu-item-bg-color); 2296 } 2297 } 2298 2299 .menu-control-group-horizontal:first-child, 2300 li[role='none'] + .menu-control-group-horizontal { 2301 margin-top: -4px; 2302 margin-bottom: -4px; 2303 2304 .szh-menu__item { 2305 padding-block: 12px !important; 2306 } 2307 2308 > [class^='szh-menu']:first-child { 2309 border-start-start-radius: 8px; 2310 } 2311 > [class^='szh-menu']:last-child { 2312 border-start-end-radius: 8px; 2313 } 2314 } 2315} 2316 2317.szh-menu 2318 .szh-menu__item--type-checkbox:not(.szh-menu__item--disabled):not( 2319 .szh-menu__item--hover 2320 ) { 2321 .icon { 2322 opacity: 0.15; 2323 } 2324 2325 &.szh-menu__item--checked { 2326 color: var(--link-color); 2327 2328 .icon { 2329 opacity: 1; 2330 color: inherit; 2331 } 2332 } 2333} 2334 2335.szh-menu .menu-wrap { 2336 min-width: 16em; 2337 width: min-content; 2338 display: flex; 2339 flex-wrap: wrap; 2340} 2341.szh-menu .menu-wrap > * { 2342 flex-grow: 1; 2343 flex-basis: 50%; 2344} 2345 2346/* GLASS MENU */ 2347 2348.glass-menu { 2349 background-color: var(--bg-blur-color); 2350 backdrop-filter: blur(8px) saturate(3); 2351 border: var(--hairline-width) solid var(--bg-color); 2352 text-shadow: 2353 0 var(--hairline-width) var(--bg-color), 2354 0 0 8px var(--bg-color); 2355} 2356.glass-menu .szh-menu__item--hover { 2357 /* background-color: var(--button-bg-blur-color); */ 2358 text-shadow: none; 2359} 2360 2361/* CHAR COUNTER */ 2362 2363.char-counter { 2364 --dimension: 24px; 2365 min-width: var(--dimension); 2366 min-height: var(--dimension); 2367 position: relative; 2368 display: inline-block; 2369 2370 &[hidden] { 2371 visibility: hidden; 2372 } 2373 2374 * { 2375 pointer-events: none; 2376 } 2377 2378 meter { 2379 appearance: none; 2380 position: relative; 2381 --border-width: 2px; 2382 --middle-circle-radius: calc(var(--dimension) / 2 - var(--border-width)); 2383 width: var(--dimension); 2384 height: var(--dimension); 2385 border-radius: 50%; 2386 --fill: calc(var(--percentage) * 1%); 2387 --color: var(--link-color); 2388 --middle-circle: radial-gradient( 2389 circle at 50% 50%, 2390 var(--bg-color) var(--middle-circle-radius), 2391 transparent var(--middle-circle-radius) 2392 ); 2393 background-image: 2394 var(--middle-circle), 2395 conic-gradient(var(--color) var(--fill), var(--outline-color) 0); 2396 transform: scale(0.7); 2397 &:dir(rtl) { 2398 transform: scale(-0.7, 0.7); 2399 } 2400 transition: transform 0.2s ease-in-out; 2401 2402 &::-webkit-meter-inner-element, 2403 &::-webkit-meter-bar, 2404 &::-webkit-meter-optimum-value, 2405 &::-webkit-meter-suboptimum-value, 2406 &::-webkit-meter-even-less-good-value { 2407 display: none; 2408 } 2409 2410 &::-moz-meter-bar { 2411 background: transparent; 2412 } 2413 2414 &.warning { 2415 --color: var(--orange-color); 2416 transform: scale(1); 2417 } 2418 &.danger { 2419 --color: var(--red-color); 2420 transform: scale(1); 2421 } 2422 &.explode { 2423 background-image: none; 2424 transform: scale(1); 2425 } 2426 &:is(.warning, .danger, .explode) + .counter { 2427 opacity: 1; 2428 color: var(--text-insignificant-color); 2429 } 2430 &:is(.danger, .explode) + .counter { 2431 opacity: 1; 2432 color: var(--red-color); 2433 } 2434 } 2435 2436 .counter { 2437 line-height: 1; 2438 opacity: 0; 2439 position: absolute; 2440 top: 50%; 2441 left: 50%; 2442 transform: translate(-50%, -50%); 2443 font-size: 12px; 2444 } 2445} 2446 2447/* SHINY PILL */ 2448 2449:is(.shiny-pill, :root .toastify.shiny-pill) { 2450 pointer-events: auto; 2451 color: var(--link-text-color); 2452 font-weight: 500; 2453 text-shadow: 0 1px var(--bg-color); 2454 background-color: var(--bg-color); 2455 border: 2px solid var(--link-faded-color); 2456 box-shadow: 2457 0 3px 16px var(--drop-shadow-color), 2458 0 6px 16px -3px var(--drop-shadow-color); 2459} 2460:is(.shiny-pill, :root .toastify.shiny-pill):hover:not(:active) { 2461 color: var(--text-color); 2462 border-color: var(--link-color); 2463 filter: none !important; 2464 box-shadow: 2465 0 3px 16px var(--drop-shadow-color), 2466 0 6px 16px -3px var(--drop-shadow-color), 2467 0 6px 16px var(--drop-shadow-color); 2468} 2469 2470/* TOAST */ 2471 2472:root .toastify { 2473 user-select: none; 2474 padding: 8px 16px; 2475 border-radius: 44px; 2476 pointer-events: none; 2477 color: var(--button-text-color); 2478 text-shadow: 0 calc(var(--hairline-width) * -1) var(--drop-shadow-color); 2479 background-color: var(--button-bg-color); 2480 background-image: none; 2481 box-shadow: 2482 0 3px 8px -1px var(--drop-shadow-color), 2483 0 10px 36px -4px var(--button-bg-blur-color); 2484 text-align: center; 2485 width: fit-content; 2486 max-width: calc(100vw - 32px); 2487} 2488.toastify-bottom { 2489 margin-bottom: env(safe-area-inset-bottom); 2490} 2491 2492/* TOAST - ALERT */ 2493 2494:root .toastify.alert { 2495 z-index: 1001; 2496 box-shadow: 0 8px 32px var(--text-insignificant-color); 2497 background-color: var(--bg-color); 2498 color: var(--text-color); 2499 cursor: pointer; 2500 pointer-events: auto; 2501 padding: 16px 32px; 2502 font-size: max(calc(16px * 1.1), var(--text-size)); 2503 text-align: center; 2504 line-height: 1.25; 2505} 2506:root .toastify.alert:is(:hover, :active) { 2507 background-color: var(--bg-faded-color); 2508} 2509 2510/* AVATARS STACK */ 2511 2512.avatars-stack { 2513 display: flex; 2514 flex-wrap: wrap; 2515 gap: 4px; 2516 align-items: center; 2517} 2518/* I'm just feeling bored, so having fun here */ 2519@media (hover: hover) { 2520 .avatars-stack > * img { 2521 transition: transform 0.3s ease-in-out; 2522 } 2523 .avatars-stack:hover > *:nth-of-type(odd) img { 2524 transform: rotate(15deg); 2525 } 2526 .avatars-stack:hover > *:nth-of-type(even) img { 2527 transform: rotate(-15deg); 2528 } 2529} 2530 2531/* 404 */ 2532 2533#not-found-page { 2534 display: flex; 2535 align-items: center; 2536 justify-content: center; 2537 text-align: center; 2538 overflow: hidden; 2539 cursor: default; 2540 color: var(--text-insignificant-color); 2541 background-image: radial-gradient( 2542 circle at 50% 50%, 2543 var(--bg-color) 25%, 2544 var(--bg-faded-color) 2545 ); 2546 text-shadow: 0 1px var(--bg-color); 2547} 2548 2549/* ACCOUNT STATUSES */ 2550 2551@keyframes peekaboo-header { 2552 from { 2553 opacity: 0; 2554 transform: translateY(10%); 2555 } 2556 to { 2557 opacity: 1; 2558 transform: translateY(0); 2559 } 2560} 2561 2562@supports ((animation-timeline: scroll()) and (animation-range: 0% 100%)) { 2563 .header-account { 2564 animation: peekaboo-header 1s linear both; 2565 animation-timeline: scroll(); 2566 animation-range: 0 150px; 2567 } 2568} 2569 2570/* LINK LISTS? */ 2571 2572ul.link-list { 2573 list-style: none; 2574 padding: 16px; 2575 margin: 0; 2576 display: flex; 2577 flex-direction: column; 2578 gap: 1px; 2579} 2580ul.link-list li { 2581 padding: 0; 2582 margin: 0; 2583} 2584ul.link-list li a { 2585 --radius: 8px; 2586 display: block; 2587 background-color: var(--bg-faded-color); 2588 line-height: 1.25; 2589 padding: 12px; 2590 text-decoration: none; 2591 line-height: 1.4; 2592 font-weight: 500; 2593 display: flex; 2594 align-items: center; 2595 gap: 8px; 2596 2597 .count { 2598 font-size: 80%; 2599 display: inline-block; 2600 color: var(--text-insignificant-color); 2601 min-width: 16px; 2602 min-height: 16px; 2603 padding: 4px; 2604 background-color: var(--bg-color); 2605 border-radius: 4px; 2606 2607 @media (min-width: 40em) { 2608 background-color: var(--bg-faded-color); 2609 } 2610 } 2611} 2612ul.link-list li:first-child a { 2613 border-start-start-radius: var(--radius); 2614 border-start-end-radius: var(--radius); 2615} 2616ul.link-list li:last-child a { 2617 border-end-start-radius: var(--radius); 2618 border-end-end-radius: var(--radius); 2619} 2620ul.link-list li a:is(:hover, :focus) { 2621 color: var(--text-color); 2622} 2623ul.link-list li a:active { 2624 filter: brightness(0.9); 2625} 2626ul.link-list li a * { 2627 vertical-align: middle; 2628} 2629ul.link-list li a .icon { 2630 flex-shrink: 0; 2631} 2632 2633@media (min-width: 40em) { 2634 ul.link-list li a { 2635 background-color: var(--bg-color); 2636 } 2637} 2638 2639/* NAV MENU BUTTON */ 2640 2641.nav-menu-button.with-avatar { 2642 position: relative; 2643} 2644.nav-menu-button:is(:hover, :focus):not(:active) { 2645 filter: none !important; 2646} 2647.nav-menu-button .avatar { 2648 box-shadow: 2649 0 0 0 2px var(--bg-color), 2650 0 0 0 4px var(--link-light-color) !important; 2651} 2652.nav-menu-button:is(:hover, :focus, .active) .avatar { 2653 box-shadow: 2654 0 0 0 2px var(--bg-color), 2655 0 0 0 4px var(--link-color) !important; 2656} 2657.nav-menu-button.with-avatar .icon { 2658 position: absolute; 2659 inset-block-end: 4px; 2660 inset-inline-end: 8px; 2661 background-color: var(--bg-color); 2662 border-radius: 2px; 2663} 2664.nav-menu-button.with-avatar:hover:not(:active, .active) .icon { 2665 transform: translateY(-1px); 2666} 2667 2668/* COLUMNS */ 2669 2670#columns { 2671 --column-size: 360px; 2672 display: flex; 2673 width: 100vw; 2674 overflow-y: hidden; 2675 overflow-x: auto; 2676 scroll-snap-type: x mandatory; 2677 scroll-behavior: smooth; 2678 /* scrollbar-width: none; */ 2679 overscroll-behavior: contain; 2680 overscroll-behavior-x: contain; 2681 /* This `transform` fixes horizontal scrolling for pointer devices on iPad */ 2682 transform: translateZ(0); 2683 2684 /* 360px * 2 */ 2685 @media (min-width: 720px) { 2686 scroll-snap-type: none; 2687 } 2688} 2689/* #columns::-webkit-scrollbar { 2690 display: none; 2691} */ 2692#columns > * { 2693 overscroll-behavior: auto; 2694 scroll-snap-align: start; 2695 scroll-snap-stop: always; 2696 overscroll-behavior: auto; 2697 flex-basis: min(100vw, var(--column-size)); 2698 flex-shrink: 0; 2699 box-shadow: 2700 -1px 0 var(--bg-color), 2701 -2px 0 var(--drop-shadow-color), 2702 -3px 0 var(--bg-color); 2703 &:dir(rtl) { 2704 box-shadow: 2705 1px 0 var(--bg-color), 2706 2px 0 var(--drop-shadow-color), 2707 3px 0 var(--bg-color); 2708 } 2709} 2710#columns:has(> :nth-child(3)) > *:nth-child(even), 2711#columns:has(> :nth-child(3)) 2712 > *:nth-child(even) 2713 .timeline-deck 2714 > header 2715 .header-grid { 2716 background-color: var(--bg-blur-color); 2717} 2718#columns > .deck-container > .timeline-deck { 2719 content-visibility: auto; 2720} 2721#columns > .deck-container { 2722 &:first-child:not(:only-child) > .deck { 2723 margin-inline-start: auto; 2724 margin-inline-end: 0; 2725 } 2726 2727 &:last-child:not(:only-child) > .deck { 2728 margin-inline-end: auto; 2729 margin-inline-start: 0; 2730 } 2731} 2732#columns .header-grid input { 2733 pointer-events: none; 2734} 2735#columns { 2736 /* Any buttons except nav menu button on first header-side, on 1st column */ 2737 .deck-container:first-of-type .header-grid 2738 .header-side:first-of-type 2739 > *:not(.nav-menu-button), 2740 /* Any buttons on last header-side, on 1st column */ 2741 .deck-container:first-of-type .header-grid 2742 .header-side:last-of-type 2743 > *, 2744 /* Any buttons on any header-side, on columns after 1st */ 2745 .deck-container:not(:first-of-type) .header-grid 2746 .header-side 2747 > * { 2748 display: none; 2749 } 2750} 2751@media (min-width: 40em) { 2752 #columns { 2753 /* gap: 16px; */ 2754 /* padding: 0 16px; */ 2755 /* background-color: var(--bg-faded-color); */ 2756 height: 100vh; 2757 height: 100dvh; 2758 justify-content: stretch; 2759 align-items: stretch; 2760 } 2761 #columns > * { 2762 padding: 0 16px; 2763 2764 &:not(.deck-container) { 2765 display: none; 2766 } 2767 2768 &:is(#notifications-page) { 2769 padding-inline: 0; 2770 2771 .timeline-deck > header { 2772 margin-inline: 16px; 2773 } 2774 } 2775 2776 border-inline: var(--hairline-width) solid var(--bg-faded-color); 2777 /* border-radius: 16px; */ 2778 /* box-shadow: -4px 0 16px -8px var(--drop-shadow-color); */ 2779 height: unset; 2780 /* background-color: var(--bg-faded-blur-color); */ 2781 /* backdrop-filter: blur(16px) saturate(3); */ 2782 /* background-image: linear-gradient( 2783 160deg, 2784 transparent 20%, 2785 var(--bg-color), 2786 transparent 75% 2787 ); */ 2788 /* position: sticky; 2789 left: 0; */ 2790 /* transition: all 0.3s ease-out; */ 2791 } 2792 /* #columns > *:nth-child(2) { 2793 left: 5%; 2794 } 2795 #columns > *:nth-child(3) { 2796 left: 10%; 2797 } 2798 #columns > *:nth-child(4) { 2799 left: 15%; 2800 } 2801 #columns > *:nth-child(5) { 2802 left: 20%; 2803 } 2804 #columns > *:nth-child(6) { 2805 left: 25%; 2806 } 2807 #columns > *:nth-child(7) { 2808 left: 30%; 2809 } 2810 #columns > *:nth-child(8) { 2811 left: 35%; 2812 } 2813 #columns > *:nth-child(9) { 2814 left: 40%; 2815 } 2816 #columns > *:nth-child(10) { 2817 left: 45%; 2818 } 2819 #columns > *:focus { 2820 z-index: 1; 2821 box-shadow: 0 0 32px var(--drop-shadow-color), 2822 0 0 32px var(--drop-shadow-color); 2823 } */ 2824 /* #columns:has(> *:focus) > *:not(:focus) > * { 2825 filter: opacity(0.8); 2826 } */ 2827 2828 #columns > *:focus-visible, 2829 #columns > *:has(:focus-visible) { 2830 /* box-shadow: 0 4px 16px var(--drop-shadow-color), 2831 0 4px 16px var(--drop-shadow-color); */ 2832 /* border-color: var(--outline-hover-color); */ 2833 z-index: 1; 2834 box-shadow: inset 0 0 0 1px var(--outline-hover-color); 2835 } 2836 #columns .timeline:not(.flat) > li:has(.status-link.is-active), 2837 #columns 2838 .timeline:not(.flat) 2839 > li:not(:has(.status-carousel)):has(+ li .status-link.is-active), 2840 #columns 2841 .timeline:not(.flat) 2842 > li:not(:has(.status-carousel)):has(.status-link.is-active) 2843 + li { 2844 transform: none; 2845 } 2846 #columns .timeline-deck > header { 2847 margin: 0; 2848 } 2849 #columns .timeline-deck > header[hidden] { 2850 transform: none; 2851 pointer-events: auto; 2852 } 2853 #columns li.timeline-item-carousel { 2854 width: auto; 2855 transform: none; 2856 } 2857} 2858 2859/* FILTER BAR */ 2860 2861.filter-bar { 2862 padding: 8px 16px; 2863 background-color: var(--bg-faded-color); 2864 display: flex; 2865 gap: 8px; 2866 overflow-x: auto; 2867 mask-image: linear-gradient( 2868 var(--to-forward), 2869 transparent, 2870 black 16px, 2871 black calc(100% - 16px), 2872 transparent 2873 ); 2874 align-items: center; 2875 transition: opacity 0.3s ease-out; 2876 2877 &.expandable:not(#columns &) { 2878 @media (min-width: 40em) { 2879 width: 95vw; 2880 max-width: calc(320px * 3.3); 2881 transform: translateX(calc(-50% + var(--main-width) / 2)); 2882 &:dir(rtl) { 2883 transform: translateX(calc(50% - var(--main-width) / 2)); 2884 } 2885 } 2886 } 2887 2888 &.loading, 2889 .loading > & { 2890 pointer-events: none; 2891 opacity: 0.5; 2892 } 2893 2894 .filter-field { 2895 flex-shrink: 0; 2896 padding: 8px 16px; 2897 border-radius: 999px; 2898 color: var(--text-color); 2899 background-color: var(--bg-color); 2900 background-image: none; 2901 border: 2px solid transparent; 2902 margin: 0; 2903 /* appearance: none; */ 2904 line-height: 1; 2905 font-size: 90%; 2906 display: flex; 2907 gap: 8px; 2908 2909 > .icon { 2910 color: var(--link-color); 2911 } 2912 2913 &:placeholder-shown { 2914 color: var(--text-insignificant-color); 2915 } 2916 2917 &:is(:hover, :focus-visible) { 2918 border-color: var(--link-light-color); 2919 } 2920 &:focus { 2921 outline-color: var(--link-light-color); 2922 } 2923 &.is-active { 2924 border-color: var(--link-color); 2925 box-shadow: inset 0 0 8px var(--link-faded-color); 2926 } 2927 2928 :is(input, select) { 2929 background-color: transparent; 2930 background-image: none; 2931 border: 0; 2932 padding: 0; 2933 margin: 0; 2934 color: inherit; 2935 font-size: inherit; 2936 line-height: inherit; 2937 appearance: none; 2938 border-radius: 0; 2939 box-shadow: none; 2940 outline: none; 2941 } 2942 2943 input[type='month'] { 2944 min-width: 6em; 2945 2946 &::-webkit-calendar-picker-indicator { 2947 /* replace icon with triangle */ 2948 opacity: 0.5; 2949 background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none"><path d="M4 6L8 10L12 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>'); 2950 } 2951 2952 @media (prefers-color-scheme: dark) { 2953 &::-webkit-calendar-picker-indicator { 2954 filter: invert(1); 2955 } 2956 } 2957 } 2958 } 2959} 2960.filter-bar.centered { 2961 justify-content: center; 2962} 2963@media (min-width: 40em) { 2964 .filter-bar { 2965 background-color: transparent; 2966 } 2967} 2968.filter-bar > a:not(.filter-clear) { 2969 padding: 8px 16px; 2970 border-radius: 999px; 2971 background-color: var(--bg-color); 2972 color: var(--link-color); 2973 text-decoration: none; 2974 white-space: nowrap; 2975 border: 2px solid transparent; 2976 transition: border-color 0.3s ease-out; 2977 display: inline-flex; 2978 align-items: center; 2979 gap: 8px; 2980} 2981.filter-bar > a:focus-visible { 2982 border-color: var(--link-light-color); 2983} 2984@media (hover: hover) { 2985 .filter-bar > a:hover { 2986 border-color: var(--link-light-color); 2987 } 2988} 2989.filter-bar > a > * { 2990 vertical-align: middle; 2991} 2992.filter-bar > a.is-active { 2993 border-color: var(--link-color); 2994 box-shadow: inset 0 0 8px var(--link-faded-color); 2995} 2996.filter-bar > a > .filter-count { 2997 font-size: 80%; 2998 display: inline-block; 2999 color: var(--text-insignificant-color); 3000 min-width: 16px; 3001 min-height: 16px; 3002 padding: 4px; 3003 margin: -4px 0; 3004 margin-inline-end: -8px; 3005 background-color: var(--bg-faded-color); 3006 border-radius: 999px; 3007} 3008 3009/* NOTIFICATION PEEK */ 3010 3011.notification-peek .notification { 3012 padding-inline: 0 !important; 3013} 3014 3015/* OTHERS */ 3016 3017@media (min-width: 40em) { 3018 html, 3019 body { 3020 background-color: var(--bg-faded-color); 3021 } 3022 .deck-container { 3023 background-color: var(--bg-faded-color); 3024 } 3025 #app { 3026 display: flex; 3027 } 3028 .deck-container { 3029 transition: transform 0.4s var(--timing-function); 3030 } 3031 .deck-container:has(~ .deck-backdrop .deck) { 3032 transition: transform 0.4s ease-out; 3033 transform: translate3d(-5vw, 0, 0); 3034 &:dir(rtl) { 3035 transform: translate3d(5vw, 0, 0); 3036 } 3037 } 3038 .deck-backdrop .deck { 3039 /* width: 50%; 3040 min-width: var(--main-width); */ 3041 border-inline-start: 1px solid var(--divider-color); 3042 } 3043 .timeline-deck { 3044 border: 0; 3045 background-color: transparent; 3046 } 3047 .timeline-deck > header { 3048 --margin-top: 8px; 3049 top: var(--margin-top); 3050 margin-inline: 8px; 3051 } 3052 .timeline-deck > header .header-grid { 3053 border-bottom: 0; 3054 border-radius: 16px; 3055 background-color: var(--bg-faded-blur-color); 3056 backdrop-filter: blur(16px); 3057 background-image: none; 3058 border-radius: 16px; 3059 min-height: 4em; 3060 } 3061 .timeline-deck > header[hidden] { 3062 transform: translate3d(0, calc((100% + var(--margin-top)) * -1), 0); 3063 } 3064 .deck > header { 3065 text-shadow: 0 1px var(--bg-color); 3066 3067 .szh-menu-container, 3068 form { 3069 text-shadow: none; 3070 } 3071 } 3072 .deck > header h1 { 3073 font-size: 1.5em; 3074 } 3075 .updates-button { 3076 margin-top: 24px; 3077 } 3078 .timeline:not(.flat) > li { 3079 --item-radius: 16px; 3080 border: 1px solid var(--divider-color); 3081 margin: 16px 0; 3082 background-color: var(--bg-color); 3083 border-radius: var(--item-radius); 3084 overflow: hidden; 3085 box-shadow: 0px 1px var(--bg-blur-color); 3086 transition: transform 0.4s var(--timing-function); 3087 --back-transition: transform 0.4s ease-out; 3088 3089 &:is(:empty, :has(> a:empty)) { 3090 display: none; 3091 } 3092 } 3093 .timeline:not(.flat) > li > a { 3094 border-radius: inherit; 3095 } 3096 .timeline:not(.flat) > li:not(:has(.status-carousel)) { 3097 transform: translate3d(0, 0, 0); 3098 } 3099 .timeline:not(.flat) 3100 > li:not(.timeline-item-container-end, .timeline-item-container-middle):has( 3101 .status-badge:not(:empty) 3102 ) { 3103 border-start-end-radius: 8px; 3104 } 3105 .timeline:not(.flat) > li:has(.status-link.is-active) { 3106 transition: var(--back-transition); 3107 transform: translate3d(-2.5vw, 0, 0); 3108 &:dir(rtl) { 3109 transform: translate3d(2.5vw, 0, 0); 3110 } 3111 } 3112 .timeline:not(.flat) 3113 > li.timeline-item-container:has(.status-link.is-active) { 3114 border-start-start-radius: var(--item-radius); 3115 border-end-start-radius: var(--item-radius); 3116 } 3117 .timeline:not(.flat) 3118 > li:not(:has(.status-carousel)):has(+ li .status-link.is-active), 3119 .timeline:not(.flat) 3120 > li:not(:has(.status-carousel)):has(.status-link.is-active) 3121 + li { 3122 transition: var(--back-transition); 3123 transform: translate3d(-1.25vw, 0, 0); 3124 &:dir(rtl) { 3125 transform: translate3d(1.25vw, 0, 0); 3126 } 3127 } 3128 .timeline:not(.flat) 3129 > li.timeline-item-container:not(:has(.status-carousel)):has( 3130 + li .status-link.is-active 3131 ) { 3132 border-start-start-radius: var(--item-radius); 3133 } 3134 .timeline:not(.flat) 3135 > li.timeline-item-container:not(:has(.status-carousel)):has( 3136 .status-link.is-active 3137 ) 3138 + li.timeline-item-container { 3139 border-end-start-radius: var(--item-radius); 3140 } 3141 .box { 3142 padding: 32px; 3143 } 3144 /* :is(.carousel-top-controls, .carousel-controls) { 3145 padding: 32px; 3146 } */ 3147 li.timeline-item-carousel { 3148 width: 95vw; 3149 max-width: calc(320px * 3.3); 3150 transform: translateX(calc(-50% + var(--main-width) / 2)); 3151 &:dir(rtl) { 3152 transform: translateX(calc(50% - var(--main-width) / 2)); 3153 } 3154 } 3155} 3156 3157/* LANG SELECTOR */ 3158 3159.lang-selector { 3160 display: inline-flex; 3161 gap: 4px; 3162 align-items: center; 3163 3164 select { 3165 width: 10em; 3166 } 3167} 3168 3169/* DEBUG */ 3170 3171.debug-info { 3172 font-size: smaller; 3173 summary { 3174 height: 1em; 3175 width: 100%; 3176 list-style: none; 3177 display: inline-block; 3178 } 3179 summary::-webkit-details-marker { 3180 display: none; 3181 } 3182 3183 .side { 3184 float: var(--forward); 3185 } 3186 3187 p, 3188 ol, 3189 ul { 3190 margin-block-start: 0; 3191 padding-block-start: 0; 3192 } 3193}