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