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