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