Changes for page Prepare
Last modified by Veronika Kocher on Friday, 18 Sep 2026 16:47
From version 29.10
edited by Veronika Kocher
on Thursday, 03 Sep 2026 13:04
on Thursday, 03 Sep 2026 13:04
Change comment:
There is no comment for this version
To version 29.4
edited by ZID Server
on Tuesday, 01 Sep 2026 10:00
on Tuesday, 01 Sep 2026 10:00
Change comment:
clear view right for XWiki.XWikiGuest
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. p00096701 +XWiki.server - Content
-
... ... @@ -470,14 +470,14 @@ 470 470 </div> 471 471 472 472 <div class="arsn-resource-grid" style="margin-bottom:27px;"> 473 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong style="color:#3a5d66;">Info Sheets</strong>< br><spandata-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span><div style="margin-top:5px;color:#625d56;">Short reference guides for common questions and decisions.</div></div>474 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong style="color:#503a31;">Tutorials</strong>< br><spandata-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span><div style="margin-top:5px;color:#625d56;">Step-by-step instructions for specific tasks and workflows.</div></div>475 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong style="color:#3f6b4b;">Checklists & Templates</strong>< br><spandata-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span><div style="margin-top:5px;color:#625d56;">Reusable aids for planning, documenting and reviewing your project setup.</div></div>473 + <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong style="color:#3a5d66;">Info Sheets</strong><div style="margin-top:5px;color:#625d56;">Short reference guides for common questions and decisions.</div></div> 474 + <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong style="color:#503a31;">Tutorials</strong><div style="margin-top:5px;color:#625d56;">Step-by-step instructions for specific tasks and workflows.</div></div> 475 + <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong style="color:#3f6b4b;">Checklists & Templates</strong><div style="margin-top:5px;color:#625d56;">Reusable aids for planning, documenting and reviewing your project setup.</div></div> 476 476 </div> 477 477 478 - <aside style="margin:0 0 14px 0;padding:16px 18px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#e5f5f9;border-radius:8px;"> <!-- ARSN_PHASE_ROUTING_V1 -->479 - <strong style="color:#2d5661;">Need help finding the right route?</strong>480 - <div style="margin-top:5px;color:#365e68;line-height:1.5;"> <strong>StartwithSupport Kunstund Forschung</strong>forprojectdevelopment,funding,proposalsand coordinationof funded art/researchprojects.For rights, data,IT,finance,HR, roomsor otherspecialist questions,follow theresponsibleservice named onthe topic page.</div>478 + <aside style="margin:0 0 14px 0;padding:16px 18px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#e5f5f9;border-radius:8px;"> 479 + <strong style="color:#2d5661;">Need help?</strong> 480 + <div style="margin-top:5px;color:#365e68;line-height:1.5;">Not sure which requirements, services or next steps apply to your project? Contact Art & Research Services for project-specific support.</div> 481 481 </aside> 482 482 483 483 <div class="arsn-tip"><strong>Tip · A useful rule of thumb:</strong> Plan early, document decisions, and review them as the project changes. A simple setup that is actually used is usually more effective than a complex plan that is never updated.</div> ... ... @@ -484,1149 +484,3 @@ 484 484 485 485 </div> 486 486 {{/html}} 487 - 488 -{{html clean="false"}} 489 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 490 - 491 -<style data-sn-service-navigator-master="1"> 492 -/* ========================================================= 493 - MASTER TYPOGRAPHY 494 - ========================================================= */ 495 -#xwikicontent h1, 496 -#xwikicontent h2, 497 -#xwikicontent h3, 498 -#xwikicontent h4, 499 -#xwikicontent h5, 500 -#xwikicontent h6, 501 -#xwikicontent .box-title, 502 -#xwikicontent [role="heading"], 503 -#xwikicontent h1 a, 504 -#xwikicontent h2 a, 505 -#xwikicontent h3 a, 506 -#xwikicontent h4 a, 507 -#xwikicontent h5 a, 508 -#xwikicontent h6 a, 509 -#xwikicontent .box-title a, 510 -#xwikicontent [role="heading"] a{ 511 - text-align:left!important; 512 - text-justify:auto!important; 513 - word-spacing:normal!important; 514 -} 515 - 516 -/* ========================================================= 517 - COMING SOON / IN VORBEREITUNG 518 - ========================================================= */ 519 -.sn-coming-soon-badge{ 520 - display:inline-block; 521 - vertical-align:middle; 522 - margin-left:10px; 523 - padding:4px 8px; 524 - border-radius:14px; 525 - border:1px solid #efd9cc; 526 - background:#fff4ee; 527 - color:#8a4d36; 528 - font-size:11px; 529 - font-weight:700; 530 - letter-spacing:.055em; 531 - line-height:1.2; 532 - white-space:nowrap; 533 -} 534 - 535 -/* ========================================================= 536 - NATIVE / DETAIL CALLOUT GEOMETRY 537 - Preserve existing backgrounds. 538 - ========================================================= */ 539 -#xwikicontent .arsn-info, 540 -#xwikicontent .dmp-info, 541 -#xwikicontent .ido-info, 542 -#xwikicontent .pp-info, 543 -#xwikicontent .infomessage{ 544 - box-sizing:border-box!important; 545 - border-left:4px solid #21b6d7!important; 546 - border-radius:8px; 547 - text-align:left!important; 548 - word-spacing:normal!important; 549 -} 550 - 551 -#xwikicontent .arsn-warn, 552 -#xwikicontent .dmp-warn, 553 -#xwikicontent .ido-warn, 554 -#xwikicontent .pp-warn, 555 -#xwikicontent .warn, 556 -#xwikicontent .warning, 557 -#xwikicontent .warningmessage, 558 -#xwikicontent .errormessage{ 559 - box-sizing:border-box!important; 560 - border-left:4px solid #e94b13!important; 561 - border-radius:8px; 562 - text-align:left!important; 563 - word-spacing:normal!important; 564 -} 565 - 566 -[data-sn-master-equal-height], 567 -[data-sn-master-first-row]{ 568 - box-sizing:border-box; 569 -} 570 -</style> 571 - 572 -<script data-sn-service-navigator-master="1"> 573 -(function(){ 574 - "use strict"; 575 - 576 - var PAGE_KIND="overview"; 577 - var PLACEHOLDER=false; 578 - var PLACEHOLDER_LABEL="COMING SOON"; 579 - 580 - var MOBILE_MAX=767; 581 - var ROW_TOLERANCE=6; 582 - var RESIZE_DEBOUNCE=220; 583 - 584 - var root= 585 - document.getElementById("xwikicontent")|| 586 - document.querySelector(".xwiki-rendering-content")|| 587 - document.querySelector("main")|| 588 - document.body; 589 - 590 - if(!root)return; 591 - 592 - var managedHeight=new Set(); 593 - var managedMargin=new Set(); 594 - var originalHeight=new WeakMap(); 595 - var originalMargin=new WeakMap(); 596 - 597 - var resizeTimer=0; 598 - var running=false; 599 - 600 - var THEMES=[ 601 - { 602 - name:"BLUE", 603 - accent:"#21b6d7", 604 - bg:"#eaf7fb", 605 - text:"#315d68", 606 - labels:[ 607 - "HIER STARTEN", 608 - "ENTSCHEIDEN", 609 - "ÜBERPRÜFEN & ANPASSEN", 610 - "START HERE", 611 - "DECIDE", 612 - "REVIEW & ADAPT" 613 - ] 614 - }, 615 - { 616 - name:"RED", 617 - accent:"#e94b13", 618 - bg:"#fff1ec", 619 - text:"#8a4d36", 620 - labels:[ 621 - "PLANEN & ORGANISIEREN", 622 - "ORGANISIEREN & DOKUMENTIEREN", 623 - "PUBLIZIEREN & PRÄSENTIEREN", 624 - "PLAN & ORGANISE", 625 - "PLAN & ORGANIZE", 626 - "ORGANISE & DOCUMENT", 627 - "ORGANIZE & DOCUMENT", 628 - "PUBLISH & PRESENT" 629 - ] 630 - }, 631 - { 632 - name:"YELLOW", 633 - accent:"#f0aa00", 634 - bg:"#fff8e7", 635 - text:"#785b17", 636 - labels:[ 637 - "SCHÜTZEN & KLÄREN", 638 - "STANDARDISIEREN & IDENTIFIZIEREN", 639 - "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 640 - "PROTECT & CLARIFY", 641 - "STANDARDISE & IDENTIFY", 642 - "STANDARDIZE & IDENTIFY", 643 - "OPEN, REUSE & MAKE FINDABLE" 644 - ] 645 - }, 646 - { 647 - name:"GREEN", 648 - accent:"#38b76a", 649 - bg:"#edf9f1", 650 - text:"#3f7451", 651 - labels:[ 652 - "INFRASTRUKTUR EINRICHTEN", 653 - "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 654 - "SPEICHERN & ZUGRIFF STEUERN", 655 - "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 656 - "SET UP INFRASTRUCTURE", 657 - "SET UP INFRASTRUCTURE & COLLABORATION", 658 - "STORE & CONTROL ACCESS", 659 - "REPOSITORY, PRESERVE & HAND OVER" 660 - ] 661 - } 662 - ]; 663 - 664 - function num(value){ 665 - var n=parseFloat(value); 666 - return Number.isFinite(n)?n:0; 667 - } 668 - 669 - function norm(value){ 670 - return String(value||"") 671 - .replace(/\s+/g," ") 672 - .trim() 673 - .toUpperCase(); 674 - } 675 - 676 - function visible(el){ 677 - if(!el||el.nodeType!==1)return false; 678 - 679 - var style=getComputedStyle(el); 680 - var rect=el.getBoundingClientRect(); 681 - 682 - return ( 683 - style.display!=="none"&& 684 - style.visibility!=="hidden"&& 685 - rect.width>20&& 686 - rect.height>4 687 - ); 688 - } 689 - 690 - function saveStyle(el,map,property){ 691 - if(map.has(el))return; 692 - 693 - map.set(el,{ 694 - value:el.style.getPropertyValue(property), 695 - priority:el.style.getPropertyPriority(property) 696 - }); 697 - } 698 - 699 - function restoreStyle(el,map,property){ 700 - var original=map.get(el); 701 - 702 - if(original&&original.value){ 703 - el.style.setProperty( 704 - property, 705 - original.value, 706 - original.priority||"" 707 - ); 708 - }else{ 709 - el.style.removeProperty(property); 710 - } 711 - } 712 - 713 - function resetRuntime(){ 714 - managedHeight.forEach(function(el){ 715 - restoreStyle( 716 - el, 717 - originalHeight, 718 - "min-height" 719 - ); 720 - el.removeAttribute( 721 - "data-sn-master-equal-height" 722 - ); 723 - }); 724 - 725 - managedMargin.forEach(function(el){ 726 - restoreStyle( 727 - el, 728 - originalMargin, 729 - "margin-top" 730 - ); 731 - el.removeAttribute( 732 - "data-sn-master-first-row" 733 - ); 734 - }); 735 - 736 - managedHeight.clear(); 737 - managedMargin.clear(); 738 - } 739 - 740 - function themeFor(text){ 741 - var value=norm(text); 742 - 743 - for(var i=0;i<THEMES.length;i++){ 744 - for(var j=0;j<THEMES[i].labels.length;j++){ 745 - var label=THEMES[i].labels[j]; 746 - 747 - if( 748 - value===label|| 749 - value.indexOf(label+" ")===0|| 750 - value.indexOf(label+" -")===0|| 751 - value.indexOf(label+" ·")===0 752 - ){ 753 - return THEMES[i]; 754 - } 755 - } 756 - } 757 - 758 - return null; 759 - } 760 - 761 - /* ======================================================= 762 - PLACEHOLDER BADGE 763 - ======================================================= */ 764 - 765 - function applyPlaceholderBadge(){ 766 - if(!PLACEHOLDER)return; 767 - 768 - if( 769 - document.querySelector( 770 - ".sn-coming-soon-badge" 771 - ) 772 - ){ 773 - return; 774 - } 775 - 776 - var title= 777 - document.querySelector( 778 - "#document-title" 779 - )|| 780 - document.querySelector( 781 - "h1" 782 - ); 783 - 784 - if(!title)return; 785 - 786 - var badge= 787 - document.createElement( 788 - "span" 789 - ); 790 - 791 - badge.className= 792 - "sn-coming-soon-badge"; 793 - 794 - badge.textContent= 795 - PLACEHOLDER_LABEL; 796 - 797 - badge.setAttribute( 798 - "aria-label", 799 - PLACEHOLDER_LABEL 800 - ); 801 - 802 - title.appendChild( 803 - badge 804 - ); 805 - } 806 - 807 - /* ======================================================= 808 - DETAIL PAGE OWN-ACCENT PROPAGATION 809 - ======================================================= */ 810 - 811 - function parseRGB(value){ 812 - var match=String(value||"").match( 813 - /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 814 - ); 815 - 816 - if(!match)return null; 817 - 818 - return [ 819 - Number(match[1]), 820 - Number(match[2]), 821 - Number(match[3]) 822 - ]; 823 - } 824 - 825 - function distance(a,b){ 826 - return Math.sqrt( 827 - Math.pow(a[0]-b[0],2)+ 828 - Math.pow(a[1]-b[1],2)+ 829 - Math.pow(a[2]-b[2],2) 830 - ); 831 - } 832 - 833 - function paletteMatch(cssColor){ 834 - var rgb=parseRGB(cssColor); 835 - 836 - if(!rgb)return null; 837 - 838 - var palette=[ 839 - {hex:"#21b6d7",rgb:[33,182,215]}, 840 - {hex:"#e94b13",rgb:[233,75,19]}, 841 - {hex:"#f0aa00",rgb:[240,170,0]}, 842 - {hex:"#38b76a",rgb:[56,183,106]} 843 - ]; 844 - 845 - var best=null; 846 - var bestDistance=Infinity; 847 - 848 - palette.forEach(function(item){ 849 - var d=distance(rgb,item.rgb); 850 - 851 - if(d<bestDistance){ 852 - best=item; 853 - bestDistance=d; 854 - } 855 - }); 856 - 857 - return bestDistance<=30 858 - ?best 859 - :null; 860 - } 861 - 862 - function propagateDetailAccents(){ 863 - if(PAGE_KIND!=="detail")return; 864 - 865 - Array.from( 866 - root.querySelectorAll( 867 - ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 868 - ".arsn-source,.dmp-source,.ido-source,.pp-source" 869 - ) 870 - ).forEach(function(el){ 871 - if(!visible(el))return; 872 - 873 - var style=getComputedStyle(el); 874 - 875 - if( 876 - num(style.borderTopWidth)>=2 877 - ){ 878 - var match= 879 - paletteMatch( 880 - style.borderTopColor 881 - ); 882 - 883 - if(match){ 884 - el.style.setProperty( 885 - "border-left", 886 - "4px solid "+match.hex, 887 - "important" 888 - ); 889 - } 890 - } 891 - }); 892 - 893 - // Warning families: explicit safety override. 894 - Array.from( 895 - root.querySelectorAll( 896 - ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 897 - ".warn,.warning,.warningmessage,.errormessage" 898 - ) 899 - ).forEach(function(el){ 900 - if(!visible(el))return; 901 - 902 - el.style.setProperty( 903 - "border-left", 904 - "4px solid #e94b13", 905 - "important" 906 - ); 907 - }); 908 - 909 - // Info families: explicit orientation override. 910 - Array.from( 911 - root.querySelectorAll( 912 - ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 913 - ) 914 - ).forEach(function(el){ 915 - if(!visible(el))return; 916 - 917 - el.style.setProperty( 918 - "border-left", 919 - "4px solid #21b6d7", 920 - "important" 921 - ); 922 - }); 923 - } 924 - 925 - /* ======================================================= 926 - OVERVIEW SEMANTIC THEME PALETTE 927 - ======================================================= */ 928 - 929 - function smallestThemeHeaders(){ 930 - return Array.from( 931 - root.querySelectorAll( 932 - "div,span,p,strong,h3,h4,h5,h6" 933 - ) 934 - ).filter(function(el){ 935 - if(!visible(el))return false; 936 - if(!themeFor(el.textContent))return false; 937 - 938 - return !Array.from( 939 - el.children||[] 940 - ).some(function(child){ 941 - return !!themeFor( 942 - child.textContent 943 - ); 944 - }); 945 - }); 946 - } 947 - 948 - function findOverviewCard(header){ 949 - var node=header.parentElement; 950 - var candidates=[]; 951 - 952 - while(node&&node!==root){ 953 - var rect=node.getBoundingClientRect(); 954 - var style=getComputedStyle(node); 955 - 956 - var border= 957 - num(style.borderTopWidth)+ 958 - num(style.borderRightWidth)+ 959 - num(style.borderBottomWidth)+ 960 - num(style.borderLeftWidth); 961 - 962 - if( 963 - rect.width>=220&& 964 - rect.width<=800&& 965 - rect.height>=120&& 966 - border>=1 967 - ){ 968 - candidates.push(node); 969 - } 970 - 971 - node=node.parentElement; 972 - } 973 - 974 - if(!candidates.length)return null; 975 - 976 - candidates.sort(function(a,b){ 977 - return ( 978 - b.getBoundingClientRect().height- 979 - a.getBoundingClientRect().height 980 - ); 981 - }); 982 - 983 - return candidates[0]; 984 - } 985 - 986 - function rowCandidates(link,card){ 987 - var result=[]; 988 - var cardRect= 989 - card.getBoundingClientRect(); 990 - 991 - var node=link; 992 - 993 - while(node&&node!==card){ 994 - if(visible(node)){ 995 - var rect= 996 - node.getBoundingClientRect(); 997 - 998 - if( 999 - rect.height<=105&& 1000 - rect.width>= 1001 - cardRect.width*.50&& 1002 - rect.width<= 1003 - cardRect.width*1.03 1004 - ){ 1005 - result.push(node); 1006 - } 1007 - } 1008 - 1009 - node=node.parentElement; 1010 - } 1011 - 1012 - return result; 1013 - } 1014 - 1015 - function chooseOuterRow( 1016 - candidates, 1017 - link 1018 - ){ 1019 - if(!candidates.length){ 1020 - return link; 1021 - } 1022 - 1023 - var bordered= 1024 - candidates.filter(function(el){ 1025 - return ( 1026 - num( 1027 - getComputedStyle(el) 1028 - .borderLeftWidth 1029 - )>=1 1030 - ); 1031 - }); 1032 - 1033 - var pool= 1034 - bordered.length 1035 - ?bordered 1036 - :candidates; 1037 - 1038 - pool.sort(function(a,b){ 1039 - var ar= 1040 - a.getBoundingClientRect(); 1041 - 1042 - var br= 1043 - b.getBoundingClientRect(); 1044 - 1045 - return ( 1046 - ar.left-br.left|| 1047 - br.width-ar.width 1048 - ); 1049 - }); 1050 - 1051 - return pool[0]||link; 1052 - } 1053 - 1054 - function applyOverviewPalette(){ 1055 - if(PAGE_KIND!=="overview"){ 1056 - return []; 1057 - } 1058 - 1059 - var headers= 1060 - smallestThemeHeaders() 1061 - .map(function(el){ 1062 - return { 1063 - el:el, 1064 - theme: 1065 - themeFor( 1066 - el.textContent 1067 - ), 1068 - card: 1069 - findOverviewCard( 1070 - el 1071 - ) 1072 - }; 1073 - }) 1074 - .filter(function(row){ 1075 - return !!row.card; 1076 - }); 1077 - 1078 - var unique=[]; 1079 - var seenHeaders=new Set(); 1080 - 1081 - headers.forEach(function(row){ 1082 - var key= 1083 - row.theme.name+ 1084 - "|"+ 1085 - Math.round( 1086 - row.card 1087 - .getBoundingClientRect() 1088 - .left 1089 - )+ 1090 - "|"+ 1091 - Math.round( 1092 - row.el 1093 - .getBoundingClientRect() 1094 - .top 1095 - ); 1096 - 1097 - if(!seenHeaders.has(key)){ 1098 - seenHeaders.add(key); 1099 - unique.push(row); 1100 - } 1101 - }); 1102 - 1103 - unique.forEach(function(row){ 1104 - var headerRect= 1105 - row.el 1106 - .getBoundingClientRect(); 1107 - 1108 - row.el.style.setProperty( 1109 - "background", 1110 - row.theme.bg, 1111 - "important" 1112 - ); 1113 - 1114 - row.el.style.setProperty( 1115 - "color", 1116 - row.theme.text, 1117 - "important" 1118 - ); 1119 - 1120 - row.el.style.setProperty( 1121 - "text-align", 1122 - "left", 1123 - "important" 1124 - ); 1125 - 1126 - row.el.style.setProperty( 1127 - "word-spacing", 1128 - "normal", 1129 - "important" 1130 - ); 1131 - 1132 - var later= 1133 - unique 1134 - .filter(function(other){ 1135 - return ( 1136 - other.card===row.card&& 1137 - other.el 1138 - .getBoundingClientRect() 1139 - .top> 1140 - headerRect.top+2 1141 - ); 1142 - }) 1143 - .sort(function(a,b){ 1144 - return ( 1145 - a.el 1146 - .getBoundingClientRect() 1147 - .top- 1148 - b.el 1149 - .getBoundingClientRect() 1150 - .top 1151 - ); 1152 - }); 1153 - 1154 - var stopTop= 1155 - later.length 1156 - ?later[0].el 1157 - .getBoundingClientRect() 1158 - .top 1159 - :Infinity; 1160 - 1161 - Array.from( 1162 - row.card.querySelectorAll("a") 1163 - ).forEach(function(link){ 1164 - if(!visible(link))return; 1165 - 1166 - var rect= 1167 - link.getBoundingClientRect(); 1168 - 1169 - if( 1170 - rect.top<= 1171 - headerRect.bottom-2|| 1172 - rect.top>= 1173 - stopTop-2 1174 - ){ 1175 - return; 1176 - } 1177 - 1178 - var candidates= 1179 - rowCandidates( 1180 - link, 1181 - row.card 1182 - ); 1183 - 1184 - var target= 1185 - chooseOuterRow( 1186 - candidates, 1187 - link 1188 - ); 1189 - 1190 - candidates.forEach(function(el){ 1191 - el.style.setProperty( 1192 - "border-left", 1193 - "0 solid transparent", 1194 - "important" 1195 - ); 1196 - }); 1197 - 1198 - target.style.setProperty( 1199 - "border-left", 1200 - "3px solid "+ 1201 - row.theme.accent, 1202 - "important" 1203 - ); 1204 - 1205 - target.style.setProperty( 1206 - "box-sizing", 1207 - "border-box", 1208 - "important" 1209 - ); 1210 - }); 1211 - }); 1212 - 1213 - return unique; 1214 - } 1215 - 1216 - /* ======================================================= 1217 - OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1218 - ======================================================= */ 1219 - 1220 - function alignOverviewCards(headers){ 1221 - if( 1222 - PAGE_KIND!=="overview"|| 1223 - window.innerWidth<=MOBILE_MAX 1224 - ){ 1225 - return; 1226 - } 1227 - 1228 - var cards=[]; 1229 - var seen=new Set(); 1230 - 1231 - headers.forEach(function(row){ 1232 - if(!seen.has(row.card)){ 1233 - seen.add(row.card); 1234 - cards.push(row.card); 1235 - } 1236 - }); 1237 - 1238 - if(cards.length<2){ 1239 - return; 1240 - } 1241 - 1242 - // Group cards by actual top position. 1243 - var groups=[]; 1244 - 1245 - cards.forEach(function(card){ 1246 - var top= 1247 - card.getBoundingClientRect().top; 1248 - 1249 - var group=null; 1250 - 1251 - for(var i=0;i<groups.length;i++){ 1252 - if( 1253 - Math.abs( 1254 - groups[i].top-top 1255 - )<=ROW_TOLERANCE 1256 - ){ 1257 - group=groups[i]; 1258 - break; 1259 - } 1260 - } 1261 - 1262 - if(!group){ 1263 - group={ 1264 - top:top, 1265 - cards:[] 1266 - }; 1267 - groups.push(group); 1268 - } 1269 - 1270 - group.cards.push(card); 1271 - }); 1272 - 1273 - groups.forEach(function(group){ 1274 - if(group.cards.length<2){ 1275 - return; 1276 - } 1277 - 1278 - var firstHeaders= 1279 - group.cards.map(function(card){ 1280 - var candidates= 1281 - headers 1282 - .filter(function(row){ 1283 - return row.card===card; 1284 - }) 1285 - .sort(function(a,b){ 1286 - return ( 1287 - a.el 1288 - .getBoundingClientRect() 1289 - .top- 1290 - b.el 1291 - .getBoundingClientRect() 1292 - .top 1293 - ); 1294 - }); 1295 - 1296 - return candidates.length 1297 - ?candidates[0] 1298 - :null; 1299 - }); 1300 - 1301 - if( 1302 - !firstHeaders.some(function(row){ 1303 - return !row; 1304 - }) 1305 - ){ 1306 - var targetTop= 1307 - Math.max.apply( 1308 - Math, 1309 - firstHeaders.map(function(row){ 1310 - return ( 1311 - row.el 1312 - .getBoundingClientRect() 1313 - .top- 1314 - row.card 1315 - .getBoundingClientRect() 1316 - .top 1317 - ); 1318 - }) 1319 - ); 1320 - 1321 - firstHeaders.forEach(function(row){ 1322 - var relativeTop= 1323 - row.el 1324 - .getBoundingClientRect() 1325 - .top- 1326 - row.card 1327 - .getBoundingClientRect() 1328 - .top; 1329 - 1330 - var delta= 1331 - targetTop-relativeTop; 1332 - 1333 - if(delta>1){ 1334 - saveStyle( 1335 - row.el, 1336 - originalMargin, 1337 - "margin-top" 1338 - ); 1339 - 1340 - var current= 1341 - num( 1342 - getComputedStyle( 1343 - row.el 1344 - ).marginTop 1345 - ); 1346 - 1347 - row.el.style.setProperty( 1348 - "margin-top", 1349 - ( 1350 - current+delta 1351 - )+"px" 1352 - ); 1353 - 1354 - row.el.setAttribute( 1355 - "data-sn-master-first-row", 1356 - "1" 1357 - ); 1358 - 1359 - managedMargin.add( 1360 - row.el 1361 - ); 1362 - } 1363 - }); 1364 - } 1365 - 1366 - var maxHeight=0; 1367 - 1368 - group.cards.forEach(function(card){ 1369 - maxHeight= 1370 - Math.max( 1371 - maxHeight, 1372 - card 1373 - .getBoundingClientRect() 1374 - .height 1375 - ); 1376 - }); 1377 - 1378 - maxHeight= 1379 - Math.ceil(maxHeight); 1380 - 1381 - group.cards.forEach(function(card){ 1382 - saveStyle( 1383 - card, 1384 - originalHeight, 1385 - "min-height" 1386 - ); 1387 - 1388 - card.style.setProperty( 1389 - "min-height", 1390 - maxHeight+"px" 1391 - ); 1392 - 1393 - card.setAttribute( 1394 - "data-sn-master-equal-height", 1395 - "1" 1396 - ); 1397 - 1398 - managedHeight.add( 1399 - card 1400 - ); 1401 - }); 1402 - }); 1403 - } 1404 - 1405 - /* ======================================================= 1406 - DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1407 - ======================================================= */ 1408 - 1409 - function equaliseDetailGrids(){ 1410 - if( 1411 - PAGE_KIND!=="detail"|| 1412 - window.innerWidth<=MOBILE_MAX 1413 - ){ 1414 - return; 1415 - } 1416 - 1417 - var selectors=[ 1418 - ".arsn-grid", 1419 - ".arsn-grid-2", 1420 - ".arsn-grid-3", 1421 - ".dmp-grid", 1422 - ".ido-grid", 1423 - ".pp-grid" 1424 - ]; 1425 - 1426 - selectors.forEach(function(selector){ 1427 - Array.from( 1428 - root.querySelectorAll(selector) 1429 - ).forEach(function(grid){ 1430 - var children= 1431 - Array.from( 1432 - grid.children||[] 1433 - ).filter(visible); 1434 - 1435 - if(children.length<2){ 1436 - return; 1437 - } 1438 - 1439 - var groups=[]; 1440 - 1441 - children.forEach(function(child){ 1442 - var top= 1443 - child 1444 - .getBoundingClientRect() 1445 - .top; 1446 - 1447 - var group=null; 1448 - 1449 - for(var i=0;i<groups.length;i++){ 1450 - if( 1451 - Math.abs( 1452 - groups[i].top-top 1453 - )<=ROW_TOLERANCE 1454 - ){ 1455 - group=groups[i]; 1456 - break; 1457 - } 1458 - } 1459 - 1460 - if(!group){ 1461 - group={ 1462 - top:top, 1463 - items:[] 1464 - }; 1465 - groups.push(group); 1466 - } 1467 - 1468 - group.items.push(child); 1469 - }); 1470 - 1471 - groups.forEach(function(group){ 1472 - if(group.items.length<2){ 1473 - return; 1474 - } 1475 - 1476 - var maxHeight=0; 1477 - 1478 - group.items.forEach(function(item){ 1479 - maxHeight= 1480 - Math.max( 1481 - maxHeight, 1482 - item 1483 - .getBoundingClientRect() 1484 - .height 1485 - ); 1486 - }); 1487 - 1488 - maxHeight= 1489 - Math.ceil(maxHeight); 1490 - 1491 - group.items.forEach(function(item){ 1492 - saveStyle( 1493 - item, 1494 - originalHeight, 1495 - "min-height" 1496 - ); 1497 - 1498 - item.style.setProperty( 1499 - "min-height", 1500 - maxHeight+"px" 1501 - ); 1502 - 1503 - item.setAttribute( 1504 - "data-sn-master-equal-height", 1505 - "1" 1506 - ); 1507 - 1508 - managedHeight.add(item); 1509 - }); 1510 - }); 1511 - }); 1512 - }); 1513 - } 1514 - 1515 - /* ======================================================= 1516 - RUN / RESPONSIVE SCHEDULING 1517 - ======================================================= */ 1518 - 1519 - function run(){ 1520 - if(running)return; 1521 - 1522 - running=true; 1523 - 1524 - try{ 1525 - resetRuntime(); 1526 - applyPlaceholderBadge(); 1527 - propagateDetailAccents(); 1528 - 1529 - var headers= 1530 - applyOverviewPalette(); 1531 - 1532 - if( 1533 - window.innerWidth> 1534 - MOBILE_MAX 1535 - ){ 1536 - alignOverviewCards( 1537 - headers 1538 - ); 1539 - 1540 - equaliseDetailGrids(); 1541 - } 1542 - }finally{ 1543 - running=false; 1544 - } 1545 - } 1546 - 1547 - function onResize(){ 1548 - if(resizeTimer){ 1549 - clearTimeout( 1550 - resizeTimer 1551 - ); 1552 - } 1553 - 1554 - resizeTimer= 1555 - setTimeout( 1556 - function(){ 1557 - resizeTimer=0; 1558 - run(); 1559 - }, 1560 - RESIZE_DEBOUNCE 1561 - ); 1562 - } 1563 - 1564 - async function waitForReady(){ 1565 - if( 1566 - document.readyState!=="complete" 1567 - ){ 1568 - await new Promise(function(resolve){ 1569 - window.addEventListener( 1570 - "load", 1571 - resolve, 1572 - {once:true} 1573 - ); 1574 - }); 1575 - } 1576 - 1577 - if( 1578 - document.fonts&& 1579 - document.fonts.ready 1580 - ){ 1581 - try{ 1582 - await document.fonts.ready; 1583 - }catch(error){} 1584 - } 1585 - 1586 - var images= 1587 - Array.from( 1588 - root.querySelectorAll("img") 1589 - ); 1590 - 1591 - await Promise.all( 1592 - images.map(function(img){ 1593 - if(img.complete){ 1594 - return Promise.resolve(); 1595 - } 1596 - 1597 - return new Promise(function(resolve){ 1598 - var done=function(){ 1599 - resolve(); 1600 - }; 1601 - 1602 - img.addEventListener( 1603 - "load", 1604 - done, 1605 - {once:true} 1606 - ); 1607 - 1608 - img.addEventListener( 1609 - "error", 1610 - done, 1611 - {once:true} 1612 - ); 1613 - }); 1614 - }) 1615 - ); 1616 - 1617 - run(); 1618 - } 1619 - 1620 - window.addEventListener( 1621 - "resize", 1622 - onResize, 1623 - {passive:true} 1624 - ); 1625 - 1626 - waitForReady(); 1627 -})(); 1628 -</script> 1629 - 1630 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 1631 -{{/html}} 1632 -