Wiki source code of Prepare

Version 30.4 by Veronika Kocher on Friday, 04 Sep 2026 14:45

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