1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. FuchsFan

Beiträge von FuchsFan

  • CSS für About Dialog /Nightly passt nicht mehr

    • FuchsFan
    • 25. Januar 2026 um 11:07

    Bei den letzten Updates in Nightly ist das im Dialog zu sehen, was hat das zu bedeuten?

  • Pfad für Profile selbst festlegen

    • FuchsFan
    • 20. Januar 2026 um 16:36
    Zitat von Road-Runner

    Doch.

    Ich glaube aber nicht, dass er es so denkt. Das hat er wohl gemeint.

  • BackupProfile.uc.js - div. Fragen dazu

    • FuchsFan
    • 14. Januar 2026 um 21:43
    Zitat von FuchsFan
    Zitat von Mira_Belle

    Diese Meldung erscheint bei mir überhaupt nicht!

    Hast du eventuell die Benachrichtigungen von Windows ausgeschaltet?

    :)

  • BackupProfile.uc.js - div. Fragen dazu

    • FuchsFan
    • 14. Januar 2026 um 17:57
    Zitat von 2002Andreas

    Allerdings nutze ich so ein Skript auch nicht.

    Ich auch nicht ;), versuche es aber trotzdem immer noch aktuell zu halten, eventuell für "schlechte" Zeiten.:)

  • BackupProfile.uc.js - div. Fragen dazu

    • FuchsFan
    • 14. Januar 2026 um 17:50
    Zitat von Boersenfeger

    Ich erhalte aber auch mit der Änderung von Sören Hentzschel keine Nachricht!?

    Dann vergleiche mal mit meinem Script.

    JavaScript
    // ==UserScript==
    // @name           BackupProfile.uc.js
    // @namespace      BackupProfile.github.com
    // @description    Schaltfläche zum Sichern des Firefoxprofils
    // @charset        UTF-8
    // @author         ywzhaiqi、defpt
    // @version        v2023.07.02 FF 115.*
    // @note           Vorlage Script von ywzhaiqi (+ Mischung aus diversen Varianten aus dem Fuchsforum 1.11.21)
    // @note           Sicherungsdatei enthaelt auch Profilname
    // @note 		   FileUtils.getFile ersetzt 2.7.23
    // @reviewURL      http://bbs.kafan.cn/thread-1758785-1-1.html
    
    (function () {
    	
    	    if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    	
    	CustomizableUI.createWidget({
    		id : "Backup-button",
    		defaultArea : CustomizableUI.AREA_NAVBAR,
    		label : "Profilsicherung",
    		tooltiptext : "Sichern der aktuellen Konfiguration",
    		onClick: function(){
    			// Speicherort - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!!
    			var path = "G:\\Firefox Sicherung\\Firefox1p\\";
    			// var path = "";
    			// Ausschlussliste
    			var excludes = 'bookmarkbackups *cache* crashes fftmp *healthreport* minidumps safebrowsing *webapps* saved-telemetry-pings *thumbnails* *session* *Telemetry* *hotfix* *.sqlite-shm *.sqlite-wal *.bak parent.lock blocklist.xml content-prefs.sqlite directoryLinks.json mimeTypes.rdf compatibility.ini parent.lock formhistory.sqlite';
    
    			if (!path) {
    				var nsIFilePicker = Ci.nsIFilePicker;
    				var FP = Cc['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    				FP.init(window, 'Sicherungspfad wählen', nsIFilePicker.modeGetFolder);
    
    				if (FP.show() == nsIFilePicker.returnOK) {
    					path = FP.file.path;
    				} else {
    					return false;
    				}
    			}
    
    			excludes = excludes.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\s+/g, '|');
    			excludes = new RegExp(excludes, 'i');
    
    			var zw = Cc['@mozilla.org/zipwriter;1'].createInstance(Ci.nsIZipWriter);
    			var pr = {PR_RDONLY: 0x01, PR_WRONLY: 0x02, PR_RDWR: 0x04, PR_CREATE_FILE: 0x08, PR_APPEND: 0x10, PR_TRUNCATE: 0x20, PR_SYNC: 0x40, PR_EXCL: 0x80};
    			var fu = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils;
    			var dir = new FileUtils.File(PathUtils.join(PathUtils.profileDir,[]));
    
    			let d = new Date();
    			d = d.getDate() + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear().toString().padStart(2, '0')  + '  '  + d.getHours().toString().padStart(2, '0') + '\uA789' + d.getMinutes().toString().padStart(2, '0') + '\uA789' + d.getSeconds().toString().padStart(2, '0');
    
    			// Die folgende Zeile formt den Archivnamen
                var archiveName = 'Profil 1p' + ' ' + d + '.zip';  /* 'd' ersetzt 'localnow' */
    
    			var xpi = fu.File(path + '\\' + archiveName);
    
    			zw.open(xpi, pr.PR_RDWR | pr.PR_CREATE_FILE | pr.PR_TRUNCATE);
    			var dirArr = [dir];
    			for (var i=0; i<dirArr.length; i++) {
    				var dirEntries = dirArr[i].directoryEntries;
    				while (dirEntries.hasMoreElements()) {
    					var entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
    					if (entry.path == xpi.path) {
    						continue;
    					}
    
    					if (entry.isDirectory()) {
    					   dirArr.push(entry);
    					}
    
    					var relPath = entry.path.replace(dirArr[0].path, '');
    					if (relPath.match(excludes)) {
    						continue;
    					}
    
    					var saveInZipAs = relPath.substr(1);
    					saveInZipAs = saveInZipAs.replace(/\\/g,'/');
    					// Konfigurationsdateien können gesperrt werden
    					try {
    						zw.addEntryFile(saveInZipAs, Ci.nsIZipWriter.COMPRESSION_FASTEST, entry, false);
    					} catch (e) {}
    				}
    			}
    			zw.close();
    			alert('Die aktuelle Konfiguration wurde als:\n'+ archiveName +'\ngesichert in:\n' + path);
    
    			function alert(aString, aTitle) {
                    const AlertNotification = Components.Constructor(
                        '@mozilla.org/alert-notification;1',
                        'nsIAlertNotification',
                        'initWithObject'
                    );
    
                    Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService).showAlert(
                        new AlertNotification({ title: aTitle, text: aString })
                    );
                    
                }
    
    			function bupgetCurrentProfileName(){
    				function readFile(aFile){
    					var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);    stream.init(aFile, 0x01, 0, 0);
    					var cvstream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
    					cvstream.init(stream, "UTF-8", 1024, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
    					var content = "", data = {};
    					while (cvstream.readString(4096, data)) {
    						content += data.value;
    					}
    					cvstream.close();
    					return content.replace(/\r\n?/g, "\n");
    				}
    				var PrefD = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("PrefD", Components.interfaces.nsIFile);
    				var ini = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("AppRegD", Components.interfaces.nsIFile);
    
    				ini.append("profiles.ini");
    				var ini = readFile(ini);
    				var profiles = ini.match(/Name=.+/g);
    				var profilesD = ini.match(/Path=.+/g);
    				for ( var i = 0; i < profiles.length;i++) {
    				if ((profilesD[i]+"$").indexOf(PrefD.leafName+"$") >= 0) {
    					profiles[i].match(/Name=(.+)$/);
    					return RegExp.$1;
    					}
    				}
    				return null;
    			}
    		},
    	});
    
    	var cssStr = '@-moz-document url("chrome://browser/content/browser.xhtml"){'
    		 + '#Backup-button .toolbarbutton-icon {'
    		 + 'list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1%2B%2FAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABxklEQVQ4ja2UMUgbURjHfxeSFBzuBEuCkkAgIA5JDdzWohVnQe3UpRDE2UXpKKXdWro4ixlcdNJAydxiyHZkCIKIOEnLpZQSRFFz%2Bjqk73nvuDtb2j883nv%2F73u%2F%2B%2B69ewf%2FWUZgbgEFYDgiPw18B86An8DtQw%2BYdF1XRLVGoyGEEKJara4Bj0MKIhGYDxuGQVSTqtVqH0ql0uzvNzLigCQSicjmeZ7K63Q6u5VKZRoYigXGVWhZlpbbbrfrwKjfS4ZVGKVCoUCz2aTX65FOp6WdA04igf69CsqyLMrlctAWsRXGAf9EavXyFELEZT4A2TwYsLQKF%2BYXAJhb3VPep4%2BLzK3uqd7vS9Xr%2B2qsAW9u4eyoxcZSFoCVLZfTwxaA6v2xjaUsuYmnWrU60IOr%2FmD8etvl%2Fausikl%2FZcsFULEbD02hwPUdl7cvs1qiBAb9eOCdwdjEM2AABdh88wJA%2BbK%2FX6MDtVPmHyRPOfjRPfc87%2FPfgJLJ5AzwRc0BbNseB8a63e6TuKsXpnw%2BP5nJZAzgq%2BM4x3IPzwFM07woFovv%2Bv3%2BUDTiXqlU6tI0zQs%2FI%2FSe2bYt%2FyCPgJFA%2BAdwDeA4zrfg2l%2BwUqCoC1F3YQAAAABJRU5ErkJggg%3D%3D)'
    		 + '}}';
    	var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    	var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
    	sss.loadAndRegisterSheet(ios.newURI("data:text/css;base64," + btoa(cssStr), null, null), sss.USER_SHEET);
    })();
    Alles anzeigen
  • BackupProfile.uc.js - div. Fragen dazu

    • FuchsFan
    • 14. Januar 2026 um 17:44
    Zitat von Mira_Belle

    Diese Meldung erscheint bei mir überhaupt nicht!

    Hast du eventuell die Benachrichtigungen von Windows ausgeschaltet?

  • BackupProfile.uc.js - div. Fragen dazu

    • FuchsFan
    • 14. Januar 2026 um 17:43
    Zitat von Boersenfeger

    Wie genau müsste denn der Pfad in der Zeile 83 aussehen?

    Genau so wie du ihn angegeben hast, darf dort auch nicht geändert werden. Deshalb legst du doch den Pfad in Zeile 22 (bei dir) fest.

  • BackupProfile.uc.js - div. Fragen dazu

    • FuchsFan
    • 14. Januar 2026 um 16:35
    Zitat von Mira_Belle

    Auch mir fehlt irgendwie eine Meldung, dass die Sicherung erfolgreich beendet ist.

    Suchst du nun ganz was spezielles, oder ist bei dir überhaupt keine Benachrichtigung zu sehen? Hier schon.:)

  • JavaScriptLoader, läuft bei mir nicht!

    • FuchsFan
    • 11. Januar 2026 um 13:59

    Da kann ich dir auch noch etwas als Vorlage anbieten. Das ist z.B. der Code für das Ein- und Ausblenden der Menübar.

    CSS
    /*=== "Menüleiste" (im Kontext der Toolbar) ===*/
    
    /* aktiviert */
    #toggle_toolbar-menubar :is(menuitem[type="radio"][checked="true"] >.menu-iconic-left) {
    	background-repeat: no-repeat !important;
        margin-left: -30px ;
        padding-left: 20px ;
        height: 15px ;
    }
    
    /* deaktiviert */
    #toggle_toolbar-menubar :is(menuitem[type="radio"][checked="false"] >.menu-iconic-left) {
        background-repeat: no-repeat !important;
        margin-left: -30px ;
        padding-left: 27px ;
        height: 15px ;
    }
    
    /* aktiviert das Icon */
    #toggle_toolbar-menubar[checked="true"]{
    	background-image: url("file:///C:/FoxIcons/0002.png") ;
        background-size: 16px 16px ;
    }
    /* aktiviert bei Hover */
    #toggle_toolbar-menubar[checked="true"]:hover{
    	background-image: url("file:///C:/FoxIcons/0003.png") ;
        background-size: 16px 16px ;
    }
    	
    /* deaktiviert das Icon*/
    #toggle_toolbar-menubar{
    	background-image: url("file:///C:/FoxIcons/0003.png") ;
        background-size: 16px 16px !important;
    }
    /* deaktiviert bei Hover */
    #toggle_toolbar-menubar:hover{
    	background-image: url("file:///C:/FoxIcons/0002.png") ;
        background-size: 16px 16px !important;
    }
    	
    /** "Menüleiste" (Kontext) ** ENDE **/
    Alles anzeigen

    Menüleiste eingeblendet:

    ...dann bei hover:

    dann wenn ausgeblendet:

    dann hier wieder bei hover:

  • UserChrome Manager Created Entirely by AI

    • FuchsFan
    • 9. Januar 2026 um 14:14
    Zitat von lindongbin

    Die Bearbeitungsfunktion ist hauptsächlich dafür gedacht, Code bequem aus anderen Quellen zu kopieren und einzufügen – sie ist nicht als vollwertiger Editor konzipiert.

    Dann erfüllt es ja seinen Zweck, das hatte ich dann nicht richtig eingeordnet. Danke!

  • UserChrome Manager Created Entirely by AI

    • FuchsFan
    • 9. Januar 2026 um 11:49

    Ich habe das jetzt mal für einen Test installiert, funktioniert, ist aber mMn sehr gewöhnungsbedürftig. Ganz besonders wenn der Editor genutzt wird, denn hier ist man doch an notepad++ gewöhnt. Wenn das noch umgesetzt werden könnte, dann sieht die Sache schon anders aus. Ist nur mein erster Eindruck, gibt bestimmt andere Meinungen dazu.

                       

  • JavaScriptLoader, läuft bei mir nicht!

    • FuchsFan
    • 8. Januar 2026 um 18:22
    Zitat von Mira_Belle

    Nein, das ist es nicht. Schade

    Ja! Und wenn du mal das ganze Script probierst?

    JavaScript
    // Button zum Aufruf von Firefox-Dialog
    
    (function() {
    
        if (location != 'chrome://browser/content/browser.xhtml') return;
    
        try {
            CustomizableUI.createWidget({
                id: 'dialog',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                    var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                        id: 'dialog',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Firefox-Dialog',
                        tooltiptext: 'Firefox-Dialog aufrufen',
                        style: 'list-style-image: url("file:///C:/FoxIcons/Finale.png")',
                    };
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);
                    return toolbaritem;
                }
            });
            CustomizableUI.registerToolbarNode(tb);
           } catch(e) { };
    
        document.getElementById('dialog').addEventListener('click', event => {
        if (event.button === 0) {
             event.target.ownerGlobal.openAboutDialog();
            }
        });
    })();
    Alles anzeigen
  • JavaScriptLoader, läuft bei mir nicht!

    • FuchsFan
    • 8. Januar 2026 um 17:18
    Zitat von Mira_Belle

    Sieht da irgendwer irgendetwas?

    Ich sehe nichts, aber in meinem Script sieht der Aufruf des Dialoges so aus.

    Code
    if (event.button === 0) {
             event.target.ownerGlobal.openAboutDialog(); 

    Eventuell würde das ja funktionieren.

  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 4. Januar 2026 um 19:59

    Nur zur Info, den Block musste ich nachträglich doch wieder einfügen, weil ein Script darauf angewiesen ist.

    CSS
    #navigator-toolbox {
    	--ug-scroller_bgcolor: gainsboro;
        --ug-scroller_border: 1px solid grey;
        --ug-scroller_border_radius: 5px; 	
        --ug-scroller_height: 22px; 
        --ug-scroller_margin_top: 0px;   	
        --ug-scroller_hoverbgcolor: lightyellow;
        --ug-scroller_border_hover: 1px solid purple;
    }
  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 4. Januar 2026 um 16:10
    Zitat von 2002Andreas

    Teste bitte:

    Schau mal den Beitrag darüber.

    Dieser Code funktioniert auch prima, dann habe ich ja freie Auswahl jetzt.;) Danke!

  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 4. Januar 2026 um 15:48
    Zitat von grisu2099

    Zum Beispiel so (ungetestet):

    Hatte ich schon gemacht, ist nicht.:/

    Edit:

    Aber damit klappt es jetzt.

    CSS
    #scrollbutton-down > image, #scrollbutton-up > image {
    	background-color: transparent !important;
    }
  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 4. Januar 2026 um 15:29
    Zitat von Horstmann

    Du könntest auch noch versuchen, statt das Shadow-Script zu benutzen die Selektoren #tabbrowser-arrowscrollbox, #pinned-tabs-container mit in das normale CSS zu packen:

    @Horstmann

    Damit #tabbrowser-arrowscrollbox, #pinned-tabs-container { funktioniert es (ohne Shadow-Script), danke dafür.

    Nun "musst" du mir nur noch sagen, wo und wie ich das in meinem Code unterbringen kann, damit bei bedienen der Navbar-Button der originale Hintergrund ausgeblendet wird.

    --arrowscrollbox-scrollicon-active-background-color: transparent !important;  

  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 4. Januar 2026 um 13:31

    Mitleser , 2002Andreas , @Horstmann

    Dankeschön für eure Hilfe, hat mir für diese Baustelle gezeigt, da muss man schon den richtigen Überblick haben. Kann ich nicht mithalten.:rolleyes:

    Andreas, das musste ich von deinem gestrigen Code in der userChromeShadow.css bestehen lassen.

    CSS
    #tabbrowser-arrowscrollbox, #pinned-tabs-container {
      &::part(scrollbutton-up), &::part(scrollbutton-down) {
    	--arrowscrollbox-scrollicon-active-background-color: transparent !important;  
        border-radius: 0px !important; 
    	margin-top: 5px !important;
      }
    }
    
    #tabbrowser-arrowscrollbox, #pinned-tabs-container {
      &::part(scrollbutton-up):hover, &::part(scrollbutton-down):hover {
    	--arrowscrollbox-scrollicon-hover-background-color: transparent !important;  
        background-color: yellow !important;
        border: 1px solid red !important;
     }
    }
    Alles anzeigen

    Den heutigen Code hatte ich schon angepasst, funktionierte auch, musste dafür aber das Shadow-Script an die erste Startposition setzen.

    Und dann kam Horstmann mit seinem Code, und der war jetzt prima einsetzbar. Und so sieht das dann in der userChrome.css aus.

    CSS
    /* diese Schreibweise erlaubt die Anpassung der Scroll-Button in Lesezeichen-Ordnern */
    /* in der userChromeShadow.css ist noch ein Eintrag, gültig für Scroll-Button im All-Tabs-Button */
    
    #navigator-toolbox {
        --ug-scroller_bgcolor: lightgrey;
        --ug-scroller_border: 1px solid grey; 
        --ug-scroller_height: 28px;  	
        --ug-scroller_hoverbgcolor: lightyellow;
        --ug-scroller_border_hover: 1px solid purple;
    }
    
    /*menupopup,*/
    toolbarbutton.bookmark-item {
    	--ug-scroller_height: 22px; 
        --ug-scroller_bgcolor: lightblue;
        --ug-scroller_border: 1px solid grey; 
        --ug-scroller_border_radius: 5px;  	
        --ug-scroller_hoverbgcolor: yellow;
        --ug-scroller_border_hover: 1px solid red;         
    }
    
    :is(#scrollbutton-down, #scrollbutton-up) {
        background-color: var(--ug-scroller_bgcolor, initial) !important;    
        border: var(--ug-scroller_border, initial) !important; 
    	height: var(--ug-scroller_height, initial) !important;
        border-radius: var(--ug-scroller_border_radius, initial) !important; 	
    	
    }
    
    :is(#scrollbutton-down, #scrollbutton-up):is(:hover, :active) {
        background-color: var(--ug-scroller_hoverbgcolor, initial) !important;    
        border: var(--ug-scroller_border_hover, initial) !important; 
    }
    
    /*=========== eigene Icons eingebaut ============*/ 
    	 
    /* Scroll-Button für hoch/runter in Lesezeichen-Ordnern */
    toolbarbutton#scrollbutton-up {
        list-style-image: url("file:///C:/FoxIcons/hoch.png") !important;
    }
    
    toolbarbutton#scrollbutton-down {
        list-style-image: url("file:///C:/FoxIcons/runter.png") !important;
    }
    
    
    /* Scroll-Button für rechts/links in der TabsToolbar */
    #tabbrowser-arrowscrollbox {
        --custom-right-image: url("file:///C:/FoxIcons/rechts.png") !important;
        --custom-left-image: url("file:///C:/FoxIcons/links.png") !important;
        --custom-arrow-transform: scale(1) !important;
    }
    
    #scrollbutton-down > .toolbarbutton-icon {
        list-style-image: var(--custom-right-image) !important;
        transform: var(--custom-arrow-transform) !important;
    }
    
    #scrollbutton-up > .toolbarbutton-icon {
        list-style-image: var(--custom-left-image) !important;
        transform: var(--custom-arrow-transform) !important;
    }
    Alles anzeigen
  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 4. Januar 2026 um 09:22
    Zitat von 2002Andreas

    Der funktioniert auch, allerdings muss er dann in die userChrome.css.

    Ja, das war ja mein Gedanke, aber wenn ich den Code, oder auch den mit ::part einsetze, so wird der von dir RE: Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen wieder überschrieben. Nun habe ich alles Mögliche probiert, um auch die Scrollbutton in den Lesezeichenordnern einzeln anzusprechen, es will nicht funktionieren. Hast du noch eine Idee?

  • Scrollbutton in Lesezeichen-Ordnern und Lesezeichen-Symbolleiste anpassen

    • FuchsFan
    • 3. Januar 2026 um 19:24

    Mitleser

    Deinen Code habe ich teilweise schon hier getestet, auch damit funktioniert es, muss mich aber noch weiter damit befassen. Vorerst sage ich Dankeschön.:thumbup::)

Unterstütze uns!

Jährlich (2026)

34 %

34% (263,24 von 775 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon