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

From version 43.2
edited by Veronika Kocher
on Friday, 18 Sep 2026 16:47
Change comment: There is no comment for this version
To version 39.21
edited by Veronika Kocher
on Thursday, 03 Sep 2026 9:18
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,13 +1,19 @@
1 1  Artistic and research projects involve many different tasks, decisions and responsibilities — from developing an initial idea and securing funding to organising materials, collaborating with others, publishing results and preserving them for future use.
2 2  
3 -The **Art & Research Services Navigator** helps you find relevant guidance, services and resources for each stage of your project.
3 +The **Art & Research Services Navigator** helps you find the right guidance, services and resources for each stage of your project.
4 4  
5 -{{info title="Support for Your Project:"}}
6 - **Support Kunst und Forschung (SKF)** provides guidance for projects and grant applications and collaborates with the appropriate university services as needed.
5 +{{info title="How responsibilities work"}}
6 +The navigator brings services together around the project lifecycle and the researcher's task. It is a navigation layer across university services, not a separate organisational unit.
7 7  
8 - The Navigator guides you through the project phases to the resources and points of contact relevant to your project.
8 +**Support Kunst und Forschung (SKF)** supports project and funding activities — especially project development, funding and calls, proposals, and coordination of funded projects — and, where useful, connects them with the University's relevant services.
9 +
10 +Depending on the question, these may include the **University Library / Research Data Management & Repository**, **IT**, **Legal and Data Protection**, **Finance and Personnel**, **Publications and Communication**, **Event Management**, the **International Office** and other services.
11 +
12 +The **institute, department or other host unit** remains the artistic or academic home of the project. The navigator brings these offers together along the project stages so you can start from your need rather than from the organisational chart.
9 9  {{/info}}
10 10  
15 +
16 +
11 11  {{html clean="false"}}
12 12  <section data-arsn-search-block-fix="v5" style="margin:20px 0 26px 0;padding:16px 18px;border:1px solid #e3ded6;border-radius:10px;background:#fcfbf8;box-shadow:0 1px 2px rgba(0,0,0,.035);">
13 13   <h2 style="font-size:20px;margin:0 0 6px 0;color:#35312d;">Search the Art &amp; Research Services Navigator</h2>
... ... @@ -355,7 +355,7 @@
355 355  (% style="padding:18px 17px 17px 17px;flex:1;" %)
356 356  (((
357 357  (% style="font-size:19px;font-weight:700;margin-bottom:2px;" %)
358 -[[1. Prepare — Plan & Set Up>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/||style="color:#111;text-decoration:none;font-weight:700;"]]
364 +[[1. Enable — Plan & Set Up>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/||style="color:#111;text-decoration:none;font-weight:700;"]]
359 359  
360 360  (% style="color:#666;margin-bottom:16px;" %)
361 361  Prepare your project before the main work begins.
... ... @@ -433,9 +433,9 @@
433 433  )))
434 434  )))
435 435  
436 -(% class="arsn-phase-cta-wrap" style="padding:0 16px 16px 16px;" %)
442 +(% style="padding:0 16px 16px 16px;" %)
437 437  (((
438 -[[Explore Enable>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/||class="btn btn-primary btn-block arsn-phase-cta"]]
444 +[[Explore Enable>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/||class="btn btn-primary btn-block"]]
439 439  )))
440 440  )))
441 441  )))
... ... @@ -499,9 +499,9 @@
499 499  )))
500 500  )))
501 501  
502 -(% class="arsn-phase-cta-wrap" style="padding:0 16px 16px 16px;" %)
508 +(% style="padding:0 16px 16px 16px;" %)
503 503  (((
504 -[[Explore Work & Manage>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Work%20%26%20Manage/||class="btn btn-primary btn-block arsn-phase-cta"]]
510 +[[Explore Work & Manage>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Work%20%26%20Manage/||class="btn btn-primary btn-block"]]
505 505  )))
506 506  )))
507 507  )))
... ... @@ -519,7 +519,7 @@
519 519  (% style="font-size:19px;font-weight:700;margin-bottom:2px;" %)
520 520  [[3. Publish & Share — Make It Visible>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/||style="color:#111;text-decoration:none;font-weight:700;"]]
521 521  
522 -(% class="arsn-phase-subtitle" style="color:#666;background:transparent;margin:2px 0 16px 0;padding:0;" %)
528 +(% style="color:#666;margin-bottom:16px;" %)
523 523  Decide how outputs should be shared, published, made findable and preserved.
524 524  
525 525  (% style="font-size:13px;font-weight:700;letter-spacing:.065em;color:#4f4a44;margin:17px 0 8px 0;padding:5px 8px;background:#f3efe8;border-radius:4px;" %)
... ... @@ -575,9 +575,9 @@
575 575  )))
576 576  )))
577 577  
578 -(% class="arsn-phase-cta-wrap" style="padding:0 16px 16px 16px;" %)
584 +(% style="padding:0 16px 16px 16px;" %)
579 579  (((
580 -[[Explore Publish & Share>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/||class="btn btn-primary btn-block arsn-phase-cta"]]
586 +[[Explore Publish & Share>>https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/||class="btn btn-primary btn-block"]]
581 581  )))
582 582  )))
583 583  )))
... ... @@ -586,19 +586,6 @@
586 586  
587 587  (% style="margin-top:30px;" %)
588 588  (((
589 -{{html clean="false"}}
590 -<!-- ARSN_TRAINING_WORKSHOPS_V2_START -->
591 -<section class="arsn-training-workshops" data-arsn-training-workshops="v2" style="margin:27px 0 22px 0;">
592 - <div style="padding:16px 18px;background:#eef8fa;border:1px solid #cfe8ef;border-left:5px solid #21b6d7;border-radius:9px;">
593 - <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#3f6871;margin-bottom:5px;">TRAINING &amp; WORKSHOPS</div>
594 - <h3 style="font-size:20px;line-height:1.3;margin:0 0 7px;color:#35312d;text-align:left;">Training, workshops &amp; consultation sessions</h3>
595 - <p style="margin:0 0 10px;color:#5e5953;line-height:1.55;">Relevant opportunities for this topic will be shown here automatically from the central calendar.</p>
596 - <span data-arsn-coming-soon="true" style="display:inline-block;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>
597 - </div>
598 -</section>
599 -<!-- ARSN_TRAINING_WORKSHOPS_V2_END -->
600 -{{/html}}
601 -
602 602  == Practical resources ==
603 603  
604 604  Use practical resources when you need a concise overview, a step-by-step procedure or a ready-to-use project aid.
... ... @@ -637,9 +637,9 @@
637 637  
638 638  (% style="margin-top:30px;" %)
639 639  (((
640 -== Need help deciding where to start? ==
633 +== Need help finding the right route? ==
641 641  
642 -{{info title="Where to start"}}
635 +{{info title="Start with the right service"}}
643 643  For **project development, funding, proposals and coordination of funded art and research projects**, **Support Kunst und Forschung** is a good place to start.
644 644  
645 645  For more specific questions, the topic pages point directly to the relevant university services. When several areas are involved, use the navigator to see which support is useful at the next step.
... ... @@ -646,148 +646,22 @@
646 646  {{/info}}
647 647  )))
648 648  
649 -{{html clean="false"}}<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START -->
650 -
651 -<style data-sn-service-navigator-master="1">
652 -/* =========================================================
653 - PHASE CARD SUBTITLES
654 - ========================================================= */
655 -#xwikicontent .arsn-phase-subtitle{
656 - display:block!important;
657 - margin:2px 0 16px 0!important;
658 - padding:0!important;
659 - background:transparent!important;
660 - color:#666!important;
661 - font-size:inherit!important;
662 - font-weight:400!important;
663 - letter-spacing:normal!important;
664 - text-align:left!important;
665 - word-spacing:normal!important;
642 +{{html clean="false"}}
643 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
644 +<style data-sn-horizontal-box-harmonizer="1">
645 +[data-sn-equal-height-managed="1"]{box-sizing:border-box}
646 +@media(max-width:767px){
647 + [data-sn-equal-height-managed="1"]{min-height:0!important}
666 666  }
667 -
668 -/* =========================================================
669 - MASTER TYPOGRAPHY
670 - ========================================================= */
671 -#xwikicontent h1,
672 -#xwikicontent h2,
673 -#xwikicontent h3,
674 -#xwikicontent h4,
675 -#xwikicontent h5,
676 -#xwikicontent h6,
677 -#xwikicontent .box-title,
678 -#xwikicontent [role="heading"],
679 -#xwikicontent h1 a,
680 -#xwikicontent h2 a,
681 -#xwikicontent h3 a,
682 -#xwikicontent h4 a,
683 -#xwikicontent h5 a,
684 -#xwikicontent h6 a,
685 -#xwikicontent .box-title a,
686 -#xwikicontent [role="heading"] a{
687 - text-align:left!important;
688 - text-justify:auto!important;
689 - word-spacing:normal!important;
690 -}
691 -
692 -/* =========================================================
693 - COMING SOON / IN VORBEREITUNG
694 - ========================================================= */
695 -.sn-coming-soon-badge{
696 - display:inline-block;
697 - vertical-align:middle;
698 - margin-left:10px;
699 - padding:4px 8px;
700 - border-radius:14px;
701 - border:1px solid #efd9cc;
702 - background:#fff4ee;
703 - color:#8a4d36;
704 - font-size:11px;
705 - font-weight:700;
706 - letter-spacing:.055em;
707 - line-height:1.2;
708 - white-space:nowrap;
709 -}
710 -
711 -/* =========================================================
712 - NATIVE / DETAIL CALLOUT GEOMETRY
713 - Preserve existing backgrounds.
714 - ========================================================= */
715 -#xwikicontent .arsn-info,
716 -#xwikicontent .dmp-info,
717 -#xwikicontent .ido-info,
718 -#xwikicontent .pp-info,
719 -#xwikicontent .infomessage{
720 - box-sizing:border-box!important;
721 - border-left:4px solid #21b6d7!important;
722 - border-radius:8px;
723 - text-align:left!important;
724 - word-spacing:normal!important;
725 -}
726 -
727 -#xwikicontent .arsn-warn,
728 -#xwikicontent .dmp-warn,
729 -#xwikicontent .ido-warn,
730 -#xwikicontent .pp-warn,
731 -#xwikicontent .warn,
732 -#xwikicontent .warning,
733 -#xwikicontent .warningmessage,
734 -#xwikicontent .errormessage{
735 - box-sizing:border-box!important;
736 - border-left:4px solid #e94b13!important;
737 - border-radius:8px;
738 - text-align:left!important;
739 - word-spacing:normal!important;
740 -}
741 -
742 -[data-sn-master-equal-height],
743 -[data-sn-master-first-row]{
744 - box-sizing:border-box;
745 -}
746 -
747 -/* =========================================================
748 - FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS
749 - ========================================================= */
750 -#xwikicontent .arsn-area-label[data-sn-three-line="1"]{
751 - display:grid!important;
752 - grid-template-columns:minmax(0,1fr)!important;
753 - grid-auto-rows:auto!important;
754 - width:100%!important;
755 - max-width:none!important;
756 - box-sizing:border-box!important;
757 - justify-items:start!important;
758 - align-items:start!important;
759 - gap:2px!important;
760 - text-align:left!important;
761 - text-align-last:left!important;
762 - text-justify:auto!important;
763 - word-spacing:normal!important;
764 - white-space:normal!important;
765 -}
766 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number,
767 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title,
768 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{
769 - display:block!important;
770 - width:100%!important;
771 - margin:0!important;
772 - text-align:left!important;
773 - text-align-last:left!important;
774 - text-justify:auto!important;
775 - word-spacing:normal!important;
776 - white-space:normal!important;
777 -}
778 778  </style>
779 -
780 -<script data-sn-service-navigator-master="1">
650 +<script data-sn-horizontal-box-harmonizer="1">
781 781  (function(){
782 782   "use strict";
783 783  
784 - var PAGE_KIND="overview";
785 - var PLACEHOLDER=false;
786 - var PLACEHOLDER_LABEL="COMING SOON";
787 -
788 788   var MOBILE_MAX=767;
789 - var ROW_TOLERANCE=6;
790 - var RESIZE_DEBOUNCE=220;
655 + var ROW_TOLERANCE=4;
656 + var MIN_W=150;
657 + var MIN_H=36;
791 791  
792 792   var root=
793 793   document.getElementById("xwikicontent")||
... ... @@ -797,1338 +797,212 @@
797 797  
798 798   if(!root)return;
799 799  
800 - var managedHeight=new Set();
801 - var managedMargin=new Set();
802 - var originalHeight=new WeakMap();
803 - var originalMargin=new WeakMap();
667 + var managed=new Set();
668 + var raf=0;
804 804  
805 - var resizeTimer=0;
806 - var running=false;
807 -
808 - var THEMES=[
809 - {
810 - name:"BLUE",
811 - accent:"#21b6d7",
812 - bg:"#eaf7fb",
813 - text:"#315d68",
814 - labels:[
815 - "HIER STARTEN",
816 - "ENTSCHEIDEN",
817 - "ÜBERPRÜFEN & ANPASSEN",
818 - "START HERE",
819 - "DECIDE",
820 - "REVIEW & ADAPT"
821 - ]
822 - },
823 - {
824 - name:"RED",
825 - accent:"#e94b13",
826 - bg:"#fff1ec",
827 - text:"#8a4d36",
828 - labels:[
829 - "PLANEN & ORGANISIEREN",
830 - "ORGANISIEREN & DOKUMENTIEREN",
831 - "PUBLIZIEREN & PRÄSENTIEREN",
832 - "PLAN & ORGANISE",
833 - "PLAN & ORGANIZE",
834 - "ORGANISE & DOCUMENT",
835 - "ORGANIZE & DOCUMENT",
836 - "PUBLISH & PRESENT"
837 - ]
838 - },
839 - {
840 - name:"YELLOW",
841 - accent:"#f0aa00",
842 - bg:"#fff8e7",
843 - text:"#785b17",
844 - labels:[
845 - "SCHÜTZEN & KLÄREN",
846 - "STANDARDISIEREN & IDENTIFIZIEREN",
847 - "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN",
848 - "PROTECT & CLARIFY",
849 - "STANDARDISE & IDENTIFY",
850 - "STANDARDIZE & IDENTIFY",
851 - "OPEN, REUSE & MAKE FINDABLE"
852 - ]
853 - },
854 - {
855 - name:"GREEN",
856 - accent:"#38b76a",
857 - bg:"#edf9f1",
858 - text:"#3f7451",
859 - labels:[
860 - "INFRASTRUKTUR EINRICHTEN",
861 - "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN",
862 - "SPEICHERN & ZUGRIFF STEUERN",
863 - "REPOSITORIUM, ERHALTEN & ÜBERGEBEN",
864 - "SET UP INFRASTRUCTURE",
865 - "SET UP INFRASTRUCTURE & COLLABORATION",
866 - "STORE & CONTROL ACCESS",
867 - "REPOSITORY, PRESERVE & HAND OVER"
868 - ]
869 - }
870 - ];
871 -
872 - function num(value){
873 - var n=parseFloat(value);
670 + function num(v){
671 + var n=parseFloat(v);
874 874   return Number.isFinite(n)?n:0;
875 875   }
876 876  
877 - function norm(value){
878 - return String(value||"")
879 - .replace(/\s+/g," ")
880 - .trim()
881 - .toUpperCase();
882 - }
883 -
884 884   function visible(el){
885 885   if(!el||el.nodeType!==1)return false;
886 -
887 - var style=getComputedStyle(el);
888 - var rect=el.getBoundingClientRect();
889 -
890 - return (
891 - style.display!=="none"&&
892 - style.visibility!=="hidden"&&
893 - rect.width>20&&
894 - rect.height>4
895 - );
677 + var s=getComputedStyle(el);
678 + if(s.display==="none"||s.visibility==="hidden"||Number(s.opacity)===0)return false;
679 + var r=el.getBoundingClientRect();
680 + return r.width>=MIN_W&&r.height>=MIN_H;
896 896   }
897 897  
898 - function saveStyle(el,map,property){
899 - if(map.has(el))return;
900 -
901 - map.set(el,{
902 - value:el.style.getPropertyValue(property),
903 - priority:el.style.getPropertyPriority(property)
904 - });
905 - }
906 -
907 - function restoreStyle(el,map,property){
908 - var original=map.get(el);
909 -
910 - if(original&&original.value){
911 - el.style.setProperty(
912 - property,
913 - original.value,
914 - original.priority||""
915 - );
916 - }else{
917 - el.style.removeProperty(property);
918 - }
919 - }
920 -
921 - function resetRuntime(){
922 - managedHeight.forEach(function(el){
923 - restoreStyle(
924 - el,
925 - originalHeight,
926 - "min-height"
927 - );
928 - el.removeAttribute(
929 - "data-sn-master-equal-height"
930 - );
931 - });
932 -
933 - managedMargin.forEach(function(el){
934 - restoreStyle(
935 - el,
936 - originalMargin,
937 - "margin-top"
938 - );
939 - el.removeAttribute(
940 - "data-sn-master-first-row"
941 - );
942 - });
943 -
944 - managedHeight.clear();
945 - managedMargin.clear();
946 - }
947 -
948 - function themeFor(text){
949 - var value=norm(text);
950 -
951 - for(var i=0;i<THEMES.length;i++){
952 - for(var j=0;j<THEMES[i].labels.length;j++){
953 - var label=THEMES[i].labels[j];
954 -
955 - /* Match only actual thematic labels.
956 - Do not colour ordinary prose such as:
957 - "Decide how outputs should be shared..." */
958 - if(value===label){
959 - return THEMES[i];
960 - }
961 - }
962 - }
963 -
964 - return null;
965 - }
966 -
967 - /* =======================================================
968 - BORDERLESS FILLED RED/ORANGE CTA BUTTONS
969 - ======================================================= */
970 -
971 - function colourDistance(a,b){
972 - return Math.sqrt(
973 - Math.pow(a[0]-b[0],2)+
974 - Math.pow(a[1]-b[1],2)+
975 - Math.pow(a[2]-b[2],2)
683 + function excluded(el){
684 + return !el.matches||el.matches(
685 + "button,input,select,textarea,option,label,img,svg,canvas,table,thead,tbody,tfoot,tr,td,th,summary,script,style,noscript,template,.btn,.chip,[role=button]"
976 976   );
977 977   }
978 978  
979 - function makeFilledRedOrangeCTAsBorderless(){
980 - var RED_ORANGE=[233,75,19];
981 -
982 - Array.from(
983 - root.querySelectorAll(
984 - 'a,button,[role="button"],input[type="submit"],input[type="button"]'
985 - )
986 - ).forEach(function(el){
987 - if(!visible(el))return;
988 -
989 - var style=getComputedStyle(el);
990 - var rgb=parseRGB(style.backgroundColor);
991 -
992 - if(!rgb)return;
993 -
994 - if(
995 - colourDistance(
996 - rgb,
997 - RED_ORANGE
998 - )>55
999 - ){
1000 - return;
1001 - }
1002 -
1003 - var rect=el.getBoundingClientRect();
1004 -
1005 - if(
1006 - rect.width<80||
1007 - rect.height<24
1008 - ){
1009 - return;
1010 - }
1011 -
1012 - el.style.setProperty(
1013 - "border",
1014 - "none",
1015 - "important"
1016 - );
1017 -
1018 - el.style.setProperty(
1019 - "border-left",
1020 - "none",
1021 - "important"
1022 - );
1023 -
1024 - el.style.setProperty(
1025 - "border-top",
1026 - "none",
1027 - "important"
1028 - );
1029 -
1030 - el.style.setProperty(
1031 - "border-right",
1032 - "none",
1033 - "important"
1034 - );
1035 -
1036 - el.style.setProperty(
1037 - "border-bottom",
1038 - "none",
1039 - "important"
1040 - );
1041 -
1042 - el.style.setProperty(
1043 - "box-shadow",
1044 - "none",
1045 - "important"
1046 - );
1047 - });
689 + function namedLikeBox(el){
690 + var c=typeof el.className==="string"?el.className:"";
691 + return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
1048 1048   }
1049 1049  
1050 - /* =======================================================
1051 - FULL-WIDTH THREE-LINE AREA LABELS
1052 - ======================================================= */
1053 -
1054 - function compactText(value){
1055 - return String(value||"")
1056 - .replace(/\s+/g," ")
1057 - .trim();
1058 - }
1059 -
1060 - function makeThreeLineAreaLabels(){
1061 - Array.from(
1062 - root.querySelectorAll(
1063 - ".arsn-area-label"
1064 - )
1065 - ).forEach(function(label){
1066 - if(
1067 - label.getAttribute(
1068 - "data-sn-three-line"
1069 - )==="1"
1070 - ){
1071 - return;
1072 - }
1073 -
1074 - var number=
1075 - label.querySelector(
1076 - ":scope > .arsn-area-number"
1077 - );
1078 -
1079 - var action=
1080 - label.querySelector(
1081 - ":scope > .arsn-area-action"
1082 - );
1083 -
1084 - if(
1085 - !number||
1086 - !action
1087 - ){
1088 - return;
1089 - }
1090 -
1091 - var clone=
1092 - label.cloneNode(true);
1093 -
1094 - var cloneNumber=
1095 - clone.querySelector(
1096 - ":scope > .arsn-area-number"
1097 - );
1098 -
1099 - var cloneAction=
1100 - clone.querySelector(
1101 - ":scope > .arsn-area-action"
1102 - );
1103 -
1104 - if(cloneNumber){
1105 - cloneNumber.remove();
1106 - }
1107 -
1108 - if(cloneAction){
1109 - cloneAction.remove();
1110 - }
1111 -
1112 - var titleText=
1113 - compactText(
1114 - clone.textContent
1115 - );
1116 -
1117 - if(!titleText){
1118 - return;
1119 - }
1120 -
1121 - var numberNode=
1122 - number.cloneNode(true);
1123 -
1124 - var actionNode=
1125 - action.cloneNode(true);
1126 -
1127 - var titleNode=
1128 - document.createElement(
1129 - "span"
1130 - );
1131 -
1132 - titleNode.className=
1133 - "sn-area-label-title";
1134 -
1135 - titleNode.textContent=
1136 - titleText;
1137 -
1138 - while(label.firstChild){
1139 - label.removeChild(
1140 - label.firstChild
1141 - );
1142 - }
1143 -
1144 - label.appendChild(
1145 - numberNode
1146 - );
1147 -
1148 - label.appendChild(
1149 - titleNode
1150 - );
1151 -
1152 - label.appendChild(
1153 - actionNode
1154 - );
1155 -
1156 - label.setAttribute(
1157 - "data-sn-three-line",
1158 - "1"
1159 - );
1160 -
1161 - var head=
1162 - label.closest(
1163 - ".arsn-area-head"
1164 - );
1165 -
1166 - if(head){
1167 - head.style.setProperty(
1168 - "width",
1169 - "100%",
1170 - "important"
1171 - );
1172 -
1173 - head.style.setProperty(
1174 - "max-width",
1175 - "100%",
1176 - "important"
1177 - );
1178 -
1179 - head.style.setProperty(
1180 - "box-sizing",
1181 - "border-box",
1182 - "important"
1183 - );
1184 - }
1185 - });
1186 - }
1187 -
1188 - /* =======================================================
1189 - PLACEHOLDER BADGE
1190 - ======================================================= */
1191 -
1192 - function applyPlaceholderBadge(){
1193 - if(!PLACEHOLDER)return;
1194 -
1195 - if(
1196 - document.querySelector(
1197 - ".sn-coming-soon-badge"
1198 - )
1199 - ){
1200 - return;
1201 - }
1202 -
1203 - var title=
1204 - document.querySelector(
1205 - "#document-title"
1206 - )||
1207 - document.querySelector(
1208 - "h1"
1209 - );
1210 -
1211 - if(!title)return;
1212 -
1213 - var badge=
1214 - document.createElement(
1215 - "span"
1216 - );
1217 -
1218 - badge.className=
1219 - "sn-coming-soon-badge";
1220 -
1221 - badge.textContent=
1222 - PLACEHOLDER_LABEL;
1223 -
1224 - badge.setAttribute(
1225 - "aria-label",
1226 - PLACEHOLDER_LABEL
694 + function boxLike(el){
695 + if(!visible(el)||excluded(el))return false;
696 + var s=getComputedStyle(el);
697 + var r=el.getBoundingClientRect();
698 + var border=
699 + num(s.borderTopWidth)+num(s.borderRightWidth)+
700 + num(s.borderBottomWidth)+num(s.borderLeftWidth);
701 + var radius=Math.max(
702 + num(s.borderTopLeftRadius),num(s.borderTopRightRadius),
703 + num(s.borderBottomLeftRadius),num(s.borderBottomRightRadius)
1227 1227   );
1228 -
1229 - title.appendChild(
1230 - badge
1231 - );
705 + var bg=s.backgroundColor&&s.backgroundColor!=="rgba(0, 0, 0, 0)"&&s.backgroundColor!=="transparent";
706 + var shadow=s.boxShadow&&s.boxShadow!=="none";
707 + return namedLikeBox(el)||border>=1||(bg&&radius>=3)||(shadow&&r.width>=180);
1232 1232   }
1233 1233  
1234 - /* =======================================================
1235 - DETAIL PAGE OWN-ACCENT PROPAGATION
1236 - ======================================================= */
710 + function pickTarget(child){
711 + if(!visible(child))return null;
712 + if(boxLike(child))return child;
1237 1237  
1238 - function parseRGB(value){
1239 - var match=String(value||"").match(
1240 - /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i
1241 - );
1242 -
1243 - if(!match)return null;
1244 -
1245 - return [
1246 - Number(match[1]),
1247 - Number(match[2]),
1248 - Number(match[3])
1249 - ];
1250 - }
1251 -
1252 - function distance(a,b){
1253 - return Math.sqrt(
1254 - Math.pow(a[0]-b[0],2)+
1255 - Math.pow(a[1]-b[1],2)+
1256 - Math.pow(a[2]-b[2],2)
1257 - );
1258 - }
1259 -
1260 - function paletteMatch(cssColor){
1261 - var rgb=parseRGB(cssColor);
1262 -
1263 - if(!rgb)return null;
1264 -
1265 - var palette=[
1266 - {hex:"#21b6d7",rgb:[33,182,215]},
1267 - {hex:"#e94b13",rgb:[233,75,19]},
1268 - {hex:"#f0aa00",rgb:[240,170,0]},
1269 - {hex:"#38b76a",rgb:[56,183,106]}
1270 - ];
1271 -
1272 - var best=null;
1273 - var bestDistance=Infinity;
1274 -
1275 - palette.forEach(function(item){
1276 - var d=distance(rgb,item.rgb);
1277 -
1278 - if(d<bestDistance){
1279 - best=item;
1280 - bestDistance=d;
1281 - }
714 + var cr=child.getBoundingClientRect();
715 + var q=[];
716 + Array.from(child.children||[]).forEach(function(el){
717 + q.push({el:el,depth:1});
1282 1282   });
1283 1283  
1284 - return bestDistance<=30
1285 - ?best
1286 - :null;
1287 - }
720 + var best=null,bestScore=-1;
1288 1288  
1289 - function propagateDetailAccents(){
1290 - if(PAGE_KIND!=="detail")return;
722 + while(q.length){
723 + var item=q.shift();
724 + var el=item.el;
725 + if(!visible(el))continue;
1291 1291  
1292 - Array.from(
1293 - root.querySelectorAll(
1294 - ".arsn-call,.dmp-call,.ido-call,.pp-call,"+
1295 - ".arsn-source,.dmp-source,.ido-source,.pp-source"
1296 - )
1297 - ).forEach(function(el){
1298 - if(!visible(el))return;
727 + var r=el.getBoundingClientRect();
1299 1299  
1300 - var style=getComputedStyle(el);
1301 -
1302 - if(
1303 - num(style.borderTopWidth)>=2
1304 - ){
1305 - var match=
1306 - paletteMatch(
1307 - style.borderTopColor
1308 - );
1309 -
1310 - if(match){
1311 - el.style.setProperty(
1312 - "border-left",
1313 - "4px solid "+match.hex,
1314 - "important"
1315 - );
729 + if(r.width>=cr.width*.72&&boxLike(el)){
730 + var widthFit=1-Math.min(1,Math.abs(cr.width-r.width)/Math.max(1,cr.width));
731 + var topFit=1-Math.min(1,Math.abs(cr.top-r.top)/80);
732 + var score=widthFit*5+topFit*2+Math.min(r.height,600)/600;
733 + if(score>bestScore){
734 + best=el;
735 + bestScore=score;
1316 1316   }
1317 1317   }
1318 - });
1319 1319  
1320 - // Warning families: explicit safety override.
1321 - Array.from(
1322 - root.querySelectorAll(
1323 - ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+
1324 - ".warn,.warning,.warningmessage,.errormessage"
1325 - )
1326 - ).forEach(function(el){
1327 - if(!visible(el))return;
1328 -
1329 - el.style.setProperty(
1330 - "border-left",
1331 - "4px solid #e94b13",
1332 - "important"
1333 - );
1334 - });
1335 -
1336 - // Info families: explicit orientation override.
1337 - Array.from(
1338 - root.querySelectorAll(
1339 - ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage"
1340 - )
1341 - ).forEach(function(el){
1342 - if(!visible(el))return;
1343 -
1344 - el.style.setProperty(
1345 - "border-left",
1346 - "4px solid #21b6d7",
1347 - "important"
1348 - );
1349 - });
1350 - }
1351 -
1352 - /* =======================================================
1353 - OVERVIEW SEMANTIC THEME PALETTE
1354 - ======================================================= */
1355 -
1356 - function smallestThemeHeaders(){
1357 - return Array.from(
1358 - root.querySelectorAll(
1359 - "div,span,p,strong,h3,h4,h5,h6"
1360 - )
1361 - ).filter(function(el){
1362 - if(!visible(el))return false;
1363 - if(!themeFor(el.textContent))return false;
1364 -
1365 - return !Array.from(
1366 - el.children||[]
1367 - ).some(function(child){
1368 - return !!themeFor(
1369 - child.textContent
1370 - );
1371 - });
1372 - });
1373 - }
1374 -
1375 - function findOverviewCard(header){
1376 - var node=header.parentElement;
1377 - var candidates=[];
1378 -
1379 - while(node&&node!==root){
1380 - var rect=node.getBoundingClientRect();
1381 - var style=getComputedStyle(node);
1382 -
1383 - var border=
1384 - num(style.borderTopWidth)+
1385 - num(style.borderRightWidth)+
1386 - num(style.borderBottomWidth)+
1387 - num(style.borderLeftWidth);
1388 -
1389 - if(
1390 - rect.width>=220&&
1391 - rect.width<=800&&
1392 - rect.height>=120&&
1393 - border>=1
1394 - ){
1395 - candidates.push(node);
739 + if(item.depth<3){
740 + Array.from(el.children||[]).forEach(function(next){
741 + q.push({el:next,depth:item.depth+1});
742 + });
1396 1396   }
1397 -
1398 - node=node.parentElement;
1399 1399   }
1400 1400  
1401 - if(!candidates.length)return null;
1402 -
1403 - candidates.sort(function(a,b){
1404 - return (
1405 - b.getBoundingClientRect().height-
1406 - a.getBoundingClientRect().height
1407 - );
1408 - });
1409 -
1410 - return candidates[0];
746 + return best;
1411 1411   }
1412 1412  
1413 - function rowCandidates(link,card){
1414 - var result=[];
1415 - var cardRect=
1416 - card.getBoundingClientRect();
1417 -
1418 - var node=link;
1419 -
1420 - while(node&&node!==card){
1421 - if(visible(node)){
1422 - var rect=
1423 - node.getBoundingClientRect();
1424 -
1425 - if(
1426 - rect.height<=105&&
1427 - rect.width>=
1428 - cardRect.width*.50&&
1429 - rect.width<=
1430 - cardRect.width*1.03
1431 - ){
1432 - result.push(node);
1433 - }
1434 - }
1435 -
1436 - node=node.parentElement;
1437 - }
1438 -
1439 - return result;
1440 - }
1441 -
1442 - function chooseOuterRow(
1443 - candidates,
1444 - link
1445 - ){
1446 - if(!candidates.length){
1447 - return link;
1448 - }
1449 -
1450 - var bordered=
1451 - candidates.filter(function(el){
1452 - return (
1453 - num(
1454 - getComputedStyle(el)
1455 - .borderLeftWidth
1456 - )>=1
1457 - );
1458 - });
1459 -
1460 - var pool=
1461 - bordered.length
1462 - ?bordered
1463 - :candidates;
1464 -
1465 - pool.sort(function(a,b){
1466 - var ar=
1467 - a.getBoundingClientRect();
1468 -
1469 - var br=
1470 - b.getBoundingClientRect();
1471 -
1472 - return (
1473 - ar.left-br.left||
1474 - br.width-ar.width
1475 - );
749 + function reset(){
750 + managed.forEach(function(el){
751 + el.style.removeProperty("min-height");
752 + el.removeAttribute("data-sn-equal-height-managed");
1476 1476   });
1477 -
1478 - return pool[0]||link;
754 + managed.clear();
1479 1479   }
1480 1480  
1481 - function applyOverviewPalette(){
1482 - if(PAGE_KIND!=="overview"){
1483 - return [];
757 + function horizontalLayout(parent){
758 + if(!visible(parent))return false;
759 + var s=getComputedStyle(parent);
760 + if(s.display==="grid"||s.display==="inline-grid")return true;
761 + if(s.display==="flex"||s.display==="inline-flex"){
762 + return s.flexDirection==="row"||s.flexDirection==="row-reverse";
1484 1484   }
1485 -
1486 - var headers=
1487 - smallestThemeHeaders()
1488 - .map(function(el){
1489 - return {
1490 - el:el,
1491 - theme:
1492 - themeFor(
1493 - el.textContent
1494 - ),
1495 - card:
1496 - findOverviewCard(
1497 - el
1498 - )
1499 - };
1500 - })
1501 - .filter(function(row){
1502 - return !!row.card;
1503 - });
1504 -
1505 - var unique=[];
1506 - var seenHeaders=new Set();
1507 -
1508 - headers.forEach(function(row){
1509 - var key=
1510 - row.theme.name+
1511 - "|"+
1512 - Math.round(
1513 - row.card
1514 - .getBoundingClientRect()
1515 - .left
1516 - )+
1517 - "|"+
1518 - Math.round(
1519 - row.el
1520 - .getBoundingClientRect()
1521 - .top
1522 - );
1523 -
1524 - if(!seenHeaders.has(key)){
1525 - seenHeaders.add(key);
1526 - unique.push(row);
1527 - }
1528 - });
1529 -
1530 - unique.forEach(function(row){
1531 - var headerRect=
1532 - row.el
1533 - .getBoundingClientRect();
1534 -
1535 - row.el.style.setProperty(
1536 - "background",
1537 - row.theme.bg,
1538 - "important"
1539 - );
1540 -
1541 - row.el.style.setProperty(
1542 - "color",
1543 - row.theme.text,
1544 - "important"
1545 - );
1546 -
1547 - row.el.style.setProperty(
1548 - "text-align",
1549 - "left",
1550 - "important"
1551 - );
1552 -
1553 - row.el.style.setProperty(
1554 - "word-spacing",
1555 - "normal",
1556 - "important"
1557 - );
1558 -
1559 - var later=
1560 - unique
1561 - .filter(function(other){
1562 - return (
1563 - other.card===row.card&&
1564 - other.el
1565 - .getBoundingClientRect()
1566 - .top>
1567 - headerRect.top+2
1568 - );
1569 - })
1570 - .sort(function(a,b){
1571 - return (
1572 - a.el
1573 - .getBoundingClientRect()
1574 - .top-
1575 - b.el
1576 - .getBoundingClientRect()
1577 - .top
1578 - );
1579 - });
1580 -
1581 - var stopTop=
1582 - later.length
1583 - ?later[0].el
1584 - .getBoundingClientRect()
1585 - .top
1586 - :Infinity;
1587 -
1588 - Array.from(
1589 - row.card.querySelectorAll("a")
1590 - ).forEach(function(link){
1591 - if(
1592 - link.classList &&
1593 - link.classList.contains(
1594 - "arsn-phase-cta"
1595 - )
1596 - ){
1597 - return;
1598 - }
1599 -
1600 - if(!visible(link))return;
1601 -
1602 - var rect=
1603 - link.getBoundingClientRect();
1604 -
1605 - if(
1606 - rect.top<=
1607 - headerRect.bottom-2||
1608 - rect.top>=
1609 - stopTop-2
1610 - ){
1611 - return;
1612 - }
1613 -
1614 - var candidates=
1615 - rowCandidates(
1616 - link,
1617 - row.card
1618 - );
1619 -
1620 - var target=
1621 - chooseOuterRow(
1622 - candidates,
1623 - link
1624 - );
1625 -
1626 - candidates.forEach(function(el){
1627 - el.style.setProperty(
1628 - "border-left",
1629 - "0 solid transparent",
1630 - "important"
1631 - );
1632 - });
1633 -
1634 - target.style.setProperty(
1635 - "border-left",
1636 - "3px solid "+
1637 - row.theme.accent,
1638 - "important"
1639 - );
1640 -
1641 - target.style.setProperty(
1642 - "box-sizing",
1643 - "border-box",
1644 - "important"
1645 - );
1646 - });
1647 - });
1648 -
1649 - return unique;
764 + return false;
1650 1650   }
1651 1651  
1652 - /* =======================================================
1653 - OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW
1654 - ======================================================= */
1655 -
1656 - function alignOverviewCards(headers){
1657 - if(
1658 - PAGE_KIND!=="overview"||
1659 - window.innerWidth<=MOBILE_MAX
1660 - ){
1661 - return;
1662 - }
1663 -
1664 - var cards=[];
1665 - var seen=new Set();
1666 -
1667 - headers.forEach(function(row){
1668 - if(!seen.has(row.card)){
1669 - seen.add(row.card);
1670 - cards.push(row.card);
1671 - }
1672 - });
1673 -
1674 - if(cards.length<2){
1675 - return;
1676 - }
1677 -
1678 - // Group cards by actual top position.
767 + function rowGroups(entries){
1679 1679   var groups=[];
1680 -
1681 - cards.forEach(function(card){
1682 - var top=
1683 - card.getBoundingClientRect().top;
1684 -
769 + entries.slice().sort(function(a,b){
770 + return a.rect.top-b.rect.top||a.rect.left-b.rect.left;
771 + }).forEach(function(entry){
1685 1685   var group=null;
1686 -
1687 1687   for(var i=0;i<groups.length;i++){
1688 - if(
1689 - Math.abs(
1690 - groups[i].top-top
1691 - )<=ROW_TOLERANCE
1692 - ){
774 + if(Math.abs(groups[i].top-entry.rect.top)<=ROW_TOLERANCE){
1693 1693   group=groups[i];
1694 1694   break;
1695 1695   }
1696 1696   }
1697 -
1698 1698   if(!group){
1699 - group={
1700 - top:top,
1701 - cards:[]
1702 - };
780 + group={top:entry.rect.top,entries:[]};
1703 1703   groups.push(group);
1704 1704   }
1705 -
1706 - group.cards.push(card);
783 + group.entries.push(entry);
1707 1707   });
785 + return groups;
786 + }
1708 1708  
1709 - groups.forEach(function(group){
1710 - if(group.cards.length<2){
1711 - return;
1712 - }
788 + function run(){
789 + reset();
1713 1713  
1714 - var firstHeaders=
1715 - group.cards.map(function(card){
1716 - var candidates=
1717 - headers
1718 - .filter(function(row){
1719 - return row.card===card;
1720 - })
1721 - .sort(function(a,b){
1722 - return (
1723 - a.el
1724 - .getBoundingClientRect()
1725 - .top-
1726 - b.el
1727 - .getBoundingClientRect()
1728 - .top
1729 - );
1730 - });
791 + if(window.innerWidth<=MOBILE_MAX)return;
1731 1731  
1732 - return candidates.length
1733 - ?candidates[0]
1734 - :null;
1735 - });
793 + var parents=Array.from(root.querySelectorAll("*")).filter(function(el){
794 + return el.children&&el.children.length>=2&&horizontalLayout(el);
795 + });
1736 1736  
1737 - if(
1738 - !firstHeaders.some(function(row){
1739 - return !row;
1740 - })
1741 - ){
1742 - var targetTop=
1743 - Math.max.apply(
1744 - Math,
1745 - firstHeaders.map(function(row){
1746 - return (
1747 - row.el
1748 - .getBoundingClientRect()
1749 - .top-
1750 - row.card
1751 - .getBoundingClientRect()
1752 - .top
1753 - );
1754 - })
1755 - );
797 + parents.forEach(function(parent){
798 + var entries=[];
1756 1756  
1757 - firstHeaders.forEach(function(row){
1758 - var relativeTop=
1759 - row.el
1760 - .getBoundingClientRect()
1761 - .top-
1762 - row.card
1763 - .getBoundingClientRect()
1764 - .top;
1765 -
1766 - var delta=
1767 - targetTop-relativeTop;
1768 -
1769 - if(delta>1){
1770 - saveStyle(
1771 - row.el,
1772 - originalMargin,
1773 - "margin-top"
1774 - );
1775 -
1776 - var current=
1777 - num(
1778 - getComputedStyle(
1779 - row.el
1780 - ).marginTop
1781 - );
1782 -
1783 - row.el.style.setProperty(
1784 - "margin-top",
1785 - (
1786 - current+delta
1787 - )+"px"
1788 - );
1789 -
1790 - row.el.setAttribute(
1791 - "data-sn-master-first-row",
1792 - "1"
1793 - );
1794 -
1795 - managedMargin.add(
1796 - row.el
1797 - );
1798 - }
800 + Array.from(parent.children).forEach(function(child){
801 + if(!visible(child))return;
802 + var target=pickTarget(child);
803 + if(!target)return;
804 + entries.push({
805 + target:target,
806 + rect:target.getBoundingClientRect()
1799 1799   });
1800 - }
1801 -
1802 - var maxHeight=0;
1803 -
1804 - group.cards.forEach(function(card){
1805 - maxHeight=
1806 - Math.max(
1807 - maxHeight,
1808 - card
1809 - .getBoundingClientRect()
1810 - .height
1811 - );
1812 1812   });
1813 1813  
1814 - maxHeight=
1815 - Math.ceil(maxHeight);
810 + if(entries.length<2)return;
1816 1816  
1817 - group.cards.forEach(function(card){
1818 - saveStyle(
1819 - card,
1820 - originalHeight,
1821 - "min-height"
1822 - );
812 + rowGroups(entries).forEach(function(group){
813 + if(group.entries.length<2)return;
1823 1823  
1824 - card.style.setProperty(
1825 - "min-height",
1826 - maxHeight+"px"
1827 - );
815 + var lefts=group.entries.map(function(e){return e.rect.left;}).sort(function(a,b){return a-b;});
816 + if(lefts[lefts.length-1]-lefts[0]<80)return;
1828 1828  
1829 - card.setAttribute(
1830 - "data-sn-master-equal-height",
1831 - "1"
1832 - );
818 + var targets=[];
819 + var seen=new Set();
1833 1833  
1834 - managedHeight.add(
1835 - card
1836 - );
1837 - });
1838 - });
1839 - }
1840 -
1841 - /* =======================================================
1842 - DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY
1843 - ======================================================= */
1844 -
1845 - function equaliseDetailGrids(){
1846 - if(
1847 - PAGE_KIND!=="detail"||
1848 - window.innerWidth<=MOBILE_MAX
1849 - ){
1850 - return;
1851 - }
1852 -
1853 - var selectors=[
1854 - ".arsn-grid",
1855 - ".arsn-grid-2",
1856 - ".arsn-grid-3",
1857 - ".dmp-grid",
1858 - ".ido-grid",
1859 - ".pp-grid"
1860 - ];
1861 -
1862 - selectors.forEach(function(selector){
1863 - Array.from(
1864 - root.querySelectorAll(selector)
1865 - ).forEach(function(grid){
1866 - var children=
1867 - Array.from(
1868 - grid.children||[]
1869 - ).filter(visible);
1870 -
1871 - if(children.length<2){
1872 - return;
1873 - }
1874 -
1875 - var groups=[];
1876 -
1877 - children.forEach(function(child){
1878 - var top=
1879 - child
1880 - .getBoundingClientRect()
1881 - .top;
1882 -
1883 - var group=null;
1884 -
1885 - for(var i=0;i<groups.length;i++){
1886 - if(
1887 - Math.abs(
1888 - groups[i].top-top
1889 - )<=ROW_TOLERANCE
1890 - ){
1891 - group=groups[i];
1892 - break;
1893 - }
821 + group.entries.forEach(function(e){
822 + if(!seen.has(e.target)){
823 + seen.add(e.target);
824 + targets.push(e.target);
1894 1894   }
826 + });
1895 1895  
1896 - if(!group){
1897 - group={
1898 - top:top,
1899 - items:[]
1900 - };
1901 - groups.push(group);
1902 - }
828 + if(targets.length<2)return;
1903 1903  
1904 - group.items.push(child);
830 + var max=0;
831 + targets.forEach(function(el){
832 + max=Math.max(max,el.getBoundingClientRect().height);
1905 1905   });
1906 1906  
1907 - groups.forEach(function(group){
1908 - if(group.items.length<2){
1909 - return;
1910 - }
835 + max=Math.ceil(max);
836 + if(max<MIN_H)return;
1911 1911  
1912 - var maxHeight=0;
1913 -
1914 - group.items.forEach(function(item){
1915 - maxHeight=
1916 - Math.max(
1917 - maxHeight,
1918 - item
1919 - .getBoundingClientRect()
1920 - .height
1921 - );
1922 - });
1923 -
1924 - maxHeight=
1925 - Math.ceil(maxHeight);
1926 -
1927 - group.items.forEach(function(item){
1928 - saveStyle(
1929 - item,
1930 - originalHeight,
1931 - "min-height"
1932 - );
1933 -
1934 - item.style.setProperty(
1935 - "min-height",
1936 - maxHeight+"px"
1937 - );
1938 -
1939 - item.setAttribute(
1940 - "data-sn-master-equal-height",
1941 - "1"
1942 - );
1943 -
1944 - managedHeight.add(item);
1945 - });
838 + targets.forEach(function(el){
839 + el.style.setProperty("min-height",max+"px");
840 + el.setAttribute("data-sn-equal-height-managed","1");
841 + managed.add(el);
1946 1946   });
1947 1947   });
1948 1948   });
1949 1949   }
1950 1950  
1951 - /* =======================================================
1952 - RUN / RESPONSIVE SCHEDULING
1953 - ======================================================= */
1954 -
1955 - function run(){
1956 - if(running)return;
1957 -
1958 - running=true;
1959 -
1960 - try{
1961 - resetRuntime();
1962 - applyPlaceholderBadge();
1963 - propagateDetailAccents();
1964 -
1965 - var headers=
1966 - applyOverviewPalette();
1967 -
1968 - makeThreeLineAreaLabels();
1969 - makeFilledRedOrangeCTAsBorderless();
1970 -
1971 - if(
1972 - window.innerWidth>
1973 - MOBILE_MAX
1974 - ){
1975 - alignOverviewCards(
1976 - headers
1977 - );
1978 -
1979 - equaliseDetailGrids();
1980 - }
1981 - }finally{
1982 - running=false;
1983 - }
847 + function schedule(){
848 + if(raf)cancelAnimationFrame(raf);
849 + raf=requestAnimationFrame(function(){
850 + raf=requestAnimationFrame(function(){
851 + raf=0;
852 + run();
853 + });
854 + });
1984 1984   }
1985 1985  
1986 - function onResize(){
1987 - if(resizeTimer){
1988 - clearTimeout(
1989 - resizeTimer
1990 - );
1991 - }
857 + addEventListener("resize",schedule,{passive:true});
858 + addEventListener("load",schedule,{once:true});
1992 1992  
1993 - resizeTimer=
1994 - setTimeout(
1995 - function(){
1996 - resizeTimer=0;
1997 - run();
1998 - },
1999 - RESIZE_DEBOUNCE
2000 - );
2001 - }
860 + root.addEventListener("click",function(){
861 + setTimeout(schedule,0);
862 + },true);
2002 2002  
2003 - async function waitForReady(){
2004 - if(
2005 - document.readyState!=="complete"
2006 - ){
2007 - await new Promise(function(resolve){
2008 - window.addEventListener(
2009 - "load",
2010 - resolve,
2011 - {once:true}
2012 - );
2013 - });
2014 - }
2015 -
2016 - if(
2017 - document.fonts&&
2018 - document.fonts.ready
2019 - ){
2020 - try{
2021 - await document.fonts.ready;
2022 - }catch(error){}
2023 - }
2024 -
2025 - var images=
2026 - Array.from(
2027 - root.querySelectorAll("img")
2028 - );
2029 -
2030 - await Promise.all(
2031 - images.map(function(img){
2032 - if(img.complete){
2033 - return Promise.resolve();
2034 - }
2035 -
2036 - return new Promise(function(resolve){
2037 - var done=function(){
2038 - resolve();
2039 - };
2040 -
2041 - img.addEventListener(
2042 - "load",
2043 - done,
2044 - {once:true}
2045 - );
2046 -
2047 - img.addEventListener(
2048 - "error",
2049 - done,
2050 - {once:true}
2051 - );
2052 - });
2053 - })
2054 - );
2055 -
2056 - run();
864 + if(document.fonts&&document.fonts.ready){
865 + document.fonts.ready.then(schedule);
2057 2057   }
2058 2058  
2059 - window.addEventListener(
2060 - "resize",
2061 - onResize,
2062 - {passive:true}
2063 - );
2064 -
2065 - waitForReady();
868 + schedule();
869 + setTimeout(schedule,250);
870 + setTimeout(schedule,900);
2066 2066  })();
2067 2067  </script>
873 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
874 +{{/html}}
2068 2068  
2069 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END -->{{/html}}{{html clean="false"}}<!-- ARSN_PHASE_CTA_MOBILE_EDGE_FIX_V3_START -->
2070 -<style data-arsn-phase-cta-mobile-edge-fix="3">
2071 -@media (max-width:767px){
2072 -
2073 - /* Remove the white side gutters around the three phase CTAs. */
2074 - #xwikicontent .arsn-phase-cta-wrap{
2075 - box-sizing:border-box!important;
2076 - width:calc(100% + 2px)!important;
2077 - max-width:none!important;
2078 - margin:14px -1px -1px -1px!important;
2079 - padding:0!important;
2080 - border:0!important;
2081 - border-left:0!important;
2082 - box-shadow:none!important;
2083 - background:transparent!important;
2084 - }
2085 -
2086 - /* Full-width orange CTA; no extra border/shadow. */
2087 - #xwikicontent a.arsn-phase-cta{
2088 - display:flex!important;
2089 - align-items:center!important;
2090 - justify-content:center!important;
2091 - gap:8px!important;
2092 -
2093 - box-sizing:border-box!important;
2094 - width:100%!important;
2095 - max-width:none!important;
2096 - min-width:0!important;
2097 -
2098 - margin:0!important;
2099 - padding:12px 14px!important;
2100 -
2101 - border:0!important;
2102 - border-left:0!important;
2103 - border-right:0!important;
2104 - border-top:0!important;
2105 - border-bottom:0!important;
2106 - box-shadow:none!important;
2107 -
2108 - border-radius:8px!important;
2109 -
2110 - text-align:center!important;
2111 - text-align-last:center!important;
2112 - text-justify:auto!important;
2113 - word-spacing:normal!important;
2114 - white-space:normal!important;
2115 - }
2116 -
2117 - /* Keep an XWiki external-link icon on the same line/flex row. */
2118 - #xwikicontent a.arsn-phase-cta::after{
2119 - flex:0 0 auto!important;
2120 - margin-left:2px!important;
2121 - }
2122 -
2123 - #xwikicontent a.arsn-phase-cta > .fa,
2124 - #xwikicontent a.arsn-phase-cta > .icon,
2125 - #xwikicontent a.arsn-phase-cta > .external-link-icon,
2126 - #xwikicontent a.arsn-phase-cta > [class*="external"]{
2127 - position:static!important;
2128 - display:inline-block!important;
2129 - flex:0 0 auto!important;
2130 - margin:0!important;
2131 - }
2132 -}
2133 -</style>
2134 -<!-- ARSN_PHASE_CTA_MOBILE_EDGE_FIX_V3_END -->{{/html}}