Changes for page Prepare

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

From version 29.3
edited by ZID Server
on Tuesday, 01 Sep 2026 10:00
Change comment: deny view right for XWiki.XWikiGuest
To version 31.2
edited by Veronika Kocher
on Friday, 18 Sep 2026 16:47
Change comment: There is no comment for this version

Summary

Details

Page properties
Title
... ... @@ -1,1 +1,1 @@
1 -Enable
1 +Prepare
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.server
1 +XWiki.p0009670
Content
... ... @@ -317,7 +317,7 @@
317 317   <img src="https://xwiki.uni-ak.ac.at/bin/download/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/WebHome/enable.png" alt="Enable — planning and setting up an artistic or research project" />
318 318   </div>
319 319   <div style="padding:18px 22px 21px 22px;">
320 - <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:6px;">PROJECT PHASE 1 · ENABLE</div>
320 + <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:6px;">PROJECT PHASE 1 · PREPARE</div>
321 321   <h2 style="font-size:28px;line-height:1.18;margin:0 0 9px 0;color:#2c2926;">I develop my project idea — I plan, fund &amp; set up my project</h2>
322 322   <p style="font-size:15px;line-height:1.58;color:#5e5953;max-width:1080px;margin:0;">
323 323   Before active project work begins, clarify how the project will be organised, funded and supported,
... ... @@ -331,7 +331,7 @@
331 331  
332 332   <div class="arsn-step active">
333 333   <div class="arsn-step-dot"></div>
334 - <div class="arsn-step-label">1 · ENABLE</div>
334 + <div class="arsn-step-label">1 · PREPARE</div>
335 335   <div class="arsn-step-desc">Plan & set up</div>
336 336   </div>
337 337  
... ... @@ -407,7 +407,7 @@
407 407   <section class="arsn-area" style="border-top:4px solid #21b6d7;">
408 408   <div class="arsn-area-head">
409 409   <div class="arsn-area-label" style="background:#eaf6f9;color:#355f69;"><span class="arsn-area-number">01</span> START HERE <span class="arsn-area-action">· Orient</span></div>
410 - <h4>Orient yourself and choose the right level of setup</h4>
410 + <h4>Orient yourself and choose a workable level of setup</h4>
411 411   <p>Use these pages if you are just starting out, unsure which topics apply, or need a practical minimum setup for a smaller project.</p>
412 412   </div>
413 413   <div class="arsn-area-body">
... ... @@ -464,20 +464,31 @@
464 464   <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Work%20%26%20Manage/" class="btn btn-default" style="background:#fff7f1;border-color:#e4cabc;color:#493a34;">Continue to Work &amp; Manage</a>
465 465   </section>
466 466  
467 - <div style="margin:0 0 13px 0;">
467 +<!-- ARSN_TRAINING_WORKSHOPS_V2_START -->
468 +<section class="arsn-training-workshops" data-arsn-training-workshops="v2" style="margin:27px 0 22px 0;">
469 + <div style="padding:16px 18px;background:#eef8fa;border:1px solid #cfe8ef;border-left:5px solid #21b6d7;border-radius:9px;">
470 + <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#3f6871;margin-bottom:5px;">TRAINING &amp; WORKSHOPS</div>
471 + <h3 style="font-size:20px;line-height:1.3;margin:0 0 7px;color:#35312d;text-align:left;">Training, workshops &amp; consultation sessions</h3>
472 + <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>
473 + <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>
474 + </div>
475 +</section>
476 +<!-- ARSN_TRAINING_WORKSHOPS_V2_END -->
477 +
478 +<div style="margin:0 0 13px 0;">
468 468   <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">USEFUL MATERIALS</div>
469 469   <h3 style="font-size:22px;margin:0 0 4px 0;color:#35312d;">Practical resources</h3>
470 470   </div>
471 471  
472 472   <div class="arsn-resource-grid" style="margin-bottom:27px;">
473 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong style="color:#3a5d66;">Info Sheets</strong><div style="margin-top:5px;color:#625d56;">Short reference guides for common questions and decisions.</div></div>
474 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong style="color:#503a31;">Tutorials</strong><div style="margin-top:5px;color:#625d56;">Step-by-step instructions for specific tasks and workflows.</div></div>
475 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong style="color:#3f6b4b;">Checklists &amp; Templates</strong><div style="margin-top:5px;color:#625d56;">Reusable aids for planning, documenting and reviewing your project setup.</div></div>
484 + <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong style="color:#3a5d66;">Info Sheets</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span><div style="margin-top:5px;color:#625d56;">Short reference guides for common questions and decisions.</div></div>
485 + <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong style="color:#503a31;">Tutorials</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span><div style="margin-top:5px;color:#625d56;">Step-by-step instructions for specific tasks and workflows.</div></div>
486 + <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong style="color:#3f6b4b;">Checklists &amp; Templates</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;line-height:1.2;">COMING SOON</span><div style="margin-top:5px;color:#625d56;">Reusable aids for planning, documenting and reviewing your project setup.</div></div>
476 476   </div>
477 477  
478 - <aside style="margin:0 0 14px 0;padding:16px 18px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#e5f5f9;border-radius:8px;">
479 - <strong style="color:#2d5661;">Need help?</strong>
480 - <div style="margin-top:5px;color:#365e68;line-height:1.5;">Not sure which requirements, services or next steps apply to your project? Contact Art &amp; Research Services for project-specific support.</div>
489 + <aside style="margin:0 0 14px 0;padding:16px 18px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#e5f5f9;border-radius:8px;"><!-- ARSN_PHASE_ROUTING_V1 -->
490 + <strong style="color:#2d5661;">Need help deciding where to start?</strong>
491 + <div style="margin-top:5px;color:#365e68;line-height:1.5;"><strong>Start with Support Kunst und Forschung</strong> for project development, funding, proposals and coordination of funded art/research projects. For rights, data, IT, finance, HR, rooms or other specialist questions, follow the responsible service named on the topic page.</div>
481 481   </aside>
482 482  
483 483   <div class="arsn-tip"><strong>Tip · A useful rule of thumb:</strong> Plan early, document decisions, and review them as the project changes. A simple setup that is actually used is usually more effective than a complex plan that is never updated.</div>
... ... @@ -484,3 +484,1404 @@
484 484  
485 485  </div>
486 486  {{/html}}
498 +
499 +{{html clean="false"}}
500 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START -->
501 +
502 +<style data-sn-service-navigator-master="1">
503 +/* =========================================================
504 + MASTER TYPOGRAPHY
505 + ========================================================= */
506 +#xwikicontent h1,
507 +#xwikicontent h2,
508 +#xwikicontent h3,
509 +#xwikicontent h4,
510 +#xwikicontent h5,
511 +#xwikicontent h6,
512 +#xwikicontent .box-title,
513 +#xwikicontent [role="heading"],
514 +#xwikicontent h1 a,
515 +#xwikicontent h2 a,
516 +#xwikicontent h3 a,
517 +#xwikicontent h4 a,
518 +#xwikicontent h5 a,
519 +#xwikicontent h6 a,
520 +#xwikicontent .box-title a,
521 +#xwikicontent [role="heading"] a{
522 + text-align:left!important;
523 + text-justify:auto!important;
524 + word-spacing:normal!important;
525 +}
526 +
527 +/* =========================================================
528 + COMING SOON / IN VORBEREITUNG
529 + ========================================================= */
530 +.sn-coming-soon-badge{
531 + display:inline-block;
532 + vertical-align:middle;
533 + margin-left:10px;
534 + padding:4px 8px;
535 + border-radius:14px;
536 + border:1px solid #efd9cc;
537 + background:#fff4ee;
538 + color:#8a4d36;
539 + font-size:11px;
540 + font-weight:700;
541 + letter-spacing:.055em;
542 + line-height:1.2;
543 + white-space:nowrap;
544 +}
545 +
546 +/* =========================================================
547 + NATIVE / DETAIL CALLOUT GEOMETRY
548 + Preserve existing backgrounds.
549 + ========================================================= */
550 +#xwikicontent .arsn-info,
551 +#xwikicontent .dmp-info,
552 +#xwikicontent .ido-info,
553 +#xwikicontent .pp-info,
554 +#xwikicontent .infomessage{
555 + box-sizing:border-box!important;
556 + border-left:4px solid #21b6d7!important;
557 + border-radius:8px;
558 + text-align:left!important;
559 + word-spacing:normal!important;
560 +}
561 +
562 +#xwikicontent .arsn-warn,
563 +#xwikicontent .dmp-warn,
564 +#xwikicontent .ido-warn,
565 +#xwikicontent .pp-warn,
566 +#xwikicontent .warn,
567 +#xwikicontent .warning,
568 +#xwikicontent .warningmessage,
569 +#xwikicontent .errormessage{
570 + box-sizing:border-box!important;
571 + border-left:4px solid #e94b13!important;
572 + border-radius:8px;
573 + text-align:left!important;
574 + word-spacing:normal!important;
575 +}
576 +
577 +[data-sn-master-equal-height],
578 +[data-sn-master-first-row]{
579 + box-sizing:border-box;
580 +}
581 +
582 +/* =========================================================
583 + FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS
584 + ========================================================= */
585 +#xwikicontent .arsn-area-label[data-sn-three-line="1"]{
586 + display:grid!important;
587 + grid-template-columns:minmax(0,1fr)!important;
588 + grid-auto-rows:auto!important;
589 + width:100%!important;
590 + max-width:none!important;
591 + box-sizing:border-box!important;
592 + justify-items:start!important;
593 + align-items:start!important;
594 + gap:2px!important;
595 + text-align:left!important;
596 + text-align-last:left!important;
597 + text-justify:auto!important;
598 + word-spacing:normal!important;
599 + white-space:normal!important;
600 +}
601 +#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number,
602 +#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title,
603 +#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{
604 + display:block!important;
605 + width:100%!important;
606 + margin:0!important;
607 + text-align:left!important;
608 + text-align-last:left!important;
609 + text-justify:auto!important;
610 + word-spacing:normal!important;
611 + white-space:normal!important;
612 +}
613 +</style>
614 +
615 +<script data-sn-service-navigator-master="1">
616 +(function(){
617 + "use strict";
618 +
619 + var PAGE_KIND="overview";
620 + var PLACEHOLDER=false;
621 + var PLACEHOLDER_LABEL="COMING SOON";
622 +
623 + var MOBILE_MAX=767;
624 + var ROW_TOLERANCE=6;
625 + var RESIZE_DEBOUNCE=220;
626 +
627 + var root=
628 + document.getElementById("xwikicontent")||
629 + document.querySelector(".xwiki-rendering-content")||
630 + document.querySelector("main")||
631 + document.body;
632 +
633 + if(!root)return;
634 +
635 + var managedHeight=new Set();
636 + var managedMargin=new Set();
637 + var originalHeight=new WeakMap();
638 + var originalMargin=new WeakMap();
639 +
640 + var resizeTimer=0;
641 + var running=false;
642 +
643 + var THEMES=[
644 + {
645 + name:"BLUE",
646 + accent:"#21b6d7",
647 + bg:"#eaf7fb",
648 + text:"#315d68",
649 + labels:[
650 + "HIER STARTEN",
651 + "ENTSCHEIDEN",
652 + "ÜBERPRÜFEN & ANPASSEN",
653 + "START HERE",
654 + "DECIDE",
655 + "REVIEW & ADAPT"
656 + ]
657 + },
658 + {
659 + name:"RED",
660 + accent:"#e94b13",
661 + bg:"#fff1ec",
662 + text:"#8a4d36",
663 + labels:[
664 + "PLANEN & ORGANISIEREN",
665 + "ORGANISIEREN & DOKUMENTIEREN",
666 + "PUBLIZIEREN & PRÄSENTIEREN",
667 + "PLAN & ORGANISE",
668 + "PLAN & ORGANIZE",
669 + "ORGANISE & DOCUMENT",
670 + "ORGANIZE & DOCUMENT",
671 + "PUBLISH & PRESENT"
672 + ]
673 + },
674 + {
675 + name:"YELLOW",
676 + accent:"#f0aa00",
677 + bg:"#fff8e7",
678 + text:"#785b17",
679 + labels:[
680 + "SCHÜTZEN & KLÄREN",
681 + "STANDARDISIEREN & IDENTIFIZIEREN",
682 + "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN",
683 + "PROTECT & CLARIFY",
684 + "STANDARDISE & IDENTIFY",
685 + "STANDARDIZE & IDENTIFY",
686 + "OPEN, REUSE & MAKE FINDABLE"
687 + ]
688 + },
689 + {
690 + name:"GREEN",
691 + accent:"#38b76a",
692 + bg:"#edf9f1",
693 + text:"#3f7451",
694 + labels:[
695 + "INFRASTRUKTUR EINRICHTEN",
696 + "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN",
697 + "SPEICHERN & ZUGRIFF STEUERN",
698 + "REPOSITORIUM, ERHALTEN & ÜBERGEBEN",
699 + "SET UP INFRASTRUCTURE",
700 + "SET UP INFRASTRUCTURE & COLLABORATION",
701 + "STORE & CONTROL ACCESS",
702 + "REPOSITORY, PRESERVE & HAND OVER"
703 + ]
704 + }
705 + ];
706 +
707 + function num(value){
708 + var n=parseFloat(value);
709 + return Number.isFinite(n)?n:0;
710 + }
711 +
712 + function norm(value){
713 + return String(value||"")
714 + .replace(/\s+/g," ")
715 + .trim()
716 + .toUpperCase();
717 + }
718 +
719 + function visible(el){
720 + if(!el||el.nodeType!==1)return false;
721 +
722 + var style=getComputedStyle(el);
723 + var rect=el.getBoundingClientRect();
724 +
725 + return (
726 + style.display!=="none"&&
727 + style.visibility!=="hidden"&&
728 + rect.width>20&&
729 + rect.height>4
730 + );
731 + }
732 +
733 + function saveStyle(el,map,property){
734 + if(map.has(el))return;
735 +
736 + map.set(el,{
737 + value:el.style.getPropertyValue(property),
738 + priority:el.style.getPropertyPriority(property)
739 + });
740 + }
741 +
742 + function restoreStyle(el,map,property){
743 + var original=map.get(el);
744 +
745 + if(original&&original.value){
746 + el.style.setProperty(
747 + property,
748 + original.value,
749 + original.priority||""
750 + );
751 + }else{
752 + el.style.removeProperty(property);
753 + }
754 + }
755 +
756 + function resetRuntime(){
757 + managedHeight.forEach(function(el){
758 + restoreStyle(
759 + el,
760 + originalHeight,
761 + "min-height"
762 + );
763 + el.removeAttribute(
764 + "data-sn-master-equal-height"
765 + );
766 + });
767 +
768 + managedMargin.forEach(function(el){
769 + restoreStyle(
770 + el,
771 + originalMargin,
772 + "margin-top"
773 + );
774 + el.removeAttribute(
775 + "data-sn-master-first-row"
776 + );
777 + });
778 +
779 + managedHeight.clear();
780 + managedMargin.clear();
781 + }
782 +
783 + function themeFor(text){
784 + var value=norm(text);
785 +
786 + for(var i=0;i<THEMES.length;i++){
787 + for(var j=0;j<THEMES[i].labels.length;j++){
788 + var label=THEMES[i].labels[j];
789 +
790 + if(
791 + value===label||
792 + value.indexOf(label+" ")===0||
793 + value.indexOf(label+" -")===0||
794 + value.indexOf(label+" ·")===0
795 + ){
796 + return THEMES[i];
797 + }
798 + }
799 + }
800 +
801 + return null;
802 + }
803 +
804 + /* =======================================================
805 + BORDERLESS FILLED RED/ORANGE CTA BUTTONS
806 + ======================================================= */
807 +
808 + function colourDistance(a,b){
809 + return Math.sqrt(
810 + Math.pow(a[0]-b[0],2)+
811 + Math.pow(a[1]-b[1],2)+
812 + Math.pow(a[2]-b[2],2)
813 + );
814 + }
815 +
816 + function makeFilledRedOrangeCTAsBorderless(){
817 + var RED_ORANGE=[233,75,19];
818 +
819 + Array.from(
820 + root.querySelectorAll(
821 + 'a,button,[role="button"],input[type="submit"],input[type="button"]'
822 + )
823 + ).forEach(function(el){
824 + if(!visible(el))return;
825 +
826 + var style=getComputedStyle(el);
827 + var rgb=parseRGB(style.backgroundColor);
828 +
829 + if(!rgb)return;
830 +
831 + if(
832 + colourDistance(
833 + rgb,
834 + RED_ORANGE
835 + )>55
836 + ){
837 + return;
838 + }
839 +
840 + var rect=el.getBoundingClientRect();
841 +
842 + if(
843 + rect.width<80||
844 + rect.height<24
845 + ){
846 + return;
847 + }
848 +
849 + el.style.setProperty(
850 + "border",
851 + "none",
852 + "important"
853 + );
854 +
855 + el.style.setProperty(
856 + "border-left",
857 + "none",
858 + "important"
859 + );
860 +
861 + el.style.setProperty(
862 + "border-top",
863 + "none",
864 + "important"
865 + );
866 +
867 + el.style.setProperty(
868 + "border-right",
869 + "none",
870 + "important"
871 + );
872 +
873 + el.style.setProperty(
874 + "border-bottom",
875 + "none",
876 + "important"
877 + );
878 +
879 + el.style.setProperty(
880 + "box-shadow",
881 + "none",
882 + "important"
883 + );
884 + });
885 + }
886 +
887 + /* =======================================================
888 + FULL-WIDTH THREE-LINE AREA LABELS
889 + ======================================================= */
890 +
891 + function compactText(value){
892 + return String(value||"")
893 + .replace(/\s+/g," ")
894 + .trim();
895 + }
896 +
897 + function makeThreeLineAreaLabels(){
898 + Array.from(
899 + root.querySelectorAll(
900 + ".arsn-area-label"
901 + )
902 + ).forEach(function(label){
903 + if(
904 + label.getAttribute(
905 + "data-sn-three-line"
906 + )==="1"
907 + ){
908 + return;
909 + }
910 +
911 + var number=
912 + label.querySelector(
913 + ":scope > .arsn-area-number"
914 + );
915 +
916 + var action=
917 + label.querySelector(
918 + ":scope > .arsn-area-action"
919 + );
920 +
921 + if(
922 + !number||
923 + !action
924 + ){
925 + return;
926 + }
927 +
928 + var clone=
929 + label.cloneNode(true);
930 +
931 + var cloneNumber=
932 + clone.querySelector(
933 + ":scope > .arsn-area-number"
934 + );
935 +
936 + var cloneAction=
937 + clone.querySelector(
938 + ":scope > .arsn-area-action"
939 + );
940 +
941 + if(cloneNumber){
942 + cloneNumber.remove();
943 + }
944 +
945 + if(cloneAction){
946 + cloneAction.remove();
947 + }
948 +
949 + var titleText=
950 + compactText(
951 + clone.textContent
952 + );
953 +
954 + if(!titleText){
955 + return;
956 + }
957 +
958 + var numberNode=
959 + number.cloneNode(true);
960 +
961 + var actionNode=
962 + action.cloneNode(true);
963 +
964 + var titleNode=
965 + document.createElement(
966 + "span"
967 + );
968 +
969 + titleNode.className=
970 + "sn-area-label-title";
971 +
972 + titleNode.textContent=
973 + titleText;
974 +
975 + while(label.firstChild){
976 + label.removeChild(
977 + label.firstChild
978 + );
979 + }
980 +
981 + label.appendChild(
982 + numberNode
983 + );
984 +
985 + label.appendChild(
986 + titleNode
987 + );
988 +
989 + label.appendChild(
990 + actionNode
991 + );
992 +
993 + label.setAttribute(
994 + "data-sn-three-line",
995 + "1"
996 + );
997 +
998 + var head=
999 + label.closest(
1000 + ".arsn-area-head"
1001 + );
1002 +
1003 + if(head){
1004 + head.style.setProperty(
1005 + "width",
1006 + "100%",
1007 + "important"
1008 + );
1009 +
1010 + head.style.setProperty(
1011 + "max-width",
1012 + "100%",
1013 + "important"
1014 + );
1015 +
1016 + head.style.setProperty(
1017 + "box-sizing",
1018 + "border-box",
1019 + "important"
1020 + );
1021 + }
1022 + });
1023 + }
1024 +
1025 + /* =======================================================
1026 + PLACEHOLDER BADGE
1027 + ======================================================= */
1028 +
1029 + function applyPlaceholderBadge(){
1030 + if(!PLACEHOLDER)return;
1031 +
1032 + if(
1033 + document.querySelector(
1034 + ".sn-coming-soon-badge"
1035 + )
1036 + ){
1037 + return;
1038 + }
1039 +
1040 + var title=
1041 + document.querySelector(
1042 + "#document-title"
1043 + )||
1044 + document.querySelector(
1045 + "h1"
1046 + );
1047 +
1048 + if(!title)return;
1049 +
1050 + var badge=
1051 + document.createElement(
1052 + "span"
1053 + );
1054 +
1055 + badge.className=
1056 + "sn-coming-soon-badge";
1057 +
1058 + badge.textContent=
1059 + PLACEHOLDER_LABEL;
1060 +
1061 + badge.setAttribute(
1062 + "aria-label",
1063 + PLACEHOLDER_LABEL
1064 + );
1065 +
1066 + title.appendChild(
1067 + badge
1068 + );
1069 + }
1070 +
1071 + /* =======================================================
1072 + DETAIL PAGE OWN-ACCENT PROPAGATION
1073 + ======================================================= */
1074 +
1075 + function parseRGB(value){
1076 + var match=String(value||"").match(
1077 + /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i
1078 + );
1079 +
1080 + if(!match)return null;
1081 +
1082 + return [
1083 + Number(match[1]),
1084 + Number(match[2]),
1085 + Number(match[3])
1086 + ];
1087 + }
1088 +
1089 + function distance(a,b){
1090 + return Math.sqrt(
1091 + Math.pow(a[0]-b[0],2)+
1092 + Math.pow(a[1]-b[1],2)+
1093 + Math.pow(a[2]-b[2],2)
1094 + );
1095 + }
1096 +
1097 + function paletteMatch(cssColor){
1098 + var rgb=parseRGB(cssColor);
1099 +
1100 + if(!rgb)return null;
1101 +
1102 + var palette=[
1103 + {hex:"#21b6d7",rgb:[33,182,215]},
1104 + {hex:"#e94b13",rgb:[233,75,19]},
1105 + {hex:"#f0aa00",rgb:[240,170,0]},
1106 + {hex:"#38b76a",rgb:[56,183,106]}
1107 + ];
1108 +
1109 + var best=null;
1110 + var bestDistance=Infinity;
1111 +
1112 + palette.forEach(function(item){
1113 + var d=distance(rgb,item.rgb);
1114 +
1115 + if(d<bestDistance){
1116 + best=item;
1117 + bestDistance=d;
1118 + }
1119 + });
1120 +
1121 + return bestDistance<=30
1122 + ?best
1123 + :null;
1124 + }
1125 +
1126 + function propagateDetailAccents(){
1127 + if(PAGE_KIND!=="detail")return;
1128 +
1129 + Array.from(
1130 + root.querySelectorAll(
1131 + ".arsn-call,.dmp-call,.ido-call,.pp-call,"+
1132 + ".arsn-source,.dmp-source,.ido-source,.pp-source"
1133 + )
1134 + ).forEach(function(el){
1135 + if(!visible(el))return;
1136 +
1137 + var style=getComputedStyle(el);
1138 +
1139 + if(
1140 + num(style.borderTopWidth)>=2
1141 + ){
1142 + var match=
1143 + paletteMatch(
1144 + style.borderTopColor
1145 + );
1146 +
1147 + if(match){
1148 + el.style.setProperty(
1149 + "border-left",
1150 + "4px solid "+match.hex,
1151 + "important"
1152 + );
1153 + }
1154 + }
1155 + });
1156 +
1157 + // Warning families: explicit safety override.
1158 + Array.from(
1159 + root.querySelectorAll(
1160 + ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+
1161 + ".warn,.warning,.warningmessage,.errormessage"
1162 + )
1163 + ).forEach(function(el){
1164 + if(!visible(el))return;
1165 +
1166 + el.style.setProperty(
1167 + "border-left",
1168 + "4px solid #e94b13",
1169 + "important"
1170 + );
1171 + });
1172 +
1173 + // Info families: explicit orientation override.
1174 + Array.from(
1175 + root.querySelectorAll(
1176 + ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage"
1177 + )
1178 + ).forEach(function(el){
1179 + if(!visible(el))return;
1180 +
1181 + el.style.setProperty(
1182 + "border-left",
1183 + "4px solid #21b6d7",
1184 + "important"
1185 + );
1186 + });
1187 + }
1188 +
1189 + /* =======================================================
1190 + OVERVIEW SEMANTIC THEME PALETTE
1191 + ======================================================= */
1192 +
1193 + function smallestThemeHeaders(){
1194 + // Phase overview rule:
1195 + // only explicit three-line area-label blocks carry semantic colour.
1196 + // Ordinary h4 and focus-card headings stay neutral.
1197 + return Array.from(
1198 + root.querySelectorAll(
1199 + ".arsn-area-label"
1200 + )
1201 + ).filter(function(el){
1202 + return (
1203 + visible(el)&&
1204 + !!themeFor(
1205 + el.textContent
1206 + )
1207 + );
1208 + });
1209 + }
1210 +
1211 + function findOverviewCard(header){
1212 + var node=header.parentElement;
1213 + var candidates=[];
1214 +
1215 + while(node&&node!==root){
1216 + var rect=node.getBoundingClientRect();
1217 + var style=getComputedStyle(node);
1218 +
1219 + var border=
1220 + num(style.borderTopWidth)+
1221 + num(style.borderRightWidth)+
1222 + num(style.borderBottomWidth)+
1223 + num(style.borderLeftWidth);
1224 +
1225 + if(
1226 + rect.width>=220&&
1227 + rect.width<=800&&
1228 + rect.height>=120&&
1229 + border>=1
1230 + ){
1231 + candidates.push(node);
1232 + }
1233 +
1234 + node=node.parentElement;
1235 + }
1236 +
1237 + if(!candidates.length)return null;
1238 +
1239 + candidates.sort(function(a,b){
1240 + return (
1241 + b.getBoundingClientRect().height-
1242 + a.getBoundingClientRect().height
1243 + );
1244 + });
1245 +
1246 + return candidates[0];
1247 + }
1248 +
1249 + function rowCandidates(link,card){
1250 + var result=[];
1251 + var cardRect=
1252 + card.getBoundingClientRect();
1253 +
1254 + var node=link;
1255 +
1256 + while(node&&node!==card){
1257 + if(visible(node)){
1258 + var rect=
1259 + node.getBoundingClientRect();
1260 +
1261 + if(
1262 + rect.height<=105&&
1263 + rect.width>=
1264 + cardRect.width*.50&&
1265 + rect.width<=
1266 + cardRect.width*1.03
1267 + ){
1268 + result.push(node);
1269 + }
1270 + }
1271 +
1272 + node=node.parentElement;
1273 + }
1274 +
1275 + return result;
1276 + }
1277 +
1278 + function chooseOuterRow(
1279 + candidates,
1280 + link
1281 + ){
1282 + if(!candidates.length){
1283 + return link;
1284 + }
1285 +
1286 + var bordered=
1287 + candidates.filter(function(el){
1288 + return (
1289 + num(
1290 + getComputedStyle(el)
1291 + .borderLeftWidth
1292 + )>=1
1293 + );
1294 + });
1295 +
1296 + var pool=
1297 + bordered.length
1298 + ?bordered
1299 + :candidates;
1300 +
1301 + pool.sort(function(a,b){
1302 + var ar=
1303 + a.getBoundingClientRect();
1304 +
1305 + var br=
1306 + b.getBoundingClientRect();
1307 +
1308 + return (
1309 + ar.left-br.left||
1310 + br.width-ar.width
1311 + );
1312 + });
1313 +
1314 + return pool[0]||link;
1315 + }
1316 +
1317 + function applyOverviewPalette(){
1318 + if(PAGE_KIND!=="overview"){
1319 + return [];
1320 + }
1321 +
1322 + var headers=
1323 + smallestThemeHeaders()
1324 + .map(function(el){
1325 + return {
1326 + el:el,
1327 + theme:
1328 + themeFor(
1329 + el.textContent
1330 + ),
1331 + card:
1332 + findOverviewCard(
1333 + el
1334 + )
1335 + };
1336 + })
1337 + .filter(function(row){
1338 + return !!row.card;
1339 + });
1340 +
1341 + var unique=[];
1342 + var seenHeaders=new Set();
1343 +
1344 + headers.forEach(function(row){
1345 + var key=
1346 + row.theme.name+
1347 + "|"+
1348 + Math.round(
1349 + row.card
1350 + .getBoundingClientRect()
1351 + .left
1352 + )+
1353 + "|"+
1354 + Math.round(
1355 + row.el
1356 + .getBoundingClientRect()
1357 + .top
1358 + );
1359 +
1360 + if(!seenHeaders.has(key)){
1361 + seenHeaders.add(key);
1362 + unique.push(row);
1363 + }
1364 + });
1365 +
1366 + unique.forEach(function(row){
1367 + var headerRect=
1368 + row.el
1369 + .getBoundingClientRect();
1370 +
1371 + row.el.style.setProperty(
1372 + "background",
1373 + row.theme.bg,
1374 + "important"
1375 + );
1376 +
1377 + row.el.style.setProperty(
1378 + "color",
1379 + row.theme.text,
1380 + "important"
1381 + );
1382 +
1383 + row.el.style.setProperty(
1384 + "text-align",
1385 + "left",
1386 + "important"
1387 + );
1388 +
1389 + row.el.style.setProperty(
1390 + "word-spacing",
1391 + "normal",
1392 + "important"
1393 + );
1394 +
1395 + var later=
1396 + unique
1397 + .filter(function(other){
1398 + return (
1399 + other.card===row.card&&
1400 + other.el
1401 + .getBoundingClientRect()
1402 + .top>
1403 + headerRect.top+2
1404 + );
1405 + })
1406 + .sort(function(a,b){
1407 + return (
1408 + a.el
1409 + .getBoundingClientRect()
1410 + .top-
1411 + b.el
1412 + .getBoundingClientRect()
1413 + .top
1414 + );
1415 + });
1416 +
1417 + var stopTop=
1418 + later.length
1419 + ?later[0].el
1420 + .getBoundingClientRect()
1421 + .top
1422 + :Infinity;
1423 +
1424 + Array.from(
1425 + row.card.querySelectorAll("a")
1426 + ).forEach(function(link){
1427 + if(!visible(link))return;
1428 +
1429 + var rect=
1430 + link.getBoundingClientRect();
1431 +
1432 + if(
1433 + rect.top<=
1434 + headerRect.bottom-2||
1435 + rect.top>=
1436 + stopTop-2
1437 + ){
1438 + return;
1439 + }
1440 +
1441 + var candidates=
1442 + rowCandidates(
1443 + link,
1444 + row.card
1445 + );
1446 +
1447 + var target=
1448 + chooseOuterRow(
1449 + candidates,
1450 + link
1451 + );
1452 +
1453 + candidates.forEach(function(el){
1454 + el.style.setProperty(
1455 + "border-left",
1456 + "0 solid transparent",
1457 + "important"
1458 + );
1459 + });
1460 +
1461 + target.style.setProperty(
1462 + "border-left",
1463 + "3px solid "+
1464 + row.theme.accent,
1465 + "important"
1466 + );
1467 +
1468 + target.style.setProperty(
1469 + "box-sizing",
1470 + "border-box",
1471 + "important"
1472 + );
1473 + });
1474 + });
1475 +
1476 + return unique;
1477 + }
1478 +
1479 + /* =======================================================
1480 + OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW
1481 + ======================================================= */
1482 +
1483 + function alignOverviewCards(headers){
1484 + if(
1485 + PAGE_KIND!=="overview"||
1486 + window.innerWidth<=MOBILE_MAX
1487 + ){
1488 + return;
1489 + }
1490 +
1491 + var cards=[];
1492 + var seen=new Set();
1493 +
1494 + headers.forEach(function(row){
1495 + if(!seen.has(row.card)){
1496 + seen.add(row.card);
1497 + cards.push(row.card);
1498 + }
1499 + });
1500 +
1501 + if(cards.length<2){
1502 + return;
1503 + }
1504 +
1505 + // Group cards by actual top position.
1506 + var groups=[];
1507 +
1508 + cards.forEach(function(card){
1509 + var top=
1510 + card.getBoundingClientRect().top;
1511 +
1512 + var group=null;
1513 +
1514 + for(var i=0;i<groups.length;i++){
1515 + if(
1516 + Math.abs(
1517 + groups[i].top-top
1518 + )<=ROW_TOLERANCE
1519 + ){
1520 + group=groups[i];
1521 + break;
1522 + }
1523 + }
1524 +
1525 + if(!group){
1526 + group={
1527 + top:top,
1528 + cards:[]
1529 + };
1530 + groups.push(group);
1531 + }
1532 +
1533 + group.cards.push(card);
1534 + });
1535 +
1536 + groups.forEach(function(group){
1537 + if(group.cards.length<2){
1538 + return;
1539 + }
1540 +
1541 + var firstHeaders=
1542 + group.cards.map(function(card){
1543 + var candidates=
1544 + headers
1545 + .filter(function(row){
1546 + return row.card===card;
1547 + })
1548 + .sort(function(a,b){
1549 + return (
1550 + a.el
1551 + .getBoundingClientRect()
1552 + .top-
1553 + b.el
1554 + .getBoundingClientRect()
1555 + .top
1556 + );
1557 + });
1558 +
1559 + return candidates.length
1560 + ?candidates[0]
1561 + :null;
1562 + });
1563 +
1564 + if(
1565 + !firstHeaders.some(function(row){
1566 + return !row;
1567 + })
1568 + ){
1569 + var targetTop=
1570 + Math.max.apply(
1571 + Math,
1572 + firstHeaders.map(function(row){
1573 + return (
1574 + row.el
1575 + .getBoundingClientRect()
1576 + .top-
1577 + row.card
1578 + .getBoundingClientRect()
1579 + .top
1580 + );
1581 + })
1582 + );
1583 +
1584 + firstHeaders.forEach(function(row){
1585 + var relativeTop=
1586 + row.el
1587 + .getBoundingClientRect()
1588 + .top-
1589 + row.card
1590 + .getBoundingClientRect()
1591 + .top;
1592 +
1593 + var delta=
1594 + targetTop-relativeTop;
1595 +
1596 + if(delta>1){
1597 + saveStyle(
1598 + row.el,
1599 + originalMargin,
1600 + "margin-top"
1601 + );
1602 +
1603 + var current=
1604 + num(
1605 + getComputedStyle(
1606 + row.el
1607 + ).marginTop
1608 + );
1609 +
1610 + row.el.style.setProperty(
1611 + "margin-top",
1612 + (
1613 + current+delta
1614 + )+"px"
1615 + );
1616 +
1617 + row.el.setAttribute(
1618 + "data-sn-master-first-row",
1619 + "1"
1620 + );
1621 +
1622 + managedMargin.add(
1623 + row.el
1624 + );
1625 + }
1626 + });
1627 + }
1628 +
1629 + var maxHeight=0;
1630 +
1631 + group.cards.forEach(function(card){
1632 + maxHeight=
1633 + Math.max(
1634 + maxHeight,
1635 + card
1636 + .getBoundingClientRect()
1637 + .height
1638 + );
1639 + });
1640 +
1641 + maxHeight=
1642 + Math.ceil(maxHeight);
1643 +
1644 + group.cards.forEach(function(card){
1645 + saveStyle(
1646 + card,
1647 + originalHeight,
1648 + "min-height"
1649 + );
1650 +
1651 + card.style.setProperty(
1652 + "min-height",
1653 + maxHeight+"px"
1654 + );
1655 +
1656 + card.setAttribute(
1657 + "data-sn-master-equal-height",
1658 + "1"
1659 + );
1660 +
1661 + managedHeight.add(
1662 + card
1663 + );
1664 + });
1665 + });
1666 + }
1667 +
1668 + /* =======================================================
1669 + DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY
1670 + ======================================================= */
1671 +
1672 + function equaliseDetailGrids(){
1673 + if(
1674 + PAGE_KIND!=="detail"||
1675 + window.innerWidth<=MOBILE_MAX
1676 + ){
1677 + return;
1678 + }
1679 +
1680 + var selectors=[
1681 + ".arsn-grid",
1682 + ".arsn-grid-2",
1683 + ".arsn-grid-3",
1684 + ".dmp-grid",
1685 + ".ido-grid",
1686 + ".pp-grid"
1687 + ];
1688 +
1689 + selectors.forEach(function(selector){
1690 + Array.from(
1691 + root.querySelectorAll(selector)
1692 + ).forEach(function(grid){
1693 + var children=
1694 + Array.from(
1695 + grid.children||[]
1696 + ).filter(visible);
1697 +
1698 + if(children.length<2){
1699 + return;
1700 + }
1701 +
1702 + var groups=[];
1703 +
1704 + children.forEach(function(child){
1705 + var top=
1706 + child
1707 + .getBoundingClientRect()
1708 + .top;
1709 +
1710 + var group=null;
1711 +
1712 + for(var i=0;i<groups.length;i++){
1713 + if(
1714 + Math.abs(
1715 + groups[i].top-top
1716 + )<=ROW_TOLERANCE
1717 + ){
1718 + group=groups[i];
1719 + break;
1720 + }
1721 + }
1722 +
1723 + if(!group){
1724 + group={
1725 + top:top,
1726 + items:[]
1727 + };
1728 + groups.push(group);
1729 + }
1730 +
1731 + group.items.push(child);
1732 + });
1733 +
1734 + groups.forEach(function(group){
1735 + if(group.items.length<2){
1736 + return;
1737 + }
1738 +
1739 + var maxHeight=0;
1740 +
1741 + group.items.forEach(function(item){
1742 + maxHeight=
1743 + Math.max(
1744 + maxHeight,
1745 + item
1746 + .getBoundingClientRect()
1747 + .height
1748 + );
1749 + });
1750 +
1751 + maxHeight=
1752 + Math.ceil(maxHeight);
1753 +
1754 + group.items.forEach(function(item){
1755 + saveStyle(
1756 + item,
1757 + originalHeight,
1758 + "min-height"
1759 + );
1760 +
1761 + item.style.setProperty(
1762 + "min-height",
1763 + maxHeight+"px"
1764 + );
1765 +
1766 + item.setAttribute(
1767 + "data-sn-master-equal-height",
1768 + "1"
1769 + );
1770 +
1771 + managedHeight.add(item);
1772 + });
1773 + });
1774 + });
1775 + });
1776 + }
1777 +
1778 + /* =======================================================
1779 + RUN / RESPONSIVE SCHEDULING
1780 + ======================================================= */
1781 +
1782 + function run(){
1783 + if(running)return;
1784 +
1785 + running=true;
1786 +
1787 + try{
1788 + resetRuntime();
1789 + applyPlaceholderBadge();
1790 + propagateDetailAccents();
1791 +
1792 + var headers=
1793 + applyOverviewPalette();
1794 +
1795 + makeThreeLineAreaLabels();
1796 + makeFilledRedOrangeCTAsBorderless();
1797 +
1798 + if(
1799 + window.innerWidth>
1800 + MOBILE_MAX
1801 + ){
1802 + alignOverviewCards(
1803 + headers
1804 + );
1805 +
1806 + equaliseDetailGrids();
1807 + }
1808 + }finally{
1809 + running=false;
1810 + }
1811 + }
1812 +
1813 + function onResize(){
1814 + if(resizeTimer){
1815 + clearTimeout(
1816 + resizeTimer
1817 + );
1818 + }
1819 +
1820 + resizeTimer=
1821 + setTimeout(
1822 + function(){
1823 + resizeTimer=0;
1824 + run();
1825 + },
1826 + RESIZE_DEBOUNCE
1827 + );
1828 + }
1829 +
1830 + async function waitForReady(){
1831 + if(
1832 + document.readyState!=="complete"
1833 + ){
1834 + await new Promise(function(resolve){
1835 + window.addEventListener(
1836 + "load",
1837 + resolve,
1838 + {once:true}
1839 + );
1840 + });
1841 + }
1842 +
1843 + if(
1844 + document.fonts&&
1845 + document.fonts.ready
1846 + ){
1847 + try{
1848 + await document.fonts.ready;
1849 + }catch(error){}
1850 + }
1851 +
1852 + var images=
1853 + Array.from(
1854 + root.querySelectorAll("img")
1855 + );
1856 +
1857 + await Promise.all(
1858 + images.map(function(img){
1859 + if(img.complete){
1860 + return Promise.resolve();
1861 + }
1862 +
1863 + return new Promise(function(resolve){
1864 + var done=function(){
1865 + resolve();
1866 + };
1867 +
1868 + img.addEventListener(
1869 + "load",
1870 + done,
1871 + {once:true}
1872 + );
1873 +
1874 + img.addEventListener(
1875 + "error",
1876 + done,
1877 + {once:true}
1878 + );
1879 + });
1880 + })
1881 + );
1882 +
1883 + run();
1884 + }
1885 +
1886 + window.addEventListener(
1887 + "resize",
1888 + onResize,
1889 + {passive:true}
1890 + );
1891 +
1892 + waitForReady();
1893 +})();
1894 +</script>
1895 +
1896 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END -->
1897 +{{/html}}
1898 +
XWiki.XWikiRights[1]
allow
... ... @@ -1,1 +1,0 @@
1 -Deny
levels
... ... @@ -1,1 +1,0 @@
1 -view
users
... ... @@ -1,1 +1,0 @@
1 -XWiki.XWikiGuest