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