Last modified by Veronika Kocher on Friday, 04 Sep 2026 14:45

From version 5.14
edited by Veronika Kocher
on Friday, 04 Sep 2026 14:23
Change comment: There is no comment for this version
To version 5.7
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 13:13
Change comment: There is no comment for this version

Summary

Details

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