Changes for page Plan Your Data Management
Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45
From version 4.6
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 13:27
on Wednesday, 02 Sep 2026 13:27
Change comment:
There is no comment for this version
To version 4.10
edited by Veronika Kocher
on Thursday, 03 Sep 2026 10:09
on Thursday, 03 Sep 2026 10:09
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -38,6 +38,18 @@ 38 38 39 39 <div class="dmp-store" style="margin-bottom:28px"><strong>Start from your material inventory.</strong> If you have not yet mapped the data, materials, documentation and outputs your project will create, collect or reuse, begin with <a 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/">Identify Your Data & Research Outputs</a>.</div> 40 40 41 +<!-- ARSN_DMP_TOOL_COMING_SOON_V1 --> 42 +<section id="dmp-tool-coming-soon" class="dmp-card" style="margin-bottom:28px;overflow:hidden;border-left:6px solid #21b6d7;"> 43 +<div style="padding:17px 20px 18px"> 44 +<div class="dmp-eye" style="color:#3f6871;margin-bottom:5px">DMP TOOL <span style="display:inline-block;margin-left:6px;padding:3px 7px;border-radius:12px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:10px;letter-spacing:.06em;vertical-align:1px">COMING SOON</span></div> 45 +<h3 style="font-size:21px;margin:0 0 7px;color:#35312d">Interactive Art & Research DMP Tool</h3> 46 +<p style="margin:0 0 11px;color:#625d56;line-height:1.55;max-width:1050px">A local form will connect the eleven core DMP questions with funder-specific requirements and export DMPs as PDF, JSON, YAML and Markdown. Funder profiles are maintained separately from the tool so that FWF, Horizon Europe, ERC or FFG requirements can be updated without reprogramming the form.</p> 47 +<a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Plan%20Your%20Data%20Management/DMP%20Tool/" aria-disabled="true" onclick="return false;" style="display:inline-block;padding:8px 11px;border:1px solid #c7e5ed;border-radius:6px;background:#f4fbfc;color:#3f6871;text-decoration:none;font-weight:700;cursor:not-allowed">Open DMP Tool ↗</a> 48 +<span style="display:inline-block;margin-left:8px;color:#8a4d36;font-size:12px;font-weight:700">COMING SOON</span> 49 +</div> 50 +</section> 51 +<!-- ARSN_DMP_TOOL_COMING_SOON_END --> 52 + 41 41 <section class="dmp-sec"> 42 42 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">STEP 1 · DEFINE THE SCOPE</div> 43 43 <h3>Decide what your DMP needs to cover</h3> ... ... @@ -129,28 +129,50 @@ 129 129 </section> 130 130 131 131 <section class="dmp-sec"> 144 +<!-- ARSN_DMP_FUNDER_LINKS_SPECIFIC_V2 --> 132 132 <div class="dmp-eye" style="color:#8a4d36;margin-bottom:4px">FUNDER REQUIREMENTS</div> 133 -<h3> Usethefunder’scurrent template and deadlineswhere oneis required</h3>134 -<p>Your internal working DMP can be broader than a funder template ,buta funded projectmuststill satisfytheapplicableprogrammerules. Alwayscheckthecurrentcall,grantagreement andfunderguidance.</p>146 +<h3>Work from the actual template, call and binding project conditions</h3> 147 +<p>Your internal working DMP can be broader than the formal funder template. For a funded project, however, the current DMP template, the specific call or call guide, the funding agreement or Grant Agreement and the deadlines stated there are decisive. The links below therefore point directly to DMP-relevant documents or document areas.</p> 135 135 136 136 <div class="dmp-grid"> 137 137 <div class="dmp-box" style="border-top:4px solid #e94b13"> 138 138 <h4>FWF</h4> 139 -<p>The FWF requires a Data Management Plan for projects approved under the relevant guidelines since 1 January 2019. The DMP is submitted with the funding agreement, is required for project start, should be maintained as a living document and the final version is submitted with the final project report.</p> 140 -<p style="margin-top:9px"><a href="https://www.fwf.ac.at/en/about-us/tasks-and-activities/open-science/research-data-management" target="_blank" rel="noopener"><strong>FWF Research Data Management & DMP guidance ↗</strong></a></p> 152 +<p>For the relevant approved FWF projects, the DMP is required for project start, is submitted with the funding agreement, uses the same language as the proposal, is versioned throughout the project and is submitted in its final version with the final project report.</p> 153 +<ul style="margin:10px 0 0 18px;padding:0;line-height:1.55"> 154 +<li><a href="https://www.fwf.ac.at/fileadmin/Website/Dokumente/Ueber_uns/Aufgaben_und_Aktivitaeten/Open_Science/fwf_dmp_guidelines_template.docx" target="_blank" rel="noopener"><strong>DMP – Guidelines and template (EN, DOCX) ↗</strong></a></li> 155 +<li><a href="https://www.fwf.ac.at/fileadmin/Website/Dokumente/Ueber_uns/Aufgaben_und_Aktivitaeten/Open_Science/fwf_dmp_evaluierungsmatrix.pdf" target="_blank" rel="noopener">DMP evaluation matrix (PDF) ↗</a></li> 156 +<li><a href="https://www.fwf.ac.at/en/about-us/what-we-do/open-science/open-access-policy/open-access-policy-for-research-data" target="_blank" rel="noopener">Open-Access Policy for Research Data ↗</a></li> 157 +<li><a href="https://www.fwf.ac.at/en/about-us/what-we-do/open-science/research-data-management" target="_blank" rel="noopener">Research Data Management – workflow, funding & contact ↗</a></li> 158 +</ul> 141 141 </div> 142 142 143 143 <div class="dmp-box" style="border-top:4px solid #21b6d7"> 144 144 <h4>Horizon Europe</h4> 145 -<p>Horizon Europe projects that generate or reuse research data are expected to establish a detailed DMP; programme guidance normally places the first DMP deliverable at month 6, with updates as the project develops and towards project end.</p> 146 -<p style="margin-top:9px"><a href="https://ec.europa.eu/info/funding-tenders/opportunities/docs/2021-2027/horizon/guidance/programme-guide_horizon_en.pdf" target="_blank" rel="noopener"><strong>Horizon Europe Programme Guide ↗</strong></a></p> 163 +<p>Research Data Management is a mandatory Open Science practice for projects generating or reusing research data. The detailed DMP is normally a deliverable by month 6 and is maintained as a living document.</p> 164 +<ul style="margin:10px 0 0 18px;padding:0;line-height:1.55"> 165 +<li><a href="https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/how-to-participate/reference-documents;programCode=HORIZON" target="_blank" rel="noopener"><strong>DMP Reporting Template – Funding & Tenders Reference Documents ↗</strong></a><br><small>Under “Templates & Forms” → “Project reporting templates”.</small></li> 166 +<li><a href="https://ec.europa.eu/info/funding-tenders/opportunities/docs/2021-2027/common/guidance/aga_en.pdf" target="_blank" rel="noopener">Annotated Grant Agreement – DMP and Open Science obligations ↗</a></li> 167 +<li><a href="https://rea.ec.europa.eu/open-science_en" target="_blank" rel="noopener">REA Open Science Q&A – DMP, repositories & access restrictions ↗</a></li> 168 +<li><a href="https://ec.europa.eu/info/funding-tenders/opportunities/docs/2021-2027/horizon/guidance/programme-guide_horizon_en.pdf" target="_blank" rel="noopener">Horizon Europe Programme Guide – Open Science / RDM ↗</a></li> 169 +</ul> 147 147 </div> 148 148 172 +<div class="dmp-box" style="border-top:4px solid #21b6d7"> 173 +<h4>ERC · Horizon Europe</h4> 174 +<p>Horizon Europe-funded ERC projects include Research Data Management as a work package. The DMP is due no later than the end of project month 6; the ERC guidance also addresses dissemination level, FAIR, resources and data security.</p> 175 +<p style="margin-top:9px"><a href="https://erc.europa.eu/manage-your-project/open-science" target="_blank" rel="noopener"><strong>ERC – Open Science in ERC Projects: RDM work package, DMP deadline & template ↗</strong></a></p> 176 +</div> 177 + 149 149 <div class="dmp-box" style="border-top:4px solid #f0aa00"> 150 -<h4>Other funders / partners</h4> 151 -<p>Do not reuse an old DMP blindly. Check whether the current programme specifies a template, mandatory questions, repository expectations, open-access rules, review dates, eligible costs or reporting obligations.</p> 179 +<h4>FFG · always check the specific call</h4> 180 +<p>For FFG funding, DMP rules are call- and instrument-specific. Record the URL of the actual call, the version/date of the guide and whether a DMP is mandatory at submission, mandatory during the project/reporting, recommended or not required.</p> 181 +<p style="margin-top:9px"><a href="https://www.ffg.at/content/ausschreibungsdokumente-der-basisprogramme" target="_blank" rel="noopener"><strong>FFG – current Basisprogramme call documents 2025/26 ↗</strong></a></p> 182 +<p style="margin-top:8px;color:#6a655e;font-size:13px">For other FFG programmes, always use the current programme/call page and the guide linked there.</p> 152 152 </div> 153 153 </div> 185 + 186 +<div class="dmp-info" style="margin-top:14px"><strong>Other funders / partners:</strong> Do not record only the funder name. Store the <strong>exact URL of the binding requirement or template, its version/date and deadline</strong> in the DMP. For questions about the internal funding route or how funder requirements apply at the Angewandte: <a href="https://www.dieangewandte.at/universitaet/organisation/planung_service_und_verwaltung/support_kunst_und_forschung" target="_blank" rel="noopener">Support Kunst und Forschung ↗</a>.</div> 187 +<!-- ARSN_DMP_FUNDER_LINKS_SPECIFIC_END --> 154 154 </section> 155 155 156 156 <section class="dmp-sec"> ... ... @@ -223,3 +223,1120 @@ 223 223 </div> 224 224 {{/html}} 225 225 260 +\n\n 261 +\n\n{{html clean="false"}} 262 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_START --> 263 + 264 +<style data-sn-horizontal-box-harmonizer="7"> 265 +/* ---------- Typography: never justify headings ---------- */ 266 +#xwikicontent h1, 267 +#xwikicontent h2, 268 +#xwikicontent h3, 269 +#xwikicontent h4, 270 +#xwikicontent h5, 271 +#xwikicontent h6, 272 +#xwikicontent .box-title, 273 +#xwikicontent [role="heading"], 274 +#xwikicontent h1 a, 275 +#xwikicontent h2 a, 276 +#xwikicontent h3 a, 277 +#xwikicontent h4 a, 278 +#xwikicontent h5 a, 279 +#xwikicontent h6 a, 280 +#xwikicontent .box-title a, 281 +#xwikicontent [role="heading"] a{ 282 + text-align:left!important; 283 + text-justify:auto!important; 284 + word-spacing:normal!important; 285 +} 286 + 287 +/* ---------- Native XWiki semantic callouts ---------- */ 288 +#xwikicontent .box.infomessage, 289 +#xwikicontent .infomessage, 290 +#xwikicontent .box.warningmessage, 291 +#xwikicontent .warningmessage, 292 +#xwikicontent .box.successmessage, 293 +#xwikicontent .successmessage, 294 +#xwikicontent .box.errormessage, 295 +#xwikicontent .errormessage, 296 +#xwikicontent [data-sn-callout-harmonized="1"]{ 297 + box-sizing:border-box!important; 298 + border-radius:8px!important; 299 + border-top:1px solid rgba(0,0,0,.08)!important; 300 + border-right:1px solid rgba(0,0,0,.08)!important; 301 + border-bottom:1px solid rgba(0,0,0,.08)!important; 302 + border-left:4px solid var(--sn-callout-accent,#21b6d7)!important; 303 + padding:14px 16px!important; 304 + text-align:left!important; 305 + text-justify:auto!important; 306 + word-spacing:normal!important; 307 + box-shadow:none!important; 308 +} 309 + 310 +#xwikicontent .box.infomessage, 311 +#xwikicontent .infomessage{ 312 + --sn-callout-accent:#21b6d7; 313 + background:#eaf7fb!important; 314 +} 315 + 316 +#xwikicontent .box.warningmessage, 317 +#xwikicontent .warningmessage{ 318 + --sn-callout-accent:#f0aa00; 319 + background:#fff8e7!important; 320 +} 321 + 322 +#xwikicontent .box.successmessage, 323 +#xwikicontent .successmessage{ 324 + --sn-callout-accent:#38b76a; 325 + background:#edf9f1!important; 326 +} 327 + 328 +#xwikicontent .box.errormessage, 329 +#xwikicontent .errormessage{ 330 + --sn-callout-accent:#e94b13; 331 + background:#fff1ec!important; 332 +} 333 + 334 +#xwikicontent [data-sn-callout-harmonized="1"] > :first-child, 335 +#xwikicontent .infomessage > :first-child, 336 +#xwikicontent .warningmessage > :first-child, 337 +#xwikicontent .successmessage > :first-child, 338 +#xwikicontent .errormessage > :first-child{ 339 + margin-top:0!important; 340 +} 341 + 342 +#xwikicontent [data-sn-callout-harmonized="1"] > :last-child, 343 +#xwikicontent .infomessage > :last-child, 344 +#xwikicontent .warningmessage > :last-child, 345 +#xwikicontent .successmessage > :last-child, 346 +#xwikicontent .errormessage > :last-child{ 347 + margin-bottom:0!important; 348 +} 349 + 350 +#xwikicontent [data-sn-equal-height-managed], 351 +#xwikicontent [data-sn-first-section-aligned], 352 +#xwikicontent [data-sn-first-content-aligned]{ 353 + box-sizing:border-box; 354 +} 355 +</style> 356 + 357 +<script data-sn-horizontal-box-harmonizer="7"> 358 +(function(){ 359 + "use strict"; 360 + 361 + var MOBILE_MAX=767; 362 + var ROW_TOLERANCE=6; 363 + var MIN_W=150; 364 + var MIN_H=36; 365 + var MAX_PARENT_CHILDREN=18; 366 + var SEARCH_DEPTH=5; 367 + var RESIZE_DEBOUNCE=220; 368 + var MIN_WIDTH_CHANGE=2; 369 + 370 + var root= 371 + document.getElementById("xwikicontent")|| 372 + document.querySelector(".xwiki-rendering-content")|| 373 + document.querySelector("main")|| 374 + document.body; 375 + 376 + if(!root)return; 377 + 378 + var heightManaged=new Set(); 379 + var sectionManaged=new Set(); 380 + var contentManaged=new Set(); 381 + 382 + var originalMinHeight=new WeakMap(); 383 + var originalMarginTop=new WeakMap(); 384 + 385 + var resizeTimer=0; 386 + var lastWidth=-1; 387 + var hasApplied=false; 388 + var applying=false; 389 + 390 + function num(v){ 391 + var n=parseFloat(v); 392 + return Number.isFinite(n)?n:0; 393 + } 394 + 395 + function visible(el,minW,minH){ 396 + if(!el||el.nodeType!==1)return false; 397 + 398 + var s=getComputedStyle(el); 399 + 400 + if( 401 + s.display==="none"|| 402 + s.visibility==="hidden"|| 403 + Number(s.opacity)===0 404 + ){ 405 + return false; 406 + } 407 + 408 + var r=el.getBoundingClientRect(); 409 + 410 + return ( 411 + r.width>=(minW||1)&& 412 + r.height>=(minH||1) 413 + ); 414 + } 415 + 416 + function normalizeText(text){ 417 + return String(text||"") 418 + .replace(/\s+/g," ") 419 + .trim() 420 + .toUpperCase(); 421 + } 422 + 423 + function excluded(el){ 424 + return ( 425 + !el.matches|| 426 + el.matches( 427 + "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]" 428 + ) 429 + ); 430 + } 431 + 432 + /* ---------- Custom coloured callouts ---------- */ 433 + 434 + function nativeCallout(el){ 435 + var c= 436 + typeof el.className==="string" 437 + ? el.className.toLowerCase() 438 + : ""; 439 + 440 + return ( 441 + /(^|\s)(infomessage|warningmessage|successmessage|errormessage)(\s|$)/.test(c) 442 + ); 443 + } 444 + 445 + function customCallout(el){ 446 + if(!visible(el,220,42)||excluded(el))return false; 447 + 448 + var r=el.getBoundingClientRect(); 449 + 450 + if(r.height>520)return false; 451 + 452 + var s=getComputedStyle(el); 453 + 454 + var bg= 455 + s.backgroundColor&& 456 + s.backgroundColor!=="rgba(0, 0, 0, 0)"&& 457 + s.backgroundColor!=="transparent"&& 458 + s.backgroundColor!=="rgb(255, 255, 255)"; 459 + 460 + var left= 461 + num(s.borderLeftWidth); 462 + 463 + return ( 464 + bg&& 465 + left>=2 466 + ); 467 + } 468 + 469 + function harmoniseCustomCallouts(){ 470 + Array.from( 471 + root.querySelectorAll( 472 + "div,aside,section" 473 + ) 474 + ).forEach(function(el){ 475 + if(nativeCallout(el))return; 476 + if(!customCallout(el))return; 477 + 478 + var s=getComputedStyle(el); 479 + 480 + el.setAttribute( 481 + "data-sn-callout-harmonized", 482 + "1" 483 + ); 484 + 485 + if( 486 + s.borderLeftColor 487 + ){ 488 + el.style.setProperty( 489 + "--sn-callout-accent", 490 + s.borderLeftColor 491 + ); 492 + } 493 + }); 494 + } 495 + 496 + /* ---------- Restore only values V7 itself changed ---------- */ 497 + 498 + function saveOriginal(el,map,property){ 499 + if(map.has(el))return; 500 + 501 + map.set(el,{ 502 + value: 503 + el.style.getPropertyValue( 504 + property 505 + ), 506 + priority: 507 + el.style.getPropertyPriority( 508 + property 509 + ) 510 + }); 511 + } 512 + 513 + function restoreOriginal(el,map,property){ 514 + var original=map.get(el); 515 + 516 + if(original&&original.value){ 517 + el.style.setProperty( 518 + property, 519 + original.value, 520 + original.priority||"" 521 + ); 522 + }else{ 523 + el.style.removeProperty( 524 + property 525 + ); 526 + } 527 + } 528 + 529 + function resetRuntime(){ 530 + heightManaged.forEach(function(el){ 531 + restoreOriginal( 532 + el, 533 + originalMinHeight, 534 + "min-height" 535 + ); 536 + 537 + el.removeAttribute( 538 + "data-sn-equal-height-managed" 539 + ); 540 + }); 541 + 542 + sectionManaged.forEach(function(el){ 543 + restoreOriginal( 544 + el, 545 + originalMarginTop, 546 + "margin-top" 547 + ); 548 + 549 + el.removeAttribute( 550 + "data-sn-first-section-aligned" 551 + ); 552 + }); 553 + 554 + contentManaged.forEach(function(el){ 555 + restoreOriginal( 556 + el, 557 + originalMarginTop, 558 + "margin-top" 559 + ); 560 + 561 + el.removeAttribute( 562 + "data-sn-first-content-aligned" 563 + ); 564 + }); 565 + 566 + heightManaged.clear(); 567 + sectionManaged.clear(); 568 + contentManaged.clear(); 569 + } 570 + 571 + /* ---------- Card detection ---------- */ 572 + 573 + function namedLikeBox(el){ 574 + var c= 575 + typeof el.className==="string" 576 + ? el.className 577 + : ""; 578 + 579 + return /(^|[\s_-])(box|card|tile|panel|role|check|service|source|call|area|detail|resource|topic|warn|info)([\s_-]|$)/i.test(c); 580 + } 581 + 582 + function boxLike(el){ 583 + if( 584 + !visible(el,MIN_W,MIN_H)|| 585 + excluded(el) 586 + ){ 587 + return false; 588 + } 589 + 590 + var s=getComputedStyle(el); 591 + var r=el.getBoundingClientRect(); 592 + 593 + var border= 594 + num(s.borderTopWidth)+ 595 + num(s.borderRightWidth)+ 596 + num(s.borderBottomWidth)+ 597 + num(s.borderLeftWidth); 598 + 599 + var radius=Math.max( 600 + num(s.borderTopLeftRadius), 601 + num(s.borderTopRightRadius), 602 + num(s.borderBottomLeftRadius), 603 + num(s.borderBottomRightRadius) 604 + ); 605 + 606 + var bg= 607 + s.backgroundColor&& 608 + s.backgroundColor!=="rgba(0, 0, 0, 0)"&& 609 + s.backgroundColor!=="transparent"; 610 + 611 + var shadow= 612 + s.boxShadow&& 613 + s.boxShadow!=="none"; 614 + 615 + return ( 616 + namedLikeBox(el)|| 617 + border>=1|| 618 + (bg&&radius>=3)|| 619 + (shadow&&r.width>=180) 620 + ); 621 + } 622 + 623 + function pickTarget(child){ 624 + if(!visible(child,MIN_W,MIN_H))return null; 625 + 626 + if(boxLike(child))return child; 627 + 628 + var cr=child.getBoundingClientRect(); 629 + var q=[]; 630 + 631 + Array.from(child.children||[]).forEach(function(el){ 632 + q.push({el:el,depth:1}); 633 + }); 634 + 635 + var best=null; 636 + var bestScore=-Infinity; 637 + 638 + while(q.length){ 639 + var item=q.shift(); 640 + var el=item.el; 641 + 642 + if(!visible(el,MIN_W,MIN_H))continue; 643 + 644 + var r=el.getBoundingClientRect(); 645 + 646 + if( 647 + r.width>=cr.width*.68&& 648 + boxLike(el) 649 + ){ 650 + var widthFit= 651 + 1-Math.min( 652 + 1, 653 + Math.abs(cr.width-r.width)/ 654 + Math.max(1,cr.width) 655 + ); 656 + 657 + var topFit= 658 + 1-Math.min( 659 + 1, 660 + Math.abs(cr.top-r.top)/100 661 + ); 662 + 663 + var score= 664 + widthFit*6+ 665 + topFit*3+ 666 + Math.min(r.height,900)/450+ 667 + Math.min(r.width*r.height,900000)/900000; 668 + 669 + if(score>bestScore){ 670 + best=el; 671 + bestScore=score; 672 + } 673 + } 674 + 675 + if(item.depth<SEARCH_DEPTH){ 676 + Array.from(el.children||[]).forEach(function(next){ 677 + q.push({ 678 + el:next, 679 + depth:item.depth+1 680 + }); 681 + }); 682 + } 683 + } 684 + 685 + return best; 686 + } 687 + 688 + function groupRows(entries){ 689 + var groups=[]; 690 + 691 + entries 692 + .slice() 693 + .sort(function(a,b){ 694 + return ( 695 + a.rect.top-b.rect.top|| 696 + a.rect.left-b.rect.left 697 + ); 698 + }) 699 + .forEach(function(entry){ 700 + var group=null; 701 + 702 + for(var i=0;i<groups.length;i++){ 703 + if( 704 + Math.abs( 705 + groups[i].top- 706 + entry.rect.top 707 + )<=ROW_TOLERANCE 708 + ){ 709 + group=groups[i]; 710 + break; 711 + } 712 + } 713 + 714 + if(!group){ 715 + group={ 716 + top:entry.rect.top, 717 + entries:[] 718 + }; 719 + groups.push(group); 720 + } 721 + 722 + group.entries.push(entry); 723 + }); 724 + 725 + return groups; 726 + } 727 + 728 + function validRow(group){ 729 + if(group.entries.length<2)return false; 730 + 731 + var lefts= 732 + group.entries 733 + .map(function(e){return e.rect.left;}) 734 + .sort(function(a,b){return a-b;}); 735 + 736 + if( 737 + lefts[lefts.length-1]- 738 + lefts[0]< 739 + 80 740 + ){ 741 + return false; 742 + } 743 + 744 + var widths= 745 + group.entries 746 + .map(function(e){return e.rect.width;}) 747 + .filter(function(w){return w>0;}); 748 + 749 + if(widths.length<2)return false; 750 + 751 + var minW= 752 + Math.min.apply(Math,widths); 753 + 754 + var maxW= 755 + Math.max.apply(Math,widths); 756 + 757 + return ( 758 + maxW/ 759 + Math.max(1,minW)<= 760 + 1.9 761 + ); 762 + } 763 + 764 + /* ---------- Known ARSN first section bars ---------- */ 765 + 766 + function knownBar(el){ 767 + var text= 768 + normalizeText( 769 + el.textContent 770 + ); 771 + 772 + return ( 773 + text==="HIER STARTEN"|| 774 + text==="ORGANISIEREN & DOKUMENTIEREN"|| 775 + text==="ENTSCHEIDEN"|| 776 + text==="START HERE"|| 777 + text==="GET STARTED"|| 778 + text==="ORGANISE & DOCUMENT"|| 779 + text==="ORGANIZE & DOCUMENT"|| 780 + text==="DECIDE" 781 + ); 782 + } 783 + 784 + function findKnownBar(card){ 785 + var cardRect= 786 + card.getBoundingClientRect(); 787 + 788 + var rows= 789 + Array.from( 790 + card.querySelectorAll( 791 + "div,p,span,strong,h3,h4,h5,h6" 792 + ) 793 + ) 794 + .filter(function(el){ 795 + if(!visible(el,20,6))return false; 796 + if(!knownBar(el))return false; 797 + 798 + var r=el.getBoundingClientRect(); 799 + 800 + var rel= 801 + r.top- 802 + cardRect.top; 803 + 804 + return ( 805 + rel>=35&& 806 + rel<= 807 + cardRect.height*.75 808 + ); 809 + }) 810 + .sort(function(a,b){ 811 + return ( 812 + a.getBoundingClientRect().top- 813 + b.getBoundingClientRect().top 814 + ); 815 + }); 816 + 817 + return rows[0]||null; 818 + } 819 + 820 + function alignKnownBars(cards){ 821 + var rows= 822 + cards.map(function(card){ 823 + var bar= 824 + findKnownBar(card); 825 + 826 + if(!bar)return null; 827 + 828 + var cr= 829 + card.getBoundingClientRect(); 830 + 831 + var br= 832 + bar.getBoundingClientRect(); 833 + 834 + return { 835 + bar:bar, 836 + relativeTop: 837 + br.top- 838 + cr.top 839 + }; 840 + }); 841 + 842 + if( 843 + rows.some(function(row){ 844 + return !row; 845 + }) 846 + ){ 847 + return false; 848 + } 849 + 850 + var target= 851 + Math.max.apply( 852 + Math, 853 + rows.map(function(row){ 854 + return row.relativeTop; 855 + }) 856 + ); 857 + 858 + rows.forEach(function(row){ 859 + var delta= 860 + target- 861 + row.relativeTop; 862 + 863 + if(delta<=1)return; 864 + 865 + saveOriginal( 866 + row.bar, 867 + originalMarginTop, 868 + "margin-top" 869 + ); 870 + 871 + var current= 872 + num( 873 + getComputedStyle( 874 + row.bar 875 + ).marginTop 876 + ); 877 + 878 + row.bar.style.setProperty( 879 + "margin-top", 880 + ( 881 + current+ 882 + delta 883 + )+"px" 884 + ); 885 + 886 + row.bar.setAttribute( 887 + "data-sn-first-section-aligned", 888 + "7" 889 + ); 890 + 891 + sectionManaged.add( 892 + row.bar 893 + ); 894 + }); 895 + 896 + return true; 897 + } 898 + 899 + /* ---------- Generic first content after heading ---------- */ 900 + 901 + function heading(card){ 902 + var cr= 903 + card.getBoundingClientRect(); 904 + 905 + var rows= 906 + Array.from( 907 + card.querySelectorAll( 908 + "h1,h2,h3,h4,h5,h6,.box-title,[role=heading]" 909 + ) 910 + ) 911 + .filter(function(el){ 912 + if(!visible(el,20,8))return false; 913 + 914 + var r=el.getBoundingClientRect(); 915 + 916 + var rel= 917 + r.top- 918 + cr.top; 919 + 920 + return ( 921 + rel>=0&& 922 + rel<= 923 + Math.min( 924 + 160, 925 + cr.height*.45 926 + ) 927 + ); 928 + }) 929 + .sort(function(a,b){ 930 + return ( 931 + a.getBoundingClientRect().top- 932 + b.getBoundingClientRect().top 933 + ); 934 + }); 935 + 936 + return rows[0]||null; 937 + } 938 + 939 + function firstContent(card,h){ 940 + if(!h)return null; 941 + 942 + var cr= 943 + card.getBoundingClientRect(); 944 + 945 + var hr= 946 + h.getBoundingClientRect(); 947 + 948 + var rows= 949 + Array.from( 950 + card.querySelectorAll( 951 + "p,div,ul,ol,dl,blockquote" 952 + ) 953 + ) 954 + .filter(function(el){ 955 + if( 956 + el===h|| 957 + h.contains(el)|| 958 + el.contains(h) 959 + ){ 960 + return false; 961 + } 962 + 963 + if(!visible(el,30,8))return false; 964 + 965 + var text= 966 + String(el.textContent||"") 967 + .replace(/\s+/g," ") 968 + .trim(); 969 + 970 + if(text.length<3)return false; 971 + 972 + var r=el.getBoundingClientRect(); 973 + 974 + if( 975 + r.top< 976 + hr.bottom-1 977 + ){ 978 + return false; 979 + } 980 + 981 + if( 982 + r.top-cr.top> 983 + Math.min( 984 + 280, 985 + cr.height*.65 986 + ) 987 + ){ 988 + return false; 989 + } 990 + 991 + if( 992 + r.height> 993 + cr.height*.58 994 + ){ 995 + return false; 996 + } 997 + 998 + return true; 999 + }) 1000 + .sort(function(a,b){ 1001 + var ar= 1002 + a.getBoundingClientRect(); 1003 + 1004 + var br= 1005 + b.getBoundingClientRect(); 1006 + 1007 + return ( 1008 + ar.top-br.top|| 1009 + ar.height-br.height 1010 + ); 1011 + }); 1012 + 1013 + return rows[0]||null; 1014 + } 1015 + 1016 + function alignGeneric(cards){ 1017 + var rows= 1018 + cards.map(function(card){ 1019 + var h= 1020 + heading(card); 1021 + 1022 + var c= 1023 + firstContent( 1024 + card, 1025 + h 1026 + ); 1027 + 1028 + if(!h||!c)return null; 1029 + 1030 + var cr= 1031 + card.getBoundingClientRect(); 1032 + 1033 + var rr= 1034 + c.getBoundingClientRect(); 1035 + 1036 + return { 1037 + content:c, 1038 + relativeTop: 1039 + rr.top-cr.top 1040 + }; 1041 + }); 1042 + 1043 + if( 1044 + rows.some(function(row){ 1045 + return !row; 1046 + }) 1047 + ){ 1048 + return false; 1049 + } 1050 + 1051 + var target= 1052 + Math.max.apply( 1053 + Math, 1054 + rows.map(function(row){ 1055 + return row.relativeTop; 1056 + }) 1057 + ); 1058 + 1059 + rows.forEach(function(row){ 1060 + var delta= 1061 + target- 1062 + row.relativeTop; 1063 + 1064 + if(delta<=1)return; 1065 + 1066 + saveOriginal( 1067 + row.content, 1068 + originalMarginTop, 1069 + "margin-top" 1070 + ); 1071 + 1072 + var current= 1073 + num( 1074 + getComputedStyle( 1075 + row.content 1076 + ).marginTop 1077 + ); 1078 + 1079 + row.content.style.setProperty( 1080 + "margin-top", 1081 + ( 1082 + current+ 1083 + delta 1084 + )+"px" 1085 + ); 1086 + 1087 + row.content.setAttribute( 1088 + "data-sn-first-content-aligned", 1089 + "7" 1090 + ); 1091 + 1092 + contentManaged.add( 1093 + row.content 1094 + ); 1095 + }); 1096 + 1097 + return true; 1098 + } 1099 + 1100 + function applyRow(group){ 1101 + if(!validRow(group))return false; 1102 + 1103 + var cards=[]; 1104 + var seen=new Set(); 1105 + 1106 + group.entries.forEach(function(entry){ 1107 + if(!seen.has(entry.target)){ 1108 + seen.add(entry.target); 1109 + cards.push(entry.target); 1110 + } 1111 + }); 1112 + 1113 + if(cards.length<2)return false; 1114 + 1115 + if( 1116 + !alignKnownBars(cards) 1117 + ){ 1118 + alignGeneric(cards); 1119 + } 1120 + 1121 + var maxHeight=0; 1122 + 1123 + cards.forEach(function(card){ 1124 + maxHeight= 1125 + Math.max( 1126 + maxHeight, 1127 + card.getBoundingClientRect().height 1128 + ); 1129 + }); 1130 + 1131 + maxHeight= 1132 + Math.ceil( 1133 + maxHeight 1134 + ); 1135 + 1136 + if(maxHeight<MIN_H)return false; 1137 + 1138 + cards.forEach(function(card){ 1139 + saveOriginal( 1140 + card, 1141 + originalMinHeight, 1142 + "min-height" 1143 + ); 1144 + 1145 + card.style.setProperty( 1146 + "min-height", 1147 + maxHeight+"px" 1148 + ); 1149 + 1150 + card.setAttribute( 1151 + "data-sn-equal-height-managed", 1152 + "7" 1153 + ); 1154 + 1155 + heightManaged.add(card); 1156 + }); 1157 + 1158 + return true; 1159 + } 1160 + 1161 + function calculate(force){ 1162 + if(applying)return; 1163 + 1164 + var width= 1165 + Math.round( 1166 + window.innerWidth 1167 + ); 1168 + 1169 + var meaningful= 1170 + lastWidth<0|| 1171 + Math.abs( 1172 + width- 1173 + lastWidth 1174 + )>= 1175 + MIN_WIDTH_CHANGE; 1176 + 1177 + if( 1178 + hasApplied&& 1179 + !force&& 1180 + !meaningful 1181 + ){ 1182 + return; 1183 + } 1184 + 1185 + applying=true; 1186 + 1187 + try{ 1188 + harmoniseCustomCallouts(); 1189 + 1190 + if(width<=MOBILE_MAX){ 1191 + if(hasApplied){ 1192 + resetRuntime(); 1193 + } 1194 + 1195 + hasApplied=false; 1196 + lastWidth=width; 1197 + return; 1198 + } 1199 + 1200 + if(hasApplied){ 1201 + resetRuntime(); 1202 + } 1203 + 1204 + var parents= 1205 + Array.from( 1206 + root.querySelectorAll("*") 1207 + ) 1208 + .filter(function(parent){ 1209 + return ( 1210 + visible( 1211 + parent, 1212 + MIN_W, 1213 + MIN_H 1214 + )&& 1215 + parent.children&& 1216 + parent.children.length>=2&& 1217 + parent.children.length<= 1218 + MAX_PARENT_CHILDREN 1219 + ); 1220 + }); 1221 + 1222 + var touched= 1223 + new Set(); 1224 + 1225 + parents.forEach(function(parent){ 1226 + var entries=[]; 1227 + 1228 + Array.from( 1229 + parent.children 1230 + ).forEach(function(child){ 1231 + if( 1232 + !visible( 1233 + child, 1234 + MIN_W, 1235 + MIN_H 1236 + ) 1237 + ){ 1238 + return; 1239 + } 1240 + 1241 + var target= 1242 + pickTarget(child); 1243 + 1244 + if(!target)return; 1245 + 1246 + entries.push({ 1247 + target:target, 1248 + rect: 1249 + target.getBoundingClientRect() 1250 + }); 1251 + }); 1252 + 1253 + groupRows( 1254 + entries 1255 + ).forEach(function(group){ 1256 + if(!validRow(group))return; 1257 + 1258 + var targets= 1259 + group.entries.map(function(entry){ 1260 + return entry.target; 1261 + }); 1262 + 1263 + if( 1264 + !targets.some(function(el){ 1265 + return !touched.has(el); 1266 + }) 1267 + ){ 1268 + return; 1269 + } 1270 + 1271 + if(applyRow(group)){ 1272 + targets.forEach(function(el){ 1273 + touched.add(el); 1274 + }); 1275 + } 1276 + }); 1277 + }); 1278 + 1279 + lastWidth=width; 1280 + hasApplied=true; 1281 + }finally{ 1282 + applying=false; 1283 + } 1284 + } 1285 + 1286 + function resize(){ 1287 + if(resizeTimer){ 1288 + clearTimeout( 1289 + resizeTimer 1290 + ); 1291 + } 1292 + 1293 + resizeTimer= 1294 + setTimeout( 1295 + function(){ 1296 + resizeTimer=0; 1297 + calculate(false); 1298 + }, 1299 + RESIZE_DEBOUNCE 1300 + ); 1301 + } 1302 + 1303 + function waitImages(){ 1304 + var images= 1305 + Array.from( 1306 + root.querySelectorAll("img") 1307 + ); 1308 + 1309 + return Promise.all( 1310 + images.map(function(img){ 1311 + if(img.complete){ 1312 + return Promise.resolve(); 1313 + } 1314 + 1315 + return new Promise(function(resolve){ 1316 + var done=function(){ 1317 + resolve(); 1318 + }; 1319 + 1320 + img.addEventListener( 1321 + "load", 1322 + done, 1323 + {once:true} 1324 + ); 1325 + 1326 + img.addEventListener( 1327 + "error", 1328 + done, 1329 + {once:true} 1330 + ); 1331 + }); 1332 + }) 1333 + ); 1334 + } 1335 + 1336 + async function initial(){ 1337 + if( 1338 + document.readyState!== 1339 + "complete" 1340 + ){ 1341 + await new Promise(function(resolve){ 1342 + addEventListener( 1343 + "load", 1344 + resolve, 1345 + {once:true} 1346 + ); 1347 + }); 1348 + } 1349 + 1350 + if( 1351 + document.fonts&& 1352 + document.fonts.ready 1353 + ){ 1354 + try{ 1355 + await document.fonts.ready; 1356 + }catch(error){} 1357 + } 1358 + 1359 + await waitImages(); 1360 + 1361 + // Exactly one initial layout calculation. 1362 + calculate(true); 1363 + } 1364 + 1365 + addEventListener( 1366 + "resize", 1367 + resize, 1368 + {passive:true} 1369 + ); 1370 + 1371 + initial(); 1372 +})(); 1373 +</script> 1374 + 1375 +<!-- SN_HORIZONTAL_BOX_HARMONIZER_END --> 1376 +{{/html}}\n