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