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: 100%; 632margin: 0; 633} 634 635#picture-view > x-frame { 636flex: 0 1 var(--width); 637max-width: unset; 638margin: 0; 639} 640 641#picture-actions { 642--width: 256px; 643position: sticky; 644top: var(--reserved-height-top); 645overflow: auto; 646max-height: 100vh; 647height: 100%; 648background: var(--color-card); 649padding: 1rem 0; 650box-shadow: var(--shadow-card); 651} 652 653@media screen and (max-width: 768px) { 654#picture-view { 655flex-direction: column; 656} 657#picture-view > x-frame { 658flex: 1 1 auto; 659margin: 0; 660} 661#picture-actions { 662--width: 768px; 663position: static; 664padding: 1rem; 665} 666#picture-actions > ul { 667width: 100%; 668list-style: none; 669margin: 0; 670padding: 0; 671} 672#picture-actions > ul > li { 673display: inline; 674} 675.action-list > li { 676padding: 0 !important; 677} 678#picture-view > x-frame > hgroup, #annotation-view-controls, #picture-details { 679margin-left: 1rem; 680margin-right: 1rem; 681} 682.mobile-padding { 683padding-left: 1rem; 684} 685} 686 687#annotation-view-controls { 688display: flex; 689flex-flow: row wrap; 690gap: 1rem; 691margin-top: 1rem; 692margin-bottom: 1rem; 693} 694 695#picture-view > x-frame > hgroup { 696margin-bottom: 1rem; 697} 698 699.action-list { 700list-style: none; 701margin: 0 !important; 702padding: 0; 703} 704 705.action-list > li { 706display: flex; 707margin: 0; 708width: 100%; 709padding: 0.25rem 1rem; 710} 711 712.action-list > li > a { 713text-decoration: none; 714color: var(--color-card-text) !important; 715display: flex; 716align-items: center; 717gap: 0.5rch; 718font-weight: 400; 719} 720 721.action-list > li > details > summary { 722color: var(--color-card-text) !important; 723display: flex; 724align-items: center; 725gap: 0.5rch; 726font-weight: 400; 727} 728 729#picture-buttons { 730padding: 0 1rem; 731} 732 733@media print { 734#picture-actions, #annotation-view-controls { 735display: none; 736} 737.navbar { 738display: none; 739} 740:root { 741--color-background: #ffffff; 742} 743#annotation-zone, .thumbnail-list { 744width: 100vw; 745height: auto; 746position: relative; 747left: calc(-1 * (50vw - 50%)); 748} 749} 750 751.navbar > ul { 752max-width: 100%; 753} 754 755#desktop-navbar > ul:first-child { /* list containing title */ 756flex: 0 1 auto; 757min-width: 0; 758} 759 760#desktop-navbar > ul:last-child { /* list containing navigation */ 761flex: 1 0 auto; 762justify-content: end; 763} 764 765#mobile-navbar-title, #desktop-navbar-title { 766font: var(--h5-font); 767font-weight: 700; 768white-space: nowrap; 769overflow: hidden; 770text-overflow: ellipsis; 771flex: 0 1 auto; 772min-width: 0; 773} 774 775nav .button-flat { 776--color-flat-button-hover: transparent; 777--color-flat-button-active: transparent; 778} 779 780nav .button-flat .ripple-pad { 781background: #ffffff99; 782} 783 784.warning { 785background: var(--color-alert); 786color: var(--color-alert-text); 787padding: 1rem; 788margin: 1rem 0; 789border-radius: var(--radius-card); 790box-shadow: var(--shadow-card); 791--color-link-text: #000000; 792--color-link-hover-text: #000000; 793--color-link-visited-text: #000000; 794--color-link-visited-hover-text: #000000; 795--color-link-active-text: #000000; 796} 797 798.warning h2 { 799font: var(--h3-font); 800} 801 802#annotation-zone { 803box-shadow: var(--shadow-card); 804} 805 806#hamburger-site-name { 807font: var(--h4-font); 808text-transform: uppercase; 809color: var(--color-accent); 810} 811 812#object-types { 813z-index: 3; 814background: var(--color-callout); 815color: var(--color-callout-text); 816--color-background-text: var(--color-callout-text); 817--color-label-text: var(--color-callout-text); 818box-shadow: var(--shadow-card); 819border-radius: var(--radius-input); 820position: absolute; 821display: none; 822overflow: auto; 823} 824 825#object-types-content { 826padding: 1rem; 827} 828 829#annotation-controls { 830display: flex; 831justify-content: space-between; 832gap: 1rem; 833padding: 0.5rem; 834align-items: stretch; 835} 836 837#annotation-controls > x-buttonbox { 838align-items: center; 839} 840 841#annotation-controls > x-buttonbox button:has(iconify-icon) { 842aspect-ratio: 1; 843} 844 845#annotation-controls > x-buttonbox button > iconify-icon { 846font-size: 1.5rem; 847} 848 849#annotation-helper-message { 850padding: 0.75rem; 851text-align: center; 852flex: 0 0 auto; 853} 854 855#annotation-zoom-container { 856flex: 1 1 auto; 857overflow: hidden; 858align-self: stretch; 859width: 100%; 860display: flex; 861justify-content: center; 862align-items: center; 863touch-action: none; 864} 865 866#annotation-zoom-container > #annotation-zone { 867transform: scale(1); 868transition: transform 0.125s cubic-bezier(0.28, 0.5, 0.31, 0.92); 869max-width: 100%; 870max-height: 100% !important; 871box-shadow: none; 872} 873 874#annotation-zoom-container > #annotation-zone > #annotation-image { 875object-fit: contain; 876width: 100%; 877height: 100%; 878} 879 880#annotation-main-area { 881display: flex; 882flex-direction: column; 883flex: 1 1 auto; 884overflow: auto; 885width: 100%; 886} 887 888body.fixed-content-area { 889max-width: 100vw; 890max-height: 100vh; 891display: flex; 892flex-direction: column; 893} 894 895body.fixed-content-area > main { 896flex: 1 1 auto; 897overflow: auto; 898display: flex; 899flex-direction: column; 900} 901 902#annotation-zoom-controls { 903display: flex; 904gap: 0.5rem; 905justify-content: center; 906align-items: center; 907} 908 909#zoom-indicator { 910width: 7ch; 911text-align: right; 912} 913 914#annotation-zoom-container { 915cursor: grab; 916} 917 918#object-types { 919cursor: auto; 920} 921 922.thumbnail-list-scroll { 923display: flex; 924flex-direction: row; 925overflow-x: auto; 926overflow-y: hidden; 927align-items: stretch; 928padding: 16px; 929} 930 931.thumbnail-list-scroll > li { 932flex: 0 0 192px; 933max-width: 192px; 934} 935 936#picture-actions { 937flex-shrink: 0; 938} 939 940.thumbnail-list-scroll > li > a .annotation-zone:hover { 941transform: none; 942} 943 944summary { 945cursor: pointer; 946} 947 948button, .button, input, select, textarea { 949box-sizing: border-box; 950} 951 952.button-danger { 953--color-button: var(--color-error); 954--color-button-hover: var(--color-error); 955--color-button-active: var(--color-error); 956} 957 958input[type="file"] { 959padding: 0.5rem; 960display: flex; 961font-style: italic; 962} 963 964.thumbnail-card-small > a > .annotation-zone { 965flex: 0 0 auto; 966max-width: 384px; 967} 968 969.thumbnail-card-small, .thumbnail-card-small > a { 970align-items: center; 971} 972 973.thumbnail-card-small { 974margin: auto; 975} 976 977hr { 978border: 0.25px solid var(--color-divider); 979width: 100%; 980} 981 982body { 983display: flex; 984flex-direction: column; 985} 986