diff --git a/.gitignore b/.gitignore index 99ade69..efff699 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ public resources .local .DS_Store +.idea/ diff --git a/config/_default/menus.de.toml b/config/_default/menus.de.toml index 0a6c9cb..5acf0ba 100644 --- a/config/_default/menus.de.toml +++ b/config/_default/menus.de.toml @@ -20,6 +20,18 @@ pageRef = "contributors" weight = 30 +[[main]] +name = "Topics" +pageRef = "/topics" +weight = 40 + +[[main]] +name = "News" +pageRef = "/news" +weight = 50 + + + #[[main]] # name = "Data" # pageRef = "data" diff --git a/config/_default/menus.en.toml b/config/_default/menus.en.toml index 73b70de..2f2676b 100644 --- a/config/_default/menus.en.toml +++ b/config/_default/menus.en.toml @@ -20,6 +20,15 @@ pageRef = "contributors" weight = 30 +[[main]] +name = "Topics" +pageRef = "/topics" +weight = 40 + +[[main]] +name = "News" +pageRef = "/news" +weight = 50 #[[main]] # name = "Data" diff --git a/content/_index.de.md b/content/_index.de.md index a02b65b..09ed406 100644 --- a/content/_index.de.md +++ b/content/_index.de.md @@ -1,3 +1,37 @@ +--- +title: TRR379 +hero: + title: "NEUROPSYCHOLOGIE
DER AGGRESSION" + subtitle: "Ein transdiagnostischer Ansatz
bei psychischen Erkrankungen" +panels: + rdoc: + label_key: "objectives" + title: "RDoC-Domänen" + text: "Dieser Transregio SFB (TRR 379) folgt dem Research Domain Criteria (RDoC) Ansatz und untersucht Aggression auf transdiagnostische Weise. Im Rahmen des „negativen Valenzsystems\" (NVS) und des „kognitiven Systems\" (CS) des RDoC zielt der TRR darauf ab, spezifische Biosignaturen zu identifizieren und zu charakterisieren sowie aggressives Verhalten vorherzusagen." + multilevel: + title: "Multidimensionalität" + text: "Das TRR-Projekt zielt darauf ab, diese Mechanismen multidimensional zu erfassen und zu definieren, um ein detailliertes Verständnis der Biologie, Psychologie und Physiologie spezifischer aggressiver Biosignaturen über psychische Störungen hinweg zu generieren." + adolescence: + title: "Von der frühen Adoleszenz bis ins Erwachsenenalter" + text: "Schließlich zielt das TRR darauf ab, die zeitliche Stabilität von AMD sowie das (dys-)funktionale NVS und CS während der Entwicklung vom frühen Jugendalter bis ins Erwachsenenalter sowie im Verlauf der Erkrankung zu betrachten." +research_areas: + - id: a + title: "Bereich A" + desc: "Projekte zur
negativen Valenz" + color: "#ef9052" + - id: b + title: "Bereich B" + desc: "Projekte zur
kognitiven Kontrolle" + color: "#0a8f37" + - id: c + title: "Bereich C" + desc: "Projekte zur
Interaktion von A & C" + color: "#9c1916" + - id: z + title: "Z: Zentralprojekte" + desc: "Zentrale Servicedienste" + color: "#888" +---
[RWTH Aachen](https://www.rwth-aachen.de) -- [Universität Heidelberg](https://www.uni-heidelberg.de) -- [Universität Frankfurt](https://www.goethe-university-frankfurt.de) @@ -7,7 +41,7 @@ Sprecherin: [Ute Habel]({{< relref path="/contributors/ute-habel" lang="en">}})
Linienzeichnung einer Laborsituation mit Computer-Grafiken, Büchern, Mikroskop und verschiedenen Utensilien -Wie kommt es zu aggressivem Verhalten bei Patienten mit psychischen Störungen? Welche Rolle spielen kognitive, umweltbedingte und biologische Faktoren wie auch Krankheitssymptome für das Verstehen und Auftreten aggressiven Verhaltens? Wie können wir aggressives Verhalten bei psychischen Störungen effektiver behandeln? Ein Team aus Wissenschaftlerinnen und Wissenschaftler von verschiedenen Hochschulen wenden sich diesen Fragen in einem längsschnittlichen, multidimensionalen, transdiagnostischen, Entwicklung-Ansatz im TRR 379 zu. Sie wollen transdiagnostische Biosignaturen identifizieren, um eine spezifischere Prävention und Behandlung zu ermöglichen. +Wie kommt es zu aggressivem Verhalten bei Patienten mit psychischen Störungen? Welche Rolle spielen kognitive, umweltbedingte und biologische Faktoren wie auch Krankheitssymptome für das Verstehen und Auftreten aggressiven Verhaltens? Wie können wir aggressives Verhalten bei psychischen Störungen effektiver behandeln? Ein Team aus Wissenschaftlerinnen und Wissenschaftler von verschiedenen Hochschulen wenden sich diesen Fragen in einem längsschnittlichen, multidimensionalen, transdiagnostischen, Entwicklung-Ansatz im TRR 379 zu. Sie wollen transdiagnostische Biosignaturen identifizieren, um eine spezifischere Prävention und Behandlung zu ermöglichen. \ No newline at end of file diff --git a/content/_index.md b/content/_index.md index a27e4bc..875dab6 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,13 +1,41 @@ +--- +title: TRR379 +hero: + title: "NEUROPSYCHOLOGY
OF AGGRESSION" + subtitle: "A Transdiagnostic Approach
in Mental Disorders" +panels: + rdoc: + label_key: "objectives" + title: "RDoC Domains" + text: "This Transregional Collaborative Research Center 379 (TRR) will follow the Research Domain Criteria (RDoC) framework, investigating aggression in a transdiagnostic manner. Within the RDoC's \"negative valence system\" (NVS) and \"cognitive system\" (CS) the TRR aims to identify and characterize specific biosignatures and predict aggressive behavior." + multilevel: + title: "Multidimensional scale" + text: "The TRR will seek to identify and define these mechanisms on a multilevel scale, advancing a detailed understanding of the biology, psychology, and physiology of specific aggressive biosignatures across mental disorders." + adolescence: + title: "From Early Adolescence until Adulthood" + text: "Finally, the TRR aims to address the temporal stability of AMD and the (dys-)functional NVS and CS during development from early adolescence until adulthood and during the disease course." +research_areas: + - id: a + title: "Area A" + desc: "Projects on
Negative Valence" + color: "#ef9052" + - id: b + title: "Area B" + desc: "Projects on
Cognitive Control" + color: "#0a8f37" + - id: c + title: "Area C" + desc: "Projects on the
Interaction of A & C" + color: "#9c1916" + - id: z + title: "Z: Central Service" + desc: "Central Service Projects" + color: "#888" +---
[RWTH Aachen](https://www.rwth-aachen.de) -- [Heidelberg University](https://www.uni-heidelberg.de/en) -- [Frankfurt University](https://www.goethe-university-frankfurt.de/en) Spokesperson: [Ute Habel]({{< relref "/contributors/ute-habel" >}}) -
- -Line art drawing of a lab situation with computer charts, books, microscope, and various utilities - -How does aggressive behavior arise in patients with mental disorders? What role do cognitive, environmental, and biological factors, as well as disease symptoms, play in understanding and the occurrence of aggressive behavior? How can we treat aggressive behavior in patients with mental disorders better? A team of researchers from various universities is addressing these questions through a longitudinal, developmental, multidimensional, transdiagnostic approach in the TRR 379. They aim at identifying transdiagnostic biosignatures to enable a more specific prevention and treatment. + \ No newline at end of file diff --git a/content/contributors/_index.md b/content/contributors/_index.md index 864f3d0..bd13d32 100644 --- a/content/contributors/_index.md +++ b/content/contributors/_index.md @@ -1,17 +1,6 @@ --- title: Contributors +layout: list --- -TRR379 is a large collaborative research initiative. Many individuals -contribute their expertise in various [roles]({{< relref "/roles" >}}), such -as: - -- [Spokesperson]({{< relref "/roles/spokesperson" >}}) -- [Deputy spokesperson]({{< relref "/roles/deputy-spokesperson" >}}) -- [Principal investigator / project lead]({{< relref "/roles/pi" >}}) -- [Postdoctoral researchers]({{< relref "/roles/postdoc" >}}) -- [Doctoral researchers]({{< relref "/roles/doctoral-researcher" >}}) -- [Research assistants]({{< relref "/roles/research-assistant" >}}) -- [Scientific Advisory Board]({{< relref "/roles/sab-member" >}}) -- [Equal Opportunity Committee]({{< relref "/roles/eoc-member" >}}) -- [Citizen Advisory Board]({{< relref "/roles/cab-member" >}}) +TRR379 is a large collaborative research initiative. Many individuals contribute their expertise in various roles, such as Spokesperson, Deputy spokesperson, Principal investigator, Postdoctoral and Doctoral researchers. The following individuals are contributing to this effort. diff --git a/content/contributors/aet-oleary/_index.md b/content/contributors/aet-oleary/_index.md index 5d6ca6b..7aa3694 100644 --- a/content/contributors/aet-oleary/_index.md +++ b/content/contributors/aet-oleary/_index.md @@ -2,8 +2,7 @@ title: Aet O'Leary projects: - c01 -sites: -- frankfurt + roles: - pi params: @@ -12,5 +11,7 @@ params: sortkey: O'Leary;Aet;Ph.D. affiliation: Goethe University Frankfurt active: true + sites: + - frankfurt layout: contributor --- diff --git a/content/contributors/alessio-giacomel/_index.md b/content/contributors/alessio-giacomel/_index.md index 6190e97..504c886 100644 --- a/content/contributors/alessio-giacomel/_index.md +++ b/content/contributors/alessio-giacomel/_index.md @@ -3,7 +3,7 @@ title: Alessio Giacomel projects: - c05 - q02 -sites: +campus: - frankfurt params: orcid: 0000-0002-7784-2041 diff --git a/content/contributors/alexandra-sebastian/_index.md b/content/contributors/alexandra-sebastian/_index.md index acd519e..ea45a84 100644 --- a/content/contributors/alexandra-sebastian/_index.md +++ b/content/contributors/alexandra-sebastian/_index.md @@ -2,7 +2,7 @@ title: Alexandra Sebastian projects: - b02 -sites: +campus: - mainz params: orcid: 0000-0002-8381-8312 diff --git a/content/contributors/alper-koelgesiz/_index.md b/content/contributors/alper-koelgesiz/_index.md index dac5f2d..4aa4d1f 100644 --- a/content/contributors/alper-koelgesiz/_index.md +++ b/content/contributors/alper-koelgesiz/_index.md @@ -2,7 +2,7 @@ title: Alper Kölgesiz projects: - a05 -sites: +campus: - mannheim params: orcid: 0009-0008-9635-8707 diff --git a/content/contributors/andreas-g-chiocchetti/_index.md b/content/contributors/andreas-g-chiocchetti/_index.md index 1e4ac03..7664138 100644 --- a/content/contributors/andreas-g-chiocchetti/_index.md +++ b/content/contributors/andreas-g-chiocchetti/_index.md @@ -2,7 +2,7 @@ title: Andreas G. Chiocchetti projects: - c04 -sites: +campus: - frankfurt roles: - eoc-member diff --git a/content/contributors/andreas-meyer-lindenberg/_index.md b/content/contributors/andreas-meyer-lindenberg/_index.md index 983cb0f..594a12b 100644 --- a/content/contributors/andreas-meyer-lindenberg/_index.md +++ b/content/contributors/andreas-meyer-lindenberg/_index.md @@ -4,7 +4,7 @@ projects: - a05 - a06 - b04 -sites: +campus: - heidelberg - mannheim roles: diff --git a/content/contributors/andreas-reif/_index.md b/content/contributors/andreas-reif/_index.md index dc268e6..9f8c566 100644 --- a/content/contributors/andreas-reif/_index.md +++ b/content/contributors/andreas-reif/_index.md @@ -4,7 +4,7 @@ projects: - a07 - b01 - q01 -sites: +campus: - frankfurt roles: - cab-member diff --git a/content/contributors/angela-peters/_index.md b/content/contributors/angela-peters/_index.md index a56f037..4908bfd 100644 --- a/content/contributors/angela-peters/_index.md +++ b/content/contributors/angela-peters/_index.md @@ -1,6 +1,6 @@ --- title: Angela Peters -sites: +campus: - aachen params: sortkey: Peters;Angela diff --git a/content/contributors/anja-conzen/_index.md b/content/contributors/anja-conzen/_index.md index 5e346bd..42c22ea 100644 --- a/content/contributors/anja-conzen/_index.md +++ b/content/contributors/anja-conzen/_index.md @@ -2,7 +2,7 @@ title: Anja Conzen projects: - q04 -sites: +campus: - aachen roles: - management-board-member diff --git a/content/contributors/anna-kwiatkowski/_index.md b/content/contributors/anna-kwiatkowski/_index.md index 3c76f92..dd45d61 100644 --- a/content/contributors/anna-kwiatkowski/_index.md +++ b/content/contributors/anna-kwiatkowski/_index.md @@ -2,7 +2,7 @@ title: Anna Kwiatkowski projects: - q04 -sites: +campus: - aachen params: orcid: 0000-0001-6296-0718 diff --git a/content/contributors/annika-maas/_index.md b/content/contributors/annika-maas/_index.md index af901c2..4528390 100644 --- a/content/contributors/annika-maas/_index.md +++ b/content/contributors/annika-maas/_index.md @@ -2,7 +2,7 @@ title: Annika Maas projects: - q01 -sites: +campus: - aachen params: sortkey: Maas;Annika diff --git a/content/contributors/antonia-fritsch/_index.md b/content/contributors/antonia-fritsch/_index.md index 65eb5e8..85f8afc 100644 --- a/content/contributors/antonia-fritsch/_index.md +++ b/content/contributors/antonia-fritsch/_index.md @@ -4,7 +4,7 @@ projects: - a07 - b01 - q01 -sites: +campus: - mannheim params: orcid: 0000-0003-3093-9046 diff --git a/content/contributors/arezoo-taebi/_index.md b/content/contributors/arezoo-taebi/_index.md index 1107afa..02706ac 100644 --- a/content/contributors/arezoo-taebi/_index.md +++ b/content/contributors/arezoo-taebi/_index.md @@ -2,7 +2,7 @@ title: Arezoo Taebi projects: - q02 -sites: +campus: - aachen roles: - doctoral-researcher diff --git a/content/contributors/carmen-weidler/_index.md b/content/contributors/carmen-weidler/_index.md index f7b117a..add7be7 100644 --- a/content/contributors/carmen-weidler/_index.md +++ b/content/contributors/carmen-weidler/_index.md @@ -2,7 +2,7 @@ title: Carmen Weidler projects: - b01 -sites: +campus: - aachen roles: - pi diff --git a/content/contributors/catherine-barnes-scheufler/_index.md b/content/contributors/catherine-barnes-scheufler/_index.md index 0c3e904..34699b5 100644 --- a/content/contributors/catherine-barnes-scheufler/_index.md +++ b/content/contributors/catherine-barnes-scheufler/_index.md @@ -2,7 +2,7 @@ title: Catherine Barnes-Scheufler projects: - q01 -sites: +campus: - frankfurt params: orcid: 0000-0002-4730-1981 diff --git a/content/contributors/celina-mueller/_index.md b/content/contributors/celina-mueller/_index.md index 89d2632..265b50b 100644 --- a/content/contributors/celina-mueller/_index.md +++ b/content/contributors/celina-mueller/_index.md @@ -2,7 +2,7 @@ title: Celina Müller projects: - q01 -sites: +campus: - wuerzburg params: orcid: 0000-0002-1639-8864 diff --git a/content/contributors/chiara-gramegna/_index.md b/content/contributors/chiara-gramegna/_index.md index 1705339..e053e35 100644 --- a/content/contributors/chiara-gramegna/_index.md +++ b/content/contributors/chiara-gramegna/_index.md @@ -1,6 +1,6 @@ --- title: Chiara Gramegna -sites: +campus: - aachen params: sortkey: Gramegna;Chiara diff --git a/content/contributors/christian-paret/_index.md b/content/contributors/christian-paret/_index.md index 3fd4420..45bb467 100644 --- a/content/contributors/christian-paret/_index.md +++ b/content/contributors/christian-paret/_index.md @@ -2,7 +2,7 @@ title: Christian Paret-Voigt projects: - b03 -sites: +campus: - heidelberg roles: - pi diff --git a/content/contributors/christian-schmahl/_index.md b/content/contributors/christian-schmahl/_index.md index 58b0f36..cb62b7e 100644 --- a/content/contributors/christian-schmahl/_index.md +++ b/content/contributors/christian-schmahl/_index.md @@ -2,7 +2,7 @@ title: Christian Schmahl projects: - a03 -sites: +campus: - mannheim roles: - cab-member diff --git a/content/contributors/christiane-licht/_index.md b/content/contributors/christiane-licht/_index.md index a675f74..74d5e7e 100644 --- a/content/contributors/christiane-licht/_index.md +++ b/content/contributors/christiane-licht/_index.md @@ -2,7 +2,7 @@ title: Christiane Licht projects: - q01 -sites: +campus: - aachen roles: - postdoc diff --git a/content/contributors/christina-neczewicz/_index.md b/content/contributors/christina-neczewicz/_index.md index bf2c3f1..b2168c5 100644 --- a/content/contributors/christina-neczewicz/_index.md +++ b/content/contributors/christina-neczewicz/_index.md @@ -2,7 +2,7 @@ title: Christina Neczewicz projects: - q01 -sites: +campus: - aachen roles: - doctoral-researcher diff --git a/content/contributors/christine-ecker/_index.md b/content/contributors/christine-ecker/_index.md index bedb2b5..dd6cc96 100644 --- a/content/contributors/christine-ecker/_index.md +++ b/content/contributors/christine-ecker/_index.md @@ -3,7 +3,7 @@ title: Christine Ecker projects: - c05 - q02 -sites: +campus: - frankfurt roles: - pi diff --git a/content/contributors/christine-margarete-freitag/_index.md b/content/contributors/christine-margarete-freitag/_index.md index 5cf293e..62dfb58 100644 --- a/content/contributors/christine-margarete-freitag/_index.md +++ b/content/contributors/christine-margarete-freitag/_index.md @@ -3,7 +3,7 @@ title: Christine Margarete Freitag projects: - c04 - q01 -sites: +campus: - frankfurt roles: - pi diff --git a/content/contributors/christoph-korn/_index.md b/content/contributors/christoph-korn/_index.md index 31cc1d8..283be78 100644 --- a/content/contributors/christoph-korn/_index.md +++ b/content/contributors/christoph-korn/_index.md @@ -2,7 +2,7 @@ title: Christoph Korn projects: - c02 -sites: +campus: - heidelberg roles: - pi diff --git a/content/contributors/christoph-mallmann/_index.md b/content/contributors/christoph-mallmann/_index.md index 5c1872c..55d89c5 100644 --- a/content/contributors/christoph-mallmann/_index.md +++ b/content/contributors/christoph-mallmann/_index.md @@ -2,7 +2,7 @@ title: Christoph Mallmann projects: - a04 -sites: +campus: - aachen params: orcid: 0009-0004-4800-5350 diff --git a/content/contributors/corinne-neukel/_index.md b/content/contributors/corinne-neukel/_index.md index 588c3bf..f463fc6 100644 --- a/content/contributors/corinne-neukel/_index.md +++ b/content/contributors/corinne-neukel/_index.md @@ -2,7 +2,7 @@ title: Corinne Neukel projects: - c06 -sites: +campus: - heidelberg roles: - pi diff --git a/content/contributors/daniel-turner/_index.md b/content/contributors/daniel-turner/_index.md index c838e70..61d7c96 100644 --- a/content/contributors/daniel-turner/_index.md +++ b/content/contributors/daniel-turner/_index.md @@ -1,6 +1,6 @@ --- title: Daniel Turner -sites: +campus: - mainz params: sortkey: Turner;Daniel diff --git a/content/contributors/dario-mueller/_index.md b/content/contributors/dario-mueller/_index.md index 93613bd..7c4afa7 100644 --- a/content/contributors/dario-mueller/_index.md +++ b/content/contributors/dario-mueller/_index.md @@ -2,7 +2,7 @@ title: Dario Müller projects: - q01 -sites: +campus: - aachen params: orcid: 0000-0002-1483-1118 diff --git a/content/contributors/david-slattery/_index.md b/content/contributors/david-slattery/_index.md index 513f1a5..7ad02ce 100644 --- a/content/contributors/david-slattery/_index.md +++ b/content/contributors/david-slattery/_index.md @@ -5,7 +5,7 @@ projects: - a08 - c01 - q03 -sites: +campus: - frankfurt roles: - cab-member diff --git a/content/contributors/gabriele-ende/_index.md b/content/contributors/gabriele-ende/_index.md index 8e0cd2e..49ff13b 100644 --- a/content/contributors/gabriele-ende/_index.md +++ b/content/contributors/gabriele-ende/_index.md @@ -4,7 +4,7 @@ projects: - a03 - a08 - q02 -sites: +campus: - mannheim roles: - pi diff --git a/content/contributors/habiba-hassan/_index.md b/content/contributors/habiba-hassan/_index.md index 5f8f628..fee5add 100644 --- a/content/contributors/habiba-hassan/_index.md +++ b/content/contributors/habiba-hassan/_index.md @@ -2,7 +2,7 @@ title: Habiba Hassan projects: - a05 -sites: +campus: - mannheim params: sortkey: Hassan;Habiba diff --git a/content/contributors/hande-betuel-oezsoy/_index.md b/content/contributors/hande-betuel-oezsoy/_index.md index 10df420..6d80921 100644 --- a/content/contributors/hande-betuel-oezsoy/_index.md +++ b/content/contributors/hande-betuel-oezsoy/_index.md @@ -2,7 +2,7 @@ title: Hande Betül Özsoy projects: - c01 -sites: +campus: - frankfurt params: orcid: 0000-0002-4243-9578 diff --git a/content/contributors/heike-tost/_index.md b/content/contributors/heike-tost/_index.md index 1fb1eac..0361436 100644 --- a/content/contributors/heike-tost/_index.md +++ b/content/contributors/heike-tost/_index.md @@ -2,7 +2,7 @@ title: Heike Tost projects: - a05 -sites: +campus: - heidelberg - mannheim roles: diff --git a/content/contributors/henry-schirok/_index.md b/content/contributors/henry-schirok/_index.md index 92dd49a..76542e8 100644 --- a/content/contributors/henry-schirok/_index.md +++ b/content/contributors/henry-schirok/_index.md @@ -2,7 +2,7 @@ title: Henry Schirok projects: - q01 -sites: +campus: - heidelberg params: sortkey: Schirok;Henry diff --git a/content/contributors/ina-kuschel/_index.md b/content/contributors/ina-kuschel/_index.md index 61aa7b5..ec6f8a6 100644 --- a/content/contributors/ina-kuschel/_index.md +++ b/content/contributors/ina-kuschel/_index.md @@ -4,7 +4,7 @@ projects: - a07 - b01 - q01 -sites: +campus: - frankfurt params: sortkey: Kuschel;Ina diff --git a/content/contributors/inken-berg/_index.md b/content/contributors/inken-berg/_index.md index 59ebb5d..ed60246 100644 --- a/content/contributors/inken-berg/_index.md +++ b/content/contributors/inken-berg/_index.md @@ -1,6 +1,6 @@ --- title: Inken Berg -sites: +campus: - frankfurt params: sortkey: Berg;Inken diff --git a/content/contributors/isabel-neumann/_index.md b/content/contributors/isabel-neumann/_index.md index a9c1c0a..c76b995 100644 --- a/content/contributors/isabel-neumann/_index.md +++ b/content/contributors/isabel-neumann/_index.md @@ -2,7 +2,7 @@ title: Isabel Neumann projects: - a02 -sites: +campus: - wuerzburg roles: - postdoc diff --git a/content/contributors/jana-zweerings/_index.md b/content/contributors/jana-zweerings/_index.md index 8c10107..a1ce233 100644 --- a/content/contributors/jana-zweerings/_index.md +++ b/content/contributors/jana-zweerings/_index.md @@ -2,7 +2,7 @@ title: Jana Zweerings projects: - b03 -sites: +campus: - aachen roles: - pi diff --git a/content/contributors/jaqueline-scharf/_index.md b/content/contributors/jaqueline-scharf/_index.md index 9f29866..fc77955 100644 --- a/content/contributors/jaqueline-scharf/_index.md +++ b/content/contributors/jaqueline-scharf/_index.md @@ -2,7 +2,7 @@ title: Jaqueline Scharf projects: - q01 -sites: +campus: - heidelberg params: sortkey: Scharf;Jaqueline diff --git a/content/contributors/julia-koch/_index.md b/content/contributors/julia-koch/_index.md index c197043..5540f51 100644 --- a/content/contributors/julia-koch/_index.md +++ b/content/contributors/julia-koch/_index.md @@ -1,6 +1,6 @@ --- title: Julia Koch -sites: +campus: - aachen params: name-title: M.Sc. diff --git a/content/contributors/julia-schraeder/_index.md b/content/contributors/julia-schraeder/_index.md index 332f900..9c314a2 100644 --- a/content/contributors/julia-schraeder/_index.md +++ b/content/contributors/julia-schraeder/_index.md @@ -2,7 +2,7 @@ title: Julia Schräder projects: - b04 -sites: +campus: - aachen params: orcid: 0000-0002-3614-8926 diff --git a/content/contributors/katja-bertsch/_index.md b/content/contributors/katja-bertsch/_index.md index 0ba00c7..4be27b5 100644 --- a/content/contributors/katja-bertsch/_index.md +++ b/content/contributors/katja-bertsch/_index.md @@ -3,7 +3,7 @@ title: Katja Bertsch projects: - a02 - b04 -sites: +campus: - wuerzburg roles: - eoc-member diff --git a/content/contributors/kerstin-konrad/_index.md b/content/contributors/kerstin-konrad/_index.md index 8f79e1f..c68bb63 100644 --- a/content/contributors/kerstin-konrad/_index.md +++ b/content/contributors/kerstin-konrad/_index.md @@ -3,7 +3,7 @@ title: Kerstin Konrad projects: - a06 - q01 -sites: +campus: - aachen - juelich roles: diff --git a/content/contributors/klaus-mathiak/_index.md b/content/contributors/klaus-mathiak/_index.md index e9a16f4..ddfb2f3 100644 --- a/content/contributors/klaus-mathiak/_index.md +++ b/content/contributors/klaus-mathiak/_index.md @@ -4,7 +4,7 @@ projects: - b03 - c02 - q02 -sites: +campus: - aachen roles: - eoc-member diff --git a/content/contributors/lena-terlau/_index.md b/content/contributors/lena-terlau/_index.md index e347ca3..804e40d 100644 --- a/content/contributors/lena-terlau/_index.md +++ b/content/contributors/lena-terlau/_index.md @@ -2,7 +2,7 @@ title: Lena Terlau projects: - a01 -sites: +campus: - aachen roles: - doctoral-researcher diff --git a/content/contributors/linda-wilkin-krug/_index.md b/content/contributors/linda-wilkin-krug/_index.md index 4e5aac2..e185450 100644 --- a/content/contributors/linda-wilkin-krug/_index.md +++ b/content/contributors/linda-wilkin-krug/_index.md @@ -2,7 +2,7 @@ title: Linda Wilkin-Krug projects: - b04 -sites: +campus: - wuerzburg roles: - eoc-member diff --git a/content/contributors/lisa-berg/_index.md b/content/contributors/lisa-berg/_index.md index 937a76b..1de7198 100644 --- a/content/contributors/lisa-berg/_index.md +++ b/content/contributors/lisa-berg/_index.md @@ -1,6 +1,6 @@ --- title: Lisa Berg -sites: +campus: - frankfurt params: sortkey: Berg;Lisa diff --git a/content/contributors/lisa-wagels/_index.md b/content/contributors/lisa-wagels/_index.md index 6d80732..81c7f7a 100644 --- a/content/contributors/lisa-wagels/_index.md +++ b/content/contributors/lisa-wagels/_index.md @@ -3,7 +3,7 @@ title: Lisa Wagels projects: - b04 - q03 -sites: +campus: - aachen roles: - pi diff --git a/content/contributors/luca-lasogga/_index.md b/content/contributors/luca-lasogga/_index.md index 08f467b..997bf35 100644 --- a/content/contributors/luca-lasogga/_index.md +++ b/content/contributors/luca-lasogga/_index.md @@ -2,7 +2,7 @@ title: Luca Lasogga projects: - b01 -sites: +campus: - aachen params: orcid: 0009-0002-2080-3583 diff --git a/content/contributors/marc-spehr/_index.md b/content/contributors/marc-spehr/_index.md index a942ef4..44ceb13 100644 --- a/content/contributors/marc-spehr/_index.md +++ b/content/contributors/marc-spehr/_index.md @@ -2,7 +2,7 @@ title: Marc Spehr projects: - a01 -sites: +campus: - aachen roles: - pi diff --git a/content/contributors/michael-hanke/_index.md b/content/contributors/michael-hanke/_index.md index 0429859..7d22ebe 100644 --- a/content/contributors/michael-hanke/_index.md +++ b/content/contributors/michael-hanke/_index.md @@ -2,7 +2,7 @@ title: Michael Hanke projects: - q02 -sites: +campus: - juelich roles: - pi diff --git a/content/contributors/michael-plichta/_index.md b/content/contributors/michael-plichta/_index.md index 427f3ae..a1d610d 100644 --- a/content/contributors/michael-plichta/_index.md +++ b/content/contributors/michael-plichta/_index.md @@ -2,7 +2,7 @@ title: Michael Plichta projects: - c07 -sites: +campus: - frankfurt roles: - pi diff --git a/content/contributors/milad-amini-masouleh/_index.md b/content/contributors/milad-amini-masouleh/_index.md index 954f181..f151747 100644 --- a/content/contributors/milad-amini-masouleh/_index.md +++ b/content/contributors/milad-amini-masouleh/_index.md @@ -2,7 +2,7 @@ title: Milad Amini Masouleh projects: - a03 -sites: +campus: - mannheim params: sortkey: Amini Masouleh;Milad diff --git a/content/contributors/mina-misic/_index.md b/content/contributors/mina-misic/_index.md index 0ef92d7..65b40f5 100644 --- a/content/contributors/mina-misic/_index.md +++ b/content/contributors/mina-misic/_index.md @@ -2,7 +2,7 @@ title: Mina Mišić projects: - a06 -sites: +campus: - mannheim params: orcid: 0000-0003-1754-8681 diff --git a/content/contributors/moritz-burghardt/_index.md b/content/contributors/moritz-burghardt/_index.md index 45c18cb..e95d5e5 100644 --- a/content/contributors/moritz-burghardt/_index.md +++ b/content/contributors/moritz-burghardt/_index.md @@ -2,7 +2,7 @@ title: Moritz Burghardt projects: - c02 -sites: +campus: - heidelberg params: sortkey: Burghardt;Moritz diff --git a/content/contributors/moritz-sturm/_index.md b/content/contributors/moritz-sturm/_index.md index 285b867..af386be 100644 --- a/content/contributors/moritz-sturm/_index.md +++ b/content/contributors/moritz-sturm/_index.md @@ -2,7 +2,7 @@ title: Moritz Sturm projects: - c04 -sites: +campus: - frankfurt params: sortkey: Sturm;Moritz diff --git a/content/contributors/natalia-chechko/_index.md b/content/contributors/natalia-chechko/_index.md index 15c39fd..987a517 100644 --- a/content/contributors/natalia-chechko/_index.md +++ b/content/contributors/natalia-chechko/_index.md @@ -2,7 +2,7 @@ title: Natalia Chechko projects: - a04 -sites: +campus: - aachen roles: - eoc-member diff --git a/content/contributors/nathalie-holz/_index.md b/content/contributors/nathalie-holz/_index.md index 0cc32d8..372cbf8 100644 --- a/content/contributors/nathalie-holz/_index.md +++ b/content/contributors/nathalie-holz/_index.md @@ -2,7 +2,7 @@ title: Nathalie Holz projects: - b05 -sites: +campus: - mannheim roles: - pi diff --git a/content/contributors/neele-ulken/_index.md b/content/contributors/neele-ulken/_index.md index e89a658..8d1bedd 100644 --- a/content/contributors/neele-ulken/_index.md +++ b/content/contributors/neele-ulken/_index.md @@ -2,7 +2,7 @@ title: Neele Ulken projects: - a06 -sites: +campus: - aachen params: sortkey: Ulken;Neele diff --git a/content/contributors/neha-vats/_index.md b/content/contributors/neha-vats/_index.md index 996e281..54d9218 100644 --- a/content/contributors/neha-vats/_index.md +++ b/content/contributors/neha-vats/_index.md @@ -2,7 +2,7 @@ title: Neha Vats projects: - a03 -sites: +campus: - mannheim params: orcid: 0000-0001-9482-3769 diff --git a/content/contributors/nick-worm/_index.md b/content/contributors/nick-worm/_index.md index f7068f3..27d4129 100644 --- a/content/contributors/nick-worm/_index.md +++ b/content/contributors/nick-worm/_index.md @@ -2,7 +2,7 @@ title: Nick Worm projects: - a02 -sites: +campus: - aachen roles: - doctoral-researcher diff --git a/content/contributors/nilakshi-vaidya/_index.md b/content/contributors/nilakshi-vaidya/_index.md index 414917b..c20a356 100644 --- a/content/contributors/nilakshi-vaidya/_index.md +++ b/content/contributors/nilakshi-vaidya/_index.md @@ -2,7 +2,7 @@ title: Nilakshi Vaidya projects: - b05 -sites: +campus: - mannheim params: sortkey: Vaidya;Nilakshi diff --git a/content/contributors/oliver-tuescher/_index.md b/content/contributors/oliver-tuescher/_index.md index 8d62f68..d834f0a 100644 --- a/content/contributors/oliver-tuescher/_index.md +++ b/content/contributors/oliver-tuescher/_index.md @@ -2,7 +2,7 @@ title: Oliver Tüscher projects: - b02 -sites: +campus: - mainz roles: - cab-member diff --git a/content/contributors/people.png b/content/contributors/people.png new file mode 100644 index 0000000..abcb64a --- /dev/null +++ b/content/contributors/people.png @@ -0,0 +1 @@ +/annex/objects/MD5E-s235981--bbd33682be8ba30252fd7b127ed17a3f.png diff --git a/content/contributors/philippa-huepen/_index.md b/content/contributors/philippa-huepen/_index.md index 9dd3be6..0581db3 100644 --- a/content/contributors/philippa-huepen/_index.md +++ b/content/contributors/philippa-huepen/_index.md @@ -3,7 +3,7 @@ title: Philippa Hüpen projects: - q01 - q04 -sites: +campus: - aachen params: orcid: 0000-0003-1504-7197 diff --git a/content/contributors/richard-nkrumah/_index.md b/content/contributors/richard-nkrumah/_index.md index ef80cba..c36372b 100644 --- a/content/contributors/richard-nkrumah/_index.md +++ b/content/contributors/richard-nkrumah/_index.md @@ -2,7 +2,7 @@ title: Richard Nkrumah projects: - q02 -sites: +campus: - heidelberg params: orcid: 0000-0002-3559-9338 diff --git a/content/contributors/robert-kraemer/_index.md b/content/contributors/robert-kraemer/_index.md index 5cf9d04..6601d30 100644 --- a/content/contributors/robert-kraemer/_index.md +++ b/content/contributors/robert-kraemer/_index.md @@ -2,7 +2,7 @@ title: Robert Krämer projects: - q01 -sites: +campus: - mannheim params: sortkey: Krämer;Robert diff --git a/content/contributors/sabine-herpertz/_index.md b/content/contributors/sabine-herpertz/_index.md index af785ec..1bb0fd8 100644 --- a/content/contributors/sabine-herpertz/_index.md +++ b/content/contributors/sabine-herpertz/_index.md @@ -4,7 +4,7 @@ projects: - a02 - c06 - q01 -sites: +campus: - heidelberg roles: - deputy-spokesperson diff --git a/content/contributors/seyedali-hashemi/_index.md b/content/contributors/seyedali-hashemi/_index.md index 9ac53be..34d764b 100644 --- a/content/contributors/seyedali-hashemi/_index.md +++ b/content/contributors/seyedali-hashemi/_index.md @@ -2,7 +2,7 @@ title: Seyedali (Ali) Hashemi projects: - a07 -sites: +campus: - frankfurt params: orcid: 0009-0008-5833-3453 diff --git a/content/contributors/seyma-tuerk/_index.md b/content/contributors/seyma-tuerk/_index.md index 0809862..54b03cf 100644 --- a/content/contributors/seyma-tuerk/_index.md +++ b/content/contributors/seyma-tuerk/_index.md @@ -1,6 +1,6 @@ --- title: Şeyma Türk -sites: +campus: - heidelberg params: sortkey: Türk;Şeyma diff --git a/content/contributors/simeon-platte/_index.md b/content/contributors/simeon-platte/_index.md index a1e3a39..dae0553 100644 --- a/content/contributors/simeon-platte/_index.md +++ b/content/contributors/simeon-platte/_index.md @@ -2,7 +2,7 @@ title: Simeon Platte projects: - c04 -sites: +campus: - frankfurt params: orcid: 0009-0001-3429-8306 diff --git a/content/contributors/sophie-kuehne/_index.md b/content/contributors/sophie-kuehne/_index.md index 3b11818..2492b10 100644 --- a/content/contributors/sophie-kuehne/_index.md +++ b/content/contributors/sophie-kuehne/_index.md @@ -1,6 +1,6 @@ --- title: Sophie Kühne -sites: +campus: - aachen params: sortkey: Kühne;Sophie diff --git a/content/contributors/stephan-heunis/_index.md b/content/contributors/stephan-heunis/_index.md index 06a9495..e854b91 100644 --- a/content/contributors/stephan-heunis/_index.md +++ b/content/contributors/stephan-heunis/_index.md @@ -2,7 +2,7 @@ title: Stephan Heunis projects: - q02 -sites: +campus: - juelich roles: - postdoc diff --git a/content/contributors/tengfei-feng/_index.md b/content/contributors/tengfei-feng/_index.md index f56a2b4..c1e8f15 100644 --- a/content/contributors/tengfei-feng/_index.md +++ b/content/contributors/tengfei-feng/_index.md @@ -1,6 +1,6 @@ --- title: Tengfei Feng -sites: +campus: - aachen params: name-title: Dr. diff --git a/content/contributors/thilo-kellermann/_index.md b/content/contributors/thilo-kellermann/_index.md index 13d3d93..af87434 100644 --- a/content/contributors/thilo-kellermann/_index.md +++ b/content/contributors/thilo-kellermann/_index.md @@ -2,7 +2,7 @@ title: Thilo Kellermann projects: - q01 -sites: +campus: - aachen roles: - qc-group-member diff --git a/content/contributors/thomas-frodl/_index.md b/content/contributors/thomas-frodl/_index.md index f5f4874..1946571 100644 --- a/content/contributors/thomas-frodl/_index.md +++ b/content/contributors/thomas-frodl/_index.md @@ -3,7 +3,7 @@ title: Thomas Frodl projects: - a08 - q01 -sites: +campus: - aachen roles: - cab-member diff --git a/content/contributors/tobias-banaschewski/_index.md b/content/contributors/tobias-banaschewski/_index.md index a59c51d..a8f5477 100644 --- a/content/contributors/tobias-banaschewski/_index.md +++ b/content/contributors/tobias-banaschewski/_index.md @@ -4,7 +4,7 @@ projects: - b05 - q01 - q03 -sites: +campus: - mannheim roles: - pi diff --git a/content/contributors/traute-demirakca/_index.md b/content/contributors/traute-demirakca/_index.md index 0f1b779..f6a1686 100644 --- a/content/contributors/traute-demirakca/_index.md +++ b/content/contributors/traute-demirakca/_index.md @@ -2,7 +2,7 @@ title: Traute Demirakca projects: - q02 -sites: +campus: - mannheim params: sortkey: Demirakca;Traute diff --git a/content/contributors/ute-habel/_index.md b/content/contributors/ute-habel/_index.md index 94d7d9e..8588374 100644 --- a/content/contributors/ute-habel/_index.md +++ b/content/contributors/ute-habel/_index.md @@ -5,7 +5,7 @@ projects: - a04 - q01 - q04 -sites: +campus: - aachen - juelich roles: diff --git a/content/contributors/vanessa-reindl/_index.md b/content/contributors/vanessa-reindl/_index.md index 1ce8cf5..88d5f89 100644 --- a/content/contributors/vanessa-reindl/_index.md +++ b/content/contributors/vanessa-reindl/_index.md @@ -2,7 +2,7 @@ title: Vanessa Reindl projects: - a06 -sites: +campus: - aachen roles: - pi diff --git a/content/contributors/volker-backes/_index.md b/content/contributors/volker-backes/_index.md index b3c7d97..1a03a76 100644 --- a/content/contributors/volker-backes/_index.md +++ b/content/contributors/volker-backes/_index.md @@ -2,7 +2,7 @@ title: Volker Backes projects: - q04 -sites: +campus: - aachen - juelich params: diff --git a/content/contributors/wiebke-hennig/_index.md b/content/contributors/wiebke-hennig/_index.md index 9ce095a..c84cb60 100644 --- a/content/contributors/wiebke-hennig/_index.md +++ b/content/contributors/wiebke-hennig/_index.md @@ -3,7 +3,7 @@ title: Wiebke Hennig projects: - c05 - q02 -sites: +campus: - frankfurt roles: - doctoral-researcher diff --git a/content/contributors/wolfgang-kelsch/_index.md b/content/contributors/wolfgang-kelsch/_index.md index 5c7616f..e394137 100644 --- a/content/contributors/wolfgang-kelsch/_index.md +++ b/content/contributors/wolfgang-kelsch/_index.md @@ -2,7 +2,7 @@ title: Wolfgang Kelsch projects: - c03 -sites: +campus: - mainz roles: - pi diff --git a/content/contributors/wolfgang-retz/_index.md b/content/contributors/wolfgang-retz/_index.md index 7c3ca5d..df7882c 100644 --- a/content/contributors/wolfgang-retz/_index.md +++ b/content/contributors/wolfgang-retz/_index.md @@ -3,7 +3,7 @@ title: Wolfgang Retz projects: - b02 - c07 -sites: +campus: - mainz roles: - pi diff --git a/content/contributors/wolfgang-weber-fahr/_index.md b/content/contributors/wolfgang-weber-fahr/_index.md index fcf0696..870a156 100644 --- a/content/contributors/wolfgang-weber-fahr/_index.md +++ b/content/contributors/wolfgang-weber-fahr/_index.md @@ -2,7 +2,7 @@ title: Wolfgang Weber-Fahr projects: - c03 -sites: +campus: - mannheim roles: - pi diff --git a/content/projects/_index.md b/content/projects/_index.md index 7b04b15..06df65f 100644 --- a/content/projects/_index.md +++ b/content/projects/_index.md @@ -1,13 +1,11 @@ --- title: Research projects layout: list +cascade: + layout: project --- In its first funding period (2024-2028), TRR379 comprises 20 research projects, supported by four [central service projects]({{< relref "/roles/service-project" >}}). Individual research projects are associated with three broader research areas -within the consortium: - -- [Area A: Negative valence system (NVS)]({{< relref "/topics/research-area-a" >}}) -- [Area B: Cognitive system (CS)]({{< relref "/topics/research-area-b" >}}) -- [Area C: Interaction of NVS and CS]({{< relref "/topics/research-area-c" >}}) +within the consortium. \ No newline at end of file diff --git a/content/projects/a01/_index.de.md b/content/projects/a01/_index.de.md index 0e87444..8206d65 100644 --- a/content/projects/a01/_index.de.md +++ b/content/projects/a01/_index.de.md @@ -3,7 +3,7 @@ title: 'A01: Der neuronale Code stimulusgetriggerter territorialer Aggression' contributors: - lena-terlau - marc-spehr -sites: +campus: - aachen topics: - research-area-a diff --git a/content/projects/a01/_index.md b/content/projects/a01/_index.md index 0be632d..bf3ec8f 100644 --- a/content/projects/a01/_index.md +++ b/content/projects/a01/_index.md @@ -3,7 +3,7 @@ title: 'A01: The neural code of stimulus-triggered territorial aggression' contributors: - lena-terlau - marc-spehr -sites: +campus: - aachen topics: - research-area-a diff --git a/content/projects/a02/_index.de.md b/content/projects/a02/_index.de.md index d451597..ec0580f 100644 --- a/content/projects/a02/_index.de.md +++ b/content/projects/a02/_index.de.md @@ -6,7 +6,7 @@ contributors: - nick-worm - sabine-herpertz - ute-habel -sites: +campus: - aachen - heidelberg - wuerzburg diff --git a/content/projects/a02/_index.md b/content/projects/a02/_index.md index c2184f9..29d5a79 100644 --- a/content/projects/a02/_index.md +++ b/content/projects/a02/_index.md @@ -6,7 +6,7 @@ contributors: - nick-worm - sabine-herpertz - ute-habel -sites: +campus: - aachen - heidelberg - wuerzburg diff --git a/content/projects/a03/_index.de.md b/content/projects/a03/_index.de.md index 91c4efe..4f08226 100644 --- a/content/projects/a03/_index.de.md +++ b/content/projects/a03/_index.de.md @@ -5,7 +5,7 @@ contributors: - gabriele-ende - milad-amini-masouleh - neha-vats -sites: +campus: - mannheim topics: - dfg-206-10 diff --git a/content/projects/a03/_index.md b/content/projects/a03/_index.md index 43e8d30..c6da337 100644 --- a/content/projects/a03/_index.md +++ b/content/projects/a03/_index.md @@ -5,7 +5,7 @@ contributors: - gabriele-ende - milad-amini-masouleh - neha-vats -sites: +campus: - mannheim topics: - dfg-206-10 diff --git a/content/projects/a04/_index.de.md b/content/projects/a04/_index.de.md index 2a5f47e..9870346 100644 --- a/content/projects/a04/_index.de.md +++ b/content/projects/a04/_index.de.md @@ -5,7 +5,7 @@ contributors: - christoph-mallmann - natalia-chechko - ute-habel -sites: +campus: - aachen topics: - dfg-206-09 diff --git a/content/projects/a04/_index.md b/content/projects/a04/_index.md index f87da00..1340357 100644 --- a/content/projects/a04/_index.md +++ b/content/projects/a04/_index.md @@ -5,7 +5,7 @@ contributors: - christoph-mallmann - natalia-chechko - ute-habel -sites: +campus: - aachen topics: - dfg-206-09 diff --git a/content/projects/a05/_index.de.md b/content/projects/a05/_index.de.md index 52671b3..647d92d 100644 --- a/content/projects/a05/_index.de.md +++ b/content/projects/a05/_index.de.md @@ -6,7 +6,7 @@ contributors: - andreas-meyer-lindenberg - habiba-hassan - heike-tost -sites: +campus: - mannheim topics: - dfg-206-09 diff --git a/content/projects/a05/_index.md b/content/projects/a05/_index.md index 0d9df30..6000d5e 100644 --- a/content/projects/a05/_index.md +++ b/content/projects/a05/_index.md @@ -6,7 +6,7 @@ contributors: - andreas-meyer-lindenberg - habiba-hassan - heike-tost -sites: +campus: - mannheim topics: - dfg-206-09 diff --git a/content/projects/a06/_index.de.md b/content/projects/a06/_index.de.md index 3aa8ad5..1312afc 100644 --- a/content/projects/a06/_index.de.md +++ b/content/projects/a06/_index.de.md @@ -7,7 +7,7 @@ contributors: - mina-misic - neele-ulken - vanessa-reindl -sites: +campus: - aachen - mannheim topics: diff --git a/content/projects/a06/_index.md b/content/projects/a06/_index.md index c39a23e..592e60c 100644 --- a/content/projects/a06/_index.md +++ b/content/projects/a06/_index.md @@ -7,7 +7,7 @@ contributors: - mina-misic - neele-ulken - vanessa-reindl -sites: +campus: - aachen - mannheim topics: diff --git a/content/projects/a07/_index.de.md b/content/projects/a07/_index.de.md index efd18b7..e4ea7ce 100644 --- a/content/projects/a07/_index.de.md +++ b/content/projects/a07/_index.de.md @@ -7,7 +7,7 @@ contributors: - david-slattery - ina-kuschel - seyedali-hashemi -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/a07/_index.md b/content/projects/a07/_index.md index e92d218..7cb8557 100644 --- a/content/projects/a07/_index.md +++ b/content/projects/a07/_index.md @@ -7,7 +7,7 @@ contributors: - david-slattery - ina-kuschel - seyedali-hashemi -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/a08/_index.de.md b/content/projects/a08/_index.de.md index 0b49835..6c8e1d2 100644 --- a/content/projects/a08/_index.de.md +++ b/content/projects/a08/_index.de.md @@ -5,7 +5,7 @@ contributors: - david-slattery - gabriele-ende - thomas-frodl -sites: +campus: - aachen - frankfurt - mannheim diff --git a/content/projects/a08/_index.md b/content/projects/a08/_index.md index 9575571..44eaeae 100644 --- a/content/projects/a08/_index.md +++ b/content/projects/a08/_index.md @@ -5,7 +5,7 @@ contributors: - david-slattery - gabriele-ende - thomas-frodl -sites: +campus: - aachen - frankfurt - mannheim diff --git a/content/projects/b01/_index.de.md b/content/projects/b01/_index.de.md index 5c995a3..c19353a 100644 --- a/content/projects/b01/_index.de.md +++ b/content/projects/b01/_index.de.md @@ -7,7 +7,7 @@ contributors: - carmen-weidler - ina-kuschel - luca-lasogga -sites: +campus: - aachen - frankfurt topics: diff --git a/content/projects/b01/_index.md b/content/projects/b01/_index.md index 97339dc..fc78924 100644 --- a/content/projects/b01/_index.md +++ b/content/projects/b01/_index.md @@ -7,7 +7,7 @@ contributors: - carmen-weidler - ina-kuschel - luca-lasogga -sites: +campus: - aachen - frankfurt topics: diff --git a/content/projects/b02/_index.de.md b/content/projects/b02/_index.de.md index 8fbb1b8..4e0e4e7 100644 --- a/content/projects/b02/_index.de.md +++ b/content/projects/b02/_index.de.md @@ -5,7 +5,7 @@ contributors: - alexandra-sebastian - oliver-tuescher - wolfgang-retz -sites: +campus: - mainz topics: - dfg-206-09 diff --git a/content/projects/b02/_index.md b/content/projects/b02/_index.md index 5090cde..a0244d6 100644 --- a/content/projects/b02/_index.md +++ b/content/projects/b02/_index.md @@ -5,7 +5,7 @@ contributors: - alexandra-sebastian - oliver-tuescher - wolfgang-retz -sites: +campus: - mainz topics: - dfg-206-09 diff --git a/content/projects/b03/_index.de.md b/content/projects/b03/_index.de.md index fe08e0e..216b46b 100644 --- a/content/projects/b03/_index.de.md +++ b/content/projects/b03/_index.de.md @@ -5,7 +5,7 @@ contributors: - christian-paret - jana-zweerings - klaus-mathiak -sites: +campus: - aachen - mannheim topics: diff --git a/content/projects/b03/_index.md b/content/projects/b03/_index.md index 3fa7a6a..2658efe 100644 --- a/content/projects/b03/_index.md +++ b/content/projects/b03/_index.md @@ -5,7 +5,7 @@ contributors: - christian-paret - jana-zweerings - klaus-mathiak -sites: +campus: - aachen - mannheim topics: diff --git a/content/projects/b04/_index.de.md b/content/projects/b04/_index.de.md index 87d7236..7c3209c 100644 --- a/content/projects/b04/_index.de.md +++ b/content/projects/b04/_index.de.md @@ -7,7 +7,7 @@ contributors: - katja-bertsch - linda-wilkin-krug - lisa-wagels -sites: +campus: - aachen - mannheim - wuerzburg diff --git a/content/projects/b04/_index.md b/content/projects/b04/_index.md index 90c0e29..b4c2123 100644 --- a/content/projects/b04/_index.md +++ b/content/projects/b04/_index.md @@ -7,7 +7,7 @@ contributors: - katja-bertsch - linda-wilkin-krug - lisa-wagels -sites: +campus: - aachen - mannheim - wuerzburg diff --git a/content/projects/b05/_index.de.md b/content/projects/b05/_index.de.md index 9b6b696..72640c0 100644 --- a/content/projects/b05/_index.de.md +++ b/content/projects/b05/_index.de.md @@ -6,7 +6,7 @@ contributors: - nathalie-holz - nilakshi-vaidya - tobias-banaschewski -sites: +campus: - mannheim topics: - research-area-b diff --git a/content/projects/b05/_index.md b/content/projects/b05/_index.md index 9e8a86e..3eb6392 100644 --- a/content/projects/b05/_index.md +++ b/content/projects/b05/_index.md @@ -6,7 +6,7 @@ contributors: - nathalie-holz - nilakshi-vaidya - tobias-banaschewski -sites: +campus: - mannheim topics: - research-area-b diff --git a/content/projects/c01/_index.de.md b/content/projects/c01/_index.de.md index e8bfadd..4e997fa 100644 --- a/content/projects/c01/_index.de.md +++ b/content/projects/c01/_index.de.md @@ -6,7 +6,7 @@ contributors: - aet-oleary - david-slattery - hande-betuel-oezsoy -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/c01/_index.md b/content/projects/c01/_index.md index bdb8d7c..e0314cb 100644 --- a/content/projects/c01/_index.md +++ b/content/projects/c01/_index.md @@ -6,7 +6,7 @@ contributors: - aet-oleary - david-slattery - hande-betuel-oezsoy -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/c02/_index.de.md b/content/projects/c02/_index.de.md index f08462a..97a3334 100644 --- a/content/projects/c02/_index.de.md +++ b/content/projects/c02/_index.de.md @@ -5,7 +5,7 @@ contributors: - christoph-korn - klaus-mathiak - moritz-burghardt -sites: +campus: - aachen - heidelberg topics: diff --git a/content/projects/c02/_index.md b/content/projects/c02/_index.md index 59ef88e..eac2210 100644 --- a/content/projects/c02/_index.md +++ b/content/projects/c02/_index.md @@ -5,7 +5,7 @@ contributors: - christoph-korn - klaus-mathiak - moritz-burghardt -sites: +campus: - aachen - heidelberg topics: diff --git a/content/projects/c03/_index.de.md b/content/projects/c03/_index.de.md index f73aeaf..b189664 100644 --- a/content/projects/c03/_index.de.md +++ b/content/projects/c03/_index.de.md @@ -4,7 +4,7 @@ title: 'C03: Distributed network control and interventions to frustrative non-re contributors: - wolfgang-kelsch - wolfgang-weber-fahr -sites: +campus: - mainz - mannheim topics: diff --git a/content/projects/c03/_index.md b/content/projects/c03/_index.md index 99d96b7..581722d 100644 --- a/content/projects/c03/_index.md +++ b/content/projects/c03/_index.md @@ -4,7 +4,7 @@ title: 'C03: Distributed network control and interventions to frustrative non-re contributors: - wolfgang-kelsch - wolfgang-weber-fahr -sites: +campus: - mainz - mannheim topics: diff --git a/content/projects/c04/_index.de.md b/content/projects/c04/_index.de.md index 9515c92..4a7514b 100644 --- a/content/projects/c04/_index.de.md +++ b/content/projects/c04/_index.de.md @@ -6,7 +6,7 @@ contributors: - christine-margarete-freitag - moritz-sturm - simeon-platte -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/c04/_index.md b/content/projects/c04/_index.md index e96f525..5e6e61a 100644 --- a/content/projects/c04/_index.md +++ b/content/projects/c04/_index.md @@ -6,7 +6,7 @@ contributors: - christine-margarete-freitag - moritz-sturm - simeon-platte -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/c05/_index.de.md b/content/projects/c05/_index.de.md index 052042f..3a4ea5a 100644 --- a/content/projects/c05/_index.de.md +++ b/content/projects/c05/_index.de.md @@ -5,7 +5,7 @@ contributors: - alessio-giacomel - christine-ecker - wiebke-hennig -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/c05/_index.md b/content/projects/c05/_index.md index 21ce5f0..aa845c6 100644 --- a/content/projects/c05/_index.md +++ b/content/projects/c05/_index.md @@ -5,7 +5,7 @@ contributors: - alessio-giacomel - christine-ecker - wiebke-hennig -sites: +campus: - frankfurt topics: - dfg-206-09 diff --git a/content/projects/c06/_index.de.md b/content/projects/c06/_index.de.md index 384cf37..dfbec4f 100644 --- a/content/projects/c06/_index.de.md +++ b/content/projects/c06/_index.de.md @@ -4,7 +4,7 @@ title: 'C06: Brain mechanisms differentiating aggressive vs. non-aggressive psyc contributors: - corinne-neukel - sabine-herpertz -sites: +campus: - heidelberg topics: - research-area-c diff --git a/content/projects/c06/_index.md b/content/projects/c06/_index.md index b87333f..d14af05 100644 --- a/content/projects/c06/_index.md +++ b/content/projects/c06/_index.md @@ -4,7 +4,7 @@ title: 'C06: Brain mechanisms differentiating aggressive vs. non-aggressive psyc contributors: - corinne-neukel - sabine-herpertz -sites: +campus: - heidelberg topics: - research-area-c diff --git a/content/projects/c07/_index.de.md b/content/projects/c07/_index.de.md index 8c506a6..80dd5d1 100644 --- a/content/projects/c07/_index.de.md +++ b/content/projects/c07/_index.de.md @@ -4,7 +4,7 @@ title: 'C07: Identifying mediators of threat-aggression and experimental manipu contributors: - michael-plichta - wolfgang-retz -sites: +campus: - frankfurt - mainz topics: diff --git a/content/projects/c07/_index.md b/content/projects/c07/_index.md index c4aecb1..6ea19b7 100644 --- a/content/projects/c07/_index.md +++ b/content/projects/c07/_index.md @@ -4,7 +4,7 @@ title: 'C07: Identifying mediators of threat-aggression and experimental manipul contributors: - michael-plichta - wolfgang-retz -sites: +campus: - frankfurt - mainz topics: diff --git a/content/projects/projects.png b/content/projects/projects.png new file mode 100644 index 0000000..c62e219 --- /dev/null +++ b/content/projects/projects.png @@ -0,0 +1 @@ +/annex/objects/MD5E-s75348--2e52aff420d15e4d6f9cb0a9ef744177.png diff --git a/content/projects/q01/_index.de.md b/content/projects/q01/_index.de.md index 436c720..9b65160 100644 --- a/content/projects/q01/_index.de.md +++ b/content/projects/q01/_index.de.md @@ -22,7 +22,7 @@ contributors: - thomas-frodl - tobias-banaschewski - ute-habel -sites: +campus: - aachen - frankfurt - heidelberg diff --git a/content/projects/q01/_index.md b/content/projects/q01/_index.md index 74334ad..c253808 100644 --- a/content/projects/q01/_index.md +++ b/content/projects/q01/_index.md @@ -22,7 +22,7 @@ contributors: - thomas-frodl - tobias-banaschewski - ute-habel -sites: +campus: - aachen - frankfurt - heidelberg diff --git a/content/projects/q02/_index.de.md b/content/projects/q02/_index.de.md index 99b0598..583439d 100644 --- a/content/projects/q02/_index.de.md +++ b/content/projects/q02/_index.de.md @@ -11,7 +11,7 @@ contributors: - stephan-heunis - traute-demirakca - wiebke-hennig -sites: +campus: - aachen - frankfurt - juelich diff --git a/content/projects/q02/_index.md b/content/projects/q02/_index.md index 73c41a4..92c01e0 100644 --- a/content/projects/q02/_index.md +++ b/content/projects/q02/_index.md @@ -11,7 +11,7 @@ contributors: - stephan-heunis - traute-demirakca - wiebke-hennig -sites: +campus: - aachen - frankfurt - juelich diff --git a/content/projects/q03/_index.de.md b/content/projects/q03/_index.de.md index c98988c..273b81e 100644 --- a/content/projects/q03/_index.de.md +++ b/content/projects/q03/_index.de.md @@ -4,7 +4,7 @@ contributors: - david-slattery - lisa-wagels - tobias-banaschewski -sites: +campus: - aachen - frankfurt - mannheim diff --git a/content/projects/q03/_index.md b/content/projects/q03/_index.md index 8f6b302..9e17fa9 100644 --- a/content/projects/q03/_index.md +++ b/content/projects/q03/_index.md @@ -4,7 +4,7 @@ contributors: - david-slattery - lisa-wagels - tobias-banaschewski -sites: +campus: - aachen - frankfurt - mannheim diff --git a/content/projects/q04/_index.de.md b/content/projects/q04/_index.de.md index 6e225dc..8f6b28d 100644 --- a/content/projects/q04/_index.de.md +++ b/content/projects/q04/_index.de.md @@ -7,7 +7,7 @@ contributors: - philippa-huepen - ute-habel - volker-backes -sites: +campus: - aachen roles: - service-project diff --git a/content/projects/q04/_index.md b/content/projects/q04/_index.md index f88466b..b6cf09d 100644 --- a/content/projects/q04/_index.md +++ b/content/projects/q04/_index.md @@ -7,7 +7,7 @@ contributors: - philippa-huepen - ute-habel - volker-backes -sites: +campus: - aachen roles: - service-project diff --git a/content/publications/_index.md b/content/publications/_index.md new file mode 100644 index 0000000..255f868 --- /dev/null +++ b/content/publications/_index.md @@ -0,0 +1,4 @@ +--- +title: Publications +layout: list +--- \ No newline at end of file diff --git a/content/publications/publications.png b/content/publications/publications.png new file mode 100644 index 0000000..2309daa --- /dev/null +++ b/content/publications/publications.png @@ -0,0 +1 @@ +/annex/objects/MD5E-s177635--dddaa1440e7c773374689115b65fa969.png diff --git a/content/topics/topics.png b/content/topics/topics.png new file mode 100644 index 0000000..01356ce --- /dev/null +++ b/content/topics/topics.png @@ -0,0 +1 @@ +/annex/objects/MD5E-s72015--9e7c4f3c67f63a7369f50ebb9917e19e.png diff --git a/i18n/de.yaml b/i18n/de.yaml new file mode 100644 index 0000000..d329ea7 --- /dev/null +++ b/i18n/de.yaml @@ -0,0 +1,20 @@ +# i18n/de.yaml – TRR379 UI-Strings +# +# Diese Datei enthält ausschließlich UI-Labels und Übersetzungen. +# Seiten-INHALTE (Titel, Beschreibungen, Panel-Texte etc.) leben im +# Frontmatter von content/_index.md und content/_index.de.md — dort +# anpassen wenn Homepage-Texte geändert werden sollen. + +# Generische UI-Labels +objectives: "Ziele" +research_areas: "FORSCHUNGSBEREICHE" +see_all_projects: "alle Projekte ansehen" +all_research_topics: "Alle Forschungsthemen" +latest_news: "Neueste Nachrichten" +all_news: "Alle News" + +# Topic- / Project- / Publication-Seiten-Labels +contributors: "Mitwirkende" +publications: "Publikationen" +projects_in_area: "Projekte in diesem Bereich" +all_topics: "Alle Themen" \ No newline at end of file diff --git a/i18n/en.yaml b/i18n/en.yaml new file mode 100644 index 0000000..9b4bd90 --- /dev/null +++ b/i18n/en.yaml @@ -0,0 +1,20 @@ +# i18n/de.yaml – TRR379 UI-Strings +# +# Diese Datei enthält ausschließlich UI-Labels und Übersetzungen. +# Seiten-INHALTE (Titel, Beschreibungen, Panel-Texte etc.) leben im +# Frontmatter von content/_index.md und content/_index.de.md — dort +# anpassen wenn Homepage-Texte geändert werden sollen. + +# Generische UI-Labels +objectives: "Objectives" +research_areas: "RESEARCH AREAS" +see_all_projects: "See all projects" +all_research_topics: "All Research Topics" +latest_news: "Latest Updates" +all_news: "All News" + +# Topic- / Project- / Publication-Seiten-Labels +contributors: "Contributors" +publications: "Publications" +projects_in_area: "Projects in this Research Area" +all_topics: "All Topics" \ No newline at end of file diff --git a/layouts/_default/publication.html b/layouts/_default/publication.html deleted file mode 100644 index 27e9dbb..0000000 --- a/layouts/_default/publication.html +++ /dev/null @@ -1,50 +0,0 @@ -{{ define "main" }} -
-
- {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }} - {{ partial "breadcrumbs.html" . }} - {{ end }} -

- {{ .Title | emojify }} -

- {{ with .GetTerms "contributors" }} - {{ range . }} - - {{ .Title }} - - {{ end }} - {{ end }} - {{ with .Params.licenses }} - {{ range . }} - - {{ . }} - - {{ end }} - {{ end }} -
-
- {{ .Content | emojify }} -
-
- {{ with .GetTerms "projects" }} -

Contributing projects

- - {{ end }} - {{ with .GetTerms "topics" }} -

Topics

- - {{ end }} -
- -
-{{ end }} diff --git a/layouts/_default/taxonomy-sortedlist.html b/layouts/_default/taxonomy-sortedlist.html index a160958..2efadd5 100644 --- a/layouts/_default/taxonomy-sortedlist.html +++ b/layouts/_default/taxonomy-sortedlist.html @@ -1,4 +1,7 @@ {{ define "main" }} + + +
{{ if .Params.showBreadcrumbs | default (.Site.Params.list.showBreadcrumbs | default false) }} {{ partial "breadcrumbs.html" . }} diff --git a/layouts/_default/term.html b/layouts/_default/term.html index 1312bcb..4e960c9 100644 --- a/layouts/_default/term.html +++ b/layouts/_default/term.html @@ -1,4 +1,6 @@ {{ define "main" }} + +
{{ if .Params.showBreadcrumbs | default (.Site.Params.list.showBreadcrumbs | default false) }} {{ partial "breadcrumbs.html" . }} diff --git a/layouts/contributors/list.html b/layouts/contributors/list.html new file mode 100644 index 0000000..3349838 --- /dev/null +++ b/layouts/contributors/list.html @@ -0,0 +1,96 @@ +{{ define "main" }} + + + + + + + +
+ + {{/* ── Header ── */}} +

Contributors

+

Neuropsychobiology of Aggression

+
+
+
+
+
+
+ + {{/* ── Intro + figure ── */}} +
+
+

Contributors

+

TRR379 is a large collaborative research initiative. Many individuals contribute their expertise in various roles, such as:

+ +

The following individuals are contributing to this effort.

+
+
+ +
+
+ + {{/* ── Role filter buttons ── */}} +
+ + + + + + +
+ + {{/* ── Portrait grid ── */}} +
+ {{ range sort .Pages ".Params.sortkey" }} + {{ $portrait := .Resources.GetMatch "*portrait*" }} + {{ $roles := delimit (.Params.roles | default slice) " " }} +
+ {{ with $portrait }} + {{ $.Title }} + {{ else }} +
+ {{ substr .Title 0 1 }} +
+ {{ end }} +
+
+ {{ with .Params.params }}{{ with .name_title }}{{ . }} {{ end }}{{ end }} + {{ .Title }} +
+
+ {{ end }} +
+ +
+ + +{{ end }} \ No newline at end of file diff --git a/layouts/_default/contributor.html b/layouts/contributors/term.html similarity index 99% rename from layouts/_default/contributor.html rename to layouts/contributors/term.html index 66180e8..e1803a5 100644 --- a/layouts/_default/contributor.html +++ b/layouts/contributors/term.html @@ -1,4 +1,7 @@ {{ define "main" }} + + + {{- $images := .Resources.ByType "image" }} {{- $portrait := $images.Get .Params.portrait | default ($images.GetMatch "*portrait*") | default ($images.GetMatch "*thumbnail*") }}
diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..6105407 --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,192 @@ +{{ define "main" }} + +{{/* ═════════════════════════════════════════════════════════════════ +TRR379 HOMEPAGE TEMPLATE +───────────────────────────────────────────────────────────────── + +CONTENT vs. UI STRINGS — where to edit what: +-------------------------------------------- +• Page content (hero titles, panel texts, research-area labels) +lives in `content/_index.md` and `content/_index.de.md` frontmatter. +These files are intended to be auto-populated from the metadata +backend (forgejo actions, see q04 workflow). + +• Generic UI labels ("Objectives", "all news", "see all projects") +live in `i18n/en.yaml` and `i18n/de.yaml`. + +ANIMATION COUPLING — important caveat: +-------------------------------------- +This template's structure is tightly coupled to scroll animations +defined in `static/js/trr379-home.js`. The following element IDs +are referenced by the JS and MUST exist for animations to work: + +#hero, #heroText, #heroFigure +#middleWrapper +#fig2Wrap, #fig4Wrap +#rdocPanel, #multiPanel, #adolPanel ← exactly 3 panels expected +#researchAreas +#vennFigure, #vennConnectors, #vennFooter +#vennLabelA, #vennLabelB, #vennLabelC, #vennLabelZ +#scrollProgress + +The 3-panel middle section is hardcoded by design — each panel +triggers a specific animation: +• #rdocPanel → triggers Figure2 draw-in +• #multiPanel → triggers Figure2-to-Figure4 fly transition + Figure4 draw +• #adolPanel → triggers Figure4 grey-arrow reveal + +To ADD A NEW PANEL with associated animation: +1. Add the panel entry to `content/_index.md` frontmatter under `panels:` +2. Add a new
block in this template + 3. In `static/js/trr379-home.js`, add a new ScrollTrigger for the panel + (see sections 3, 4 for examples of how Figure2 and Figure4 panels + are wired up). The generic pin/dwell logic in section 7 will + automatically include any element with class `.text-panel`. + + To REMOVE OR REORDER PANELS: + Both the template and JS need to be updated together. The JS + animation timing assumes 3 panels in the order rdoc → multi → adol. + ══════════════════════════════════════════════════════════════════ */}} + + {{/* ── CSS einbinden ── */}} + + + {{/* ── GSAP (lokal) + Animation Code ── */}} + + + + +
+ + {{/* ── HERO SECTION — content from frontmatter (hero.title, hero.subtitle) ── */}} +
+
+
+

{{ .Params.hero.title | safeHTML }}

+

{{ .Params.hero.subtitle | safeHTML }}

+
+
+
+
+ + {{/* ── MIDDLE WRAPPER — 3 scroll-pinned panels, see header comment ── + Each panel reads its content from `.Params.panels.` in frontmatter. + IDs are hardcoded because the animation references them. */}} +
+
+
+
+
+
+
+
+ + {{/* Panel 1: RDoC — triggers Figure2 draw */}} + {{ with .Params.panels.rdoc }} +
+
+ {{ with .label_key }}{{ end }} +

{{ .title }}

+

{{ .text | safeHTML }}

+
+
+ {{ end }} + + {{/* Panel 2: Multilevel — triggers Figure2-to-Figure4 transition */}} + {{ with .Params.panels.multilevel }} +
+
+

{{ .title }}

+

{{ .text | safeHTML }}

+ → {{ i18n "all_research_topics" }} +
+
+ {{ end }} + + {{/* Panel 3: Adolescence — triggers Figure4 grey-arrow reveal */}} + {{ with .Params.panels.adolescence }} +
+
+

{{ .title }}

+

{{ .text | safeHTML }}

+
+
+ {{ end }} + +
+
+ + {{/* ── VENN SECTION — research areas from frontmatter ── + Labels A/B/C/Z are read from `.Params.research_areas` array, + but their POSITIONS in the venn diagram are CSS-defined + (.venn-label-a, -b, -c, -z) and matched to area IDs ("a", "b", "c", "z"). */}} +
+
+ +
+
+
+ + + + + + + {{ range .Params.research_areas }} +
+ {{ .title }} + {{ .desc | safeHTML }} +
+ {{ end }} +
+
+
+
+ + + {{/* ── Latest News ── */}} + {{ $news := (site.GetPage "/news").Pages.ByDate.Reverse | first 6 }} + {{ if $news }} +
+
+
+

{{ i18n "latest_news" }}

+ {{ i18n "all_news" }} → +
+
+ {{ range $news }} + {{ $thumb := .Resources.GetMatch "feature*" }} + {{ if not $thumb }}{{ $thumb = .Resources.GetMatch "thumbnail*" }}{{ end }} + + {{ with $thumb }} +
+ +
+ {{ end }} +
+ {{ .Date.Format "2 Jan 2006" }} +

{{ .Title }}

+

{{ .Summary | truncate 100 }}

+
+
+ {{ end }} +
+
+
+ {{ end }} + + {{/* ── Optional intro markdown content from _index.md body ── */}} + {{ if .Content }} +
+
+ {{ .Content }} +
+
+ {{ end }} + + {{ end }} \ No newline at end of file diff --git a/layouts/projects/list.html b/layouts/projects/list.html new file mode 100644 index 0000000..cc71445 --- /dev/null +++ b/layouts/projects/list.html @@ -0,0 +1,123 @@ +{{ define "main" }} + + + + + + +
+ + {{/* ── Header ── */}} +
+

Research Projects

+

Neuropsychobiology of Aggression

+ + {{/* ── Coloured proportional bar ── */}} + {{ $nA := 0 }}{{ $nB := 0 }}{{ $nC := 0 }}{{ $nQ := 0 }} + {{ range .Pages }} + {{ if in .Params.topics "research-area-a" }}{{ $nA = add $nA 1 }}{{ end }} + {{ if in .Params.topics "research-area-b" }}{{ $nB = add $nB 1 }}{{ end }} + {{ if in .Params.topics "research-area-c" }}{{ $nC = add $nC 1 }}{{ end }} + {{ if in .Params.roles "service-project" }}{{ $nQ = add $nQ 1 }}{{ end }} + {{ end }} +
+
+
+
+
+
+ +

Research Areas

+ +
+ + {{/* ── Collect pages per area ── */}} + {{ $areaA := slice }} + {{ $areaB := slice }} + {{ $areaC := slice }} + {{ $areaQ := slice }} + {{ range .Pages }} + {{ if in .Params.topics "research-area-a" }}{{ $areaA = $areaA | append . }}{{ end }} + {{ if in .Params.topics "research-area-b" }}{{ $areaB = $areaB | append . }}{{ end }} + {{ if in .Params.topics "research-area-c" }}{{ $areaC = $areaC | append . }}{{ end }} + {{ if in .Params.roles "service-project" }}{{ $areaQ = $areaQ | append . }}{{ end }} + {{ end }} + + {{/* ── Area A ── */}} + {{ if gt (len $areaA) 0 }} +
+

Area A: Negative valence system

+
+ {{ range $areaA }}{{ template "project-card" . }}{{ end }} +
+
+ {{ end }} + + {{/* ── Area B ── */}} + {{ if gt (len $areaB) 0 }} +
+

Area B: Cognitive system

+
+ {{ range $areaB }}{{ template "project-card" . }}{{ end }} +
+
+ {{ end }} + + {{/* ── Area C ── */}} + {{ if gt (len $areaC) 0 }} +
+

Area C: Interaction of NVS & CS

+
+ {{ range $areaC }}{{ template "project-card" . }}{{ end }} +
+
+ {{ end }} + + {{/* ── Service projects ── */}} + {{ if gt (len $areaQ) 0 }} +
+

Central Service Projects

+
+ {{ range $areaQ }}{{ template "project-card" . }}{{ end }} +
+
+ {{ end }} + +
+{{ end }} + +{{/* ── Card partial ── */}} +{{ define "project-card" }} +{{ $thumb := .Resources.GetMatch "*thumbnail*" }} + +{{ end }} \ No newline at end of file diff --git a/layouts/projects/term.html b/layouts/projects/term.html new file mode 100644 index 0000000..f34414e --- /dev/null +++ b/layouts/projects/term.html @@ -0,0 +1,142 @@ +{{ define "main" }} + + + + + + + + +{{ $thumb := .Resources.GetMatch "*thumbnail*" }} + +{{ $barColor := "#aaa" }} +{{ if in .Params.topics "research-area-a" }}{{ $barColor = "#ef9052" }}{{ end }} +{{ if in .Params.topics "research-area-b" }}{{ $barColor = "#0a8f37" }}{{ end }} +{{ if in .Params.topics "research-area-c" }}{{ $barColor = "#dc1a17" }}{{ end }} + +
+ + {{/* ── Back + bar ── */}} + ← All projects +

+
+ + {{/* ── Page header ── */}} +

Research Projects

+

Neuropsychobiology of Aggression

+ + + + {{/* ── Card ── */}} +
+ + {{/* Top: thumb + id + title */}} +
+ {{ with $thumb }} + + {{ end }} +
+
+ {{ .File.Dir | path.Base | upper }} +
+

{{ .Title }}

+
+
+ + {{/* Meta: contributors + topics */}} +
+ {{ range .GetTerms "contributors" }} + {{ .Title }} + {{ end }} + {{ range .GetTerms "topics" }} + {{ .Title }} + {{ end }} + {{ range .Params.campus }} + {{ . | title }} + {{ end }} +
+ + {{/* Full content */}} +
+ {{ .Content }} +
+ +
+ + {{/* ═════════════════════════════════════════ + AUTO-COLLECTED RELATED PAGES + Hugo sammelt automatisch alle Pages, die + dieses Projekt als Taxonomy-Term referenzieren + (z.B. News mit projects: [a01], Publications etc.) + ═════════════════════════════════════════ */}} + {{ $related := where .Pages "Section" "ne" "contributors" }} + {{ if $related }} + {{ range $related.GroupBy "Type" }} + + {{/* ── Publications ── */}} + {{ if eq .Key "publications" }} +

Publications

+
+ {{ range .Pages.ByDate.Reverse }} + {{ $topics := delimit (.Params.topics | default slice) " " }} + {{ $url := .Params.external_url }} +
+
+
+ {{ .Date.Format "Jan 2006" }} +
+

+ {{ .Title }} +

+
+ {{ range .GetTerms "contributors" }} + {{ .Title }} + {{ end }} +
+ {{ with $url }} + → DOI + {{ end }} +
+
+ {{ end }} +
+ + {{/* ── News ── */}} + {{ else if eq .Key "news" }} +

News

+
+ {{ range .Pages.ByDate.Reverse }} + + {{ .Title }} +
{{ .Date.Format "2 January 2006" }}
+
+ {{ end }} +
+ + {{/* ── Fallback für sonstige Types ── */}} + {{ else }} +

{{ .Key | title }}

+
    + {{ range .Pages.ByDate.Reverse }} +
  • {{ .Title }}
  • + {{ end }} +
+ {{ end }} + + {{ end }} + {{ end }} + +
+{{ end }} \ No newline at end of file diff --git a/layouts/publications/list.html b/layouts/publications/list.html new file mode 100644 index 0000000..c094f73 --- /dev/null +++ b/layouts/publications/list.html @@ -0,0 +1,98 @@ +{{ define "main" }} + + + + + + + + +
+ +

Publications

+

Neuropsychobiology of Aggression

+
+
+
+
+
+
+ + {{/* ── Intro + figure ── */}} + + + {{/* ── Area filter ── */}} +
+ + + + +
+ + {{/* ── Year groups ── */}} + {{ range .Pages.GroupByDate "2006" }} +
+

{{ .Key }}

+
+ {{ range .Pages }} + {{ $topics := delimit (.Params.topics | default slice) " " }} + {{ $url := .Params.external_url }} +
+
+
+ {{ .Date.Format "Jan 2006" }} + {{ range .GetTerms "topics" }} + {{ if or (eq .Slug "research-area-a") (eq .Slug "research-area-b") (eq .Slug "research-area-c") }} + + {{ end }} + {{ end }} +
+

+ {{ .Title }} +

+
+ {{ range .GetTerms "contributors" }} + {{ .Title }} + {{ end }} +
+ {{ with $url }} + → DOI + {{ end }} +
+
+ {{ end }} +
+
+ {{ end }} + +
+ + +{{ end }} \ No newline at end of file diff --git a/layouts/publications/single.html b/layouts/publications/single.html new file mode 100644 index 0000000..38c18a3 --- /dev/null +++ b/layouts/publications/single.html @@ -0,0 +1,62 @@ +{{ define "main" }} + + + + + + + +
+ + {{/* ── Back link ── */}} + ← All publications + + {{/* ── Header ── */}} +
+
+ {{ .Date.Format "January 2006" }} + {{ range .GetTerms "topics" }} + {{ if or (eq .Slug "research-area-a") (eq .Slug "research-area-b") (eq .Slug "research-area-c") }} + + {{ end }} + {{ end }} +
+ +

{{ .Title }}

+ + {{/* ── Authors / Contributors ── */}} + {{ with .GetTerms "contributors" }} +
+ {{ range . }} + {{ .Title }} + {{ end }} +
+ {{ end }} + + {{/* ── Topic tags ── */}} + {{ with .GetTerms "topics" }} +
+ {{ range . }} + {{ .Title }} + {{ end }} +
+ {{ end }} + + {{/* ── DOI / external link ── */}} + {{ with .Params.external_url }} + + → View on publisher site / DOI + + {{ end }} +
+ + {{/* ── Abstract / body content ── */}} + {{ if .Content }} +
+

Abstract

+
{{ .Content }}
+
+ {{ end }} + +
+{{ end }} \ No newline at end of file diff --git a/layouts/topics/list.html b/layouts/topics/list.html new file mode 100644 index 0000000..b0a6e0a --- /dev/null +++ b/layouts/topics/list.html @@ -0,0 +1,69 @@ +{{ define "main" }} + + + + + + + +
+ +

Research Topics

+

Neuropsychobiology of Aggression

+
+
+
+
+
+
+ + {{/* ── Intro + figure ── */}} +
+
+

Research Topics

+

TRR379 is a collaborative research effort spanning a broad range of topics centered on aggression in mental disorders (AMD) — a prevalent symptom with significant clinical challenges and societal implications. + The biological basis of AMD remains poorly understood, largely due to the heterogeneity of both aggression and psychiatric disorders. This complexity hinders progress in prevention and intervention. TRR379 brings together leading German clinical and experimental neuroscience sites to address this gap through a comprehensive, multimodal approach. + Below is an overview of the research fields covered within this consortium.

+
+
+ +
+
+ + {{/* ── Research Areas – large cards ── */}} +

Research Areas

+
+ {{ range where .Pages "Slug" "in" (slice "research-area-a" "research-area-b" "research-area-c") }} + {{ $color := "#888" }} + {{ $slug := .Slug }} + {{ if eq $slug "research-area-a" }}{{ $color = "#ef9052" }}{{ end }} + {{ if eq $slug "research-area-b" }}{{ $color = "#0a8f37" }}{{ end }} + {{ if eq $slug "research-area-c" }}{{ $color = "#dc1a17" }}{{ end }} + +
+ {{ if eq $slug "research-area-a" }}Area A{{ end }} + {{ if eq $slug "research-area-b" }}Area B{{ end }} + {{ if eq $slug "research-area-c" }}Area C{{ end }} +
+

{{ .Title }}

+

{{ .Summary | truncate 120 }}

+ +
+ {{ end }} +
+ + {{/* ── All other topics ── */}} +

All Topics

+
+ {{ range sort .Pages "Title" }} + {{ if not (in (slice "research-area-a" "research-area-b" "research-area-c") .Slug) }} + + {{ .Title }} + {{ len .Pages }} projects + + {{ end }} + {{ end }} +
+ +
+{{ end }} \ No newline at end of file diff --git a/layouts/topics/term.html b/layouts/topics/term.html new file mode 100644 index 0000000..aa09264 --- /dev/null +++ b/layouts/topics/term.html @@ -0,0 +1,132 @@ +{{ define "main" }} + + + + + + + + +{{ $slug := .Slug }} +{{ $barColor := "#888" }} +{{ $areaLabel := "" }} +{{ if eq $slug "research-area-a" }}{{ $barColor = "#ef9052" }}{{ $areaLabel = "Area A" }}{{ end }} +{{ if eq $slug "research-area-b" }}{{ $barColor = "#0a8f37" }}{{ $areaLabel = "Area B" }}{{ end }} +{{ if eq $slug "research-area-c" }}{{ $barColor = "#dc1a17" }}{{ $areaLabel = "Area C" }}{{ end }} + +
+ + {{/* ── Back + header ── */}} + ← All topics + +
+
+
+ + {{/* ── Intro row ── */}} +
+
+ {{ with $areaLabel }} +
{{ . }}
+ {{ end }} +

{{ .Title }}

+ {{ if .Content }} +
{{ .Content }}
+ {{ end }} +
+ {{ if $areaLabel }} +
+ +
+ {{ end }} +
+ + {{/* ── Projects in this topic ── */}} + {{ $projects := where .Pages "Type" "projects" }} + {{ if gt (len $projects) 0 }} +

Projects in this area

+
+ {{ range $projects }} + {{ $thumb := .Resources.GetMatch "*thumbnail*" }} + + {{ end }} +
+ {{ end }} + + {{/* ── Publications in this topic ── */}} + {{ $pubs := where .Pages "Type" "publications" }} + {{/* Fallback: Publications sind sprachneutral – hole sie aus der Default-Sprache wenn aktuelle Sprache leer ist */}} + {{ if eq (len $pubs) 0 }} + {{ with (index site.Sites 0).GetPage .Path }} + {{ $pubs = where .Pages "Type" "publications" }} + {{ end }} + {{ end }} + {{ if gt (len $pubs) 0 }} +

Publications

+
+ {{ range $pubs }} + {{ $topics := delimit (.Params.topics | default slice) " " }} + {{ $title := .Title }} + {{ $url := .Params.external_url }} +
+
+
+ {{ .Date.Format "Jan 2006" }} +
+

+ {{ with $url }}{{ $title }}{{ else }}{{ $title }}{{ end }} +

+
+ {{ range .GetTerms "contributors" }} + {{ .Title }} + {{ end }} +
+ {{ with $url }} + → DOI + {{ end }} +
+
+ {{ end }} +
+ {{ end }} + + {{/* ── Other pages (contributors etc.) ── */}} + {{ $others := where (where .Pages "Type" "ne" "projects") "Type" "ne" "publications" }} + {{ if gt (len $others) 0 }} +

Contributors

+
+ {{ range $others }} + {{ $portrait := .Resources.GetMatch "*portrait*" }} + +
+ {{ with $portrait }} + {{ $.Title }} + {{ else }} +
{{ substr .Title 0 1 }}
+ {{ end }} +
+
{{ .Title }}
+
+ {{ end }} +
+ {{ end }} + +
+{{ end }} \ No newline at end of file diff --git a/static/Figure1.svg b/static/Figure1.svg new file mode 100644 index 0000000..91b475a --- /dev/null +++ b/static/Figure1.svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/Figure2.svg b/static/Figure2.svg new file mode 100644 index 0000000..68a4b55 --- /dev/null +++ b/static/Figure2.svg @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/Figure3.svg b/static/Figure3.svg new file mode 100644 index 0000000..37ead87 --- /dev/null +++ b/static/Figure3.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/Figure4.svg b/static/Figure4.svg new file mode 100644 index 0000000..9a25c74 --- /dev/null +++ b/static/Figure4.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/Figure5.svg b/static/Figure5.svg new file mode 100644 index 0000000..82337b9 --- /dev/null +++ b/static/Figure5.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/css/contributors.css b/static/css/contributors.css new file mode 100644 index 0000000..6734ad2 --- /dev/null +++ b/static/css/contributors.css @@ -0,0 +1,138 @@ +/* ── Contributors page ── */ +.contributors-page { + max-width: 1100px; + margin: 0 auto; + padding: 2rem 0 8rem; +} + +/* Role filter */ +.role-filters { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + margin-bottom: 2rem; +} +.role-btn { + padding: 0.4rem 1rem; + border-radius: 20px; + border: 1px solid rgba(0,0,0,0.15); + background: transparent; + font-size: 0.85rem; + font-weight: 500; + cursor: pointer; + color: inherit; + transition: background 0.2s, color 0.2s, border-color 0.2s; + font-family: inherit; +} +.role-btn:hover { border-color: #0a8f37; color: #0a8f37; } +.role-btn.active { background: #0a8f37; color: #fff; border-color: #0a8f37; } +html.dark .role-btn { border-color: rgba(255,255,255,0.15); } +html.dark .role-btn:hover { border-color: #0a8f37; color: #0a8f37; } + +/* Grid */ +.contributors-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1rem; +} + +/* Card */ +.contributor-card { + text-decoration: none; + color: inherit; + display: flex; + flex-direction: column; + border-radius: 10px; + overflow: hidden; + border: 1px solid rgba(0,0,0,0.07); + background: #fff; + transition: box-shadow 0.2s, transform 0.2s; +} +.contributor-card:hover { + box-shadow: 0 4px 16px rgba(0,0,0,0.1); + transform: translateY(-2px); +} +html.dark .contributor-card { + background: #242424; + border-color: rgba(255,255,255,0.07); +} +html.dark .contributor-card:hover { + box-shadow: 0 4px 16px rgba(0,0,0,0.3); +} + +/* Portrait */ +.contributor-portrait { + width: 100%; + aspect-ratio: 1; + overflow: hidden; + background: #e8e8e8; +} +html.dark .contributor-portrait { background: #333; } +.contributor-portrait img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} +.contributor-placeholder { + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-size: 2.5rem; + font-weight: 700; + color: #aaa; + background: repeating-linear-gradient( + 45deg, + #ddd, + #ddd 10px, + #e8e8e8 10px, + #e8e8e8 20px + ); +} +html.dark .contributor-placeholder { + background: repeating-linear-gradient( + 45deg, + #2a2a2a, + #2a2a2a 10px, + #333 10px, + #333 20px + ); + color: #555; +} + +/* Name */ +.contributor-name { + padding: 0.6rem 0.75rem; + font-size: 0.85rem; + font-weight: 600; + line-height: 1.3; + text-align: center; +} +.contributor-title { + display: block; + font-size: 0.75rem; + font-weight: 400; + color: #888; + margin-bottom: 0.1rem; +} +html.dark .contributor-title { color: #aaa; } + +.contributors-page ul { + list-style: disc; + margin: 0.5rem 0 1rem 1.5rem; +} +.contributors-page li { + border-bottom: none !important; + padding: 0 !important; + margin-bottom: 0.2rem; +} + +/* Responsive */ +@media (max-width: 900px) { + .contributors-grid { grid-template-columns: repeat(3, 1fr); } +} +@media (max-width: 600px) { + .contributors-grid { grid-template-columns: repeat(2, 1fr); } +} \ No newline at end of file diff --git a/static/css/projects.css b/static/css/projects.css new file mode 100644 index 0000000..cdfd17f --- /dev/null +++ b/static/css/projects.css @@ -0,0 +1,211 @@ +/* ── Projects page ── */ +.projects-page { + max-width: 1100px; + margin: 0 auto; + padding: 2rem 0 4rem; +} + +/* Header */ +.projects-title { + font-size: clamp(2rem, 4vw, 3rem); + font-weight: 700; + letter-spacing: -0.02em; + margin-bottom: 0.65rem; +} +.projects-subtitle { + font-size: 1.1rem; + color: #666; + margin-bottom: 1.5rem; +} +html.dark .projects-subtitle { color: #aaa; } + +/* Proportional colour bar */ +.area-bar { + display: flex; + height: 6px; + border-radius: 3px; + overflow: hidden; + margin-bottom: 2rem; + gap: 2px; +} +.area-bar-a { background: #ef9052; border-radius: 3px; } +.area-bar-b { background: #0a8f37; border-radius: 3px; } +.area-bar-c { background: #dc1a17; border-radius: 3px; } +.area-bar-q { background: #aaa; border-radius: 3px; } + +/* Areas title */ +.projects-areas-title { + font-size: 1.3rem; + font-weight: 700; + margin-bottom: 1rem; +} + +/* Intro row: text left, figure right */ +.projects-intro-row { + display: flex; + gap: 4%; + align-items: flex-start; + margin-bottom: 3rem; +} +.projects-intro-text { + flex: 1; +} +.projects-intro-text p { margin-bottom: 0.75rem; color: #444; font-size: 0.95rem; line-height: 1.7; } +html.dark .projects-intro-text p { color: #bbb; } +.projects-intro-text ul { margin: 0.5rem 0 1.25rem 1.2rem; } +.projects-intro-text li { margin-bottom: 0.3rem; font-size: 0.95rem; } +.projects-intro-figure { + flex: 0 0 42%; + max-width: 42%; +} +.projects-intro-figure img { + width: 100%; + height: auto; +} +html.dark .projects-intro-figure img { + filter: invert(0.85) hue-rotate(180deg); +} + +/* Area buttons */ +.area-buttons { + display: flex; + flex-direction: column; + gap: 0.5rem; + margin-top: 1.25rem; +} +.area-btn { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.6rem 1rem; + border-radius: 6px; + font-weight: 600; + font-size: 0.9rem; + text-decoration: none; + color: #fff; + transition: opacity 0.2s; +} +.area-btn:hover { opacity: 0.85; } +.area-btn-a { background: #ef9052; } +.area-btn-b { background: #0a8f37; } +.area-btn-c { background: #dc1a17; } +.area-btn-q { background: #888; } + +/* Group section */ +.projects-group { margin-bottom: 3rem; } +.group-label { + font-size: 1.1rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 1.25rem; + padding-left: 0.75rem; + border-left: 4px solid; +} +.group-label-a { border-color: #ef9052; color: #ef9052; } +.group-label-b { border-color: #0a8f37; color: #0a8f37; } +.group-label-c { border-color: #dc1a17; color: #dc1a17; } +.group-label-q { border-color: #888; color: #888; } + +/* Project grid */ +.projects-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.25rem; +} + +/* Project card */ +.project-card { + border: 1px solid rgba(0,0,0,0.08); + border-radius: 12px; + padding: 1.25rem; + display: flex; + flex-direction: column; + gap: 0.75rem; + background: #fff; + transition: box-shadow 0.2s, transform 0.2s; +} +.project-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.08); + transform: translateY(-2px); +} +html.dark .project-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} +html.dark .project-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.3); +} + +.project-card-top { + display: flex; + align-items: center; + gap: 1rem; + text-decoration: none; + color: inherit; +} +.project-thumb { + width: 80px; + height: 60px; + object-fit: cover; + border-radius: 6px; + flex-shrink: 0; +} +.project-title { + font-size: 1rem; + font-weight: 700; + line-height: 1.3; + color: inherit; +} + +.project-meta { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; +} +.project-tag { + font-size: 0.75rem; + padding: 2px 8px; + border-radius: 4px; + border: 1px solid rgba(0,0,0,0.12); + text-decoration: none; + color: #555; + transition: border-color 0.2s, color 0.2s; +} +.project-tag:hover { border-color: #0a8f37; color: #0a8f37; } +html.dark .project-tag { border-color: rgba(255,255,255,0.15); color: #aaa; } +html.dark .project-tag:hover { border-color: #0a8f37; color: #0a8f37; } +.project-tag-topic { background: rgba(0,0,0,0.03); } +html.dark .project-tag-topic { background: rgba(255,255,255,0.04); } + +.project-excerpt { + font-size: 0.88rem; + line-height: 1.6; + color: #555; + flex: 1; +} +html.dark .project-excerpt { color: #aaa; } + +.project-arrow { + align-self: flex-end; + width: 36px; + height: 36px; + border-radius: 50%; + border: 1px solid rgba(0,0,0,0.12); + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + color: #555; + font-size: 1rem; + transition: background 0.2s, color 0.2s; +} +.project-arrow:hover { background: #0a8f37; color: #fff; border-color: #0a8f37; } +html.dark .project-arrow { border-color: rgba(255,255,255,0.15); color: #aaa; } + +/* Responsive */ +@media (max-width: 700px) { + .projects-grid { grid-template-columns: 1fr; } + .projects-intro-row { flex-direction: column; } + .projects-intro-figure { max-width: 100%; } +} \ No newline at end of file diff --git a/static/css/publications.css b/static/css/publications.css new file mode 100644 index 0000000..55d1d38 --- /dev/null +++ b/static/css/publications.css @@ -0,0 +1,139 @@ +/* ── Publications page ── */ +.publications-page { + max-width: 1100px; + margin: 0 auto; + padding: 2rem 0 8rem; +} + +/* Year group */ +.pub-year-group { margin-bottom: 3rem; } +.pub-year { + font-size: 1.3rem; + font-weight: 700; + color: #888; + margin-bottom: 1rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid rgba(0,0,0,0.08); +} +html.dark .pub-year { + color: #666; + border-color: rgba(255,255,255,0.08); +} + +/* Grid */ +.pub-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1rem; +} + +/* Card */ +.pub-card { + border: 1px solid rgba(0,0,0,0.08); + border-radius: 12px; + background: #fff; + transition: box-shadow 0.2s, transform 0.2s; +} +.pub-card:hover { + box-shadow: 0 4px 16px rgba(0,0,0,0.08); + transform: translateY(-2px); +} +html.dark .pub-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} +html.dark .pub-card:hover { + box-shadow: 0 4px 16px rgba(0,0,0,0.25); +} +.pub-card-inner { + padding: 1.25rem; + display: flex; + flex-direction: column; + gap: 0.6rem; + height: 100%; +} + +/* Top row: date + area dot */ +.pub-meta-top { + display: flex; + align-items: center; + gap: 0.5rem; +} +.pub-date { + font-size: 0.75rem; + color: #888; + font-weight: 500; +} +.pub-area-dot { + width: 8px; + height: 8px; + border-radius: 50%; + flex-shrink: 0; +} +.pub-area-a { background: #ef9052; } +.pub-area-b { background: #0a8f37; } +.pub-area-c { background: #dc1a17; } + +/* Title */ +.pub-title-text { + font-size: 0.95rem; + font-weight: 700; + line-height: 1.35; + color: inherit; + margin: 0; +} +.pub-title { display: none; } /* hide duplicate – we show pub-title-text */ +.pub-title-text a { + color: inherit; + text-decoration: none; +} +.pub-title-text a:hover { color: #0a8f37; } + +/* Contributors */ +.pub-contributors { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; + margin-top: auto; +} + +/* DOI link */ +.pub-doi { + font-size: 0.8rem; + font-weight: 600; + color: #0a8f37; + text-decoration: none; + margin-top: 0.25rem; +} +.pub-doi:hover { text-decoration: underline; } + +/* Stretched link: ganze Card klickbar via Titel-Link */ +.pub-card { + position: relative; +} +.pub-card-link::after { + content: ''; + position: absolute; + inset: 0; + z-index: 1; +} +/* Hover-Effekt für die ganze Card */ +.pub-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(0,0,0,0.08); + transition: transform 0.15s ease, box-shadow 0.15s ease; +} +/* Andere Links bleiben separat klickbar (liegen über dem Overlay) */ +.pub-card .pub-contributors a, +.pub-card .pub-doi { + position: relative; + z-index: 2; +} +/* Cursor zeigt Klickbarkeit auf der ganzen Card */ +.pub-card { + cursor: pointer; +} + +@media (max-width: 700px) { + .pub-grid { grid-template-columns: 1fr; } +} \ No newline at end of file diff --git a/static/css/single.css b/static/css/single.css new file mode 100644 index 0000000..c64e518 --- /dev/null +++ b/static/css/single.css @@ -0,0 +1,390 @@ +/* ── Projects page ── */ +.projects-page { + max-width: 1100px; + margin: 0 auto; + padding: 2rem 0 4rem; +} + +/* Header */ +.projects-title { + font-size: clamp(2rem, 4vw, 3rem); + font-weight: 700; + letter-spacing: -0.02em; + margin-bottom: 0.25rem; +} +.projects-subtitle { + font-size: 1.1rem; + color: #666; + margin-bottom: 1.5rem; +} +html.dark .projects-subtitle { color: #aaa; } + +/* Proportional colour bar */ +.area-bar { + display: flex; + height: 6px; + border-radius: 3px; + overflow: hidden; + margin-bottom: 2rem; + gap: 2px; +} +.area-bar-a { background: #ef9052; border-radius: 3px; } +.area-bar-b { background: #0a8f37; border-radius: 3px; } +.area-bar-c { background: #dc1a17; border-radius: 3px; } +.area-bar-q { background: #aaa; border-radius: 3px; } + +/* Areas title */ +.projects-areas-title { + font-size: 1.3rem; + font-weight: 700; + margin-bottom: 1rem; +} + +/* Intro row: text left, figure right */ +.projects-intro-row { + display: flex; + gap: 4%; + align-items: flex-start; + margin-bottom: 3rem; +} +.projects-intro-text { + flex: 1; +} +.projects-intro-text p { margin-bottom: 0.75rem; color: #444; font-size: 0.95rem; line-height: 1.7; } +html.dark .projects-intro-text p { color: #bbb; } +.projects-intro-text ul { margin: 0.5rem 0 1.25rem 1.2rem; } +.projects-intro-text li { margin-bottom: 0.3rem; font-size: 0.95rem; } +.projects-intro-figure { + flex: 0 0 42%; + max-width: 42%; +} +.projects-intro-figure img { + width: 100%; + height: auto; +} +html.dark .projects-intro-figure img { + filter: invert(0.85) hue-rotate(180deg); +} + +/* Area buttons */ +.area-buttons { + display: flex; + flex-direction: column; + gap: 0.5rem; + margin-top: 1.25rem; +} +.area-btn { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0.6rem 1rem; + border-radius: 6px; + font-weight: 600; + font-size: 0.9rem; + text-decoration: none; + color: #fff; + transition: opacity 0.2s; +} +.area-btn:hover { opacity: 0.85; } +.area-btn-a { background: #ef9052; } +.area-btn-b { background: #0a8f37; } +.area-btn-c { background: #dc1a17; } +.area-btn-q { background: #888; } + +/* Group section */ +.projects-group { margin-bottom: 3rem; } +.group-label { + font-size: 1.1rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + margin-bottom: 1.25rem; + padding-left: 0.75rem; + border-left: 4px solid; +} +.group-label-a { border-color: #ef9052; color: #ef9052; } +.group-label-b { border-color: #0a8f37; color: #0a8f37; } +.group-label-c { border-color: #dc1a17; color: #dc1a17; } +.group-label-q { border-color: #888; color: #888; } + +/* Project grid */ +.projects-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.25rem; +} + +/* Project card */ +.project-card { + border: 1px solid rgba(0,0,0,0.08); + border-radius: 12px; + padding: 1.25rem; + display: flex; + flex-direction: column; + gap: 0.75rem; + background: #fff; + transition: box-shadow 0.2s, transform 0.2s; +} +.project-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.08); + transform: translateY(-2px); +} +html.dark .project-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} +html.dark .project-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.3); +} + +.project-card-top { + display: flex; + align-items: center; + gap: 1rem; + text-decoration: none; + color: inherit; +} +.project-thumb { + width: 80px; + height: 60px; + object-fit: cover; + border-radius: 6px; + flex-shrink: 0; +} +.project-title { + font-size: 1rem; + font-weight: 700; + line-height: 1.3; + color: inherit; +} + +.project-meta { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; +} +.project-tag { + font-size: 0.75rem; + padding: 2px 8px; + border-radius: 4px; + border: 1px solid rgba(0,0,0,0.12); + text-decoration: none; + color: #555; + transition: border-color 0.2s, color 0.2s; +} +.project-tag:hover { border-color: #0a8f37; color: #0a8f37; } +html.dark .project-tag { border-color: rgba(255,255,255,0.15); color: #aaa; } +html.dark .project-tag:hover { border-color: #0a8f37; color: #0a8f37; } +.project-tag-topic { background: rgba(0,0,0,0.03); } +html.dark .project-tag-topic { background: rgba(255,255,255,0.04); } + +.project-excerpt { + font-size: 0.88rem; + line-height: 1.6; + color: #555; + flex: 1; +} +html.dark .project-excerpt { color: #aaa; } + +.project-arrow { + align-self: flex-end; + width: 36px; + height: 36px; + border-radius: 50%; + border: 1px solid rgba(0,0,0,0.12); + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + color: #555; + font-size: 1rem; + transition: background 0.2s, color 0.2s; +} +.project-arrow:hover { background: #0a8f37; color: #fff; border-color: #0a8f37; } +html.dark .project-arrow { border-color: rgba(255,255,255,0.15); color: #aaa; } + +/* Responsive */ +@media (max-width: 700px) { + .projects-grid { grid-template-columns: 1fr; } + .projects-intro-row { flex-direction: column; } + .projects-intro-figure { max-width: 100%; } +} + +/* ── Single project page ── */ +.project-single { + max-width: 860px; + margin: 0 auto; + padding: 2rem 0 5rem; +} + +.project-back { + display: inline-block; + font-size: 0.9rem; + color: var(--text-muted, #888); + text-decoration: none; + margin-bottom: 2rem; + transition: color 0.2s; +} +.project-back:hover { color: #0a8f37; } + +/* Hero: thumb + title side by side */ +.project-single-hero { + display: flex; + gap: 2rem; + align-items: flex-start; + margin-bottom: 2rem; +} +.project-single-thumb { + flex: 0 0 180px; +} +.project-single-thumb img { + width: 100%; + height: auto; + border-radius: 10px; +} +.project-single-header { flex: 1; } + +.project-single-id { + font-size: 2rem; + font-weight: 800; + letter-spacing: -0.02em; + margin-bottom: 0.25rem; + text-transform: uppercase; +} +.project-single-title { + font-size: clamp(1.4rem, 2.5vw, 2rem); + font-weight: 700; + line-height: 1.2; + letter-spacing: -0.01em; + margin-bottom: 1rem; +} + +.project-single-areas { + display: flex; + flex-wrap: wrap; + gap: 0.4rem; +} +.area-pill { + font-size: 0.8rem; + font-weight: 600; + padding: 3px 10px; + border-radius: 20px; + text-decoration: none; + background: rgba(0,0,0,0.06); + color: #444; + transition: background 0.2s; +} +.area-pill:hover { background: rgba(0,0,0,0.12); } +html.dark .area-pill { background: rgba(255,255,255,0.08); color: #ccc; } +html.dark .area-pill:hover { background: rgba(255,255,255,0.14); } + +/* Meta grid */ +.project-single-meta { + display: flex; + gap: 3rem; + flex-wrap: wrap; + padding: 1.5rem 0; + border-top: 1px solid rgba(0,0,0,0.08); + border-bottom: 1px solid rgba(0,0,0,0.08); + margin-bottom: 2rem; +} +html.dark .project-single-meta { + border-color: rgba(255,255,255,0.08); +} +.meta-block { } +.meta-label { + font-size: 0.75rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #888; + margin-bottom: 0.5rem; +} +.meta-tags { + display: flex; + flex-wrap: wrap; + gap: 0.3rem; +} + +/* Content */ +.project-single-content { + font-size: 1.05rem; + line-height: 1.8; + color: #333; +} +html.dark .project-single-content { color: #ccc; } +.project-single-content p { margin-bottom: 1.2rem; } + +@media (max-width: 600px) { + .project-single-hero { flex-direction: column; } + .project-single-thumb { flex: none; width: 120px; } +} + +/* ── Single page (card style) ── */ +.project-single { + max-width: 860px; + margin: 0 auto; + padding: 2rem 0 20rem; +} +.project-back { + display: inline-block; + font-size: 0.9rem; + color: #888; + text-decoration: none; + margin-bottom: 1rem; + transition: color 0.2s; +} +.project-back:hover { color: #0a8f37; } + +.project-single-bar { + height: 6px; + border-radius: 3px; + margin-bottom: 1.5rem; +} + +.project-single-card { + border: 1px solid rgba(0,0,0,0.08); + border-radius: 12px; + padding: 1.5rem; + background: #fff; + display: flex; + flex-direction: column; + gap: 1rem; +} +html.dark .project-single-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} + +.project-single-top { + align-items: center; + gap: 1.25rem; + text-decoration: none; + color: inherit; +} +.project-single-top .project-thumb { + width: 100px; + height: 75px; + flex-shrink: 0; +} + +.project-single-id { + font-size: 1.4rem; + font-weight: 800; + letter-spacing: -0.01em; + margin-bottom: 0.15rem; +} +.project-single-title { + font-size: clamp(1.1rem, 2vw, 1.5rem); + font-weight: 700; + line-height: 1.25; + margin: 0; +} + +.project-single-content { + font-size: 0.95rem; + line-height: 1.8; + color: #444; +} +html.dark .project-single-content { color: #bbb; } +.project-single-content p { margin-bottom: 1rem; } \ No newline at end of file diff --git a/static/css/topics.css b/static/css/topics.css new file mode 100644 index 0000000..398e28a --- /dev/null +++ b/static/css/topics.css @@ -0,0 +1,143 @@ +/* ── Topics page ── */ +.topics-page { + max-width: 1100px; + margin: 0 auto; + padding: 2rem 0 8rem; +} + +.topics-section-title { + font-size: 1.2rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + color: #888; + margin-bottom: 1.25rem; +} + +/* ── Research area cards (large) ── */ +.area-cards { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.25rem; + margin-bottom: 1rem; +} +.area-card { + border-radius: 12px; + border: 1px solid rgba(0,0,0,0.08); + border-top-width: 5px; + background: #fff; + padding: 1.5rem; + text-decoration: none; + color: inherit; + display: flex; + flex-direction: column; + gap: 0.5rem; + transition: box-shadow 0.2s, transform 0.2s; +} +.area-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.1); + transform: translateY(-2px); +} +html.dark .area-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} +html.dark .area-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.3); +} +.area-card-label { + font-size: 0.8rem; + font-weight: 800; + text-transform: uppercase; + letter-spacing: 0.08em; +} +.area-card-title { + font-size: 1.15rem; + font-weight: 700; + line-height: 1.25; +} +.area-card-desc { + font-size: 0.88rem; + line-height: 1.6; + color: #666; + flex: 1; +} +html.dark .area-card-desc { color: #aaa; } +.area-card-arrow { + font-size: 1.1rem; + font-weight: 700; + align-self: flex-end; +} + +/* ── All topics grid ── */ +.topics-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.75rem; +} +.topic-card { + border: 1px solid rgba(0,0,0,0.08); + border-radius: 8px; + padding: 0.9rem 1rem; + background: #fff; + text-decoration: none; + color: inherit; + display: flex; + justify-content: space-between; + align-items: center; + gap: 0.5rem; + transition: box-shadow 0.15s, border-color 0.15s; +} +.topic-card:hover { + border-color: #0a8f37; + box-shadow: 0 2px 8px rgba(0,0,0,0.06); +} +html.dark .topic-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} +html.dark .topic-card:hover { border-color: #0a8f37; } +.topic-card-title { + font-size: 0.9rem; + font-weight: 600; + line-height: 1.3; +} +.topic-card-count { + font-size: 0.75rem; + color: #888; + white-space: nowrap; + flex-shrink: 0; +} + +@media (max-width: 800px) { + .area-cards { grid-template-columns: 1fr; } + .topics-grid { grid-template-columns: repeat(2, 1fr); } +} +@media (max-width: 500px) { + .topics-grid { grid-template-columns: 1fr; } +} + +/* ── Term page ── */ +.topic-content { + font-size: 0.95rem; + line-height: 1.75; + color: #444; + max-width: 600px; + margin-bottom: 1rem; +} +html.dark .topic-content { color: #bbb; } +.topic-content p { margin-bottom: 0.75rem; } + +.project-back { + display: inline-block; + font-size: 0.9rem; + color: #888; + text-decoration: none; + margin-bottom: 1rem; + transition: color 0.2s; +} +.project-back:hover { color: #0a8f37; } +/* Hide image from _index.md content on topics list page */ +.topics-page .projects-intro-text img { + display: none; +} diff --git a/static/css/trr379-home.css b/static/css/trr379-home.css new file mode 100644 index 0000000..04d056a --- /dev/null +++ b/static/css/trr379-home.css @@ -0,0 +1,227 @@ +@font-face { + font-family: 'DM Sans'; + src: url('/fonts/DMSans-VariableFont_opsz,wght.ttf') format('truetype'); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: 'DM Sans'; + src: url('/fonts/DMSans-Italic-VariableFont_opsz,wght.ttf') format('truetype'); + font-weight: 100 900; + font-style: italic; + font-display: swap; +} +*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } + +/* ── Light mode tokens ── */ +:root { + --green-dark: #05662e; + --green-light: #0a8f37; + --red: #dc1a17; + --red-dark: #9c1916; + --orange: #ef9052; + --text: #1a1a1a; + --text-muted: #555; + --text-body: #444; + --bg: #fafafa; + --border: rgba(5,102,46,0.3); +} + +/* ── Dark mode tokens (Congo adds .dark to ) ── */ +html.dark { + --text: #e8e8e8; + --text-muted: #aaa; + --text-body: #bbb; + --bg: #1a1a1a; + --border: rgba(10,143,55,0.35); +} + +html { scroll-behavior: smooth; } +body { font-family: 'DM Sans', sans-serif; color: var(--text); background: var(--bg); } +body { + max-width: 100% !important; + +} +/* ── Scroll progress bar ── */ +.scroll-progress { + position: fixed; top: 0; left: 0; height: 3px; z-index: 200; width: 0%; + background: linear-gradient(90deg, var(--green-light), var(--orange), var(--red)); +} + +/* ── Hero ── */ +.hero { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 5rem 3rem 0; position: relative; overflow: hidden; } +.hero-inner { position: relative; max-width: 1400px; width: 100%; } +.hero-text { position: absolute; top: 8%; left: 0; z-index: 10; max-width: 420px; } +.hero-title { font-size: clamp(2rem,4vw,3.2rem); font-weight: 700; letter-spacing: -0.02em; line-height: 1.08; margin-bottom: 0.6rem; } +.hero-subtitle { font-size: clamp(0.95rem,1.5vw,1.15rem); font-weight: 300; line-height: 1.5; color: var(--text-muted); } +.hero-figure { width: 100%; } +.hero-figure svg { width: 100%; height: auto; overflow: visible; } + +/* ── Middle sticky layout ── */ +.middle-wrapper { display: flex; align-items: flex-start; max-width: 1200px; margin: 0 auto; padding: 0 3rem; gap: 6%; } +.middle-figure-col { flex: 0 0 42%; max-width: 42%; position: sticky; top: 0; height: 100vh; display: flex; align-items: center; } +.fig-stack { position: relative; width: 100%; } +#fig2Wrap { width: 100%; position: relative; } +#fig4Wrap { position: absolute; top: 50%; left: 0; width: 100%; transform: translateY(-50%); opacity: 0; pointer-events: none; } +#fig2Wrap svg, #fig4Wrap svg { width: 100%; height: auto; display: block; overflow: visible; } +.middle-text-col { flex: 1; padding-top: 22.5vh; } +.text-panel { min-height: 55vh; display: flex; align-items: center; padding: 4rem 0; } +#adolPanel { min-height: 100vh; } + +.section-label { font-size: 2rem; font-weight: 700; text-transform: uppercase; margin-bottom: 0.7rem; } +.section-title { font-size: clamp(1.5rem,1.8vw,2.2rem); font-weight: 700; letter-spacing: -0.01em; line-height: 1.15; margin-bottom: 1rem; } +.section-text { font-size: clamp(0.92rem,1.2vw,1.05rem); line-height: 1.75; color: var(--text-body); max-width: 500px; } + +/* ── Venn ── */ +.venn-section { min-height: 120vh; display: flex; align-items: center; justify-content: center; padding: 4rem 2rem; } +.venn-container { max-width: 900px; width: 100%; display: flex; flex-direction: column; align-items: center; } +.venn-figure-wrap { position: relative; width: 100%; } +.venn-figure { width: 55%; max-width: 420px; margin: 0 auto; } +.venn-figure svg { width: 100%; height: auto; overflow: visible; } +.venn-labels { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } +.venn-label { position: absolute; opacity: 0; } +.venn-label-title { display: block; font-weight: 700; font-size: clamp(0.95rem,1.3vw,1.15rem); margin-bottom: 0.15rem; } +.venn-label-desc { display: block; font-size: clamp(0.82rem,1vw,0.95rem); color: var(--text-body); line-height: 1.4; } +.venn-label-a { top: 8%; left: 0; } +.venn-label-b { top: 18%; right: 0; text-align: right; } +.venn-label-c { bottom: 22%; right: 0; text-align: right; } +.venn-label-z { bottom: 18%; left: 0; } +.venn-footer { margin-bottom: 1.5rem; opacity: 0; } +.venn-footer p { color: var(--text-muted); } + +/* ── Intro section (from _index.md) ── */ +.trr-intro { padding: 5rem 2rem 6rem; background: var(--bg); } +.trr-intro-inner { + max-width: 800px; + margin: 0 auto; + font-size: clamp(0.95rem, 1.2vw, 1.05rem); + line-height: 1.8; + color: var(--text-body); +} +.trr-intro-inner img { display: block; max-width: 100%; margin: 2rem auto; } +html.dark .trr-intro-inner img[src$=".svg"] { filter: invert(0.85) hue-rotate(180deg); } +.trr-intro-inner p { margin-bottom: 1rem; } +.trr-intro-inner .prose { text-align: center; margin-bottom: 1.5rem; font-size: 0.95rem; color: var(--text-muted); } +.trr-intro-inner a { + color: var(--green-light); + text-decoration: none; + border-bottom: 1px solid var(--border); + transition: border-color 0.2s; +} +.trr-intro-inner a:hover { border-color: var(--green-light); } + +/* ── Responsive ── */ +@media (max-width: 900px) { + .hero { padding: 5rem 1.5rem 2rem; } + .middle-wrapper { padding: 1.5rem; gap: 4%; } + .middle-figure-col { flex: 0 0 38%; max-width: 38%; } + .text-panel { min-height: 70vh; padding: 2rem 0; } + .section-label { font-size: 1rem; } + .section-title { font-size: 0.8rem; } + .section-text { font-size: 0.7rem; line-height: 1.6; } +} + +/* ── Home News Section ── */ +.home-news { + padding: 4rem 2rem 6rem; + background: var(--bg); +} +.home-news-inner { + max-width: 1100px; + margin: 0 auto; +} +.home-news-header { + display: flex; + align-items: baseline; + justify-content: space-between; + margin-bottom: 1.5rem; +} +.home-news-title { + font-size: clamp(1.5rem, 2vw, 2rem); + font-weight: 700; + letter-spacing: -0.01em; +} +.home-news-more { + font-size: 0.9rem; + font-weight: 600; + color: var(--green-light); + text-decoration: none; +} +.home-news-more:hover { text-decoration: underline; } + +.home-news-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.25rem; +} + + +.home-news-card { + display: flex; + flex-direction: column; + border: 1px solid rgba(0,0,0,0.08); + border-radius: 12px; + overflow: hidden; + background: #fff; + text-decoration: none; + color: inherit; + transition: box-shadow 0.2s, transform 0.2s; +} +.home-news-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.1); + transform: translateY(-2px); +} +html.dark .home-news-card { + background: #242424; + border-color: rgba(255,255,255,0.08); +} +html.dark .home-news-card:hover { + box-shadow: 0 4px 20px rgba(0,0,0,0.3); +} +.home-news-img { + width: 100%; + height: 160px; + overflow: hidden; + background: #eee; +} +html.dark .home-news-img { background: #333; } +.home-news-img img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} +.home-news-body { + padding: 1rem; + display: flex; + flex-direction: column; + gap: 0.4rem; +} +.home-news-date { + font-size: 0.75rem; + color: #888; + font-weight: 500; +} +.home-news-card-title { + font-size: 0.95rem; + font-weight: 700; + line-height: 1.3; +} +.home-news-excerpt { + font-size: 0.85rem; + color: #666; + line-height: 1.5; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; +} +html.dark .home-news-excerpt { color: #aaa; } + +@media (max-width: 900px) { + .home-news-grid { grid-template-columns: repeat(2, 1fr); } +} +@media (max-width: 600px) { + .home-news-grid { grid-template-columns: 1fr; } +} \ No newline at end of file diff --git a/static/fonts/DMSans-Italic-VariableFont_opsz,wght.ttf b/static/fonts/DMSans-Italic-VariableFont_opsz,wght.ttf new file mode 100644 index 0000000..b57690a Binary files /dev/null and b/static/fonts/DMSans-Italic-VariableFont_opsz,wght.ttf differ diff --git a/static/fonts/DMSans-VariableFont_opsz,wght.ttf b/static/fonts/DMSans-VariableFont_opsz,wght.ttf new file mode 100644 index 0000000..94c9e1c Binary files /dev/null and b/static/fonts/DMSans-VariableFont_opsz,wght.ttf differ diff --git a/static/js/ScrollTrigger.min.js b/static/js/ScrollTrigger.min.js new file mode 100644 index 0000000..cceb2b9 --- /dev/null +++ b/static/js/ScrollTrigger.min.js @@ -0,0 +1,11 @@ +/*! + * ScrollTrigger 3.12.5 + * https://gsap.com + * + * @license Copyright 2024, GreenSock. All rights reserved. + * Subject to the terms at https://gsap.com/standard-license or for Club GSAP members, the agreement issued with that membership. + * @author: Jack Doyle, jack@greensock.com + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).window=e.window||{})}(this,function(e){"use strict";function _defineProperties(e,t){for(var r=0;r=Math.abs(r)?t:r}function O(){(Ae=Ce.core.globals().ScrollTrigger)&&Ae.core&&function _integrate(){var e=Ae.core,r=e.bridge||{},t=e._scrollers,n=e._proxies;t.push.apply(t,Ie),n.push.apply(n,Le),Ie=t,Le=n,i=function _bridge(e,t){return r[e](t)}}()}function P(e){return Ce=e||r(),!Te&&Ce&&"undefined"!=typeof document&&document.body&&(Se=window,Pe=(ke=document).documentElement,Me=ke.body,t=[Se,ke,Pe,Me],Ce.utils.clamp,Be=Ce.core.context||function(){},Oe="onpointerenter"in Me?"pointer":"mouse",Ee=k.isTouch=Se.matchMedia&&Se.matchMedia("(hover: none), (pointer: coarse)").matches?1:"ontouchstart"in Se||0=o,n=Math.abs(t)>=o;S&&(r||n)&&S(se,e,t,me,ye),r&&(m&&0Math.abs(t)?"x":"y",ie=!0),"y"!==ae&&(me[2]+=e,se._vx.update(e,!0)),"x"!==ae&&(ye[2]+=t,se._vy.update(t,!0)),n?ee=ee||requestAnimationFrame(ff):ff()}function jf(e){if(!df(e,1)){var t=(e=M(e,s)).clientX,r=e.clientY,n=t-se.x,o=r-se.y,i=se.isDragging;se.x=t,se.y=r,(i||Math.abs(se.startX-t)>=a||Math.abs(se.startY-r)>=a)&&(h&&(re=!0),i||(se.isDragging=!0),hf(n,o),i||p&&p(se))}}function mf(e){return e.touches&&1=e)return a[n];return a[n-1]}for(n=a.length,e+=r;n--;)if(a[n]<=e)return a[n];return a[0]}:function(e,t,r){void 0===r&&(r=.001);var n=i(e);return!t||Math.abs(n-e)r&&(n*=t/100),e=e.substr(0,r-1)),e=n+(e in H?H[e]*t:~e.indexOf("%")?parseFloat(e)*t/100:parseFloat(e)||0)}return e}function Db(e,t,r,n,o,i,a,s){var l=o.startColor,c=o.endColor,u=o.fontSize,f=o.indent,d=o.fontWeight,p=Xe.createElement("div"),g=La(r)||"fixed"===z(r,"pinType"),h=-1!==e.indexOf("scroller"),v=g?We:r,b=-1!==e.indexOf("start"),m=b?l:c,y="border-color:"+m+";font-size:"+u+";color:"+m+";font-weight:"+d+";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";return y+="position:"+((h||s)&&g?"fixed;":"absolute;"),!h&&!s&&g||(y+=(n===Fe?q:I)+":"+(i+parseFloat(f))+"px;"),a&&(y+="box-sizing:border-box;text-align:left;width:"+a.offsetWidth+"px;"),p._isStart=b,p.setAttribute("class","gsap-marker-"+e+(t?" marker-"+t:"")),p.style.cssText=y,p.innerText=t||0===t?e+"-"+t:e,v.children[0]?v.insertBefore(p,v.children[0]):v.appendChild(p),p._offset=p["offset"+n.op.d2],X(p,0,n,b),p}function Ib(){return 34We.clientWidth)||(Ie.cache++,v?D=D||requestAnimationFrame(Z):Z(),st||U("scrollStart"),st=at())}function Kb(){y=Ne.innerWidth,m=Ne.innerHeight}function Lb(){Ie.cache++,je||h||Xe.fullscreenElement||Xe.webkitFullscreenElement||b&&y===Ne.innerWidth&&!(Math.abs(Ne.innerHeight-m)>.25*Ne.innerHeight)||c.restart(!0)}function Ob(){return xb(ne,"scrollEnd",Ob)||Pt(!0)}function Rb(e){for(var t=0;tt,n=e._startClamp&&e.start>=t;(r||n)&&e.setPositions(n?t-1:e.start,r?Math.max(n?t:e.start+1,t):e.end,!0)}),Zb(!1),et=0,r.forEach(function(e){return e&&e.render&&e.render(-1)}),Ie.forEach(function(e){Ta(e)&&(e.smooth&&requestAnimationFrame(function(){return e.target.style.scrollBehavior="smooth"}),e.rec&&e(e.rec))}),Tb(w,1),c.pause(),kt++,Z(rt=2),Tt.forEach(function(e){return Ta(e.vars.onRefresh)&&e.vars.onRefresh(e)}),rt=ne.isRefreshing=!1,U("refresh")}else wb(ne,"scrollEnd",Ob)},Q=0,Mt=1,Z=function _updateAll(e){if(2===e||!rt&&!S){ne.isUpdating=!0,ot&&ot.update(0);var t=Tt.length,r=at(),n=50<=r-R,o=t&&Tt[0].scroll();if(Mt=o=Qa(be,he)){if(ie&&Ae()&&!de)for(i=ie.parentNode;i&&i!==We;)i._pinOffset&&(B-=i._pinOffset,q-=i._pinOffset),i=i.parentNode}else o=mb(ae),s=he===Fe,a=Ae(),G=parseFloat(j(he.a))+_,!y&&1=q})},Te.update=function(e,t,r){if(!de||r||e){var n,o,i,a,s,l,c,u=!0===rt?re:Te.scroll(),f=e?0:(u-B)/N,d=f<0?0:1u+(u-R)/(at()-Ke)*M&&(d=.9999)),d!==p&&Te.enabled){if(a=(s=(n=Te.isActive=!!d&&d<1)!=(!!p&&p<1))||!!d!=!!p,Te.direction=p=Qa(be,he),fe)if(e||!n&&!l)oc(ae,U);else{var g=wt(ae,!0),h=u-B;oc(ae,We,g.top+(he===Fe?h:0)+xt,g.left+(he===Fe?0:h)+xt)}Et(n||l?W:V),$&&d<1&&n||b(G+(1!==d||l?0:Q))}}else b(Ia(G+Q*d));!ue||A.tween||je||it||te.restart(!0),S&&(s||ce&&d&&(d<1||!tt))&&Ve(S.targets).forEach(function(e){return e.classList[n||ce?"add":"remove"](S.className)}),!T||ve||e||T(Te),a&&!je?(ve&&(c&&("complete"===i?O.pause().totalProgress(1):"reset"===i?O.restart(!0).pause():"restart"===i?O.restart(!0):O[i]()),T&&T(Te)),!s&&tt||(k&&s&&Xa(Te,k),xe[o]&&Xa(Te,xe[o]),ce&&(1===d?Te.kill(!1,1):xe[o]=0),s||xe[o=1===d?1:3]&&Xa(Te,xe[o])),pe&&!n&&Math.abs(Te.getVelocity())>(Ua(pe)?pe:2500)&&(Wa(Te.callbackAnimation),ee?ee.progress(1):Wa(O,"reverse"===i?1:!d,1))):ve&&T&&!je&&T(Te)}if(x){var v=de?u/de.duration()*(de._caScrollDist||0):u;y(v+(Y._isFlipped?1:0)),x(v)}C&&C(-u/de.duration()*(de._caScrollDist||0))}},Te.enable=function(e,t){Te.enabled||(Te.enabled=!0,wb(be,"resize",Lb),me||wb(be,"scroll",Jb),Se&&wb(ScrollTrigger,"refreshInit",Se),!1!==e&&(Te.progress=Oe=0,D=R=Me=Ae()),!1!==t&&Te.refresh())},Te.getTween=function(e){return e&&A?A.tween:ee},Te.setPositions=function(e,t,r,n){if(de){var o=de.scrollTrigger,i=de.duration(),a=o.end-o.start;e=o.start+a*e/i,t=o.start+a*t/i}Te.refresh(!1,!1,{start:Da(e,r&&!!Te._startClamp),end:Da(t,r&&!!Te._endClamp)},n),Te.update()},Te.adjustPinSpacing=function(e){if(Z&&e){var t=Z.indexOf(he.d)+1;Z[t]=parseFloat(Z[t])+e+xt,Z[1]=parseFloat(Z[1])+e+xt,Et(Z)}},Te.disable=function(e,t){if(Te.enabled&&(!1!==e&&Te.revert(!0,!0),Te.enabled=Te.isActive=!1,t||ee&&ee.pause(),re=0,n&&(n.uncache=1),Se&&xb(ScrollTrigger,"refreshInit",Se),te&&(te.pause(),A.tween&&A.tween.kill()&&(A.tween=0)),!me)){for(var r=Tt.length;r--;)if(Tt[r].scroller===be&&Tt[r]!==Te)return;xb(be,"resize",Lb),me||xb(be,"scroll",Jb)}},Te.kill=function(e,t){Te.disable(e,t),ee&&!t&&ee.kill(),a&&delete St[a];var r=Tt.indexOf(Te);0<=r&&Tt.splice(r,1),r===Qe&&0i&&(b()>i?a.progress(1)&&b(i):a.resetTo("scrollY",i))}Va(e)||(e={}),e.preventDefault=e.isNormalizer=e.allowClicks=!0,e.type||(e.type="wheel,touch"),e.debounce=!!e.debounce,e.id=e.id||"normalizer";var n,i,l,o,a,c,u,s,f=e.normalizeScrollX,t=e.momentum,r=e.allowNestedScroll,d=e.onRelease,p=J(e.target)||Je,g=He.core.globals().ScrollSmoother,h=g&&g.get(),v=E&&(e.content&&J(e.content)||h&&!1!==e.content&&!h.smooth()&&h.content()),b=K(p,Fe),m=K(p,Ye),y=1,x=(k.isTouch&&Ne.visualViewport?Ne.visualViewport.scale*Ne.visualViewport.width:Ne.outerWidth)/Ne.innerWidth,w=0,_=Ta(t)?function(){return t(n)}:function(){return t||2.8},C=xc(p,e.type,!0,r),T=Ha,S=Ha;return v&&He.set(v,{y:"+=0"}),e.ignoreCheck=function(e){return E&&"touchmove"===e.type&&function ignoreDrag(){if(o){requestAnimationFrame(zq);var e=Ia(n.deltaY/2),t=S(b.v-e);if(v&&t!==b.v+b.offset){b.offset=t-b.v;var r=Ia((parseFloat(v&&v._gsap.y)||0)-b.offset);v.style.transform="matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, "+r+", 0, 1)",v._gsap.y=r+"px",b.cacheID=Ie.cache,Z()}return!0}b.offset&&Dq(),o=!0}()||1.05=i||i-1<=r)&&He.to({},{onUpdate:Jq,duration:o})}else s.restart(!0);d&&d(e)},e.onWheel=function(){a._ts&&a.pause(),1e3a;)s=s._prev;return s?(e._next=s._next,s._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[i]=e,e._prev=s,e.parent=e._dp=t,e}function ya(t,e,r,i){void 0===r&&(r="_first"),void 0===i&&(i="_last");var n=e._prev,a=e._next;n?n._next=a:t[r]===e&&(t[r]=a),a?a._prev=n:t[i]===e&&(t[i]=n),e._next=e._prev=e.parent=null}function za(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove&&t.parent.remove(t),t._act=0}function Aa(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t}function Ca(t,e,r,i){return t._startAt&&(L?t._startAt.revert(ht):t.vars.immediateRender&&!t.vars.autoRevert||t._startAt.render(e,!0,i))}function Ea(t){return t._repeat?Tt(t._tTime,t=t.duration()+t._rDelay)*t:0}function Ga(t,e){return(t-e._start)*e._ts+(0<=e._ts?0:e._dirty?e.totalDuration():e._tDur)}function Ha(t){return t._end=ja(t._start+(t._tDur/Math.abs(t._ts||t._rts||X)||0))}function Ia(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=ja(r._time-(0X)&&e.render(r,!0)),Aa(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur(n=Math.abs(n))&&(a=i,o=n);return a}function tb(t){return za(t),t.scrollTrigger&&t.scrollTrigger.kill(!!L),t.progress()<1&&Ct(t,"onInterrupt"),t}function wb(t){if(t)if(t=!t.name&&t.default||t,x()||t.headless){var e=t.name,r=s(t),i=e&&!r&&t.init?function(){this._props=[]}:t,n={init:T,render:he,add:Wt,kill:ce,modifier:fe,rawVars:0},a={targetTest:0,get:0,getSetter:ne,aliases:{},register:0};if(Ft(),t!==i){if(pt[e])return;qa(i,qa(ua(t,n),a)),yt(i.prototype,yt(n,ua(t,a))),pt[i.prop=e]=i,t.targetTest&&(gt.push(i),ft[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}S(e,i),t.register&&t.register(ze,i,_e)}else At.push(t)}function zb(t,e,r){return(6*(t+=t<0?1:1>16,e>>8&St,e&St]:0:zt.black;if(!p){if(","===e.substr(-1)&&(e=e.substr(0,e.length-1)),zt[e])p=zt[e];else if("#"===e.charAt(0)){if(e.length<6&&(e="#"+(n=e.charAt(1))+n+(a=e.charAt(2))+a+(s=e.charAt(3))+s+(5===e.length?e.charAt(4)+e.charAt(4):"")),9===e.length)return[(p=parseInt(e.substr(1,6),16))>>16,p>>8&St,p&St,parseInt(e.substr(7),16)/255];p=[(e=parseInt(e.substr(1),16))>>16,e>>8&St,e&St]}else if("hsl"===e.substr(0,3))if(p=c=e.match(tt),r){if(~e.indexOf("="))return p=e.match(et),i&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,u=p[1]/100,n=2*(h=p[2]/100)-(a=h<=.5?h*(u+1):h+u-h*u),3=U?u.endTime(!1):t._dur;return r(e)&&(isNaN(e)||e in o)?(a=e.charAt(0),s="%"===e.substr(-1),n=e.indexOf("="),"<"===a||">"===a?(0<=n&&(e=e.replace(/=/,"")),("<"===a?u._start:u.endTime(0<=u._repeat))+(parseFloat(e.substr(1))||0)*(s?(n<0?u:i).totalDuration()/100:1)):n<0?(e in o||(o[e]=h),o[e]):(a=parseFloat(e.charAt(n-1)+e.substr(n+1)),s&&i&&(a=a/100*(Z(i)?i[0]:i).totalDuration()),1=r&&te)return i;i=i._next}else for(i=t._last;i&&i._start>=r;){if("isPause"===i.data&&i._start=n._start)&&n._ts&&h!==n){if(n.parent!==this)return this.render(t,e,r);if(n.render(0=this.totalDuration()||!v&&_)&&(f!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||(!t&&g||!(v===m&&0=i&&(a instanceof $t?e&&n.push(a):(r&&n.push(a),t&&n.push.apply(n,a.getChildren(!0,e,r)))),a=a._next;return n},e.getById=function getById(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},e.remove=function remove(t){return r(t)?this.removeLabel(t):s(t)?this.killTweensOf(t):(ya(this,t),t===this._recent&&(this._recent=this._last),Aa(this))},e.totalTime=function totalTime(t,e){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=ja(Rt.time-(0r:!r||s.isActive())&&n.push(s):(i=s.getTweensOf(a,r)).length&&n.push.apply(n,i),s=s._next;return n},e.tweenTo=function tweenTo(t,e){e=e||{};var r,i=this,n=xt(i,t),a=e.startAt,s=e.onStart,o=e.onStartParams,u=e.immediateRender,h=$t.to(i,qa({ease:e.ease||"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale())||X,onStart:function onStart(){if(i.pause(),!r){var t=e.duration||Math.abs((n-(a&&"time"in a?a.time:i._time))/i.timeScale());h._dur!==t&&Ra(h,t,0,1).render(h._time,!0,!0),r=1}s&&s.apply(h,o||[])}},e));return u?h.render(0):h},e.tweenFromTo=function tweenFromTo(t,e,r){return this.tweenTo(e,qa({startAt:{time:xt(this,t)}},r))},e.recent=function recent(){return this._recent},e.nextLabel=function nextLabel(t){return void 0===t&&(t=this._time),rb(this,xt(this,t))},e.previousLabel=function previousLabel(t){return void 0===t&&(t=this._time),rb(this,xt(this,t),1)},e.currentLabel=function currentLabel(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+X)},e.shiftChildren=function shiftChildren(t,e,r){void 0===r&&(r=0);for(var i,n=this._first,a=this.labels;n;)n._start>=r&&(n._start+=t,n._end+=t),n=n._next;if(e)for(i in a)a[i]>=r&&(a[i]+=t);return Aa(this)},e.invalidate=function invalidate(t){var e=this._first;for(this._lock=0;e;)e.invalidate(t),e=e._next;return i.prototype.invalidate.call(this,t)},e.clear=function clear(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Aa(this)},e.totalDuration=function totalDuration(t){var e,r,i,n=0,a=this,s=a._last,o=U;if(arguments.length)return a.timeScale((a._repeat<0?a.duration():a.totalDuration())/(a.reversed()?-t:t));if(a._dirty){for(i=a.parent;s;)e=s._prev,s._dirty&&s.totalDuration(),o<(r=s._start)&&a._sort&&s._ts&&!a._lock?(a._lock=1,Ka(a,s,r-s._delay,1)._lock=0):o=r,r<0&&s._ts&&(n-=r,(!i&&!a._dp||i&&i.smoothChildTiming)&&(a._start+=r/a._ts,a._time-=r,a._tTime-=r),a.shiftChildren(-r,!1,-Infinity),o=0),s._end>n&&s._ts&&(n=s._end),s=e;Ra(a,a===I&&a._time>n?a._time:n,1,1),a._dirty=0}return a._tDur},Timeline.updateRoot=function updateRoot(t){if(I._ts&&(na(I,Ga(t,I)),f=Rt.frame),Rt.frame>=mt){mt+=q.autoSleep||120;var e=I._first;if((!e||!e._ts)&&q.autoSleep&&Rt._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Rt.sleep()}}},Timeline}(Ut);qa(Xt.prototype,{_lock:0,_hasPause:0,_forcing:0});function ac(t,e,i,n,a,o){var u,h,l,f;if(pt[t]&&!1!==(u=new pt[t]).init(a,u.rawVars?e[t]:function _processVars(t,e,i,n,a){if(s(t)&&(t=Kt(t,a,e,i,n)),!v(t)||t.style&&t.nodeType||Z(t)||$(t))return r(t)?Kt(t,a,e,i,n):t;var o,u={};for(o in t)u[o]=Kt(t[o],a,e,i,n);return u}(e[t],n,a,o,i),i,n,o)&&(i._pt=h=new _e(i._pt,a,t,0,1,u.render,u,0,u.priority),i!==d))for(l=i._ptLookup[i._targets.indexOf(a)],f=u._props.length;f--;)l[u._props[f]]=h;return u}function gc(t,r,e,i){var n,a,s=r.ease||i||"power1.inOut";if(Z(r))a=e[t]||(e[t]=[]),r.forEach(function(t,e){return a.push({t:e/(r.length-1)*100,v:t,e:s})});else for(n in r)a=e[n]||(e[n]=[]),"ease"===n||a.push({t:parseFloat(t),v:r[n],e:s})}var Nt,Gt,Wt=function _addPropTween(t,e,i,n,a,o,u,h,l,f){s(n)&&(n=n(a||0,t,o));var d,c=t[e],p="get"!==i?i:s(c)?l?t[e.indexOf("set")||!s(t["get"+e.substr(3)])?e:"get"+e.substr(3)](l):t[e]():c,_=s(c)?l?re:te:Zt;if(r(n)&&(~n.indexOf("random(")&&(n=ob(n)),"="===n.charAt(1)&&(!(d=ka(p,n)+(Ya(p)||0))&&0!==d||(n=d))),!f||p!==n||Gt)return isNaN(p*n)||""===n?(c||e in t||Q(e,n),function _addComplexStringPropTween(t,e,r,i,n,a,s){var o,u,h,l,f,d,c,p,_=new _e(this._pt,t,e,0,1,ue,null,n),m=0,g=0;for(_.b=r,_.e=i,r+="",(c=~(i+="").indexOf("random("))&&(i=ob(i)),a&&(a(p=[r,i],t,e),r=p[0],i=p[1]),u=r.match(it)||[];o=it.exec(i);)l=o[0],f=i.substring(m,o.index),h?h=(h+1)%5:"rgba("===f.substr(-5)&&(h=1),l!==u[g++]&&(d=parseFloat(u[g-1])||0,_._pt={_next:_._pt,p:f||1===g?f:",",s:d,c:"="===l.charAt(1)?ka(d,l)-d:parseFloat(l)-d,m:h&&h<4?Math.round:0},m=it.lastIndex);return _.c=m")}),s.duration();else{for(l in u={},x)"ease"===l||"easeEach"===l||gc(l,x[l],u,x.easeEach);for(l in u)for(A=u[l].sort(function(t,e){return t.t-e.t}),o=E=0;o=t._tDur||e<0)&&t.ratio===u&&(u&&za(t,1),r||L||(Ct(t,u?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},e.targets=function targets(){return this._targets},e.invalidate=function invalidate(t){return t&&this.vars.runBackwards||(this._startAt=0),this._pt=this._op=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(t),D.prototype.invalidate.call(this,t)},e.resetTo=function resetTo(t,e,r,i,n){c||Rt.wake(),this._ts||this.play();var a,s=Math.min(this._dur,(this._dp._time-this._start)*this._ts);return this._initted||Qt(this,s),a=this._ease(s/this._dur),function _updatePropTweens(t,e,r,i,n,a,s,o){var u,h,l,f,d=(t._pt&&t._ptCache||(t._ptCache={}))[e];if(!d)for(d=t._ptCache[e]=[],l=t._ptLookup,f=t._targets.length;f--;){if((u=l[f][e])&&u.d&&u.d._pt)for(u=u.d._pt;u&&u.p!==e&&u.fp!==e;)u=u._next;if(!u)return Gt=1,t.vars[e]="+=0",Qt(t,s),Gt=0,o?R(e+" not eligible for reset"):1;d.push(u)}for(f=d.length;f--;)(u=(h=d[f])._pt||h).s=!i&&0!==i||n?u.s+(i||0)+a*u.c:i,u.c=r-u.s,h.e&&(h.e=ia(r)+Ya(h.e)),h.b&&(h.b=u.s+Ya(h.b))}(this,t,e,r,i,a,s,n)?this.resetTo(t,e,r,i,1):(Ia(this,0),this.parent||xa(this._dp,this,"_first","_last",this._dp._sort?"_start":0),this.render(0))},e.kill=function kill(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?tb(this):this;if(this.timeline){var i=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Nt&&!0!==Nt.vars.overwrite)._first||tb(this),this.parent&&i!==this.timeline.totalDuration()&&Ra(this,this._dur*this.timeline._tDur/i,0,1),this}var n,a,s,o,u,h,l,f=this._targets,d=t?Mt(t):f,c=this._ptLookup,p=this._pt;if((!e||"all"===e)&&function _arraysMatch(t,e){for(var r=t.length,i=r===e.length;i&&r--&&t[r]===e[r];);return r<0}(f,d))return"all"===e&&(this._pt=0),tb(this);for(n=this._op=this._op||[],"all"!==e&&(r(e)&&(u={},ha(e,function(t){return u[t]=1}),e=u),e=function _addAliasesToVars(t,e){var r,i,n,a,s=t[0]?fa(t[0]).harness:0,o=s&&s.aliases;if(!o)return e;for(i in r=yt({},e),o)if(i in r)for(n=(a=o[i].split(",")).length;n--;)r[a[n]]=r[i];return r}(f,e)),l=f.length;l--;)if(~d.indexOf(f[l]))for(u in a=c[l],"all"===e?(n[l]=e,o=a,s={}):(s=n[l]=n[l]||{},o=e),o)(h=a&&a[u])&&("kill"in h.d&&!0!==h.d.kill(u)||ya(this,h,"_pt"),delete a[u]),"all"!==s&&(s[u]=1);return this._initted&&!this._pt&&p&&tb(this),this},Tween.to=function to(t,e,r){return new Tween(t,e,r)},Tween.from=function from(t,e){return Va(1,arguments)},Tween.delayedCall=function delayedCall(t,e,r,i){return new Tween(e,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:e,onReverseComplete:e,onCompleteParams:r,onReverseCompleteParams:r,callbackScope:i})},Tween.fromTo=function fromTo(t,e,r){return Va(2,arguments)},Tween.set=function set(t,e){return e.duration=0,e.repeatDelay||(e.repeat=0),new Tween(t,e)},Tween.killTweensOf=function killTweensOf(t,e,r){return I.killTweensOf(t,e,r)},Tween}(Ut);qa($t.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),ha("staggerTo,staggerFrom,staggerFromTo",function(r){$t[r]=function(){var t=new Xt,e=kt.call(arguments,0);return e.splice("staggerFromTo"===r?5:4,0,0),t[r].apply(t,e)}});function oc(t,e,r){return t.setAttribute(e,r)}function wc(t,e,r,i){i.mSet(t,e,i.m.call(i.tween,r,i.mt),i)}var Zt=function _setterPlain(t,e,r){return t[e]=r},te=function _setterFunc(t,e,r){return t[e](r)},re=function _setterFuncWithParam(t,e,r,i){return t[e](i.fp,r)},ne=function _getSetter(t,e){return s(t[e])?te:u(t[e])&&t.setAttribute?oc:Zt},ae=function _renderPlain(t,e){return e.set(e.t,e.p,Math.round(1e6*(e.s+e.c*t))/1e6,e)},se=function _renderBoolean(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},ue=function _renderComplexString(t,e){var r=e._pt,i="";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;r;)i=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+i,r=r._next;i+=e.c}e.set(e.t,e.p,i,e)},he=function _renderPropTweens(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},fe=function _addPluginModifier(t,e,r,i){for(var n,a=this._pt;a;)n=a._next,a.p===i&&a.modifier(t,e,r),a=n},ce=function _killPropTweensOf(t){for(var e,r,i=this._pt;i;)r=i._next,i.p===t&&!i.op||i.op===t?ya(this,i,"_pt"):i.dep||(e=1),i=r;return!e},pe=function _sortPropTweensByPriority(t){for(var e,r,i,n,a=t._pt;a;){for(e=a._next,r=i;r&&r.pr>a.pr;)r=r._next;(a._prev=r?r._prev:n)?a._prev._next=a:i=a,(a._next=r)?r._prev=a:n=a,a=e}t._pt=i},_e=(PropTween.prototype.modifier=function modifier(t,e,r){this.mSet=this.mSet||this.set,this.set=wc,this.m=t,this.mt=r,this.tween=e},PropTween);function PropTween(t,e,r,i,n,a,s,o,u){this.t=e,this.s=i,this.c=n,this.p=r,this.r=a||ae,this.d=s||this,this.set=o||Zt,this.pr=u||0,(this._next=t)&&(t._prev=this)}ha(vt+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",function(t){return ft[t]=1}),ot.TweenMax=ot.TweenLite=$t,ot.TimelineLite=ot.TimelineMax=Xt,I=new Xt({sortChildren:!1,defaults:V,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),q.stringFilter=Fb;function Ec(t){return(ye[t]||Te).map(function(t){return t()})}function Fc(){var t=Date.now(),o=[];2. +── */ +const DARK_STROKE = '#d4d4d4'; +const DARK_FILL = '#c8c8c8'; + +function luminance(r, g, b) { + return (0.299 * r + 0.587 * g + 0.114 * b) / 255; +} +function parseRgb(str) { + const m = str && str.match(/rgba?\((\d+)[, ]+(\d+)[, ]+(\d+)/); + return m ? [+m[1], +m[2], +m[3]] : null; +} +function adaptSvg(svgEl) { + const dark = document.documentElement.classList.contains('dark'); + svgEl.querySelectorAll('path, line, rect, circle, ellipse, polyline, polygon').forEach(el => { + const cs = window.getComputedStyle(el); + // stroke + const sc = parseRgb(cs.stroke); + if (sc && luminance(...sc) < 0.25) { + if (!el.dataset.origStrokeColor) el.dataset.origStrokeColor = cs.stroke; + el.style.stroke = dark ? DARK_STROKE : el.dataset.origStrokeColor; +} else if (el.dataset.origStrokeColor && !dark) { + el.style.stroke = el.dataset.origStrokeColor; +} + // fill (non-transparent only) + if (cs.fill !== 'none' && cs.fill !== 'rgba(0, 0, 0, 0)') { + const fc = parseRgb(cs.fill); + if (fc && luminance(...fc) < 0.25) { + if (!el.dataset.origFillColor) el.dataset.origFillColor = cs.fill; + el.style.fill = dark ? DARK_FILL : el.dataset.origFillColor; +} else if (el.dataset.origFillColor && !dark) { + el.style.fill = el.dataset.origFillColor; +} +} +}); +} + +// Registry of all loaded SVGs – re-adapt when dark mode toggles +const _allSvgEls = []; +new MutationObserver(() => _allSvgEls.forEach(svg => adaptSvg(svg))) +.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] }); + +function registerAndAdapt(svgEl) { + _allSvgEls.push(svgEl); + adaptSvg(svgEl); +} + +function prepareDraw(svg) { + const els = svg.querySelectorAll('path, line, rect, circle, polyline, polygon, ellipse'); + els.forEach(el => { + let len; try { len = el.getTotalLength(); } catch(e) { len = 1000; } + el.style.strokeDasharray = len; + el.style.strokeDashoffset = len; + const fill = getComputedStyle(el).fill; + if (fill && fill !== 'none' && fill !== 'rgba(0, 0, 0, 0)') { el.style.fillOpacity = 0; el.dataset.hasFill = '1'; } +}); + return els; +} + +function prepareDrawSubset(els) { + els.forEach(el => { + let len; try { len = el.getTotalLength(); } catch(e) { len = 1000; } + el.style.strokeDasharray = len; + el.style.strokeDashoffset = len; + const fill = getComputedStyle(el).fill; + if (fill && fill !== 'none' && fill !== 'rgba(0, 0, 0, 0)') { el.style.fillOpacity = 0; el.dataset.hasFill = '1'; } + }); +} + +function svgToScreen(svgEl, vbW, vbH, box) { + const r = svgEl.getBoundingClientRect(); + return { + left: r.left + box.x * (r.width / vbW), + top: r.top + box.y * (r.height / vbH), + width: box.w * (r.width / vbW), + height: box.h * (r.height / vbH) +}; +} + +/* ───────────────────────────────────────── +STATE +───────────────────────────────────────── */ +let heroSvg = null; +let heroCirclesGroup = null; +let fig2GreenGroup = null; +let fig2OrangeGroup = null; +let f2TextEls = []; + +let fig2Flyer = null; +let fig2FlyerSrc = null; + +let arrowClipRect = null, arrowClipH = 0; +let fig4DrawEls = [], fig4DrawDone = false; + +let _createArrowTrigger = null; +let _createFig5Trigger = null; + +const F4_VB = { w: 864.15, h: 479.55 }; +const F4_GREEN = { x: 1, y: 123, w: 54, h: 52 }; +const F4_ORANGE = { x: 1, y: 187, w: 54, h: 52 }; +const F4_RED = { x: 773, y: 122, w: 90, h: 104 }; +const F4_F2AREA = { x: 1, y: 100, w: 340, h: 160 }; + + +/* ═══════════════════════════════════════ +1) HERO – Figure1 draw +═══════════════════════════════════════ */ +gsap.set('#heroText', { opacity: 0, y: 40 }); + +fetch('/Figure1.svg').then(r => r.text()).then(svgText => { + const cnt = document.getElementById('heroFigure'); + cnt.innerHTML = svgText; + heroSvg = cnt.querySelector('svg'); + heroSvg.style.cssText = 'width:100%;height:auto;overflow:visible'; + registerAndAdapt(heroSvg); + + const labGroup = heroSvg.querySelector('[data-name="Ebene 2"]'); + heroCirclesGroup = heroSvg.querySelector('[data-name="Ebene 3"]'); + const labEls = labGroup ? labGroup.querySelectorAll('path, line, rect, circle') : []; + const circleEls = heroCirclesGroup ? heroCirclesGroup.querySelectorAll('path') : []; + + [...labEls, ...circleEls].forEach(el => { + let len; try { len = el.getTotalLength(); } catch(e) { len = 1000; } + el.style.strokeDasharray = len; el.style.strokeDashoffset = len; + const fill = getComputedStyle(el).fill; + if (fill && fill !== 'none' && fill !== 'rgba(0, 0, 0, 0)') { el.style.fillOpacity = 0; el.dataset.hasFill = '1'; } +}); + + circleEls.forEach(el => { + try { + const bb = el.getBBox(), cx = bb.x + bb.width/2, cy = bb.y + bb.height/2; + if (cx > 850 && cy < 200) { el.dataset.flyAway = '1'; el.dataset.flyColor = 'green'; } + else if (cx > 690 && cx < 850 && cy > 100 && cy < 250) { el.dataset.flyAway = '1'; el.dataset.flyColor = 'orange'; } +} catch(e) {} +}); + + const tl = gsap.timeline({ delay: 0.3 }); + tl.to('#heroText', { opacity: 1, y: 0, duration: 0.9, ease: 'power3.out' }, 0); + tl.to(labEls, { strokeDashoffset: 0, duration: 3, stagger: { amount: 2.5, from: 'start' }, ease: 'power1.inOut' }, 0.2); + tl.to(circleEls, { strokeDashoffset: 0, duration: 2, stagger: { amount: 1.0, from: 'start' }, ease: 'power1.inOut' }, 1.5); + const cf = Array.from(circleEls).filter(e => e.dataset.hasFill === '1'); + if (cf.length) tl.to(cf, { fillOpacity: 1, duration: 0.8, stagger: 0.1, ease: 'power1.inOut' }, '-=0.5'); + + const onEarlyScroll = () => { if (tl.progress() < 1) tl.progress(1, false); window.removeEventListener('scroll', onEarlyScroll); }; + window.addEventListener('scroll', onEarlyScroll, { passive: true }); + + tl.call(() => { + [...labEls, ...circleEls].forEach(el => { el.style.strokeDashoffset = '0'; }); + gsap.to('.hero-figure', { y: -80, scrollTrigger: { trigger: '.hero', start: 'top top', end: 'bottom top', scrub: true } }); + gsap.to('#heroText', { opacity: 0, y: -40, scrollTrigger: { trigger: '.hero', start: '30% top', end: '80% top', scrub: 1 } }); + initCircleFadeIn(); +}); +}); + + +/* ═══════════════════════════════════════ +2) FLYING CIRCLES: Figure1 → Figure2 +═══════════════════════════════════════ */ +function initCircleFadeIn() { + const poll = () => { + const f2svg = document.querySelector('#fig2Wrap svg'); + if (f2svg && heroSvg && heroCirclesGroup) { + fig2GreenGroup = f2svg.querySelector('[data-circle-group="green"]'); + fig2OrangeGroup = f2svg.querySelector('[data-circle-group="orange"]'); + buildFlyingCircles(f2svg); +} else requestAnimationFrame(poll); +}; + poll(); +} + +function buildFlyingCircles(f2svg) { + const ns = 'http://www.w3.org/2000/svg'; + + const overlay = document.createElementNS(ns, 'svg'); + overlay.style.cssText = 'position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:60;pointer-events:none;overflow:visible;display:none;'; + document.body.appendChild(overlay); + const wrapG = document.createElementNS(ns, 'g'); + const wrapO = document.createElementNS(ns, 'g'); + overlay.appendChild(wrapG); + overlay.appendChild(wrapO); + + const greenEls = heroSvg.querySelectorAll('[data-fly-color="green"]'); + const orangeEls = heroSvg.querySelectorAll('[data-fly-color="orange"]'); + + function populateWrap(wrapGroup, els) { + wrapGroup.innerHTML = ''; + els.forEach(el => { + let bb, sr; + try { bb = el.getBBox(); sr = el.getBoundingClientRect(); } catch(e) { return; } + if (!bb || !sr || bb.width === 0 || sr.width === 0) return; + const sx = sr.width / bb.width; + const sy = sr.height / bb.height; + const tx = sr.left - bb.x * sx; + const ty = sr.top - bb.y * sy; + const clone = el.cloneNode(true); + clone.style.fillOpacity = '1'; + clone.style.opacity = '1'; + clone.removeAttribute('data-fly-color'); + clone.removeAttribute('data-fly-away'); + const g = document.createElementNS(ns, 'g'); + g.setAttribute('transform', `matrix(${sx},0,0,${sy},${tx},${ty})`); + g.appendChild(clone); + wrapGroup.appendChild(g); +}); +} + + function screenRect(els) { + let l=Infinity, t=Infinity, r=-Infinity, b=-Infinity; + els.forEach(el => { + try { + const rect = el.getBoundingClientRect(); + l=Math.min(l,rect.left); t=Math.min(t,rect.top); + r=Math.max(r,rect.right); b=Math.max(b,rect.bottom); +} catch(e) {} +}); + return { left:l, top:t, width:r-l, height:b-t }; +} + + const F2 = { w:500.49, h:653.39 }; + const F2G = { x:1, y:222, w:96, h:93 }; + const F2O = { x:1, y:338, w:96, h:94 }; + const lerp = gsap.utils.interpolate; + let ep = 0; + + function applyTransform(wrap, src, tgt) { + if (!src || !isFinite(src.left)) return; + const sx = lerp(1, tgt.width / src.width, ep); + const sy = lerp(1, tgt.height / src.height, ep); + const tx = lerp(0, tgt.left - src.left * (tgt.width / src.width), ep); + const ty = lerp(0, tgt.top - src.top * (tgt.height / src.height), ep); + wrap.setAttribute('transform', `translate(${tx},${ty}) scale(${sx},${sy})`); +} + + ScrollTrigger.create({ + trigger: '#middleWrapper', start: 'top 100%', end: 'top 30%', scrub: 0.4, + onUpdate: (self) => { + const p = self.progress; + const flyEls = heroSvg ? heroSvg.querySelectorAll('[data-fly-away="1"]') : []; + if (p <= 0) { + overlay.style.display = 'none'; + flyEls.forEach(el => el.style.opacity = '1'); + if (fig2GreenGroup) fig2GreenGroup.style.opacity = 0; + if (fig2OrangeGroup) fig2OrangeGroup.style.opacity = 0; + return; +} + const srcG = screenRect(greenEls); + const srcO = screenRect(orangeEls); + populateWrap(wrapG, greenEls); + populateWrap(wrapO, orangeEls); + overlay.style.display = 'block'; + flyEls.forEach(el => el.style.opacity = '0'); + const tgtG = svgToScreen(f2svg, F2.w, F2.h, F2G); + const tgtO = svgToScreen(f2svg, F2.w, F2.h, F2O); + ep = gsap.parseEase('power2.inOut')(p); + applyTransform(wrapG, srcG, tgtG); + applyTransform(wrapO, srcO, tgtO); + const flyOp = p < 0.08 ? p/0.08 : p > 0.80 ? (1-p)/0.20 : 1; + overlay.style.opacity = flyOp; + const f2o = p > 0.88 ? Math.min(1,(p-0.88)/0.12) : 0; + if (fig2GreenGroup) fig2GreenGroup.style.opacity = f2o; + if (fig2OrangeGroup) fig2OrangeGroup.style.opacity = f2o; + if (heroCirclesGroup) heroCirclesGroup.style.opacity = 1 - p * 0.7; +}, + onLeaveBack: () => { + overlay.style.display = 'none'; + wrapG.innerHTML = ''; wrapO.innerHTML = ''; + if (heroCirclesGroup) heroCirclesGroup.style.opacity = 1; + heroSvg?.querySelectorAll('[data-fly-away="1"]').forEach(el => el.style.opacity = '1'); + if (fig2GreenGroup) fig2GreenGroup.style.opacity = 0; + if (fig2OrangeGroup) fig2OrangeGroup.style.opacity = 0; +}, + onLeave: () => { + overlay.style.display = 'none'; + wrapG.innerHTML = ''; wrapO.innerHTML = ''; + if (fig2GreenGroup) fig2GreenGroup.style.opacity = 1; + if (fig2OrangeGroup) fig2OrangeGroup.style.opacity = 1; +} +}); +} + + +/* ═══════════════════════════════════════ +3) FIGURE 2 – load, draw on scroll +═══════════════════════════════════════ */ +fetch('/Figure2.svg').then(r => r.text()).then(svgText => { + const wrap = document.getElementById('fig2Wrap'); + wrap.innerHTML = svgText.replace(/cls-/g, 'f2-'); + const svg = wrap.querySelector('svg'); + svg.style.width = '100%'; svg.style.height = 'auto'; + registerAndAdapt(svg); + + svg.querySelectorAll(':scope > g > g > g').forEach(g => { + g.querySelectorAll('path').forEach(p => { + const cls = p.getAttribute('class') || ''; + if (cls.includes('f2-4')||cls.includes('f2-5')) { g.style.opacity='0'; g.dataset.circleGroup='green'; } + if (cls.includes('f2-7')||cls.includes('f2-6')) { g.style.opacity='0'; g.dataset.circleGroup='orange'; } +}); +}); + + f2TextEls = Array.from(svg.querySelectorAll('text')); + + const els = prepareDraw(svg); + ScrollTrigger.create({ + trigger: '#rdocPanel', start: 'top 60%', once: true, + onEnter: () => { + const tl = gsap.timeline(); + tl.to(els, { strokeDashoffset: 0, duration: 1.2, stagger: { amount: 0.6 }, ease: 'power1.inOut' }, 0); + const fills = Array.from(els).filter(e => e.dataset.hasFill==='1'); + if (fills.length) tl.to(fills, { fillOpacity: 1, duration: 0.6, stagger: { amount: 0.2 }, ease: 'power1.inOut' }, '-=0.4'); +} +}); + _svgReady(); +}); + + +/* ═══════════════════════════════════════ +4) FIGURE 4 – load into fig4Wrap +═══════════════════════════════════════ */ + +function buildFig2Flyer() { + if (fig2Flyer) return; + const f2svg = document.querySelector('#fig2Wrap svg'); + if (!f2svg) return; + + const div = document.createElement('div'); + div.id = 'fig2Flyer'; + div.style.cssText = 'position:fixed;z-index:55;pointer-events:none;opacity:0;display:none;will-change:transform;overflow:visible;'; + + const ns = 'http://www.w3.org/2000/svg'; + const s = document.createElementNS(ns, 'svg'); + const vb = f2svg.viewBox.baseVal; + s.setAttribute('viewBox', `${vb.x} ${vb.y} ${vb.width} ${vb.height}`); + s.setAttribute('preserveAspectRatio', 'xMidYMid meet'); + s.style.cssText = 'width:100%;height:100%;display:block;overflow:visible;'; + + Array.from(f2svg.children).forEach(child => { + const clone = child.cloneNode(true); + clone.querySelectorAll('text, tspan').forEach(t => t.remove()); + clone.querySelectorAll('*').forEach(el => { + el.style.strokeDasharray = 'none'; + el.style.strokeDashoffset = '0'; + el.style.fillOpacity = '1'; + el.style.opacity = '1'; +}); + s.appendChild(clone); +}); + + div.appendChild(s); + document.body.appendChild(div); + fig2Flyer = div; +} + +fetch('/Figure4.svg').then(r => r.text()).then(svgText => { + const wrap = document.getElementById('fig4Wrap'); + wrap.innerHTML = svgText.replace(/cls-/g, 'f4-'); + const svg = wrap.querySelector('svg'); + svg.style.cssText = 'width:100%;height:auto;overflow:visible'; + registerAndAdapt(svg); + + const arrowEls = Array.from(svg.querySelectorAll('path')).filter(p => { + const cls=p.getAttribute('class')||'', d=p.getAttribute('d')||''; + return cls.includes('f4-13') && d.startsWith('m602'); +}); + if (arrowEls.length) { + let x0=Infinity,y0=Infinity,x1=-Infinity,y1=-Infinity; + arrowEls.forEach(el => { try { const b=el.getBBox(); x0=Math.min(x0,b.x); y0=Math.min(y0,b.y); x1=Math.max(x1,b.x+b.width); y1=Math.max(y1,b.y+b.height); } catch(e){} }); + const pad=4, cW=x1-x0+pad*2; + arrowClipH = y1-y0+pad*2; + const ns = 'http://www.w3.org/2000/svg'; + const defs = svg.querySelector('defs') || svg.insertBefore(document.createElementNS(ns,'defs'), svg.firstChild); + const clip = document.createElementNS(ns,'clipPath'); clip.setAttribute('id','f4ArrowClip'); + arrowClipRect = document.createElementNS(ns,'rect'); + arrowClipRect.setAttribute('x',x0-pad); arrowClipRect.setAttribute('y',y0-pad); + arrowClipRect.setAttribute('width',cW); arrowClipRect.setAttribute('height',0); + clip.appendChild(arrowClipRect); defs.appendChild(clip); + const ag = document.createElementNS(ns,'g'); ag.setAttribute('clip-path','url(#f4ArrowClip)'); + arrowEls[0].parentNode.insertBefore(ag, arrowEls[0]); + arrowEls.forEach(el => ag.appendChild(el)); +} + + const arrowSet = new Set(arrowEls); + fig4DrawEls = Array.from(svg.querySelectorAll('rect, circle, ellipse, path, line')) + .filter(el => !arrowSet.has(el)); + prepareDrawSubset(fig4DrawEls); + + const lerp = gsap.utils.interpolate; + + ScrollTrigger.create({ + trigger: '#multiPanel', + start: 'center 80%', + end: 'center 20%', + scrub: 0.6, + invalidateOnRefresh: true, + onUpdate: (self) => { + const p = self.progress; + const f2wrap = document.getElementById('fig2Wrap'); + const f4svg = svg; + + buildFig2Flyer(); + + if (!fig2FlyerSrc && fig2Flyer) { + const r = f2wrap.getBoundingClientRect(); + fig2FlyerSrc = { + left: r.left, top: r.top, + width: r.width, height: r.height, + aspect: r.height / r.width +}; +} + + f2TextEls.forEach(el => el.style.opacity = '0'); + f2wrap.style.opacity = 0; + + if (fig2Flyer && fig2FlyerSrc) { + const src = fig2FlyerSrc; + const tgtArea = svgToScreen(f4svg, F4_VB.w, F4_VB.h, F4_F2AREA); + const tgtW = tgtArea.width; + const tgtH = tgtW * src.aspect; + const tgtL = tgtArea.left; + const tgtT = tgtArea.top + (tgtArea.height - tgtH) / 2; + const ep = gsap.parseEase('power2.inOut')(p); + const flyOp = p > 0.92 ? Math.max(0,(1-p)/0.08) : 1; + + fig2Flyer.style.display = 'block'; + fig2Flyer.style.opacity = flyOp; + fig2Flyer.style.left = lerp(src.left, tgtL, ep) + 'px'; + fig2Flyer.style.top = lerp(src.top, tgtT, ep) + 'px'; + fig2Flyer.style.width = lerp(src.width, tgtW, ep) + 'px'; + fig2Flyer.style.height = lerp(src.height, tgtH, ep) + 'px'; +} + + wrap.style.opacity = p < 0.50 ? 0 : Math.min(1, (p - 0.50) / 0.40); + + if (p > 0.52 && !fig4DrawDone) { + fig4DrawDone = true; + const tl = gsap.timeline(); + tl.to(fig4DrawEls, { strokeDashoffset: 0, duration: 1.4, stagger: { amount: 0.8 }, ease: 'power1.inOut' }, 0); + const fills = fig4DrawEls.filter(e => e.dataset.hasFill==='1'); + if (fills.length) tl.to(fills, { fillOpacity: 1, duration: 0.7, stagger: { amount: 0.3 }, ease: 'power1.inOut' }, '-=0.5'); +} +}, + onLeaveBack: () => { + const f2wrap = document.getElementById('fig2Wrap'); + f2wrap.style.opacity = 1; + f2TextEls.forEach(el => el.style.opacity = '1'); + if (fig2Flyer) { fig2Flyer.style.display = 'none'; fig2Flyer.style.opacity = 0; } + fig2FlyerSrc = null; + wrap.style.opacity = 0; + fig4DrawDone = false; + fig4DrawEls.forEach(el => { + let len; try { len = el.getTotalLength(); } catch(e) { len = 1000; } + el.style.strokeDasharray = len; el.style.strokeDashoffset = len; + if (el.dataset.hasFill==='1') el.style.fillOpacity = 0; +}); +} +}); + + _createArrowTrigger = () => { + ScrollTrigger.create({ + trigger: '#adolPanel', + start: 'center 65%', + end: 'center 50%', + scrub: 0.6, + onUpdate: (self) => { + if (arrowClipRect) arrowClipRect.setAttribute('height', self.progress * arrowClipH); +}, + onLeaveBack: () => { + if (arrowClipRect) arrowClipRect.setAttribute('height', 0); +} +}); +}; + _svgReady(); +}); + + +/* ═══════════════════════════════════════ +5) SCROLL PROGRESS BAR +═══════════════════════════════════════ */ +window.addEventListener('scroll', () => { + const p = document.documentElement.scrollTop / (document.documentElement.scrollHeight - window.innerHeight) * 100; + document.getElementById('scrollProgress').style.width = p + '%'; +}, { passive: true }); + + +/* ═══════════════════════════════════════ +6) FIGURE 5 – Venn, circles fly from Figure4 +═══════════════════════════════════════ */ +fetch('/Figure5.svg').then(r => r.text()).then(svgText => { + const cnt = document.getElementById('vennFigure'); + cnt.innerHTML = svgText.replace(/cls-/g, 'f5-'); + const svg = cnt.querySelector('svg'); + svg.style.width = '100%'; svg.style.height = 'auto'; + registerAndAdapt(svg); + + const greyCircles = svg.querySelectorAll('.f5-1'); + const allGroups = svg.querySelectorAll('#Ebene_3 > g > g'); + const f5O = allGroups[0]||null, f5R = allGroups[1]||null, f5G = allGroups[2]||null; + + greyCircles.forEach(c => c.style.opacity = 0); + [f5O,f5R,f5G].filter(Boolean).forEach(g => g.style.opacity = 0); + + const F5 = { w:432.94, h:462.7 }; + const F5G = { x:206, y:3, w:225, h:222 }; + const F5O = { x:2, y:123, w:226, h:222 }; + const F5R = { x:206, y:237, w:225, h:224 }; + + function emptyFlyer(id) { + const d=document.createElement('div'); d.id=id; + d.style.cssText='position:fixed;z-index:60;pointer-events:none;opacity:0;display:none;will-change:transform;'; + document.body.appendChild(d); return d; +} + + function buildF4Flyer(div, f4svg, srcBox) { + if (div.querySelector('svg')) return; + const ns='http://www.w3.org/2000/svg', s=document.createElementNS(ns,'svg'); + s.setAttribute('viewBox',`${srcBox.x} ${srcBox.y} ${srcBox.w} ${srcBox.h}`); + s.style.cssText='width:100%;height:100%;overflow:visible'; + f4svg.querySelectorAll('path, circle, ellipse, rect').forEach(el => { + try { + const bb=el.getBBox(), cx=bb.x+bb.width/2, cy=bb.y+bb.height/2; + if (cx>=srcBox.x-2&&cx<=srcBox.x+srcBox.w+2&&cy>=srcBox.y-2&&cy<=srcBox.y+srcBox.h+2) { + const cs=parseFloat(window.getComputedStyle(el).getPropertyValue('stroke-width'))||2.5; + const c=el.cloneNode(true); c.dataset.origStroke=cs; + c.style.setProperty('stroke-width',cs.toString()); + c.style.setProperty('stroke-dasharray','none'); + c.style.setProperty('stroke-dashoffset','0'); + c.style.setProperty('fill-opacity','1'); + c.style.setProperty('opacity','1'); + s.appendChild(c); +} +} catch(e) {} +}); + div.appendChild(s); +} + + const fG=emptyFlyer('fly5G'), fO=emptyFlyer('fly5O'), fR=emptyFlyer('fly5R'); + let f4svg=null, f4SP=null, f5SI=false; + const lerp=gsap.utils.interpolate; + + _createFig5Trigger = () => { + ScrollTrigger.create({ + trigger: '#researchAreas', start: 'top 80%', end: 'bottom 80%', scrub: 0.4, + onUpdate: (self) => { + const p=self.progress; + if (!f4svg) f4svg=document.querySelector('#fig4Wrap svg'); + if (p<=0||!f4svg) { [fG,fO,fR].forEach(f=>f.style.display='none'); f4SP=null; return; } + buildF4Flyer(fG,f4svg,F4_GREEN); buildF4Flyer(fO,f4svg,F4_ORANGE); buildF4Flyer(fR,f4svg,F4_RED); + if (!f4SP) { + f4SP={ G:svgToScreen(f4svg,F4_VB.w,F4_VB.h,F4_GREEN), + O:svgToScreen(f4svg,F4_VB.w,F4_VB.h,F4_ORANGE), + R:svgToScreen(f4svg,F4_VB.w,F4_VB.h,F4_RED) }; +} + [fG,fO,fR].forEach(f=>f.style.display='block'); + const ep=gsap.parseEase('power2.inOut')(p); + const f4Scale=f4svg.getBoundingClientRect().width/F4_VB.w; + + function pos(div,srcBox,f5Box,start) { + const end=svgToScreen(svg,F5.w,F5.h,f5Box); + const cW=lerp(start.width,end.width,ep); + div.style.left=lerp(start.left,end.left,ep)+'px'; div.style.top=lerp(start.top,end.top,ep)+'px'; + div.style.width=cW+'px'; div.style.height=lerp(start.height,end.height,ep)+'px'; + const cs=cW/srcBox.w; + if (cs>0) { const sf=f4Scale/cs; div.querySelectorAll('path,circle,ellipse,rect').forEach(el=>{ const os=parseFloat(el.dataset.origStroke)||2.5; el.style.setProperty('stroke-width',(os*sf).toString()); }); } +} + pos(fG,F4_GREEN, F5G,f4SP.G); + pos(fO,F4_ORANGE,F5O,f4SP.O); + pos(fR,F4_RED, F5R,f4SP.R); + + const fOp=p<0.08?p/0.08:p>0.80?(1-p)/0.20:1; + fG.style.opacity=fO.style.opacity=fR.style.opacity=fOp; + + if (!f5SI) { + f5SI=true; + const f5Sc=svg.getBoundingClientRect().width/F5.w; + const se=fG.querySelector('path,circle'); const os=se?(parseFloat(se.dataset.origStroke)||2.5):2.5; + const ts=(os*f4Scale)/f5Sc*2.0; + [f5G,f5O,f5R].filter(Boolean).forEach(g=>g.querySelectorAll('path,circle,ellipse').forEach(el=>el.style.setProperty('stroke-width',ts.toString()))); +} + + const f5o=p>0.75?Math.min(1,(p-0.75)/0.15):0; + [f5G,f5O,f5R].filter(Boolean).forEach(g=>g.style.opacity=f5o); + greyCircles.forEach(c=>c.style.opacity=f5o); + + ['vennLabelA','vennLabelB','vennLabelC','vennLabelZ'].forEach((id,i)=>{ + const delay=0.50+i*0.05, lp=Math.max(0,Math.min((p-delay)/0.15,1)); + const el=document.getElementById(id); el.style.opacity=lp; el.style.transform=`translateY(${(1-lp)*20}px)`; +}); + const cs=document.getElementById('vennConnectors'); + if (cs) cs.style.opacity=Math.max(0,Math.min((p-0.50)/0.15,1)); + const fp=Math.max(0,Math.min((p-0.70)/0.15,1)); + const vf=document.getElementById('vennFooter'); vf.style.opacity=fp; vf.style.transform=`translateY(${(1-fp)*15}px)`; +}, + onLeaveBack: () => { + f4SP=null; f5SI=false; + [fG,fO,fR].forEach(f=>{f.style.display='none';f.style.opacity=0;}); + [f5G,f5O,f5R].filter(Boolean).forEach(g=>g.style.opacity=0); + greyCircles.forEach(c=>c.style.opacity=0); + ['vennLabelA','vennLabelB','vennLabelC','vennLabelZ'].forEach(id=>{ const el=document.getElementById(id); el.style.opacity=0; el.style.transform='translateY(20px)'; }); + const cs=document.getElementById('vennConnectors'); if(cs)cs.style.opacity=0; + document.getElementById('vennFooter').style.opacity=0; +}, + onLeave: () => { + [fG,fO,fR].forEach(f=>{f.style.display='none';f.style.opacity=0;}); + [f5G,f5O,f5R].filter(Boolean).forEach(g=>g.style.opacity=1); + greyCircles.forEach(c=>c.style.opacity=1); +} +}); +}; + _svgReady(); +}); + + +/* ═══════════════════════════════════════ +7) PANEL SNAP / DWELL +═══════════════════════════════════════ */ +let _svgCount = 0; +function _svgReady() { + if (++_svgCount < 3) return; + const DWELL = Math.round(window.innerHeight * 0.20); + gsap.utils.toArray('.text-panel').forEach(panel => { + ScrollTrigger.create({ + trigger: panel, + start: 'center center', + end: `+=${DWELL}`, + pin: true, + pinSpacing: true, + anticipatePin: 1, +}); +}); + ScrollTrigger.refresh(); + _createArrowTrigger?.(); + _createFig5Trigger?.(); +} \ No newline at end of file diff --git a/to b/to new file mode 100644 index 0000000..e69de29