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