Web platform for sharing free image data for ML and research

Homepage: https://datasets.roundabout-host.com

 style.css

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