Changes for page Plan Your Data Management
Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45
From version 4.15
edited by Veronika Kocher
on Friday, 04 Sep 2026 14:45
on Friday, 04 Sep 2026 14:45
Change comment:
There is no comment for this version
To version 4.7
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 15:23
on Wednesday, 02 Sep 2026 15:23
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -26,7 +26,7 @@ 26 26 <section class="dmp-card" style="margin-bottom:18px;overflow:hidden;border-left:6px solid #e94b13;"> 27 27 <div class="dmp-hero"><img src="https://xwiki.uni-ak.ac.at/bin/download/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/WebHome/enable.png" alt="Planning research data, materials and outputs across the project lifecycle"></div> 28 28 <div style="padding:18px 21px 20px"> 29 -<div class="dmp-eye" style="color:#8a4d36;margin-bottom:5px"> PREPARE · DATA MANAGEMENT PLAN</div>29 +<div class="dmp-eye" style="color:#8a4d36;margin-bottom:5px">ENABLE · DATA MANAGEMENT PLAN</div> 30 30 <h2 style="font-size:27px;line-height:1.2;margin:0 0 8px;color:#2c2926">Turn data management into a working project routine — not a form you fill in once</h2> 31 31 <p style="margin:0;color:#5e5953;line-height:1.6;max-width:1160px">A practical Data Management Plan (DMP) records how your project will organise, store, protect, document, share, preserve or dispose of its data and materials. For artistic and arts-based research, this can include physical objects, audiovisual material, software, performances, process documentation and artistic outputs as well as conventional research data.</p> 32 32 </div> ... ... @@ -247,31 +247,6 @@ 247 247 248 248 <div class="dmp-info" style="margin-bottom:14px"><strong>Need help reviewing a DMP?</strong> Bring the current funder template or internal draft, your material/output inventory, planned storage locations, project partners and the main questions that are still unresolved. This makes support much faster and more concrete.</div> 249 249 250 -<!-- ARSN_TRAINING_WORKSHOPS_V2_START --> 251 -<section class="arsn-training-workshops" data-arsn-training-workshops="v2" style="margin:27px 0 22px 0;"> 252 - <div style="padding:16px 18px;background:#eef8fa;border:1px solid #cfe8ef;border-left:5px solid #21b6d7;border-radius:9px;"> 253 - <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#3f6871;margin-bottom:5px;">TRAINING & WORKSHOPS</div> 254 - <h3 style="font-size:20px;line-height:1.3;margin:0 0 7px;color:#35312d;text-align:left;">Training, workshops & consultation sessions</h3> 255 - <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> 256 - <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> 257 - </div> 258 -</section> 259 -<!-- ARSN_TRAINING_WORKSHOPS_V2_END --> 260 - 261 -<!-- ARSN_PRACTICAL_RESOURCES_V2_START --> 262 -<section class="arsn-practical-resources" data-arsn-practical-resources="v2" style="margin:0 0 27px;"> 263 - <div style="font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase;color:#8a4d36;margin-bottom:4px;">USEFUL MATERIALS</div> 264 - <h3 style="font-size:22px;line-height:1.25;margin:0 0 8px;color:#35312d;text-align:left;">Practical Resources</h3> 265 - <p style="margin:0 0 12px;color:#5e5953;line-height:1.55;">Use practical resources when you need a concise overview, a step-by-step procedure or a ready-to-use project aid.</p> 266 - <div class="arsn-resource-grid" style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;"> 267 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #21b6d7;border-radius:9px;"><strong>Info Sheets</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Short reference guides for common questions and decisions.</div></div> 268 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #e94b13;border-radius:9px;"><strong>Tutorials</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Step-by-step guidance for specific tasks and workflows.</div></div> 269 - <div style="padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-top:3px solid #38b76a;border-radius:9px;"><strong>Checklists & Templates</strong><br><span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px;padding:4px 9px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.065em;">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Ready-to-use checklists and templates for planning, managing and closing projects.</div></div> 270 - </div> 271 - <style>@media(max-width:767px){.arsn-resource-grid{grid-template-columns:1fr!important}}</style> 272 -</section> 273 -<!-- ARSN_PRACTICAL_RESOURCES_V2_END --> 274 - 275 275 <!-- ARSN_SEARCH_TERMS_START --> 276 276 <details style="margin-top:24px;padding-top:10px;border-top:1px solid #e3ded6"> 277 277 <summary style="cursor:pointer;color:#6a655e;font-size:13px">Search terms & related topics</summary> ... ... @@ -282,1404 +282,3 @@ 282 282 </div> 283 283 {{/html}} 284 284 285 -{{html clean="false"}} 286 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 287 - 288 -<style data-sn-service-navigator-master="1"> 289 -/* ========================================================= 290 - MASTER TYPOGRAPHY 291 - ========================================================= */ 292 -#xwikicontent h1, 293 -#xwikicontent h2, 294 -#xwikicontent h3, 295 -#xwikicontent h4, 296 -#xwikicontent h5, 297 -#xwikicontent h6, 298 -#xwikicontent .box-title, 299 -#xwikicontent [role="heading"], 300 -#xwikicontent h1 a, 301 -#xwikicontent h2 a, 302 -#xwikicontent h3 a, 303 -#xwikicontent h4 a, 304 -#xwikicontent h5 a, 305 -#xwikicontent h6 a, 306 -#xwikicontent .box-title a, 307 -#xwikicontent [role="heading"] a{ 308 - text-align:left!important; 309 - text-justify:auto!important; 310 - word-spacing:normal!important; 311 -} 312 - 313 -/* ========================================================= 314 - COMING SOON / IN VORBEREITUNG 315 - ========================================================= */ 316 -.sn-coming-soon-badge{ 317 - display:inline-block; 318 - vertical-align:middle; 319 - margin-left:10px; 320 - padding:4px 8px; 321 - border-radius:14px; 322 - border:1px solid #efd9cc; 323 - background:#fff4ee; 324 - color:#8a4d36; 325 - font-size:11px; 326 - font-weight:700; 327 - letter-spacing:.055em; 328 - line-height:1.2; 329 - white-space:nowrap; 330 -} 331 - 332 -/* ========================================================= 333 - NATIVE / DETAIL CALLOUT GEOMETRY 334 - Preserve existing backgrounds. 335 - ========================================================= */ 336 -#xwikicontent .arsn-info, 337 -#xwikicontent .dmp-info, 338 -#xwikicontent .ido-info, 339 -#xwikicontent .pp-info, 340 -#xwikicontent .infomessage{ 341 - box-sizing:border-box!important; 342 - border-left:4px solid #21b6d7!important; 343 - border-radius:8px; 344 - text-align:left!important; 345 - word-spacing:normal!important; 346 -} 347 - 348 -#xwikicontent .arsn-warn, 349 -#xwikicontent .dmp-warn, 350 -#xwikicontent .ido-warn, 351 -#xwikicontent .pp-warn, 352 -#xwikicontent .warn, 353 -#xwikicontent .warning, 354 -#xwikicontent .warningmessage, 355 -#xwikicontent .errormessage{ 356 - box-sizing:border-box!important; 357 - border-left:4px solid #e94b13!important; 358 - border-radius:8px; 359 - text-align:left!important; 360 - word-spacing:normal!important; 361 -} 362 - 363 -[data-sn-master-equal-height], 364 -[data-sn-master-first-row]{ 365 - box-sizing:border-box; 366 -} 367 - 368 -/* ========================================================= 369 - FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS 370 - ========================================================= */ 371 -#xwikicontent .arsn-area-label[data-sn-three-line="1"]{ 372 - display:grid!important; 373 - grid-template-columns:minmax(0,1fr)!important; 374 - grid-auto-rows:auto!important; 375 - width:100%!important; 376 - max-width:none!important; 377 - box-sizing:border-box!important; 378 - justify-items:start!important; 379 - align-items:start!important; 380 - gap:2px!important; 381 - text-align:left!important; 382 - text-align-last:left!important; 383 - text-justify:auto!important; 384 - word-spacing:normal!important; 385 - white-space:normal!important; 386 -} 387 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number, 388 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title, 389 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{ 390 - display:block!important; 391 - width:100%!important; 392 - margin:0!important; 393 - text-align:left!important; 394 - text-align-last:left!important; 395 - text-justify:auto!important; 396 - word-spacing:normal!important; 397 - white-space:normal!important; 398 -} 399 -</style> 400 - 401 -<script data-sn-service-navigator-master="1"> 402 -(function(){ 403 - "use strict"; 404 - 405 - var PAGE_KIND="detail"; 406 - var PLACEHOLDER=false; 407 - var PLACEHOLDER_LABEL="COMING SOON"; 408 - 409 - var MOBILE_MAX=767; 410 - var ROW_TOLERANCE=6; 411 - var RESIZE_DEBOUNCE=220; 412 - 413 - var root= 414 - document.getElementById("xwikicontent")|| 415 - document.querySelector(".xwiki-rendering-content")|| 416 - document.querySelector("main")|| 417 - document.body; 418 - 419 - if(!root)return; 420 - 421 - var managedHeight=new Set(); 422 - var managedMargin=new Set(); 423 - var originalHeight=new WeakMap(); 424 - var originalMargin=new WeakMap(); 425 - 426 - var resizeTimer=0; 427 - var running=false; 428 - 429 - var THEMES=[ 430 - { 431 - name:"BLUE", 432 - accent:"#21b6d7", 433 - bg:"#eaf7fb", 434 - text:"#315d68", 435 - labels:[ 436 - "HIER STARTEN", 437 - "ENTSCHEIDEN", 438 - "ÜBERPRÜFEN & ANPASSEN", 439 - "START HERE", 440 - "DECIDE", 441 - "REVIEW & ADAPT" 442 - ] 443 - }, 444 - { 445 - name:"RED", 446 - accent:"#e94b13", 447 - bg:"#fff1ec", 448 - text:"#8a4d36", 449 - labels:[ 450 - "PLANEN & ORGANISIEREN", 451 - "ORGANISIEREN & DOKUMENTIEREN", 452 - "PUBLIZIEREN & PRÄSENTIEREN", 453 - "PLAN & ORGANISE", 454 - "PLAN & ORGANIZE", 455 - "ORGANISE & DOCUMENT", 456 - "ORGANIZE & DOCUMENT", 457 - "PUBLISH & PRESENT" 458 - ] 459 - }, 460 - { 461 - name:"YELLOW", 462 - accent:"#f0aa00", 463 - bg:"#fff8e7", 464 - text:"#785b17", 465 - labels:[ 466 - "SCHÜTZEN & KLÄREN", 467 - "STANDARDISIEREN & IDENTIFIZIEREN", 468 - "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 469 - "PROTECT & CLARIFY", 470 - "STANDARDISE & IDENTIFY", 471 - "STANDARDIZE & IDENTIFY", 472 - "OPEN, REUSE & MAKE FINDABLE" 473 - ] 474 - }, 475 - { 476 - name:"GREEN", 477 - accent:"#38b76a", 478 - bg:"#edf9f1", 479 - text:"#3f7451", 480 - labels:[ 481 - "INFRASTRUKTUR EINRICHTEN", 482 - "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 483 - "SPEICHERN & ZUGRIFF STEUERN", 484 - "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 485 - "SET UP INFRASTRUCTURE", 486 - "SET UP INFRASTRUCTURE & COLLABORATION", 487 - "STORE & CONTROL ACCESS", 488 - "REPOSITORY, PRESERVE & HAND OVER" 489 - ] 490 - } 491 - ]; 492 - 493 - function num(value){ 494 - var n=parseFloat(value); 495 - return Number.isFinite(n)?n:0; 496 - } 497 - 498 - function norm(value){ 499 - return String(value||"") 500 - .replace(/\s+/g," ") 501 - .trim() 502 - .toUpperCase(); 503 - } 504 - 505 - function visible(el){ 506 - if(!el||el.nodeType!==1)return false; 507 - 508 - var style=getComputedStyle(el); 509 - var rect=el.getBoundingClientRect(); 510 - 511 - return ( 512 - style.display!=="none"&& 513 - style.visibility!=="hidden"&& 514 - rect.width>20&& 515 - rect.height>4 516 - ); 517 - } 518 - 519 - function saveStyle(el,map,property){ 520 - if(map.has(el))return; 521 - 522 - map.set(el,{ 523 - value:el.style.getPropertyValue(property), 524 - priority:el.style.getPropertyPriority(property) 525 - }); 526 - } 527 - 528 - function restoreStyle(el,map,property){ 529 - var original=map.get(el); 530 - 531 - if(original&&original.value){ 532 - el.style.setProperty( 533 - property, 534 - original.value, 535 - original.priority||"" 536 - ); 537 - }else{ 538 - el.style.removeProperty(property); 539 - } 540 - } 541 - 542 - function resetRuntime(){ 543 - managedHeight.forEach(function(el){ 544 - restoreStyle( 545 - el, 546 - originalHeight, 547 - "min-height" 548 - ); 549 - el.removeAttribute( 550 - "data-sn-master-equal-height" 551 - ); 552 - }); 553 - 554 - managedMargin.forEach(function(el){ 555 - restoreStyle( 556 - el, 557 - originalMargin, 558 - "margin-top" 559 - ); 560 - el.removeAttribute( 561 - "data-sn-master-first-row" 562 - ); 563 - }); 564 - 565 - managedHeight.clear(); 566 - managedMargin.clear(); 567 - } 568 - 569 - function themeFor(text){ 570 - var value=norm(text); 571 - 572 - for(var i=0;i<THEMES.length;i++){ 573 - for(var j=0;j<THEMES[i].labels.length;j++){ 574 - var label=THEMES[i].labels[j]; 575 - 576 - if( 577 - value===label|| 578 - value.indexOf(label+" ")===0|| 579 - value.indexOf(label+" -")===0|| 580 - value.indexOf(label+" ·")===0 581 - ){ 582 - return THEMES[i]; 583 - } 584 - } 585 - } 586 - 587 - return null; 588 - } 589 - 590 - /* ======================================================= 591 - BORDERLESS FILLED RED/ORANGE CTA BUTTONS 592 - ======================================================= */ 593 - 594 - function colourDistance(a,b){ 595 - return Math.sqrt( 596 - Math.pow(a[0]-b[0],2)+ 597 - Math.pow(a[1]-b[1],2)+ 598 - Math.pow(a[2]-b[2],2) 599 - ); 600 - } 601 - 602 - function makeFilledRedOrangeCTAsBorderless(){ 603 - var RED_ORANGE=[233,75,19]; 604 - 605 - Array.from( 606 - root.querySelectorAll( 607 - 'a,button,[role="button"],input[type="submit"],input[type="button"]' 608 - ) 609 - ).forEach(function(el){ 610 - if(!visible(el))return; 611 - 612 - var style=getComputedStyle(el); 613 - var rgb=parseRGB(style.backgroundColor); 614 - 615 - if(!rgb)return; 616 - 617 - if( 618 - colourDistance( 619 - rgb, 620 - RED_ORANGE 621 - )>55 622 - ){ 623 - return; 624 - } 625 - 626 - var rect=el.getBoundingClientRect(); 627 - 628 - if( 629 - rect.width<80|| 630 - rect.height<24 631 - ){ 632 - return; 633 - } 634 - 635 - el.style.setProperty( 636 - "border", 637 - "none", 638 - "important" 639 - ); 640 - 641 - el.style.setProperty( 642 - "border-left", 643 - "none", 644 - "important" 645 - ); 646 - 647 - el.style.setProperty( 648 - "border-top", 649 - "none", 650 - "important" 651 - ); 652 - 653 - el.style.setProperty( 654 - "border-right", 655 - "none", 656 - "important" 657 - ); 658 - 659 - el.style.setProperty( 660 - "border-bottom", 661 - "none", 662 - "important" 663 - ); 664 - 665 - el.style.setProperty( 666 - "box-shadow", 667 - "none", 668 - "important" 669 - ); 670 - }); 671 - } 672 - 673 - /* ======================================================= 674 - FULL-WIDTH THREE-LINE AREA LABELS 675 - ======================================================= */ 676 - 677 - function compactText(value){ 678 - return String(value||"") 679 - .replace(/\s+/g," ") 680 - .trim(); 681 - } 682 - 683 - function makeThreeLineAreaLabels(){ 684 - Array.from( 685 - root.querySelectorAll( 686 - ".arsn-area-label" 687 - ) 688 - ).forEach(function(label){ 689 - if( 690 - label.getAttribute( 691 - "data-sn-three-line" 692 - )==="1" 693 - ){ 694 - return; 695 - } 696 - 697 - var number= 698 - label.querySelector( 699 - ":scope > .arsn-area-number" 700 - ); 701 - 702 - var action= 703 - label.querySelector( 704 - ":scope > .arsn-area-action" 705 - ); 706 - 707 - if( 708 - !number|| 709 - !action 710 - ){ 711 - return; 712 - } 713 - 714 - var clone= 715 - label.cloneNode(true); 716 - 717 - var cloneNumber= 718 - clone.querySelector( 719 - ":scope > .arsn-area-number" 720 - ); 721 - 722 - var cloneAction= 723 - clone.querySelector( 724 - ":scope > .arsn-area-action" 725 - ); 726 - 727 - if(cloneNumber){ 728 - cloneNumber.remove(); 729 - } 730 - 731 - if(cloneAction){ 732 - cloneAction.remove(); 733 - } 734 - 735 - var titleText= 736 - compactText( 737 - clone.textContent 738 - ); 739 - 740 - if(!titleText){ 741 - return; 742 - } 743 - 744 - var numberNode= 745 - number.cloneNode(true); 746 - 747 - var actionNode= 748 - action.cloneNode(true); 749 - 750 - var titleNode= 751 - document.createElement( 752 - "span" 753 - ); 754 - 755 - titleNode.className= 756 - "sn-area-label-title"; 757 - 758 - titleNode.textContent= 759 - titleText; 760 - 761 - while(label.firstChild){ 762 - label.removeChild( 763 - label.firstChild 764 - ); 765 - } 766 - 767 - label.appendChild( 768 - numberNode 769 - ); 770 - 771 - label.appendChild( 772 - titleNode 773 - ); 774 - 775 - label.appendChild( 776 - actionNode 777 - ); 778 - 779 - label.setAttribute( 780 - "data-sn-three-line", 781 - "1" 782 - ); 783 - 784 - var head= 785 - label.closest( 786 - ".arsn-area-head" 787 - ); 788 - 789 - if(head){ 790 - head.style.setProperty( 791 - "width", 792 - "100%", 793 - "important" 794 - ); 795 - 796 - head.style.setProperty( 797 - "max-width", 798 - "100%", 799 - "important" 800 - ); 801 - 802 - head.style.setProperty( 803 - "box-sizing", 804 - "border-box", 805 - "important" 806 - ); 807 - } 808 - }); 809 - } 810 - 811 - /* ======================================================= 812 - PLACEHOLDER BADGE 813 - ======================================================= */ 814 - 815 - function applyPlaceholderBadge(){ 816 - if(!PLACEHOLDER)return; 817 - 818 - if( 819 - document.querySelector( 820 - ".sn-coming-soon-badge" 821 - ) 822 - ){ 823 - return; 824 - } 825 - 826 - var title= 827 - document.querySelector( 828 - "#document-title" 829 - )|| 830 - document.querySelector( 831 - "h1" 832 - ); 833 - 834 - if(!title)return; 835 - 836 - var badge= 837 - document.createElement( 838 - "span" 839 - ); 840 - 841 - badge.className= 842 - "sn-coming-soon-badge"; 843 - 844 - badge.textContent= 845 - PLACEHOLDER_LABEL; 846 - 847 - badge.setAttribute( 848 - "aria-label", 849 - PLACEHOLDER_LABEL 850 - ); 851 - 852 - title.appendChild( 853 - badge 854 - ); 855 - } 856 - 857 - /* ======================================================= 858 - DETAIL PAGE OWN-ACCENT PROPAGATION 859 - ======================================================= */ 860 - 861 - function parseRGB(value){ 862 - var match=String(value||"").match( 863 - /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 864 - ); 865 - 866 - if(!match)return null; 867 - 868 - return [ 869 - Number(match[1]), 870 - Number(match[2]), 871 - Number(match[3]) 872 - ]; 873 - } 874 - 875 - function distance(a,b){ 876 - return Math.sqrt( 877 - Math.pow(a[0]-b[0],2)+ 878 - Math.pow(a[1]-b[1],2)+ 879 - Math.pow(a[2]-b[2],2) 880 - ); 881 - } 882 - 883 - function paletteMatch(cssColor){ 884 - var rgb=parseRGB(cssColor); 885 - 886 - if(!rgb)return null; 887 - 888 - var palette=[ 889 - {hex:"#21b6d7",rgb:[33,182,215]}, 890 - {hex:"#e94b13",rgb:[233,75,19]}, 891 - {hex:"#f0aa00",rgb:[240,170,0]}, 892 - {hex:"#38b76a",rgb:[56,183,106]} 893 - ]; 894 - 895 - var best=null; 896 - var bestDistance=Infinity; 897 - 898 - palette.forEach(function(item){ 899 - var d=distance(rgb,item.rgb); 900 - 901 - if(d<bestDistance){ 902 - best=item; 903 - bestDistance=d; 904 - } 905 - }); 906 - 907 - return bestDistance<=30 908 - ?best 909 - :null; 910 - } 911 - 912 - function propagateDetailAccents(){ 913 - if(PAGE_KIND!=="detail")return; 914 - 915 - Array.from( 916 - root.querySelectorAll( 917 - ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 918 - ".arsn-source,.dmp-source,.ido-source,.pp-source" 919 - ) 920 - ).forEach(function(el){ 921 - if(!visible(el))return; 922 - 923 - var style=getComputedStyle(el); 924 - 925 - if( 926 - num(style.borderTopWidth)>=2 927 - ){ 928 - var match= 929 - paletteMatch( 930 - style.borderTopColor 931 - ); 932 - 933 - if(match){ 934 - el.style.setProperty( 935 - "border-left", 936 - "4px solid "+match.hex, 937 - "important" 938 - ); 939 - } 940 - } 941 - }); 942 - 943 - // Warning families: explicit safety override. 944 - Array.from( 945 - root.querySelectorAll( 946 - ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 947 - ".warn,.warning,.warningmessage,.errormessage" 948 - ) 949 - ).forEach(function(el){ 950 - if(!visible(el))return; 951 - 952 - el.style.setProperty( 953 - "border-left", 954 - "4px solid #e94b13", 955 - "important" 956 - ); 957 - }); 958 - 959 - // Info families: explicit orientation override. 960 - Array.from( 961 - root.querySelectorAll( 962 - ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 963 - ) 964 - ).forEach(function(el){ 965 - if(!visible(el))return; 966 - 967 - el.style.setProperty( 968 - "border-left", 969 - "4px solid #21b6d7", 970 - "important" 971 - ); 972 - }); 973 - } 974 - 975 - /* ======================================================= 976 - OVERVIEW SEMANTIC THEME PALETTE 977 - ======================================================= */ 978 - 979 - function smallestThemeHeaders(){ 980 - return Array.from( 981 - root.querySelectorAll( 982 - "div,span,p,strong,h3,h4,h5,h6" 983 - ) 984 - ).filter(function(el){ 985 - if(!visible(el))return false; 986 - if(!themeFor(el.textContent))return false; 987 - 988 - return !Array.from( 989 - el.children||[] 990 - ).some(function(child){ 991 - return !!themeFor( 992 - child.textContent 993 - ); 994 - }); 995 - }); 996 - } 997 - 998 - function findOverviewCard(header){ 999 - var node=header.parentElement; 1000 - var candidates=[]; 1001 - 1002 - while(node&&node!==root){ 1003 - var rect=node.getBoundingClientRect(); 1004 - var style=getComputedStyle(node); 1005 - 1006 - var border= 1007 - num(style.borderTopWidth)+ 1008 - num(style.borderRightWidth)+ 1009 - num(style.borderBottomWidth)+ 1010 - num(style.borderLeftWidth); 1011 - 1012 - if( 1013 - rect.width>=220&& 1014 - rect.width<=800&& 1015 - rect.height>=120&& 1016 - border>=1 1017 - ){ 1018 - candidates.push(node); 1019 - } 1020 - 1021 - node=node.parentElement; 1022 - } 1023 - 1024 - if(!candidates.length)return null; 1025 - 1026 - candidates.sort(function(a,b){ 1027 - return ( 1028 - b.getBoundingClientRect().height- 1029 - a.getBoundingClientRect().height 1030 - ); 1031 - }); 1032 - 1033 - return candidates[0]; 1034 - } 1035 - 1036 - function rowCandidates(link,card){ 1037 - var result=[]; 1038 - var cardRect= 1039 - card.getBoundingClientRect(); 1040 - 1041 - var node=link; 1042 - 1043 - while(node&&node!==card){ 1044 - if(visible(node)){ 1045 - var rect= 1046 - node.getBoundingClientRect(); 1047 - 1048 - if( 1049 - rect.height<=105&& 1050 - rect.width>= 1051 - cardRect.width*.50&& 1052 - rect.width<= 1053 - cardRect.width*1.03 1054 - ){ 1055 - result.push(node); 1056 - } 1057 - } 1058 - 1059 - node=node.parentElement; 1060 - } 1061 - 1062 - return result; 1063 - } 1064 - 1065 - function chooseOuterRow( 1066 - candidates, 1067 - link 1068 - ){ 1069 - if(!candidates.length){ 1070 - return link; 1071 - } 1072 - 1073 - var bordered= 1074 - candidates.filter(function(el){ 1075 - return ( 1076 - num( 1077 - getComputedStyle(el) 1078 - .borderLeftWidth 1079 - )>=1 1080 - ); 1081 - }); 1082 - 1083 - var pool= 1084 - bordered.length 1085 - ?bordered 1086 - :candidates; 1087 - 1088 - pool.sort(function(a,b){ 1089 - var ar= 1090 - a.getBoundingClientRect(); 1091 - 1092 - var br= 1093 - b.getBoundingClientRect(); 1094 - 1095 - return ( 1096 - ar.left-br.left|| 1097 - br.width-ar.width 1098 - ); 1099 - }); 1100 - 1101 - return pool[0]||link; 1102 - } 1103 - 1104 - function applyOverviewPalette(){ 1105 - if(PAGE_KIND!=="overview"){ 1106 - return []; 1107 - } 1108 - 1109 - var headers= 1110 - smallestThemeHeaders() 1111 - .map(function(el){ 1112 - return { 1113 - el:el, 1114 - theme: 1115 - themeFor( 1116 - el.textContent 1117 - ), 1118 - card: 1119 - findOverviewCard( 1120 - el 1121 - ) 1122 - }; 1123 - }) 1124 - .filter(function(row){ 1125 - return !!row.card; 1126 - }); 1127 - 1128 - var unique=[]; 1129 - var seenHeaders=new Set(); 1130 - 1131 - headers.forEach(function(row){ 1132 - var key= 1133 - row.theme.name+ 1134 - "|"+ 1135 - Math.round( 1136 - row.card 1137 - .getBoundingClientRect() 1138 - .left 1139 - )+ 1140 - "|"+ 1141 - Math.round( 1142 - row.el 1143 - .getBoundingClientRect() 1144 - .top 1145 - ); 1146 - 1147 - if(!seenHeaders.has(key)){ 1148 - seenHeaders.add(key); 1149 - unique.push(row); 1150 - } 1151 - }); 1152 - 1153 - unique.forEach(function(row){ 1154 - var headerRect= 1155 - row.el 1156 - .getBoundingClientRect(); 1157 - 1158 - row.el.style.setProperty( 1159 - "background", 1160 - row.theme.bg, 1161 - "important" 1162 - ); 1163 - 1164 - row.el.style.setProperty( 1165 - "color", 1166 - row.theme.text, 1167 - "important" 1168 - ); 1169 - 1170 - row.el.style.setProperty( 1171 - "text-align", 1172 - "left", 1173 - "important" 1174 - ); 1175 - 1176 - row.el.style.setProperty( 1177 - "word-spacing", 1178 - "normal", 1179 - "important" 1180 - ); 1181 - 1182 - var later= 1183 - unique 1184 - .filter(function(other){ 1185 - return ( 1186 - other.card===row.card&& 1187 - other.el 1188 - .getBoundingClientRect() 1189 - .top> 1190 - headerRect.top+2 1191 - ); 1192 - }) 1193 - .sort(function(a,b){ 1194 - return ( 1195 - a.el 1196 - .getBoundingClientRect() 1197 - .top- 1198 - b.el 1199 - .getBoundingClientRect() 1200 - .top 1201 - ); 1202 - }); 1203 - 1204 - var stopTop= 1205 - later.length 1206 - ?later[0].el 1207 - .getBoundingClientRect() 1208 - .top 1209 - :Infinity; 1210 - 1211 - Array.from( 1212 - row.card.querySelectorAll("a") 1213 - ).forEach(function(link){ 1214 - if(!visible(link))return; 1215 - 1216 - var rect= 1217 - link.getBoundingClientRect(); 1218 - 1219 - if( 1220 - rect.top<= 1221 - headerRect.bottom-2|| 1222 - rect.top>= 1223 - stopTop-2 1224 - ){ 1225 - return; 1226 - } 1227 - 1228 - var candidates= 1229 - rowCandidates( 1230 - link, 1231 - row.card 1232 - ); 1233 - 1234 - var target= 1235 - chooseOuterRow( 1236 - candidates, 1237 - link 1238 - ); 1239 - 1240 - candidates.forEach(function(el){ 1241 - el.style.setProperty( 1242 - "border-left", 1243 - "0 solid transparent", 1244 - "important" 1245 - ); 1246 - }); 1247 - 1248 - target.style.setProperty( 1249 - "border-left", 1250 - "3px solid "+ 1251 - row.theme.accent, 1252 - "important" 1253 - ); 1254 - 1255 - target.style.setProperty( 1256 - "box-sizing", 1257 - "border-box", 1258 - "important" 1259 - ); 1260 - }); 1261 - }); 1262 - 1263 - return unique; 1264 - } 1265 - 1266 - /* ======================================================= 1267 - OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1268 - ======================================================= */ 1269 - 1270 - function alignOverviewCards(headers){ 1271 - if( 1272 - PAGE_KIND!=="overview"|| 1273 - window.innerWidth<=MOBILE_MAX 1274 - ){ 1275 - return; 1276 - } 1277 - 1278 - var cards=[]; 1279 - var seen=new Set(); 1280 - 1281 - headers.forEach(function(row){ 1282 - if(!seen.has(row.card)){ 1283 - seen.add(row.card); 1284 - cards.push(row.card); 1285 - } 1286 - }); 1287 - 1288 - if(cards.length<2){ 1289 - return; 1290 - } 1291 - 1292 - // Group cards by actual top position. 1293 - var groups=[]; 1294 - 1295 - cards.forEach(function(card){ 1296 - var top= 1297 - card.getBoundingClientRect().top; 1298 - 1299 - var group=null; 1300 - 1301 - for(var i=0;i<groups.length;i++){ 1302 - if( 1303 - Math.abs( 1304 - groups[i].top-top 1305 - )<=ROW_TOLERANCE 1306 - ){ 1307 - group=groups[i]; 1308 - break; 1309 - } 1310 - } 1311 - 1312 - if(!group){ 1313 - group={ 1314 - top:top, 1315 - cards:[] 1316 - }; 1317 - groups.push(group); 1318 - } 1319 - 1320 - group.cards.push(card); 1321 - }); 1322 - 1323 - groups.forEach(function(group){ 1324 - if(group.cards.length<2){ 1325 - return; 1326 - } 1327 - 1328 - var firstHeaders= 1329 - group.cards.map(function(card){ 1330 - var candidates= 1331 - headers 1332 - .filter(function(row){ 1333 - return row.card===card; 1334 - }) 1335 - .sort(function(a,b){ 1336 - return ( 1337 - a.el 1338 - .getBoundingClientRect() 1339 - .top- 1340 - b.el 1341 - .getBoundingClientRect() 1342 - .top 1343 - ); 1344 - }); 1345 - 1346 - return candidates.length 1347 - ?candidates[0] 1348 - :null; 1349 - }); 1350 - 1351 - if( 1352 - !firstHeaders.some(function(row){ 1353 - return !row; 1354 - }) 1355 - ){ 1356 - var targetTop= 1357 - Math.max.apply( 1358 - Math, 1359 - firstHeaders.map(function(row){ 1360 - return ( 1361 - row.el 1362 - .getBoundingClientRect() 1363 - .top- 1364 - row.card 1365 - .getBoundingClientRect() 1366 - .top 1367 - ); 1368 - }) 1369 - ); 1370 - 1371 - firstHeaders.forEach(function(row){ 1372 - var relativeTop= 1373 - row.el 1374 - .getBoundingClientRect() 1375 - .top- 1376 - row.card 1377 - .getBoundingClientRect() 1378 - .top; 1379 - 1380 - var delta= 1381 - targetTop-relativeTop; 1382 - 1383 - if(delta>1){ 1384 - saveStyle( 1385 - row.el, 1386 - originalMargin, 1387 - "margin-top" 1388 - ); 1389 - 1390 - var current= 1391 - num( 1392 - getComputedStyle( 1393 - row.el 1394 - ).marginTop 1395 - ); 1396 - 1397 - row.el.style.setProperty( 1398 - "margin-top", 1399 - ( 1400 - current+delta 1401 - )+"px" 1402 - ); 1403 - 1404 - row.el.setAttribute( 1405 - "data-sn-master-first-row", 1406 - "1" 1407 - ); 1408 - 1409 - managedMargin.add( 1410 - row.el 1411 - ); 1412 - } 1413 - }); 1414 - } 1415 - 1416 - var maxHeight=0; 1417 - 1418 - group.cards.forEach(function(card){ 1419 - maxHeight= 1420 - Math.max( 1421 - maxHeight, 1422 - card 1423 - .getBoundingClientRect() 1424 - .height 1425 - ); 1426 - }); 1427 - 1428 - maxHeight= 1429 - Math.ceil(maxHeight); 1430 - 1431 - group.cards.forEach(function(card){ 1432 - saveStyle( 1433 - card, 1434 - originalHeight, 1435 - "min-height" 1436 - ); 1437 - 1438 - card.style.setProperty( 1439 - "min-height", 1440 - maxHeight+"px" 1441 - ); 1442 - 1443 - card.setAttribute( 1444 - "data-sn-master-equal-height", 1445 - "1" 1446 - ); 1447 - 1448 - managedHeight.add( 1449 - card 1450 - ); 1451 - }); 1452 - }); 1453 - } 1454 - 1455 - /* ======================================================= 1456 - DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1457 - ======================================================= */ 1458 - 1459 - function equaliseDetailGrids(){ 1460 - if( 1461 - PAGE_KIND!=="detail"|| 1462 - window.innerWidth<=MOBILE_MAX 1463 - ){ 1464 - return; 1465 - } 1466 - 1467 - var selectors=[ 1468 - ".arsn-grid", 1469 - ".arsn-grid-2", 1470 - ".arsn-grid-3", 1471 - ".dmp-grid", 1472 - ".ido-grid", 1473 - ".pp-grid" 1474 - ]; 1475 - 1476 - selectors.forEach(function(selector){ 1477 - Array.from( 1478 - root.querySelectorAll(selector) 1479 - ).forEach(function(grid){ 1480 - var children= 1481 - Array.from( 1482 - grid.children||[] 1483 - ).filter(visible); 1484 - 1485 - if(children.length<2){ 1486 - return; 1487 - } 1488 - 1489 - var groups=[]; 1490 - 1491 - children.forEach(function(child){ 1492 - var top= 1493 - child 1494 - .getBoundingClientRect() 1495 - .top; 1496 - 1497 - var group=null; 1498 - 1499 - for(var i=0;i<groups.length;i++){ 1500 - if( 1501 - Math.abs( 1502 - groups[i].top-top 1503 - )<=ROW_TOLERANCE 1504 - ){ 1505 - group=groups[i]; 1506 - break; 1507 - } 1508 - } 1509 - 1510 - if(!group){ 1511 - group={ 1512 - top:top, 1513 - items:[] 1514 - }; 1515 - groups.push(group); 1516 - } 1517 - 1518 - group.items.push(child); 1519 - }); 1520 - 1521 - groups.forEach(function(group){ 1522 - if(group.items.length<2){ 1523 - return; 1524 - } 1525 - 1526 - var maxHeight=0; 1527 - 1528 - group.items.forEach(function(item){ 1529 - maxHeight= 1530 - Math.max( 1531 - maxHeight, 1532 - item 1533 - .getBoundingClientRect() 1534 - .height 1535 - ); 1536 - }); 1537 - 1538 - maxHeight= 1539 - Math.ceil(maxHeight); 1540 - 1541 - group.items.forEach(function(item){ 1542 - saveStyle( 1543 - item, 1544 - originalHeight, 1545 - "min-height" 1546 - ); 1547 - 1548 - item.style.setProperty( 1549 - "min-height", 1550 - maxHeight+"px" 1551 - ); 1552 - 1553 - item.setAttribute( 1554 - "data-sn-master-equal-height", 1555 - "1" 1556 - ); 1557 - 1558 - managedHeight.add(item); 1559 - }); 1560 - }); 1561 - }); 1562 - }); 1563 - } 1564 - 1565 - /* ======================================================= 1566 - RUN / RESPONSIVE SCHEDULING 1567 - ======================================================= */ 1568 - 1569 - function run(){ 1570 - if(running)return; 1571 - 1572 - running=true; 1573 - 1574 - try{ 1575 - resetRuntime(); 1576 - applyPlaceholderBadge(); 1577 - propagateDetailAccents(); 1578 - 1579 - var headers= 1580 - applyOverviewPalette(); 1581 - 1582 - makeThreeLineAreaLabels(); 1583 - makeFilledRedOrangeCTAsBorderless(); 1584 - 1585 - if( 1586 - window.innerWidth> 1587 - MOBILE_MAX 1588 - ){ 1589 - alignOverviewCards( 1590 - headers 1591 - ); 1592 - 1593 - equaliseDetailGrids(); 1594 - } 1595 - }finally{ 1596 - running=false; 1597 - } 1598 - } 1599 - 1600 - function onResize(){ 1601 - if(resizeTimer){ 1602 - clearTimeout( 1603 - resizeTimer 1604 - ); 1605 - } 1606 - 1607 - resizeTimer= 1608 - setTimeout( 1609 - function(){ 1610 - resizeTimer=0; 1611 - run(); 1612 - }, 1613 - RESIZE_DEBOUNCE 1614 - ); 1615 - } 1616 - 1617 - async function waitForReady(){ 1618 - if( 1619 - document.readyState!=="complete" 1620 - ){ 1621 - await new Promise(function(resolve){ 1622 - window.addEventListener( 1623 - "load", 1624 - resolve, 1625 - {once:true} 1626 - ); 1627 - }); 1628 - } 1629 - 1630 - if( 1631 - document.fonts&& 1632 - document.fonts.ready 1633 - ){ 1634 - try{ 1635 - await document.fonts.ready; 1636 - }catch(error){} 1637 - } 1638 - 1639 - var images= 1640 - Array.from( 1641 - root.querySelectorAll("img") 1642 - ); 1643 - 1644 - await Promise.all( 1645 - images.map(function(img){ 1646 - if(img.complete){ 1647 - return Promise.resolve(); 1648 - } 1649 - 1650 - return new Promise(function(resolve){ 1651 - var done=function(){ 1652 - resolve(); 1653 - }; 1654 - 1655 - img.addEventListener( 1656 - "load", 1657 - done, 1658 - {once:true} 1659 - ); 1660 - 1661 - img.addEventListener( 1662 - "error", 1663 - done, 1664 - {once:true} 1665 - ); 1666 - }); 1667 - }) 1668 - ); 1669 - 1670 - run(); 1671 - } 1672 - 1673 - window.addEventListener( 1674 - "resize", 1675 - onResize, 1676 - {passive:true} 1677 - ); 1678 - 1679 - waitForReady(); 1680 -})(); 1681 -</script> 1682 - 1683 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 1684 -{{/html}} 1685 -