Changes for page Plan Your Data Management

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

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