Änderungen von Dokument Prepare

Zuletzt geändert von Veronika Kocher am Freitag, 18 Sep. 2026 16:47

Von Version 1.4
bearbeitet von Veronika Kocher
am Mittwoch, 02 Sep. 2026 9:43
Änderungskommentar: Es gibt keinen Kommentar für diese Version
Auf Version 1.7
bearbeitet von Veronika Kocher
am Donnerstag, 03 Sep. 2026 9:34
Änderungskommentar: Es gibt keinen Kommentar für diese Version

Zusammenfassung

Details

Seiteneigenschaften
Inhalt
... ... @@ -473,9 +473,9 @@
473 473   <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong style="color:#3f6b4b;">Checklisten &amp; Vorlagen</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;">IN VORBEREITUNG</span><div style="margin-top:5px;color:#625d56;">Wiederverwendbare Hilfsmittel zum Planen, Dokumentieren und Überprüfen deiner Projektstruktur.</div></div>
474 474   </div>
475 475  
476 - <aside style="margin:0 0 14px 0;padding:16px 18px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#e5f5f9;border-radius:8px;">
477 - <strong style="color:#2d5661;">Brauchst du Unterstützung?</strong>
478 - <div style="margin-top:5px;color:#365e68;line-height:1.5;">Nicht sicher, welche Anforderungen, Services oder nächsten Schritte für dein Projekt gelten? Wende dich für projektspezifische Unterstützung an Support Kunst und Forschung.</div>
476 + <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 -->
477 + <strong style="color:#2d5661;">Brauchst du Hilfe beim richtigen Weg?</strong>
478 + <div style="margin-top:5px;color:#365e68;line-height:1.5;"><strong>Starte bei Support Kunst und Forschung</strong> für Projektentwicklung, Förderung, Anträge und die Koordination geförderter Kunst-/Forschungsprojekte. Für Rechte, Daten, IT, Finanzen, Personal, Räume oder andere Fachfragen folge der auf der Themenseite genannten zuständigen Service-Stelle.</div>
479 479   </aside>
480 480  
481 481   <div class="arsn-tip"><strong>Tipp · Eine hilfreiche Faustregel:</strong> Plane früh, dokumentiere Entscheidungen und überprüfe sie, wenn sich das Projekt verändert. Eine einfache Projektstruktur, die tatsächlich genutzt wird, ist meist wirksamer als ein komplexer Plan, der nie aktualisiert wird.</div>
... ... @@ -482,3 +482,699 @@
482 482  
483 483  </div>
484 484  {{/html}}
485 +
486 +{{html clean="false"}}
487 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
488 +<style data-sn-horizontal-box-harmonizer="4">
489 +[data-sn-equal-height-managed],
490 +[data-sn-first-section-aligned]{
491 + box-sizing:border-box;
492 +}
493 +</style>
494 +<script data-sn-horizontal-box-harmonizer="4">
495 +(function(){
496 + "use strict";
497 +
498 + var MOBILE_MAX=767;
499 + var ROW_TOLERANCE=6;
500 + var MIN_W=150;
501 + var MIN_H=36;
502 + var MAX_PARENT_CHILDREN=16;
503 + var SEARCH_DEPTH=5;
504 +
505 + var root=
506 + document.getElementById("xwikicontent")||
507 + document.querySelector(".xwiki-rendering-content")||
508 + document.querySelector("main")||
509 + document.body;
510 +
511 + if(!root)return;
512 +
513 + var heightManaged=new Set();
514 + var sectionManaged=new Set();
515 + var originalMinHeight=new WeakMap();
516 + var originalMarginTop=new WeakMap();
517 + var raf=0;
518 +
519 + function num(v){
520 + var n=parseFloat(v);
521 + return Number.isFinite(n)?n:0;
522 + }
523 +
524 + function visible(el,minW,minH){
525 + if(!el||el.nodeType!==1)return false;
526 +
527 + var s=getComputedStyle(el);
528 +
529 + if(
530 + s.display==="none"||
531 + s.visibility==="hidden"||
532 + Number(s.opacity)===0
533 + ){
534 + return false;
535 + }
536 +
537 + var r=el.getBoundingClientRect();
538 +
539 + return (
540 + r.width>=(minW||1)&&
541 + r.height>=(minH||1)
542 + );
543 + }
544 +
545 + function excluded(el){
546 + return (
547 + !el.matches||
548 + el.matches(
549 + "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]"
550 + )
551 + );
552 + }
553 +
554 + function namedLikeBox(el){
555 + var c=
556 + typeof el.className==="string"
557 + ? el.className
558 + : "";
559 +
560 + return /(^|[s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([s_-]|$)/i.test(c);
561 + }
562 +
563 + function boxLike(el){
564 + if(!visible(el,MIN_W,MIN_H)||excluded(el))return false;
565 +
566 + var s=getComputedStyle(el);
567 + var r=el.getBoundingClientRect();
568 +
569 + var border=
570 + num(s.borderTopWidth)+
571 + num(s.borderRightWidth)+
572 + num(s.borderBottomWidth)+
573 + num(s.borderLeftWidth);
574 +
575 + var radius=Math.max(
576 + num(s.borderTopLeftRadius),
577 + num(s.borderTopRightRadius),
578 + num(s.borderBottomLeftRadius),
579 + num(s.borderBottomRightRadius)
580 + );
581 +
582 + var bg=
583 + s.backgroundColor&&
584 + s.backgroundColor!=="rgba(0, 0, 0, 0)"&&
585 + s.backgroundColor!=="transparent";
586 +
587 + var shadow=
588 + s.boxShadow&&
589 + s.boxShadow!=="none";
590 +
591 + return (
592 + namedLikeBox(el)||
593 + border>=1||
594 + (bg&&radius>=3)||
595 + (shadow&&r.width>=180)
596 + );
597 + }
598 +
599 + function saveOriginal(el,map,property){
600 + if(map.has(el))return;
601 +
602 + map.set(el,{
603 + value:el.style.getPropertyValue(property),
604 + priority:el.style.getPropertyPriority(property)
605 + });
606 + }
607 +
608 + function restoreOriginal(el,map,property){
609 + var original=map.get(el);
610 +
611 + if(original&&original.value){
612 + el.style.setProperty(
613 + property,
614 + original.value,
615 + original.priority||""
616 + );
617 + }else{
618 + el.style.removeProperty(property);
619 + }
620 + }
621 +
622 + function reset(){
623 + heightManaged.forEach(function(el){
624 + restoreOriginal(
625 + el,
626 + originalMinHeight,
627 + "min-height"
628 + );
629 +
630 + el.removeAttribute(
631 + "data-sn-equal-height-managed"
632 + );
633 + });
634 +
635 + sectionManaged.forEach(function(el){
636 + restoreOriginal(
637 + el,
638 + originalMarginTop,
639 + "margin-top"
640 + );
641 +
642 + el.removeAttribute(
643 + "data-sn-first-section-aligned"
644 + );
645 + });
646 +
647 + heightManaged.clear();
648 + sectionManaged.clear();
649 + }
650 +
651 + function pickTarget(child){
652 + if(!visible(child,MIN_W,MIN_H))return null;
653 +
654 + if(boxLike(child)){
655 + return child;
656 + }
657 +
658 + var cr=child.getBoundingClientRect();
659 + var q=[];
660 +
661 + Array.from(child.children||[]).forEach(function(el){
662 + q.push({el:el,depth:1});
663 + });
664 +
665 + var best=null;
666 + var bestScore=-Infinity;
667 +
668 + while(q.length){
669 + var item=q.shift();
670 + var el=item.el;
671 +
672 + if(!visible(el,MIN_W,MIN_H))continue;
673 +
674 + var r=el.getBoundingClientRect();
675 +
676 + if(
677 + r.width>=cr.width*.68&&
678 + boxLike(el)
679 + ){
680 + var widthFit=
681 + 1-Math.min(
682 + 1,
683 + Math.abs(cr.width-r.width)/
684 + Math.max(1,cr.width)
685 + );
686 +
687 + var topFit=
688 + 1-Math.min(
689 + 1,
690 + Math.abs(cr.top-r.top)/100
691 + );
692 +
693 + var score=
694 + widthFit*6+
695 + topFit*3+
696 + Math.min(r.height,900)/450+
697 + Math.min(r.width*r.height,900000)/900000;
698 +
699 + if(score>bestScore){
700 + best=el;
701 + bestScore=score;
702 + }
703 + }
704 +
705 + if(item.depth<SEARCH_DEPTH){
706 + Array.from(el.children||[]).forEach(function(next){
707 + q.push({
708 + el:next,
709 + depth:item.depth+1
710 + });
711 + });
712 + }
713 + }
714 +
715 + return best;
716 + }
717 +
718 + function groupsByVisualRow(entries){
719 + var groups=[];
720 +
721 + entries
722 + .slice()
723 + .sort(function(a,b){
724 + return (
725 + a.rect.top-b.rect.top||
726 + a.rect.left-b.rect.left
727 + );
728 + })
729 + .forEach(function(entry){
730 + var group=null;
731 +
732 + for(var i=0;i<groups.length;i++){
733 + if(
734 + Math.abs(
735 + groups[i].top-
736 + entry.rect.top
737 + )<=ROW_TOLERANCE
738 + ){
739 + group=groups[i];
740 + break;
741 + }
742 + }
743 +
744 + if(!group){
745 + group={
746 + top:entry.rect.top,
747 + entries:[]
748 + };
749 + groups.push(group);
750 + }
751 +
752 + group.entries.push(entry);
753 + });
754 +
755 + return groups;
756 + }
757 +
758 + function validHorizontalGroup(group){
759 + if(group.entries.length<2)return false;
760 +
761 + var lefts=
762 + group.entries
763 + .map(function(e){return e.rect.left;})
764 + .sort(function(a,b){return a-b;});
765 +
766 + if(
767 + lefts[lefts.length-1]-
768 + lefts[0]<
769 + 80
770 + ){
771 + return false;
772 + }
773 +
774 + var widths=
775 + group.entries
776 + .map(function(e){return e.rect.width;})
777 + .filter(function(w){return w>0;});
778 +
779 + if(widths.length<2)return false;
780 +
781 + var minWidth=Math.min.apply(Math,widths);
782 + var maxWidth=Math.max.apply(Math,widths);
783 +
784 + return (
785 + maxWidth/
786 + Math.max(1,minWidth)<=
787 + 1.9
788 + );
789 + }
790 +
791 + function normalizeText(text){
792 + return String(text||"")
793 + .replace(/s+/g," ")
794 + .trim()
795 + .toUpperCase();
796 + }
797 +
798 + function exactKnownFirstSection(el){
799 + var text=normalizeText(el.textContent);
800 +
801 + return (
802 + text==="HIER STARTEN"||
803 + text==="ORGANISIEREN & DOKUMENTIEREN"||
804 + text==="ENTSCHEIDEN"||
805 + text==="START HERE"||
806 + text==="GET STARTED"||
807 + text==="ORGANISE & DOCUMENT"||
808 + text==="ORGANIZE & DOCUMENT"||
809 + text==="DECIDE"
810 + );
811 + }
812 +
813 + function visuallyFirstSectionBar(card){
814 + var cardRect=card.getBoundingClientRect();
815 + var candidates=[];
816 +
817 + Array.from(
818 + card.querySelectorAll(
819 + "div,p,span,strong,h3,h4,h5,h6"
820 + )
821 + ).forEach(function(el){
822 + if(!visible(el,20,6))return;
823 + if(excluded(el))return;
824 +
825 + var r=el.getBoundingClientRect();
826 + var relativeTop=r.top-cardRect.top;
827 +
828 + if(
829 + relativeTop<45||
830 + relativeTop>cardRect.height*.72
831 + ){
832 + return;
833 + }
834 +
835 + var widthRatio=
836 + r.width/
837 + Math.max(1,cardRect.width);
838 +
839 + if(
840 + widthRatio<.55||
841 + widthRatio>1.05||
842 + r.height>54
843 + ){
844 + return;
845 + }
846 +
847 + var text=normalizeText(el.textContent);
848 +
849 + if(
850 + text.length<2||
851 + text.length>90
852 + ){
853 + return;
854 + }
855 +
856 + var style=getComputedStyle(el);
857 +
858 + var bg=
859 + style.backgroundColor&&
860 + style.backgroundColor!=="rgba(0, 0, 0, 0)"&&
861 + style.backgroundColor!=="transparent";
862 +
863 + var border=
864 + num(style.borderTopWidth)+
865 + num(style.borderRightWidth)+
866 + num(style.borderBottomWidth)+
867 + num(style.borderLeftWidth);
868 +
869 + var mostlyUpper=
870 + text.length>=3&&
871 + text===text.toUpperCase();
872 +
873 + var exact=exactKnownFirstSection(el);
874 +
875 + var score=
876 + (exact?20:0)+
877 + (bg?6:0)+
878 + (border>=1?2:0)+
879 + (mostlyUpper?4:0)+
880 + (num(style.fontWeight)>=600?1:0);
881 +
882 + if(score>=7){
883 + candidates.push({
884 + el:el,
885 + relativeTop:relativeTop,
886 + width:r.width,
887 + score:score
888 + });
889 + }
890 + });
891 +
892 + if(!candidates.length)return null;
893 +
894 + candidates.sort(function(a,b){
895 + if(a.score!==b.score)return b.score-a.score;
896 + if(Math.abs(a.relativeTop-b.relativeTop)>3){
897 + return a.relativeTop-b.relativeTop;
898 + }
899 + return b.width-a.width;
900 + });
901 +
902 + // For exact known labels always prefer the earliest exact match.
903 + var exacts=candidates.filter(function(c){
904 + return exactKnownFirstSection(c.el);
905 + });
906 +
907 + if(exacts.length){
908 + exacts.sort(function(a,b){
909 + return a.relativeTop-b.relativeTop||b.width-a.width;
910 + });
911 + return exacts[0].el;
912 + }
913 +
914 + // Generic fallback: earliest high-confidence bar.
915 + candidates.sort(function(a,b){
916 + return a.relativeTop-b.relativeTop||b.score-a.score||b.width-a.width;
917 + });
918 +
919 + return candidates[0].el;
920 + }
921 +
922 + function alignFirstSections(cards){
923 + var rows=
924 + cards.map(function(card){
925 + var bar=
926 + visuallyFirstSectionBar(card);
927 +
928 + if(!bar)return null;
929 +
930 + var cardRect=
931 + card.getBoundingClientRect();
932 +
933 + var barRect=
934 + bar.getBoundingClientRect();
935 +
936 + return {
937 + card:card,
938 + bar:bar,
939 + relativeTop:
940 + barRect.top-cardRect.top,
941 + label:
942 + normalizeText(bar.textContent)
943 + };
944 + });
945 +
946 + // Conservative: only align when every card in the horizontal row
947 + // has a reliable first section bar.
948 + if(
949 + rows.some(function(row){
950 + return !row;
951 + })
952 + ){
953 + return null;
954 + }
955 +
956 + var targetTop=
957 + Math.max.apply(
958 + Math,
959 + rows.map(function(row){
960 + return row.relativeTop;
961 + })
962 + );
963 +
964 + rows.forEach(function(row){
965 + var delta=
966 + targetTop-
967 + row.relativeTop;
968 +
969 + if(delta<=1)return;
970 +
971 + saveOriginal(
972 + row.bar,
973 + originalMarginTop,
974 + "margin-top"
975 + );
976 +
977 + var currentMargin=
978 + num(
979 + getComputedStyle(
980 + row.bar
981 + ).marginTop
982 + );
983 +
984 + row.bar.style.setProperty(
985 + "margin-top",
986 + (
987 + currentMargin+
988 + delta
989 + )+"px"
990 + );
991 +
992 + row.bar.setAttribute(
993 + "data-sn-first-section-aligned",
994 + "4"
995 + );
996 +
997 + sectionManaged.add(row.bar);
998 + });
999 +
1000 + return {
1001 + labels:
1002 + rows.map(function(row){
1003 + return row.label;
1004 + }),
1005 + targetRelativeTop:
1006 + Math.round(targetTop)
1007 + };
1008 + }
1009 +
1010 + function applyGroup(group){
1011 + if(!validHorizontalGroup(group)){
1012 + return null;
1013 + }
1014 +
1015 + var cards=[];
1016 + var seen=new Set();
1017 +
1018 + group.entries.forEach(function(entry){
1019 + if(!seen.has(entry.target)){
1020 + seen.add(entry.target);
1021 + cards.push(entry.target);
1022 + }
1023 + });
1024 +
1025 + if(cards.length<2)return null;
1026 +
1027 + var firstSection=
1028 + alignFirstSections(cards);
1029 +
1030 + // The section alignment can change natural card heights.
1031 + // Measure only afterwards.
1032 + var maxHeight=0;
1033 +
1034 + cards.forEach(function(card){
1035 + maxHeight=Math.max(
1036 + maxHeight,
1037 + card.getBoundingClientRect().height
1038 + );
1039 + });
1040 +
1041 + maxHeight=Math.ceil(maxHeight);
1042 +
1043 + if(maxHeight<MIN_H)return null;
1044 +
1045 + cards.forEach(function(card){
1046 + saveOriginal(
1047 + card,
1048 + originalMinHeight,
1049 + "min-height"
1050 + );
1051 +
1052 + card.style.setProperty(
1053 + "min-height",
1054 + maxHeight+"px"
1055 + );
1056 +
1057 + card.setAttribute(
1058 + "data-sn-equal-height-managed",
1059 + "4"
1060 + );
1061 +
1062 + heightManaged.add(card);
1063 + });
1064 +
1065 + return {
1066 + cards:cards.length,
1067 + height:maxHeight,
1068 + firstSection:firstSection
1069 + };
1070 + }
1071 +
1072 + function run(){
1073 + reset();
1074 +
1075 + if(
1076 + window.innerWidth<=MOBILE_MAX
1077 + ){
1078 + return;
1079 + }
1080 +
1081 + var parents=
1082 + Array.from(
1083 + root.querySelectorAll("*")
1084 + ).filter(function(parent){
1085 + return (
1086 + visible(parent,MIN_W,MIN_H)&&
1087 + parent.children&&
1088 + parent.children.length>=2&&
1089 + parent.children.length<=MAX_PARENT_CHILDREN
1090 + );
1091 + });
1092 +
1093 + var touched=new Set();
1094 +
1095 + parents.forEach(function(parent){
1096 + var entries=[];
1097 +
1098 + Array.from(parent.children).forEach(function(child){
1099 + if(!visible(child,MIN_W,MIN_H))return;
1100 +
1101 + var target=pickTarget(child);
1102 + if(!target)return;
1103 +
1104 + entries.push({
1105 + target:target,
1106 + rect:target.getBoundingClientRect()
1107 + });
1108 + });
1109 +
1110 + if(entries.length<2)return;
1111 +
1112 + groupsByVisualRow(entries).forEach(function(group){
1113 + if(!validHorizontalGroup(group))return;
1114 +
1115 + var signature=
1116 + group.entries.map(function(entry){
1117 + return entry.target;
1118 + });
1119 +
1120 + if(
1121 + !signature.some(function(el){
1122 + return !touched.has(el);
1123 + })
1124 + ){
1125 + return;
1126 + }
1127 +
1128 + var applied=
1129 + applyGroup(group);
1130 +
1131 + if(applied){
1132 + signature.forEach(function(el){
1133 + touched.add(el);
1134 + });
1135 + }
1136 + });
1137 + });
1138 + }
1139 +
1140 + function schedule(){
1141 + if(raf)cancelAnimationFrame(raf);
1142 +
1143 + raf=requestAnimationFrame(function(){
1144 + raf=requestAnimationFrame(function(){
1145 + raf=0;
1146 + run();
1147 + });
1148 + });
1149 + }
1150 +
1151 + addEventListener("resize",schedule,{passive:true});
1152 + addEventListener("load",schedule,{once:true});
1153 +
1154 + root.addEventListener(
1155 + "click",
1156 + function(){
1157 + setTimeout(schedule,0);
1158 + },
1159 + true
1160 + );
1161 +
1162 + Array.from(root.querySelectorAll("img")).forEach(function(img){
1163 + if(!img.complete){
1164 + img.addEventListener("load",schedule,{once:true});
1165 + }
1166 + });
1167 +
1168 + if(document.fonts&&document.fonts.ready){
1169 + document.fonts.ready.then(schedule);
1170 + }
1171 +
1172 + schedule();
1173 + setTimeout(schedule,200);
1174 + setTimeout(schedule,650);
1175 + setTimeout(schedule,1400);
1176 +})();
1177 +</script>
1178 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
1179 +{{/html}}
1180 +