Änderungen von Dokument Art & Research Services Navigator
Zuletzt geändert von Veronika Kocher am Freitag, 18 Sep. 2026 16:47
Von Version 5.1
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 8:57
am Donnerstag, 03 Sep. 2026 8:57
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Auf Version 11.1
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 13:08
am Donnerstag, 03 Sep. 2026 13:08
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
-
Seiteneigenschaften (1 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -2,12 +2,11 @@ 2 2 3 3 Der **Service-Navigator Kunst & Forschung** hilft dir, für jede Phase deines Projekts die passende Orientierung, Services und Ressourcen zu finden. 4 4 5 -{{info title="Unterstützung für dein Projekt"}} 6 - 7 - 5 +{{info title="Unterstützung für dein Projekt:"}} 6 + 8 8 **Support Kunst und Forschung (SKF)** begleitet Projekt- und Fördervorhaben und arbeitet je nach Bedarf mit den passenden Services der Universität zusammen. 9 9 10 - Der Navigator führt dich entlang der Projektphasen zu den Angeboten und Ansprechstellen, die für dein Vorhaben relevant sind. 9 + Der Navigator führt dich entlang der Projektphasen zu den Angeboten und Ansprechstellen, die für dein Vorhaben relevant sind. 11 11 {{/info}} 12 12 13 13 {{html clean="false"}} ... ... @@ -635,3 +635,1148 @@ 635 635 {{/info}} 636 636 ))) 637 637 637 +{{html clean="false"}} 638 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 639 + 640 +<style data-sn-service-navigator-master="1"> 641 +/* ========================================================= 642 + MASTER TYPOGRAPHY 643 + ========================================================= */ 644 +#xwikicontent h1, 645 +#xwikicontent h2, 646 +#xwikicontent h3, 647 +#xwikicontent h4, 648 +#xwikicontent h5, 649 +#xwikicontent h6, 650 +#xwikicontent .box-title, 651 +#xwikicontent [role="heading"], 652 +#xwikicontent h1 a, 653 +#xwikicontent h2 a, 654 +#xwikicontent h3 a, 655 +#xwikicontent h4 a, 656 +#xwikicontent h5 a, 657 +#xwikicontent h6 a, 658 +#xwikicontent .box-title a, 659 +#xwikicontent [role="heading"] a{ 660 + text-align:left!important; 661 + text-justify:auto!important; 662 + word-spacing:normal!important; 663 +} 664 + 665 +/* ========================================================= 666 + COMING SOON / IN VORBEREITUNG 667 + ========================================================= */ 668 +.sn-coming-soon-badge{ 669 + display:inline-block; 670 + vertical-align:middle; 671 + margin-left:10px; 672 + padding:4px 8px; 673 + border-radius:14px; 674 + border:1px solid #efd9cc; 675 + background:#fff4ee; 676 + color:#8a4d36; 677 + font-size:11px; 678 + font-weight:700; 679 + letter-spacing:.055em; 680 + line-height:1.2; 681 + white-space:nowrap; 682 +} 683 + 684 +/* ========================================================= 685 + NATIVE / DETAIL CALLOUT GEOMETRY 686 + Preserve existing backgrounds. 687 + ========================================================= */ 688 +#xwikicontent .arsn-info, 689 +#xwikicontent .dmp-info, 690 +#xwikicontent .ido-info, 691 +#xwikicontent .pp-info, 692 +#xwikicontent .infomessage{ 693 + box-sizing:border-box!important; 694 + border-left:4px solid #21b6d7!important; 695 + border-radius:8px; 696 + text-align:left!important; 697 + word-spacing:normal!important; 698 +} 699 + 700 +#xwikicontent .arsn-warn, 701 +#xwikicontent .dmp-warn, 702 +#xwikicontent .ido-warn, 703 +#xwikicontent .pp-warn, 704 +#xwikicontent .warn, 705 +#xwikicontent .warning, 706 +#xwikicontent .warningmessage, 707 +#xwikicontent .errormessage{ 708 + box-sizing:border-box!important; 709 + border-left:4px solid #e94b13!important; 710 + border-radius:8px; 711 + text-align:left!important; 712 + word-spacing:normal!important; 713 +} 714 + 715 +[data-sn-master-equal-height], 716 +[data-sn-master-first-row]{ 717 + box-sizing:border-box; 718 +} 719 +</style> 720 + 721 +<script data-sn-service-navigator-master="1"> 722 +(function(){ 723 + "use strict"; 724 + 725 + var PAGE_KIND="overview"; 726 + var PLACEHOLDER=false; 727 + var PLACEHOLDER_LABEL="IN VORBEREITUNG"; 728 + 729 + var MOBILE_MAX=767; 730 + var ROW_TOLERANCE=6; 731 + var RESIZE_DEBOUNCE=220; 732 + 733 + var root= 734 + document.getElementById("xwikicontent")|| 735 + document.querySelector(".xwiki-rendering-content")|| 736 + document.querySelector("main")|| 737 + document.body; 738 + 739 + if(!root)return; 740 + 741 + var managedHeight=new Set(); 742 + var managedMargin=new Set(); 743 + var originalHeight=new WeakMap(); 744 + var originalMargin=new WeakMap(); 745 + 746 + var resizeTimer=0; 747 + var running=false; 748 + 749 + var THEMES=[ 750 + { 751 + name:"BLUE", 752 + accent:"#21b6d7", 753 + bg:"#eaf7fb", 754 + text:"#315d68", 755 + labels:[ 756 + "HIER STARTEN", 757 + "ENTSCHEIDEN", 758 + "ÜBERPRÜFEN & ANPASSEN", 759 + "START HERE", 760 + "DECIDE", 761 + "REVIEW & ADAPT" 762 + ] 763 + }, 764 + { 765 + name:"RED", 766 + accent:"#e94b13", 767 + bg:"#fff1ec", 768 + text:"#8a4d36", 769 + labels:[ 770 + "PLANEN & ORGANISIEREN", 771 + "ORGANISIEREN & DOKUMENTIEREN", 772 + "PUBLIZIEREN & PRÄSENTIEREN", 773 + "PLAN & ORGANISE", 774 + "PLAN & ORGANIZE", 775 + "ORGANISE & DOCUMENT", 776 + "ORGANIZE & DOCUMENT", 777 + "PUBLISH & PRESENT" 778 + ] 779 + }, 780 + { 781 + name:"YELLOW", 782 + accent:"#f0aa00", 783 + bg:"#fff8e7", 784 + text:"#785b17", 785 + labels:[ 786 + "SCHÜTZEN & KLÄREN", 787 + "STANDARDISIEREN & IDENTIFIZIEREN", 788 + "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 789 + "PROTECT & CLARIFY", 790 + "STANDARDISE & IDENTIFY", 791 + "STANDARDIZE & IDENTIFY", 792 + "OPEN, REUSE & MAKE FINDABLE" 793 + ] 794 + }, 795 + { 796 + name:"GREEN", 797 + accent:"#38b76a", 798 + bg:"#edf9f1", 799 + text:"#3f7451", 800 + labels:[ 801 + "INFRASTRUKTUR EINRICHTEN", 802 + "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 803 + "SPEICHERN & ZUGRIFF STEUERN", 804 + "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 805 + "SET UP INFRASTRUCTURE", 806 + "SET UP INFRASTRUCTURE & COLLABORATION", 807 + "STORE & CONTROL ACCESS", 808 + "REPOSITORY, PRESERVE & HAND OVER" 809 + ] 810 + } 811 + ]; 812 + 813 + function num(value){ 814 + var n=parseFloat(value); 815 + return Number.isFinite(n)?n:0; 816 + } 817 + 818 + function norm(value){ 819 + return String(value||"") 820 + .replace(/\s+/g," ") 821 + .trim() 822 + .toUpperCase(); 823 + } 824 + 825 + function visible(el){ 826 + if(!el||el.nodeType!==1)return false; 827 + 828 + var style=getComputedStyle(el); 829 + var rect=el.getBoundingClientRect(); 830 + 831 + return ( 832 + style.display!=="none"&& 833 + style.visibility!=="hidden"&& 834 + rect.width>20&& 835 + rect.height>4 836 + ); 837 + } 838 + 839 + function saveStyle(el,map,property){ 840 + if(map.has(el))return; 841 + 842 + map.set(el,{ 843 + value:el.style.getPropertyValue(property), 844 + priority:el.style.getPropertyPriority(property) 845 + }); 846 + } 847 + 848 + function restoreStyle(el,map,property){ 849 + var original=map.get(el); 850 + 851 + if(original&&original.value){ 852 + el.style.setProperty( 853 + property, 854 + original.value, 855 + original.priority||"" 856 + ); 857 + }else{ 858 + el.style.removeProperty(property); 859 + } 860 + } 861 + 862 + function resetRuntime(){ 863 + managedHeight.forEach(function(el){ 864 + restoreStyle( 865 + el, 866 + originalHeight, 867 + "min-height" 868 + ); 869 + el.removeAttribute( 870 + "data-sn-master-equal-height" 871 + ); 872 + }); 873 + 874 + managedMargin.forEach(function(el){ 875 + restoreStyle( 876 + el, 877 + originalMargin, 878 + "margin-top" 879 + ); 880 + el.removeAttribute( 881 + "data-sn-master-first-row" 882 + ); 883 + }); 884 + 885 + managedHeight.clear(); 886 + managedMargin.clear(); 887 + } 888 + 889 + function themeFor(text){ 890 + var value=norm(text); 891 + 892 + for(var i=0;i<THEMES.length;i++){ 893 + for(var j=0;j<THEMES[i].labels.length;j++){ 894 + var label=THEMES[i].labels[j]; 895 + 896 + if( 897 + value===label|| 898 + value.indexOf(label+" ")===0|| 899 + value.indexOf(label+" -")===0|| 900 + value.indexOf(label+" ·")===0 901 + ){ 902 + return THEMES[i]; 903 + } 904 + } 905 + } 906 + 907 + return null; 908 + } 909 + 910 + /* ======================================================= 911 + PLACEHOLDER BADGE 912 + ======================================================= */ 913 + 914 + function applyPlaceholderBadge(){ 915 + if(!PLACEHOLDER)return; 916 + 917 + if( 918 + document.querySelector( 919 + ".sn-coming-soon-badge" 920 + ) 921 + ){ 922 + return; 923 + } 924 + 925 + var title= 926 + document.querySelector( 927 + "#document-title" 928 + )|| 929 + document.querySelector( 930 + "h1" 931 + ); 932 + 933 + if(!title)return; 934 + 935 + var badge= 936 + document.createElement( 937 + "span" 938 + ); 939 + 940 + badge.className= 941 + "sn-coming-soon-badge"; 942 + 943 + badge.textContent= 944 + PLACEHOLDER_LABEL; 945 + 946 + badge.setAttribute( 947 + "aria-label", 948 + PLACEHOLDER_LABEL 949 + ); 950 + 951 + title.appendChild( 952 + badge 953 + ); 954 + } 955 + 956 + /* ======================================================= 957 + DETAIL PAGE OWN-ACCENT PROPAGATION 958 + ======================================================= */ 959 + 960 + function parseRGB(value){ 961 + var match=String(value||"").match( 962 + /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 963 + ); 964 + 965 + if(!match)return null; 966 + 967 + return [ 968 + Number(match[1]), 969 + Number(match[2]), 970 + Number(match[3]) 971 + ]; 972 + } 973 + 974 + function distance(a,b){ 975 + return Math.sqrt( 976 + Math.pow(a[0]-b[0],2)+ 977 + Math.pow(a[1]-b[1],2)+ 978 + Math.pow(a[2]-b[2],2) 979 + ); 980 + } 981 + 982 + function paletteMatch(cssColor){ 983 + var rgb=parseRGB(cssColor); 984 + 985 + if(!rgb)return null; 986 + 987 + var palette=[ 988 + {hex:"#21b6d7",rgb:[33,182,215]}, 989 + {hex:"#e94b13",rgb:[233,75,19]}, 990 + {hex:"#f0aa00",rgb:[240,170,0]}, 991 + {hex:"#38b76a",rgb:[56,183,106]} 992 + ]; 993 + 994 + var best=null; 995 + var bestDistance=Infinity; 996 + 997 + palette.forEach(function(item){ 998 + var d=distance(rgb,item.rgb); 999 + 1000 + if(d<bestDistance){ 1001 + best=item; 1002 + bestDistance=d; 1003 + } 1004 + }); 1005 + 1006 + return bestDistance<=30 1007 + ?best 1008 + :null; 1009 + } 1010 + 1011 + function propagateDetailAccents(){ 1012 + if(PAGE_KIND!=="detail")return; 1013 + 1014 + Array.from( 1015 + root.querySelectorAll( 1016 + ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 1017 + ".arsn-source,.dmp-source,.ido-source,.pp-source" 1018 + ) 1019 + ).forEach(function(el){ 1020 + if(!visible(el))return; 1021 + 1022 + var style=getComputedStyle(el); 1023 + 1024 + if( 1025 + num(style.borderTopWidth)>=2 1026 + ){ 1027 + var match= 1028 + paletteMatch( 1029 + style.borderTopColor 1030 + ); 1031 + 1032 + if(match){ 1033 + el.style.setProperty( 1034 + "border-left", 1035 + "4px solid "+match.hex, 1036 + "important" 1037 + ); 1038 + } 1039 + } 1040 + }); 1041 + 1042 + // Warning families: explicit safety override. 1043 + Array.from( 1044 + root.querySelectorAll( 1045 + ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 1046 + ".warn,.warning,.warningmessage,.errormessage" 1047 + ) 1048 + ).forEach(function(el){ 1049 + if(!visible(el))return; 1050 + 1051 + el.style.setProperty( 1052 + "border-left", 1053 + "4px solid #e94b13", 1054 + "important" 1055 + ); 1056 + }); 1057 + 1058 + // Info families: explicit orientation override. 1059 + Array.from( 1060 + root.querySelectorAll( 1061 + ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 1062 + ) 1063 + ).forEach(function(el){ 1064 + if(!visible(el))return; 1065 + 1066 + el.style.setProperty( 1067 + "border-left", 1068 + "4px solid #21b6d7", 1069 + "important" 1070 + ); 1071 + }); 1072 + } 1073 + 1074 + /* ======================================================= 1075 + OVERVIEW SEMANTIC THEME PALETTE 1076 + ======================================================= */ 1077 + 1078 + function smallestThemeHeaders(){ 1079 + return Array.from( 1080 + root.querySelectorAll( 1081 + "div,span,p,strong,h3,h4,h5,h6" 1082 + ) 1083 + ).filter(function(el){ 1084 + if(!visible(el))return false; 1085 + if(!themeFor(el.textContent))return false; 1086 + 1087 + return !Array.from( 1088 + el.children||[] 1089 + ).some(function(child){ 1090 + return !!themeFor( 1091 + child.textContent 1092 + ); 1093 + }); 1094 + }); 1095 + } 1096 + 1097 + function findOverviewCard(header){ 1098 + var node=header.parentElement; 1099 + var candidates=[]; 1100 + 1101 + while(node&&node!==root){ 1102 + var rect=node.getBoundingClientRect(); 1103 + var style=getComputedStyle(node); 1104 + 1105 + var border= 1106 + num(style.borderTopWidth)+ 1107 + num(style.borderRightWidth)+ 1108 + num(style.borderBottomWidth)+ 1109 + num(style.borderLeftWidth); 1110 + 1111 + if( 1112 + rect.width>=220&& 1113 + rect.width<=800&& 1114 + rect.height>=120&& 1115 + border>=1 1116 + ){ 1117 + candidates.push(node); 1118 + } 1119 + 1120 + node=node.parentElement; 1121 + } 1122 + 1123 + if(!candidates.length)return null; 1124 + 1125 + candidates.sort(function(a,b){ 1126 + return ( 1127 + b.getBoundingClientRect().height- 1128 + a.getBoundingClientRect().height 1129 + ); 1130 + }); 1131 + 1132 + return candidates[0]; 1133 + } 1134 + 1135 + function rowCandidates(link,card){ 1136 + var result=[]; 1137 + var cardRect= 1138 + card.getBoundingClientRect(); 1139 + 1140 + var node=link; 1141 + 1142 + while(node&&node!==card){ 1143 + if(visible(node)){ 1144 + var rect= 1145 + node.getBoundingClientRect(); 1146 + 1147 + if( 1148 + rect.height<=105&& 1149 + rect.width>= 1150 + cardRect.width*.50&& 1151 + rect.width<= 1152 + cardRect.width*1.03 1153 + ){ 1154 + result.push(node); 1155 + } 1156 + } 1157 + 1158 + node=node.parentElement; 1159 + } 1160 + 1161 + return result; 1162 + } 1163 + 1164 + function chooseOuterRow( 1165 + candidates, 1166 + link 1167 + ){ 1168 + if(!candidates.length){ 1169 + return link; 1170 + } 1171 + 1172 + var bordered= 1173 + candidates.filter(function(el){ 1174 + return ( 1175 + num( 1176 + getComputedStyle(el) 1177 + .borderLeftWidth 1178 + )>=1 1179 + ); 1180 + }); 1181 + 1182 + var pool= 1183 + bordered.length 1184 + ?bordered 1185 + :candidates; 1186 + 1187 + pool.sort(function(a,b){ 1188 + var ar= 1189 + a.getBoundingClientRect(); 1190 + 1191 + var br= 1192 + b.getBoundingClientRect(); 1193 + 1194 + return ( 1195 + ar.left-br.left|| 1196 + br.width-ar.width 1197 + ); 1198 + }); 1199 + 1200 + return pool[0]||link; 1201 + } 1202 + 1203 + function applyOverviewPalette(){ 1204 + if(PAGE_KIND!=="overview"){ 1205 + return []; 1206 + } 1207 + 1208 + var headers= 1209 + smallestThemeHeaders() 1210 + .map(function(el){ 1211 + return { 1212 + el:el, 1213 + theme: 1214 + themeFor( 1215 + el.textContent 1216 + ), 1217 + card: 1218 + findOverviewCard( 1219 + el 1220 + ) 1221 + }; 1222 + }) 1223 + .filter(function(row){ 1224 + return !!row.card; 1225 + }); 1226 + 1227 + var unique=[]; 1228 + var seenHeaders=new Set(); 1229 + 1230 + headers.forEach(function(row){ 1231 + var key= 1232 + row.theme.name+ 1233 + "|"+ 1234 + Math.round( 1235 + row.card 1236 + .getBoundingClientRect() 1237 + .left 1238 + )+ 1239 + "|"+ 1240 + Math.round( 1241 + row.el 1242 + .getBoundingClientRect() 1243 + .top 1244 + ); 1245 + 1246 + if(!seenHeaders.has(key)){ 1247 + seenHeaders.add(key); 1248 + unique.push(row); 1249 + } 1250 + }); 1251 + 1252 + unique.forEach(function(row){ 1253 + var headerRect= 1254 + row.el 1255 + .getBoundingClientRect(); 1256 + 1257 + row.el.style.setProperty( 1258 + "background", 1259 + row.theme.bg, 1260 + "important" 1261 + ); 1262 + 1263 + row.el.style.setProperty( 1264 + "color", 1265 + row.theme.text, 1266 + "important" 1267 + ); 1268 + 1269 + row.el.style.setProperty( 1270 + "text-align", 1271 + "left", 1272 + "important" 1273 + ); 1274 + 1275 + row.el.style.setProperty( 1276 + "word-spacing", 1277 + "normal", 1278 + "important" 1279 + ); 1280 + 1281 + var later= 1282 + unique 1283 + .filter(function(other){ 1284 + return ( 1285 + other.card===row.card&& 1286 + other.el 1287 + .getBoundingClientRect() 1288 + .top> 1289 + headerRect.top+2 1290 + ); 1291 + }) 1292 + .sort(function(a,b){ 1293 + return ( 1294 + a.el 1295 + .getBoundingClientRect() 1296 + .top- 1297 + b.el 1298 + .getBoundingClientRect() 1299 + .top 1300 + ); 1301 + }); 1302 + 1303 + var stopTop= 1304 + later.length 1305 + ?later[0].el 1306 + .getBoundingClientRect() 1307 + .top 1308 + :Infinity; 1309 + 1310 + Array.from( 1311 + row.card.querySelectorAll("a") 1312 + ).forEach(function(link){ 1313 + if(!visible(link))return; 1314 + 1315 + var rect= 1316 + link.getBoundingClientRect(); 1317 + 1318 + if( 1319 + rect.top<= 1320 + headerRect.bottom-2|| 1321 + rect.top>= 1322 + stopTop-2 1323 + ){ 1324 + return; 1325 + } 1326 + 1327 + var candidates= 1328 + rowCandidates( 1329 + link, 1330 + row.card 1331 + ); 1332 + 1333 + var target= 1334 + chooseOuterRow( 1335 + candidates, 1336 + link 1337 + ); 1338 + 1339 + candidates.forEach(function(el){ 1340 + el.style.setProperty( 1341 + "border-left", 1342 + "0 solid transparent", 1343 + "important" 1344 + ); 1345 + }); 1346 + 1347 + target.style.setProperty( 1348 + "border-left", 1349 + "3px solid "+ 1350 + row.theme.accent, 1351 + "important" 1352 + ); 1353 + 1354 + target.style.setProperty( 1355 + "box-sizing", 1356 + "border-box", 1357 + "important" 1358 + ); 1359 + }); 1360 + }); 1361 + 1362 + return unique; 1363 + } 1364 + 1365 + /* ======================================================= 1366 + OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1367 + ======================================================= */ 1368 + 1369 + function alignOverviewCards(headers){ 1370 + if( 1371 + PAGE_KIND!=="overview"|| 1372 + window.innerWidth<=MOBILE_MAX 1373 + ){ 1374 + return; 1375 + } 1376 + 1377 + var cards=[]; 1378 + var seen=new Set(); 1379 + 1380 + headers.forEach(function(row){ 1381 + if(!seen.has(row.card)){ 1382 + seen.add(row.card); 1383 + cards.push(row.card); 1384 + } 1385 + }); 1386 + 1387 + if(cards.length<2){ 1388 + return; 1389 + } 1390 + 1391 + // Group cards by actual top position. 1392 + var groups=[]; 1393 + 1394 + cards.forEach(function(card){ 1395 + var top= 1396 + card.getBoundingClientRect().top; 1397 + 1398 + var group=null; 1399 + 1400 + for(var i=0;i<groups.length;i++){ 1401 + if( 1402 + Math.abs( 1403 + groups[i].top-top 1404 + )<=ROW_TOLERANCE 1405 + ){ 1406 + group=groups[i]; 1407 + break; 1408 + } 1409 + } 1410 + 1411 + if(!group){ 1412 + group={ 1413 + top:top, 1414 + cards:[] 1415 + }; 1416 + groups.push(group); 1417 + } 1418 + 1419 + group.cards.push(card); 1420 + }); 1421 + 1422 + groups.forEach(function(group){ 1423 + if(group.cards.length<2){ 1424 + return; 1425 + } 1426 + 1427 + var firstHeaders= 1428 + group.cards.map(function(card){ 1429 + var candidates= 1430 + headers 1431 + .filter(function(row){ 1432 + return row.card===card; 1433 + }) 1434 + .sort(function(a,b){ 1435 + return ( 1436 + a.el 1437 + .getBoundingClientRect() 1438 + .top- 1439 + b.el 1440 + .getBoundingClientRect() 1441 + .top 1442 + ); 1443 + }); 1444 + 1445 + return candidates.length 1446 + ?candidates[0] 1447 + :null; 1448 + }); 1449 + 1450 + if( 1451 + !firstHeaders.some(function(row){ 1452 + return !row; 1453 + }) 1454 + ){ 1455 + var targetTop= 1456 + Math.max.apply( 1457 + Math, 1458 + firstHeaders.map(function(row){ 1459 + return ( 1460 + row.el 1461 + .getBoundingClientRect() 1462 + .top- 1463 + row.card 1464 + .getBoundingClientRect() 1465 + .top 1466 + ); 1467 + }) 1468 + ); 1469 + 1470 + firstHeaders.forEach(function(row){ 1471 + var relativeTop= 1472 + row.el 1473 + .getBoundingClientRect() 1474 + .top- 1475 + row.card 1476 + .getBoundingClientRect() 1477 + .top; 1478 + 1479 + var delta= 1480 + targetTop-relativeTop; 1481 + 1482 + if(delta>1){ 1483 + saveStyle( 1484 + row.el, 1485 + originalMargin, 1486 + "margin-top" 1487 + ); 1488 + 1489 + var current= 1490 + num( 1491 + getComputedStyle( 1492 + row.el 1493 + ).marginTop 1494 + ); 1495 + 1496 + row.el.style.setProperty( 1497 + "margin-top", 1498 + ( 1499 + current+delta 1500 + )+"px" 1501 + ); 1502 + 1503 + row.el.setAttribute( 1504 + "data-sn-master-first-row", 1505 + "1" 1506 + ); 1507 + 1508 + managedMargin.add( 1509 + row.el 1510 + ); 1511 + } 1512 + }); 1513 + } 1514 + 1515 + var maxHeight=0; 1516 + 1517 + group.cards.forEach(function(card){ 1518 + maxHeight= 1519 + Math.max( 1520 + maxHeight, 1521 + card 1522 + .getBoundingClientRect() 1523 + .height 1524 + ); 1525 + }); 1526 + 1527 + maxHeight= 1528 + Math.ceil(maxHeight); 1529 + 1530 + group.cards.forEach(function(card){ 1531 + saveStyle( 1532 + card, 1533 + originalHeight, 1534 + "min-height" 1535 + ); 1536 + 1537 + card.style.setProperty( 1538 + "min-height", 1539 + maxHeight+"px" 1540 + ); 1541 + 1542 + card.setAttribute( 1543 + "data-sn-master-equal-height", 1544 + "1" 1545 + ); 1546 + 1547 + managedHeight.add( 1548 + card 1549 + ); 1550 + }); 1551 + }); 1552 + } 1553 + 1554 + /* ======================================================= 1555 + DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1556 + ======================================================= */ 1557 + 1558 + function equaliseDetailGrids(){ 1559 + if( 1560 + PAGE_KIND!=="detail"|| 1561 + window.innerWidth<=MOBILE_MAX 1562 + ){ 1563 + return; 1564 + } 1565 + 1566 + var selectors=[ 1567 + ".arsn-grid", 1568 + ".arsn-grid-2", 1569 + ".arsn-grid-3", 1570 + ".dmp-grid", 1571 + ".ido-grid", 1572 + ".pp-grid" 1573 + ]; 1574 + 1575 + selectors.forEach(function(selector){ 1576 + Array.from( 1577 + root.querySelectorAll(selector) 1578 + ).forEach(function(grid){ 1579 + var children= 1580 + Array.from( 1581 + grid.children||[] 1582 + ).filter(visible); 1583 + 1584 + if(children.length<2){ 1585 + return; 1586 + } 1587 + 1588 + var groups=[]; 1589 + 1590 + children.forEach(function(child){ 1591 + var top= 1592 + child 1593 + .getBoundingClientRect() 1594 + .top; 1595 + 1596 + var group=null; 1597 + 1598 + for(var i=0;i<groups.length;i++){ 1599 + if( 1600 + Math.abs( 1601 + groups[i].top-top 1602 + )<=ROW_TOLERANCE 1603 + ){ 1604 + group=groups[i]; 1605 + break; 1606 + } 1607 + } 1608 + 1609 + if(!group){ 1610 + group={ 1611 + top:top, 1612 + items:[] 1613 + }; 1614 + groups.push(group); 1615 + } 1616 + 1617 + group.items.push(child); 1618 + }); 1619 + 1620 + groups.forEach(function(group){ 1621 + if(group.items.length<2){ 1622 + return; 1623 + } 1624 + 1625 + var maxHeight=0; 1626 + 1627 + group.items.forEach(function(item){ 1628 + maxHeight= 1629 + Math.max( 1630 + maxHeight, 1631 + item 1632 + .getBoundingClientRect() 1633 + .height 1634 + ); 1635 + }); 1636 + 1637 + maxHeight= 1638 + Math.ceil(maxHeight); 1639 + 1640 + group.items.forEach(function(item){ 1641 + saveStyle( 1642 + item, 1643 + originalHeight, 1644 + "min-height" 1645 + ); 1646 + 1647 + item.style.setProperty( 1648 + "min-height", 1649 + maxHeight+"px" 1650 + ); 1651 + 1652 + item.setAttribute( 1653 + "data-sn-master-equal-height", 1654 + "1" 1655 + ); 1656 + 1657 + managedHeight.add(item); 1658 + }); 1659 + }); 1660 + }); 1661 + }); 1662 + } 1663 + 1664 + /* ======================================================= 1665 + RUN / RESPONSIVE SCHEDULING 1666 + ======================================================= */ 1667 + 1668 + function run(){ 1669 + if(running)return; 1670 + 1671 + running=true; 1672 + 1673 + try{ 1674 + resetRuntime(); 1675 + applyPlaceholderBadge(); 1676 + propagateDetailAccents(); 1677 + 1678 + var headers= 1679 + applyOverviewPalette(); 1680 + 1681 + if( 1682 + window.innerWidth> 1683 + MOBILE_MAX 1684 + ){ 1685 + alignOverviewCards( 1686 + headers 1687 + ); 1688 + 1689 + equaliseDetailGrids(); 1690 + } 1691 + }finally{ 1692 + running=false; 1693 + } 1694 + } 1695 + 1696 + function onResize(){ 1697 + if(resizeTimer){ 1698 + clearTimeout( 1699 + resizeTimer 1700 + ); 1701 + } 1702 + 1703 + resizeTimer= 1704 + setTimeout( 1705 + function(){ 1706 + resizeTimer=0; 1707 + run(); 1708 + }, 1709 + RESIZE_DEBOUNCE 1710 + ); 1711 + } 1712 + 1713 + async function waitForReady(){ 1714 + if( 1715 + document.readyState!=="complete" 1716 + ){ 1717 + await new Promise(function(resolve){ 1718 + window.addEventListener( 1719 + "load", 1720 + resolve, 1721 + {once:true} 1722 + ); 1723 + }); 1724 + } 1725 + 1726 + if( 1727 + document.fonts&& 1728 + document.fonts.ready 1729 + ){ 1730 + try{ 1731 + await document.fonts.ready; 1732 + }catch(error){} 1733 + } 1734 + 1735 + var images= 1736 + Array.from( 1737 + root.querySelectorAll("img") 1738 + ); 1739 + 1740 + await Promise.all( 1741 + images.map(function(img){ 1742 + if(img.complete){ 1743 + return Promise.resolve(); 1744 + } 1745 + 1746 + return new Promise(function(resolve){ 1747 + var done=function(){ 1748 + resolve(); 1749 + }; 1750 + 1751 + img.addEventListener( 1752 + "load", 1753 + done, 1754 + {once:true} 1755 + ); 1756 + 1757 + img.addEventListener( 1758 + "error", 1759 + done, 1760 + {once:true} 1761 + ); 1762 + }); 1763 + }) 1764 + ); 1765 + 1766 + run(); 1767 + } 1768 + 1769 + window.addEventListener( 1770 + "resize", 1771 + onResize, 1772 + {passive:true} 1773 + ); 1774 + 1775 + waitForReady(); 1776 +})(); 1777 +</script> 1778 + 1779 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 1780 +{{/html}} 1781 +