style.css
ASCII text
1@import "/static/efficient-ui/MASTER.css"; 2 3:root { 4--gap-navbar: 1rem; 5--width-navbar-button: 0; 6--text-soft: #000000C0; 7--text-softer: #0000009A; 8--text-faint: #00000066; 9--text-softest: #00000033; 10--color-star: #FFC107; 11--color-shape-label: #0097A7; --color-shape-label-text: #ffffff; 12--shadow-card-inset: inset 0 3px 6px -4px rgba(0, 0, 0, 0.12), inset 0 3px 6px 0 rgba(0, 0, 0, 0.24), inset 0 1px 4px 0 rgba(0, 0, 0, 0.12); 13--1-star: #FF8079; 14--2-star: #FF8A65; 15--3-star: #FFAC1B; 16--4-star: #FBC02D; 17--5-star: #CDDC39; 18view-transition-name: root; 19--reserved-height-top: 0; 20} 21 22.ripple-pad { 23background: #ffffff99; 24position: absolute; 25opacity: 1; 26transform: scale(0); 27animation: RippleEffect 375ms cubic-bezier(0, 0.55, 0.45, 1) forwards; 28} 29 30.button-flat .ripple-pad { 31background: var(--color-primary-3); 32} 33 34@keyframes RippleEffect { 35to { 36transform: scale(1); 37opacity: 0; 38} 39} 40 41button, input, .button:not(.link-button), select, .navbar a, .navrail a { 42position: relative; 43overflow: hidden; 44} 45 46nav#desktop-navbar { 47view-transition-name: navbar; 48} 49 50nav#mobile-navbar { 51view-transition-name: navbar-mobile; 52} 53 54p { 55color: var(--text-soft); 56} 57 58iconify-icon { 59/* Material design icons are done in 24px, so we scale them to 1.5 as the default font size is 16px */ 60display: inline-block; 61width: 1em; 62height: 1em; 63font-size: 1.5em; 64} 65 66:is(#shape-selector, #shape-options) > button > iconify-icon { 67font-size: 2rem; 68} 69 70#annotation-zone, .annotation-zone { 71position: relative; 72user-select: none; 73overflow: hidden; 74} 75 76#annotation-image, .annotation-image { 77user-drag: none; 78-webkit-user-drag: none; 79image-rendering: pixelated; 80} 81 82#annotation-zone > svg, .annotation-zone > svg { 83z-index: 1; 84position: absolute; 85top: 0; 86left: 0; 87width: 100%; 88height: 100%; 89} 90 91.annotation-ruler { 92z-index: 2; 93position: absolute; 94top: 0; 95left: 0; 96background: var(--color-accent); 97display: none; 98} 99 100#annotation-ruler-horizontal, #annotation-ruler-horizontal-secondary { 101height: 1px; 102width: 100%; 103} 104 105#annotation-ruler-vertical, #annotation-ruler-vertical-secondary { 106width: 1px; 107height: 100%; 108} 109 110.shape { 111stroke: var(--color-accent); 112fill: var(--color-accent); 113fill-opacity: 0.1; 114stroke-width: 2px; 115vector-effect: non-scaling-stroke; 116pointer-events: auto; 117transition: filter 0.25s cubic-bezier(0.61, 1, 0.88, 1), 118fill-opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1), 119stroke-width 0.25s cubic-bezier(0.61, 1, 0.88, 1); 120stroke-linecap: square; 121stroke-linejoin: miter; 122} 123 124.shape-polyline { 125fill: none; 126} 127 128.shape-point { 129stroke: var(--color-accent); 130stroke-width: 2px; 131fill-opacity: 1; 132r: 2; 133transition: r 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 134stroke-width 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 135filter 0.25s cubic-bezier(0.61, 1, 0.88, 1); 136} 137 138.shape.selected { 139fill-opacity: 0.2; 140stroke-width: 4px; 141filter: drop-shadow(0 0 2px var(--text-soft)); 142} 143 144.shape-point.selected { 145fill-opacity: 1; 146r: 6; 147stroke-width: 6px; 148} 149 150.shape-container, .shape-container-viewonly { 151pointer-events: none; 152} 153 154#annotation-helper-message { 155min-height: 2lh; 156} 157 158.shape-container-viewonly > .shape, .thumbnail-list > li .shape { 159fill: var(--color-info); 160stroke: var(--color-info); 161fill-opacity: 0; 162stroke-opacity: 0; 163transition: fill-opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1), 164stroke-opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1); 165} 166 167.shape-container-viewonly > .shape-polyline, .thumbnail-list > li .shape-polyline { 168fill: none; 169} 170 171.shape-container-viewonly > .shape-point, .thumbnail-list > li .shape-point { 172stroke: var(--color-info); 173transition: r 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 174stroke-width 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 175filter 0.25s cubic-bezier(0.61, 1, 0.88, 1); 176} 177 178.shape-label { 179position: absolute; 180font-weight: 500; 181color: var(--color-shape-label-text) !important; 182pointer-events: auto; 183height: 28px; 184padding-left: 8px; 185padding-right: 8px; 186display: flex; 187align-items: center; 188justify-content: center; 189background: var(--color-shape-label); 190width: max-content; 191box-shadow: var(--shadow-button); 192/* top-left corner is square to point to the shape */ 193border-radius: 0 16px 16px 16px; 194opacity: 0; 195transition: opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1), 196transform 0.375s cubic-bezier(0.16, 1, 0.3, 1); 197transform: scale(0); 198transform-origin: top left; 199z-index: 3; 200text-decoration: none; 201} 202 203.shape-label:hover { 204text-decoration: underline; 205} 206 207/* Only show region parts when checkbox is checked */ 208#annotation-zone:has(+ x-buttonbox #show-objects:checked) > .shape-label { 209opacity: 1; 210transform: scale(1); 211} 212 213/* Hide points with a bubble */ 214#annotation-zone:has(+ x-buttonbox #show-objects:checked) > .shape-container-viewonly > .shape-point:has(+ foreignObject) { 215r: 0; 216border-width: 0; 217} 218 219#annotation-zone:has(+ x-buttonbox #show-shapes:checked) > .shape-container-viewonly > .shape { 220fill-opacity: 0.1; 221stroke-opacity: 1; 222} 223 224.thumbnail-list > li:is(:hover, :focus, :has(:focus)) .shape { 225fill-opacity: 0.2; 226stroke-opacity: 1; 227} 228 229@keyframes move-out { 230from { 231transform: scale(1); 232opacity: 1; 233} 234to { 235transform: scale(0.5); 236opacity: 0; 237} 238} 239 240@keyframes move-in { 241from { 242transform: scale(0.5); 243opacity: 0; 244} 245to { 246transform: scale(1); 247opacity: 1; 248} 249} 250 251@keyframes slide-in { 252from { 253transform: translateX(-1.5rem); 254opacity: 0; 255} 256to { 257transform: translateX(0); 258opacity: 1; 259} 260} 261 262@keyframes slide-out { 263from { 264transform: translateX(0); 265opacity: 1; 266} 267to { 268transform: translateX(-1.5rem); 269opacity: 0; 270} 271} 272 273@media (prefers-reduced-motion: no-preference) { 274.thumbnail-list > li:is(:hover, :focus, :has(:focus)) > a > .annotation-zone, 275html:not(:has(.thumbnail-list > li:is(:hover, :focus, :has(:focus)) > a > .annotation-zone)) #annotation-zone { 276view-transition-name: thumbnail; 277} 278::view-transition-old(root), 279::view-transition-new(root) { 280transform-origin: top; 281animation-duration: 0.5s; 282animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); 283} 284 285::view-transition-old(root) { 286animation-name: move-out; 287} 288 289::view-transition-new(root) { 290animation-name: move-in; 291} 292 293::view-transition-group(thumbnail) { 294animation-duration: 0.5s; 295animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); 296} 297 298#annotation-zone::view-transition-old(thumbnail) { 299animation-duration: 0s; 300} 301 302::view-transition-group(navbar), ::view-transition-group(navbar-mobile) { 303animation-duration: 0.5s; 304animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); 305} 306} 307 308.multi-select, .single-select { 309display: flex; 310flex-flow: column nowrap; 311overflow-y: scroll; 312box-shadow: var(--shadow-card-inset); 313padding: 16px; 314gap: 8px; 315} 316 317.licence-selection, .image-type-selection { 318display: flex; 319flex-flow: column nowrap; 320} 321 322.licence-selection-info, .image-type-selection-info { 323margin-left: calc(var(--size-checkbox) + var(--gap-label-checkbox)); 324/* Align with the checkbox above */ 325} 326 327.licence-selection-info > p, .image-type-selection-info > p { 328font-weight: 300; 329} 330 331.licence-logo { 332width: 128px; 333float: right; 334margin-left: 1ch; 335} 336 337.licence-title, .image-type-title { 338display: flex; 339justify-content: space-between; 340width: 100%; 341} 342 343.licence-title > .licence-name, .image-type-title > .image-type-name { 344font: var(--h5-font); 345font-weight: 400; 346} 347 348.icon-explainer { 349display: grid; 350gap: 4px 8px; 351grid-template-columns: auto 1fr; 352align-items: center; 353} 354 355.icon-explainer *:nth-child(even) { 356font-weight: 300; 357} 358 359.required-asterisk::after { 360content: "*"; 361color: var(--color-error); 362} 363 364small { 365/* BIG :D */ 366font-size: 1em; 367} 368 369#pagination { 370display: flex; 371gap: 1em; 372justify-content: center; 373align-items: center; 374font-size: 1.5em; 375font-weight: 600; 376flex: 1 0 auto; 377} 378 379#pagination > a { 380text-decoration: none; 381color: var(--color-accent-1); 382} 383 384#pagination-options > form { 385align-items: center; 386display: flex; 387gap: 1em; 388} 389 390#pagination-options { 391justify-content: center; 392align-items: center; 393gap: 1em; 394width: 100%; 395} 396 397.thumbnail-list { 398list-style: none; 399margin: 0 !important; 400display: grid; 401grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); 402gap: 16px; 403} 404 405.thumbnail-list > li { 406transition: box-shadow 0.25s cubic-bezier(0.61, 1, 0.88, 1); 407box-shadow: var(--shadow-card); 408background: var(--color-card); 409} 410 411.thumbnail-list > li > a, .thumbnail-list > li { 412display: flex; 413flex-direction: column; 414justify-content: space-between; 415height: 100%; 416} 417 418.thumbnail-list > li > .list-more { 419display: flex; 420justify-content: space-between; 421align-items: center; 422padding: 8px; 423} 424 425.thumbnail-list > li:is(:hover, :focus, :has(:focus)) { 426box-shadow: var(--shadow-card), 0 4px 32px rgba(0, 0, 0, 0.12), 0 4px 16px rgba(0, 0, 0, 0.08); 427} 428 429.thumbnail-list > li .annotation-zone { 430transition: transform 0.25s cubic-bezier(0.61, 1, 0.88, 1), 431box-shadow 0.25s cubic-bezier(0.61, 1, 0.88, 1); 432} 433 434.thumbnail-list > li .annotation-zone:hover { 435position: relative; 436transform: scale(2); 437z-index: 1; 438box-shadow: var(--shadow-textarea-active); 439} 440 441.thumbnail-list > li .list-detail { 442padding: 8px; 443display: block; 444} 445 446a.button { 447text-decoration: none; 448} 449 450dt { 451font-weight: 600; 452} 453 454dd { 455margin-left: 40px; 456} 457 458#mobile-navbar, #mobile-navbar-spacer { 459display: none; 460} 461 462@media screen and (max-width: 896px) { 463#mobile-navbar { 464display: flex; 465} 466header { 467position: fixed; 468top: 0; 469left: 0; 470width: 100%; 471z-index: 3; 472} 473#mobile-navbar-spacer { 474display: block; 475height: var(--height-navbar); 476} 477#desktop-navbar { 478display: none; 479} 480:root { 481--reserved-height-top: var(--height-navbar); 482} 483} 484 485#hamburger > nav { 486display: flex; 487flex-direction: column; 488gap: 1em; 489padding: var(--padding-card); 490padding-top: var(--padding-card-top); 491box-shadow: var(--shadow-card); 492background: var(--color-card); 493justify-content: space-between; 494width: clamp(240px, calc(100vw - 56px), 448px); 495} 496 497#hamburger > nav > ul { 498display: flex; 499flex-direction: column; 500gap: 1em; 501margin: 0; 502} 503 504#hamburger > nav > ul > li { 505display: flex; 506gap: var(--gap-label-checkbox); 507align-items: center; 508margin: 0; 509} 510 511#hamburger > nav > ul > li > a { 512display: contents; 513text-decoration: none; 514color: var(--color-card-text); 515} 516 517.star-rating-container { 518display: flex; 519flex-direction: row-reverse; 520font-size: 1.25em; 521align-items: center; 522justify-content: flex-end; /* In this case, it means LEFT, not right, because of the row-reverse */ 523} 524 525.star-rating-container > input { 526width: 0 !important; 527height: 0 !important; 528visibility: hidden; 529} 530 531.star-rating-container > label { 532cursor: pointer; 533color: var(--text-softest); 534transition: color 0.25s cubic-bezier(0.37, 0, 0.63, 1), 535filter 0.25s cubic-bezier(0.37, 0, 0.63, 1); 536} 537 538.star-rating-container > label:hover, 539.star-rating-container > label:hover ~ label { 540color: var(--color-star); 541filter: drop-shadow(0 0 3px #00000040); 542} 543 544.star-rating-container > input:checked ~ label { 545color: var(--color-star); 546} 547 548.visually-hidden { 549position: absolute; 550width: 1px; 551height: 1px; 552box-sizing: content-box; 553margin: -1px; 554overflow: hidden; 555clip-path: inset(50%); 556border: 0; 557} 558 559.rating-list { 560display: grid; 561grid-auto-columns: 1fr; 562gap: 0.5rem; 563grid-template-columns: auto; 564list-style: none; 565margin: 0 !important; 566padding: 0; 567min-width: 50%; 568} 569 570.rating-list > li { 571grid-column-start: 1; 572height: 28px; 573padding: 4px 8px; 574display: flex; 575align-items: center; 576justify-content: space-between; 577gap: 0.5rch; 578border-radius: 0 4px 4px 0; 579margin: 0; 580} 581 582.rating-bar { 583display: flex; 584align-items: center; 585justify-content: flex-start; 586gap: 0.5rch; 587font-size: 1.25em; 588width: 100%; 589} 590 591.rating-bar > .rating-bar-segment { 592position: relative; 593width: 1em; 594height: 1em; 595clip-path: url(#star-clip); 596background: var(--text-softest); 597} 598 599.rating-bar > .rating-bar-segment > .rating-bar-filling { 600background: var(--color-star); 601height: 100%; 602position: absolute; 603top: 0; 604left: 0; 605} 606 607#picture-view { 608display: flex; 609flex-direction: row; 610gap: 1em; 611align-items: flex-start; 612justify-content: center; 613width: fit-content; 614margin: 0 auto; 615} 616 617#picture-view > x-frame { 618flex: 1 1 var(--width); 619margin: 0; 620} 621 622#picture-actions { 623--width: 256px; 624position: sticky; 625top: var(--reserved-height-top); 626overflow: auto; 627max-height: 100vh; 628height: 100%; 629background: var(--color-card); 630padding: 1rem 0; 631box-shadow: var(--shadow-card); 632} 633 634@media screen and (max-width: 768px) { 635#picture-view { 636flex-direction: column; 637} 638#picture-view > x-frame { 639flex: 1 1 auto; 640margin: 0; 641} 642#picture-actions { 643--width: 768px; 644position: static; 645padding: 1rem; 646} 647#picture-actions > ul { 648width: 100%; 649list-style: none; 650margin: 0; 651padding: 0; 652} 653#picture-actions > ul > li { 654display: inline; 655} 656.action-list > li { 657padding: 0 !important; 658} 659} 660 661.action-list { 662list-style: none; 663margin: 0 !important; 664padding: 0; 665} 666 667.action-list > li { 668display: flex; 669margin: 0; 670width: 100%; 671padding: 0.25rem 1rem; 672} 673 674.action-list > li > a { 675text-decoration: none; 676color: var(--color-card-text) !important; 677display: flex; 678align-items: center; 679gap: 0.5rch; 680font-weight: 400; 681} 682 683.action-list > li > details > summary { 684color: var(--color-card-text) !important; 685display: flex; 686align-items: center; 687gap: 0.5rch; 688font-weight: 400; 689} 690 691#picture-buttons { 692padding: 0 1rem; 693} 694 695@media print { 696#picture-actions, #annotation-view-controls { 697display: none; 698} 699.navbar { 700display: none; 701} 702:root { 703--color-background: #ffffff; 704} 705#annotation-zone, .thumbnail-list { 706width: 100vw; 707height: auto; 708position: relative; 709left: calc(-1 * (50vw - 50%)); 710} 711} 712 713.navbar > ul { 714max-width: 100%; 715} 716 717#desktop-navbar > ul:first-child { /* list containing title */ 718flex: 0 1 auto; 719min-width: 0; 720} 721 722#desktop-navbar > ul:last-child { /* list containing navigation */ 723flex: 1 0 auto; 724justify-content: end; 725} 726 727#mobile-navbar-title, #desktop-navbar-title { 728font: var(--h5-font); 729font-weight: 700; 730white-space: nowrap; 731overflow: hidden; 732text-overflow: ellipsis; 733flex: 0 1 auto; 734min-width: 0; 735} 736 737nav .button-flat { 738--color-flat-button-hover: transparent; 739--color-flat-button-active: transparent; 740} 741 742nav .button-flat .ripple-pad { 743background: #ffffff99; 744} 745 746.warning { 747background: var(--color-alert); 748color: var(--color-alert-text); 749padding: 1rem; 750margin: 1rem 0; 751border-radius: var(--radius-card); 752box-shadow: var(--shadow-card); 753--color-link-text: #000000; 754--color-link-hover-text: #000000; 755--color-link-visited-text: #000000; 756--color-link-visited-hover-text: #000000; 757--color-link-active-text: #000000; 758} 759 760.warning h2 { 761font: var(--h3-font); 762} 763 764#annotation-zone { 765box-shadow: var(--shadow-card); 766} 767 768#hamburger-site-name { 769font: var(--h4-font); 770text-transform: uppercase; 771color: var(--color-accent); 772} 773 774#object-types { 775z-index: 3; 776background: var(--color-card); 777box-shadow: var(--shadow-card); 778padding: 1rem; 779border-radius: var(--radius-card); 780position: absolute; 781display: none; 782} 783