Zuletzt geändert von Veronika Kocher am Freitag, 04 Sep. 2026 14:45

Verstecke letzte Bearbeiter
Veronika Kocher 5.1 1 {{html clean="false"}}
Veronika Kocher 2.1 2
Veronika Kocher 5.1 3 <style>
4 .arsn-topic-page{max-width:1400px;margin:0 auto;color:#322f2b}
5 .arsn-topic-page *{box-sizing:border-box}
6 .arsn-card{border:1px solid #e3ded6;border-radius:11px;background:#fcfbf8;box-shadow:0 1px 3px rgba(0,0,0,.035)}
7 .arsn-eyebrow{font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase}
8 .arsn-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:14px}
9 .arsn-grid-2{display:grid;grid-template-columns:repeat(2,minmax(300px,1fr));gap:14px}
10 .arsn-grid-3{display:grid;grid-template-columns:repeat(3,minmax(240px,1fr));gap:14px}
11 .arsn-chip{display:inline-block;padding:4px 8px;margin:3px 4px 3px 0;border-radius:14px;background:#f3efe8;border:1px solid #e3ded6;color:#5c5650;font-size:12px}
12 .arsn-check{position:relative;padding:11px 12px 11px 36px;border:1px solid #e3ded6;border-radius:8px;background:#fffdf9}
13 .arsn-check:before{content:"✓";position:absolute;left:13px;top:9px;color:#e94b13;font-weight:800}
14 .arsn-call{padding:15px 16px;border:1px solid #e3ded6;border-top:4px solid #e94b13;border-radius:9px;background:#fcfbf8}
15 .arsn-call h4{font-size:17px;margin:0 0 6px 0;color:#35312d}
16 .arsn-call p{margin:0 0 8px 0;color:#625d56;line-height:1.5}
17 .arsn-call a{font-weight:600}
18 .arsn-section{margin:0 0 26px 0}
19 .arsn-section h3{font-size:22px;margin:0 0 6px 0;color:#35312d}
20 .arsn-section > p{color:#6a655e;line-height:1.55}
21 .arsn-info{padding:15px 17px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#eaf6f9;border-radius:8px;color:#365e68}
22 .arsn-info strong{color:#2d5661}
23 .arsn-warn{padding:15px 17px;border:1px solid #efd9cc;border-left:5px solid #e94b13;background:#fff6f1;border-radius:8px;color:#67564e}
24 .arsn-warn strong{color:#744531}
25 details.arsn-detail{margin:8px 0;border:1px solid #e3ded6;border-radius:8px;background:#fcfbf8;overflow:hidden}
26 details.arsn-detail summary{cursor:pointer;padding:12px 14px;font-weight:700;color:#403b36;background:#f3efe8}
27 details.arsn-detail[open] summary{border-bottom:1px solid #e3ded6}
28 details.arsn-detail .body{padding:14px 16px;color:#514c46;line-height:1.55}
29 .arsn-table{width:100%;border-collapse:collapse;background:#fffdf9}
30 .arsn-table th,.arsn-table td{border:1px solid #e3ded6;padding:10px 11px;vertical-align:top;text-align:left}
31 .arsn-table th{background:#f3efe8;color:#403b36}
32 .arsn-source{padding:12px 13px;border:1px solid #e3ded6;border-left:4px solid #21b6d7;border-radius:7px;background:#fffdf9}
33 .arsn-source strong{display:block;margin-bottom:3px}
34 .arsn-source small{color:#6a655e}
35 .arsn-hero-image{height:125px;overflow:hidden;background:#f1eee9}
36 .arsn-hero-image img{width:100%;height:100%;object-fit:cover;object-position:center 45%;display:block}
37 @media(max-width:850px){.arsn-grid-2,.arsn-grid-3{grid-template-columns:1fr}}
38 </style>
Veronika Kocher 2.1 39
Veronika Kocher 5.1 40 <div class="arsn-topic-page">
Veronika Kocher 2.1 41
Veronika Kocher 5.1 42 <section class="arsn-card" style="margin-bottom:18px;overflow:hidden;border-left:6px solid #21b6d7;">
Veronika Kocher 5.10 43 <div class="arsn-hero-image"><img src="https://xwiki.uni-ak.ac.at/bin/download/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/WebHome/enable.png" alt="Schnellstart für ein kleines künstlerisches oder Forschungsprojekt" style="object-position:center 58%;" /></div>
Veronika Kocher 5.1 44 <div style="padding:18px 21px 20px 21px;">
Veronika Kocher 5.10 45 <div class="arsn-eyebrow" style="color:#3f6871;margin-bottom:5px;">VORBEREITEN · SCHNELLSTART · KLEINE PROJEKTE</div>
46 <h2 style="font-size:27px;line-height:1.2;margin:0 0 8px 0;color:#2c2926;">Praktische Grundstruktur für dein Projekt</h2>
Veronika Kocher 5.1 47 <p style="margin:0;color:#5e5953;line-height:1.6;max-width:1050px;">
Veronika Kocher 5.10 48 Für ein kleines, kurzes oder wenig komplexes Projekt brauchst du kein umfangreiches Managementsystem.
49 Du brauchst aber einige wenige klare Entscheidungen, damit es später keine Probleme mit Förderung, Rechten, Daten, Budget oder Übergabe gibt.
Veronika Kocher 5.1 50 </p>
51 </div>
52 </section>
Veronika Kocher 2.1 53
Veronika Kocher 5.1 54 <div class="arsn-info" style="margin-bottom:22px;">
Veronika Kocher 5.10 55 <strong>Nutze diese Seite, wenn:</strong> das Projekt klein genug ist, dass ein vollständiger Projektplan unverhältnismäßig wäre,
56 aber trotzdem Geld, Zusammenarbeit, Daten/Materialien, öffentliche Präsentation oder Rechte Dritter eine Rolle spielen.
57 Wenn eines der Warnsignale weiter unten zutrifft, nutze die vollständige Seite <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Get%20Started/">„Erste Schritte“</a>.
Veronika Kocher 5.1 58 </div>
Veronika Kocher 2.1 59
Veronika Kocher 5.1 60 <!-- 30 MINUTE CHECK -->
61 <section class="arsn-section">
Veronika Kocher 5.10 62 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">20–30-MINUTEN-PROJEKTCHECK</div>
63 <h3>Klär diese acht Punkte, bevor du beginnst</h3>
Veronika Kocher 2.1 64
Veronika Kocher 5.1 65 <div class="arsn-grid">
Veronika Kocher 5.10 66 <div class="arsn-check"><strong>1 · Was ist das Projekt?</strong><br><span style="color:#6a655e;">Schreibe 3–6 Sätze: Ziel, Aktivität, Ergebnis, Zielgruppe.</span></div>
67 <div class="arsn-check"><strong>2 · Wer ist verantwortlich?</strong><br><span style="color:#6a655e;">Benenne Projektleitung, Budget-/Kontaktperson und Mitwirkende.</span></div>
68 <div class="arsn-check"><strong>3 · Wer ist Antragsteller:in?</strong><br><span style="color:#6a655e;">Universität, Einzelperson, Verein, Partnerorganisation?</span></div>
69 <div class="arsn-check"><strong>4 · Was wird es kosten?</strong><br><span style="color:#6a655e;">Personal/Honorare, Materialien, Reisen, Dienstleistungen, Veranstaltungsort, Rechte, Dokumentation.</span></div>
70 <div class="arsn-check"><strong>5 · Wofür brauchst du eine Genehmigung oder Zustimmung?</strong><br><span style="color:#6a655e;">Bilder, Musik, Texte, Teilnehmende, personenbezogene Daten, Veranstaltungsort, Veranstaltung, Aufzeichnung?</span></div>
71 <div class="arsn-check"><strong>6 · Wo liegen Dateien und Materialien?</strong><br><span style="color:#6a655e;">Ein primärer Speicherort + Backup + klar geregelte Zugriffe.</span></div>
72 <div class="arsn-check"><strong>7 · Was wird geteilt oder veröffentlicht?</strong><br><span style="color:#6a655e;">Öffentlicher Output, Dokumentation, Credits, Lizenz/Zugang.</span></div>
73 <div class="arsn-check"><strong>8 · Was passiert am Ende?</strong><br><span style="color:#6a655e;">Masterdateien, Abschlussunterlagen, Archiv/Repositorium/Übergabe/Löschung.</span></div>
Veronika Kocher 5.1 74 </div>
75 </section>
Veronika Kocher 2.1 76
Veronika Kocher 5.1 77 <!-- FUNDING QUICK ROUTE -->
78 <section class="arsn-section">
Veronika Kocher 5.10 79 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">FÖRDERUNG IN 5 MINUTEN</div>
80 <h3>Wähle den passendsten Förderweg und lies danach die aktuelle Ausschreibung</h3>
Veronika Kocher 2.1 81
Veronika Kocher 5.1 82 <div class="arsn-grid">
83 <div class="arsn-call" style="border-top-color:#21b6d7">
Veronika Kocher 5.10 84 <h4>Kleines internes Kunst- oder Forschungsvorhaben an der Angewandten</h4>
85 <p>Prüfe zuerst SUP und aktuelle interne Ausschreibungen.</p>
86 <a href="https://www.dieangewandte.at/en/news/open_calls" target="_blank" rel="noopener">Ausschreibungen der Angewandten</a>
Veronika Kocher 5.1 87 </div>
Veronika Kocher 2.1 88
Veronika Kocher 5.1 89 <div class="arsn-call" style="border-top-color:#21b6d7">
Veronika Kocher 5.10 90 <h4>Arts-Based Research</h4>
91 <p>PEEK ist ein zentraler österreichischer Förderweg, wenn künstlerische Praxis integraler Bestandteil der Forschungsfrage ist. Es ist kein Programm für „kleine Projekte“ – nutze dafür den vollständigen Planungsweg.</p>
Veronika Kocher 5.1 92 <a href="https://www.fwf.ac.at/en/funding/portfolio/projects/arts-based-research" target="_blank" rel="noopener">FWF PEEK</a>
93 </div>
Veronika Kocher 2.1 94
Veronika Kocher 5.1 95 <div class="arsn-call" style="border-top-color:#e94b13">
Veronika Kocher 5.10 96 <h4>Künstlerische Produktion / Präsentation</h4>
97 <p>Prüfe beim BMWKMS die passende Bundessparte und bei Vorhaben in Wien zusätzlich MA 7.</p>
98 <a href="https://www.bmwkms.gv.at/themen/kunst-und-kultur/" target="_blank" rel="noopener">BMWKMS-Ausschreibungen</a>
Veronika Kocher 5.1 99 · <a href="https://www.wien.gv.at/kultur/foerderungen" target="_blank" rel="noopener">MA 7</a>
100 </div>
Veronika Kocher 2.1 101
Veronika Kocher 5.1 102 <div class="arsn-call" style="border-top-color:#38b76a">
Veronika Kocher 5.10 103 <h4>Mobilität / Residency</h4>
104 <p>Prüfe Culture Moves Europe und aktuelle österreichische Mobilitätsprogramme.</p>
Veronika Kocher 5.1 105 <a href="https://culture.ec.europa.eu/culture-moves-europe" target="_blank" rel="noopener">Culture Moves Europe</a>
106 </div>
107 </div>
Veronika Kocher 2.1 108
Veronika Kocher 5.1 109 <div class="arsn-warn" style="margin-top:14px;">
Veronika Kocher 5.10 110 <strong>Schnellcheck für die Ausschreibung:</strong>
111 Prüfe Antragsberechtigung, Projekttyp, Ausschlüsse, Frist, frühestmöglichen Projektstart, förderfähige Kosten,
112 Förderquote/Kofinanzierung und Berichtspflichten, bevor du den Antrag schreibst.
Veronika Kocher 5.1 113 </div>
114 </section>
Veronika Kocher 2.1 115
Veronika Kocher 5.1 116 <!-- MINIMUM FILE PACK -->
117 <section class="arsn-section">
Veronika Kocher 5.10 118 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">MINDESTDOKUMENTATION</div>
119 <h3>Lege einen Projektordner mit diesen Dateien an</h3>
Veronika Kocher 2.1 120
Veronika Kocher 5.1 121 <table class="arsn-table">
Veronika Kocher 5.10 122 <thead><tr><th>Datei</th><th>Mindestinhalt</th></tr></thead>
Veronika Kocher 5.1 123 <tbody>
Veronika Kocher 5.10 124 <tr><td><strong>01_Project_Summary</strong></td><td>Titel, Ziel, Projekttyp, Personen, Termine, Outputs, Zielgruppe.</td></tr>
125 <tr><td><strong>02_Budget</strong></td><td>Kosten, Finanzierungsquelle, Kofinanzierung/Eigenmittel, Hinweise zu förderfähigen Kosten.</td></tr>
126 <tr><td><strong>03_Timeline</strong></td><td>Start/Ende, 4–8 Meilensteine, öffentliche Präsentation/Ablage/Abschluss.</td></tr>
127 <tr><td><strong>04_Roles</strong></td><td>Wer entscheidet, erstellt, beschafft, unterzeichnet, speichert, veröffentlicht und übergibt.</td></tr>
128 <tr><td><strong>05_Rights_Ethics</strong></td><td>Fremdmaterial, Lizenzen, Teilnehmende, personenbezogene Daten, Einwilligungen, offene Fragen.</td></tr>
129 <tr><td><strong>06_Storage_Backup</strong></td><td>Primärer Speicherort, Backup, Zugriffsliste, Speicherort der Masterdateien.</td></tr>
130 <tr><td><strong>07_Funder_Rules</strong></td><td>Ausschreibungs-PDF/-Link, Frist, Startregel, Budgetregeln, Berichtspflichten, Kontakt.</td></tr>
131 <tr><td><strong>08_Closure</strong></td><td>Was aufbewahrt, veröffentlicht, abgelegt, übergeben oder gelöscht wird.</td></tr>
Veronika Kocher 5.1 132 </tbody>
133 </table>
134 </section>
Veronika Kocher 2.1 135
Veronika Kocher 5.1 136 <!-- SMALL PROJECT LEGAL CHECK -->
137 <section class="arsn-section">
Veronika Kocher 5.10 138 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">MINDESTCHECK RECHT & ADMINISTRATION</div>
139 <h3>Lass diese Punkte nicht aus, nur weil das Projekt klein ist</h3>
Veronika Kocher 2.1 140
Veronika Kocher 5.1 141 <div class="arsn-grid">
Veronika Kocher 5.10 142 <div class="arsn-check">Antragsteller:in und institutionelle Freigabe klären</div>
143 <div class="arsn-check">Schriftliche Vereinbarungen mit bezahlten Mitwirkenden / Auftragnehmer:innen</div>
144 <div class="arsn-check">Urheberrecht und Genehmigungen für Fremdmaterial</div>
145 <div class="arsn-check">Information der Teilnehmenden / Einwilligung / Datenschutz, wo relevant</div>
146 <div class="arsn-check">Sozialversicherung und steuerliche Fragen bei selbständiger Tätigkeit</div>
147 <div class="arsn-check">Raum-/Veranstaltungs-/Sicherheitsfreigaben bei öffentlicher Präsentation</div>
148 <div class="arsn-check">Faire und förderfähige Vergütung im Budget</div>
149 <div class="arsn-check">Nachweise: Rechnungen, Verträge, Freigaben, Zahlungsbelege</div>
Veronika Kocher 5.1 150 </div>
151 </section>
Veronika Kocher 2.1 152
Veronika Kocher 5.1 153 <!-- ESCALATE -->
154 <section class="arsn-section">
Veronika Kocher 5.10 155 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">NUTZE DIE VOLLSTÄNDIGE SEITE „ERSTE SCHRITTE“, WENN …</div>
156 <h3>Diese Punkte zeigen, dass ein Schnellstart für dein Projekt nicht mehr ausreicht</h3>
Veronika Kocher 2.1 157
Veronika Kocher 5.1 158 <div class="arsn-grid">
Veronika Kocher 5.10 159 <div class="arsn-warn">Du reichst bei FWF, Horizon Europe, einer Creative-Europe-Kooperation oder einem anderen komplexen externen Programm ein.</div>
160 <div class="arsn-warn">Mehrere Institutionen, Länder oder formale Partner:innen sind beteiligt.</div>
161 <div class="arsn-warn">Du beschäftigst Personen oder hast ein wesentliches Personalbudget.</div>
162 <div class="arsn-warn">Du erhebst sensible/personenbezogene Daten oder arbeitest mit Minderjährigen bzw. vulnerablen Teilnehmenden.</div>
163 <div class="arsn-warn">Du verwendest in größerem Umfang urheberrechtlich geschütztes Fremdmaterial.</div>
164 <div class="arsn-warn">Es gibt komplexe Technik, bauliche Arbeiten, Arbeiten im öffentlichen Raum, Sicherheitsrisiken oder Genehmigungspflichten.</div>
165 <div class="arsn-warn">Das Projekt hat mehrere Publikations-, Repositoriums- oder Erhaltungspflichten.</div>
166 <div class="arsn-warn">Die Förderstelle verlangt Kofinanzierung, besondere Beschaffungsregeln, Prüfpflichten, Open Science oder einen DMP.</div>
Veronika Kocher 5.1 167 </div>
168 </section>
Veronika Kocher 2.1 169
Veronika Kocher 5.1 170 <div class="arsn-info" style="margin-bottom:14px;">
Veronika Kocher 5.10 171 <strong>Brauchst du Hilfe bei der Suche nach einer Ausschreibung?</strong>
172 Starte mit <a href="https://www.dieangewandte.at/en/news/open_calls" target="_blank" rel="noopener">Ausschreibungen der Angewandten</a>
173 und Support Kunst und Forschung. Schick eine kurze Projektbeschreibung mit Angaben zu Antragsteller:in, Laufzeit und grobem Budget an
Veronika Kocher 5.1 174 <a href="mailto:projektsupport@uni-ak.ac.at">projektsupport@uni-ak.ac.at</a>.
175 </div>
Veronika Kocher 4.1 176
Veronika Kocher 5.1 177 <div class="arsn-info">
Veronika Kocher 5.10 178 <strong>Brauchst du die vollständige Checkliste?</strong>
179 Weiter zu <a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Get%20Started/">„Erste Schritte“</a>.
Veronika Kocher 5.1 180 </div>
181
Veronika Kocher 5.10 182 <!-- ARSN_TRAINING_WORKSHOPS_V2_START -->
183 <section class="arsn-training-workshops" data-arsn-training-workshops="v2" style="margin:27px 0 22px 0;">
184 <div style="padding:16px 18px;background:#eef8fa;border:1px solid #cfe8ef;border-left:5px solid #21b6d7;border-radius:9px;">
185 <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#3f6871;margin-bottom:5px;">SCHULUNGEN &amp; WORKSHOPS</div>
186 <h3 style="font-size:20px;line-height:1.3;margin:0 0 7px;color:#35312d;text-align:left;">Schulungen, Workshops &amp; Sprechstunden</h3>
187 <p style="margin:0 0 10px;color:#5e5953;line-height:1.55;">Passende Angebote zu diesem Thema werden hier künftig automatisch aus dem zentralen Kalender angezeigt.</p>
188 <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;">IN VORBEREITUNG</span>
189 </div>
190 </section>
191 <!-- ARSN_TRAINING_WORKSHOPS_V2_END -->
Veronika Kocher 5.9 192
Veronika Kocher 5.10 193 <!-- ARSN_PRACTICAL_RESOURCES_V2_START -->
194 <section class="arsn-practical-resources" data-arsn-practical-resources="v2" style="margin:0 0 27px;">
195 <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#8a4d36;margin-bottom:4px;">NÜTZLICHE MATERIALIEN</div>
196 <h3 style="font-size:22px;line-height:1.25;margin:0 0 8px;color:#35312d;text-align:left;">Praktische Ressourcen</h3>
197 <p style="margin:0 0 12px;color:#5e5953;line-height:1.55;">Nutze praktische Ressourcen, wenn du einen kompakten Überblick, eine Schritt-für-Schritt-Anleitung oder eine direkt einsetzbare Arbeitshilfe brauchst.</p>
198 <div class="arsn-resource-grid" style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;">
199 <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong>Info-Blätter</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">IN VORBEREITUNG</span><div style="color:#625d56;line-height:1.45;">Kurze Orientierungshilfen für häufige Fragen und Entscheidungen.</div></div>
200 <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong>Anleitungen</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">IN VORBEREITUNG</span><div style="color:#625d56;line-height:1.45;">Schritt-für-Schritt-Anleitungen für konkrete Aufgaben und Abläufe.</div></div>
201 <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong>Checklisten &amp; Vorlagen</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">IN VORBEREITUNG</span><div style="color:#625d56;line-height:1.45;">Direkt einsetzbare Checklisten und Vorlagen zum Planen, Durchführen und Abschließen von Projekten.</div></div>
202 </div>
203 <style>@media(max-width:767px){.arsn-resource-grid{grid-template-columns:1fr!important}}</style>
204 </section>
205 <!-- ARSN_PRACTICAL_RESOURCES_V2_END -->
Veronika Kocher 5.9 206
Veronika Kocher 4.1 207 </div>
208 {{/html}}
Veronika Kocher 5.2 209
Veronika Kocher 5.5 210 {{html clean="false"}}
211 <!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START -->
Veronika Kocher 5.4 212
Veronika Kocher 5.5 213 <style data-sn-service-navigator-master="1">
214 /* =========================================================
215 MASTER TYPOGRAPHY
216 ========================================================= */
Veronika Kocher 5.4 217 #xwikicontent h1,
218 #xwikicontent h2,
219 #xwikicontent h3,
220 #xwikicontent h4,
221 #xwikicontent h5,
222 #xwikicontent h6,
223 #xwikicontent .box-title,
224 #xwikicontent [role="heading"],
225 #xwikicontent h1 a,
226 #xwikicontent h2 a,
227 #xwikicontent h3 a,
228 #xwikicontent h4 a,
229 #xwikicontent h5 a,
230 #xwikicontent h6 a,
231 #xwikicontent .box-title a,
232 #xwikicontent [role="heading"] a{
233 text-align:left!important;
234 text-justify:auto!important;
235 word-spacing:normal!important;
236 }
237
Veronika Kocher 5.5 238 /* =========================================================
239 COMING SOON / IN VORBEREITUNG
240 ========================================================= */
241 .sn-coming-soon-badge{
242 display:inline-block;
243 vertical-align:middle;
244 margin-left:10px;
245 padding:4px 8px;
246 border-radius:14px;
247 border:1px solid #efd9cc;
248 background:#fff4ee;
249 color:#8a4d36;
250 font-size:11px;
251 font-weight:700;
252 letter-spacing:.055em;
253 line-height:1.2;
254 white-space:nowrap;
255 }
256
257 /* =========================================================
258 NATIVE / DETAIL CALLOUT GEOMETRY
259 Preserve existing backgrounds.
260 ========================================================= */
261 #xwikicontent .arsn-info,
262 #xwikicontent .dmp-info,
263 #xwikicontent .ido-info,
264 #xwikicontent .pp-info,
265 #xwikicontent .infomessage{
Veronika Kocher 5.4 266 box-sizing:border-box!important;
Veronika Kocher 5.5 267 border-left:4px solid #21b6d7!important;
268 border-radius:8px;
Veronika Kocher 5.4 269 text-align:left!important;
270 word-spacing:normal!important;
271 }
272
Veronika Kocher 5.5 273 #xwikicontent .arsn-warn,
274 #xwikicontent .dmp-warn,
275 #xwikicontent .ido-warn,
276 #xwikicontent .pp-warn,
277 #xwikicontent .warn,
278 #xwikicontent .warning,
279 #xwikicontent .warningmessage,
Veronika Kocher 5.4 280 #xwikicontent .errormessage{
Veronika Kocher 5.5 281 box-sizing:border-box!important;
282 border-left:4px solid #e94b13!important;
283 border-radius:8px;
284 text-align:left!important;
285 word-spacing:normal!important;
Veronika Kocher 5.4 286 }
287
Veronika Kocher 5.5 288 [data-sn-master-equal-height],
289 [data-sn-master-first-row]{
Veronika Kocher 5.3 290 box-sizing:border-box;
Veronika Kocher 5.2 291 }
Veronika Kocher 5.6 292
293 /* =========================================================
294 FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS
295 ========================================================= */
296 #xwikicontent .arsn-area-label[data-sn-three-line="1"]{
297 display:grid!important;
298 grid-template-columns:minmax(0,1fr)!important;
299 grid-auto-rows:auto!important;
300 width:100%!important;
301 max-width:none!important;
302 box-sizing:border-box!important;
303 justify-items:start!important;
304 align-items:start!important;
305 gap:2px!important;
306 text-align:left!important;
307 text-align-last:left!important;
308 text-justify:auto!important;
309 word-spacing:normal!important;
310 white-space:normal!important;
311 }
312 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number,
313 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title,
314 #xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{
315 display:block!important;
316 width:100%!important;
317 margin:0!important;
318 text-align:left!important;
319 text-align-last:left!important;
320 text-justify:auto!important;
321 word-spacing:normal!important;
322 white-space:normal!important;
323 }
Veronika Kocher 5.2 324 </style>
Veronika Kocher 5.4 325
Veronika Kocher 5.5 326 <script data-sn-service-navigator-master="1">
Veronika Kocher 5.2 327 (function(){
328 "use strict";
329
Veronika Kocher 5.5 330 var PAGE_KIND="detail";
331 var PLACEHOLDER=false;
Veronika Kocher 5.10 332 var PLACEHOLDER_LABEL="IN VORBEREITUNG";
Veronika Kocher 5.5 333
Veronika Kocher 5.2 334 var MOBILE_MAX=767;
Veronika Kocher 5.3 335 var ROW_TOLERANCE=6;
Veronika Kocher 5.4 336 var RESIZE_DEBOUNCE=220;
Veronika Kocher 5.2 337
338 var root=
339 document.getElementById("xwikicontent")||
340 document.querySelector(".xwiki-rendering-content")||
341 document.querySelector("main")||
342 document.body;
343
344 if(!root)return;
345
Veronika Kocher 5.5 346 var managedHeight=new Set();
347 var managedMargin=new Set();
348 var originalHeight=new WeakMap();
349 var originalMargin=new WeakMap();
Veronika Kocher 5.4 350
351 var resizeTimer=0;
Veronika Kocher 5.5 352 var running=false;
Veronika Kocher 5.4 353
Veronika Kocher 5.5 354 var THEMES=[
355 {
356 name:"BLUE",
357 accent:"#21b6d7",
358 bg:"#eaf7fb",
359 text:"#315d68",
360 labels:[
361 "HIER STARTEN",
362 "ENTSCHEIDEN",
363 "ÜBERPRÜFEN & ANPASSEN",
364 "START HERE",
365 "DECIDE",
366 "REVIEW & ADAPT"
367 ]
368 },
369 {
370 name:"RED",
371 accent:"#e94b13",
372 bg:"#fff1ec",
373 text:"#8a4d36",
374 labels:[
375 "PLANEN & ORGANISIEREN",
376 "ORGANISIEREN & DOKUMENTIEREN",
377 "PUBLIZIEREN & PRÄSENTIEREN",
378 "PLAN & ORGANISE",
379 "PLAN & ORGANIZE",
380 "ORGANISE & DOCUMENT",
381 "ORGANIZE & DOCUMENT",
382 "PUBLISH & PRESENT"
383 ]
384 },
385 {
386 name:"YELLOW",
387 accent:"#f0aa00",
388 bg:"#fff8e7",
389 text:"#785b17",
390 labels:[
391 "SCHÜTZEN & KLÄREN",
392 "STANDARDISIEREN & IDENTIFIZIEREN",
393 "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN",
394 "PROTECT & CLARIFY",
395 "STANDARDISE & IDENTIFY",
396 "STANDARDIZE & IDENTIFY",
397 "OPEN, REUSE & MAKE FINDABLE"
398 ]
399 },
400 {
401 name:"GREEN",
402 accent:"#38b76a",
403 bg:"#edf9f1",
404 text:"#3f7451",
405 labels:[
406 "INFRASTRUKTUR EINRICHTEN",
407 "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN",
408 "SPEICHERN & ZUGRIFF STEUERN",
409 "REPOSITORIUM, ERHALTEN & ÜBERGEBEN",
410 "SET UP INFRASTRUCTURE",
411 "SET UP INFRASTRUCTURE & COLLABORATION",
412 "STORE & CONTROL ACCESS",
413 "REPOSITORY, PRESERVE & HAND OVER"
414 ]
Veronika Kocher 5.3 415 }
Veronika Kocher 5.5 416 ];
Veronika Kocher 5.3 417
Veronika Kocher 5.5 418 function num(value){
419 var n=parseFloat(value);
420 return Number.isFinite(n)?n:0;
Veronika Kocher 5.2 421 }
422
Veronika Kocher 5.5 423 function norm(value){
424 return String(value||"")
Veronika Kocher 5.4 425 .replace(/\s+/g," ")
426 .trim()
427 .toUpperCase();
428 }
429
Veronika Kocher 5.5 430 function visible(el){
431 if(!el||el.nodeType!==1)return false;
Veronika Kocher 5.2 432
Veronika Kocher 5.5 433 var style=getComputedStyle(el);
434 var rect=el.getBoundingClientRect();
Veronika Kocher 5.4 435
436 return (
Veronika Kocher 5.5 437 style.display!=="none"&&
438 style.visibility!=="hidden"&&
439 rect.width>20&&
440 rect.height>4
Veronika Kocher 5.4 441 );
Veronika Kocher 5.2 442 }
443
Veronika Kocher 5.5 444 function saveStyle(el,map,property){
Veronika Kocher 5.3 445 if(map.has(el))return;
446
447 map.set(el,{
Veronika Kocher 5.5 448 value:el.style.getPropertyValue(property),
449 priority:el.style.getPropertyPriority(property)
Veronika Kocher 5.3 450 });
451 }
452
Veronika Kocher 5.5 453 function restoreStyle(el,map,property){
Veronika Kocher 5.3 454 var original=map.get(el);
455
456 if(original&&original.value){
457 el.style.setProperty(
458 property,
459 original.value,
460 original.priority||""
461 );
462 }else{
Veronika Kocher 5.5 463 el.style.removeProperty(property);
Veronika Kocher 5.3 464 }
465 }
466
Veronika Kocher 5.4 467 function resetRuntime(){
Veronika Kocher 5.5 468 managedHeight.forEach(function(el){
469 restoreStyle(
Veronika Kocher 5.3 470 el,
Veronika Kocher 5.5 471 originalHeight,
Veronika Kocher 5.3 472 "min-height"
473 );
474 el.removeAttribute(
Veronika Kocher 5.5 475 "data-sn-master-equal-height"
Veronika Kocher 5.3 476 );
477 });
478
Veronika Kocher 5.5 479 managedMargin.forEach(function(el){
480 restoreStyle(
Veronika Kocher 5.3 481 el,
Veronika Kocher 5.5 482 originalMargin,
Veronika Kocher 5.3 483 "margin-top"
484 );
485 el.removeAttribute(
Veronika Kocher 5.5 486 "data-sn-master-first-row"
Veronika Kocher 5.3 487 );
488 });
489
Veronika Kocher 5.5 490 managedHeight.clear();
491 managedMargin.clear();
492 }
Veronika Kocher 5.4 493
Veronika Kocher 5.5 494 function themeFor(text){
495 var value=norm(text);
Veronika Kocher 5.4 496
Veronika Kocher 5.5 497 for(var i=0;i<THEMES.length;i++){
498 for(var j=0;j<THEMES[i].labels.length;j++){
499 var label=THEMES[i].labels[j];
500
501 if(
502 value===label||
503 value.indexOf(label+" ")===0||
504 value.indexOf(label+" -")===0||
505 value.indexOf(label+" ·")===0
506 ){
507 return THEMES[i];
508 }
509 }
510 }
511
512 return null;
Veronika Kocher 5.3 513 }
514
Veronika Kocher 5.5 515 /* =======================================================
Veronika Kocher 5.6 516 BORDERLESS FILLED RED/ORANGE CTA BUTTONS
517 ======================================================= */
518
519 function colourDistance(a,b){
520 return Math.sqrt(
521 Math.pow(a[0]-b[0],2)+
522 Math.pow(a[1]-b[1],2)+
523 Math.pow(a[2]-b[2],2)
524 );
525 }
526
527 function makeFilledRedOrangeCTAsBorderless(){
528 var RED_ORANGE=[233,75,19];
529
530 Array.from(
531 root.querySelectorAll(
532 'a,button,[role="button"],input[type="submit"],input[type="button"]'
533 )
534 ).forEach(function(el){
535 if(!visible(el))return;
536
537 var style=getComputedStyle(el);
538 var rgb=parseRGB(style.backgroundColor);
539
540 if(!rgb)return;
541
542 if(
543 colourDistance(
544 rgb,
545 RED_ORANGE
546 )>55
547 ){
548 return;
549 }
550
551 var rect=el.getBoundingClientRect();
552
553 if(
554 rect.width<80||
555 rect.height<24
556 ){
557 return;
558 }
559
560 el.style.setProperty(
561 "border",
562 "none",
563 "important"
564 );
565
566 el.style.setProperty(
567 "border-left",
568 "none",
569 "important"
570 );
571
572 el.style.setProperty(
573 "border-top",
574 "none",
575 "important"
576 );
577
578 el.style.setProperty(
579 "border-right",
580 "none",
581 "important"
582 );
583
584 el.style.setProperty(
585 "border-bottom",
586 "none",
587 "important"
588 );
589
590 el.style.setProperty(
591 "box-shadow",
592 "none",
593 "important"
594 );
595 });
596 }
597
598 /* =======================================================
599 FULL-WIDTH THREE-LINE AREA LABELS
600 ======================================================= */
601
602 function compactText(value){
603 return String(value||"")
604 .replace(/\s+/g," ")
605 .trim();
606 }
607
608 function makeThreeLineAreaLabels(){
609 Array.from(
610 root.querySelectorAll(
611 ".arsn-area-label"
612 )
613 ).forEach(function(label){
614 if(
615 label.getAttribute(
616 "data-sn-three-line"
617 )==="1"
618 ){
619 return;
620 }
621
622 var number=
623 label.querySelector(
624 ":scope > .arsn-area-number"
625 );
626
627 var action=
628 label.querySelector(
629 ":scope > .arsn-area-action"
630 );
631
632 if(
633 !number||
634 !action
635 ){
636 return;
637 }
638
639 var clone=
640 label.cloneNode(true);
641
642 var cloneNumber=
643 clone.querySelector(
644 ":scope > .arsn-area-number"
645 );
646
647 var cloneAction=
648 clone.querySelector(
649 ":scope > .arsn-area-action"
650 );
651
652 if(cloneNumber){
653 cloneNumber.remove();
654 }
655
656 if(cloneAction){
657 cloneAction.remove();
658 }
659
660 var titleText=
661 compactText(
662 clone.textContent
663 );
664
665 if(!titleText){
666 return;
667 }
668
669 var numberNode=
670 number.cloneNode(true);
671
672 var actionNode=
673 action.cloneNode(true);
674
675 var titleNode=
676 document.createElement(
677 "span"
678 );
679
680 titleNode.className=
681 "sn-area-label-title";
682
683 titleNode.textContent=
684 titleText;
685
686 while(label.firstChild){
687 label.removeChild(
688 label.firstChild
689 );
690 }
691
692 label.appendChild(
693 numberNode
694 );
695
696 label.appendChild(
697 titleNode
698 );
699
700 label.appendChild(
701 actionNode
702 );
703
704 label.setAttribute(
705 "data-sn-three-line",
706 "1"
707 );
708
709 var head=
710 label.closest(
711 ".arsn-area-head"
712 );
713
714 if(head){
715 head.style.setProperty(
716 "width",
717 "100%",
718 "important"
719 );
720
721 head.style.setProperty(
722 "max-width",
723 "100%",
724 "important"
725 );
726
727 head.style.setProperty(
728 "box-sizing",
729 "border-box",
730 "important"
731 );
732 }
733 });
734 }
735
736 /* =======================================================
Veronika Kocher 5.5 737 PLACEHOLDER BADGE
738 ======================================================= */
Veronika Kocher 5.4 739
Veronika Kocher 5.5 740 function applyPlaceholderBadge(){
741 if(!PLACEHOLDER)return;
Veronika Kocher 5.4 742
743 if(
Veronika Kocher 5.5 744 document.querySelector(
745 ".sn-coming-soon-badge"
746 )
Veronika Kocher 5.4 747 ){
Veronika Kocher 5.5 748 return;
Veronika Kocher 5.4 749 }
750
Veronika Kocher 5.5 751 var title=
752 document.querySelector(
753 "#document-title"
754 )||
755 document.querySelector(
756 "h1"
757 );
Veronika Kocher 5.4 758
Veronika Kocher 5.5 759 if(!title)return;
Veronika Kocher 5.4 760
Veronika Kocher 5.5 761 var badge=
762 document.createElement(
763 "span"
764 );
765
766 badge.className=
767 "sn-coming-soon-badge";
768
769 badge.textContent=
770 PLACEHOLDER_LABEL;
771
772 badge.setAttribute(
773 "aria-label",
774 PLACEHOLDER_LABEL
Veronika Kocher 5.4 775 );
776
Veronika Kocher 5.5 777 title.appendChild(
778 badge
779 );
780 }
Veronika Kocher 5.4 781
Veronika Kocher 5.5 782 /* =======================================================
783 DETAIL PAGE OWN-ACCENT PROPAGATION
784 ======================================================= */
Veronika Kocher 5.4 785
Veronika Kocher 5.5 786 function parseRGB(value){
787 var match=String(value||"").match(
788 /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i
Veronika Kocher 5.4 789 );
Veronika Kocher 5.5 790
791 if(!match)return null;
792
793 return [
794 Number(match[1]),
795 Number(match[2]),
796 Number(match[3])
797 ];
Veronika Kocher 5.4 798 }
799
Veronika Kocher 5.5 800 function distance(a,b){
801 return Math.sqrt(
802 Math.pow(a[0]-b[0],2)+
803 Math.pow(a[1]-b[1],2)+
804 Math.pow(a[2]-b[2],2)
805 );
806 }
Veronika Kocher 5.2 807
Veronika Kocher 5.5 808 function paletteMatch(cssColor){
809 var rgb=parseRGB(cssColor);
Veronika Kocher 5.3 810
Veronika Kocher 5.5 811 if(!rgb)return null;
Veronika Kocher 5.3 812
Veronika Kocher 5.5 813 var palette=[
814 {hex:"#21b6d7",rgb:[33,182,215]},
815 {hex:"#e94b13",rgb:[233,75,19]},
816 {hex:"#f0aa00",rgb:[240,170,0]},
817 {hex:"#38b76a",rgb:[56,183,106]}
818 ];
Veronika Kocher 5.2 819
Veronika Kocher 5.3 820 var best=null;
Veronika Kocher 5.5 821 var bestDistance=Infinity;
Veronika Kocher 5.2 822
Veronika Kocher 5.5 823 palette.forEach(function(item){
824 var d=distance(rgb,item.rgb);
Veronika Kocher 5.2 825
Veronika Kocher 5.5 826 if(d<bestDistance){
827 best=item;
828 bestDistance=d;
829 }
830 });
Veronika Kocher 5.3 831
Veronika Kocher 5.5 832 return bestDistance<=30
833 ?best
834 :null;
835 }
Veronika Kocher 5.2 836
Veronika Kocher 5.5 837 function propagateDetailAccents(){
838 if(PAGE_KIND!=="detail")return;
839
840 Array.from(
841 root.querySelectorAll(
842 ".arsn-call,.dmp-call,.ido-call,.pp-call,"+
843 ".arsn-source,.dmp-source,.ido-source,.pp-source"
844 )
845 ).forEach(function(el){
846 if(!visible(el))return;
847
848 var style=getComputedStyle(el);
849
Veronika Kocher 5.3 850 if(
Veronika Kocher 5.5 851 num(style.borderTopWidth)>=2
Veronika Kocher 5.3 852 ){
Veronika Kocher 5.5 853 var match=
854 paletteMatch(
855 style.borderTopColor
Veronika Kocher 5.3 856 );
857
Veronika Kocher 5.5 858 if(match){
859 el.style.setProperty(
860 "border-left",
861 "4px solid "+match.hex,
862 "important"
Veronika Kocher 5.3 863 );
Veronika Kocher 5.2 864 }
865 }
Veronika Kocher 5.5 866 });
Veronika Kocher 5.2 867
Veronika Kocher 5.5 868 // Warning families: explicit safety override.
869 Array.from(
870 root.querySelectorAll(
871 ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+
872 ".warn,.warning,.warningmessage,.errormessage"
873 )
874 ).forEach(function(el){
875 if(!visible(el))return;
Veronika Kocher 5.2 876
Veronika Kocher 5.5 877 el.style.setProperty(
878 "border-left",
879 "4px solid #e94b13",
880 "important"
881 );
882 });
Veronika Kocher 5.2 883
Veronika Kocher 5.5 884 // Info families: explicit orientation override.
885 Array.from(
886 root.querySelectorAll(
887 ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage"
888 )
889 ).forEach(function(el){
890 if(!visible(el))return;
Veronika Kocher 5.3 891
Veronika Kocher 5.5 892 el.style.setProperty(
893 "border-left",
894 "4px solid #21b6d7",
895 "important"
896 );
897 });
898 }
Veronika Kocher 5.3 899
Veronika Kocher 5.5 900 /* =======================================================
901 OVERVIEW SEMANTIC THEME PALETTE
902 ======================================================= */
Veronika Kocher 5.3 903
Veronika Kocher 5.5 904 function smallestThemeHeaders(){
905 return Array.from(
906 root.querySelectorAll(
907 "div,span,p,strong,h3,h4,h5,h6"
908 )
909 ).filter(function(el){
910 if(!visible(el))return false;
911 if(!themeFor(el.textContent))return false;
Veronika Kocher 5.3 912
Veronika Kocher 5.5 913 return !Array.from(
914 el.children||[]
915 ).some(function(child){
916 return !!themeFor(
917 child.textContent
918 );
Veronika Kocher 5.3 919 });
Veronika Kocher 5.5 920 });
Veronika Kocher 5.2 921 }
922
Veronika Kocher 5.5 923 function findOverviewCard(header){
924 var node=header.parentElement;
925 var candidates=[];
Veronika Kocher 5.3 926
Veronika Kocher 5.5 927 while(node&&node!==root){
928 var rect=node.getBoundingClientRect();
929 var style=getComputedStyle(node);
Veronika Kocher 5.3 930
Veronika Kocher 5.5 931 var border=
932 num(style.borderTopWidth)+
933 num(style.borderRightWidth)+
934 num(style.borderBottomWidth)+
935 num(style.borderLeftWidth);
Veronika Kocher 5.3 936
Veronika Kocher 5.5 937 if(
938 rect.width>=220&&
939 rect.width<=800&&
940 rect.height>=120&&
941 border>=1
942 ){
943 candidates.push(node);
944 }
Veronika Kocher 5.3 945
Veronika Kocher 5.5 946 node=node.parentElement;
947 }
Veronika Kocher 5.3 948
Veronika Kocher 5.5 949 if(!candidates.length)return null;
Veronika Kocher 5.3 950
Veronika Kocher 5.5 951 candidates.sort(function(a,b){
952 return (
953 b.getBoundingClientRect().height-
954 a.getBoundingClientRect().height
Veronika Kocher 5.4 955 );
Veronika Kocher 5.5 956 });
Veronika Kocher 5.3 957
Veronika Kocher 5.5 958 return candidates[0];
Veronika Kocher 5.3 959 }
960
Veronika Kocher 5.5 961 function rowCandidates(link,card){
962 var result=[];
Veronika Kocher 5.4 963 var cardRect=
964 card.getBoundingClientRect();
Veronika Kocher 5.3 965
Veronika Kocher 5.5 966 var node=link;
Veronika Kocher 5.3 967
Veronika Kocher 5.5 968 while(node&&node!==card){
969 if(visible(node)){
970 var rect=
971 node.getBoundingClientRect();
Veronika Kocher 5.3 972
Veronika Kocher 5.5 973 if(
974 rect.height<=105&&
975 rect.width>=
976 cardRect.width*.50&&
977 rect.width<=
978 cardRect.width*1.03
979 ){
980 result.push(node);
981 }
982 }
Veronika Kocher 5.3 983
Veronika Kocher 5.5 984 node=node.parentElement;
985 }
986
987 return result;
988 }
989
990 function chooseOuterRow(
991 candidates,
992 link
993 ){
994 if(!candidates.length){
995 return link;
996 }
997
998 var bordered=
999 candidates.filter(function(el){
Veronika Kocher 5.4 1000 return (
Veronika Kocher 5.5 1001 num(
1002 getComputedStyle(el)
1003 .borderLeftWidth
1004 )>=1
Veronika Kocher 5.4 1005 );
1006 });
Veronika Kocher 5.3 1007
Veronika Kocher 5.5 1008 var pool=
1009 bordered.length
1010 ?bordered
1011 :candidates;
Veronika Kocher 5.3 1012
Veronika Kocher 5.5 1013 pool.sort(function(a,b){
1014 var ar=
1015 a.getBoundingClientRect();
Veronika Kocher 5.3 1016
Veronika Kocher 5.5 1017 var br=
1018 b.getBoundingClientRect();
Veronika Kocher 5.3 1019
Veronika Kocher 5.5 1020 return (
1021 ar.left-br.left||
1022 br.width-ar.width
1023 );
1024 });
Veronika Kocher 5.3 1025
Veronika Kocher 5.5 1026 return pool[0]||link;
1027 }
Veronika Kocher 5.3 1028
Veronika Kocher 5.5 1029 function applyOverviewPalette(){
1030 if(PAGE_KIND!=="overview"){
1031 return [];
Veronika Kocher 5.4 1032 }
Veronika Kocher 5.3 1033
Veronika Kocher 5.5 1034 var headers=
1035 smallestThemeHeaders()
1036 .map(function(el){
1037 return {
1038 el:el,
1039 theme:
1040 themeFor(
1041 el.textContent
1042 ),
1043 card:
1044 findOverviewCard(
1045 el
1046 )
1047 };
Veronika Kocher 5.4 1048 })
Veronika Kocher 5.5 1049 .filter(function(row){
1050 return !!row.card;
1051 });
Veronika Kocher 5.3 1052
Veronika Kocher 5.5 1053 var unique=[];
1054 var seenHeaders=new Set();
Veronika Kocher 5.3 1055
Veronika Kocher 5.5 1056 headers.forEach(function(row){
1057 var key=
1058 row.theme.name+
1059 "|"+
1060 Math.round(
1061 row.card
1062 .getBoundingClientRect()
1063 .left
1064 )+
1065 "|"+
1066 Math.round(
1067 row.el
1068 .getBoundingClientRect()
1069 .top
1070 );
Veronika Kocher 5.3 1071
Veronika Kocher 5.5 1072 if(!seenHeaders.has(key)){
1073 seenHeaders.add(key);
1074 unique.push(row);
1075 }
1076 });
Veronika Kocher 5.3 1077
Veronika Kocher 5.5 1078 unique.forEach(function(row){
1079 var headerRect=
1080 row.el
1081 .getBoundingClientRect();
Veronika Kocher 5.3 1082
Veronika Kocher 5.5 1083 row.el.style.setProperty(
1084 "background",
1085 row.theme.bg,
1086 "important"
Veronika Kocher 5.4 1087 );
1088
Veronika Kocher 5.5 1089 row.el.style.setProperty(
1090 "color",
1091 row.theme.text,
1092 "important"
Veronika Kocher 5.4 1093 );
1094
Veronika Kocher 5.5 1095 row.el.style.setProperty(
1096 "text-align",
1097 "left",
1098 "important"
Veronika Kocher 5.4 1099 );
Veronika Kocher 5.3 1100
Veronika Kocher 5.5 1101 row.el.style.setProperty(
1102 "word-spacing",
1103 "normal",
1104 "important"
1105 );
Veronika Kocher 5.4 1106
Veronika Kocher 5.5 1107 var later=
1108 unique
1109 .filter(function(other){
1110 return (
1111 other.card===row.card&&
1112 other.el
1113 .getBoundingClientRect()
1114 .top>
1115 headerRect.top+2
1116 );
1117 })
1118 .sort(function(a,b){
1119 return (
1120 a.el
1121 .getBoundingClientRect()
1122 .top-
1123 b.el
1124 .getBoundingClientRect()
1125 .top
1126 );
1127 });
Veronika Kocher 5.4 1128
Veronika Kocher 5.5 1129 var stopTop=
1130 later.length
1131 ?later[0].el
1132 .getBoundingClientRect()
1133 .top
1134 :Infinity;
Veronika Kocher 5.4 1135
1136 Array.from(
Veronika Kocher 5.5 1137 row.card.querySelectorAll("a")
1138 ).forEach(function(link){
1139 if(!visible(link))return;
Veronika Kocher 5.4 1140
Veronika Kocher 5.5 1141 var rect=
1142 link.getBoundingClientRect();
Veronika Kocher 5.4 1143
Veronika Kocher 5.5 1144 if(
1145 rect.top<=
1146 headerRect.bottom-2||
1147 rect.top>=
1148 stopTop-2
1149 ){
1150 return;
1151 }
Veronika Kocher 5.4 1152
Veronika Kocher 5.5 1153 var candidates=
1154 rowCandidates(
1155 link,
1156 row.card
1157 );
1158
1159 var target=
1160 chooseOuterRow(
1161 candidates,
1162 link
1163 );
1164
1165 candidates.forEach(function(el){
1166 el.style.setProperty(
1167 "border-left",
1168 "0 solid transparent",
1169 "important"
1170 );
1171 });
1172
1173 target.style.setProperty(
1174 "border-left",
1175 "3px solid "+
1176 row.theme.accent,
1177 "important"
Veronika Kocher 5.4 1178 );
Veronika Kocher 5.5 1179
1180 target.style.setProperty(
1181 "box-sizing",
1182 "border-box",
1183 "important"
Veronika Kocher 5.4 1184 );
Veronika Kocher 5.3 1185 });
Veronika Kocher 5.5 1186 });
Veronika Kocher 5.3 1187
Veronika Kocher 5.5 1188 return unique;
Veronika Kocher 5.4 1189 }
Veronika Kocher 5.3 1190
Veronika Kocher 5.5 1191 /* =======================================================
1192 OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW
1193 ======================================================= */
Veronika Kocher 5.4 1194
Veronika Kocher 5.5 1195 function alignOverviewCards(headers){
1196 if(
1197 PAGE_KIND!=="overview"||
1198 window.innerWidth<=MOBILE_MAX
1199 ){
1200 return;
1201 }
Veronika Kocher 5.4 1202
Veronika Kocher 5.5 1203 var cards=[];
1204 var seen=new Set();
Veronika Kocher 5.4 1205
Veronika Kocher 5.5 1206 headers.forEach(function(row){
1207 if(!seen.has(row.card)){
1208 seen.add(row.card);
1209 cards.push(row.card);
1210 }
1211 });
Veronika Kocher 5.4 1212
Veronika Kocher 5.5 1213 if(cards.length<2){
1214 return;
1215 }
Veronika Kocher 5.4 1216
Veronika Kocher 5.5 1217 // Group cards by actual top position.
1218 var groups=[];
Veronika Kocher 5.4 1219
Veronika Kocher 5.5 1220 cards.forEach(function(card){
1221 var top=
1222 card.getBoundingClientRect().top;
Veronika Kocher 5.4 1223
Veronika Kocher 5.5 1224 var group=null;
Veronika Kocher 5.4 1225
Veronika Kocher 5.5 1226 for(var i=0;i<groups.length;i++){
Veronika Kocher 5.4 1227 if(
Veronika Kocher 5.5 1228 Math.abs(
1229 groups[i].top-top
1230 )<=ROW_TOLERANCE
Veronika Kocher 5.4 1231 ){
Veronika Kocher 5.5 1232 group=groups[i];
1233 break;
Veronika Kocher 5.4 1234 }
Veronika Kocher 5.5 1235 }
Veronika Kocher 5.4 1236
Veronika Kocher 5.5 1237 if(!group){
1238 group={
1239 top:top,
1240 cards:[]
1241 };
1242 groups.push(group);
1243 }
Veronika Kocher 5.4 1244
Veronika Kocher 5.5 1245 group.cards.push(card);
1246 });
Veronika Kocher 5.4 1247
Veronika Kocher 5.5 1248 groups.forEach(function(group){
1249 if(group.cards.length<2){
1250 return;
1251 }
Veronika Kocher 5.4 1252
Veronika Kocher 5.5 1253 var firstHeaders=
1254 group.cards.map(function(card){
1255 var candidates=
1256 headers
1257 .filter(function(row){
1258 return row.card===card;
1259 })
1260 .sort(function(a,b){
1261 return (
1262 a.el
1263 .getBoundingClientRect()
1264 .top-
1265 b.el
1266 .getBoundingClientRect()
1267 .top
1268 );
1269 });
Veronika Kocher 5.4 1270
Veronika Kocher 5.5 1271 return candidates.length
1272 ?candidates[0]
1273 :null;
1274 });
Veronika Kocher 5.4 1275
Veronika Kocher 5.5 1276 if(
1277 !firstHeaders.some(function(row){
1278 return !row;
1279 })
1280 ){
1281 var targetTop=
1282 Math.max.apply(
1283 Math,
1284 firstHeaders.map(function(row){
1285 return (
1286 row.el
1287 .getBoundingClientRect()
1288 .top-
1289 row.card
1290 .getBoundingClientRect()
1291 .top
1292 );
1293 })
1294 );
Veronika Kocher 5.2 1295
Veronika Kocher 5.5 1296 firstHeaders.forEach(function(row){
1297 var relativeTop=
1298 row.el
1299 .getBoundingClientRect()
1300 .top-
1301 row.card
1302 .getBoundingClientRect()
1303 .top;
Veronika Kocher 5.3 1304
Veronika Kocher 5.5 1305 var delta=
1306 targetTop-relativeTop;
Veronika Kocher 5.3 1307
Veronika Kocher 5.5 1308 if(delta>1){
1309 saveStyle(
1310 row.el,
1311 originalMargin,
1312 "margin-top"
1313 );
Veronika Kocher 5.4 1314
Veronika Kocher 5.5 1315 var current=
1316 num(
1317 getComputedStyle(
1318 row.el
1319 ).marginTop
1320 );
Veronika Kocher 5.3 1321
Veronika Kocher 5.5 1322 row.el.style.setProperty(
1323 "margin-top",
1324 (
1325 current+delta
1326 )+"px"
1327 );
Veronika Kocher 5.3 1328
Veronika Kocher 5.5 1329 row.el.setAttribute(
1330 "data-sn-master-first-row",
1331 "1"
1332 );
Veronika Kocher 5.3 1333
Veronika Kocher 5.5 1334 managedMargin.add(
1335 row.el
1336 );
1337 }
1338 });
1339 }
Veronika Kocher 5.3 1340
Veronika Kocher 5.5 1341 var maxHeight=0;
Veronika Kocher 5.3 1342
Veronika Kocher 5.5 1343 group.cards.forEach(function(card){
1344 maxHeight=
1345 Math.max(
1346 maxHeight,
1347 card
1348 .getBoundingClientRect()
1349 .height
1350 );
1351 });
Veronika Kocher 5.3 1352
Veronika Kocher 5.5 1353 maxHeight=
1354 Math.ceil(maxHeight);
Veronika Kocher 5.3 1355
Veronika Kocher 5.5 1356 group.cards.forEach(function(card){
1357 saveStyle(
1358 card,
1359 originalHeight,
1360 "min-height"
1361 );
Veronika Kocher 5.3 1362
Veronika Kocher 5.5 1363 card.style.setProperty(
1364 "min-height",
1365 maxHeight+"px"
Veronika Kocher 5.3 1366 );
1367
Veronika Kocher 5.5 1368 card.setAttribute(
1369 "data-sn-master-equal-height",
1370 "1"
1371 );
Veronika Kocher 5.3 1372
Veronika Kocher 5.5 1373 managedHeight.add(
1374 card
1375 );
1376 });
Veronika Kocher 5.3 1377 });
1378 }
1379
Veronika Kocher 5.5 1380 /* =======================================================
1381 DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY
1382 ======================================================= */
Veronika Kocher 5.3 1383
Veronika Kocher 5.5 1384 function equaliseDetailGrids(){
Veronika Kocher 5.4 1385 if(
Veronika Kocher 5.5 1386 PAGE_KIND!=="detail"||
1387 window.innerWidth<=MOBILE_MAX
Veronika Kocher 5.4 1388 ){
Veronika Kocher 5.5 1389 return;
Veronika Kocher 5.4 1390 }
Veronika Kocher 5.3 1391
Veronika Kocher 5.5 1392 var selectors=[
1393 ".arsn-grid",
1394 ".arsn-grid-2",
1395 ".arsn-grid-3",
1396 ".dmp-grid",
1397 ".ido-grid",
1398 ".pp-grid"
1399 ];
Veronika Kocher 5.3 1400
Veronika Kocher 5.5 1401 selectors.forEach(function(selector){
1402 Array.from(
1403 root.querySelectorAll(selector)
1404 ).forEach(function(grid){
1405 var children=
1406 Array.from(
1407 grid.children||[]
1408 ).filter(visible);
Veronika Kocher 5.3 1409
Veronika Kocher 5.5 1410 if(children.length<2){
1411 return;
1412 }
Veronika Kocher 5.3 1413
Veronika Kocher 5.5 1414 var groups=[];
Veronika Kocher 5.3 1415
Veronika Kocher 5.5 1416 children.forEach(function(child){
1417 var top=
1418 child
1419 .getBoundingClientRect()
1420 .top;
Veronika Kocher 5.3 1421
Veronika Kocher 5.5 1422 var group=null;
Veronika Kocher 5.3 1423
Veronika Kocher 5.5 1424 for(var i=0;i<groups.length;i++){
1425 if(
1426 Math.abs(
1427 groups[i].top-top
1428 )<=ROW_TOLERANCE
1429 ){
1430 group=groups[i];
1431 break;
1432 }
1433 }
Veronika Kocher 5.3 1434
Veronika Kocher 5.5 1435 if(!group){
1436 group={
1437 top:top,
1438 items:[]
1439 };
1440 groups.push(group);
1441 }
Veronika Kocher 5.3 1442
Veronika Kocher 5.5 1443 group.items.push(child);
1444 });
Veronika Kocher 5.3 1445
Veronika Kocher 5.5 1446 groups.forEach(function(group){
1447 if(group.items.length<2){
1448 return;
1449 }
Veronika Kocher 5.2 1450
Veronika Kocher 5.5 1451 var maxHeight=0;
Veronika Kocher 5.4 1452
Veronika Kocher 5.5 1453 group.items.forEach(function(item){
1454 maxHeight=
1455 Math.max(
1456 maxHeight,
1457 item
1458 .getBoundingClientRect()
1459 .height
1460 );
1461 });
Veronika Kocher 5.4 1462
Veronika Kocher 5.5 1463 maxHeight=
1464 Math.ceil(maxHeight);
Veronika Kocher 5.2 1465
Veronika Kocher 5.5 1466 group.items.forEach(function(item){
1467 saveStyle(
1468 item,
1469 originalHeight,
1470 "min-height"
1471 );
Veronika Kocher 5.2 1472
Veronika Kocher 5.5 1473 item.style.setProperty(
1474 "min-height",
1475 maxHeight+"px"
1476 );
Veronika Kocher 5.3 1477
Veronika Kocher 5.5 1478 item.setAttribute(
1479 "data-sn-master-equal-height",
1480 "1"
1481 );
Veronika Kocher 5.2 1482
Veronika Kocher 5.5 1483 managedHeight.add(item);
1484 });
Veronika Kocher 5.2 1485 });
Veronika Kocher 5.5 1486 });
1487 });
1488 }
Veronika Kocher 5.2 1489
Veronika Kocher 5.5 1490 /* =======================================================
1491 RUN / RESPONSIVE SCHEDULING
1492 ======================================================= */
Veronika Kocher 5.2 1493
Veronika Kocher 5.5 1494 function run(){
1495 if(running)return;
Veronika Kocher 5.2 1496
Veronika Kocher 5.5 1497 running=true;
Veronika Kocher 5.4 1498
Veronika Kocher 5.5 1499 try{
1500 resetRuntime();
1501 applyPlaceholderBadge();
1502 propagateDetailAccents();
Veronika Kocher 5.4 1503
Veronika Kocher 5.5 1504 var headers=
1505 applyOverviewPalette();
Veronika Kocher 5.4 1506
Veronika Kocher 5.6 1507 makeThreeLineAreaLabels();
1508 makeFilledRedOrangeCTAsBorderless();
1509
Veronika Kocher 5.5 1510 if(
1511 window.innerWidth>
1512 MOBILE_MAX
1513 ){
1514 alignOverviewCards(
1515 headers
1516 );
Veronika Kocher 5.2 1517
Veronika Kocher 5.5 1518 equaliseDetailGrids();
1519 }
Veronika Kocher 5.4 1520 }finally{
Veronika Kocher 5.5 1521 running=false;
Veronika Kocher 5.4 1522 }
Veronika Kocher 5.2 1523 }
1524
Veronika Kocher 5.5 1525 function onResize(){
Veronika Kocher 5.4 1526 if(resizeTimer){
1527 clearTimeout(
1528 resizeTimer
1529 );
1530 }
Veronika Kocher 5.3 1531
Veronika Kocher 5.4 1532 resizeTimer=
1533 setTimeout(
1534 function(){
1535 resizeTimer=0;
Veronika Kocher 5.5 1536 run();
Veronika Kocher 5.4 1537 },
1538 RESIZE_DEBOUNCE
1539 );
Veronika Kocher 5.2 1540 }
1541
Veronika Kocher 5.5 1542 async function waitForReady(){
1543 if(
1544 document.readyState!=="complete"
1545 ){
1546 await new Promise(function(resolve){
1547 window.addEventListener(
1548 "load",
1549 resolve,
1550 {once:true}
1551 );
1552 });
1553 }
1554
1555 if(
1556 document.fonts&&
1557 document.fonts.ready
1558 ){
1559 try{
1560 await document.fonts.ready;
1561 }catch(error){}
1562 }
1563
Veronika Kocher 5.4 1564 var images=
1565 Array.from(
1566 root.querySelectorAll("img")
1567 );
Veronika Kocher 5.2 1568
Veronika Kocher 5.5 1569 await Promise.all(
Veronika Kocher 5.4 1570 images.map(function(img){
1571 if(img.complete){
1572 return Promise.resolve();
1573 }
Veronika Kocher 5.2 1574
Veronika Kocher 5.4 1575 return new Promise(function(resolve){
1576 var done=function(){
1577 resolve();
1578 };
1579
1580 img.addEventListener(
1581 "load",
1582 done,
1583 {once:true}
1584 );
1585
1586 img.addEventListener(
1587 "error",
1588 done,
1589 {once:true}
1590 );
1591 });
1592 })
1593 );
1594
Veronika Kocher 5.5 1595 run();
Veronika Kocher 5.2 1596 }
1597
Veronika Kocher 5.5 1598 window.addEventListener(
Veronika Kocher 5.4 1599 "resize",
Veronika Kocher 5.5 1600 onResize,
Veronika Kocher 5.4 1601 {passive:true}
1602 );
1603
Veronika Kocher 5.5 1604 waitForReady();
Veronika Kocher 5.2 1605 })();
1606 </script>
Veronika Kocher 5.4 1607
Veronika Kocher 5.5 1608 <!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END -->
1609 {{/html}}
1610