Changes for page Project Planning & Organisation
Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45
From version 9.9
edited by Veronika Kocher
on Friday, 04 Sep 2026 14:23
on Friday, 04 Sep 2026 14:23
Change comment:
There is no comment for this version
To version 8.1
edited by Veronika Kocher
on Tuesday, 01 Sep 2026 9:51
on Tuesday, 01 Sep 2026 9:51
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Default language
-
... ... @@ -1,1 +1,0 @@ 1 -en - Content
-
... ... @@ -17,48 +17,12 @@ 17 17 .linkgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:8px} .navlink{display:block;padding:10px 11px;border:1px solid #e9e4dc;border-left:3px solid #e94b13;border-radius:6px;background:#fffdf9;color:#252321;text-decoration:none;font-weight:600} .navlink:hover{background:#fff7f1;text-decoration:none} 18 18 </style> 19 19 20 -<style> 21 - .research-example-grid{ 22 - display:grid; 23 - grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); 24 - gap:14px; 25 - margin-top:12px; 26 - } 27 - .research-example{ 28 - padding:16px 17px; 29 - border:1px solid #e3ded6; 30 - border-radius:9px; 31 - background:#fcfbf8; 32 - box-shadow:0 1px 3px rgba(0,0,0,.03); 33 - } 34 - .research-example h4{ 35 - font-size:18px; 36 - margin:0 0 7px 0; 37 - color:#35312d; 38 - } 39 - .research-example p{ 40 - margin:0 0 10px 0; 41 - color:#625d56; 42 - line-height:1.5; 43 - } 44 - .research-example a{ 45 - display:inline-block; 46 - font-weight:700; 47 - text-decoration:none; 48 - } 49 - .research-example a:hover, 50 - .research-example a:focus{ 51 - text-decoration:underline; 52 - } 53 -</style> 54 - 55 - 56 56 <div class="pp"> 57 57 58 58 <section class="card" style="margin-bottom:18px;overflow:hidden;border-left:6px solid #e94b13;"> 59 59 <div class="hero"><img src="https://xwiki.uni-ak.ac.at/bin/download/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/WebHome/enable.png" alt="Planning and organising an artistic or research project"></div> 60 60 <div style="padding:18px 21px 20px"> 61 -<div class="eye" style="color:#8a4d36;margin-bottom:5px"> PREPARE · PROJECT PLANNING & ORGANISATION</div>25 +<div class="eye" style="color:#8a4d36;margin-bottom:5px">ENABLE · PROJECT PLANNING & ORGANISATION</div> 62 62 <h2 style="font-size:27px;line-height:1.2;margin:0 0 8px;color:#2c2926">Build a project that can actually be hosted, funded, staffed and delivered</h2> 63 63 <p style="margin:0;color:#5e5953;line-height:1.6;max-width:1120px">Project planning at the Angewandte is not only a timeline and a budget. A workable project needs an artistic or research home, clear responsibilities, an appropriate funding and administrative route, and early coordination with the university structures triggered by your project.</p> 64 64 </div></section> ... ... @@ -97,72 +97,7 @@ 97 97 </div> 98 98 </section> 99 99 100 - 101 101 <section class="sec"> 102 - <div class="eye" style="color:#8a4d36;margin-bottom:4px">EXAMPLES · HOW RESEARCH IS SITUATED AT THE ANGEWANDTE</div> 103 - <h3>Use existing projects to understand possible research profiles and institutional homes</h3> 104 - <p> 105 - The Angewandte presents research projects through several research-focus perspectives. 106 - These pages are useful when you are trying to understand how a project like yours might be framed, 107 - where comparable projects are located in the University, which funding programmes have been used, 108 - and which institutes or research environments have hosted related work. 109 - </p> 110 - 111 - <div class="research-example-grid"> 112 - 113 - <div class="research-example" style="border-top:4px solid #e94b13;"> 114 - <div class="eye" style="font-size:11px;color:#8a4d36;margin-bottom:5px;">ARTISTIC RESEARCH</div> 115 - <h4>Fokus Künstlerische Forschung</h4> 116 - <p> 117 - Examples of artistic and arts-based research projects at the Angewandte, including many projects 118 - funded through FWF PEEK and related programmes. Use this page to see how artistic practice, 119 - research questions, project leadership and institutional affiliation come together in funded projects. 120 - </p> 121 - <a href="https://dieangewandte.at/kunst_und_forschung/projekte_fokus_forschung/kuenstlerische_forschung" 122 - target="_blank" rel="noopener"> 123 - View artistic research projects ↗ 124 - </a> 125 - </div> 126 - 127 - <div class="research-example" style="border-top:4px solid #21b6d7;"> 128 - <div class="eye" style="font-size:11px;color:#3f6871;margin-bottom:5px;">SCIENTIFIC RESEARCH</div> 129 - <h4>Fokus Wissenschaftliche Forschung</h4> 130 - <p> 131 - Examples of scientific research across the University's institutes and fields, including FWF-funded 132 - basic research, ESPRIT projects and other externally funded research. Use this page to compare project types, 133 - hosts, funding programmes and disciplinary or interdisciplinary research settings. 134 - </p> 135 - <a href="https://dieangewandte.at/kunst_und_forschung/projekte_fokus_forschung/wissenschaftliche_forschung" 136 - target="_blank" rel="noopener"> 137 - View scientific research projects ↗ 138 - </a> 139 - </div> 140 - 141 - <div class="research-example" style="border-top:4px solid #38b76a;"> 142 - <div class="eye" style="font-size:11px;color:#4a6c53;margin-bottom:5px;">RELATIONAL / CROSS-CUTTING RESEARCH</div> 143 - <h4>Fokus Relationale Forschung</h4> 144 - <p> 145 - Examples of projects organised through specific calls, thematic relationships and cross-cutting research 146 - frameworks, including INTRA, digital and social transformation and research-infrastructure initiatives. 147 - Use this page when your project connects disciplines, infrastructures, institutions or thematic programmes. 148 - </p> 149 - <a href="https://dieangewandte.at/kunst_und_forschung/projekte_fokus_forschung/fokus_relationale_forschung" 150 - target="_blank" rel="noopener"> 151 - View relational research projects ↗ 152 - </a> 153 - </div> 154 - 155 - </div> 156 - 157 - <div class="info" style="margin-top:14px;"> 158 - <strong>How to use these examples:</strong> 159 - do not copy a project's structure simply because the topic looks similar. 160 - Compare the <strong>project type, host unit, funding programme, project lead, partners, duration and outputs</strong>. 161 - These are the elements that help you judge whether an existing project is a useful planning reference for your own proposal. 162 - </div> 163 -</section> 164 - 165 -<section class="sec"> 166 166 <div class="eye" style="color:#8a4d36;margin-bottom:4px">STEP 3 · WHO SHOULD I INVOLVE?</div> 167 167 <h3>Project-relevant structures of the Angewandte</h3> 168 168 <p>Not every project needs every unit. Use the trigger descriptions below.</p> ... ... @@ -415,14 +415,6 @@ 415 415 416 416 <div class="info" style="margin-bottom:14px"><strong>Need help structuring the project?</strong> For funded, artistic, scientific and arts-based research projects, Support Kunst und Forschung is a central coordination point. Bring a short project description, host unit, likely applicant, partners, duration, rough budget and the main things you need from the University.</div> 417 417 418 -<!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_START --> 419 -{{include reference="Service Navigator.Art & Research Services Navigator.Code.TrainingWorkshopsBlock" author="target" /}} 420 -<!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_END --> 421 - 422 -<!-- ARSN_PRACTICAL_RESOURCES_FALLBACK_V1_START --> 423 -{{include reference="Service Navigator.Art & Research Services Navigator.Code.PracticalResourcesFallbackBlock" author="target" /}} 424 -<!-- ARSN_PRACTICAL_RESOURCES_FALLBACK_V1_END --> 425 - 426 426 <!-- ARSN_SEARCH_TERMS_START --> 427 427 <details style="margin-top:24px;padding-top:10px;border-top:1px solid #e3ded6"> 428 428 <summary style="cursor:pointer;color:#6a655e;font-size:13px">Search terms & related topics</summary> ... ... @@ -433,1404 +433,3 @@ 433 433 </div> 434 434 {{/html}} 435 435 436 -{{html clean="false"}} 437 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 438 - 439 -<style data-sn-service-navigator-master="1"> 440 -/* ========================================================= 441 - MASTER TYPOGRAPHY 442 - ========================================================= */ 443 -#xwikicontent h1, 444 -#xwikicontent h2, 445 -#xwikicontent h3, 446 -#xwikicontent h4, 447 -#xwikicontent h5, 448 -#xwikicontent h6, 449 -#xwikicontent .box-title, 450 -#xwikicontent [role="heading"], 451 -#xwikicontent h1 a, 452 -#xwikicontent h2 a, 453 -#xwikicontent h3 a, 454 -#xwikicontent h4 a, 455 -#xwikicontent h5 a, 456 -#xwikicontent h6 a, 457 -#xwikicontent .box-title a, 458 -#xwikicontent [role="heading"] a{ 459 - text-align:left!important; 460 - text-justify:auto!important; 461 - word-spacing:normal!important; 462 -} 463 - 464 -/* ========================================================= 465 - COMING SOON / IN VORBEREITUNG 466 - ========================================================= */ 467 -.sn-coming-soon-badge{ 468 - display:inline-block; 469 - vertical-align:middle; 470 - margin-left:10px; 471 - padding:4px 8px; 472 - border-radius:14px; 473 - border:1px solid #efd9cc; 474 - background:#fff4ee; 475 - color:#8a4d36; 476 - font-size:11px; 477 - font-weight:700; 478 - letter-spacing:.055em; 479 - line-height:1.2; 480 - white-space:nowrap; 481 -} 482 - 483 -/* ========================================================= 484 - NATIVE / DETAIL CALLOUT GEOMETRY 485 - Preserve existing backgrounds. 486 - ========================================================= */ 487 -#xwikicontent .arsn-info, 488 -#xwikicontent .dmp-info, 489 -#xwikicontent .ido-info, 490 -#xwikicontent .pp-info, 491 -#xwikicontent .infomessage{ 492 - box-sizing:border-box!important; 493 - border-left:4px solid #21b6d7!important; 494 - border-radius:8px; 495 - text-align:left!important; 496 - word-spacing:normal!important; 497 -} 498 - 499 -#xwikicontent .arsn-warn, 500 -#xwikicontent .dmp-warn, 501 -#xwikicontent .ido-warn, 502 -#xwikicontent .pp-warn, 503 -#xwikicontent .warn, 504 -#xwikicontent .warning, 505 -#xwikicontent .warningmessage, 506 -#xwikicontent .errormessage{ 507 - box-sizing:border-box!important; 508 - border-left:4px solid #e94b13!important; 509 - border-radius:8px; 510 - text-align:left!important; 511 - word-spacing:normal!important; 512 -} 513 - 514 -[data-sn-master-equal-height], 515 -[data-sn-master-first-row]{ 516 - box-sizing:border-box; 517 -} 518 - 519 -/* ========================================================= 520 - FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS 521 - ========================================================= */ 522 -#xwikicontent .arsn-area-label[data-sn-three-line="1"]{ 523 - display:grid!important; 524 - grid-template-columns:minmax(0,1fr)!important; 525 - grid-auto-rows:auto!important; 526 - width:100%!important; 527 - max-width:none!important; 528 - box-sizing:border-box!important; 529 - justify-items:start!important; 530 - align-items:start!important; 531 - gap:2px!important; 532 - text-align:left!important; 533 - text-align-last:left!important; 534 - text-justify:auto!important; 535 - word-spacing:normal!important; 536 - white-space:normal!important; 537 -} 538 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number, 539 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title, 540 -#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{ 541 - display:block!important; 542 - width:100%!important; 543 - margin:0!important; 544 - text-align:left!important; 545 - text-align-last:left!important; 546 - text-justify:auto!important; 547 - word-spacing:normal!important; 548 - white-space:normal!important; 549 -} 550 -</style> 551 - 552 -<script data-sn-service-navigator-master="1"> 553 -(function(){ 554 - "use strict"; 555 - 556 - var PAGE_KIND="detail"; 557 - var PLACEHOLDER=false; 558 - var PLACEHOLDER_LABEL="COMING SOON"; 559 - 560 - var MOBILE_MAX=767; 561 - var ROW_TOLERANCE=6; 562 - var RESIZE_DEBOUNCE=220; 563 - 564 - var root= 565 - document.getElementById("xwikicontent")|| 566 - document.querySelector(".xwiki-rendering-content")|| 567 - document.querySelector("main")|| 568 - document.body; 569 - 570 - if(!root)return; 571 - 572 - var managedHeight=new Set(); 573 - var managedMargin=new Set(); 574 - var originalHeight=new WeakMap(); 575 - var originalMargin=new WeakMap(); 576 - 577 - var resizeTimer=0; 578 - var running=false; 579 - 580 - var THEMES=[ 581 - { 582 - name:"BLUE", 583 - accent:"#21b6d7", 584 - bg:"#eaf7fb", 585 - text:"#315d68", 586 - labels:[ 587 - "HIER STARTEN", 588 - "ENTSCHEIDEN", 589 - "ÜBERPRÜFEN & ANPASSEN", 590 - "START HERE", 591 - "DECIDE", 592 - "REVIEW & ADAPT" 593 - ] 594 - }, 595 - { 596 - name:"RED", 597 - accent:"#e94b13", 598 - bg:"#fff1ec", 599 - text:"#8a4d36", 600 - labels:[ 601 - "PLANEN & ORGANISIEREN", 602 - "ORGANISIEREN & DOKUMENTIEREN", 603 - "PUBLIZIEREN & PRÄSENTIEREN", 604 - "PLAN & ORGANISE", 605 - "PLAN & ORGANIZE", 606 - "ORGANISE & DOCUMENT", 607 - "ORGANIZE & DOCUMENT", 608 - "PUBLISH & PRESENT" 609 - ] 610 - }, 611 - { 612 - name:"YELLOW", 613 - accent:"#f0aa00", 614 - bg:"#fff8e7", 615 - text:"#785b17", 616 - labels:[ 617 - "SCHÜTZEN & KLÄREN", 618 - "STANDARDISIEREN & IDENTIFIZIEREN", 619 - "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 620 - "PROTECT & CLARIFY", 621 - "STANDARDISE & IDENTIFY", 622 - "STANDARDIZE & IDENTIFY", 623 - "OPEN, REUSE & MAKE FINDABLE" 624 - ] 625 - }, 626 - { 627 - name:"GREEN", 628 - accent:"#38b76a", 629 - bg:"#edf9f1", 630 - text:"#3f7451", 631 - labels:[ 632 - "INFRASTRUKTUR EINRICHTEN", 633 - "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 634 - "SPEICHERN & ZUGRIFF STEUERN", 635 - "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 636 - "SET UP INFRASTRUCTURE", 637 - "SET UP INFRASTRUCTURE & COLLABORATION", 638 - "STORE & CONTROL ACCESS", 639 - "REPOSITORY, PRESERVE & HAND OVER" 640 - ] 641 - } 642 - ]; 643 - 644 - function num(value){ 645 - var n=parseFloat(value); 646 - return Number.isFinite(n)?n:0; 647 - } 648 - 649 - function norm(value){ 650 - return String(value||"") 651 - .replace(/\s+/g," ") 652 - .trim() 653 - .toUpperCase(); 654 - } 655 - 656 - function visible(el){ 657 - if(!el||el.nodeType!==1)return false; 658 - 659 - var style=getComputedStyle(el); 660 - var rect=el.getBoundingClientRect(); 661 - 662 - return ( 663 - style.display!=="none"&& 664 - style.visibility!=="hidden"&& 665 - rect.width>20&& 666 - rect.height>4 667 - ); 668 - } 669 - 670 - function saveStyle(el,map,property){ 671 - if(map.has(el))return; 672 - 673 - map.set(el,{ 674 - value:el.style.getPropertyValue(property), 675 - priority:el.style.getPropertyPriority(property) 676 - }); 677 - } 678 - 679 - function restoreStyle(el,map,property){ 680 - var original=map.get(el); 681 - 682 - if(original&&original.value){ 683 - el.style.setProperty( 684 - property, 685 - original.value, 686 - original.priority||"" 687 - ); 688 - }else{ 689 - el.style.removeProperty(property); 690 - } 691 - } 692 - 693 - function resetRuntime(){ 694 - managedHeight.forEach(function(el){ 695 - restoreStyle( 696 - el, 697 - originalHeight, 698 - "min-height" 699 - ); 700 - el.removeAttribute( 701 - "data-sn-master-equal-height" 702 - ); 703 - }); 704 - 705 - managedMargin.forEach(function(el){ 706 - restoreStyle( 707 - el, 708 - originalMargin, 709 - "margin-top" 710 - ); 711 - el.removeAttribute( 712 - "data-sn-master-first-row" 713 - ); 714 - }); 715 - 716 - managedHeight.clear(); 717 - managedMargin.clear(); 718 - } 719 - 720 - function themeFor(text){ 721 - var value=norm(text); 722 - 723 - for(var i=0;i<THEMES.length;i++){ 724 - for(var j=0;j<THEMES[i].labels.length;j++){ 725 - var label=THEMES[i].labels[j]; 726 - 727 - if( 728 - value===label|| 729 - value.indexOf(label+" ")===0|| 730 - value.indexOf(label+" -")===0|| 731 - value.indexOf(label+" ·")===0 732 - ){ 733 - return THEMES[i]; 734 - } 735 - } 736 - } 737 - 738 - return null; 739 - } 740 - 741 - /* ======================================================= 742 - BORDERLESS FILLED RED/ORANGE CTA BUTTONS 743 - ======================================================= */ 744 - 745 - function colourDistance(a,b){ 746 - return Math.sqrt( 747 - Math.pow(a[0]-b[0],2)+ 748 - Math.pow(a[1]-b[1],2)+ 749 - Math.pow(a[2]-b[2],2) 750 - ); 751 - } 752 - 753 - function makeFilledRedOrangeCTAsBorderless(){ 754 - var RED_ORANGE=[233,75,19]; 755 - 756 - Array.from( 757 - root.querySelectorAll( 758 - 'a,button,[role="button"],input[type="submit"],input[type="button"]' 759 - ) 760 - ).forEach(function(el){ 761 - if(!visible(el))return; 762 - 763 - var style=getComputedStyle(el); 764 - var rgb=parseRGB(style.backgroundColor); 765 - 766 - if(!rgb)return; 767 - 768 - if( 769 - colourDistance( 770 - rgb, 771 - RED_ORANGE 772 - )>55 773 - ){ 774 - return; 775 - } 776 - 777 - var rect=el.getBoundingClientRect(); 778 - 779 - if( 780 - rect.width<80|| 781 - rect.height<24 782 - ){ 783 - return; 784 - } 785 - 786 - el.style.setProperty( 787 - "border", 788 - "none", 789 - "important" 790 - ); 791 - 792 - el.style.setProperty( 793 - "border-left", 794 - "none", 795 - "important" 796 - ); 797 - 798 - el.style.setProperty( 799 - "border-top", 800 - "none", 801 - "important" 802 - ); 803 - 804 - el.style.setProperty( 805 - "border-right", 806 - "none", 807 - "important" 808 - ); 809 - 810 - el.style.setProperty( 811 - "border-bottom", 812 - "none", 813 - "important" 814 - ); 815 - 816 - el.style.setProperty( 817 - "box-shadow", 818 - "none", 819 - "important" 820 - ); 821 - }); 822 - } 823 - 824 - /* ======================================================= 825 - FULL-WIDTH THREE-LINE AREA LABELS 826 - ======================================================= */ 827 - 828 - function compactText(value){ 829 - return String(value||"") 830 - .replace(/\s+/g," ") 831 - .trim(); 832 - } 833 - 834 - function makeThreeLineAreaLabels(){ 835 - Array.from( 836 - root.querySelectorAll( 837 - ".arsn-area-label" 838 - ) 839 - ).forEach(function(label){ 840 - if( 841 - label.getAttribute( 842 - "data-sn-three-line" 843 - )==="1" 844 - ){ 845 - return; 846 - } 847 - 848 - var number= 849 - label.querySelector( 850 - ":scope > .arsn-area-number" 851 - ); 852 - 853 - var action= 854 - label.querySelector( 855 - ":scope > .arsn-area-action" 856 - ); 857 - 858 - if( 859 - !number|| 860 - !action 861 - ){ 862 - return; 863 - } 864 - 865 - var clone= 866 - label.cloneNode(true); 867 - 868 - var cloneNumber= 869 - clone.querySelector( 870 - ":scope > .arsn-area-number" 871 - ); 872 - 873 - var cloneAction= 874 - clone.querySelector( 875 - ":scope > .arsn-area-action" 876 - ); 877 - 878 - if(cloneNumber){ 879 - cloneNumber.remove(); 880 - } 881 - 882 - if(cloneAction){ 883 - cloneAction.remove(); 884 - } 885 - 886 - var titleText= 887 - compactText( 888 - clone.textContent 889 - ); 890 - 891 - if(!titleText){ 892 - return; 893 - } 894 - 895 - var numberNode= 896 - number.cloneNode(true); 897 - 898 - var actionNode= 899 - action.cloneNode(true); 900 - 901 - var titleNode= 902 - document.createElement( 903 - "span" 904 - ); 905 - 906 - titleNode.className= 907 - "sn-area-label-title"; 908 - 909 - titleNode.textContent= 910 - titleText; 911 - 912 - while(label.firstChild){ 913 - label.removeChild( 914 - label.firstChild 915 - ); 916 - } 917 - 918 - label.appendChild( 919 - numberNode 920 - ); 921 - 922 - label.appendChild( 923 - titleNode 924 - ); 925 - 926 - label.appendChild( 927 - actionNode 928 - ); 929 - 930 - label.setAttribute( 931 - "data-sn-three-line", 932 - "1" 933 - ); 934 - 935 - var head= 936 - label.closest( 937 - ".arsn-area-head" 938 - ); 939 - 940 - if(head){ 941 - head.style.setProperty( 942 - "width", 943 - "100%", 944 - "important" 945 - ); 946 - 947 - head.style.setProperty( 948 - "max-width", 949 - "100%", 950 - "important" 951 - ); 952 - 953 - head.style.setProperty( 954 - "box-sizing", 955 - "border-box", 956 - "important" 957 - ); 958 - } 959 - }); 960 - } 961 - 962 - /* ======================================================= 963 - PLACEHOLDER BADGE 964 - ======================================================= */ 965 - 966 - function applyPlaceholderBadge(){ 967 - if(!PLACEHOLDER)return; 968 - 969 - if( 970 - document.querySelector( 971 - ".sn-coming-soon-badge" 972 - ) 973 - ){ 974 - return; 975 - } 976 - 977 - var title= 978 - document.querySelector( 979 - "#document-title" 980 - )|| 981 - document.querySelector( 982 - "h1" 983 - ); 984 - 985 - if(!title)return; 986 - 987 - var badge= 988 - document.createElement( 989 - "span" 990 - ); 991 - 992 - badge.className= 993 - "sn-coming-soon-badge"; 994 - 995 - badge.textContent= 996 - PLACEHOLDER_LABEL; 997 - 998 - badge.setAttribute( 999 - "aria-label", 1000 - PLACEHOLDER_LABEL 1001 - ); 1002 - 1003 - title.appendChild( 1004 - badge 1005 - ); 1006 - } 1007 - 1008 - /* ======================================================= 1009 - DETAIL PAGE OWN-ACCENT PROPAGATION 1010 - ======================================================= */ 1011 - 1012 - function parseRGB(value){ 1013 - var match=String(value||"").match( 1014 - /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 1015 - ); 1016 - 1017 - if(!match)return null; 1018 - 1019 - return [ 1020 - Number(match[1]), 1021 - Number(match[2]), 1022 - Number(match[3]) 1023 - ]; 1024 - } 1025 - 1026 - function distance(a,b){ 1027 - return Math.sqrt( 1028 - Math.pow(a[0]-b[0],2)+ 1029 - Math.pow(a[1]-b[1],2)+ 1030 - Math.pow(a[2]-b[2],2) 1031 - ); 1032 - } 1033 - 1034 - function paletteMatch(cssColor){ 1035 - var rgb=parseRGB(cssColor); 1036 - 1037 - if(!rgb)return null; 1038 - 1039 - var palette=[ 1040 - {hex:"#21b6d7",rgb:[33,182,215]}, 1041 - {hex:"#e94b13",rgb:[233,75,19]}, 1042 - {hex:"#f0aa00",rgb:[240,170,0]}, 1043 - {hex:"#38b76a",rgb:[56,183,106]} 1044 - ]; 1045 - 1046 - var best=null; 1047 - var bestDistance=Infinity; 1048 - 1049 - palette.forEach(function(item){ 1050 - var d=distance(rgb,item.rgb); 1051 - 1052 - if(d<bestDistance){ 1053 - best=item; 1054 - bestDistance=d; 1055 - } 1056 - }); 1057 - 1058 - return bestDistance<=30 1059 - ?best 1060 - :null; 1061 - } 1062 - 1063 - function propagateDetailAccents(){ 1064 - if(PAGE_KIND!=="detail")return; 1065 - 1066 - Array.from( 1067 - root.querySelectorAll( 1068 - ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 1069 - ".arsn-source,.dmp-source,.ido-source,.pp-source" 1070 - ) 1071 - ).forEach(function(el){ 1072 - if(!visible(el))return; 1073 - 1074 - var style=getComputedStyle(el); 1075 - 1076 - if( 1077 - num(style.borderTopWidth)>=2 1078 - ){ 1079 - var match= 1080 - paletteMatch( 1081 - style.borderTopColor 1082 - ); 1083 - 1084 - if(match){ 1085 - el.style.setProperty( 1086 - "border-left", 1087 - "4px solid "+match.hex, 1088 - "important" 1089 - ); 1090 - } 1091 - } 1092 - }); 1093 - 1094 - // Warning families: explicit safety override. 1095 - Array.from( 1096 - root.querySelectorAll( 1097 - ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 1098 - ".warn,.warning,.warningmessage,.errormessage" 1099 - ) 1100 - ).forEach(function(el){ 1101 - if(!visible(el))return; 1102 - 1103 - el.style.setProperty( 1104 - "border-left", 1105 - "4px solid #e94b13", 1106 - "important" 1107 - ); 1108 - }); 1109 - 1110 - // Info families: explicit orientation override. 1111 - Array.from( 1112 - root.querySelectorAll( 1113 - ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 1114 - ) 1115 - ).forEach(function(el){ 1116 - if(!visible(el))return; 1117 - 1118 - el.style.setProperty( 1119 - "border-left", 1120 - "4px solid #21b6d7", 1121 - "important" 1122 - ); 1123 - }); 1124 - } 1125 - 1126 - /* ======================================================= 1127 - OVERVIEW SEMANTIC THEME PALETTE 1128 - ======================================================= */ 1129 - 1130 - function smallestThemeHeaders(){ 1131 - return Array.from( 1132 - root.querySelectorAll( 1133 - "div,span,p,strong,h3,h4,h5,h6" 1134 - ) 1135 - ).filter(function(el){ 1136 - if(!visible(el))return false; 1137 - if(!themeFor(el.textContent))return false; 1138 - 1139 - return !Array.from( 1140 - el.children||[] 1141 - ).some(function(child){ 1142 - return !!themeFor( 1143 - child.textContent 1144 - ); 1145 - }); 1146 - }); 1147 - } 1148 - 1149 - function findOverviewCard(header){ 1150 - var node=header.parentElement; 1151 - var candidates=[]; 1152 - 1153 - while(node&&node!==root){ 1154 - var rect=node.getBoundingClientRect(); 1155 - var style=getComputedStyle(node); 1156 - 1157 - var border= 1158 - num(style.borderTopWidth)+ 1159 - num(style.borderRightWidth)+ 1160 - num(style.borderBottomWidth)+ 1161 - num(style.borderLeftWidth); 1162 - 1163 - if( 1164 - rect.width>=220&& 1165 - rect.width<=800&& 1166 - rect.height>=120&& 1167 - border>=1 1168 - ){ 1169 - candidates.push(node); 1170 - } 1171 - 1172 - node=node.parentElement; 1173 - } 1174 - 1175 - if(!candidates.length)return null; 1176 - 1177 - candidates.sort(function(a,b){ 1178 - return ( 1179 - b.getBoundingClientRect().height- 1180 - a.getBoundingClientRect().height 1181 - ); 1182 - }); 1183 - 1184 - return candidates[0]; 1185 - } 1186 - 1187 - function rowCandidates(link,card){ 1188 - var result=[]; 1189 - var cardRect= 1190 - card.getBoundingClientRect(); 1191 - 1192 - var node=link; 1193 - 1194 - while(node&&node!==card){ 1195 - if(visible(node)){ 1196 - var rect= 1197 - node.getBoundingClientRect(); 1198 - 1199 - if( 1200 - rect.height<=105&& 1201 - rect.width>= 1202 - cardRect.width*.50&& 1203 - rect.width<= 1204 - cardRect.width*1.03 1205 - ){ 1206 - result.push(node); 1207 - } 1208 - } 1209 - 1210 - node=node.parentElement; 1211 - } 1212 - 1213 - return result; 1214 - } 1215 - 1216 - function chooseOuterRow( 1217 - candidates, 1218 - link 1219 - ){ 1220 - if(!candidates.length){ 1221 - return link; 1222 - } 1223 - 1224 - var bordered= 1225 - candidates.filter(function(el){ 1226 - return ( 1227 - num( 1228 - getComputedStyle(el) 1229 - .borderLeftWidth 1230 - )>=1 1231 - ); 1232 - }); 1233 - 1234 - var pool= 1235 - bordered.length 1236 - ?bordered 1237 - :candidates; 1238 - 1239 - pool.sort(function(a,b){ 1240 - var ar= 1241 - a.getBoundingClientRect(); 1242 - 1243 - var br= 1244 - b.getBoundingClientRect(); 1245 - 1246 - return ( 1247 - ar.left-br.left|| 1248 - br.width-ar.width 1249 - ); 1250 - }); 1251 - 1252 - return pool[0]||link; 1253 - } 1254 - 1255 - function applyOverviewPalette(){ 1256 - if(PAGE_KIND!=="overview"){ 1257 - return []; 1258 - } 1259 - 1260 - var headers= 1261 - smallestThemeHeaders() 1262 - .map(function(el){ 1263 - return { 1264 - el:el, 1265 - theme: 1266 - themeFor( 1267 - el.textContent 1268 - ), 1269 - card: 1270 - findOverviewCard( 1271 - el 1272 - ) 1273 - }; 1274 - }) 1275 - .filter(function(row){ 1276 - return !!row.card; 1277 - }); 1278 - 1279 - var unique=[]; 1280 - var seenHeaders=new Set(); 1281 - 1282 - headers.forEach(function(row){ 1283 - var key= 1284 - row.theme.name+ 1285 - "|"+ 1286 - Math.round( 1287 - row.card 1288 - .getBoundingClientRect() 1289 - .left 1290 - )+ 1291 - "|"+ 1292 - Math.round( 1293 - row.el 1294 - .getBoundingClientRect() 1295 - .top 1296 - ); 1297 - 1298 - if(!seenHeaders.has(key)){ 1299 - seenHeaders.add(key); 1300 - unique.push(row); 1301 - } 1302 - }); 1303 - 1304 - unique.forEach(function(row){ 1305 - var headerRect= 1306 - row.el 1307 - .getBoundingClientRect(); 1308 - 1309 - row.el.style.setProperty( 1310 - "background", 1311 - row.theme.bg, 1312 - "important" 1313 - ); 1314 - 1315 - row.el.style.setProperty( 1316 - "color", 1317 - row.theme.text, 1318 - "important" 1319 - ); 1320 - 1321 - row.el.style.setProperty( 1322 - "text-align", 1323 - "left", 1324 - "important" 1325 - ); 1326 - 1327 - row.el.style.setProperty( 1328 - "word-spacing", 1329 - "normal", 1330 - "important" 1331 - ); 1332 - 1333 - var later= 1334 - unique 1335 - .filter(function(other){ 1336 - return ( 1337 - other.card===row.card&& 1338 - other.el 1339 - .getBoundingClientRect() 1340 - .top> 1341 - headerRect.top+2 1342 - ); 1343 - }) 1344 - .sort(function(a,b){ 1345 - return ( 1346 - a.el 1347 - .getBoundingClientRect() 1348 - .top- 1349 - b.el 1350 - .getBoundingClientRect() 1351 - .top 1352 - ); 1353 - }); 1354 - 1355 - var stopTop= 1356 - later.length 1357 - ?later[0].el 1358 - .getBoundingClientRect() 1359 - .top 1360 - :Infinity; 1361 - 1362 - Array.from( 1363 - row.card.querySelectorAll("a") 1364 - ).forEach(function(link){ 1365 - if(!visible(link))return; 1366 - 1367 - var rect= 1368 - link.getBoundingClientRect(); 1369 - 1370 - if( 1371 - rect.top<= 1372 - headerRect.bottom-2|| 1373 - rect.top>= 1374 - stopTop-2 1375 - ){ 1376 - return; 1377 - } 1378 - 1379 - var candidates= 1380 - rowCandidates( 1381 - link, 1382 - row.card 1383 - ); 1384 - 1385 - var target= 1386 - chooseOuterRow( 1387 - candidates, 1388 - link 1389 - ); 1390 - 1391 - candidates.forEach(function(el){ 1392 - el.style.setProperty( 1393 - "border-left", 1394 - "0 solid transparent", 1395 - "important" 1396 - ); 1397 - }); 1398 - 1399 - target.style.setProperty( 1400 - "border-left", 1401 - "3px solid "+ 1402 - row.theme.accent, 1403 - "important" 1404 - ); 1405 - 1406 - target.style.setProperty( 1407 - "box-sizing", 1408 - "border-box", 1409 - "important" 1410 - ); 1411 - }); 1412 - }); 1413 - 1414 - return unique; 1415 - } 1416 - 1417 - /* ======================================================= 1418 - OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 1419 - ======================================================= */ 1420 - 1421 - function alignOverviewCards(headers){ 1422 - if( 1423 - PAGE_KIND!=="overview"|| 1424 - window.innerWidth<=MOBILE_MAX 1425 - ){ 1426 - return; 1427 - } 1428 - 1429 - var cards=[]; 1430 - var seen=new Set(); 1431 - 1432 - headers.forEach(function(row){ 1433 - if(!seen.has(row.card)){ 1434 - seen.add(row.card); 1435 - cards.push(row.card); 1436 - } 1437 - }); 1438 - 1439 - if(cards.length<2){ 1440 - return; 1441 - } 1442 - 1443 - // Group cards by actual top position. 1444 - var groups=[]; 1445 - 1446 - cards.forEach(function(card){ 1447 - var top= 1448 - card.getBoundingClientRect().top; 1449 - 1450 - var group=null; 1451 - 1452 - for(var i=0;i<groups.length;i++){ 1453 - if( 1454 - Math.abs( 1455 - groups[i].top-top 1456 - )<=ROW_TOLERANCE 1457 - ){ 1458 - group=groups[i]; 1459 - break; 1460 - } 1461 - } 1462 - 1463 - if(!group){ 1464 - group={ 1465 - top:top, 1466 - cards:[] 1467 - }; 1468 - groups.push(group); 1469 - } 1470 - 1471 - group.cards.push(card); 1472 - }); 1473 - 1474 - groups.forEach(function(group){ 1475 - if(group.cards.length<2){ 1476 - return; 1477 - } 1478 - 1479 - var firstHeaders= 1480 - group.cards.map(function(card){ 1481 - var candidates= 1482 - headers 1483 - .filter(function(row){ 1484 - return row.card===card; 1485 - }) 1486 - .sort(function(a,b){ 1487 - return ( 1488 - a.el 1489 - .getBoundingClientRect() 1490 - .top- 1491 - b.el 1492 - .getBoundingClientRect() 1493 - .top 1494 - ); 1495 - }); 1496 - 1497 - return candidates.length 1498 - ?candidates[0] 1499 - :null; 1500 - }); 1501 - 1502 - if( 1503 - !firstHeaders.some(function(row){ 1504 - return !row; 1505 - }) 1506 - ){ 1507 - var targetTop= 1508 - Math.max.apply( 1509 - Math, 1510 - firstHeaders.map(function(row){ 1511 - return ( 1512 - row.el 1513 - .getBoundingClientRect() 1514 - .top- 1515 - row.card 1516 - .getBoundingClientRect() 1517 - .top 1518 - ); 1519 - }) 1520 - ); 1521 - 1522 - firstHeaders.forEach(function(row){ 1523 - var relativeTop= 1524 - row.el 1525 - .getBoundingClientRect() 1526 - .top- 1527 - row.card 1528 - .getBoundingClientRect() 1529 - .top; 1530 - 1531 - var delta= 1532 - targetTop-relativeTop; 1533 - 1534 - if(delta>1){ 1535 - saveStyle( 1536 - row.el, 1537 - originalMargin, 1538 - "margin-top" 1539 - ); 1540 - 1541 - var current= 1542 - num( 1543 - getComputedStyle( 1544 - row.el 1545 - ).marginTop 1546 - ); 1547 - 1548 - row.el.style.setProperty( 1549 - "margin-top", 1550 - ( 1551 - current+delta 1552 - )+"px" 1553 - ); 1554 - 1555 - row.el.setAttribute( 1556 - "data-sn-master-first-row", 1557 - "1" 1558 - ); 1559 - 1560 - managedMargin.add( 1561 - row.el 1562 - ); 1563 - } 1564 - }); 1565 - } 1566 - 1567 - var maxHeight=0; 1568 - 1569 - group.cards.forEach(function(card){ 1570 - maxHeight= 1571 - Math.max( 1572 - maxHeight, 1573 - card 1574 - .getBoundingClientRect() 1575 - .height 1576 - ); 1577 - }); 1578 - 1579 - maxHeight= 1580 - Math.ceil(maxHeight); 1581 - 1582 - group.cards.forEach(function(card){ 1583 - saveStyle( 1584 - card, 1585 - originalHeight, 1586 - "min-height" 1587 - ); 1588 - 1589 - card.style.setProperty( 1590 - "min-height", 1591 - maxHeight+"px" 1592 - ); 1593 - 1594 - card.setAttribute( 1595 - "data-sn-master-equal-height", 1596 - "1" 1597 - ); 1598 - 1599 - managedHeight.add( 1600 - card 1601 - ); 1602 - }); 1603 - }); 1604 - } 1605 - 1606 - /* ======================================================= 1607 - DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 1608 - ======================================================= */ 1609 - 1610 - function equaliseDetailGrids(){ 1611 - if( 1612 - PAGE_KIND!=="detail"|| 1613 - window.innerWidth<=MOBILE_MAX 1614 - ){ 1615 - return; 1616 - } 1617 - 1618 - var selectors=[ 1619 - ".arsn-grid", 1620 - ".arsn-grid-2", 1621 - ".arsn-grid-3", 1622 - ".dmp-grid", 1623 - ".ido-grid", 1624 - ".pp-grid" 1625 - ]; 1626 - 1627 - selectors.forEach(function(selector){ 1628 - Array.from( 1629 - root.querySelectorAll(selector) 1630 - ).forEach(function(grid){ 1631 - var children= 1632 - Array.from( 1633 - grid.children||[] 1634 - ).filter(visible); 1635 - 1636 - if(children.length<2){ 1637 - return; 1638 - } 1639 - 1640 - var groups=[]; 1641 - 1642 - children.forEach(function(child){ 1643 - var top= 1644 - child 1645 - .getBoundingClientRect() 1646 - .top; 1647 - 1648 - var group=null; 1649 - 1650 - for(var i=0;i<groups.length;i++){ 1651 - if( 1652 - Math.abs( 1653 - groups[i].top-top 1654 - )<=ROW_TOLERANCE 1655 - ){ 1656 - group=groups[i]; 1657 - break; 1658 - } 1659 - } 1660 - 1661 - if(!group){ 1662 - group={ 1663 - top:top, 1664 - items:[] 1665 - }; 1666 - groups.push(group); 1667 - } 1668 - 1669 - group.items.push(child); 1670 - }); 1671 - 1672 - groups.forEach(function(group){ 1673 - if(group.items.length<2){ 1674 - return; 1675 - } 1676 - 1677 - var maxHeight=0; 1678 - 1679 - group.items.forEach(function(item){ 1680 - maxHeight= 1681 - Math.max( 1682 - maxHeight, 1683 - item 1684 - .getBoundingClientRect() 1685 - .height 1686 - ); 1687 - }); 1688 - 1689 - maxHeight= 1690 - Math.ceil(maxHeight); 1691 - 1692 - group.items.forEach(function(item){ 1693 - saveStyle( 1694 - item, 1695 - originalHeight, 1696 - "min-height" 1697 - ); 1698 - 1699 - item.style.setProperty( 1700 - "min-height", 1701 - maxHeight+"px" 1702 - ); 1703 - 1704 - item.setAttribute( 1705 - "data-sn-master-equal-height", 1706 - "1" 1707 - ); 1708 - 1709 - managedHeight.add(item); 1710 - }); 1711 - }); 1712 - }); 1713 - }); 1714 - } 1715 - 1716 - /* ======================================================= 1717 - RUN / RESPONSIVE SCHEDULING 1718 - ======================================================= */ 1719 - 1720 - function run(){ 1721 - if(running)return; 1722 - 1723 - running=true; 1724 - 1725 - try{ 1726 - resetRuntime(); 1727 - applyPlaceholderBadge(); 1728 - propagateDetailAccents(); 1729 - 1730 - var headers= 1731 - applyOverviewPalette(); 1732 - 1733 - makeThreeLineAreaLabels(); 1734 - makeFilledRedOrangeCTAsBorderless(); 1735 - 1736 - if( 1737 - window.innerWidth> 1738 - MOBILE_MAX 1739 - ){ 1740 - alignOverviewCards( 1741 - headers 1742 - ); 1743 - 1744 - equaliseDetailGrids(); 1745 - } 1746 - }finally{ 1747 - running=false; 1748 - } 1749 - } 1750 - 1751 - function onResize(){ 1752 - if(resizeTimer){ 1753 - clearTimeout( 1754 - resizeTimer 1755 - ); 1756 - } 1757 - 1758 - resizeTimer= 1759 - setTimeout( 1760 - function(){ 1761 - resizeTimer=0; 1762 - run(); 1763 - }, 1764 - RESIZE_DEBOUNCE 1765 - ); 1766 - } 1767 - 1768 - async function waitForReady(){ 1769 - if( 1770 - document.readyState!=="complete" 1771 - ){ 1772 - await new Promise(function(resolve){ 1773 - window.addEventListener( 1774 - "load", 1775 - resolve, 1776 - {once:true} 1777 - ); 1778 - }); 1779 - } 1780 - 1781 - if( 1782 - document.fonts&& 1783 - document.fonts.ready 1784 - ){ 1785 - try{ 1786 - await document.fonts.ready; 1787 - }catch(error){} 1788 - } 1789 - 1790 - var images= 1791 - Array.from( 1792 - root.querySelectorAll("img") 1793 - ); 1794 - 1795 - await Promise.all( 1796 - images.map(function(img){ 1797 - if(img.complete){ 1798 - return Promise.resolve(); 1799 - } 1800 - 1801 - return new Promise(function(resolve){ 1802 - var done=function(){ 1803 - resolve(); 1804 - }; 1805 - 1806 - img.addEventListener( 1807 - "load", 1808 - done, 1809 - {once:true} 1810 - ); 1811 - 1812 - img.addEventListener( 1813 - "error", 1814 - done, 1815 - {once:true} 1816 - ); 1817 - }); 1818 - }) 1819 - ); 1820 - 1821 - run(); 1822 - } 1823 - 1824 - window.addEventListener( 1825 - "resize", 1826 - onResize, 1827 - {passive:true} 1828 - ); 1829 - 1830 - waitForReady(); 1831 -})(); 1832 -</script> 1833 - 1834 -<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 1835 -{{/html}} 1836 -