Plan Your Data Management
.dmp{max-width:1400px;margin:0 auto;color:#322f2b}.dmp *{box-sizing:border-box}
.dmp-card{border:1px solid #e3ded6;border-radius:11px;background:#fcfbf8;box-shadow:0 1px 3px rgba(0,0,0,.035)}
.dmp-eye{font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase}
.dmp-hero{height:125px;overflow:hidden;background:#f1eee9}.dmp-hero img{width:100%;height:100%;object-fit:cover;object-position:center 48%;display:block}
.dmp-sec{margin:0 0 30px}.dmp-sec h3{font-size:22px;margin:0 0 7px;color:#35312d}.dmp-sec>p{color:#6a655e;line-height:1.58;max-width:1180px}
.dmp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:14px}
.dmp-box{padding:15px 16px;border:1px solid #e3ded6;border-radius:9px;background:#fcfbf8}.dmp-box h4{font-size:17px;margin:0 0 6px;color:#35312d}.dmp-box p{margin:0;color:#625d56;line-height:1.5}.dmp-box ul{margin:8px 0 0 19px;padding:0;color:#625d56;line-height:1.5}
.dmp-check{position:relative;padding:12px 13px 12px 37px;border:1px solid #e3ded6;border-radius:8px;background:#fffdf9;color:#504a44;line-height:1.5}.dmp-check:before{content:"✓";position:absolute;left:13px;top:10px;color:#e94b13;font-weight:800}
.dmp-info{padding:15px 17px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#eaf6f9;border-radius:8px;color:#365e68;line-height:1.55}.dmp-info strong{color:#2d5661}
.dmp-warn{padding:15px 17px;border:1px solid #efd9cc;border-left:5px solid #e94b13;background:#fff6f1;border-radius:8px;color:#67564e;line-height:1.55}.dmp-warn strong{color:#744531}
.dmp-rights{padding:15px 17px;border:1px solid #efdca7;border-left:5px solid #f0aa00;background:#fff9e9;border-radius:8px;color:#665a38;line-height:1.55}.dmp-rights strong{color:#6d571c}
.dmp-store{padding:15px 17px;border:1px solid #cfe8d8;border-left:5px solid #38b76a;background:#eff9f2;border-radius:8px;color:#45614e;line-height:1.55}.dmp-store strong{color:#35543f}
.dmp-tablewrap{overflow-x:auto;border-radius:9px}.dmp-tbl{width:100%;border-collapse:collapse;background:#fffdf9;min-width:820px}.dmp-tbl th,.dmp-tbl td{border:1px solid #e3ded6;padding:10px 11px;vertical-align:top;text-align:left;line-height:1.45}.dmp-tbl th{background:#f3efe8;color:#403b36}.dmp-tbl td{color:#56504a}
.dmp-step{padding:15px 16px;border:1px solid #e3ded6;border-top:4px solid #e94b13;border-radius:9px;background:#fcfbf8}.dmp-step .n{font-size:12px;font-weight:800;color:#8a4d36;letter-spacing:.06em}.dmp-step h4{font-size:17px;margin:3px 0 6px;color:#35312d}.dmp-step p{margin:0;color:#625d56;line-height:1.5}
.dmp-service{display:block;padding:14px 15px;border:1px solid #e3ded6;border-radius:9px;background:#fcfbf8;color:#322f2b;text-decoration:none}.dmp-service:hover,.dmp-service:focus{background:#fffdf9;text-decoration:none}.dmp-service strong{display:block;margin-bottom:4px}.dmp-service span{display:block;color:#625d56;line-height:1.45;font-weight:400}
.dmp-linkgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:8px}.dmp-navlink{display:block;padding:10px 11px;border:1px solid #e9e4dc;border-left:3px solid #e94b13;border-radius:6px;background:#fffdf9;color:#252321;text-decoration:none;font-weight:600;line-height:1.35}.dmp-navlink:hover,.dmp-navlink:focus{background:#fff7f1;text-decoration:none}
.dmp-chip{display:inline-block;padding:4px 8px;margin:3px 4px 3px 0;border-radius:14px;background:#f3efe8;border:1px solid #e3ded6;color:#5c5650;font-size:12px;text-decoration:none}
@media(max-width:680px){.dmp-hero{height:105px}.dmp-sec h3{font-size:20px}}
Interactive Art & Research DMP Tool
A local form will connect the eleven core DMP questions with funder-specific requirements and export DMPs as PDF, JSON, YAML and Markdown. Funder profiles are maintained separately from the tool so that FWF, Horizon Europe, ERC or FFG requirements can be updated without reprogramming the form.
Open DMP Tool ↗ COMING SOONDecide what your DMP needs to cover
Your DMP should follow the real project, not an abstract template. Begin with the project structure, funding requirements and the material types you have already identified.
Project & plan identity
Project title, lead, host unit, partners, funding programme, project dates, DMP owner, DMP version and last review date.
Data, materials & outputs
What will be created, collected, commissioned or reused; expected formats, physical carriers, scale, dependencies and master versions.
Roles & responsibilities
Who creates, documents, stores, backs up, controls access, approves sharing, deposits outputs and completes handover.
Storage, backup & access
Working locations, authoritative copies, backup routine, recovery, access groups, account ownership and security requirements.
Organisation & versioning
Folder structure, naming, version conventions, master files, working copies, export formats and change control.
Metadata, provenance & documentation
What information is needed to understand origin, creator, context, method, transformation, relationships, software and versions.
Rights, ethics & protection
Copyright, licences, consent, personal data, confidentiality, contracts, community or cultural protocols and restrictions.
Sharing, publication & reuse
What can be shared, with whom, when, under which licence, through which repository/platform and with what documentation.
Retention, preservation & disposal
What should remain after project end, what can be deleted, retention periods, preservation formats, repository/archive and handover.
Resources & costs
Storage, specialist software, digitisation, transcription, metadata work, repository fees, preservation, staff time and other data-management costs.
Record decisions that the team can actually follow
A useful first DMP can be short. The important thing is that it names responsibilities and turns assumptions into explicit decisions.
| Question | Minimum decision to record | Responsible / review point |
|---|---|---|
| What are we managing? | Material/data/output types, origin, formats, physical carriers, approximate quantity or expected growth. | Project lead + person closest to the material. |
| Where is active work stored? | Approved working location and location of the authoritative/master copy. | Data/documentation responsibility; review when infrastructure changes. |
| How is it backed up? | Backup location, frequency, responsibility and how recovery is checked. | Named owner; test before critical production/publication stages. |
| Who can access what? | Access groups, account ownership, restrictions and process for adding/removing people. | Project lead / system owner; review when staff or partners change. |
| How are files and versions organised? | Folder structure, file naming, version convention, master/working/derivative distinction. | Team-wide rule; review when workflows become unclear. |
| What documentation is required? | Minimum metadata, provenance, README/context documentation, technical dependencies and relationships. | Creator + documentation owner. |
| What is sensitive or restricted? | Personal/confidential/culturally sensitive material, consent status, legal or contractual restrictions and required protection. | Project lead with specialist advice where needed. |
| What rights apply? | Ownership, third-party material, licences, permissions and unresolved rights questions. | Project lead / rights responsibility; resolve before publication. |
| What will be shared or published? | Outputs/materials to share, access level, timing, licence, repository/platform and exceptions. | Project lead + output owner. |
| What happens at project end? | Keep, deposit, preserve, hand over or delete; final owner; access closure; retention period if applicable. | Named closure owner; confirm before final reporting. |
| When is the DMP reviewed? | Planned review dates plus event-based triggers. | DMP owner. |
Review the DMP when a decision actually changes
Do not update the plan only because a calendar reminder appears. Use scheduled reviews, but also connect reviews to concrete project events.
Proposal / award / project start
Align the working plan with the submitted proposal, funder requirements, approved budget, staffing, partners and actual infrastructure.
New material or method
Update the DMP when new datasets, media types, software, equipment, participants, collections or documentation workflows are introduced.
People or partner changes
Recheck access, account ownership, responsibilities, handover, agreements and where authoritative copies are held.
Before publication / exhibition / sharing
Confirm rights, consent, personal-data handling, metadata, file quality, access level, licence and repository/platform route.
Before project closure
Decide what is retained, deposited, preserved, deleted or transferred; close obsolete access and document final responsibilities.
Work from the actual template, call and binding project conditions
Your internal working DMP can be broader than the formal funder template. For a funded project, however, the current DMP template, the specific call or call guide, the funding agreement or Grant Agreement and the deadlines stated there are decisive. The links below therefore point directly to DMP-relevant documents or document areas.
FWF
For the relevant approved FWF projects, the DMP is required for project start, is submitted with the funding agreement, uses the same language as the proposal, is versioned throughout the project and is submitted in its final version with the final project report.
Horizon Europe
Research Data Management is a mandatory Open Science practice for projects generating or reusing research data. The detailed DMP is normally a deliverable by month 6 and is maintained as a living document.
- DMP Reporting Template – Funding & Tenders Reference Documents ↗
Under “Templates & Forms” → “Project reporting templates”. - Annotated Grant Agreement – DMP and Open Science obligations ↗
- REA Open Science Q&A – DMP, repositories & access restrictions ↗
- Horizon Europe Programme Guide – Open Science / RDM ↗
ERC · Horizon Europe
Horizon Europe-funded ERC projects include Research Data Management as a work package. The DMP is due no later than the end of project month 6; the ERC guidance also addresses dissemination level, FAIR, resources and data security.
ERC – Open Science in ERC Projects: RDM work package, DMP deadline & template ↗
FFG · always check the specific call
For FFG funding, DMP rules are call- and instrument-specific. Record the URL of the actual call, the version/date of the guide and whether a DMP is mandatory at submission, mandatory during the project/reporting, recommended or not required.
FFG – current Basisprogramme call documents 2025/26 ↗
For other FFG programmes, always use the current programme/call page and the guide linked there.
A plan is useful only if it points to actual places, rules and people
Who to involve at the Angewandte
Use specialist support where the DMP reveals a real requirement. Not every project needs every service.
Turn each DMP decision into the next practical step
Search terms & related topics
/* =========================================================
MASTER TYPOGRAPHY
========================================================= */
#xwikicontent h1,
#xwikicontent h2,
#xwikicontent h3,
#xwikicontent h4,
#xwikicontent h5,
#xwikicontent h6,
#xwikicontent .box-title,
#xwikicontent [role="heading"],
#xwikicontent h1 a,
#xwikicontent h2 a,
#xwikicontent h3 a,
#xwikicontent h4 a,
#xwikicontent h5 a,
#xwikicontent h6 a,
#xwikicontent .box-title a,
#xwikicontent [role="heading"] a{
text-align:left!important;
text-justify:auto!important;
word-spacing:normal!important;
}
/* =========================================================
COMING SOON / IN VORBEREITUNG
========================================================= */
.sn-coming-soon-badge{
display:inline-block;
vertical-align:middle;
margin-left:10px;
padding:4px 8px;
border-radius:14px;
border:1px solid #efd9cc;
background:#fff4ee;
color:#8a4d36;
font-size:11px;
font-weight:700;
letter-spacing:.055em;
line-height:1.2;
white-space:nowrap;
}
/* =========================================================
NATIVE / DETAIL CALLOUT GEOMETRY
Preserve existing backgrounds.
========================================================= */
#xwikicontent .arsn-info,
#xwikicontent .dmp-info,
#xwikicontent .ido-info,
#xwikicontent .pp-info,
#xwikicontent .infomessage{
box-sizing:border-box!important;
border-left:4px solid #21b6d7!important;
border-radius:8px;
text-align:left!important;
word-spacing:normal!important;
}
#xwikicontent .arsn-warn,
#xwikicontent .dmp-warn,
#xwikicontent .ido-warn,
#xwikicontent .pp-warn,
#xwikicontent .warn,
#xwikicontent .warning,
#xwikicontent .warningmessage,
#xwikicontent .errormessage{
box-sizing:border-box!important;
border-left:4px solid #e94b13!important;
border-radius:8px;
text-align:left!important;
word-spacing:normal!important;
}
[data-sn-master-equal-height],
[data-sn-master-first-row]{
box-sizing:border-box;
}
/* =========================================================
FULL-WIDTH THREE-LINE NUMBER / TITLE / SUBTITLE BLOCKS
========================================================= */
#xwikicontent .arsn-area-label[data-sn-three-line="1"]{
display:grid!important;
grid-template-columns:minmax(0,1fr)!important;
grid-auto-rows:auto!important;
width:100%!important;
max-width:none!important;
box-sizing:border-box!important;
justify-items:start!important;
align-items:start!important;
gap:2px!important;
text-align:left!important;
text-align-last:left!important;
text-justify:auto!important;
word-spacing:normal!important;
white-space:normal!important;
}
#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-number,
#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .sn-area-label-title,
#xwikicontent .arsn-area-label[data-sn-three-line="1"] > .arsn-area-action{
display:block!important;
width:100%!important;
margin:0!important;
text-align:left!important;
text-align-last:left!important;
text-justify:auto!important;
word-spacing:normal!important;
white-space:normal!important;
}
(function(){
"use strict";
var PAGE_KIND="detail";
var PLACEHOLDER=false;
var PLACEHOLDER_LABEL="COMING SOON";
var MOBILE_MAX=767;
var ROW_TOLERANCE=6;
var RESIZE_DEBOUNCE=220;
var root=
document.getElementById("xwikicontent")||
document.querySelector(".xwiki-rendering-content")||
document.querySelector("main")||
document.body;
if(!root)return;
var managedHeight=new Set();
var managedMargin=new Set();
var originalHeight=new WeakMap();
var originalMargin=new WeakMap();
var resizeTimer=0;
var running=false;
var THEMES=[
{
name:"BLUE",
accent:"#21b6d7",
bg:"#eaf7fb",
text:"#315d68",
labels:[
"HIER STARTEN",
"ENTSCHEIDEN",
"ÜBERPRÜFEN & ANPASSEN",
"START HERE",
"DECIDE",
"REVIEW & ADAPT"
]
},
{
name:"RED",
accent:"#e94b13",
bg:"#fff1ec",
text:"#8a4d36",
labels:[
"PLANEN & ORGANISIEREN",
"ORGANISIEREN & DOKUMENTIEREN",
"PUBLIZIEREN & PRÄSENTIEREN",
"PLAN & ORGANISE",
"PLAN & ORGANIZE",
"ORGANISE & DOCUMENT",
"ORGANIZE & DOCUMENT",
"PUBLISH & PRESENT"
]
},
{
name:"YELLOW",
accent:"#f0aa00",
bg:"#fff8e7",
text:"#785b17",
labels:[
"SCHÜTZEN & KLÄREN",
"STANDARDISIEREN & IDENTIFIZIEREN",
"ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN",
"PROTECT & CLARIFY",
"STANDARDISE & IDENTIFY",
"STANDARDIZE & IDENTIFY",
"OPEN, REUSE & MAKE FINDABLE"
]
},
{
name:"GREEN",
accent:"#38b76a",
bg:"#edf9f1",
text:"#3f7451",
labels:[
"INFRASTRUKTUR EINRICHTEN",
"INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN",
"SPEICHERN & ZUGRIFF STEUERN",
"REPOSITORIUM, ERHALTEN & ÜBERGEBEN",
"SET UP INFRASTRUCTURE",
"SET UP INFRASTRUCTURE & COLLABORATION",
"STORE & CONTROL ACCESS",
"REPOSITORY, PRESERVE & HAND OVER"
]
}
];
function num(value){
var n=parseFloat(value);
return Number.isFinite(n)?n:0;
}
function norm(value){
return String(value||"")
.replace(/\s+/g," ")
.trim()
.toUpperCase();
}
function visible(el){
if(!el||el.nodeType!==1)return false;
var style=getComputedStyle(el);
var rect=el.getBoundingClientRect();
return (
style.display!=="none"&&
style.visibility!=="hidden"&&
rect.width>20&&
rect.height>4
);
}
function saveStyle(el,map,property){
if(map.has(el))return;
map.set(el,{
value:el.style.getPropertyValue(property),
priority:el.style.getPropertyPriority(property)
});
}
function restoreStyle(el,map,property){
var original=map.get(el);
if(original&&original.value){
el.style.setProperty(
property,
original.value,
original.priority||""
);
}else{
el.style.removeProperty(property);
}
}
function resetRuntime(){
managedHeight.forEach(function(el){
restoreStyle(
el,
originalHeight,
"min-height"
);
el.removeAttribute(
"data-sn-master-equal-height"
);
});
managedMargin.forEach(function(el){
restoreStyle(
el,
originalMargin,
"margin-top"
);
el.removeAttribute(
"data-sn-master-first-row"
);
});
managedHeight.clear();
managedMargin.clear();
}
function themeFor(text){
var value=norm(text);
for(var i=0;i55
){
return;
}
var rect=el.getBoundingClientRect();
if(
rect.width<80||
rect.height<24
){
return;
}
el.style.setProperty(
"border",
"none",
"important"
);
el.style.setProperty(
"border-left",
"none",
"important"
);
el.style.setProperty(
"border-top",
"none",
"important"
);
el.style.setProperty(
"border-right",
"none",
"important"
);
el.style.setProperty(
"border-bottom",
"none",
"important"
);
el.style.setProperty(
"box-shadow",
"none",
"important"
);
});
}
/* =======================================================
FULL-WIDTH THREE-LINE AREA LABELS
======================================================= */
function compactText(value){
return String(value||"")
.replace(/\s+/g," ")
.trim();
}
function makeThreeLineAreaLabels(){
Array.from(
root.querySelectorAll(
".arsn-area-label"
)
).forEach(function(label){
if(
label.getAttribute(
"data-sn-three-line"
)==="1"
){
return;
}
var number=
label.querySelector(
":scope > .arsn-area-number"
);
var action=
label.querySelector(
":scope > .arsn-area-action"
);
if(
!number||
!action
){
return;
}
var clone=
label.cloneNode(true);
var cloneNumber=
clone.querySelector(
":scope > .arsn-area-number"
);
var cloneAction=
clone.querySelector(
":scope > .arsn-area-action"
);
if(cloneNumber){
cloneNumber.remove();
}
if(cloneAction){
cloneAction.remove();
}
var titleText=
compactText(
clone.textContent
);
if(!titleText){
return;
}
var numberNode=
number.cloneNode(true);
var actionNode=
action.cloneNode(true);
var titleNode=
document.createElement(
"span"
);
titleNode.className=
"sn-area-label-title";
titleNode.textContent=
titleText;
while(label.firstChild){
label.removeChild(
label.firstChild
);
}
label.appendChild(
numberNode
);
label.appendChild(
titleNode
);
label.appendChild(
actionNode
);
label.setAttribute(
"data-sn-three-line",
"1"
);
var head=
label.closest(
".arsn-area-head"
);
if(head){
head.style.setProperty(
"width",
"100%",
"important"
);
head.style.setProperty(
"max-width",
"100%",
"important"
);
head.style.setProperty(
"box-sizing",
"border-box",
"important"
);
}
});
}
/* =======================================================
PLACEHOLDER BADGE
======================================================= */
function applyPlaceholderBadge(){
if(!PLACEHOLDER)return;
if(
document.querySelector(
".sn-coming-soon-badge"
)
){
return;
}
var title=
document.querySelector(
"#document-title"
)||
document.querySelector(
"h1"
);
if(!title)return;
var badge=
document.createElement(
"span"
);
badge.className=
"sn-coming-soon-badge";
badge.textContent=
PLACEHOLDER_LABEL;
badge.setAttribute(
"aria-label",
PLACEHOLDER_LABEL
);
title.appendChild(
badge
);
}
/* =======================================================
DETAIL PAGE OWN-ACCENT PROPAGATION
======================================================= */
function parseRGB(value){
var match=String(value||"").match(
/rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i
);
if(!match)return null;
return [
Number(match[1]),
Number(match[2]),
Number(match[3])
];
}
function distance(a,b){
return Math.sqrt(
Math.pow(a[0]-b[0],2)+
Math.pow(a[1]-b[1],2)+
Math.pow(a[2]-b[2],2)
);
}
function paletteMatch(cssColor){
var rgb=parseRGB(cssColor);
if(!rgb)return null;
var palette=[
{hex:"#21b6d7",rgb:[33,182,215]},
{hex:"#e94b13",rgb:[233,75,19]},
{hex:"#f0aa00",rgb:[240,170,0]},
{hex:"#38b76a",rgb:[56,183,106]}
];
var best=null;
var bestDistance=Infinity;
palette.forEach(function(item){
var d=distance(rgb,item.rgb);
if(d=2
){
var match=
paletteMatch(
style.borderTopColor
);
if(match){
el.style.setProperty(
"border-left",
"4px solid "+match.hex,
"important"
);
}
}
});
// Warning families: explicit safety override.
Array.from(
root.querySelectorAll(
".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+
".warn,.warning,.warningmessage,.errormessage"
)
).forEach(function(el){
if(!visible(el))return;
el.style.setProperty(
"border-left",
"4px solid #e94b13",
"important"
);
});
// Info families: explicit orientation override.
Array.from(
root.querySelectorAll(
".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage"
)
).forEach(function(el){
if(!visible(el))return;
el.style.setProperty(
"border-left",
"4px solid #21b6d7",
"important"
);
});
}
/* =======================================================
OVERVIEW SEMANTIC THEME PALETTE
======================================================= */
function smallestThemeHeaders(){
return Array.from(
root.querySelectorAll(
"div,span,p,strong,h3,h4,h5,h6"
)
).filter(function(el){
if(!visible(el))return false;
if(!themeFor(el.textContent))return false;
return !Array.from(
el.children||[]
).some(function(child){
return !!themeFor(
child.textContent
);
});
});
}
function findOverviewCard(header){
var node=header.parentElement;
var candidates=[];
while(node&&node!==root){
var rect=node.getBoundingClientRect();
var style=getComputedStyle(node);
var border=
num(style.borderTopWidth)+
num(style.borderRightWidth)+
num(style.borderBottomWidth)+
num(style.borderLeftWidth);
if(
rect.width>=220&&
rect.width<=800&&
rect.height>=120&&
border>=1
){
candidates.push(node);
}
node=node.parentElement;
}
if(!candidates.length)return null;
candidates.sort(function(a,b){
return (
b.getBoundingClientRect().height-
a.getBoundingClientRect().height
);
});
return candidates[0];
}
function rowCandidates(link,card){
var result=[];
var cardRect=
card.getBoundingClientRect();
var node=link;
while(node&&node!==card){
if(visible(node)){
var rect=
node.getBoundingClientRect();
if(
rect.height<=105&&
rect.width>=
cardRect.width*.50&&
rect.width<=
cardRect.width*1.03
){
result.push(node);
}
}
node=node.parentElement;
}
return result;
}
function chooseOuterRow(
candidates,
link
){
if(!candidates.length){
return link;
}
var bordered=
candidates.filter(function(el){
return (
num(
getComputedStyle(el)
.borderLeftWidth
)>=1
);
});
var pool=
bordered.length
?bordered
:candidates;
pool.sort(function(a,b){
var ar=
a.getBoundingClientRect();
var br=
b.getBoundingClientRect();
return (
ar.left-br.left||
br.width-ar.width
);
});
return pool[0]||link;
}
function applyOverviewPalette(){
if(PAGE_KIND!=="overview"){
return [];
}
var headers=
smallestThemeHeaders()
.map(function(el){
return {
el:el,
theme:
themeFor(
el.textContent
),
card:
findOverviewCard(
el
)
};
})
.filter(function(row){
return !!row.card;
});
var unique=[];
var seenHeaders=new Set();
headers.forEach(function(row){
var key=
row.theme.name+
"|"+
Math.round(
row.card
.getBoundingClientRect()
.left
)+
"|"+
Math.round(
row.el
.getBoundingClientRect()
.top
);
if(!seenHeaders.has(key)){
seenHeaders.add(key);
unique.push(row);
}
});
unique.forEach(function(row){
var headerRect=
row.el
.getBoundingClientRect();
row.el.style.setProperty(
"background",
row.theme.bg,
"important"
);
row.el.style.setProperty(
"color",
row.theme.text,
"important"
);
row.el.style.setProperty(
"text-align",
"left",
"important"
);
row.el.style.setProperty(
"word-spacing",
"normal",
"important"
);
var later=
unique
.filter(function(other){
return (
other.card===row.card&&
other.el
.getBoundingClientRect()
.top>
headerRect.top+2
);
})
.sort(function(a,b){
return (
a.el
.getBoundingClientRect()
.top-
b.el
.getBoundingClientRect()
.top
);
});
var stopTop=
later.length
?later[0].el
.getBoundingClientRect()
.top
:Infinity;
Array.from(
row.card.querySelectorAll("a")
).forEach(function(link){
if(!visible(link))return;
var rect=
link.getBoundingClientRect();
if(
rect.top<=
headerRect.bottom-2||
rect.top>=
stopTop-2
){
return;
}
var candidates=
rowCandidates(
link,
row.card
);
var target=
chooseOuterRow(
candidates,
link
);
candidates.forEach(function(el){
el.style.setProperty(
"border-left",
"0 solid transparent",
"important"
);
});
target.style.setProperty(
"border-left",
"3px solid "+
row.theme.accent,
"important"
);
target.style.setProperty(
"box-sizing",
"border-box",
"important"
);
});
});
return unique;
}
/* =======================================================
OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW
======================================================= */
function alignOverviewCards(headers){
if(
PAGE_KIND!=="overview"||
window.innerWidth<=MOBILE_MAX
){
return;
}
var cards=[];
var seen=new Set();
headers.forEach(function(row){
if(!seen.has(row.card)){
seen.add(row.card);
cards.push(row.card);
}
});
if(cards.length<2){
return;
}
// Group cards by actual top position.
var groups=[];
cards.forEach(function(card){
var top=
card.getBoundingClientRect().top;
var group=null;
for(var i=0;i1){
saveStyle(
row.el,
originalMargin,
"margin-top"
);
var current=
num(
getComputedStyle(
row.el
).marginTop
);
row.el.style.setProperty(
"margin-top",
(
current+delta
)+"px"
);
row.el.setAttribute(
"data-sn-master-first-row",
"1"
);
managedMargin.add(
row.el
);
}
});
}
var maxHeight=0;
group.cards.forEach(function(card){
maxHeight=
Math.max(
maxHeight,
card
.getBoundingClientRect()
.height
);
});
maxHeight=
Math.ceil(maxHeight);
group.cards.forEach(function(card){
saveStyle(
card,
originalHeight,
"min-height"
);
card.style.setProperty(
"min-height",
maxHeight+"px"
);
card.setAttribute(
"data-sn-master-equal-height",
"1"
);
managedHeight.add(
card
);
});
});
}
/* =======================================================
DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY
======================================================= */
function equaliseDetailGrids(){
if(
PAGE_KIND!=="detail"||
window.innerWidth<=MOBILE_MAX
){
return;
}
var selectors=[
".arsn-grid",
".arsn-grid-2",
".arsn-grid-3",
".dmp-grid",
".ido-grid",
".pp-grid"
];
selectors.forEach(function(selector){
Array.from(
root.querySelectorAll(selector)
).forEach(function(grid){
var children=
Array.from(
grid.children||[]
).filter(visible);
if(children.length<2){
return;
}
var groups=[];
children.forEach(function(child){
var top=
child
.getBoundingClientRect()
.top;
var group=null;
for(var i=0;i
MOBILE_MAX
){
alignOverviewCards(
headers
);
equaliseDetailGrids();
}
}finally{
running=false;
}
}
function onResize(){
if(resizeTimer){
clearTimeout(
resizeTimer
);
}
resizeTimer=
setTimeout(
function(){
resizeTimer=0;
run();
},
RESIZE_DEBOUNCE
);
}
async function waitForReady(){
if(
document.readyState!=="complete"
){
await new Promise(function(resolve){
window.addEventListener(
"load",
resolve,
{once:true}
);
});
}
if(
document.fonts&&
document.fonts.ready
){
try{
await document.fonts.ready;
}catch(error){}
}
var images=
Array.from(
root.querySelectorAll("img")
);
await Promise.all(
images.map(function(img){
if(img.complete){
return Promise.resolve();
}
return new Promise(function(resolve){
var done=function(){
resolve();
};
img.addEventListener(
"load",
done,
{once:true}
);
img.addEventListener(
"error",
done,
{once:true}
);
});
})
);
run();
}
window.addEventListener(
"resize",
onResize,
{passive:true}
);
waitForReady();
})();
