Last modified by Veronika Kocher on Friday, 18 Sep 2026 16:47

From version 39.20
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 17:21
Change comment: There is no comment for this version
To version 39.24
edited by Veronika Kocher
on Thursday, 03 Sep 2026 13:04
Change comment: There is no comment for this version

Summary

Details

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