Changes for page Plan Your Data Management

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

From version 4.7
edited by Veronika Kocher
on Wednesday, 02 Sep 2026 15:23
Change comment: There is no comment for this version
To version 4.15
edited by Veronika Kocher
on Friday, 04 Sep 2026 14:45
Change comment: There is no comment for this version

Summary

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">ENABLE · DATA MANAGEMENT PLAN</div>
29 +<div class="dmp-eye" style="color:#8a4d36;margin-bottom:5px">PREPARE · 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,6 +247,31 @@
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 &amp; WORKSHOPS</div>
254 + <h3 style="font-size:20px;line-height:1.3;margin:0 0 7px;color:#35312d;text-align:left;">Training, workshops &amp; 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 &amp; 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 +
250 250  <!-- ARSN_SEARCH_TERMS_START -->
251 251  <details style="margin-top:24px;padding-top:10px;border-top:1px solid #e3ded6">
252 252  <summary style="cursor:pointer;color:#6a655e;font-size:13px">Search terms &amp; related topics</summary>
... ... @@ -257,3 +257,1404 @@
257 257  </div>
258 258  {{/html}}
259 259  
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 +