Changes for page Data Protection & Ethics
Last modified by Veronika Kocher on Friday, 18 Sep 2026 16:47
From version 6.2
edited by Veronika Kocher
on Friday, 04 Sep 2026 14:23
on Friday, 04 Sep 2026 14:23
Change comment:
There is no comment for this version
To version 5.11
edited by Veronika Kocher
on Thursday, 03 Sep 2026 13:04
on Thursday, 03 Sep 2026 13:04
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
Details
- Page properties
-
- Default language
-
... ... @@ -1,1 +1,0 @@ 1 -en - Content
-
... ... @@ -1,239 +1,1215 @@ 1 +Assess personal data, confidentiality, consent, sensitive materials and ethical considerations early in the project. 2 + 3 +== Overview == 4 + 5 +Add a concise explanation of this topic and why it matters for Art & Research projects. 6 + 7 +== What you need to know == 8 + 9 +* Key concepts 10 +* Relevant requirements 11 +* Important distinctions 12 + 13 +== What you need to do == 14 + 15 +1. Identify what applies to your project. 16 +2. Document the relevant decisions. 17 +3. Use appropriate institutional services and support where needed. 18 + 19 +== Key questions == 20 + 21 +* What needs to be decided? 22 +* Who is responsible? 23 +* What needs to be documented? 24 +* Are there legal, ethical or technical constraints? 25 +* What needs to happen before the next project phase? 26 + 27 +== Services & Tools == 28 + 29 +Add links to relevant institutional services, infrastructure and tools. 30 + 31 +== Info Sheets & Checklists == 32 + 33 +Add links to related Info Sheets, checklists and templates. 34 + 35 +== Tutorials == 36 + 37 + 38 +{{html}}<span data-arsn-coming-soon="true" style="display:inline-block;margin:6px 0 8px 0;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>{{/html}} 39 +Add links to step-by-step tutorials for this topic. 40 + 41 +== Related Topics == 42 + 43 +Add links to related pages in Enable, Work & Manage, and Publish & Share. 44 + 45 +== Who is responsible? == 46 + 47 + 48 +{{info title="Service routing"}} 49 +**Primary specialist service(s):** Data Protection Officer for personal-data questions; project/host unit and the applicable ethics or funder route for ethical review. 50 + 51 +**Role of Support Kunst und Forschung (SKF):** Coordinates project and funder requirements and helps route specialist review; it is not the data-protection authority. 52 +{{/info}} 53 + 54 +If you are unsure which route applies, start with the service named above. For funded or project-based research where several units are involved, SKF can coordinate the project route. 55 + 56 +{{html}} 57 +<!-- ARSN_SEARCH_TERMS_START --> 58 +<details class="arsn-search-terms" style="margin-top:28px;padding-top:10px;border-top:1px solid #eee;"> 59 +<summary style="cursor:pointer;color:#666;font-size:13px;">Search terms & related topics</summary> 60 +<div style="margin-top:9px;color:#555;font-size:13px;"> 61 +<p style="margin:0 0 8px 0;"> 62 +This topic can also be found through related terms, synonyms and common search queries. 63 +Select a term to search the Art & Research Services Navigator. 64 +</p> 65 +<p style="margin:0;"><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=art%20and%20research#arsn-search-input" class="arsn-search-term" data-search-term="art and research" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">art and research</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=enable#arsn-search-input" class="arsn-search-term" data-search-term="enable" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">enable</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=data%20protection#arsn-search-input" class="arsn-search-term" data-search-term="data protection" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">data protection</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=personal%20data#arsn-search-input" class="arsn-search-term" data-search-term="personal data" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">personal data</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=gdpr#arsn-search-input" class="arsn-search-term" data-search-term="gdpr" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">gdpr</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=ethics#arsn-search-input" class="arsn-search-term" data-search-term="ethics" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">ethics</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=consent#arsn-search-input" class="arsn-search-term" data-search-term="consent" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">consent</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=sensitive%20data#arsn-search-input" class="arsn-search-term" data-search-term="sensitive data" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">sensitive data</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=confidentiality#arsn-search-input" class="arsn-search-term" data-search-term="confidentiality" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">confidentiality</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=data%20privacy#arsn-search-input" class="arsn-search-term" data-search-term="data privacy" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">data privacy</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=dsgvo#arsn-search-input" class="arsn-search-term" data-search-term="dsgvo" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">dsgvo</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=anonymisation#arsn-search-input" class="arsn-search-term" data-search-term="anonymisation" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">anonymisation</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=anonymization#arsn-search-input" class="arsn-search-term" data-search-term="anonymization" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">anonymization</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=pseudonymisation#arsn-search-input" class="arsn-search-term" data-search-term="pseudonymisation" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">pseudonymisation</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=pseudonymization#arsn-search-input" class="arsn-search-term" data-search-term="pseudonymization" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">pseudonymization</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=datenschutz#arsn-search-input" class="arsn-search-term" data-search-term="datenschutz" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">datenschutz</a><a href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/?q=einwilligung#arsn-search-input" class="arsn-search-term" data-search-term="einwilligung" style="display:inline-block;margin:3px 5px 3px 0;padding:3px 8px;border:1px solid #d7d7d7;border-radius:14px;background:#fff;color:#333;text-decoration:none;font-size:12px;">einwilligung</a></p> 66 +</div> 67 +</details> 68 +<!-- ARSN_SEARCH_TERMS_END --> 69 +{{/html}} 70 + 1 1 {{html clean="false"}} 72 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_START --> 2 2 3 -<style> 4 -.dpe{max-width:1400px;margin:0 auto;color:#322f2b} 5 -.dpe *{box-sizing:border-box} 6 -.dpe-card{border:1px solid #e3ded6;border-radius:11px;background:#fcfbf8;box-shadow:0 1px 3px rgba(0,0,0,.035)} 7 -.dpe-hero{height:132px;overflow:hidden;background:#f1eee9;border-radius:11px 11px 0 0} 8 -.dpe-hero img{width:100%;height:100%;object-fit:cover;object-position:center 45%;display:block} 9 -.dpe-eye{font-size:12px;font-weight:700;letter-spacing:.075em;text-transform:uppercase} 10 -.dpe-sec{margin:0 0 27px 0} 11 -.dpe-sec h3{font-size:22px;line-height:1.25;margin:0 0 7px;color:#35312d;text-align:left!important;text-align-last:left!important;text-justify:auto!important;word-spacing:normal!important} 12 -.dpe-sec>p{color:#625d56;line-height:1.58;margin:0 0 13px} 13 -.dpe-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(285px,1fr));gap:12px} 14 -.dpe-grid-2{display:grid;grid-template-columns:repeat(2,minmax(300px,1fr));gap:12px} 15 -.dpe-info{padding:15px 17px;border:1px solid #c7e5ed;border-left:5px solid #21b6d7;background:#eaf6f9;border-radius:8px;color:#365e68;line-height:1.5} 16 -.dpe-info strong{color:#2d5661} 17 -.dpe-protect{padding:15px 17px;border:1px solid #ecdba3;border-left:5px solid #f0aa00;background:#fff8e7;border-radius:8px;color:#675a35;line-height:1.5} 18 -.dpe-protect strong{color:#705416} 19 -.dpe-warn{padding:15px 17px;border:1px solid #efd9cc;border-left:5px solid #e94b13;background:#fff6f1;border-radius:8px;color:#67564e;line-height:1.5} 20 -.dpe-warn strong{color:#744531} 21 -.dpe-check{position:relative;padding:12px 13px 12px 37px;border:1px solid #e3ded6;border-radius:8px;background:#fffdf9;color:#504a44;line-height:1.5} 22 -.dpe-check:before{content:"✓";position:absolute;left:13px;top:10px;color:#f0aa00;font-weight:800} 23 -.dpe-step{position:relative;padding:13px 14px 13px 50px;border:1px solid #e3ded6;border-radius:8px;background:#fcfbf8;min-height:76px} 24 -.dpe-step .n{position:absolute;left:13px;top:13px;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fff3d5;color:#765812;font-weight:800;font-size:12px} 25 -.dpe-step h4{margin:0 0 4px;font-size:16px;line-height:1.3;color:#3b352e;text-align:left!important;text-align-last:left!important;text-justify:auto!important;word-spacing:normal!important} 26 -.dpe-step p{margin:0;color:#625d56;line-height:1.45} 27 -.dpe-scenario{padding:14px 15px;border:1px solid #e3ded6;border-top:4px solid #f0aa00;border-radius:9px;background:#fcfbf8} 28 -.dpe-scenario h4{margin:0 0 6px;font-size:16px;color:#3e372e;text-align:left!important;word-spacing:normal!important} 29 -.dpe-scenario p{margin:0;color:#625d56;line-height:1.5} 30 -.dpe-table-wrap{overflow-x:auto;border:1px solid #e3ded6;border-radius:8px} 31 -.dpe-table{width:100%;border-collapse:collapse;background:#fffdf9;min-width:920px} 32 -.dpe-table th,.dpe-table td{padding:10px 11px;border-bottom:1px solid #e3ded6;vertical-align:top;text-align:left;line-height:1.4} 33 -.dpe-table th{background:#f3efe8;color:#403b36;font-weight:700} 34 -.dpe-table tr:last-child td{border-bottom:0} 35 -.dpe-service-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px} 36 -.dpe-service{display:block;padding:13px 14px;border:1px solid #e3ded6;border-left:4px solid #f0aa00;border-radius:8px;background:#fcfbf8;color:#2f2b27} 37 -.dpe-service strong{display:block;margin-bottom:4px} 38 -.dpe-service span{display:block;color:#625d56;line-height:1.45;font-weight:400} 39 -.dpe-linkgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:8px} 40 -.dpe-navlink{display:block;padding:10px 11px;border:1px solid #e9e4dc;border-left:3px solid #f0aa00;border-radius:6px;background:#fffdf9;color:#252321;text-decoration:none;font-weight:600;line-height:1.35} 41 -.dpe-navlink:hover,.dpe-navlink:focus{background:#fffaf0;text-decoration:none} 42 -.dpe-resource-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px} 43 -.dpe-resource{padding:15px 16px;background:#fcfbf8;border:1px solid #e3ded6;border-radius:9px} 44 -.dpe-resource strong{display:block;color:#4c4130;margin-bottom:4px} 45 -.dpe-badge{display:inline-block;margin:5px 0 7px;padding:4px 8px;border-radius:14px;background:#fff4ee;border:1px solid #efd9cc;color:#8a4d36;font-size:11px;font-weight:700;letter-spacing:.055em;line-height:1.2} 46 -.dpe h1,.dpe h2,.dpe h3,.dpe h4,.dpe h5,.dpe h6,.dpe h1 a,.dpe h2 a,.dpe h3 a,.dpe h4 a,.dpe h5 a,.dpe h6 a{text-align:left!important;text-align-last:left!important;text-justify:auto!important;word-spacing:normal!important} 47 -@media(max-width:850px){.dpe-grid-2,.dpe-resource-grid{grid-template-columns:1fr}} 48 -@media(max-width:680px){.dpe-hero{height:105px}.dpe-sec h3{font-size:20px}} 74 +<style data-sn-service-navigator-master="1"> 75 +/* ========================================================= 76 + MASTER TYPOGRAPHY 77 + ========================================================= */ 78 +#xwikicontent h1, 79 +#xwikicontent h2, 80 +#xwikicontent h3, 81 +#xwikicontent h4, 82 +#xwikicontent h5, 83 +#xwikicontent h6, 84 +#xwikicontent .box-title, 85 +#xwikicontent [role="heading"], 86 +#xwikicontent h1 a, 87 +#xwikicontent h2 a, 88 +#xwikicontent h3 a, 89 +#xwikicontent h4 a, 90 +#xwikicontent h5 a, 91 +#xwikicontent h6 a, 92 +#xwikicontent .box-title a, 93 +#xwikicontent [role="heading"] a{ 94 + text-align:left!important; 95 + text-justify:auto!important; 96 + word-spacing:normal!important; 97 +} 98 + 99 +/* ========================================================= 100 + COMING SOON / IN VORBEREITUNG 101 + ========================================================= */ 102 +.sn-coming-soon-badge{ 103 + display:inline-block; 104 + vertical-align:middle; 105 + margin-left:10px; 106 + padding:4px 8px; 107 + border-radius:14px; 108 + border:1px solid #efd9cc; 109 + background:#fff4ee; 110 + color:#8a4d36; 111 + font-size:11px; 112 + font-weight:700; 113 + letter-spacing:.055em; 114 + line-height:1.2; 115 + white-space:nowrap; 116 +} 117 + 118 +/* ========================================================= 119 + NATIVE / DETAIL CALLOUT GEOMETRY 120 + Preserve existing backgrounds. 121 + ========================================================= */ 122 +#xwikicontent .arsn-info, 123 +#xwikicontent .dmp-info, 124 +#xwikicontent .ido-info, 125 +#xwikicontent .pp-info, 126 +#xwikicontent .infomessage{ 127 + box-sizing:border-box!important; 128 + border-left:4px solid #21b6d7!important; 129 + border-radius:8px; 130 + text-align:left!important; 131 + word-spacing:normal!important; 132 +} 133 + 134 +#xwikicontent .arsn-warn, 135 +#xwikicontent .dmp-warn, 136 +#xwikicontent .ido-warn, 137 +#xwikicontent .pp-warn, 138 +#xwikicontent .warn, 139 +#xwikicontent .warning, 140 +#xwikicontent .warningmessage, 141 +#xwikicontent .errormessage{ 142 + box-sizing:border-box!important; 143 + border-left:4px solid #e94b13!important; 144 + border-radius:8px; 145 + text-align:left!important; 146 + word-spacing:normal!important; 147 +} 148 + 149 +[data-sn-master-equal-height], 150 +[data-sn-master-first-row]{ 151 + box-sizing:border-box; 152 +} 49 49 </style> 50 50 51 -<div class="dpe"> 155 +<script data-sn-service-navigator-master="1"> 156 +(function(){ 157 + "use strict"; 52 52 53 -<section class="dpe-card" style="margin-bottom:18px;overflow:hidden;border-left:6px solid #f0aa00;"> 54 - <div class="dpe-hero"> 55 - <img src="https://xwiki.uni-ak.ac.at/bin/download/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/WebHome/enable.png" alt="Data protection and ethics in artistic and research projects" /> 56 - </div> 57 - <div style="padding:18px 21px 20px;"> 58 - <div class="dpe-eye" style="color:#7a5b12;margin-bottom:5px;">PREPARE · PROTECT & CLARIFY</div> 59 - <h2 style="font-size:27px;line-height:1.2;margin:0 0 8px;color:#2c2926;">Identify personal, confidential and sensitive information early — and plan deliberately how it will be handled</h2> 60 - <p style="margin:0;color:#5e5953;line-height:1.6;max-width:1160px;"> 61 - Data protection, confidentiality, consent and ethical questions affect which information a project actually needs, 62 - who may access it, how long it should be retained and what can later be shared or published. 63 - Clarify these questions before collection, production or publication wherever possible. 64 - </p> 65 - </div> 66 -</section> 159 + var PAGE_KIND="detail"; 160 + var PLACEHOLDER=true; 161 + var PLACEHOLDER_LABEL="COMING SOON"; 67 67 68 -<div class="dpe-info" style="margin-bottom:14px;"> 69 - <strong>Start from the actual information flow.</strong> 70 - Record which personal, confidential or sensitive information is created or used, 71 - who receives it, where it is stored and what should happen to it when the project ends. 72 -</div> 163 + var MOBILE_MAX=767; 164 + var ROW_TOLERANCE=6; 165 + var RESIZE_DEBOUNCE=220; 73 73 74 - <divclass="dpe-warn"style="margin-bottom:27px;">75 - <strong>Planningguidance—nota bindingdata-protection orethicsdecision.</strong>76 - Thispagehelpsmakequestions visibleearly and documentthem.77 - Personal-dataquestions belong with therelevant data-protection service; ethical review follows the applicable project, funder or review route.78 - </div>167 + var root= 168 + document.getElementById("xwikicontent")|| 169 + document.querySelector(".xwiki-rendering-content")|| 170 + document.querySelector("main")|| 171 + document.body; 79 79 80 -<section class="dpe-sec"> 81 - <div class="dpe-eye" style="color:#8a4d36;margin-bottom:4px;">STEP 1 · CREATE A DATA-PROTECTION & ETHICS INVENTORY</div> 82 - <h3>Record not only the information, but also its purpose, access and later use</h3> 83 - <p>For each relevant material or information group, it should be clear why it is needed and how it will be handled.</p> 84 - <div class="dpe-grid"> 85 - <div class="dpe-check"><strong>Information type:</strong> Which personal, confidential or sensitive information does the material contain?</div> 86 - <div class="dpe-check"><strong>Necessity:</strong> Which of this information is actually needed for the project?</div> 87 - <div class="dpe-check"><strong>People / participants:</strong> Who does the information come from and who is affected by it?</div> 88 - <div class="dpe-check"><strong>Purpose:</strong> Why is the information collected, created, analysed or documented?</div> 89 - <div class="dpe-check"><strong>Access:</strong> Who may access the information during the project?</div> 90 - <div class="dpe-check"><strong>Storage:</strong> Where is the information stored and how is it appropriately protected?</div> 91 - <div class="dpe-check"><strong>Retention / deletion:</strong> What should be retained, for how long, and what should later be deleted?</div> 92 - <div class="dpe-check"><strong>Sharing / publication:</strong> Which content should remain internal, be shared with restrictions or become public?</div> 93 - <div class="dpe-check"><strong>Consent / information:</strong> Which agreements or information for participants are required?</div> 94 - <div class="dpe-check"><strong>Ethics or funder route:</strong> Is there an applicable review, approval or funder route that needs to be considered?</div> 95 - </div> 96 -</section> 173 + if(!root)return; 97 97 98 -<section class="dpe-sec"> 99 - <div class="dpe-eye" style="color:#7a5b12;margin-bottom:4px;">KEY DISTINCTIONS</div> 100 - <h3>These decisions should be considered separately</h3> 101 - <div class="dpe-grid"> 102 - <div class="dpe-protect"><strong>Participation ≠publication.</strong><br>Agreement to participate in a project is not automatically the same as permission to make identifiable content public.</div> 103 - <div class="dpe-protect"><strong>Legally compliant ≠ethically unproblematic.</strong><br>Ethical questions can go beyond legal compliance and may require additional judgement.</div> 104 - <div class="dpe-protect"><strong>Collection ≠sharing.</strong><br>Information needed for project work does not automatically need to be distributed or published later.</div> 105 - <div class="dpe-protect"><strong>Access during the project ≠access after project closure.</strong><br>Decide who needs access during active work and what should be retained, restricted or deleted afterwards.</div> 106 - <div class="dpe-protect"><strong>More data ≠a better project.</strong><br>Check which personal or sensitive information is actually necessary before collecting or storing it.</div> 107 - <div class="dpe-protect"><strong>Project coordination ≠a data-protection decision.</strong><br>SKF can coordinate project and funder routes, but it is not the data-protection authority.</div> 108 - </div> 109 -</section> 175 + var managedHeight=new Set(); 176 + var managedMargin=new Set(); 177 + var originalHeight=new WeakMap(); 178 + var originalMargin=new WeakMap(); 110 110 111 -<section class="dpe-sec"> 112 - <div class="dpe-eye" style="color:#8a4d36;margin-bottom:4px;">STEP 2 · PRACTICAL WORKFLOW</div> 113 - <h3>Make data protection and ethics part of the project workflow</h3> 114 - <div class="dpe-grid"> 115 - <div class="dpe-step"><div class="n">01</div><h4>Clarify the information need</h4><p>Identify which personal, confidential or sensitive information the project genuinely requires.</p></div> 116 - <div class="dpe-step"><div class="n">02</div><h4>Describe the information flow</h4><p>Record where information comes from, who receives it, where it is stored and how it may leave the project.</p></div> 117 - <div class="dpe-step"><div class="n">03</div><h4>Assign responsibility</h4><p>Define who is responsible for decisions, documentation, access and specialist questions where needed.</p></div> 118 - <div class="dpe-step"><div class="n">04</div><h4>Plan consent and participant information</h4><p>Where relevant, distinguish participation, documentation and publication of identifiable content.</p></div> 119 - <div class="dpe-step"><div class="n">05</div><h4>Define storage and access</h4><p>Plan suitable storage, access restrictions and safeguards before collection or production begins.</p></div> 120 - <div class="dpe-step"><div class="n">06</div><h4>Plan retention and deletion</h4><p>Decide which information is needed for how long and what should be deleted, restricted or retained after the project ends.</p></div> 121 - <div class="dpe-step"><div class="n">07</div><h4>Plan specialist review in time</h4><p>Involve the data-protection service and the applicable ethics or funder route where the project requires it.</p></div> 122 - <div class="dpe-step"><div class="n">08</div><h4>Recheck before publication</h4><p>Before sharing or publishing, confirm that the intended visibility matches the decisions already documented.</p></div> 123 - </div> 124 -</section> 180 + var resizeTimer=0; 181 + var running=false; 125 125 126 -<section class="dpe-sec"> 127 - <div class="dpe-eye" style="color:#7a5b12;margin-bottom:4px;">COMMON SCENARIOS</div> 128 - <h3>In these project situations, clarify the information flow especially early</h3> 129 - <div class="dpe-grid"> 130 - <div class="dpe-scenario"><h4>Interviews, conversations & portraits</h4><p>Keep participation, recording, internal analysis and possible publication of identifiable content clearly separate.</p></div> 131 - <div class="dpe-scenario"><h4>Participatory & collaborative work</h4><p>Check which information about participants is created, who can see it and which later forms of presentation or publication are intended.</p></div> 132 - <div class="dpe-scenario"><h4>Confidential or sensitive material</h4><p>Define access, storage, sharing, retention and deletion explicitly instead of leaving them to the general project workflow.</p></div> 133 - <div class="dpe-scenario"><h4>External project partners</h4><p>Clarify which information moves between units, who is responsible and how handover or project closure will be handled.</p></div> 134 - <div class="dpe-scenario"><h4>Public outputs</h4><p>Before a website, exhibition, publication or repository deposit, recheck which identifiable or sensitive information should actually become visible.</p></div> 135 - <div class="dpe-scenario"><h4>Funded projects</h4><p>Include additional funder requirements, reporting obligations or applicable review routes in project planning.</p></div> 136 - </div> 137 -</section> 183 + var THEMES=[ 184 + { 185 + name:"BLUE", 186 + accent:"#21b6d7", 187 + bg:"#eaf7fb", 188 + text:"#315d68", 189 + labels:[ 190 + "HIER STARTEN", 191 + "ENTSCHEIDEN", 192 + "ÜBERPRÜFEN & ANPASSEN", 193 + "START HERE", 194 + "DECIDE", 195 + "REVIEW & ADAPT" 196 + ] 197 + }, 198 + { 199 + name:"RED", 200 + accent:"#e94b13", 201 + bg:"#fff1ec", 202 + text:"#8a4d36", 203 + labels:[ 204 + "PLANEN & ORGANISIEREN", 205 + "ORGANISIEREN & DOKUMENTIEREN", 206 + "PUBLIZIEREN & PRÄSENTIEREN", 207 + "PLAN & ORGANISE", 208 + "PLAN & ORGANIZE", 209 + "ORGANISE & DOCUMENT", 210 + "ORGANIZE & DOCUMENT", 211 + "PUBLISH & PRESENT" 212 + ] 213 + }, 214 + { 215 + name:"YELLOW", 216 + accent:"#f0aa00", 217 + bg:"#fff8e7", 218 + text:"#785b17", 219 + labels:[ 220 + "SCHÜTZEN & KLÄREN", 221 + "STANDARDISIEREN & IDENTIFIZIEREN", 222 + "ÖFFNEN, NACHNUTZEN & AUFFINDBAR MACHEN", 223 + "PROTECT & CLARIFY", 224 + "STANDARDISE & IDENTIFY", 225 + "STANDARDIZE & IDENTIFY", 226 + "OPEN, REUSE & MAKE FINDABLE" 227 + ] 228 + }, 229 + { 230 + name:"GREEN", 231 + accent:"#38b76a", 232 + bg:"#edf9f1", 233 + text:"#3f7451", 234 + labels:[ 235 + "INFRASTRUKTUR EINRICHTEN", 236 + "INFRASTRUKTUR & ZUSAMMENARBEIT EINRICHTEN", 237 + "SPEICHERN & ZUGRIFF STEUERN", 238 + "REPOSITORIUM, ERHALTEN & ÜBERGEBEN", 239 + "SET UP INFRASTRUCTURE", 240 + "SET UP INFRASTRUCTURE & COLLABORATION", 241 + "STORE & CONTROL ACCESS", 242 + "REPOSITORY, PRESERVE & HAND OVER" 243 + ] 244 + } 245 + ]; 138 138 139 -<section class="dpe-sec"> 140 - <div class="dpe-eye" style="color:#8a4d36;margin-bottom:4px;">STEP 3 · DOCUMENT DECISIONS</div> 141 - <h3>A simple data-protection & ethics log keeps decisions traceable</h3> 142 - <p>The log can be part of the project folder, material inventory or data management plan. What matters is that responsibility, access, retention and planned sharing remain understandable.</p> 143 - <div class="dpe-table-wrap"> 144 - <table class="dpe-table"> 145 - <thead><tr><th>Field</th><th>What to record</th><th>Why it matters</th></tr></thead> 146 - <tbody> 147 - <tr><td><strong>Material / information group</strong></td><td>A clear name for the data, documentation, recording or material group.</td><td>Connects decisions to the correct project material.</td></tr> 148 - <tr><td><strong>Personal / sensitive content</strong></td><td>Which personal, confidential or sensitive information is contained.</td><td>Makes protection needs visible early.</td></tr> 149 - <tr><td><strong>Purpose</strong></td><td>Why the information is needed, collected, created or retained.</td><td>Prevents unclear or unnecessary collection.</td></tr> 150 - <tr><td><strong>Access</strong></td><td>Which people, roles or project partners may access it.</td><td>Makes responsibility and restrictions traceable.</td></tr> 151 - <tr><td><strong>Storage</strong></td><td>Where the information is stored and who manages the storage location.</td><td>Connects protection requirements to the actual working environment.</td></tr> 152 - <tr><td><strong>Consent / participant information</strong></td><td>Which participation, documentation or publication decisions have been recorded.</td><td>Keeps different uses distinct.</td></tr> 153 - <tr><td><strong>Retention / deletion</strong></td><td>How long the information is needed and what happens at project closure.</td><td>Prevents accidental indefinite retention.</td></tr> 154 - <tr><td><strong>Sharing / publication</strong></td><td>Whether and how content is used internally, with restrictions or publicly.</td><td>Connects active project work to later publication.</td></tr> 155 - <tr><td><strong>Review</strong></td><td>Date or event for rechecking, such as publication or project closure.</td><td>Ensures changed project plans are reviewed again.</td></tr> 156 - </tbody> 157 - </table> 158 - </div> 159 -</section> 247 + function num(value){ 248 + var n=parseFloat(value); 249 + return Number.isFinite(n)?n:0; 250 + } 160 160 161 -<section class="dpe-sec"> 162 - <div class="dpe-eye" style="color:#8a4d36;margin-bottom:4px;">STOP & CHECK</div> 163 - <h3>Common warning signs in data protection and ethics</h3> 164 - <div class="dpe-grid"> 165 - <div class="dpe-warn"><strong>More personal information is collected than the project actually needs.</strong><br>The information requirement was not clarified before work began.</div> 166 - <div class="dpe-warn"><strong>Participation and publication are treated as the same decision.</strong><br>Permission to participate does not automatically cover every later use of identifiable content.</div> 167 - <div class="dpe-warn"><strong>Access rights are undefined.</strong><br>It is unclear who may see personal, confidential or sensitive information during the project.</div> 168 - <div class="dpe-warn"><strong>Retention and deletion are unresolved.</strong><br>No one has decided what should be kept, restricted or deleted after project closure.</div> 169 - <div class="dpe-warn"><strong>Public presentation is planned but has not been rechecked.</strong><br>Before publication, exhibition or online release, confirm which information should actually become visible.</div> 170 - <div class="dpe-warn"><strong>Several units are involved but responsibilities are unclear.</strong><br>Project coordination, data-protection review and any applicable ethical review need distinct responsibilities.</div> 171 - </div> 172 -</section> 252 + function norm(value){ 253 + return String(value||"") 254 + .replace(/\s+/g," ") 255 + .trim() 256 + .toUpperCase(); 257 + } 173 173 174 -<section class="dpe-sec"> 175 - <div class="dpe-eye" style="color:#7a5b12;margin-bottom:4px;">SERVICES & SUPPORT</div> 176 - <h3>Who is responsible for data-protection and ethics questions</h3> 177 - <div class="dpe-service-grid"> 178 - <div class="dpe-service"> 179 - <strong>Data Protection Officer / data-protection service</strong> 180 - <span>Primary specialist responsibility for questions concerning personal data and data-protection review.</span> 181 - </div> 182 - <div class="dpe-service"> 183 - <strong>Project / host unit</strong> 184 - <span>For project-level responsibility, working arrangements and the organisational anchoring of decisions.</span> 185 - </div> 186 - <div class="dpe-service"> 187 - <strong>Applicable ethics or funder route</strong> 188 - <span>For ethical review or additional requirements where the specific project or funding context requires them.</span> 189 - </div> 190 - <div class="dpe-service"> 191 - <strong>Support Kunst und Forschung (SKF)</strong> 192 - <span>Coordinates project and funder requirements and helps route specialist review; SKF is not the data-protection authority.</span> 193 - </div> 194 - </div> 195 -</section> 259 + function visible(el){ 260 + if(!el||el.nodeType!==1)return false; 196 196 197 -<section class="dpe-sec"> 198 - <div class="dpe-eye" style="color:#8a4d36;margin-bottom:4px;">RELATED TOPICS</div> 199 - <h3>Data-protection and ethics decisions are often connected to these topics</h3> 200 - <div class="dpe-linkgrid"> 201 - <a class="dpe-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Copyright%2C%20Rights%20%26%20Licences/">Copyright, Rights & Licences</a> 202 - <a class="dpe-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Identify%20Your%20Data%20%26%20Research%20Outputs/">Identify Your Data & Research Outputs</a> 203 - <a class="dpe-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Enable/Plan%20Your%20Data%20Management/">Plan Your Data Management</a> 204 - <a class="dpe-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Work%20%26%20Manage/Store%2C%20Back%20Up%20%26%20Control%20Access/">Store, Back Up & Control Access</a> 205 - <a class="dpe-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/Decide%20What%20to%20Share/">Decide What to Share</a> 206 - <a class="dpe-navlink" href="https://xwiki.uni-ak.ac.at/bin/view/Service%20Navigator/Art%20%26%20Research%20Services%20Navigator/Publish%20%26%20Share/Manage%20Access%2C%20Reuse%20%26%20Licensing/">Manage Access, Reuse & Licensing</a> 207 - </div> 208 -</section> 262 + var style=getComputedStyle(el); 263 + var rect=el.getBoundingClientRect(); 209 209 210 -<!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_START --> 211 -{{include reference="Service Navigator.Art & Research Services Navigator.Code.TrainingWorkshopsBlock" author="target" /}} 212 -<!-- ARSN_TRAINING_WORKSHOPS_INCLUDE_V1_END --> 265 + return ( 266 + style.display!=="none"&& 267 + style.visibility!=="hidden"&& 268 + rect.width>20&& 269 + rect.height>4 270 + ); 271 + } 213 213 214 -<section class="dpe-sec"> 215 - <div class="dpe-eye" style="color:#8a4d36;margin-bottom:4px;">PRACTICAL RESOURCES</div> 216 - <h3>Info sheets, tutorials and templates</h3> 217 - <div class="dpe-resource-grid"> 218 - <div class="dpe-resource"><strong>Info Sheets</strong><span class="dpe-badge">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Short guidance on personal data, confidentiality, consent and ethical project questions.</div></div> 219 - <div class="dpe-resource"><strong>Tutorials</strong><span class="dpe-badge">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Step-by-step workflows for information inventories, access planning, retention and publication checks.</div></div> 220 - <div class="dpe-resource"><strong>Checklists & Templates</strong><span class="dpe-badge">COMING SOON</span><div style="color:#625d56;line-height:1.45;">Templates for a decision log, project review and handover.</div></div> 221 - </div> 222 -</section> 273 + function saveStyle(el,map,property){ 274 + if(map.has(el))return; 223 223 224 - <divclass="dpe-info"style="margin-bottom:14px;">225 - <strong>Needhelpfindingtherightroute?</strong>226 - Forquestionsconcerningpersonal data, start withthedata-protection service.227 - Whereseveralunits or funder requirements are involved, SKF can coordinate the project route and refer the question to the appropriate specialist review.228 - </div>276 + map.set(el,{ 277 + value:el.style.getPropertyValue(property), 278 + priority:el.style.getPropertyPriority(property) 279 + }); 280 + } 229 229 230 -<details style="margin-top:24px;padding-top:10px;border-top:1px solid #e3ded6;"> 231 - <summary style="cursor:pointer;color:#6a655e;font-size:13px;">Search terms & related topics</summary> 232 - <div style="margin-top:9px;color:#5c5650;font-size:12px;line-height:1.7;"> 233 - data protection · ethics · personal data · sensitive data · confidentiality · consent · participation · publication · identifiable content · access · access control · storage · retention · deletion · sharing · data management · research data · project documentation · Data Protection Officer · ethics review · funder requirements · project partners · publication · repository 234 - </div> 235 -</details> 282 + function restoreStyle(el,map,property){ 283 + var original=map.get(el); 236 236 237 -</div> 285 + if(original&&original.value){ 286 + el.style.setProperty( 287 + property, 288 + original.value, 289 + original.priority||"" 290 + ); 291 + }else{ 292 + el.style.removeProperty(property); 293 + } 294 + } 295 + 296 + function resetRuntime(){ 297 + managedHeight.forEach(function(el){ 298 + restoreStyle( 299 + el, 300 + originalHeight, 301 + "min-height" 302 + ); 303 + el.removeAttribute( 304 + "data-sn-master-equal-height" 305 + ); 306 + }); 307 + 308 + managedMargin.forEach(function(el){ 309 + restoreStyle( 310 + el, 311 + originalMargin, 312 + "margin-top" 313 + ); 314 + el.removeAttribute( 315 + "data-sn-master-first-row" 316 + ); 317 + }); 318 + 319 + managedHeight.clear(); 320 + managedMargin.clear(); 321 + } 322 + 323 + function themeFor(text){ 324 + var value=norm(text); 325 + 326 + for(var i=0;i<THEMES.length;i++){ 327 + for(var j=0;j<THEMES[i].labels.length;j++){ 328 + var label=THEMES[i].labels[j]; 329 + 330 + if( 331 + value===label|| 332 + value.indexOf(label+" ")===0|| 333 + value.indexOf(label+" -")===0|| 334 + value.indexOf(label+" ·")===0 335 + ){ 336 + return THEMES[i]; 337 + } 338 + } 339 + } 340 + 341 + return null; 342 + } 343 + 344 + /* ======================================================= 345 + PLACEHOLDER BADGE 346 + ======================================================= */ 347 + 348 + function applyPlaceholderBadge(){ 349 + if(!PLACEHOLDER)return; 350 + 351 + if( 352 + document.querySelector( 353 + ".sn-coming-soon-badge" 354 + ) 355 + ){ 356 + return; 357 + } 358 + 359 + var title= 360 + document.querySelector( 361 + "#document-title" 362 + )|| 363 + document.querySelector( 364 + "h1" 365 + ); 366 + 367 + if(!title)return; 368 + 369 + var badge= 370 + document.createElement( 371 + "span" 372 + ); 373 + 374 + badge.className= 375 + "sn-coming-soon-badge"; 376 + 377 + badge.textContent= 378 + PLACEHOLDER_LABEL; 379 + 380 + badge.setAttribute( 381 + "aria-label", 382 + PLACEHOLDER_LABEL 383 + ); 384 + 385 + title.appendChild( 386 + badge 387 + ); 388 + } 389 + 390 + /* ======================================================= 391 + DETAIL PAGE OWN-ACCENT PROPAGATION 392 + ======================================================= */ 393 + 394 + function parseRGB(value){ 395 + var match=String(value||"").match( 396 + /rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i 397 + ); 398 + 399 + if(!match)return null; 400 + 401 + return [ 402 + Number(match[1]), 403 + Number(match[2]), 404 + Number(match[3]) 405 + ]; 406 + } 407 + 408 + function distance(a,b){ 409 + return Math.sqrt( 410 + Math.pow(a[0]-b[0],2)+ 411 + Math.pow(a[1]-b[1],2)+ 412 + Math.pow(a[2]-b[2],2) 413 + ); 414 + } 415 + 416 + function paletteMatch(cssColor){ 417 + var rgb=parseRGB(cssColor); 418 + 419 + if(!rgb)return null; 420 + 421 + var palette=[ 422 + {hex:"#21b6d7",rgb:[33,182,215]}, 423 + {hex:"#e94b13",rgb:[233,75,19]}, 424 + {hex:"#f0aa00",rgb:[240,170,0]}, 425 + {hex:"#38b76a",rgb:[56,183,106]} 426 + ]; 427 + 428 + var best=null; 429 + var bestDistance=Infinity; 430 + 431 + palette.forEach(function(item){ 432 + var d=distance(rgb,item.rgb); 433 + 434 + if(d<bestDistance){ 435 + best=item; 436 + bestDistance=d; 437 + } 438 + }); 439 + 440 + return bestDistance<=30 441 + ?best 442 + :null; 443 + } 444 + 445 + function propagateDetailAccents(){ 446 + if(PAGE_KIND!=="detail")return; 447 + 448 + Array.from( 449 + root.querySelectorAll( 450 + ".arsn-call,.dmp-call,.ido-call,.pp-call,"+ 451 + ".arsn-source,.dmp-source,.ido-source,.pp-source" 452 + ) 453 + ).forEach(function(el){ 454 + if(!visible(el))return; 455 + 456 + var style=getComputedStyle(el); 457 + 458 + if( 459 + num(style.borderTopWidth)>=2 460 + ){ 461 + var match= 462 + paletteMatch( 463 + style.borderTopColor 464 + ); 465 + 466 + if(match){ 467 + el.style.setProperty( 468 + "border-left", 469 + "4px solid "+match.hex, 470 + "important" 471 + ); 472 + } 473 + } 474 + }); 475 + 476 + // Warning families: explicit safety override. 477 + Array.from( 478 + root.querySelectorAll( 479 + ".arsn-warn,.dmp-warn,.ido-warn,.pp-warn,"+ 480 + ".warn,.warning,.warningmessage,.errormessage" 481 + ) 482 + ).forEach(function(el){ 483 + if(!visible(el))return; 484 + 485 + el.style.setProperty( 486 + "border-left", 487 + "4px solid #e94b13", 488 + "important" 489 + ); 490 + }); 491 + 492 + // Info families: explicit orientation override. 493 + Array.from( 494 + root.querySelectorAll( 495 + ".arsn-info,.dmp-info,.ido-info,.pp-info,.infomessage" 496 + ) 497 + ).forEach(function(el){ 498 + if(!visible(el))return; 499 + 500 + el.style.setProperty( 501 + "border-left", 502 + "4px solid #21b6d7", 503 + "important" 504 + ); 505 + }); 506 + } 507 + 508 + /* ======================================================= 509 + OVERVIEW SEMANTIC THEME PALETTE 510 + ======================================================= */ 511 + 512 + function smallestThemeHeaders(){ 513 + return Array.from( 514 + root.querySelectorAll( 515 + "div,span,p,strong,h3,h4,h5,h6" 516 + ) 517 + ).filter(function(el){ 518 + if(!visible(el))return false; 519 + if(!themeFor(el.textContent))return false; 520 + 521 + return !Array.from( 522 + el.children||[] 523 + ).some(function(child){ 524 + return !!themeFor( 525 + child.textContent 526 + ); 527 + }); 528 + }); 529 + } 530 + 531 + function findOverviewCard(header){ 532 + var node=header.parentElement; 533 + var candidates=[]; 534 + 535 + while(node&&node!==root){ 536 + var rect=node.getBoundingClientRect(); 537 + var style=getComputedStyle(node); 538 + 539 + var border= 540 + num(style.borderTopWidth)+ 541 + num(style.borderRightWidth)+ 542 + num(style.borderBottomWidth)+ 543 + num(style.borderLeftWidth); 544 + 545 + if( 546 + rect.width>=220&& 547 + rect.width<=800&& 548 + rect.height>=120&& 549 + border>=1 550 + ){ 551 + candidates.push(node); 552 + } 553 + 554 + node=node.parentElement; 555 + } 556 + 557 + if(!candidates.length)return null; 558 + 559 + candidates.sort(function(a,b){ 560 + return ( 561 + b.getBoundingClientRect().height- 562 + a.getBoundingClientRect().height 563 + ); 564 + }); 565 + 566 + return candidates[0]; 567 + } 568 + 569 + function rowCandidates(link,card){ 570 + var result=[]; 571 + var cardRect= 572 + card.getBoundingClientRect(); 573 + 574 + var node=link; 575 + 576 + while(node&&node!==card){ 577 + if(visible(node)){ 578 + var rect= 579 + node.getBoundingClientRect(); 580 + 581 + if( 582 + rect.height<=105&& 583 + rect.width>= 584 + cardRect.width*.50&& 585 + rect.width<= 586 + cardRect.width*1.03 587 + ){ 588 + result.push(node); 589 + } 590 + } 591 + 592 + node=node.parentElement; 593 + } 594 + 595 + return result; 596 + } 597 + 598 + function chooseOuterRow( 599 + candidates, 600 + link 601 + ){ 602 + if(!candidates.length){ 603 + return link; 604 + } 605 + 606 + var bordered= 607 + candidates.filter(function(el){ 608 + return ( 609 + num( 610 + getComputedStyle(el) 611 + .borderLeftWidth 612 + )>=1 613 + ); 614 + }); 615 + 616 + var pool= 617 + bordered.length 618 + ?bordered 619 + :candidates; 620 + 621 + pool.sort(function(a,b){ 622 + var ar= 623 + a.getBoundingClientRect(); 624 + 625 + var br= 626 + b.getBoundingClientRect(); 627 + 628 + return ( 629 + ar.left-br.left|| 630 + br.width-ar.width 631 + ); 632 + }); 633 + 634 + return pool[0]||link; 635 + } 636 + 637 + function applyOverviewPalette(){ 638 + if(PAGE_KIND!=="overview"){ 639 + return []; 640 + } 641 + 642 + var headers= 643 + smallestThemeHeaders() 644 + .map(function(el){ 645 + return { 646 + el:el, 647 + theme: 648 + themeFor( 649 + el.textContent 650 + ), 651 + card: 652 + findOverviewCard( 653 + el 654 + ) 655 + }; 656 + }) 657 + .filter(function(row){ 658 + return !!row.card; 659 + }); 660 + 661 + var unique=[]; 662 + var seenHeaders=new Set(); 663 + 664 + headers.forEach(function(row){ 665 + var key= 666 + row.theme.name+ 667 + "|"+ 668 + Math.round( 669 + row.card 670 + .getBoundingClientRect() 671 + .left 672 + )+ 673 + "|"+ 674 + Math.round( 675 + row.el 676 + .getBoundingClientRect() 677 + .top 678 + ); 679 + 680 + if(!seenHeaders.has(key)){ 681 + seenHeaders.add(key); 682 + unique.push(row); 683 + } 684 + }); 685 + 686 + unique.forEach(function(row){ 687 + var headerRect= 688 + row.el 689 + .getBoundingClientRect(); 690 + 691 + row.el.style.setProperty( 692 + "background", 693 + row.theme.bg, 694 + "important" 695 + ); 696 + 697 + row.el.style.setProperty( 698 + "color", 699 + row.theme.text, 700 + "important" 701 + ); 702 + 703 + row.el.style.setProperty( 704 + "text-align", 705 + "left", 706 + "important" 707 + ); 708 + 709 + row.el.style.setProperty( 710 + "word-spacing", 711 + "normal", 712 + "important" 713 + ); 714 + 715 + var later= 716 + unique 717 + .filter(function(other){ 718 + return ( 719 + other.card===row.card&& 720 + other.el 721 + .getBoundingClientRect() 722 + .top> 723 + headerRect.top+2 724 + ); 725 + }) 726 + .sort(function(a,b){ 727 + return ( 728 + a.el 729 + .getBoundingClientRect() 730 + .top- 731 + b.el 732 + .getBoundingClientRect() 733 + .top 734 + ); 735 + }); 736 + 737 + var stopTop= 738 + later.length 739 + ?later[0].el 740 + .getBoundingClientRect() 741 + .top 742 + :Infinity; 743 + 744 + Array.from( 745 + row.card.querySelectorAll("a") 746 + ).forEach(function(link){ 747 + if(!visible(link))return; 748 + 749 + var rect= 750 + link.getBoundingClientRect(); 751 + 752 + if( 753 + rect.top<= 754 + headerRect.bottom-2|| 755 + rect.top>= 756 + stopTop-2 757 + ){ 758 + return; 759 + } 760 + 761 + var candidates= 762 + rowCandidates( 763 + link, 764 + row.card 765 + ); 766 + 767 + var target= 768 + chooseOuterRow( 769 + candidates, 770 + link 771 + ); 772 + 773 + candidates.forEach(function(el){ 774 + el.style.setProperty( 775 + "border-left", 776 + "0 solid transparent", 777 + "important" 778 + ); 779 + }); 780 + 781 + target.style.setProperty( 782 + "border-left", 783 + "3px solid "+ 784 + row.theme.accent, 785 + "important" 786 + ); 787 + 788 + target.style.setProperty( 789 + "box-sizing", 790 + "border-box", 791 + "important" 792 + ); 793 + }); 794 + }); 795 + 796 + return unique; 797 + } 798 + 799 + /* ======================================================= 800 + OVERVIEW CARD HEIGHT + FIRST THEMATIC ROW 801 + ======================================================= */ 802 + 803 + function alignOverviewCards(headers){ 804 + if( 805 + PAGE_KIND!=="overview"|| 806 + window.innerWidth<=MOBILE_MAX 807 + ){ 808 + return; 809 + } 810 + 811 + var cards=[]; 812 + var seen=new Set(); 813 + 814 + headers.forEach(function(row){ 815 + if(!seen.has(row.card)){ 816 + seen.add(row.card); 817 + cards.push(row.card); 818 + } 819 + }); 820 + 821 + if(cards.length<2){ 822 + return; 823 + } 824 + 825 + // Group cards by actual top position. 826 + var groups=[]; 827 + 828 + cards.forEach(function(card){ 829 + var top= 830 + card.getBoundingClientRect().top; 831 + 832 + var group=null; 833 + 834 + for(var i=0;i<groups.length;i++){ 835 + if( 836 + Math.abs( 837 + groups[i].top-top 838 + )<=ROW_TOLERANCE 839 + ){ 840 + group=groups[i]; 841 + break; 842 + } 843 + } 844 + 845 + if(!group){ 846 + group={ 847 + top:top, 848 + cards:[] 849 + }; 850 + groups.push(group); 851 + } 852 + 853 + group.cards.push(card); 854 + }); 855 + 856 + groups.forEach(function(group){ 857 + if(group.cards.length<2){ 858 + return; 859 + } 860 + 861 + var firstHeaders= 862 + group.cards.map(function(card){ 863 + var candidates= 864 + headers 865 + .filter(function(row){ 866 + return row.card===card; 867 + }) 868 + .sort(function(a,b){ 869 + return ( 870 + a.el 871 + .getBoundingClientRect() 872 + .top- 873 + b.el 874 + .getBoundingClientRect() 875 + .top 876 + ); 877 + }); 878 + 879 + return candidates.length 880 + ?candidates[0] 881 + :null; 882 + }); 883 + 884 + if( 885 + !firstHeaders.some(function(row){ 886 + return !row; 887 + }) 888 + ){ 889 + var targetTop= 890 + Math.max.apply( 891 + Math, 892 + firstHeaders.map(function(row){ 893 + return ( 894 + row.el 895 + .getBoundingClientRect() 896 + .top- 897 + row.card 898 + .getBoundingClientRect() 899 + .top 900 + ); 901 + }) 902 + ); 903 + 904 + firstHeaders.forEach(function(row){ 905 + var relativeTop= 906 + row.el 907 + .getBoundingClientRect() 908 + .top- 909 + row.card 910 + .getBoundingClientRect() 911 + .top; 912 + 913 + var delta= 914 + targetTop-relativeTop; 915 + 916 + if(delta>1){ 917 + saveStyle( 918 + row.el, 919 + originalMargin, 920 + "margin-top" 921 + ); 922 + 923 + var current= 924 + num( 925 + getComputedStyle( 926 + row.el 927 + ).marginTop 928 + ); 929 + 930 + row.el.style.setProperty( 931 + "margin-top", 932 + ( 933 + current+delta 934 + )+"px" 935 + ); 936 + 937 + row.el.setAttribute( 938 + "data-sn-master-first-row", 939 + "1" 940 + ); 941 + 942 + managedMargin.add( 943 + row.el 944 + ); 945 + } 946 + }); 947 + } 948 + 949 + var maxHeight=0; 950 + 951 + group.cards.forEach(function(card){ 952 + maxHeight= 953 + Math.max( 954 + maxHeight, 955 + card 956 + .getBoundingClientRect() 957 + .height 958 + ); 959 + }); 960 + 961 + maxHeight= 962 + Math.ceil(maxHeight); 963 + 964 + group.cards.forEach(function(card){ 965 + saveStyle( 966 + card, 967 + originalHeight, 968 + "min-height" 969 + ); 970 + 971 + card.style.setProperty( 972 + "min-height", 973 + maxHeight+"px" 974 + ); 975 + 976 + card.setAttribute( 977 + "data-sn-master-equal-height", 978 + "1" 979 + ); 980 + 981 + managedHeight.add( 982 + card 983 + ); 984 + }); 985 + }); 986 + } 987 + 988 + /* ======================================================= 989 + DETAIL GRID EQUAL HEIGHT, DESKTOP ONLY 990 + ======================================================= */ 991 + 992 + function equaliseDetailGrids(){ 993 + if( 994 + PAGE_KIND!=="detail"|| 995 + window.innerWidth<=MOBILE_MAX 996 + ){ 997 + return; 998 + } 999 + 1000 + var selectors=[ 1001 + ".arsn-grid", 1002 + ".arsn-grid-2", 1003 + ".arsn-grid-3", 1004 + ".dmp-grid", 1005 + ".ido-grid", 1006 + ".pp-grid" 1007 + ]; 1008 + 1009 + selectors.forEach(function(selector){ 1010 + Array.from( 1011 + root.querySelectorAll(selector) 1012 + ).forEach(function(grid){ 1013 + var children= 1014 + Array.from( 1015 + grid.children||[] 1016 + ).filter(visible); 1017 + 1018 + if(children.length<2){ 1019 + return; 1020 + } 1021 + 1022 + var groups=[]; 1023 + 1024 + children.forEach(function(child){ 1025 + var top= 1026 + child 1027 + .getBoundingClientRect() 1028 + .top; 1029 + 1030 + var group=null; 1031 + 1032 + for(var i=0;i<groups.length;i++){ 1033 + if( 1034 + Math.abs( 1035 + groups[i].top-top 1036 + )<=ROW_TOLERANCE 1037 + ){ 1038 + group=groups[i]; 1039 + break; 1040 + } 1041 + } 1042 + 1043 + if(!group){ 1044 + group={ 1045 + top:top, 1046 + items:[] 1047 + }; 1048 + groups.push(group); 1049 + } 1050 + 1051 + group.items.push(child); 1052 + }); 1053 + 1054 + groups.forEach(function(group){ 1055 + if(group.items.length<2){ 1056 + return; 1057 + } 1058 + 1059 + var maxHeight=0; 1060 + 1061 + group.items.forEach(function(item){ 1062 + maxHeight= 1063 + Math.max( 1064 + maxHeight, 1065 + item 1066 + .getBoundingClientRect() 1067 + .height 1068 + ); 1069 + }); 1070 + 1071 + maxHeight= 1072 + Math.ceil(maxHeight); 1073 + 1074 + group.items.forEach(function(item){ 1075 + saveStyle( 1076 + item, 1077 + originalHeight, 1078 + "min-height" 1079 + ); 1080 + 1081 + item.style.setProperty( 1082 + "min-height", 1083 + maxHeight+"px" 1084 + ); 1085 + 1086 + item.setAttribute( 1087 + "data-sn-master-equal-height", 1088 + "1" 1089 + ); 1090 + 1091 + managedHeight.add(item); 1092 + }); 1093 + }); 1094 + }); 1095 + }); 1096 + } 1097 + 1098 + /* ======================================================= 1099 + RUN / RESPONSIVE SCHEDULING 1100 + ======================================================= */ 1101 + 1102 + function run(){ 1103 + if(running)return; 1104 + 1105 + running=true; 1106 + 1107 + try{ 1108 + resetRuntime(); 1109 + applyPlaceholderBadge(); 1110 + propagateDetailAccents(); 1111 + 1112 + var headers= 1113 + applyOverviewPalette(); 1114 + 1115 + if( 1116 + window.innerWidth> 1117 + MOBILE_MAX 1118 + ){ 1119 + alignOverviewCards( 1120 + headers 1121 + ); 1122 + 1123 + equaliseDetailGrids(); 1124 + } 1125 + }finally{ 1126 + running=false; 1127 + } 1128 + } 1129 + 1130 + function onResize(){ 1131 + if(resizeTimer){ 1132 + clearTimeout( 1133 + resizeTimer 1134 + ); 1135 + } 1136 + 1137 + resizeTimer= 1138 + setTimeout( 1139 + function(){ 1140 + resizeTimer=0; 1141 + run(); 1142 + }, 1143 + RESIZE_DEBOUNCE 1144 + ); 1145 + } 1146 + 1147 + async function waitForReady(){ 1148 + if( 1149 + document.readyState!=="complete" 1150 + ){ 1151 + await new Promise(function(resolve){ 1152 + window.addEventListener( 1153 + "load", 1154 + resolve, 1155 + {once:true} 1156 + ); 1157 + }); 1158 + } 1159 + 1160 + if( 1161 + document.fonts&& 1162 + document.fonts.ready 1163 + ){ 1164 + try{ 1165 + await document.fonts.ready; 1166 + }catch(error){} 1167 + } 1168 + 1169 + var images= 1170 + Array.from( 1171 + root.querySelectorAll("img") 1172 + ); 1173 + 1174 + await Promise.all( 1175 + images.map(function(img){ 1176 + if(img.complete){ 1177 + return Promise.resolve(); 1178 + } 1179 + 1180 + return new Promise(function(resolve){ 1181 + var done=function(){ 1182 + resolve(); 1183 + }; 1184 + 1185 + img.addEventListener( 1186 + "load", 1187 + done, 1188 + {once:true} 1189 + ); 1190 + 1191 + img.addEventListener( 1192 + "error", 1193 + done, 1194 + {once:true} 1195 + ); 1196 + }); 1197 + }) 1198 + ); 1199 + 1200 + run(); 1201 + } 1202 + 1203 + window.addEventListener( 1204 + "resize", 1205 + onResize, 1206 + {passive:true} 1207 + ); 1208 + 1209 + waitForReady(); 1210 +})(); 1211 +</script> 1212 + 1213 +<!-- SN_SERVICE_NAVIGATOR_MASTER_STYLE_END --> 238 238 {{/html}} 239 239