github.com/pbberlin/go-pwa@v0.0.0-20220328105622-7c26e0ca1ab8/app-bucket/css/styles.css (about) 1 @charset "UTF-8"; 2 3 /* @import url('https://fonts.googleapis.com/css?family=Work+Sans:300,600'); */ 4 /* ===================================== */ 5 /* global stuff */ 6 /* normalize is partly incorporated; if you need all of it, uncomment... */ 7 /* @import url("normalize.css"); */ 8 /* 9 IE <= 9 and IE10/11 need a shock message 10 IE <= 9 is done by conditional comment 11 for IE10/11 see philipnewcomer.net/2014/04/target-internet-explorer-10-11-css 12 */ 13 .ie-warning { 14 display: none; 15 } 16 @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { 17 .ie-warning { 18 display: block; 19 } 20 } 21 22 /* reset - this is not in normalize.css */ 23 /* universal operator for properties not inherited by children */ 24 * { 25 box-sizing: border-box; /* css3 rec */ 26 margin: 0; 27 padding: 0; 28 border: 0; /* also input and button naked */ 29 outline: 0; 30 line-height: 135%; 31 32 /* color: violet; */ 33 background-color: transparent; 34 } 35 36 /* must be explicitly set */ 37 *::before, *::after { 38 /* box-sizing: border-box; */ 39 box-sizing: inherit; 40 } 41 42 /* 43 root points to HTML or SVG - stackoverflow.com/questions/15899615 44 */ 45 :root { 46 /* 47 48 48rem(768px) 1rem(16px) 49 increasing to 50 120rem(1920px) 2rem(32px) 51 52 the expression (1vw - .48rem) 53 ranges from 0.00rem to 0.35rem 54 55 the expression calc(1rem + ((1vw - .48rem) * 1.4)) 56 ranges from 0.65rem to 1.14rem 57 58 <p id="ptest1" style="padding: 1rem 2rem; font-size: calc(1vw - .48rem)"> 59 Lorem ipsum dolor sit amet, consectetur adipiscing elit, <br> 60 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 61 </p> 62 <p id="ptest2" style="padding: 1rem 2rem; font-size: calc(1rem + ((1vw - .48rem) * 1.4))"> 63 Lorem ipsum dolor sit amet, consectetur adipiscing elit, <br> 64 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 65 </p> 66 <p id="ptest3" style="padding: 1rem 2rem;"> 67 Lorem ipsum dolor sit amet, consectetur adipiscing elit, <br> 68 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 69 </p> 70 71 72 <script> 73 function convertRemToPixels(rem) { 74 return rem * parseFloat(getComputedStyle(document.documentElement).fontSize); 75 } 76 { 77 var px = document.getElementById("ptest1"); 78 var st = window.getComputedStyle(px); 79 px.innerHTML += "<br> font-size " + st.fontSize + " - " + parseFloat(st.fontSize)/convertRemToPixels(1.0) + "rem"; 80 } 81 { 82 var px = document.getElementById("ptest2"); 83 var st = window.getComputedStyle(px); 84 px.innerHTML += "<br> font-size " + st.fontSize + " - " + parseFloat(st.fontSize)/convertRemToPixels(1.0) + "rem"; 85 } 86 { 87 var px = document.getElementById("ptest3"); 88 var st = window.getComputedStyle(px); 89 px.innerHTML += "<br> font-size " + st.fontSize + " - " + parseFloat(st.fontSize)/convertRemToPixels(1.0) + "rem"; 90 } 91 </script> 92 93 94 */ 95 font-size: clamp(0.75rem, calc(0.8rem + ((1vw - .48rem) * 1.2)), 0.90rem); 96 97 /* color: var(--clr-fg); */ 98 99 background: var(--clr-bg); 100 font-weight: 400; 101 102 font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 103 font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; 104 105 /* zew */ 106 font-family: "MetaWeb", Verdana, sans-serif; 107 108 /* welt.de */ 109 font-family: 'Helvetica Neue', Helvetica, Arial , sans-serif; 110 111 /* markdown viewer */ 112 font-family: -apple-system,BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; 113 } 114 115 /* body base settings */ 116 body { 117 margin: 0; 118 padding: 0; 119 } 120 121 122 123 /* 124 ========================================== 125 four styles to make .content fill 126 the remaining height 127 without vertical scroll bar 128 129 stackoverflow.com/questions/90178 130 ========================================== 131 */ 132 133 html { 134 /* body height 100% is not sufficient */ 135 height: 100%; 136 } 137 body { 138 height: 100%; 139 display: flex; 140 flex-direction: column; /* nav and .content */ 141 } 142 143 nav { 144 /* flex-grow 0 => take up no free height */ 145 flex: 0 1 auto; 146 } 147 148 .content { 149 /* flex-grow 1 => take up all free height */ 150 flex: 1 1 auto; 151 } 152 153 /* 154 ========================================== 155 */ 156 157 158 159 160 /* remove firefox focus outline *inside* button */ 161 *::-moz-focus-inner { 162 border: 0; 163 } 164 165 /* active, focus and hover stuff - for links, inputs and buttons */ 166 167 a:active, a:hover { 168 outline: 0; 169 } 170 171 /* inputs and links - active style 172 hover for links handled separately 173 */ 174 *:focus { 175 /* outline: 4px solid var(--clr-pri-hov); */ 176 177 /* remove all classic focus rectangles */ 178 outline: none; 179 180 /* like border - but without displacement */ 181 box-shadow: 182 0 0 0 0.175em var(--clr-sec), 183 0 0 0 0.250em var(--clr-pri-hov); 184 box-shadow: 185 0 0 0 0.075em var(--clr-sec), 186 0 0 0 0.150em var(--clr-pri-hov); 187 } 188 189 a { 190 color: var(--clr-pri); 191 text-decoration: none; 192 } 193 194 /* unvisited links */ 195 a:link { 196 color: var(--clr-pri); 197 } 198 199 a:visited { 200 color: var(--clr-pri-vis); 201 } 202 203 /* default hover for links and buttons */ 204 a:hover, button:hover { 205 /* color: var(--clr-pri-hov); */ 206 box-shadow: 207 0 0 0 0.175em var(--clr-sec), 208 0 0 0 0.210em var(--clr-pri-hov); 209 } 210 211 nav a[href=""].is-active { 212 color: var(--clr-fg); 213 font-weight: bold; 214 } 215 216 /* undoing hyperlink effects */ 217 nav a[href=""].is-active:hover { 218 color: var(--clr-fg) ; 219 } 220 nav a[href=""].is-active:focus { 221 color: var(--clr-fg) ; 222 } 223 nav a[href=""].is-active:hover::after { 224 transform: scale(0, 1); 225 } 226 227 nav a.logo, 228 nav a.title 229 { 230 justify-self: center; 231 } 232 233 234 /* text after logo */ 235 nav a.title { 236 padding: 0.3rem 0.3rem; 237 padding-right: 0.6rem; 238 font-weight: 500; 239 letter-spacing: 0.01rem; 240 border-radius: 0.3rem; 241 } 242 243 /* text after logo - three sub components */ 244 /* i.e. ZEW */ 245 nav a.title span.survey-org { 246 font-size: 120%; 247 } 248 249 /* i.e. Finanzmarkttest */ 250 nav a.title span.survey-name { 251 font-size: 120%; 252 line-height: 100%; 253 } 254 255 /* i.e. 2021-02 */ 256 nav a.title span.survey-wave-id { 257 font-size: 70%; 258 } 259 260 261 /* for debugging 262 263 *:hover { 264 outline: 1px solid var(--clr-pri-hov); 265 } 266 */ 267 268 269 /* selected text - anywhere */ 270 ::selection { 271 color: var(--clr-input-bg); 272 background: var(--clr-input-fg); 273 } 274 275 276 277 /* ===================================== */ 278 /* common elements stuff */ 279 280 p, h1, h2, h3, li { 281 padding: 0.26em 0; 282 } 283 284 h2 { 285 font-size: 1.3rem; 286 } 287 h3 { 288 font-size: 1.15rem; 289 } 290 h4 { 291 font-size: 1.05rem; 292 } 293 294 h1, h2, h3, h4, h5, h6, h7 { 295 line-height: 1.6em; 296 margin-top: 1.4em; 297 margin-bottom: 0.1em; 298 } 299 300 /* stackoverflow.com/questions/1132366/ */ 301 div.markdown>h1, 302 h1+h1, h1+h2, h1+h3, h1+h4, h1+h5, h1+h6, 303 h2+h2, h2+h3, h2+h4, h2+h5, h2+h6, 304 h3+h3, h3+h4, h3+h5, h3+h6, 305 h4+h4, h4+h5, h4+h6, 306 dummy { 307 margin-top: 0.1em; 308 } 309 310 311 p { 312 text-align: justify; 313 } 314 315 pre { 316 overflow: auto; 317 318 background: #eee; 319 font-family: "Courier 10 Pitch", Courier, monospace; 320 font-size: .9rem; 321 line-height: 1.6; 322 max-width: 100%; 323 margin: 0.2em 0.95em; 324 padding: 0.5em 0.60em; 325 } 326 327 img { 328 height: auto; 329 max-width: 100%; 330 } 331 332 svg:not(:root) { 333 overflow: hidden; 334 } 335 336 ol, ul { 337 list-style: none; 338 } 339 340 .content ul { 341 margin-top: 0.3rem; 342 margin-bottom: 0.5rem; 343 } 344 345 .content li { 346 margin-left: 1.1rem; 347 } 348 349 .content ul li { 350 list-style-type: square; 351 } 352 353 .content ol li { 354 list-style-type: decimal; 355 } 356 357 hr { 358 border: 1.5px solid var(--clr-fg); 359 margin-top: 0.5rem; 360 margin-bottom: 0.6rem; 361 } 362 363 div.separator { 364 height: 1px; 365 border-top: 1px solid var(--clr-sec-drk2); 366 367 padding: 0; 368 margin: 0; 369 margin-top: 4px; 370 margin-bottom: 12px; 371 } 372 373 374 375 /* foot notes */ 376 sup { 377 font-size: 80%; 378 position: relative; 379 top: -3px; 380 vertical-align: baseline; 381 } 382 383 /* table stuff */ 384 385 table { 386 border-collapse: collapse; 387 border-spacing: 0; 388 width: 100%; 389 } 390 391 td, th { 392 vertical-align: top; 393 padding: 0; 394 } 395 396 th { 397 padding: .4em; 398 text-align: left; 399 } 400 401 tr { 402 /* border-bottom: 1px solid #eee; */ 403 } 404 405 td { 406 padding: .4em; 407 } 408 409 /* form stuff */ 410 411 form, .form-alike { 412 width: 100%; 413 /* max-width: clamp(32rem, 96vw, 36rem); */ 414 415 padding: 0.1rem 0.6rem; 416 background-color: var(--clr-sec); 417 } 418 419 form { 420 display: inline-block; 421 margin: 0; 422 padding: 0; 423 } 424 425 legend { 426 border: 0; 427 padding: 0.1em 0.3em; 428 margin-left: 0.3em; 429 430 font-size: 100%; /* like label */ 431 letter-spacing: 0.03rem; 432 font-weight: 300; /* visibility in mobile browser */ 433 } 434 435 label, .postlabel { 436 437 display: inline-block; 438 vertical-align: middle; 439 440 /* 2021-02 - not needed in CSS grid */ 441 /* for vertical alignment */ 442 /* padding-bottom: 0.15rem; */ 443 /* margin-right: 0.5rem; */ 444 445 font-size: 100%; /* like legend */ 446 line-height: 120%; 447 letter-spacing: 0.03rem; 448 xx-font-weight: 300; /* visibility in mobile browser */ 449 450 451 /* 2021-02 - not needed in CSS grid */ 452 xx-white-space: nowrap; /* explicit wrapping using -<br> */ 453 /* like pre but lines too long are broken 454 not stretching the container 455 extends to 100% of container 456 thus container [max]-width should be specified 457 458 pre-wrap => preserve white space 459 pre-line => collapse white space 460 */ 461 xx-white-space: pre-wrap; /* see also .postlabel, .plain-text-broken and .error */ 462 463 /* text-align: right; */ 464 465 /* make flexible with media query if needed */ 466 min-width: 2rem; /* attention: overflow in multicolumn */ 467 } 468 469 470 div.struc2frm button[type=submit], 471 div.struc2frm input[type=submit] 472 dummy { 473 margin-left: calc(8rem + 0.7rem); /* same as label min-width plus label margin */ 474 } 475 476 477 label.top { 478 top: 0.15rem; 479 } 480 481 label.bottom { 482 top: inherit; 483 bottom: 0.00rem; 484 } 485 486 .postlabel { 487 /* font-size: 0.78rem; */ 488 text-align: left; 489 /* 490 margin-left: 0.35rem; 491 margin-right: 0.01rem; */ 492 493 min-width: inherit; /* reset from label */ 494 } 495 496 /* 497 fieldset flex horizontal does not work in chrome. 498 stackoverflow.com/questions/28078681 499 Use this instead 500 501 <fieldset class="border"> 502 <legend>... 503 <div class="flex-horizonal"> 504 505 */ 506 507 fieldset { 508 margin: 0.65em -0.2em; 509 margin: 0.65em 0.0em; 510 border: none; 511 } 512 513 fieldset.border { 514 padding: 0.550em 0.6em; 515 border: 0.150em solid var(--clr-sec-drk2); 516 border-radius: 0.5rem; 517 } 518 519 /* normalize form elements - start */ 520 521 button, input, optgroup, select, textarea { 522 color: inherit; 523 font: inherit; 524 margin: 0; 525 } 526 527 textarea { 528 overflow: auto; 529 } 530 531 button { 532 overflow: visible; 533 } 534 535 button, select { 536 text-transform: none; 537 } 538 539 button, html input[type="button"], input[type="reset"], input[type="submit"] { 540 -webkit-appearance: button; 541 cursor: pointer; 542 } 543 544 button[disabled], html input[disabled] { 545 cursor: default; 546 } 547 548 button::-moz-focus-inner, input::-moz-focus-inner { 549 border: 0; 550 padding: 0; 551 } 552 553 input { 554 line-height: normal; 555 } 556 557 input[type="checkbox"], input[type="radio"] { 558 -webkit-box-sizing: border-box; 559 box-sizing: border-box; 560 padding: 0; 561 } 562 563 input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { 564 height: auto; 565 } 566 567 /* normalize form elements - end */ 568 569 input, select, button, textarea, a.button { 570 padding: 0.2em 0.1em; 571 padding-top: 0.15em; /* moving the baseline upwards */ 572 padding-bottom: 0.25em; 573 574 margin: 0.2em 0; /* 2021-02 - horizontal padding for label post - pre is handled by grid-column-gap */ 575 margin-right: 0.3rem; 576 border-radius: 0.15em; 577 /* font-size: 0.9rem; */ 578 font-weight: 400; 579 line-height: 1.2; 580 581 /* width: calc(100% - 1rem); */ 582 /*width: 120px;*/ /*prevents the size attribute from working*/ 583 /* width: 100%; */ 584 585 color: var(--clr-input-fg); 586 background-color: var(--clr-input-bg); 587 588 589 border: 1px solid #888; /* chrome defaults to 2 pixel shadow */ 590 } 591 592 input[type="number"] { 593 text-align: right; 594 padding-right: 0.2rem; 595 } 596 597 /* make the placeholder lighter */ 598 ::placeholder { 599 color: #000; 600 opacity: 0.20; 601 } 602 603 /* 604 valid style only for non empty inputs would be 605 input:not([value=""]):focus:valid 606 but its impossible with CSS: stackoverflow.com/questions/16952526/ 607 */ 608 input:focus:valid { 609 } 610 611 input:not([type=submit]):valid { 612 } 613 614 input:not([type=submit]):focus:valid { 615 background-color: var(--clr-bg-valid); 616 } 617 618 input:not([type=submit]):invalid, 619 input:not([type=submit]):focus:invalid 620 { 621 background-color: var(--clr-bg-invalid); 622 } 623 624 input:disabled, select:disabled { 625 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAIklEQVQIW2NkQAKrVq36zwjjgzhhYWGMYAEYB8RmROaABADeOQ8CXl/xfgAAAABJRU5ErkJggg==) repeat; 626 } 627 628 /* Hide HTML5 Up and Down arrows. */ 629 /* www.thatstevensguy.com/programming/disable-arrows-on-number-inputs/ */ 630 input[type="number"]::-webkit-outer-spin-button, 631 input[type="number"]::-webkit-inner-spin-button { 632 -webkit-appearance: none; 633 margin: 0; 634 } 635 636 input[type="number"] { 637 -moz-appearance: textfield; 638 } 639 640 a.button { 641 display: inline-block; 642 text-align: center; 643 } 644 645 button, input[type="submit"], input[type="reset"], a.button { 646 padding: 0.5em 0.9em; 647 padding-bottom: 0.6em; 648 background-color: var(--clr-pri); 649 color: var(--clr-fg); 650 color: var(--clr-sec); 651 font-weight: 500; 652 } 653 654 /* suppressing default arrow icon from dropdown */ 655 select::-ms-expand { 656 display: none; 657 } 658 659 select { 660 /* -moz-appearance: none; 661 -webkit-appearance: none; 662 appearance: none; */ 663 text-indent: 1px; 664 text-overflow: ''; 665 border: none; 666 667 /* suppressing light blue background from options - does not work */ 668 outline: none; 669 } 670 671 option { 672 padding: 0.4em; 673 color: #000; 674 background-color: transparent; 675 border: none; 676 } 677 678 select:-moz-focusring { 679 color: transparent; 680 text-shadow: 0 0 0 #000; 681 } 682 683 /* 684 select-inputs with long labels should not stretch their container 685 stackoverflow.com/questions/2591796 686 687 2021-02: 688 all it takes to preven long options from stretching the select: 689 max-width: 80px; 690 691 */ 692 select { 693 max-width: 99% !important; 694 /*overflow: hidden !important; */ 695 } 696 option { 697 max-width: 99% !important; 698 /*overflow: hidden !important; */ 699 } 700 701 702 /* 703 artificial arrow icon for select/dropdown 704 by wrapping a div around each select ; 705 looks more stylish; 706 the arrow is creatd by the ::after pseudo tag; 707 requires the dropdown button itself to be suppressed; 708 709 even when the pseudo class is disabled, this style must be set; 710 711 also created by struc2frm 712 */ 713 .select-arrow { 714 position: relative; 715 display: inline-block; 716 margin: 0; 717 padding: 0; 718 } 719 720 div.wildcardselect { 721 display: inline-block; 722 margin-top: 0.2rem; 723 vertical-align: top; 724 } 725 div.wildcardselect input { 726 font-size: 80%; 727 padding: 1px; 728 margin: 2px; 729 width: 2.2rem; 730 } 731 732 .DISABLED-select-arrow::after { 733 734 /* display: inline-block; */ 735 position: absolute; 736 right: 1.5rem; 737 top: 1.3rem; 738 /* z-index: 103; */ 739 740 pointer-events: none; 741 742 content: " "; 743 width: 0.6em; 744 height: 0.6em; 745 746 transform-origin: center; 747 transform: rotate(-45deg); 748 /* background-color: blueviolet; */ 749 background: transparent; 750 color: var(--clr-pri); 751 border-left: 2px solid var(--clr-pri); 752 border-bottom: 2px solid var(--clr-pri); 753 } 754 755 input[type=checkbox], 756 input[type=radio] { 757 758 display: inline-block; 759 /* inline-block needs some width; 760 firefox takes it as base for scale(2) below; 761 */ 762 width: 1.2em; 763 /* even better: no bloated focus rectangle */ 764 width: auto; 765 766 vertical-align: middle; 767 margin: 0.40rem 0.45rem; /* labels far away enough from scaled input; padding is useless here */ 768 769 /* margin-bottom: 0.45rem; */ /* 2021-02 - height correction removed */ 770 771 /* 772 zoom: 2.0; 773 height: 2.0em; 774 775 both no worki on firefox - though in chrome 776 therefore we resort to scale: 777 */ 778 /* transform: scale(2.25); */ 779 transform: scale(1.75); 780 781 /* 782 all these are ignored: 783 color: crimson; 784 background-color: bisque; 785 border: 1px solid red !important; 786 */ 787 788 } 789 790 /* 791 firefox and chrome need different scaling 792 stackoverflow.com/questions/952861 793 */ 794 @supports (-moz-appearance:none) { 795 /* p { color:red; } */ 796 input[type=checkbox], 797 input[type=radio] { 798 transform: scale(1.50); 799 } 800 } 801 @-moz-document url-prefix() { 802 input[type=checkbox], 803 input[type=radio] { 804 transform: scale(1.50); 805 } 806 } 807 808 809 810 input[type=checkbox]:focus, 811 input[type=radio]:focus { 812 /* scale(2) also scales the focus rectangle :( */ 813 box-shadow: 814 0 0 0 0.090em var(--clr-sec-lgt2), 815 0 0 0 0.110em var(--clr-pri-hov); 816 817 } 818 819 820 .error{ 821 color: var(--clr-err); 822 line-height:1.6em; 823 } 824 825 826 /* 827 this is a mere marker for javascript 828 document.querySelectorAll(".error-block-input") 829 to put focus on 830 */ 831 .error-block-input{ 832 833 } 834 835 /* 836 subset of 837 .popup-invalid-content-grid-item 838 839 reproduces the aura 840 */ 841 .error-aura { 842 background-color: var(--clr-sec-lgt2); 843 padding: 0.21rem 0.4rem; 844 border: 1px solid var(--clr-err); 845 border-radius: 0.3rem; 846 font-size: 88%; 847 line-height: 90%; 848 } 849 850 851 #console-log { 852 color: black; 853 background-color: white; 854 /* like pre but lines too long are broken 855 not stretching the container 856 extends to 100% of container 857 thus container [max]-width should be specified 858 859 pre-wrap => preserve white space 860 pre-line => collapse white space 861 */ 862 white-space: pre-wrap; /* see also .postlabel, .plain-text-broken and .error */ 863 line-height: 120%; 864 background-color:#eee; 865 margin: 8px 0; 866 margin-left: 46px; 867 padding: 0.2rem 0.8rem; 868 border: 1px solid lightblue; 869 870 display: none; 871 872 } 873 874 /* text helpers */ 875 876 877 .bold { 878 font-weight: bold; 879 } 880 881 /* 882 We want to prevent line-break of the '%' or '€' suffix character. 883 inputs must be inline-block, for whitespace nowrap to work. 884 At the same time: suffix-inner enables wrapping for the suffix itself 885 */ 886 .suffix-nowrap { 887 white-space: nowrap; 888 } 889 890 .suffix-inner { 891 892 display: inline-block; 893 /* width: 75%; */ /* 2021-02 - disabled */ 894 895 /* vertical-align: top; */ 896 white-space: normal !important; /* overriding outer element setting */ 897 898 font-size: 95%; /* like label and suffix */ 899 letter-spacing: 0.03rem; 900 901 } 902 903 .question-mark-tooltip { 904 display: inline-block; 905 margin-left: 0.6rem; 906 margin-bottom: 0.3rem; 907 font-size: 70%; 908 vertical-align: middle; 909 cursor: pointer; 910 } 911 912 .plain-text-broken { 913 /* like pre but lines too long are broken 914 not stretching the container 915 extends to 100% of container 916 thus container [max]-width should be specified 917 */ 918 white-space: pre-wrap; /* see also .postlabel, .plain-text-broken and .error */ 919 920 display: inline-block; 921 font-family: 'Courier New', Courier; 922 923 } 924 925 926 927 928 929 /* ================= flex grid stuff - start ================= */ 930 931 /* flexbox container */ 932 .flex-horizonal { 933 display: flex; 934 flex-direction: row; 935 936 justify-content: space-around; /* axis-1: [start, end, baseline, space-between] */ 937 align-content: space-around; /* justify-content of the whole multi-lined compound */ 938 939 align-items: center; /* axis-2 */ 940 /* counterpart to align-self on flex-item */ 941 /* [stretch | flex-end | flex-start] */ 942 943 flex-wrap: nowrap; 944 945 /* gap is supported by firefx + chrome */ 946 /* gap: 0.1em; */ 947 } 948 949 /* instead of center */ 950 .flex-horizonal-top { 951 align-items: start ; 952 align-items: baseline; 953 } 954 955 /* flexbox container 2 */ 956 .flex-vertical { 957 display: flex; 958 flex-direction: column; 959 960 justify-content: space-around; 961 align-content: space-around; 962 963 align-items: center; 964 965 flex-wrap: nowrap; 966 } 967 968 .wrap { 969 flex-wrap: wrap; 970 } 971 972 .flex-item { 973 flex-grow: 1; /* extra space is allocated 1 / (sum of all flex-grow) */ 974 flex-shrink: 1; 975 flex-basis: inherit; /* multiplier for flex-shrink and -grow */ 976 align-self: inherit; /* counterpart to container-align-items*/ 977 978 /* order: 1; */ /* overrides the HTML order - screen reader and tab order get messed up */ 979 } 980 981 .flex-item-horizontal { 982 border: none; 983 border: 0.2em solid #252; 984 border: 0.2em solid transparent; 985 border-left: 0.1em solid transparent; 986 border-right: 0.5em solid transparent; 987 } 988 989 .flex-item-vertical { 990 border-bottom: 0.75em solid transparent; 991 border-top: 0.75em solid transparent; 992 } 993 994 .flex-item-center { 995 text-align: center; 996 } 997 998 .flex-item-horizontal, 999 .flex-item-vertical { 1000 /* background-color: blueviolet; */ 1001 } 1002 1003 /* for javascript trigggered testing */ 1004 .directionColumn { 1005 max-height: 20rem; 1006 flex-direction: column; 1007 } 1008 /* ================= flex grid stuff - end ================= */ 1009 1010 1011 /* ================= nav start =================== */ 1012 /* nav mobile start */ 1013 1014 /* 1015 mobile case 1016 1017 nav 1018 logo 1019 1st level - consisting of invisible toggle and visible label 'burger' 1020 2nd level menu 1021 3rd level menu 1022 1023 desktop case 1024 1025 nav 1026 logo 1027 2nd level menu 1028 3rd level menu 1029 1030 */ 1031 nav { 1032 position: var(--nav-bar-position); 1033 z-index: 103; /* over content*/ 1034 width: 100%; 1035 /* min-height: var(--nav-height); */ /* mobile view horizontal */ 1036 display: grid; 1037 grid-template-columns: 4fr 4fr 3.0em [col-menu] 2em 0.15fr; 1038 grid-template-columns: [col-img] 6fr [col-title] 4fr [col-menu] 1.3fr; 1039 1040 /* main axis */ 1041 /* 1042 css-tricks.com/snippets/css/a-guide-to-flexbox/ 1043 css-tricks.com/wp-content/uploads/2018/10/justify-content.svg 1044 justify-content: center plus using up all width: space-around 1045 */ 1046 justify-content: right; 1047 /* justify-items: center; /* not ignored - as some sources say */ 1048 /* justify-self below */ 1049 /* no justify-items and no justify-self? stackoverflow.com/questions/32551291/ */ 1050 /* cross axis */ 1051 /* css-tricks.com/wp-content/uploads/2018/10/align-items.svg */ 1052 align-content: space-around; 1053 align-items: center; 1054 1055 background-color: var(--clr-sec); 1056 1057 } 1058 1059 nav a.logo, 1060 nav a.title 1061 { 1062 display: inline-block; 1063 vertical-align: middle; 1064 1065 position: relative; 1066 1067 color: var(--clr-pri); 1068 1069 font-size: unset; 1070 line-height: unset; 1071 letter-spacing: 0.10rem; 1072 /* white-space: nowrap; */ 1073 } 1074 1075 /* placeholder for img insertion */ 1076 nav a.logo img { 1077 display: inline-block; /* activates margins */ 1078 vertical-align: middle; 1079 1080 position: relative; 1081 top: 0.15rem; 1082 left: -0.10rem; 1083 1084 /* height: calc(var(--nav-height) - 0.8rem); */ /* mobile view horizontal */ 1085 1086 margin-right: 0.2rem; 1087 1088 /* requires display, width and height being set */ 1089 /* content: var(--img-logo-icon); */ 1090 1091 /* not working in firefox 1092 https://css-tricks.com/replace-the-image-in-an-img-with-css/ 1093 does not work for unknown sizes 1094 */ 1095 } 1096 1097 1098 nav a.logo .logo-img-desktop { 1099 } 1100 1101 nav a.logo .logo-img-mobile { 1102 display: none; 1103 } 1104 1105 1106 /* dont color logo as 'visited' */ 1107 .logo:visited { 1108 color: var(--clr-pri); 1109 } 1110 1111 .login-icon { 1112 grid-column: col-menu/span 1; 1113 justify-self: center; 1114 } 1115 1116 img.logged-in { 1117 display: inline-block; 1118 position: relative; 1119 top: 0.20rem; 1120 width: 1.6rem; 1121 height: 1.4rem; 1122 /* requires diplay, width and height being set */ 1123 content: var(--img-loggedin-icon); 1124 } 1125 /* 1126 checkbox; 1127 out of sight; but not invisible; 1128 => can receive fo-cus, keeping it tabbable, showing a pseudo fo-cus on its label 1129 */ 1130 .mnu-1st-lvl-toggler { 1131 position: absolute !important; 1132 top: -9999px !important; 1133 left: -9999px !important; 1134 } 1135 /* burger is the label for mnu-1st-lvl-toggler */ 1136 /* only non-systematic name; instead of mnu-1st-lvl-label */ 1137 .burger { 1138 cursor: pointer; 1139 grid-column: col-menu/span 1; 1140 1141 /* width: 1.32em; */ 1142 font-size: 1.0rem; 1143 1144 white-space: normal; /* undo label */ 1145 1146 justify-self: center; 1147 align-self: center; 1148 1149 } 1150 1151 /* burger label contents */ 1152 .burger div{ 1153 width: 25px; 1154 height: 3px; 1155 background-color: var(--clr-pri); 1156 margin: 5px 0; 1157 } 1158 1159 /* 1160 labels dont have a focus - only the referenced input has; 1161 which is out of sight; 1162 => *simulate* focus on burger / label 1163 */ 1164 .mnu-1st-lvl-toggler:focus ~ .burger { 1165 box-shadow: 1166 0 0 0 0.175em var(--clr-sec), 1167 0 0 0 0.250em var(--clr-pri-hov); 1168 } 1169 1170 /* burger animation */ 1171 .mnu-1st-lvl-toggler:checked ~ .burger .line1 { 1172 transform: rotate(-45deg) translate(-5px, 6px); 1173 transition: transform 67ms ease-in; 1174 } 1175 .mnu-1st-lvl-toggler:checked ~ .burger .line2 { 1176 opacity: 0; 1177 transition: opacity 14ms ease-in-out; 1178 } 1179 .mnu-1st-lvl-toggler:checked ~ .burger .line3 { 1180 transform: rotate(45deg) translate(-5px, -6px); 1181 transition: transform 67ms ease-in; 1182 } 1183 1184 /* 2nd level menu - inside nav */ 1185 ul.mnu-2nd-lvl { 1186 1187 position: absolute; 1188 z-index: 199; 1189 right: 0; 1190 top: var(--nav-height); 1191 1192 background-color: var(--clr-sec); 1193 1194 display: flex; 1195 flex-direction: column; 1196 /* vertical align; interacts with margins on ul.mnu-2nd-lvl a */ 1197 align-items: center; 1198 width: 60%; 1199 width: 66%; 1200 height: auto; 1201 /* height: var(--nav-rest-height); */ 1202 1203 padding-bottom: 0.4em; 1204 border-left: 6px solid var(--clr-sec-drk2); 1205 border-bottom: 6px solid var(--clr-sec-drk2); 1206 1207 1208 /* 1209 css-tricks.com/snippets/css/a-guide-to-flexbox/ 1210 css-tricks.com/wp-content/uploads/2018/10/justify-content.svg 1211 justify-content: center plus using up all width: space-around 1212 */ 1213 justify-content: space-around; 1214 1215 /* multi line flex */ 1216 /* flex-wrap: wrap; 1217 align-content: stretch; 1218 align-content: flex-end; 1219 */ 1220 transform-origin: top; 1221 1222 } 1223 /* second level menu item */ 1224 ul.mnu-2nd-lvl li { 1225 width: 100%; 1226 } 1227 1228 /* second level menu item - with a 3rd level child node */ 1229 ul.mnu-2nd-lvl li.nde-2nd-lvl { 1230 /* relative positioning - a fix point for third level dropdown */ 1231 position: relative; 1232 /* reserve room for the pseudo element icon */ 1233 /* padding-right: 2em; */ 1234 } 1235 1236 /* second level item - icon to open third level */ 1237 ul.mnu-2nd-lvl li.nde-2nd-lvl::before { 1238 1239 position: absolute; 1240 z-index: 105; 1241 display: block; 1242 1243 content: ' '; 1244 1245 width: 0.7em; 1246 height: 0.7em; 1247 1248 pointer-events: none; 1249 1250 right: 1.7em; 1251 top: 1.16em; 1252 1253 background-color: blueviolet; 1254 background: transparent; 1255 1256 transform-origin: center; 1257 transform: rotate(-45deg); 1258 1259 color: var(--clr-pri); 1260 border-left: 2px solid var(--clr-pri); 1261 border-bottom: 2px solid var(--clr-pri); 1262 1263 } 1264 /* static styling of all the links inside menu */ 1265 ul.mnu-2nd-lvl a { 1266 display: inline-block; 1267 width: auto; 1268 1269 padding: 0.12em 0.8em; /* padding here - for focus rectangle distance */ 1270 margin: 0.75em 1.0em; 1271 1272 border-radius: 0.35em; 1273 1274 color: var(--clr-pri); 1275 font-size: 1.02rem; 1276 text-decoration: none; 1277 letter-spacing: 0.10em; 1278 } 1279 ul.mnu-2nd-lvl a:hover, 1280 ul.mnu-2nd-lvl a:focus 1281 { 1282 color: var(--clr-pri-hov); 1283 } 1284 /* animations from checkbox switching 2st level menu on and off... */ 1285 1286 /* contract menu by unchecking */ 1287 ul.mnu-2nd-lvl { 1288 transition: transform 130ms ease-in-out; 1289 transform: scaleY(0); 1290 } 1291 1292 /* expand menu by checking */ 1293 .mnu-1st-lvl-toggler:checked ~ ul.mnu-2nd-lvl { 1294 transition: transform 240ms ease-in-out; 1295 transform: scaleY(1); 1296 } 1297 1298 /* hide links by unchecking */ 1299 ul.mnu-2nd-lvl a { 1300 visibility: hidden; /* => no tabbing */ 1301 opacity: 0; 1302 transition: opacity 190ms ease-in-out; 1303 } 1304 1305 /* show links by checking - with delay */ 1306 .mnu-1st-lvl-toggler:checked ~ ul.mnu-2nd-lvl a { 1307 visibility: visible; 1308 opacity: 1; 1309 transition: opacity 190ms ease-in-out 250ms; 1310 } 1311 /* static menu third level - 3rd level */ 1312 ul.mnu-3rd-lvl { 1313 1314 display: block; 1315 position: relative; /* vertically embed - for horizontal breakout: absolutes */ 1316 1317 top: 50%; 1318 left: 1.2em; /* reset */ 1319 right: inherit; 1320 1321 width: calc(100% - 1.2em); 1322 /* z-index: 120; */ 1323 background-color: var(--clr-sec); 1324 /* background-color: var(--clr-zew2-md); */ 1325 /* box-shadow: 0 0 0.1em 0.4em darkorchid; */ 1326 1327 transform-origin: top; 1328 } 1329 1330 /* 1331 show hide 3rd level 1332 state closed - default 1333 */ 1334 ul.mnu-3rd-lvl { 1335 1336 /* 1337 visibility hidden does not free the space of the 3rd level menu. 1338 display:none does, but also removes the links inside from tab order. 1339 => we can only move the menu out of layout flow using position: absolute; 1340 then combining position relative, transform and opacity 1341 to animate it into existence 1342 */ 1343 position: absolute; 1344 transform: scaleY(0.0); 1345 opacity: 0.0; 1346 1347 transition: 1348 transform 180ms ease-in-out, 1349 opacity 180ms ease-in-out 1350 ; 1351 1352 } 1353 /* 1354 state opened - by focus/hover over parent .nde-2nd-lvl or focus on itself + its children 1355 1356 show 3rd level menu on mouse hover 1357 show 3rd level menu on parent focus 1358 keep showing 3rd level menu, once focus is inside 1359 1360 css-tricks.com/keeping-parent-visible-child-focus/ 1361 */ 1362 .nde-2nd-lvl:hover ul.mnu-3rd-lvl, 1363 .nde-2nd-lvl a:focus ~ ul.mnu-3rd-lvl, 1364 ul.mnu-3rd-lvl:focus-within, 1365 oh-god-this-works-1 { 1366 position: relative; 1367 opacity: 1; 1368 transform: scaleY(1); 1369 } 1370 1371 /* helper class, to hide mnu-3rd-lvl 1372 attached / detached by only via javascript 1373 similar to mnu-3rd-lvl - but stronger because !important 1374 1375 we would love to change li.nde-2nd-lvl::before 1376 into an upward arrow, but pseudo elements 1377 cannot be styled via javascript 1378 */ 1379 .mnu-3rd-lvl-pull-up{ 1380 position: absolute !important; 1381 opacity: 0.0 !important; 1382 transform: scaleY(0.0) !important; 1383 } 1384 1385 ul.mnu-3rd-lvl li { 1386 font-size: 0.95rem; 1387 background-color: var(--clr-sec-drk1); 1388 /* background-image: linear-gradient( -25deg, var(--clr-sec), var(--clr-sec), var(--clr-sec), var(--clr-sec), var(--clr-sec-drk2)); */ 1389 1390 border-bottom: 0.08em solid var(--clr-sec-drk2); 1391 } 1392 1393 ul.mnu-3rd-lvl li a:hover, 1394 ul.mnu-3rd-lvl li a:focus { 1395 box-shadow: 1396 0 0 0 0.175em var(--clr-sec-drk1), 1397 0 0 0 0.250em var(--clr-pri-hov) 1398 ; 1399 } 1400 1401 ul.mnu-3rd-lvl li:last-child { 1402 border-bottom: none; 1403 } 1404 /* nav mobile end */ 1405 1406 /* nav desktop start */ 1407 @media screen and (min-width: 800px) { 1408 1409 nav { 1410 /* unsupported with IE */ 1411 all: unset; 1412 1413 1414 1415 position: var(--nav-bar-position); 1416 z-index: 103; /* over content*/ 1417 1418 width: 100%; 1419 /* min-height: var(--nav-height); */ /* mobile view horizontal */ 1420 background-color: var(--clr-sec); 1421 1422 display: grid; 1423 grid-template-columns: 4fr 4fr 0.7fr 2fr [col-menu] 1fr; 1424 grid-template-columns: [col-img] 6fr [col-title] 4fr [col-menu] 1fr ; 1425 1426 1427 justify-content: right; 1428 1429 align-content: space-around; 1430 align-items: center; 1431 1432 } 1433 1434 .login-icon { 1435 width: 1.4rem; 1436 grid-column: col-menu/span 1; 1437 justify-self: center; 1438 } 1439 1440 .burger { 1441 display: none; 1442 } 1443 1444 ul.mnu-2nd-lvl { 1445 1446 /* all: unset; */ 1447 visibility: visible; 1448 1449 transform: translateX(0); 1450 transition: none; 1451 1452 grid-column: col-menu/span 1; 1453 1454 width: 100%; 1455 1456 position: relative; 1457 top: 0; 1458 right: 0; 1459 1460 display: flex; 1461 flex-direction: row; 1462 1463 /* 1464 css-tricks.com/snippets/css/a-guide-to-flexbox/ 1465 css-tricks.com/wp-content/uploads/2018/10/justify-content.svg 1466 justify-content: center plus using up all width: space-around 1467 */ 1468 justify-content: space-between; 1469 align-content: space-around; 1470 align-items: center; 1471 /* justify-items: center; this property is ignored */ 1472 padding-bottom: 0; 1473 border-left: none; 1474 border-bottom: none; 1475 } 1476 1477 li.nde-2nd-lvl::before { 1478 content: none !important; 1479 } 1480 1481 ul.mnu-3rd-lvl { 1482 1483 position: absolute !important; /* otherwise selector is not strong enough*/ 1484 1485 top: 100%; 1486 left: 0%; 1487 right: inherit; /* reset */ 1488 1489 /* needs being wider than the 2nd lvl menu item => align right last child */ 1490 width: 160%; 1491 } 1492 1493 ul.mnu-2nd-lvl li:last-child ul.mnu-3rd-lvl { 1494 width: 140%; 1495 left: inherit; 1496 /* => align right last child */ 1497 right: -1.4em; 1498 /* background-color: red; */ 1499 } 1500 1501 ul.mnu-2nd-lvl a { 1502 visibility: visible; 1503 opacity: 1; 1504 1505 padding: 0.2em 0.4em; 1506 top: 0.05em; /* compensate for focus ::after */ 1507 1508 box-shadow: none; /* for focus instead animated ::after underline*/ 1509 1510 } 1511 1512 /* hover for links 1: animated underline for the links */ 1513 ul.mnu-2nd-lvl a::after { 1514 content: ''; 1515 display: block; 1516 background-color: var(--clr-pri-hov); 1517 1518 /* position: absolute; */ 1519 position: relative; 1520 left: 0; 1521 right: 0; 1522 1523 height: 0.1em; 1524 bottom: -0.11em; 1525 1526 transform: scale(0, 1); 1527 transition: transform ease-in-out 110ms; 1528 } 1529 /* hover for links 2 */ 1530 ul.mnu-2nd-lvl a:hover::after { 1531 transform: scale(1,1); 1532 } 1533 ul.mnu-2nd-lvl a:focus::after { 1534 transform: scale(1,1); 1535 /* focus gets a stronger bar */ 1536 box-shadow: 0 0 0 0.02em var(--clr-pri-hov) ; 1537 } 1538 li.nde-2nd-lvl { 1539 /* restore reserved space for pseudo element icon */ 1540 padding-right: 0.0em; 1541 } 1542 1543 ul.mnu-3rd-lvl li { 1544 background-color: var(--clr-sec); 1545 padding-bottom: 0.4em; 1546 border-right: 0.15rem solid var(--clr-sec-drk2); 1547 border-left: 0.15rem solid var(--clr-sec-drk2); 1548 1549 } 1550 1551 ul.mnu-3rd-lvl li:last-child { 1552 border-bottom: 0.15rem solid var(--clr-sec-drk2); 1553 } 1554 1555 ul.mnu-3rd-lvl li a:hover, 1556 ul.mnu-3rd-lvl li a:focus { 1557 box-shadow: none; 1558 } 1559 } 1560 1561 /* nav desktop end */ 1562 1563 /* child of body - sibling of nav - parent of hori-center-me */ 1564 .content { 1565 1566 width: 100%; 1567 1568 margin: 0 auto; 1569 padding: 0; 1570 1571 position: relative; 1572 top: var(--content-top); 1573 1574 /* to test scrolling: min-height: 120vh; */ 1575 /* min-height: 91.6vh; */ 1576 /* min-height: calc(100vh - var(--nav-height)); */ 1577 1578 background-color: var(--clr-sec-drk1); 1579 background-color: var(--clr-sec); 1580 background-color: var(--clr-sec-lgt2); 1581 background-blend-mode: multiply; 1582 background-size: cover; 1583 1584 } 1585 1586 1587 form[name=frmMain] { 1588 /* 1589 width: 100%; 1590 margin: 0; 1591 padding: 0; 1592 border: none; 1593 */ 1594 } 1595 1596 .page-static { 1597 max-width: 50rem; 1598 margin: 0 auto 1599 } 1600 1601 1602 1603 1604 1605 /* more helper stuff */ 1606 1607 .vspacer-00, 1608 .vspacer-08, 1609 .vspacer-16, 1610 dummy 1611 { 1612 margin: 0; 1613 clear: both; 1614 } 1615 1616 .vspacer-0,.vspacer-00 { 1617 height: 0px; 1618 } 1619 1620 .vspacer-2,.vspacer-02 { 1621 height: 2px; 1622 } 1623 1624 .vspacer-8,.vspacer-08 { 1625 height: 8px; 1626 } 1627 1628 .vspacer-16 { 1629 height:16px; 1630 } 1631 1632 .vspacer-24 { 1633 height:24px; 1634 } 1635 1636 .ib { 1637 display:inline-block; 1638 vertical-align: middle; 1639 /* width:150px; no width; leave it dynamic*/ 1640 white-space:nowrap; /* forced to div to stretch as wide as it's contents */ 1641 } 1642 1643 .ib-030, .ib-060, .ib-090, .ib-120, .ib-150, .ib-200, .ib-250, .ib-300 { 1644 display:inline-block; 1645 vertical-align: middle; 1646 white-space:nowrap; 1647 } 1648 1649 .ib-030 { min-width:030px; } 1650 .ib-060 { min-width:060px; } 1651 .ib-090 { min-width:090px; } 1652 .ib-120 { min-width:120px; } 1653 .ib-150 { min-width:150px; } 1654 .ib-200 { min-width:200px; } 1655 .ib-250 { min-width:250px; } 1656 .ib-300 { min-width:300px; } 1657 1658 input.ib-060 { width:060px; } 1659 input.ib-090 { width:090px; } 1660 input.ib-120 { width:120px; } 1661 input.ib-150 { width:150px; } 1662 input.ib-200 { width:200px; } 1663 input.ib-250 { width:250px; } 1664 input.ib-300 { width:300px; } 1665 1666 1667 /* 1668 validation bubble messages - start 1669 validation playground 1670 */ 1671 .popup-invalid-anchor { 1672 width: 0px; 1673 height: 0px; 1674 margin: 0; 1675 padding: 0; 1676 1677 /* anchor for content */ 1678 position: relative; 1679 1680 /* below input */ 1681 display: block; /* forcing newline */ 1682 width: 100%; 1683 } 1684 1685 .popup-invalid-content { 1686 1687 position: absolute; 1688 z-index: 212; /* must be greater than nav/menu */ 1689 1690 border-radius: 0.3rem; 1691 padding: 0.1rem 0.4rem; 1692 padding-top: 0; 1693 border: 1px solid var(--clr-err); 1694 border-top: none; 1695 1696 background-color: var(--clr-bg-invalid); 1697 color: var(--clr-err); 1698 font-size: 90%; 1699 1700 /* parent's parent */ 1701 min-width: 12rem; /* of smaller, message takes three lines; we want two */ 1702 max-width: 100%; 1703 top: -0.25rem; 1704 } 1705 1706 1707 1708 1709 /* 1710 server side validation styles 1711 */ 1712 .popup-invalid-anchor-grid-item { 1713 width: 0; 1714 height: 0; 1715 1716 /* want 0.8rem here - heightens the page - 1717 but better than blanking out question texts - 1718 problem is grid-builder: it pushes the first radio down 1719 */ 1720 height: 0.004rem; 1721 1722 grid-column-start: 1; 1723 grid-column-end: -1; 1724 /* border: 2px solid red; */ 1725 1726 position: relative; /* so top/left... do work */ 1727 } 1728 1729 /* superset of .error-aura */ 1730 .popup-invalid-content-grid-item { 1731 1732 position: absolute; 1733 z-index: 212; 1734 min-width: 12rem; 1735 1736 /* background-color: var(--clr-bg-invalid); */ 1737 background-color: var(--clr-sec-lgt2); 1738 1739 bottom: 0.09rem; /* fine tuned across all page */ 1740 left: 0; 1741 1742 margin: 0; 1743 padding: 0.21rem 0.4rem; 1744 padding-bottom: 0.18rem; 1745 border: 1px solid var(--clr-err); 1746 border-radius: 0.3rem; 1747 1748 outline-color: var(--clr-err); 1749 outline-color: var(--clr-sec-lgt2); 1750 outline-style: solid; 1751 outline-width: 0.2rem; 1752 outline-offset: 0; 1753 1754 1755 font-size: 88%; 1756 line-height: 90%; 1757 1758 } 1759 1760 1761 1762 @media screen and (max-width: 800px) { 1763 1764 .popup-invalid-anchor { 1765 } 1766 1767 .popup-invalid-content { 1768 } 1769 1770 } 1771 1772 1773 /* 1774 validation bubble messages - end 1775 */