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/*view-transition-name: root;*/ 14} 15 16nav { 17/*view-transition-name: nav;*/ 18} 19 20p { 21color: var(--text-soft); 22} 23 24iconify-icon { 25/* Material design icons are done in 24px, so we scale them to 1.5 as the default font size is 16px */ 26display: inline-block; 27width: 1em; 28height: 1em; 29font-size: 1.5em; 30} 31 32:is(#shape-selector, #shape-options) > button > iconify-icon { 33font-size: 2rem; 34} 35 36#annotation-zone, .annotation-zone { 37position: relative; 38user-select: none; 39} 40 41#annotation-image, .annotation-image { 42user-drag: none; 43-webkit-user-drag: none; 44image-rendering: pixelated; 45} 46 47#annotation-zone > svg, .annotation-zone > svg { 48z-index: 1; 49position: absolute; 50top: 0; 51left: 0; 52width: 100%; 53height: 100%; 54} 55 56.annotation-ruler { 57z-index: 2; 58position: absolute; 59top: 0; 60left: 0; 61background: var(--color-accent); 62display: none; 63} 64 65#annotation-ruler-horizontal, #annotation-ruler-horizontal-secondary { 66height: 1px; 67width: 100%; 68} 69 70#annotation-ruler-vertical, #annotation-ruler-vertical-secondary { 71width: 1px; 72height: 100%; 73} 74 75.shape { 76stroke: var(--color-accent); 77fill: var(--color-accent); 78fill-opacity: 0.1; 79stroke-width: 2px; 80vector-effect: non-scaling-stroke; 81pointer-events: auto; 82transition: filter 0.25s cubic-bezier(0.61, 1, 0.88, 1), 83fill-opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1), 84stroke-width 0.25s cubic-bezier(0.61, 1, 0.88, 1); 85stroke-linecap: square; 86stroke-linejoin: miter; 87} 88 89.shape-polyline { 90fill: none; 91} 92 93.shape-point { 94stroke: var(--color-accent); 95stroke-width: 2px; 96fill-opacity: 1; 97r: 2; 98transition: r 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 99stroke-width 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 100filter 0.25s cubic-bezier(0.61, 1, 0.88, 1); 101} 102 103.shape.selected { 104fill-opacity: 0.2; 105stroke-width: 4px; 106filter: drop-shadow(0 0 2px var(--text-soft)); 107} 108 109.shape-point.selected { 110fill-opacity: 1; 111r: 6; 112stroke-width: 6px; 113} 114 115.shape-container, .shape-container-viewonly { 116pointer-events: none; 117} 118 119#annotation-helper-message { 120min-height: 2lh; 121} 122 123.shape-container-viewonly > .shape, .thumbnail-list > li .shape { 124fill: var(--color-info); 125stroke: var(--color-info); 126fill-opacity: 0; 127stroke-opacity: 0; 128transition: fill-opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1), 129stroke-opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1); 130} 131 132.shape-container-viewonly > .shape-polyline, .thumbnail-list > li .shape-polyline { 133fill: none; 134} 135 136.shape-container-viewonly > .shape-point, .thumbnail-list > li .shape-point { 137stroke: var(--color-info); 138transition: r 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 139stroke-width 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), 140filter 0.25s cubic-bezier(0.61, 1, 0.88, 1); 141} 142 143.shape-label { 144position: absolute; 145font-weight: 500; 146color: var(--color-shape-label-text) !important; 147pointer-events: auto; 148height: 28px; 149padding-left: 8px; 150padding-right: 8px; 151display: flex; 152align-items: center; 153justify-content: center; 154background: var(--color-shape-label); 155width: max-content; 156box-shadow: var(--shadow-button); 157/* top-left corner is square to point to the shape */ 158border-radius: 0 16px 16px 16px; 159opacity: 0; 160transition: opacity 0.25s cubic-bezier(0.61, 1, 0.88, 1), 161transform 0.375s cubic-bezier(0.16, 1, 0.3, 1); 162transform: scale(0); 163transform-origin: top left; 164z-index: 3; 165text-decoration: none; 166} 167 168.shape-label:hover { 169text-decoration: underline; 170} 171 172/* Only show region parts when checkbox is checked */ 173#annotation-zone:has(+ x-buttonbox #show-objects:checked) > .shape-label { 174opacity: 1; 175transform: scale(1); 176} 177 178/* Hide points with a bubble */ 179#annotation-zone:has(+ x-buttonbox #show-objects:checked) > .shape-container-viewonly > .shape-point:has(+ foreignObject) { 180r: 0; 181border-width: 0; 182} 183 184#annotation-zone:has(+ x-buttonbox #show-shapes:checked) > .shape-container-viewonly > .shape { 185fill-opacity: 0.1; 186stroke-opacity: 1; 187} 188 189.thumbnail-list > li:is(:hover, :focus, :has(:focus)) .shape { 190fill-opacity: 0.2; 191stroke-opacity: 1; 192} 193 194/* Disabled for now, until there is more navigation that would benefit from transitions */ 195/* 196@view-transition { 197navigation: auto; 198} 199 200@keyframes move-out { 201from { 202transform: translateX(0%); 203} 204to { 205transform: translateX(-100%); 206} 207} 208 209@keyframes move-in { 210from { 211transform: translateX(100%); 212} 213to { 214transform: translateX(0%); 215} 216} 217 218@media (prefers-reduced-motion: no-preference) { 219::view-transition-old(root), 220::view-transition-new(root) { 221animation-duration: 0.25s; 222animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1); 223} 224 225::view-transition-old(root) { 226animation-name: move-out; 227} 228 229::view-transition-new(root) { 230animation-name: move-in; 231} 232} 233*/ 234 235.multi-select, .single-select { 236display: flex; 237flex-flow: column nowrap; 238overflow-y: scroll; 239box-shadow: var(--shadow-card-inset); 240padding: 16px; 241gap: 8px; 242} 243 244.licence-selection, .image-type-selection { 245display: flex; 246flex-flow: column nowrap; 247} 248 249.licence-selection-info, .image-type-selection-info { 250margin-left: calc(var(--size-checkbox) + var(--gap-label-checkbox)); 251/* Align with the checkbox above */ 252} 253 254.licence-selection-info > p, .image-type-selection-info > p { 255font-weight: 300; 256} 257 258.licence-logo { 259width: 128px; 260float: right; 261margin-left: 1ch; 262} 263 264.licence-title, .image-type-title { 265display: flex; 266justify-content: space-between; 267width: 100%; 268} 269 270.licence-title > .licence-name, .image-type-title > .image-type-name { 271font: var(--h5-font); 272font-weight: 400; 273} 274 275.icon-explainer { 276display: grid; 277gap: 4px 8px; 278grid-template-columns: auto 1fr; 279align-items: center; 280} 281 282.icon-explainer *:nth-child(even) { 283font-weight: 300; 284} 285 286.required-asterisk::after { 287content: "*"; 288color: var(--color-error); 289} 290 291small { 292/* BIG :D */ 293font-size: 1em; 294} 295 296#pagination { 297display: flex; 298gap: 1em; 299justify-content: center; 300align-items: center; 301font-size: 1.5em; 302font-weight: 600; 303flex: 1 0 auto; 304} 305 306#pagination > a { 307text-decoration: none; 308color: var(--color-accent-1); 309} 310 311#pagination-options > form { 312align-items: center; 313display: flex; 314gap: 1em; 315} 316 317#pagination-options { 318justify-content: center; 319align-items: center; 320gap: 1em; 321width: 100%; 322} 323 324.thumbnail-list { 325list-style: none; 326margin: 0 !important; 327display: grid; 328grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); 329gap: 16px; 330} 331 332.thumbnail-list > li { 333transition: transform 0.25s cubic-bezier(0.61, 1, 0.88, 1), 334box-shadow 0.25s cubic-bezier(0.61, 1, 0.88, 1); 335box-shadow: var(--shadow-card); 336background: var(--color-card); 337} 338 339.thumbnail-list > li > a, .thumbnail-list > li { 340display: flex; 341flex-direction: column; 342justify-content: space-between; 343height: 100%; 344} 345 346.thumbnail-list > li > .list-more { 347display: flex; 348justify-content: space-between; 349align-items: center; 350padding: 8px; 351} 352 353.thumbnail-list > li:is(:hover, :focus, :has(:focus)) { 354position: relative; 355transform: scale(1.5); 356z-index: 1; 357box-shadow: var(--shadow-card), 0 4px 32px rgba(0, 0, 0, 0.12), 0 4px 16px rgba(0, 0, 0, 0.08); 358} 359 360.thumbnail-list > li .list-detail { 361padding: 8px; 362display: block; 363} 364 365a.button { 366text-decoration: none; 367} 368 369dt { 370font-weight: 600; 371} 372 373dd { 374margin-left: 40px; 375} 376 377#mobile-navbar { 378display: none; 379} 380 381@media screen and (max-width: 576px) { 382#mobile-navbar { 383display: flex; 384} 385#desktop-navbar { 386display: none; 387} 388} 389 390#hamburger > nav { 391display: flex; 392flex-direction: column; 393gap: 1em; 394padding: var(--padding-card); 395padding-top: var(--padding-card-top); 396box-shadow: var(--shadow-card); 397background: var(--color-card); 398justify-content: space-between; 399width: clamp(240px, calc(100vw - 56px), 448px); 400} 401 402#hamburger > nav > ul { 403display: flex; 404flex-direction: column; 405gap: 1em; 406margin: 0; 407} 408 409#hamburger > nav > ul > li { 410display: flex; 411gap: var(--gap-label-checkbox); 412align-items: center; 413margin: 0; 414} 415 416#hamburger > nav > ul > li > a { 417text-decoration: none; 418color: var(--color-card-text); 419} 420 421.star-rating-container { 422display: flex; 423flex-direction: row-reverse; 424gap: 0.5ch; 425font-size: 1.25em; 426align-items: center; 427justify-content: flex-end; /* In this case, it means LEFT, not right, because of the row-reverse */ 428} 429 430.star-rating-container > input { 431width: 0 !important; 432height: 0 !important; 433visibility: hidden; 434} 435 436.star-rating-container > label { 437cursor: pointer; 438color: var(--text-softest); 439transition: color 0.25s cubic-bezier(0.37, 0, 0.63, 1), 440filter 0.25s cubic-bezier(0.37, 0, 0.63, 1); 441} 442 443.star-rating-container > label:hover, 444.star-rating-container > label:hover ~ label { 445color: var(--color-star); 446filter: drop-shadow(0 0 3px #00000040); 447} 448 449.star-rating-container > input:checked ~ label { 450color: var(--color-star); 451} 452