Wiki source code of Enable

Version 29.9 by Veronika Kocher on Thursday, 03 Sep 2026 10:09

Hide last authors
Veronika Kocher 22.1 1 {{html clean="false"}}
Veronika Kocher 28.1 2
Veronika Kocher 23.1 3 <style>
Veronika Kocher 28.1 4 .arsn-phase {
Veronika Kocher 23.1 5 max-width: 1400px;
6 margin: 0 auto;
7 color: #322f2b;
8 }
Veronika Kocher 16.1 9
Veronika Kocher 28.1 10 .arsn-phase * {
Veronika Kocher 23.1 11 box-sizing: border-box;
12 }
13
14 .arsn-eyebrow {
15 font-size: 12px;
16 font-weight: 700;
17 letter-spacing: .075em;
18 text-transform: uppercase;
19 }
20
21 .arsn-card {
22 border-radius: 11px;
23 box-shadow: 0 1px 3px rgba(0,0,0,.035);
24 }
25
Veronika Kocher 28.1 26 .arsn-hero-image {
27 height: 138px;
28 overflow: hidden;
29 border-radius: 11px 11px 0 0;
30 background: #f1eee9;
31 }
32
33 .arsn-hero-image img {
34 width: 100%;
35 height: 100%;
36 object-fit: cover;
37 display: block;
38 }
39
40 .arsn-progress {
41 position: relative;
42 display: grid;
43 grid-template-columns: repeat(3, minmax(0,1fr));
44 gap: 14px;
45 margin: 0 0 26px 0;
46 padding: 4px 0 0 0;
47 }
48
49 .arsn-progress:before {
50 content: "";
51 position: absolute;
52 top: 21px;
53 left: 9%;
54 right: 9%;
55 height: 2px;
56 background: #e9cfc2;
57 z-index: 0;
58 }
59
60 .arsn-step {
61 position: relative;
62 z-index: 1;
63 text-align: center;
64 }
65
66 .arsn-step-dot {
67 width: 14px;
68 height: 14px;
69 margin: 0 auto 7px auto;
70 border-radius: 50%;
71 border: 3px solid #fff;
72 box-shadow: 0 0 0 1px #d5cfc7;
73 background: #d8d2ca;
74 }
75
76 .arsn-step.active .arsn-step-dot {
77 background: #e94b13;
78 box-shadow: 0 0 0 1px #e94b13;
79 }
80
81 .arsn-step.done .arsn-step-dot {
82 background: #8c837a;
83 box-shadow: 0 0 0 1px #8c837a;
84 }
85
86 .arsn-step-label {
87 font-size: 11px;
88 font-weight: 700;
89 letter-spacing: .06em;
90 color: #746d65;
91 }
92
93 .arsn-step.active .arsn-step-label {
94 color: #7d4a37;
95 }
96
97 .arsn-step-desc {
98 margin-top: 3px;
99 font-size: 13px;
100 color: #6a655e;
101 }
102
103 .arsn-focus-grid {
104 display: grid;
105 grid-template-columns: repeat(3, minmax(230px,1fr));
106 gap: 12px;
107 }
108
109 .arsn-focus-group {
110 padding: 13px 14px;
111 background: rgba(255,255,255,.52);
112 border: 1px solid #cfe8ef;
113 border-radius: 8px;
114 }
115
116 .arsn-focus-group strong {
117 display: block;
118 margin-bottom: 6px;
119 color: #2f5661;
120 }
121
122 .arsn-focus-group ul {
123 margin: 0 0 0 17px;
124 padding: 0;
125 color: #365862;
126 }
127
128 .arsn-focus-group li {
129 margin: 4px 0;
130 }
131
132 .arsn-outcome-grid {
133 display: grid;
134 grid-template-columns: repeat(auto-fit, minmax(230px,1fr));
135 gap: 10px;
136 }
137
138 .arsn-outcome {
139 position: relative;
140 padding: 12px 13px 12px 36px;
141 background: #fcfbf8;
142 border: 1px solid #e3ded6;
143 border-radius: 8px;
144 color: #4f4a44;
145 }
146
147 .arsn-outcome:before {
148 content: "✓";
149 position: absolute;
150 left: 13px;
151 top: 10px;
152 color: #e94b13;
153 font-weight: 800;
154 }
155
Veronika Kocher 23.1 156 .arsn-area-grid {
157 display: grid;
Veronika Kocher 28.1 158 grid-template-columns: repeat(auto-fit, minmax(310px,1fr));
Veronika Kocher 23.1 159 gap: 18px;
160 align-items: stretch;
161 }
162
163 .arsn-area {
164 display: flex;
165 flex-direction: column;
166 overflow: hidden;
Veronika Kocher 24.1 167 border: 1px solid #e3ded6;
Veronika Kocher 23.1 168 border-radius: 11px;
Veronika Kocher 24.1 169 background: #fcfbf8;
Veronika Kocher 23.1 170 box-shadow: 0 1px 3px rgba(0,0,0,.035);
171 }
172
173 .arsn-area-head {
174 padding: 18px 19px 12px 19px;
175 }
176
177 .arsn-area-body {
178 padding: 3px 19px 19px 19px;
179 }
180
181 .arsn-area-label {
Veronika Kocher 28.1 182 display: inline-flex;
183 align-items: center;
184 gap: 7px;
Veronika Kocher 23.1 185 padding: 5px 8px;
186 margin-bottom: 9px;
187 border-radius: 5px;
188 font-size: 12px;
189 font-weight: 700;
190 letter-spacing: .065em;
191 }
192
Veronika Kocher 28.1 193 .arsn-area-number {
194 opacity: .72;
195 }
196
197 .arsn-area-action {
198 margin-left: 2px;
199 font-weight: 600;
200 opacity: .74;
201 letter-spacing: .02em;
202 text-transform: none;
203 }
204
Veronika Kocher 23.1 205 .arsn-area h4 {
206 font-size: 19px;
207 line-height: 1.3;
208 margin: 0 0 7px 0;
209 color: #2f2b27;
210 }
211
212 .arsn-area p {
213 margin: 0;
214 line-height: 1.5;
215 color: #625d56;
216 }
217
218 .arsn-topic {
219 display: block;
220 margin: 6px 0;
221 padding: 10px 11px;
Veronika Kocher 24.1 222 border: 1px solid #e9e4dc;
Veronika Kocher 23.1 223 border-radius: 6px;
Veronika Kocher 25.1 224 background: #fffdf9;
Veronika Kocher 23.1 225 color: #252321;
226 text-decoration: none;
227 font-weight: 600;
228 transition: transform .08s ease, box-shadow .08s ease, background .08s ease;
229 }
230
231 .arsn-topic:hover,
232 .arsn-topic:focus {
Veronika Kocher 25.1 233 background: #fff7f1;
Veronika Kocher 23.1 234 text-decoration: none;
235 transform: translateY(-1px);
236 box-shadow: 0 2px 5px rgba(0,0,0,.06);
237 }
238
239 .arsn-resource-grid {
240 display: grid;
241 grid-template-columns: repeat(auto-fit, minmax(230px,1fr));
242 gap: 12px;
243 }
244
Veronika Kocher 28.1 245 .arsn-related-grid {
246 display: grid;
247 grid-template-columns: repeat(auto-fit, minmax(260px,1fr));
248 gap: 8px;
249 }
250
251 .arsn-related-link {
252 display: block;
253 padding: 9px 10px;
254 border: 1px solid #e9e4dc;
255 border-left: 3px solid #e94b13;
256 border-radius: 6px;
257 background: #fffdf9;
258 color: #252321;
259 text-decoration: none;
260 font-weight: 600;
261 }
262
263 .arsn-related-link:hover,
264 .arsn-related-link:focus {
265 background: #fff7f1;
266 text-decoration: none;
267 }
268
269 .arsn-tip {
270 padding: 12px 15px;
271 border: 1px solid #c7e5ed;
272 border-left: 4px solid #21b6d7;
273 background: #eaf6f9;
274 border-radius: 7px;
275 color: #365e68;
276 font-size: 13px;
277 }
278
279 .arsn-tip strong {
280 color: #2d5661;
281 }
282
283 @media (max-width: 800px) {
Veronika Kocher 23.1 284 .arsn-focus-grid {
Veronika Kocher 28.1 285 grid-template-columns: 1fr;
Veronika Kocher 23.1 286 }
287 }
Veronika Kocher 28.1 288
289 @media (max-width: 700px) {
290 .arsn-progress:before {
291 display: none;
292 }
293 .arsn-progress {
294 grid-template-columns: 1fr;
295 gap: 8px;
296 }
297 .arsn-step {
298 text-align: left;
299 display: grid;
300 grid-template-columns: 24px 1fr;
301 column-gap: 8px;
302 align-items: center;
303 }
304 .arsn-step-dot {
305 margin: 0;
306 }
307 .arsn-step-desc {
308 grid-column: 2;
309 }
310 }
Veronika Kocher 23.1 311 </style>
312
Veronika Kocher 28.1 313 <div class="arsn-phase">
Veronika Kocher 23.1 314
Veronika Kocher 28.1 315 <section class="arsn-card" style="margin:0 0 18px 0;border:1px solid #e3ded6;border-left:6px solid #e94b13;background:#fcfbf8;overflow:hidden;">
316 <div class="arsn-hero-image">
Veronika Kocher 29.1 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" />
Veronika Kocher 22.1 318 </div>
Veronika Kocher 28.1 319 <div style="padding:18px 22px 21px 22px;">
320 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:6px;">PROJECT PHASE 1 · ENABLE</div>
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 <p style="font-size:15px;line-height:1.58;color:#5e5953;max-width:1080px;margin:0;">
323 Before active project work begins, clarify how the project will be organised, funded and supported,
324 what materials and research outputs are expected, and how rights, responsibilities, infrastructure
325 and data management will be handled from the start.
326 </p>
327 </div>
328 </section>
Veronika Kocher 16.1 329
Veronika Kocher 28.1 330 <div class="arsn-progress">
Veronika Kocher 16.1 331
Veronika Kocher 28.1 332 <div class="arsn-step active">
333 <div class="arsn-step-dot"></div>
334 <div class="arsn-step-label">1 · ENABLE</div>
335 <div class="arsn-step-desc">Plan & set up</div>
Veronika Kocher 22.1 336 </div>
Veronika Kocher 16.1 337
Veronika Kocher 28.1 338 <div class="arsn-step">
339 <div class="arsn-step-dot"></div>
340 <div class="arsn-step-label">2 · WORK & MANAGE</div>
341 <div class="arsn-step-desc">Run & document</div>
Veronika Kocher 22.1 342 </div>
Veronika Kocher 16.1 343
Veronika Kocher 28.1 344 <div class="arsn-step">
345 <div class="arsn-step-dot"></div>
346 <div class="arsn-step-label">3 · PUBLISH & SHARE</div>
347 <div class="arsn-step-desc">Publish, preserve & hand over</div>
Veronika Kocher 22.1 348 </div>
Veronika Kocher 28.1 349 </div>
Veronika Kocher 16.1 350
Veronika Kocher 28.1 351 <section class="arsn-card" style="margin:0 0 22px 0;padding:19px 21px;background:#eaf6f9;border:1px solid #cfe8ef;border-left:5px solid #21b6d7;">
Veronika Kocher 25.1 352 <div class="arsn-eyebrow" style="color:#3f6871;margin-bottom:5px;">RIGHT NOW</div>
353 <h3 style="font-size:22px;margin:0 0 8px 0;color:#2f4e56;">What should I be focusing on now?</h3>
Veronika Kocher 28.1 354 <p style="margin:0 0 15px 0;color:#49636a;">You do not need every detail fixed before you start. You do need enough shared decisions to make the project workable, responsible and easy to continue.</p>
Veronika Kocher 16.1 355
Veronika Kocher 28.1 356 <div class="arsn-focus-grid">
357 <div class="arsn-focus-group">
358 <strong>Project</strong>
359 <ul>
360 <li>What is the scope, and who is responsible for which decisions?</li>
361 <li>Which funding opportunities and funder requirements apply?</li>
362 <li>What data, materials and outputs will be created, collected or reused?</li>
363 <li>Do I need a Data Management Plan?</li>
364 </ul>
365 </div>
Veronika Kocher 17.1 366
Veronika Kocher 28.1 367 <div class="arsn-focus-group">
368 <strong>Rights & responsibilities</strong>
369 <ul>
370 <li>Which copyright, permissions or licences need to be clarified?</li>
371 <li>Will personal, sensitive, confidential or ethically complex materials be involved?</li>
372 <li>Which decisions should be documented from the beginning?</li>
373 <li>Who will be responsible for shared accounts, access and handover?</li>
374 </ul>
375 </div>
376
377 <div class="arsn-focus-group">
378 <strong>Working setup</strong>
379 <ul>
380 <li>How should files and folders be organised and named?</li>
381 <li>Where will materials be stored and backed up?</li>
382 <li>Who should have access?</li>
383 <li>Which infrastructure, services and tools are appropriate?</li>
384 </ul>
385 </div>
Veronika Kocher 22.1 386 </div>
387 </section>
Veronika Kocher 17.1 388
Veronika Kocher 28.1 389 <section style="margin:0 0 28px 0;">
390 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:5px;">BY THE END OF THIS PHASE</div>
391 <h3 style="font-size:21px;margin:0 0 10px 0;color:#35312d;">You should have a workable project setup</h3>
392 <div class="arsn-outcome-grid">
393 <div class="arsn-outcome">a clear project scope and named responsibilities</div>
394 <div class="arsn-outcome">a basic plan for data, materials and expected outputs</div>
395 <div class="arsn-outcome">key rights, ethics and protection issues identified</div>
396 <div class="arsn-outcome">agreed storage, backup, access and collaboration arrangements</div>
397 </div>
398 </section>
399
Veronika Kocher 23.1 400 <div style="margin:0 0 15px 0;">
Veronika Kocher 25.1 401 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">EXPLORE THIS PHASE</div>
Veronika Kocher 23.1 402 <h3 style="font-size:24px;margin:0 0 5px 0;color:#35312d;">Four areas to get your project ready</h3>
Veronika Kocher 28.1 403 <p style="margin:0;color:#6a655e;">Start with the area that matches what you need to decide or set up now.</p>
Veronika Kocher 22.1 404 </div>
Veronika Kocher 17.1 405
Veronika Kocher 23.1 406 <div class="arsn-area-grid" style="margin-bottom:30px;">
Veronika Kocher 26.1 407 <section class="arsn-area" style="border-top:4px solid #21b6d7;">
Veronika Kocher 23.1 408 <div class="arsn-area-head">
Veronika Kocher 28.1 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>
Veronika Kocher 23.1 410 <h4>Orient yourself and choose the right level of setup</h4>
Veronika Kocher 28.1 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>
Veronika Kocher 22.1 412 </div>
Veronika Kocher 23.1 413 <div class="arsn-area-body">
Veronika Kocher 28.1 414 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Get%20Started/" style="border-left:3px solid #21b6d7;">Get Started</a>
415 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Quick%20Start%20for%20Small%20Projects/" style="border-left:3px solid #21b6d7;">Quick Start for Small Projects</a>
Veronika Kocher 22.1 416 </div>
417 </section>
Veronika Kocher 16.1 418
Veronika Kocher 25.1 419 <section class="arsn-area" style="border-top:4px solid #e94b13;">
Veronika Kocher 23.1 420 <div class="arsn-area-head">
Veronika Kocher 28.1 421 <div class="arsn-area-label" style="background:#f7e6dd;color:#7b4430;"><span class="arsn-area-number">02</span> PLAN &amp; ORGANISE <span class="arsn-area-action">· Decide</span></div>
Veronika Kocher 23.1 422 <h4>Define what the project needs and how it will be organised</h4>
Veronika Kocher 28.1 423 <p>Clarify scope, responsibilities, funding conditions, expected materials and outputs, and the basic data-management approach before active work begins.</p>
Veronika Kocher 22.1 424 </div>
Veronika Kocher 23.1 425 <div class="arsn-area-body">
Veronika Kocher 28.1 426 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Project%20Planning%20%26%20Organisation/" style="border-left:3px solid #e94b13;">Project Planning &amp; Organisation</a>
427 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Funding%20%26%20Funder%20Requirements/" style="border-left:3px solid #e94b13;">Funding &amp; Funder Requirements</a>
428 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Identify%20Your%20Data%20%26%20Research%20Outputs/" style="border-left:3px solid #e94b13;">Identify Your Data &amp; Research Outputs</a>
429 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Plan%20Your%20Data%20Management/" style="border-left:3px solid #e94b13;">Plan Your Data Management</a>
430 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/File%20Organisation%20%26%20Naming/" style="border-left:3px solid #e94b13;">File Organisation &amp; Naming</a>
Veronika Kocher 22.1 431 </div>
432 </section>
433
Veronika Kocher 26.1 434 <section class="arsn-area" style="border-top:4px solid #f0aa00;">
Veronika Kocher 23.1 435 <div class="arsn-area-head">
Veronika Kocher 28.1 436 <div class="arsn-area-label" style="background:#fff3d5;color:#7a5b12;"><span class="arsn-area-number">03</span> PROTECT &amp; CLARIFY <span class="arsn-area-action">· Check</span></div>
Veronika Kocher 23.1 437 <h4>Clarify rights, permissions, protection needs and responsibilities</h4>
Veronika Kocher 28.1 438 <p>Identify legal, ethical or data-protection issues early enough to obtain permissions, make agreements and avoid unnecessary restrictions later.</p>
Veronika Kocher 22.1 439 </div>
Veronika Kocher 23.1 440 <div class="arsn-area-body">
Veronika Kocher 28.1 441 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Copyright%2C%20Rights%20%26%20Licences/" style="border-left:3px solid #f0aa00;">Copyright, Rights &amp; Licences</a>
442 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Data%20Protection%20%26%20Ethics/" style="border-left:3px solid #f0aa00;">Data Protection &amp; Ethics</a>
Veronika Kocher 22.1 443 </div>
444 </section>
445
Veronika Kocher 26.1 446 <section class="arsn-area" style="border-top:4px solid #38b76a;">
Veronika Kocher 23.1 447 <div class="arsn-area-head">
Veronika Kocher 28.1 448 <div class="arsn-area-label" style="background:#e6f3e9;color:#3f6d4b;"><span class="arsn-area-number">04</span> SET UP INFRASTRUCTURE &amp; COLLABORATION <span class="arsn-area-action">· Prepare</span></div>
Veronika Kocher 23.1 449 <h4>Create a working environment the project can actually use</h4>
Veronika Kocher 28.1 450 <p>Decide where project materials live, how they are backed up and protected, which tools are appropriate and how access and collaboration will work.</p>
Veronika Kocher 22.1 451 </div>
Veronika Kocher 23.1 452 <div class="arsn-area-body">
Veronika Kocher 28.1 453 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Storage%2C%20Backup%20%26%20Security/" style="border-left:3px solid #38b76a;">Storage, Backup &amp; Security</a>
454 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Infrastructure%2C%20Services%20%26%20Tools/" style="border-left:3px solid #38b76a;">Infrastructure, Services &amp; Tools</a>
455 <a class="arsn-topic" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Collaboration%20Setup/" style="border-left:3px solid #38b76a;">Collaboration Setup</a>
Veronika Kocher 22.1 456 </div>
457 </section>
458 </div>
459
Veronika Kocher 28.1 460 <section class="arsn-card" style="margin:0 0 27px 0;padding:18px 20px;background:#fcfbf8;border:1px solid #e3ded6;border-left:5px solid #e94b13;">
Veronika Kocher 25.1 461 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:5px;">NEXT PHASE</div>
Veronika Kocher 23.1 462 <h3 style="font-size:21px;margin:0 0 7px 0;color:#43332d;">Continue in Work &amp; Manage</h3>
Veronika Kocher 28.1 463 <p style="margin:0 0 13px 0;color:#68564e;line-height:1.5;">The setup decisions made here should guide the project, but they are not fixed forever. During active project work, organise, document, secure and review how the project is actually working.</p>
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>
Veronika Kocher 22.1 465 </section>
466
467 <div style="margin:0 0 13px 0;">
Veronika Kocher 25.1 468 <div class="arsn-eyebrow" style="color:#8a4d36;margin-bottom:4px;">USEFUL MATERIALS</div>
Veronika Kocher 23.1 469 <h3 style="font-size:22px;margin:0 0 4px 0;color:#35312d;">Practical resources</h3>
Veronika Kocher 22.1 470 </div>
471
Veronika Kocher 23.1 472 <div class="arsn-resource-grid" style="margin-bottom:27px;">
Veronika Kocher 29.5 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><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>
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><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>
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><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>
Veronika Kocher 22.1 476 </div>
477
Veronika Kocher 29.6 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;"><!-- ARSN_PHASE_ROUTING_V1 -->
479 <strong style="color:#2d5661;">Need help finding the right route?</strong>
480 <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>
Veronika Kocher 22.1 481 </aside>
482
Veronika Kocher 28.1 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>
Veronika Kocher 22.1 484
485 </div>
486 {{/html}}
Veronika Kocher 29.7 487
Veronika Kocher 29.9 488 \n\n
489 \n\n{{html clean="false"}}
Veronika Kocher 29.7 490 <!-- SN_HORIZONTAL_BOX_HARMONIZER_START -->
Veronika Kocher 29.9 491
492 <style data-sn-horizontal-box-harmonizer="7">
493 /* ---------- Typography: never justify headings ---------- */
494 #xwikicontent h1,
495 #xwikicontent h2,
496 #xwikicontent h3,
497 #xwikicontent h4,
498 #xwikicontent h5,
499 #xwikicontent h6,
500 #xwikicontent .box-title,
501 #xwikicontent [role="heading"],
502 #xwikicontent h1 a,
503 #xwikicontent h2 a,
504 #xwikicontent h3 a,
505 #xwikicontent h4 a,
506 #xwikicontent h5 a,
507 #xwikicontent h6 a,
508 #xwikicontent .box-title a,
509 #xwikicontent [role="heading"] a{
510 text-align:left!important;
511 text-justify:auto!important;
512 word-spacing:normal!important;
513 }
514
515 /* ---------- Native XWiki semantic callouts ---------- */
516 #xwikicontent .box.infomessage,
517 #xwikicontent .infomessage,
518 #xwikicontent .box.warningmessage,
519 #xwikicontent .warningmessage,
520 #xwikicontent .box.successmessage,
521 #xwikicontent .successmessage,
522 #xwikicontent .box.errormessage,
523 #xwikicontent .errormessage,
524 #xwikicontent [data-sn-callout-harmonized="1"]{
525 box-sizing:border-box!important;
526 border-radius:8px!important;
527 border-top:1px solid rgba(0,0,0,.08)!important;
528 border-right:1px solid rgba(0,0,0,.08)!important;
529 border-bottom:1px solid rgba(0,0,0,.08)!important;
530 border-left:4px solid var(--sn-callout-accent,#21b6d7)!important;
531 padding:14px 16px!important;
532 text-align:left!important;
533 text-justify:auto!important;
534 word-spacing:normal!important;
535 box-shadow:none!important;
536 }
537
538 #xwikicontent .box.infomessage,
539 #xwikicontent .infomessage{
540 --sn-callout-accent:#21b6d7;
541 background:#eaf7fb!important;
542 }
543
544 #xwikicontent .box.warningmessage,
545 #xwikicontent .warningmessage{
546 --sn-callout-accent:#f0aa00;
547 background:#fff8e7!important;
548 }
549
550 #xwikicontent .box.successmessage,
551 #xwikicontent .successmessage{
552 --sn-callout-accent:#38b76a;
553 background:#edf9f1!important;
554 }
555
556 #xwikicontent .box.errormessage,
557 #xwikicontent .errormessage{
558 --sn-callout-accent:#e94b13;
559 background:#fff1ec!important;
560 }
561
562 #xwikicontent [data-sn-callout-harmonized="1"] > :first-child,
563 #xwikicontent .infomessage > :first-child,
564 #xwikicontent .warningmessage > :first-child,
565 #xwikicontent .successmessage > :first-child,
566 #xwikicontent .errormessage > :first-child{
567 margin-top:0!important;
568 }
569
570 #xwikicontent [data-sn-callout-harmonized="1"] > :last-child,
571 #xwikicontent .infomessage > :last-child,
572 #xwikicontent .warningmessage > :last-child,
573 #xwikicontent .successmessage > :last-child,
574 #xwikicontent .errormessage > :last-child{
575 margin-bottom:0!important;
576 }
577
578 #xwikicontent [data-sn-equal-height-managed],
579 #xwikicontent [data-sn-first-section-aligned],
580 #xwikicontent [data-sn-first-content-aligned]{
Veronika Kocher 29.8 581 box-sizing:border-box;
Veronika Kocher 29.7 582 }
583 </style>
Veronika Kocher 29.9 584
585 <script data-sn-horizontal-box-harmonizer="7">
Veronika Kocher 29.7 586 (function(){
587 "use strict";
588
589 var MOBILE_MAX=767;
Veronika Kocher 29.8 590 var ROW_TOLERANCE=6;
Veronika Kocher 29.7 591 var MIN_W=150;
592 var MIN_H=36;
Veronika Kocher 29.9 593 var MAX_PARENT_CHILDREN=18;
Veronika Kocher 29.8 594 var SEARCH_DEPTH=5;
Veronika Kocher 29.9 595 var RESIZE_DEBOUNCE=220;
596 var MIN_WIDTH_CHANGE=2;
Veronika Kocher 29.7 597
598 var root=
599 document.getElementById("xwikicontent")||
600 document.querySelector(".xwiki-rendering-content")||
601 document.querySelector("main")||
602 document.body;
603
604 if(!root)return;
605
Veronika Kocher 29.8 606 var heightManaged=new Set();
607 var sectionManaged=new Set();
Veronika Kocher 29.9 608 var contentManaged=new Set();
609
Veronika Kocher 29.8 610 var originalMinHeight=new WeakMap();
611 var originalMarginTop=new WeakMap();
Veronika Kocher 29.7 612
Veronika Kocher 29.9 613 var resizeTimer=0;
614 var lastWidth=-1;
615 var hasApplied=false;
616 var applying=false;
617
Veronika Kocher 29.7 618 function num(v){
619 var n=parseFloat(v);
620 return Number.isFinite(n)?n:0;
621 }
622
Veronika Kocher 29.8 623 function visible(el,minW,minH){
Veronika Kocher 29.7 624 if(!el||el.nodeType!==1)return false;
Veronika Kocher 29.8 625
Veronika Kocher 29.7 626 var s=getComputedStyle(el);
Veronika Kocher 29.8 627
628 if(
629 s.display==="none"||
630 s.visibility==="hidden"||
631 Number(s.opacity)===0
632 ){
633 return false;
634 }
635
Veronika Kocher 29.7 636 var r=el.getBoundingClientRect();
Veronika Kocher 29.8 637
638 return (
639 r.width>=(minW||1)&&
640 r.height>=(minH||1)
641 );
Veronika Kocher 29.7 642 }
643
Veronika Kocher 29.9 644 function normalizeText(text){
645 return String(text||"")
646 .replace(/\s+/g," ")
647 .trim()
648 .toUpperCase();
649 }
650
Veronika Kocher 29.7 651 function excluded(el){
Veronika Kocher 29.8 652 return (
653 !el.matches||
654 el.matches(
655 "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]"
656 )
Veronika Kocher 29.7 657 );
658 }
659
Veronika Kocher 29.9 660 /* ---------- Custom coloured callouts ---------- */
661
662 function nativeCallout(el){
Veronika Kocher 29.8 663 var c=
664 typeof el.className==="string"
Veronika Kocher 29.9 665 ? el.className.toLowerCase()
Veronika Kocher 29.8 666 : "";
667
Veronika Kocher 29.9 668 return (
669 /(^|\s)(infomessage|warningmessage|successmessage|errormessage)(\s|$)/.test(c)
670 );
Veronika Kocher 29.7 671 }
672
Veronika Kocher 29.9 673 function customCallout(el){
674 if(!visible(el,220,42)||excluded(el))return false;
Veronika Kocher 29.8 675
Veronika Kocher 29.7 676 var r=el.getBoundingClientRect();
Veronika Kocher 29.8 677
Veronika Kocher 29.9 678 if(r.height>520)return false;
Veronika Kocher 29.8 679
Veronika Kocher 29.9 680 var s=getComputedStyle(el);
Veronika Kocher 29.8 681
682 var bg=
683 s.backgroundColor&&
684 s.backgroundColor!=="rgba(0, 0, 0, 0)"&&
Veronika Kocher 29.9 685 s.backgroundColor!=="transparent"&&
686 s.backgroundColor!=="rgb(255, 255, 255)";
Veronika Kocher 29.8 687
Veronika Kocher 29.9 688 var left=
689 num(s.borderLeftWidth);
Veronika Kocher 29.8 690
691 return (
Veronika Kocher 29.9 692 bg&&
693 left>=2
Veronika Kocher 29.8 694 );
Veronika Kocher 29.7 695 }
696
Veronika Kocher 29.9 697 function harmoniseCustomCallouts(){
698 Array.from(
699 root.querySelectorAll(
700 "div,aside,section"
701 )
702 ).forEach(function(el){
703 if(nativeCallout(el))return;
704 if(!customCallout(el))return;
705
706 var s=getComputedStyle(el);
707
708 el.setAttribute(
709 "data-sn-callout-harmonized",
710 "1"
711 );
712
713 if(
714 s.borderLeftColor
715 ){
716 el.style.setProperty(
717 "--sn-callout-accent",
718 s.borderLeftColor
719 );
720 }
721 });
722 }
723
724 /* ---------- Restore only values V7 itself changed ---------- */
725
Veronika Kocher 29.8 726 function saveOriginal(el,map,property){
727 if(map.has(el))return;
728
729 map.set(el,{
Veronika Kocher 29.9 730 value:
731 el.style.getPropertyValue(
732 property
733 ),
734 priority:
735 el.style.getPropertyPriority(
736 property
737 )
Veronika Kocher 29.8 738 });
739 }
740
741 function restoreOriginal(el,map,property){
742 var original=map.get(el);
743
744 if(original&&original.value){
745 el.style.setProperty(
746 property,
747 original.value,
748 original.priority||""
749 );
750 }else{
Veronika Kocher 29.9 751 el.style.removeProperty(
752 property
753 );
Veronika Kocher 29.8 754 }
755 }
756
Veronika Kocher 29.9 757 function resetRuntime(){
Veronika Kocher 29.8 758 heightManaged.forEach(function(el){
759 restoreOriginal(
760 el,
761 originalMinHeight,
762 "min-height"
763 );
764
765 el.removeAttribute(
766 "data-sn-equal-height-managed"
767 );
768 });
769
770 sectionManaged.forEach(function(el){
771 restoreOriginal(
772 el,
773 originalMarginTop,
774 "margin-top"
775 );
776
777 el.removeAttribute(
778 "data-sn-first-section-aligned"
779 );
780 });
781
Veronika Kocher 29.9 782 contentManaged.forEach(function(el){
783 restoreOriginal(
784 el,
785 originalMarginTop,
786 "margin-top"
787 );
788
789 el.removeAttribute(
790 "data-sn-first-content-aligned"
791 );
792 });
793
Veronika Kocher 29.8 794 heightManaged.clear();
795 sectionManaged.clear();
Veronika Kocher 29.9 796 contentManaged.clear();
Veronika Kocher 29.8 797 }
798
Veronika Kocher 29.9 799 /* ---------- Card detection ---------- */
800
801 function namedLikeBox(el){
802 var c=
803 typeof el.className==="string"
804 ? el.className
805 : "";
806
807 return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c);
808 }
809
810 function boxLike(el){
811 if(
812 !visible(el,MIN_W,MIN_H)||
813 excluded(el)
814 ){
815 return false;
816 }
817
818 var s=getComputedStyle(el);
819 var r=el.getBoundingClientRect();
820
821 var border=
822 num(s.borderTopWidth)+
823 num(s.borderRightWidth)+
824 num(s.borderBottomWidth)+
825 num(s.borderLeftWidth);
826
827 var radius=Math.max(
828 num(s.borderTopLeftRadius),
829 num(s.borderTopRightRadius),
830 num(s.borderBottomLeftRadius),
831 num(s.borderBottomRightRadius)
832 );
833
834 var bg=
835 s.backgroundColor&&
836 s.backgroundColor!=="rgba(0, 0, 0, 0)"&&
837 s.backgroundColor!=="transparent";
838
839 var shadow=
840 s.boxShadow&&
841 s.boxShadow!=="none";
842
843 return (
844 namedLikeBox(el)||
845 border>=1||
846 (bg&&radius>=3)||
847 (shadow&&r.width>=180)
848 );
849 }
850
Veronika Kocher 29.7 851 function pickTarget(child){
Veronika Kocher 29.8 852 if(!visible(child,MIN_W,MIN_H))return null;
Veronika Kocher 29.7 853
Veronika Kocher 29.9 854 if(boxLike(child))return child;
Veronika Kocher 29.8 855
Veronika Kocher 29.7 856 var cr=child.getBoundingClientRect();
857 var q=[];
Veronika Kocher 29.8 858
Veronika Kocher 29.7 859 Array.from(child.children||[]).forEach(function(el){
860 q.push({el:el,depth:1});
861 });
862
Veronika Kocher 29.8 863 var best=null;
864 var bestScore=-Infinity;
Veronika Kocher 29.7 865
866 while(q.length){
867 var item=q.shift();
868 var el=item.el;
869
Veronika Kocher 29.8 870 if(!visible(el,MIN_W,MIN_H))continue;
871
Veronika Kocher 29.7 872 var r=el.getBoundingClientRect();
873
Veronika Kocher 29.8 874 if(
875 r.width>=cr.width*.68&&
876 boxLike(el)
877 ){
878 var widthFit=
879 1-Math.min(
880 1,
881 Math.abs(cr.width-r.width)/
882 Math.max(1,cr.width)
883 );
884
885 var topFit=
886 1-Math.min(
887 1,
888 Math.abs(cr.top-r.top)/100
889 );
890
891 var score=
892 widthFit*6+
893 topFit*3+
894 Math.min(r.height,900)/450+
895 Math.min(r.width*r.height,900000)/900000;
896
Veronika Kocher 29.7 897 if(score>bestScore){
898 best=el;
899 bestScore=score;
900 }
901 }
902
Veronika Kocher 29.8 903 if(item.depth<SEARCH_DEPTH){
Veronika Kocher 29.7 904 Array.from(el.children||[]).forEach(function(next){
Veronika Kocher 29.8 905 q.push({
906 el:next,
907 depth:item.depth+1
908 });
Veronika Kocher 29.7 909 });
910 }
911 }
912
913 return best;
914 }
915
Veronika Kocher 29.9 916 function groupRows(entries){
Veronika Kocher 29.8 917 var groups=[];
918
919 entries
920 .slice()
921 .sort(function(a,b){
922 return (
923 a.rect.top-b.rect.top||
924 a.rect.left-b.rect.left
925 );
926 })
927 .forEach(function(entry){
928 var group=null;
929
930 for(var i=0;i<groups.length;i++){
931 if(
932 Math.abs(
933 groups[i].top-
934 entry.rect.top
935 )<=ROW_TOLERANCE
936 ){
937 group=groups[i];
938 break;
939 }
940 }
941
942 if(!group){
943 group={
944 top:entry.rect.top,
945 entries:[]
946 };
947 groups.push(group);
948 }
949
950 group.entries.push(entry);
951 });
952
953 return groups;
Veronika Kocher 29.7 954 }
955
Veronika Kocher 29.9 956 function validRow(group){
Veronika Kocher 29.8 957 if(group.entries.length<2)return false;
958
959 var lefts=
960 group.entries
961 .map(function(e){return e.rect.left;})
962 .sort(function(a,b){return a-b;});
963
964 if(
965 lefts[lefts.length-1]-
966 lefts[0]<
967 80
968 ){
969 return false;
Veronika Kocher 29.7 970 }
Veronika Kocher 29.8 971
972 var widths=
973 group.entries
974 .map(function(e){return e.rect.width;})
975 .filter(function(w){return w>0;});
976
977 if(widths.length<2)return false;
978
Veronika Kocher 29.9 979 var minW=
980 Math.min.apply(Math,widths);
Veronika Kocher 29.8 981
Veronika Kocher 29.9 982 var maxW=
983 Math.max.apply(Math,widths);
984
Veronika Kocher 29.8 985 return (
Veronika Kocher 29.9 986 maxW/
987 Math.max(1,minW)<=
Veronika Kocher 29.8 988 1.9
989 );
Veronika Kocher 29.7 990 }
991
Veronika Kocher 29.9 992 /* ---------- Known ARSN first section bars ---------- */
Veronika Kocher 29.8 993
Veronika Kocher 29.9 994 function knownBar(el){
995 var text=
996 normalizeText(
997 el.textContent
998 );
Veronika Kocher 29.8 999
1000 return (
1001 text==="HIER STARTEN"||
1002 text==="ORGANISIEREN & DOKUMENTIEREN"||
1003 text==="ENTSCHEIDEN"||
1004 text==="START HERE"||
1005 text==="GET STARTED"||
1006 text==="ORGANISE & DOCUMENT"||
1007 text==="ORGANIZE & DOCUMENT"||
1008 text==="DECIDE"
1009 );
1010 }
1011
Veronika Kocher 29.9 1012 function findKnownBar(card){
1013 var cardRect=
1014 card.getBoundingClientRect();
Veronika Kocher 29.8 1015
Veronika Kocher 29.9 1016 var rows=
1017 Array.from(
1018 card.querySelectorAll(
1019 "div,p,span,strong,h3,h4,h5,h6"
1020 )
Veronika Kocher 29.8 1021 )
Veronika Kocher 29.9 1022 .filter(function(el){
1023 if(!visible(el,20,6))return false;
1024 if(!knownBar(el))return false;
Veronika Kocher 29.8 1025
Veronika Kocher 29.9 1026 var r=el.getBoundingClientRect();
Veronika Kocher 29.8 1027
Veronika Kocher 29.9 1028 var rel=
1029 r.top-
1030 cardRect.top;
Veronika Kocher 29.8 1031
Veronika Kocher 29.9 1032 return (
1033 rel>=35&&
1034 rel<=
1035 cardRect.height*.75
1036 );
1037 })
1038 .sort(function(a,b){
1039 return (
1040 a.getBoundingClientRect().top-
1041 b.getBoundingClientRect().top
1042 );
1043 });
Veronika Kocher 29.8 1044
Veronika Kocher 29.9 1045 return rows[0]||null;
1046 }
Veronika Kocher 29.8 1047
Veronika Kocher 29.9 1048 function alignKnownBars(cards){
1049 var rows=
1050 cards.map(function(card){
1051 var bar=
1052 findKnownBar(card);
Veronika Kocher 29.8 1053
Veronika Kocher 29.9 1054 if(!bar)return null;
Veronika Kocher 29.8 1055
Veronika Kocher 29.9 1056 var cr=
1057 card.getBoundingClientRect();
Veronika Kocher 29.8 1058
Veronika Kocher 29.9 1059 var br=
1060 bar.getBoundingClientRect();
Veronika Kocher 29.8 1061
Veronika Kocher 29.9 1062 return {
1063 bar:bar,
1064 relativeTop:
1065 br.top-
1066 cr.top
1067 };
1068 });
Veronika Kocher 29.8 1069
Veronika Kocher 29.9 1070 if(
1071 rows.some(function(row){
1072 return !row;
1073 })
1074 ){
1075 return false;
1076 }
Veronika Kocher 29.8 1077
Veronika Kocher 29.9 1078 var target=
1079 Math.max.apply(
1080 Math,
1081 rows.map(function(row){
1082 return row.relativeTop;
1083 })
1084 );
Veronika Kocher 29.8 1085
Veronika Kocher 29.9 1086 rows.forEach(function(row){
1087 var delta=
1088 target-
1089 row.relativeTop;
Veronika Kocher 29.8 1090
Veronika Kocher 29.9 1091 if(delta<=1)return;
Veronika Kocher 29.8 1092
Veronika Kocher 29.9 1093 saveOriginal(
1094 row.bar,
1095 originalMarginTop,
1096 "margin-top"
1097 );
Veronika Kocher 29.8 1098
Veronika Kocher 29.9 1099 var current=
1100 num(
1101 getComputedStyle(
1102 row.bar
1103 ).marginTop
1104 );
Veronika Kocher 29.8 1105
Veronika Kocher 29.9 1106 row.bar.style.setProperty(
1107 "margin-top",
1108 (
1109 current+
1110 delta
1111 )+"px"
1112 );
1113
1114 row.bar.setAttribute(
1115 "data-sn-first-section-aligned",
1116 "7"
1117 );
1118
1119 sectionManaged.add(
1120 row.bar
1121 );
Veronika Kocher 29.8 1122 });
1123
Veronika Kocher 29.9 1124 return true;
1125 }
1126
1127 /* ---------- Generic first content after heading ---------- */
1128
1129 function heading(card){
1130 var cr=
1131 card.getBoundingClientRect();
1132
1133 var rows=
1134 Array.from(
1135 card.querySelectorAll(
1136 "h1,h2,h3,h4,h5,h6,.box-title,[role=heading]"
1137 )
1138 )
1139 .filter(function(el){
1140 if(!visible(el,20,8))return false;
1141
1142 var r=el.getBoundingClientRect();
1143
1144 var rel=
1145 r.top-
1146 cr.top;
1147
1148 return (
1149 rel>=0&&
1150 rel<=
1151 Math.min(
1152 160,
1153 cr.height*.45
1154 )
1155 );
1156 })
1157 .sort(function(a,b){
1158 return (
1159 a.getBoundingClientRect().top-
1160 b.getBoundingClientRect().top
1161 );
Veronika Kocher 29.8 1162 });
1163
Veronika Kocher 29.9 1164 return rows[0]||null;
1165 }
Veronika Kocher 29.8 1166
Veronika Kocher 29.9 1167 function firstContent(card,h){
1168 if(!h)return null;
1169
1170 var cr=
1171 card.getBoundingClientRect();
1172
1173 var hr=
1174 h.getBoundingClientRect();
1175
1176 var rows=
1177 Array.from(
1178 card.querySelectorAll(
1179 "p,div,ul,ol,dl,blockquote"
1180 )
1181 )
1182 .filter(function(el){
1183 if(
1184 el===h||
1185 h.contains(el)||
1186 el.contains(h)
1187 ){
1188 return false;
1189 }
1190
1191 if(!visible(el,30,8))return false;
1192
1193 var text=
1194 String(el.textContent||"")
1195 .replace(/\s+/g," ")
1196 .trim();
1197
1198 if(text.length<3)return false;
1199
1200 var r=el.getBoundingClientRect();
1201
1202 if(
1203 r.top<
1204 hr.bottom-1
1205 ){
1206 return false;
1207 }
1208
1209 if(
1210 r.top-cr.top>
1211 Math.min(
1212 280,
1213 cr.height*.65
1214 )
1215 ){
1216 return false;
1217 }
1218
1219 if(
1220 r.height>
1221 cr.height*.58
1222 ){
1223 return false;
1224 }
1225
1226 return true;
1227 })
1228 .sort(function(a,b){
1229 var ar=
1230 a.getBoundingClientRect();
1231
1232 var br=
1233 b.getBoundingClientRect();
1234
1235 return (
1236 ar.top-br.top||
1237 ar.height-br.height
1238 );
1239 });
1240
1241 return rows[0]||null;
Veronika Kocher 29.7 1242 }
1243
Veronika Kocher 29.9 1244 function alignGeneric(cards){
Veronika Kocher 29.8 1245 var rows=
1246 cards.map(function(card){
Veronika Kocher 29.9 1247 var h=
1248 heading(card);
Veronika Kocher 29.8 1249
Veronika Kocher 29.9 1250 var c=
1251 firstContent(
1252 card,
1253 h
1254 );
Veronika Kocher 29.8 1255
Veronika Kocher 29.9 1256 if(!h||!c)return null;
1257
1258 var cr=
Veronika Kocher 29.8 1259 card.getBoundingClientRect();
1260
Veronika Kocher 29.9 1261 var rr=
1262 c.getBoundingClientRect();
Veronika Kocher 29.8 1263
1264 return {
Veronika Kocher 29.9 1265 content:c,
Veronika Kocher 29.8 1266 relativeTop:
Veronika Kocher 29.9 1267 rr.top-cr.top
Veronika Kocher 29.8 1268 };
1269 });
1270
1271 if(
1272 rows.some(function(row){
1273 return !row;
1274 })
1275 ){
Veronika Kocher 29.9 1276 return false;
Veronika Kocher 29.8 1277 }
1278
Veronika Kocher 29.9 1279 var target=
Veronika Kocher 29.8 1280 Math.max.apply(
1281 Math,
1282 rows.map(function(row){
1283 return row.relativeTop;
1284 })
1285 );
1286
1287 rows.forEach(function(row){
1288 var delta=
Veronika Kocher 29.9 1289 target-
Veronika Kocher 29.8 1290 row.relativeTop;
1291
1292 if(delta<=1)return;
1293
1294 saveOriginal(
Veronika Kocher 29.9 1295 row.content,
Veronika Kocher 29.8 1296 originalMarginTop,
1297 "margin-top"
1298 );
1299
Veronika Kocher 29.9 1300 var current=
Veronika Kocher 29.8 1301 num(
1302 getComputedStyle(
Veronika Kocher 29.9 1303 row.content
Veronika Kocher 29.8 1304 ).marginTop
1305 );
1306
Veronika Kocher 29.9 1307 row.content.style.setProperty(
Veronika Kocher 29.8 1308 "margin-top",
1309 (
Veronika Kocher 29.9 1310 current+
Veronika Kocher 29.8 1311 delta
1312 )+"px"
1313 );
1314
Veronika Kocher 29.9 1315 row.content.setAttribute(
1316 "data-sn-first-content-aligned",
1317 "7"
Veronika Kocher 29.8 1318 );
1319
Veronika Kocher 29.9 1320 contentManaged.add(
1321 row.content
1322 );
Veronika Kocher 29.8 1323 });
1324
Veronika Kocher 29.9 1325 return true;
Veronika Kocher 29.8 1326 }
1327
Veronika Kocher 29.9 1328 function applyRow(group){
1329 if(!validRow(group))return false;
Veronika Kocher 29.8 1330
1331 var cards=[];
1332 var seen=new Set();
1333
1334 group.entries.forEach(function(entry){
1335 if(!seen.has(entry.target)){
1336 seen.add(entry.target);
1337 cards.push(entry.target);
1338 }
1339 });
1340
Veronika Kocher 29.9 1341 if(cards.length<2)return false;
Veronika Kocher 29.8 1342
Veronika Kocher 29.9 1343 if(
1344 !alignKnownBars(cards)
1345 ){
1346 alignGeneric(cards);
1347 }
Veronika Kocher 29.8 1348
1349 var maxHeight=0;
1350
1351 cards.forEach(function(card){
Veronika Kocher 29.9 1352 maxHeight=
1353 Math.max(
1354 maxHeight,
1355 card.getBoundingClientRect().height
1356 );
Veronika Kocher 29.8 1357 });
1358
Veronika Kocher 29.9 1359 maxHeight=
1360 Math.ceil(
1361 maxHeight
1362 );
Veronika Kocher 29.8 1363
Veronika Kocher 29.9 1364 if(maxHeight<MIN_H)return false;
Veronika Kocher 29.8 1365
1366 cards.forEach(function(card){
1367 saveOriginal(
1368 card,
1369 originalMinHeight,
1370 "min-height"
1371 );
1372
1373 card.style.setProperty(
1374 "min-height",
1375 maxHeight+"px"
1376 );
1377
1378 card.setAttribute(
1379 "data-sn-equal-height-managed",
Veronika Kocher 29.9 1380 "7"
Veronika Kocher 29.8 1381 );
1382
1383 heightManaged.add(card);
1384 });
1385
Veronika Kocher 29.9 1386 return true;
Veronika Kocher 29.8 1387 }
1388
Veronika Kocher 29.9 1389 function calculate(force){
1390 if(applying)return;
Veronika Kocher 29.7 1391
Veronika Kocher 29.9 1392 var width=
1393 Math.round(
1394 window.innerWidth
1395 );
1396
1397 var meaningful=
1398 lastWidth<0||
1399 Math.abs(
1400 width-
1401 lastWidth
1402 )>=
1403 MIN_WIDTH_CHANGE;
1404
Veronika Kocher 29.8 1405 if(
Veronika Kocher 29.9 1406 hasApplied&&
1407 !force&&
1408 !meaningful
Veronika Kocher 29.8 1409 ){
1410 return;
1411 }
Veronika Kocher 29.7 1412
Veronika Kocher 29.9 1413 applying=true;
Veronika Kocher 29.7 1414
Veronika Kocher 29.9 1415 try{
1416 harmoniseCustomCallouts();
Veronika Kocher 29.8 1417
Veronika Kocher 29.9 1418 if(width<=MOBILE_MAX){
1419 if(hasApplied){
1420 resetRuntime();
1421 }
Veronika Kocher 29.7 1422
Veronika Kocher 29.9 1423 hasApplied=false;
1424 lastWidth=width;
1425 return;
1426 }
Veronika Kocher 29.8 1427
Veronika Kocher 29.9 1428 if(hasApplied){
1429 resetRuntime();
1430 }
Veronika Kocher 29.8 1431
Veronika Kocher 29.9 1432 var parents=
1433 Array.from(
1434 root.querySelectorAll("*")
1435 )
1436 .filter(function(parent){
1437 return (
1438 visible(
1439 parent,
1440 MIN_W,
1441 MIN_H
1442 )&&
1443 parent.children&&
1444 parent.children.length>=2&&
1445 parent.children.length<=
1446 MAX_PARENT_CHILDREN
1447 );
Veronika Kocher 29.7 1448 });
1449
Veronika Kocher 29.9 1450 var touched=
1451 new Set();
Veronika Kocher 29.7 1452
Veronika Kocher 29.9 1453 parents.forEach(function(parent){
1454 var entries=[];
Veronika Kocher 29.7 1455
Veronika Kocher 29.9 1456 Array.from(
1457 parent.children
1458 ).forEach(function(child){
1459 if(
1460 !visible(
1461 child,
1462 MIN_W,
1463 MIN_H
1464 )
1465 ){
1466 return;
1467 }
1468
1469 var target=
1470 pickTarget(child);
1471
1472 if(!target)return;
1473
1474 entries.push({
1475 target:target,
1476 rect:
1477 target.getBoundingClientRect()
Veronika Kocher 29.8 1478 });
Veronika Kocher 29.9 1479 });
Veronika Kocher 29.7 1480
Veronika Kocher 29.9 1481 groupRows(
1482 entries
1483 ).forEach(function(group){
1484 if(!validRow(group))return;
Veronika Kocher 29.7 1485
Veronika Kocher 29.9 1486 var targets=
1487 group.entries.map(function(entry){
1488 return entry.target;
1489 });
Veronika Kocher 29.7 1490
Veronika Kocher 29.9 1491 if(
1492 !targets.some(function(el){
1493 return !touched.has(el);
1494 })
1495 ){
1496 return;
1497 }
1498
1499 if(applyRow(group)){
1500 targets.forEach(function(el){
1501 touched.add(el);
1502 });
1503 }
1504 });
Veronika Kocher 29.7 1505 });
Veronika Kocher 29.9 1506
1507 lastWidth=width;
1508 hasApplied=true;
1509 }finally{
1510 applying=false;
1511 }
Veronika Kocher 29.7 1512 }
1513
Veronika Kocher 29.9 1514 function resize(){
1515 if(resizeTimer){
1516 clearTimeout(
1517 resizeTimer
1518 );
1519 }
Veronika Kocher 29.8 1520
Veronika Kocher 29.9 1521 resizeTimer=
1522 setTimeout(
1523 function(){
1524 resizeTimer=0;
1525 calculate(false);
1526 },
1527 RESIZE_DEBOUNCE
1528 );
Veronika Kocher 29.7 1529 }
1530
Veronika Kocher 29.9 1531 function waitImages(){
1532 var images=
1533 Array.from(
1534 root.querySelectorAll("img")
1535 );
Veronika Kocher 29.7 1536
Veronika Kocher 29.9 1537 return Promise.all(
1538 images.map(function(img){
1539 if(img.complete){
1540 return Promise.resolve();
1541 }
Veronika Kocher 29.7 1542
Veronika Kocher 29.9 1543 return new Promise(function(resolve){
1544 var done=function(){
1545 resolve();
1546 };
1547
1548 img.addEventListener(
1549 "load",
1550 done,
1551 {once:true}
1552 );
1553
1554 img.addEventListener(
1555 "error",
1556 done,
1557 {once:true}
1558 );
1559 });
1560 })
1561 );
1562 }
1563
1564 async function initial(){
1565 if(
1566 document.readyState!==
1567 "complete"
1568 ){
1569 await new Promise(function(resolve){
1570 addEventListener(
1571 "load",
1572 resolve,
1573 {once:true}
1574 );
1575 });
Veronika Kocher 29.8 1576 }
1577
Veronika Kocher 29.9 1578 if(
1579 document.fonts&&
1580 document.fonts.ready
1581 ){
1582 try{
1583 await document.fonts.ready;
1584 }catch(error){}
1585 }
1586
1587 await waitImages();
1588
1589 // Exactly one initial layout calculation.
1590 calculate(true);
Veronika Kocher 29.7 1591 }
1592
Veronika Kocher 29.9 1593 addEventListener(
1594 "resize",
1595 resize,
1596 {passive:true}
1597 );
1598
1599 initial();
Veronika Kocher 29.7 1600 })();
1601 </script>
Veronika Kocher 29.9 1602
Veronika Kocher 29.7 1603 <!-- SN_HORIZONTAL_BOX_HARMONIZER_END -->
Veronika Kocher 29.9 1604 {{/html}}\n