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