/*
 * Die Seite soll beim Nachladen nicht seitlich zucken.
 *
 * Wird eine kuerzere Liste geladen, verschwindet die Bildlaufleiste, der
 * Inhalt wird um ihre Breite breiter und springt - beim naechsten laengeren
 * Inhalt zurueck. Das reserviert den Platz dauerhaft. Betrifft alle Breiten,
 * darum ausserhalb der Media Queries.
 */
html {
	scrollbar-gutter: stable;
}

/*
 * In der Anwendung selbst nicht.
 *
 * Dort ist die Seite genau so hoch wie das Fenster - gescrollt wird in den
 * .scrollBox darin, das Dokument gar nicht. Zu reservieren gibt es also
 * nichts, aber reserviert wurde trotzdem: gemessen am 20.08.2026 war das
 * <html> in allen Modulen 1425 statt 1440 Pixel breit.
 *
 * Sichtbar wird das ueberall dort, wo das System die Leisten dauerhaft
 * anzeigt (macOS: "Scrollbalken einblenden - immer"). Dann steht rechts ein
 * 15 Pixel breiter Streifen, den keine Vorlage faerbt: das Hintergrundbild
 * des <body> reicht nur bis zum Rand des <html>, in den reservierten
 * Streifen laeuft allein die Hintergrundfarbe - bei "Wood" also weiss statt
 * Holz. Neben dem fuenf Pixel breiten Rand, den "space" laesst, sieht das
 * aus wie eine leere Bildlaufspur.
 *
 * #boxAll gibt es nur im angemeldeten Bereich (index_computer.php:138). Die
 * oeffentlichen Seiten und die Website scrollen wirklich und behalten die
 * Reservierung.
 */
html:has(#boxAll) {
	scrollbar-gutter: auto;
}


/*
 * Responsive - loest die drei Geraetezweige ab.
 *
 * Bisher gab es drei getrennte Ansichten (computer, tablet, phone) mit eigenen
 * Views, eigener Bookmarks-Logik und eigenem CSS. Jede Aenderung musste damit
 * zweimal gemacht werden, und die Zweige sind auseinandergelaufen - in der
 * Phone-Fassung fehlte sogar eine Rechtepruefung, die der Desktop hat.
 *
 * Jetzt laeuft ueberall die Desktop-Ansicht. Diese Datei kommt NACH screen.css
 * und aendert nur, was auf schmalen Schirmen anders sein muss.
 *
 * WICHTIG: Am Desktop bleibt alles, wie es war. Jede Regel hier steckt in einer
 * Media Query, die erst unterhalb von 960 Pixeln greift - eine Breite, die ein
 * Desktop-Fenster praktisch nie unterschreitet.
 *
 * Der Gedanke dahinter (so von Peter vorgegeben): wird es eng, zaehlt nur die
 * Liste. Die Ordner links und die Werkzeuge rechts sind das Unwichtigste, sie
 * verschwinden. Zurueck holt man sie sich ueber die beiden vorhandenen
 * Strich-Knoepfe - links `#fhideBox`, rechts `#bhide`. Sie legen sich dann
 * ueber den Inhalt, statt ihn zusammenzuquetschen, und es ist immer nur eine
 * Spalte zugleich offen.
 */


/* Symbole, die es nur in einer der beiden Ansichten gibt */
.narrow-only {
	display: none;
}


/*
 * Der Knopf, der schmal die Bereichswahl aufklappt. Am Desktop gibt es ihn
 * nicht - dort stehen alle Bereiche nebeneinander im Kopf.
 */
#navBtn {
	display: none;
}


/* ------------------------------------------------------------------
 * Desktop - bis hierher war min-width fest in computer.css verdrahtet.
 * Jetzt gilt sie nur noch, solange auch wirklich Platz da ist.
 * ------------------------------------------------------------------ */

@media (min-width: 960px) {

	#boxAll    { min-width: 960px; }
	#boxHeader { min-width: 960px; }

	/*
	 * Die Kopfleiste war in Pixeln ausgemessen: 250 fuers Logo, 550 fuer die
	 * Bereiche, davon 500 fuer die Kacheln (screen.css). Die 500 sind nur eine
	 * Rechnung - sieben Kacheln mit 60px Mindestbreite und je 10px Abstand
	 * ergeben 490. Sie ging auf, solange die Beschriftung in die 60px passte.
	 *
	 * Eine breitere Schrift laesst die Kachel mitwachsen, die Summe
	 * ueberschreitet die 500, und der letzte Punkt faellt in die zweite Zeile -
	 * obwohl rechts das halbe Fenster frei ist. Die Leiste nimmt sich jetzt den
	 * Platz, den sie braucht; nach rechts begrenzt sie ohnehin nur #userNav,
	 * und das haengt absolut am Rand.
	 */
	#boxMainHeader { width: auto; }

	#nav {
		width: auto;
		display: flex;
	}

	#nav > li { float: none; }
}


/*
 * Die Hoehe der Kopfleiste steht an einer Stelle.
 *
 * Sie wird an mehreren Orten gebraucht - die Spalten fahren darunter ein, die
 * Klapplisten haengen daran. Als Variable steht die Zahl einmal da; wer den
 * Kopf aendert, aendert alles Uebrige mit.
 */
:root {
	--bm-kopf: 60px;
}


/* ------------------------------------------------------------------
 * Schmal - unter 960px. Die Liste bekommt die ganze Breite.
 * ------------------------------------------------------------------ */

@media (max-width: 959px) {

	/*
	 * Auf schmalen Schirmen ist das Grundmass groesser: 13 Pixel liest man am
	 * Schreibtisch bequem, auf dem Handy mit Armlaenge Abstand nicht mehr. Die
	 * gewaehlte Stufe wirkt weiterhin - sie rechnet auf diesem Grundmass.
	 */
	:root {
		--bm-basis: 15px;

		/*
		 * Die Hoehe des Kopfes: 13 Rand + 44 Knopf + 13 Rand.
		 *
		 * Sie steht hier, weil drei Dinge sie brauchen und sonst auseinander
		 * laufen: der Kopf selbst, die beiden Spalten, die darunter fest
		 * stehen, und die Flaeche ueber dem weggeschobenen Inhalt. Vorher
		 * stand in den Spalten die Desktop-Hoehe 80 - deshalb begannen sie
		 * acht Pixel tiefer als die Liste daneben.
		 */
		--bm-kopf: 60px;
	}


	#boxAll,
	#boxHeader {
		min-width: 0;
	}

	/*
	 * Der Kopf liegt ueber allem, was schmal aufgeht.
	 *
	 * Die Stapelfolge, an einer Stelle:
	 *
	 *   1003  der Vorhang
	 *   1004  die ein- und ausfahrenden Spalten
	 *   1010  die Kopfleiste - samt allem, was aus ihr herunterhaengt
	 *   1400  das Werkzeugblatt
	 *
	 * Der Kopf stand auf 1003 und damit unter der Spalte. Solange die Spalte
	 * ihn ohnehin verdeckte, fiel es nicht auf; seit sie erst darunter
	 * beginnt, schnitt sie die Klapplisten ab, die aus dem Kopf
	 * herunterhaengen. Deren eigenes z-index von 1200 half nichts - es gilt
	 * nur innerhalb des Stapels, den #boxHeader aufmacht.
	 *
	 * Diese Regel MUSS fuer sich stehen. Zuerst war sie an die Zeile darueber
	 * angehaengt, und damit bekam #boxAll das z-index mit - der ganze Inhalt
	 * legte sich ueber die Klappliste. Peter sah es sofort.
	 */
	#boxHeader {
		z-index: 1010;
	}

	/*
	 * Die Raender, die am Desktop den beiden Spalten Platz machen, fallen weg.
	 * Mit !important, weil das JavaScript diese Werte beim Ein- und Ausblenden
	 * direkt ins Element schreibt - ohne den Vorrang blieben Reste stehen.
	 */
	#boxMain {
		margin-left: 0 !important;
	}

	#boxMiddle {
		margin-right: 0 !important;
	}


	/* ---------------------------------------------------------------
	 * Der Kopf wird zum Pulldown.
	 *
	 * Am Desktop stehen die sieben Bereiche als Icon-Reihe nebeneinander.
	 * Schmal ist dafuer kein Platz, also zeigt der Kopf nur noch den Bereich,
	 * in dem man gerade ist. Ein Tipp darauf klappt die uebrigen darunter auf.
	 *
	 * Bewusst kein <select>: das sieht auf jedem Geraet anders aus und laesst
	 * sich nicht gestalten. Hier ist es dieselbe Liste wie am Desktop, nur
	 * anders angeordnet - es gibt also nichts doppelt zu pflegen, und ein
	 * neuer Bereich taucht von selbst mit auf.
	 *
	 * Das Logo weicht: es kostet die Haelfte der Breite und sagt einem, der
	 * die Anwendung offen hat, nichts Neues.
	 * --------------------------------------------------------------- */

	.narrow-only {
		display: inline-block;
	}

	.wide-only {
		display: none;
	}

	#boxLeftHeader {
		display: none;
	}

	/*
	 * Der Kopfbereich war auf 550px festgenagelt und floatete - bei einem
	 * schmalen Fenster ragte er einfach hinaus und schob sich unter den
	 * Benutzernamen. Hier folgt er der Fensterbreite.
	 */
	/*
	 * Feste Hoehe, weil beide Klapplisten aus dem Fluss genommen sind: die
	 * Bereichswahl haengt unter dem Knopf, das Benutzermenue unter seinem.
	 * Ohne die Hoehe bliebe nur der Knopf uebrig und der Kopf schrumpfte beim
	 * Aufklappen - genau der Sprung, der vorher zu sehen war.
	 */
	#boxHeader,
	#boxMainHeader {
		height: var(--bm-kopf);
	}

	#boxMainHeader {
		position: relative;   /* Bezugspunkt fuer Knopf und Klappliste */
		width: auto;
		float: none;
		margin-left: 0 !important;
		padding: 8px 150px 8px 6px;   /* rechts Platz fuer Bild und Name */
	}

	/*
	 * Der Knopf zeigt, wo man ist, und klappt die Bereiche darunter auf.
	 *
	 * Masse, Rahmen und Farbe sind dieselben wie beim Benutzerknopf rechts -
	 * zwei verschieden aussehende Knoepfe im selben Kopf wirken wie ein
	 * Versehen. Beide sitzen auf derselben Linie, siehe #userNav weiter unten.
	 *
	 * Nicht knallweiss: die Flaeche laesst das Template durchscheinen und
	 * bleibt trotzdem ruhig genug zum Lesen. Und sie bringt ihre eigene
	 * Schriftfarbe mit - sonst erbt sie die des Templates, und ein Template
	 * mit weisser Schrift (das Holz-Template zum Beispiel) liesse den Namen
	 * unsichtbar werden.
	 */
	/*
	 * Flach, ohne Kasten.
	 *
	 * Bis zum 26.08.2026 waren es zwei umrandete weisse Kaesten auf dem
	 * farbigen Kopf - sie wirkten aufgeklebt, und zusammen mit der grauen
	 * Werkzeugleiste darunter kamen 122 Pixel zusammen, bevor ein einziges
	 * Lesezeichen zu sehen war. Peter: "der Header muss auch noch
	 * verschoenert werden, so kann das nicht bleiben."
	 *
	 * In den Vorbildern (Proton Mail, X, Phantom) steht im Kopf nichts als
	 * Text und Symbole. Die Schriftfarbe kommt jetzt aus der Vorlage
	 * (DrawTemplate faerbt #boxHeader a), damit sie auf hellem wie auf
	 * dunklem Grund sitzt.
	 */
	#navBtn {
		display: inline-flex;
		align-items: center;
		gap: 8px;
		height: 44px;
		max-width: calc(100vw - 160px);   /* rechts stehen Bild und Name */
		padding: 0 6px;
		font-size: 17px;
		font-weight: 500;
		background: none;
		border: 0;
		border-radius: 8px;
		cursor: pointer;
		white-space: nowrap;
		overflow: hidden;

		/*
		 * Die Farbe kommt vom Kopf, nicht aus dieser Datei.
		 *
		 * DrawTemplate faerbt "#boxHeader a" mit einem Wert, der zum
		 * jeweiligen Grund passt - hell auf dunklen Vorlagen, dunkel auf
		 * hellen. Ein fester Blauton stand auf der Wolkenvorlage kaum
		 * lesbar da.
		 */
		color: inherit;
	}

	#navBtn i,
	#navBtn svg,
	#navBtn .arrow {
		color: inherit;
		fill: currentColor;
	}

	/* Beim Antippen kurz aufleuchten - sonst fehlt die Rueckmeldung, die
	   sonst der Kasten gab. */
	#navBtn:active,
	#userNav > ul > li > div.userName:active {
		background: rgba(127, 127, 127, .22);
	}

	/* Ein langer Bereichsname darf den Knopf nicht ueber den Benutzer schieben */
	#navBtn > span {
		overflow: hidden;
		text-overflow: ellipsis;
	}

	#navBtn > i {
		flex: 0 0 auto;
		font-size: 15px;
	}

	#navBtn .arrow {
		margin-left: 2px;
		transition: transform .15s ease;
	}

	body.menu-open #navBtn .arrow {
		transform: rotate(180deg);
	}

	/*
	 * Die Liste ist nur noch der Aufklapper. Sie haengt unter dem Knopf und
	 * liegt ueber dem Inhalt, statt im Kopf Platz zu brauchen - genau wie das
	 * Benutzermenue rechts. Der Knopf bleibt dabei stehen; vorher wurde der
	 * aktive Eintrag selbst zum Kasten und wuchs von 160 auf 250 Pixel.
	 */
	#nav {
		display: none;
		position: absolute;
		top: 56px;              /* 8 Rand + 44 Knopf + 4 Luft, wie rechts */
		left: 6px;
		width: 250px;
		max-width: 78vw;
		min-width: 0;
		float: none;
		background: #fcfcfc;
		border-radius: 8px;
		box-shadow: 0 12px 28px rgba(0, 0, 0, .22);
		overflow: hidden;
		z-index: 1200;
	}

	body.menu-open #nav {
		display: block;
	}

	#nav > li {
		display: block;
		float: none;
		min-width: 0;
		margin: 0;
		background: none;
		border: none;
	}

	/*
	 * Aus der Kachel wird eine Zeile: Icon, Name, Pfeil nebeneinander. Am
	 * Desktop steht der Name unter dem Icon - dafuer ist hier weder Platz noch
	 * Anlass.
	 */
	/*
	 * 13px sind fuer eine Kachelbeschriftung unter einem Icon gedacht. Als
	 * einzige Zeile im Kopf, und erst recht auf einem Handy, ist das zu klein
	 * zum Lesen und zum Treffen.
	 */
	#nav > li > a {
		display: flex;
		align-items: center;
		gap: 12px;
		height: 50px;       /* wie die Zeilen im Benutzermenue rechts */
		padding: 0 12px;
		font-size: 16px;
		text-align: left;
		white-space: nowrap;
	}

	#nav > li > a:hover {
		background: #f0f5fa;
	}

	/*
	 * Das ist der Grund, warum der Name vorhin am rechten Rand klebte: das
	 * Icon hat `margin: 0 auto` fuer die Kachel-Ansicht. In einer Flex-Zeile
	 * frisst ein auto-Rand den ganzen freien Platz und drueckt alles Weitere
	 * ans Ende.
	 */
	/*
	 * Ein Mass fuer alle Icons - zu, offen, aktiv. Unterschiedliche Groessen
	 * in derselben Liste lassen sie wirken, als waeren sie versehentlich
	 * verrutscht.
	 */
	#nav > li > a > i {
		flex: 0 0 auto;
		margin: 0;
		width: 28px;
		height: 28px;
		font-size: 15px;
		border-radius: 14px;

		/* Wie am Desktop: echt zentriert statt ueber die Grundlinie - sonst
		   sitzt das Symbol im Kreis zu hoch, und der Versatz aendert sich mit
		   jeder Groesse. */
		display: flex;
		align-items: center;
		justify-content: center;
	}

	/*
	 * Hier stand ein festes Blau mit !important.
	 *
	 * Das war richtig, solange der Knopf auf einer eigenen weissen Flaeche
	 * sass: dort haette ein Template mit weisser Schrift den Namen
	 * unsichtbar gemacht. Seit der Knopf flach im Kopf steht (26.08.2026),
	 * ist es umgekehrt - auf der dunklen Wolkenvorlage stand das Blau kaum
	 * lesbar da, waehrend der Kopf daneben sein passendes Hell mitbrachte.
	 *
	 * Jetzt erbt der Knopf die Farbe des Kopfes, und die setzt DrawTemplate
	 * je Vorlage passend zum Grund.
	 */

	#boxMainHeader #nav > li > a,
	#boxMainHeader #nav > li > a:hover,
	#boxMainHeader #nav > li > a:focus {
		color: #3f3f3f !important;
	}

	/*
	 * Die Zeichnungen in der Klappliste behalten ihre eigene Farbe.
	 *
	 * DrawTemplate faerbt schmal ALLE Zeichnungen im Kopf mit der Schriftfarbe
	 * des Kopfes ein ("#boxHeader svg, #boxMainHeader svg { fill: ... }") -
	 * das ist fuer die Leiste selbst richtig, wo weiss auf Blau steht. Die
	 * Klappliste haengt aber im selben Kopf und liegt auf WEISSEM Grund: dort
	 * wurde daraus ein weisses Symbol auf hellgrauem Kreis. Gemessen: fill
	 * rgb(255,255,255) auf rgb(225,225,225).
	 *
	 * Peter am 27.08.2026: "weisse Icons auf hellgrauem Hintergrund sind sehr
	 * schwer zu sehen - das Icon ist blau auf grauem Hintergrund, so machen
	 * wir es mobil auch."
	 *
	 * currentColor loest beide Faelle mit einer Zeile: die Farbe kommt vom
	 * umgebenden Kreis, den DrawTemplate ohnehin schon richtig setzt - blau
	 * fuer die ruhenden, weiss fuer den aktiven.
	 */
	#boxMainHeader #nav > li > a svg,
	#boxHeader #nav > li > a svg {
		fill: currentColor;
	}

	/* Der Klick soll keinen Fokusrahmen hinterlassen - der sah aus wie ein
	   versehentlich markiertes Feld. */
	#nav > li > a:focus {
		outline: none;
	}


	/*
	 * Der Bereich, in dem man ist, ist in der Liste hervorgehoben - ein
	 * blauer Streifen am Rand, kein Rahmen. Er steht an seinem Platz in der
	 * Reihe; oben steht der Knopf, und der sagt es ohnehin schon.
	 */
	/*
	 * Der aktive Eintrag: fett, mehr nicht.
	 *
	 * Hier stand zusaetzlich ein blauer Streifen am linken Rand
	 * (box-shadow inset). Er stammt aus der Zeit, als der Kreis daneben grau
	 * war und nichts sonst den Eintrag kennzeichnete. Seit der Kreis wieder
	 * die Farben der Vorlage traegt - blau mit weissem Zeichen - sagen Kreis
	 * und Fettschrift dasselbe dreimal. Peter am 27.08.2026: "kannst du bitte
	 * links den blauen Strich weggeben, man sieht das ja eher an der fetten
	 * Schrift und an dem blauen."
	 */
	#nav > li.navactive > a {
		font-weight: 600;
		color: #2c5f96 !important;
	}

	/*
	 * Der aktive Kreis traegt die Farben der Vorlage - wie am Schreibtisch.
	 *
	 * Hier stand ein festes Grau (#6c757d) mit !important. Der Gedanke
	 * dahinter war, dass eine helle Vorlage den umgedrehten Kreis auf weissem
	 * Grund verschwinden laesst. Der Preis war hoeher: der aktive Bereich sah
	 * anders aus als ueberall sonst, und ein graues Symbol neben sechs blauen
	 * liest sich als "abgeschaltet", nicht als "hier bist du". Peter am
	 * 27.08.2026: "wenn es ausgewaehlt ist, ist der Kreis blau und das Icon
	 * weiss - so muessen wir es mobil auch machen, das entspricht dann ja
	 * genau dem normalen Template."
	 *
	 * Also gilt wieder, was DrawTemplate setzt: Grund und Zeichnung tauschen
	 * die Farbe. Fett und der Streifen am linken Rand bleiben zusaetzlich.
	 */


	/* ---------------------------------------------------------------
	 * Das Benutzermenue rechts - dieselbe Bauart wie die Bereichsauswahl
	 * links. Zwei Auswahlfelder im selben Kopf muessen gleich aussehen,
	 * sonst wirkt eines davon wie ein Fremdkoerper.
	 *
	 * Am Desktop geht es beim Darueberfahren auf. Das gibt es auf einem
	 * Handy nicht, hier oeffnet es der Tipp darauf (Klasse `user-open`).
	 * --------------------------------------------------------------- */

	/*
	 * 13 wie der obere Rand von #boxMainHeader - damit steht dieser Knopf auf
	 * derselben Linie wie der Bereichsknopf links. Vorher waren es 18, und er
	 * sass vier Pixel tiefer als der linke.
	 */
	/*
	 * Der Benutzerknopf steht auf derselben Hoehe wie der Bereichsknopf links.
	 *
	 * Er stand auf 13 statt 8 - fuenf Pixel tiefer als sein Gegenstueck. Beide
	 * sind 44 Pixel hoch, die Kopfleiste ist 60: acht oben, acht unten, dann
	 * stehen sie mittig und auf einer Linie. Und weil die Klapplisten unter
	 * ihren Knoepfen haengen, erbten die den Versatz gleich mit. Peter am
	 * 27.08.2026: "warum sitzt das Pulldown links weiter oben als rechts? Das
	 * muss schon gleich hoch sein."
	 */
	#userNav {
		top: 8px;
		right: 10px;
	}

	/*
	 * Rechts das Bild und der Name, wie am Schreibtisch.
	 *
	 * Kurz stand dort nur das runde Bild - Peter am 26.08.2026: "du
	 * koenntest den Usernamen noch hinschreiben, oder? Wie beim Desktop."
	 *
	 * Er darf nur nicht umbrechen. Genau das tat er vorher: der Name stand
	 * als blosser Text zwischen den Tags, ohne Breite und ohne Regel, und
	 * fiel in zwei Zeilen. Jetzt hat er eine Grenze und endet mit Punkten.
	 */
	#userNav > ul > li > div.userName {
		display: flex;
		align-items: center;
		gap: 6px;
		height: 44px;
		margin: 0;
		padding: 0 4px;
		font-size: 15px;
		font-weight: 500;
		background: none;
		border: 0;
		border-radius: 8px;
	}

	#userNav .userName > .username {
		max-width: 96px;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	#userNav .userName .avatar {
		height: 32px;
		width: 32px;
		border-radius: 16px;
		margin: 0;          /* der auto-Rand wuerde in der Flex-Zeile schieben */
		display: block;
	}

	/* Nicht beim Darueberfahren aufgehen - das loest auf Touch versehentlich aus */
	#userNav ul li:hover ul {
		display: none !important;
	}

	body.user-open #userNav ul li ul {
		display: block !important;
		position: absolute;
		right: 0;
		/* Derselbe Abstand zum Knopf wie links: #nav steht auf top 56, also
		   8 Rand + 44 Knopf + 4 Luft. Hier sind es 4 unter dem 44er Knopf. */
		margin-top: 4px;
		padding-bottom: 4px;
		background: #fcfcfc;
		border-radius: 8px;
		box-shadow: 0 12px 28px rgba(0, 0, 0, .22);
		overflow: hidden;
		z-index: 1200;
	}

	body.user-open #userNav ul li ul li {
		width: 230px;
		background: none;
		border: none;
	}

	/* Im Markup steht erst der Text, dann das Icon - umgekehrt zur
	   Bereichsauswahl. Umgedreht stehen beide Menues gleich da. */
	body.user-open #userNav ul li ul li a {
		display: flex;
		flex-direction: row-reverse;
		justify-content: flex-end;
		align-items: center;
		gap: 12px;
		height: 50px;
		padding: 0 14px;
		font-size: 16px;
		color: #3f3f3f !important;
	}

	body.user-open #userNav ul li ul li a i {
		float: none;
		width: 32px;
		text-align: center;
		font-size: 16px;
		color: #3D79C1;
	}

	body.user-open #userNav ul li:hover ul {
		display: block !important;
	}


	/* --- Die beiden Spalten liegen ueber dem Inhalt, nicht daneben --- */

	/*
	 * Die Spalten liegen BEWUSST unter dem Kopf (z-index kleiner als dessen
	 * 1003): so schiebt sich auch ihr Schatten nicht darueber. Der Kopf bleibt
	 * damit immer voll sichtbar und bedienbar.
	 */
	#boxLeft,
	#boxRight {
		position: fixed;
		/*
		 * Unter dem Kopf, nicht darueber.
		 *
		 * Bis zum 27.08.2026 fuhr die Spalte ueber die ganze Hoehe und deckte
		 * die Kopfleiste mit zu. Damit verschwand waehrend des Blaetterns
		 * genau die Zeile, die sagt, in welchem Bereich man ist und wie man
		 * das Konto erreicht - und wer die Spalte schliessen wollte, musste
		 * erst das Kreuz darin suchen.
		 *
		 * Peter am 27.08.2026: "koennte der linke und der rechte Sidebar so
		 * reinfahren, dass sie nicht ueber den Header fahren, sondern dass die
		 * Hoehe des Headers der Top-Bereich von jeder Sidebar ist - dass der
		 * Header sichtbar bleibt."
		 *
		 * Die 60 Pixel sind die Hoehe der Kopfleiste (#boxMainHeader). Sie
		 * stehen als Variable am :root, damit beide Stellen dieselbe Zahl
		 * benutzen - wer den Kopf aendert, aendert die Spalten mit.
		 */
		top: var(--bm-kopf, 60px);
		bottom: 0;

		/*
		 * Die Spalte liegt UNTER dem Kopf, auch in der Stapelfolge.
		 *
		 * Der Kopf steht auf 1003 und die Spalte auf 1004 - damit lag die
		 * Spalte darueber. Solange sie den Kopf ohnehin verdeckte, fiel das
		 * nicht auf. Seit sie erst darunter beginnt, schneidet sie stattdessen
		 * die KLAPPLISTEN ab, die aus dem Kopf herunterhaengen: #nav steht zwar
		 * auf 1200, aber innerhalb von #boxHeader - und ein z-index gilt nur
		 * innerhalb seines Stapels. Peter am 27.08.2026: "die zwei Pulldowns
		 * vom Header sind hinter der Sidebar, die sollten ganz oben sein, wenn
		 * der Header das Wichtigste ist."
		 *
		 * Also den Kopf ueber die Spalte heben - die Reihenfolge steht damit
		 * an einer Stelle: Vorhang 1003, Spalte 1004, Kopf 1005, Blatt 1400.
		 */
		z-index: 1004;
		width: 86vw !important;   /* das JS schreibt beim Ziehen eine feste
		                             Breite ins Element - ohne Vorrang bliebe
		                             die Spalte so schmal wie am Desktop.
		                             86 statt 90: ein Streifen Inhalt bleibt
		                             stehen, man sieht, wohin man zurueckkommt */
		max-width: 420px;
		margin: 0 !important;
		z-index: 1004;
		overflow-y: auto;

		/*
		 * Waagrecht wird hier nicht gescrollt.
		 *
		 * Ohne das laesst sich der ganze Inhalt der Spalte im Kasten hin und
		 * her schieben - die Ordnernamen sind breiter als die Spalte, also
		 * bietet der Browser das an. Peter am 26.08.2026: "das darf nicht
		 * sein". Auf und ab bleibt.
		 *
		 * touch-action sagt dem Browser dasselbe noch einmal fuer den Finger:
		 * er darf senkrecht blaettern und sonst nichts. Unsere eigene
		 * Wischgeste stoert das nicht - die haengt an touchmove und nicht am
		 * Bildlauf.
		 */
		overflow-x: hidden;
		touch-action: pan-y;
		overscroll-behavior: contain;   /* das Wischen bleibt in der Spalte */

		/*
		 * Kein Rand rundherum.
		 *
		 * Am Schreibtisch stehen die Spalten mit fuenf Pixeln Abstand neben
		 * dem Inhalt, und dazwischen sieht man die Vorlage - so ist es
		 * gedacht. Ueber den Inhalt geschoben ist derselbe Rand ein Fehler:
		 * durch ihn scheint das Holz an drei Seiten durch, und die Spalte
		 * sieht aus, als saesse sie schief. Peter am 26.08.2026: "wenn diese
		 * Dinger reinfahren, sollten sie kein Padding haben."
		 *
		 * Der Rand fuer die Notch bleibt: in einer WebView haelt keine
		 * Browserleiste den Platz frei, ohne ihn liegt die erste Zeile unter
		 * der Uhr.
		 */
		padding-left: 0 !important;
		padding-right: 0 !important;
		padding-top: env(safe-area-inset-top, 0px) !important;
		padding-bottom: env(safe-area-inset-bottom, 0px) !important;

		box-shadow: 0 0 24px rgba(0, 0, 0, .35);

		/*
		 * Die Spalte ist eine Welt fuer sich: was sich in ihr aendert, muss
		 * nichts ausserhalb neu berechnen. Das spart beim Ziehen die halbe
		 * Arbeit - der Browser weiss, dass er die Liste dahinter in Ruhe
		 * lassen kann.
		 */
		contain: layout paint;

		/*
		 * Ein eigener, undurchsichtiger Grund.
		 *
		 * Die Farbe der Spalte kommt aus der Vorlage und ist dort oft
		 * halbdurchsichtig (die Wolkenvorlage: rgba(50,50,50,.6)) - am
		 * Schreibtisch scheint dadurch das Hintergrundbild durch, und das
		 * ist gewollt. Schwebt die Spalte aber ueber dem Inhalt, sieht man
		 * die Lesezeichenliste hindurch: Peter am 26.08.2026, "das darf
		 * nicht transparent sein".
		 *
		 * Deshalb liegt hier der Seitenhintergrund darunter - dasselbe Bild,
		 * dieselbe Farbe wie hinter dem Inhalt. Die halbdurchsichtige
		 * Spaltenfarbe liegt darueber und wirkt wie am Schreibtisch.
		 * DrawTemplate schreibt beides; ohne Vorlage bleibt es bei diesem
		 * Grau.
		 */
		background-color: #eceff1;
	}

	#boxLeft {
		left: 0;
		transform: translateX(-105%);
	}

	#boxRight {
		left: auto !important;
		right: 0 !important;
		transform: translateX(105%);
	}

	body.col-left-open #boxLeft,
	body.col-right-open #boxRight {
		transform: none;
	}

	/*
	 * Derselbe Zustand, nur frueher: das JavaScript im <head> setzt diese
	 * Klasse ans <html>, bevor der Koerper geparst ist - zu dem Zeitpunkt gibt
	 * es <body> noch nicht. Beim Uebernehmen tauscht es sie gegen
	 * body.col-left-open; gerechnet kommt dasselbe heraus, es ruckt nichts.
	 */
	html.bm-left-open #boxLeft {
		transform: none;
	}

	html.bm-left-open #boxMain {
		transform: translateX(min(90vw, 480px));
	}

	/*
	 * Die Spalte legt sich nicht ueber den Inhalt, sie schiebt ihn zur Seite -
	 * wie eine Schublade. Das war Peters Vorschlag, und es loest gleich zwei
	 * Dinge: man sieht nichts mehr durchscheinen, und es braucht keinen
	 * Schlagschatten, um die Ebenen zu trennen.
	 *
	 * Verschoben wird ueber margin, nicht ueber transform: ein transform macht
	 * fest stehende Kinder (#boxRight liegt in #boxMain) an sich selbst
	 * ausgerichtet, und die Spalte laege dann falsch.
	 */
	/*
	 * Geschoben, nicht gequetscht: ein Rand wuerde den Inhalt schmaler machen
	 * und den Text neu umbrechen. Er soll unveraendert zur Seite wandern und
	 * am Rand hinausragen.
	 *
	 * Der Kopf bleibt stehen - er ist die Steuerung, und der Knopf zum Zumachen
	 * sitzt darin.
	 *
	 * Links wandert #boxMain, rechts nur #boxMiddle: die rechte Spalte liegt
	 * INNERHALB von #boxMain, und ein verschobener Vorfahr wuerde sie
	 * mitnehmen - sie stuende dann nicht mehr am Fensterrand.
	 */
	/*
	 * Bewegt wird erst nach dem Laden, deshalb haengt der Uebergang an einer
	 * eigenen Klasse. Schmal steht die Ordnerspalte beim Aufbau schon offen -
	 * faehrt sie dabei herein, sieht es aus, als lade die Seite zweimal. Die
	 * Klasse setzt das JavaScript im zweiten Bild nach dem Aufbau.
	 */
	body.animating #boxLeft,
	body.animating #boxRight,
	body.animating #boxMain,
	body.animating #boxMiddle {
		transition: transform .2s ease;
	}

	/*
	 * Geschoben wird um die Breite der Spalte, nicht um die volle Breite.
	 *
	 * Kurz war es die volle Breite - der Streifen Inhalt, der auf einem
	 * breiteren Schirm neben der Spalte stehen blieb, sah aus wie ein Fehler.
	 * Peter hat es am Geraet gesehen und anders entschieden: der Streifen
	 * gehoert dazu. Er zeigt, dass der Inhalt noch da ist und nur zur Seite
	 * gerueckt wurde, und man sieht, wohin man zurueckkommt.
	 */
	/*
	 * Hier wurde der Inhalt zur Seite geschoben - die Spalte war eine
	 * Schublade, die alles vor sich herschob.
	 *
	 * Peter am 26.08.2026, nach einem Abend mit Proton Mail, X und Phantom:
	 * dort legt sich das Menue UEBER den Inhalt, der Rest wird abgedunkelt.
	 * Das ist ruhiger - es bewegt sich ein Ding statt zweier - und es ist,
	 * was man von einer App erwartet.
	 *
	 * Also bleibt der Inhalt stehen. Nur die Spalte bewegt sich, und der
	 * Vorhang darunter macht klar, dass sie darueber liegt.
	 */

	/*
	 * Die Spalte fuellt ihre Hoehe aus. Ohne das ist der Hintergrund nur so
	 * hoch wie die Ordnerliste, und darunter schaut die Seite durch.
	 */
	#boxLeftInner,
	#boxRightInner {
		min-height: 100%;
	}

	/*
	 * Die rechte Spalte hat am Desktop keinen eigenen Hintergrund - sie steht
	 * auf dem der Seite. Schwebt sie ueber dem Inhalt, braucht sie einen.
	 *
	 * Wichtig: NUR der Inhalt bekommt ihn, nicht die Spalte selbst. Die hat
	 * ringsum fuenf Pixel Innenabstand - am Desktop entsteht daraus der schmale
	 * Rahmen, durch den das Template durchscheint. Faerbt man die Spalte,
	 * verwandelt sich dieser Rahmen in einen hellen Streifen.
	 *
	 * Und der Inhalt ist auf 250px gebaut: in der breiteren Ueberlagerung blieb
	 * daneben Platz. Also folgt er der Breite.
	 */
	#boxRightInner,
	#boxLeftInner {
		background: #f7f7f7;
	}

	#boxRightInner,
	#boxRightInner > *,
	#boxLeftInner,
	#boxLeftInner > * {
		width: auto !important;
		margin-left: 0;
		margin-right: 0;
	}

	#boxRightInner > *:first-child,
	#boxRightInner > *:first-child > h2:first-child,
	#boxLeftInner > *:first-child {
		margin-top: 0;
	}

	/*
	 * Der Vorhang. Ein Tipp darauf schliesst die Spalte.
	 *
	 * Er liegt ueber der ganzen Seite, auch ueber dem Kopf - vorher blieb der
	 * frei, weil die Spalte darunter durchlief. Jetzt liegt sie oben, und ein
	 * abgedunkelter Schirm mit hellem Streifen daran saehe aus wie ein Fehler.
	 *
	 * 45 Prozent statt 10: bei zehn sieht man den Unterschied kaum, und die
	 * Flaeche erklaert nicht, was sie soll. Sie muss sagen: hier ist gerade
	 * nichts zu holen, tipp mich weg.
	 *
	 * Sie blendet sich ein, statt hart dazusein - sonst blitzt sie auf,
	 * bevor die Spalte da ist.
	 */
	/*
	 * Ein eigenes Element und kein ::after am body.
	 *
	 * Ein Pseudoelement laesst sich beim Ziehen nur ueber eine CSS-Variable
	 * am Elternteil steuern, und jede Aenderung daran zwingt den Browser,
	 * die ganze Seite neu durchzurechnen. Das div bekommt seine Deckkraft
	 * direkt - und opacity allein kostet nichts, das erledigt die
	 * Grafikkarte.
	 *
	 * Das JavaScript legt es beim ersten Ziehen an (functions.js,
	 * vorhangHolen).
	 */
	.bm-scrim {
		position: fixed;
		inset: 0;
		background: #000;
		z-index: 1003;   /* unter der Spalte (1004), ueber allem sonst */
		opacity: 0;
		pointer-events: none;
		transition: opacity .2s ease;
	}

	body.col-left-open .bm-scrim,
	body.col-right-open .bm-scrim {
		opacity: .45;
		pointer-events: auto;
	}

	/*
	 * Waehrend die Spalte am Finger haengt.
	 *
	 * Kein Uebergang: sonst laeuft sie der Bewegung hinterher, und es fuehlt
	 * sich an, als klebte sie. Peter am 26.08.2026: "das ist sonst
	 * unintuitiv" - er hat recht, in jeder App folgt die Schublade dem
	 * Finger sofort und rastet erst beim Loslassen ein.
	 *
	 * Der Vorhang dunkelt mit: --bm-scrim steht auf dem Weg, den die
	 * Spalte schon zurueckgelegt hat (0 bis 1), und das JavaScript schreibt
	 * ihn bei jeder Bewegung neu.
	 */
	body.dragging #boxLeft,
	body.dragging #boxRight,
	body.dragging #boxMain,
	body.dragging #boxMiddle {
		transition: none !important;
	}

	body.dragging .bm-scrim {
		transition: none;
	}

	/* ---------------------------------------------------------------
	 * Die Werkzeugleiste: zwei Schalter, der Rest unter einem Knopf.
	 *
	 * Nebeneinander waren es neun Symbole in einer Zeile, jedes 24 Pixel
	 * breit - die Haelfte dessen, was ein Finger braucht. Peter am
	 * 26.08.2026: die zwei Spaltenschalter bleiben und werden groesser, der
	 * Rest kommt in eine Klappliste.
	 * --------------------------------------------------------------- */

	/*
	 * Die Leiste ist ein Streifen, in dem alles auf einer Mitte sitzt.
	 *
	 * Vorher stand sie auf 40 Pixeln, waehrend die Symbole darin 44 hoch
	 * waren - sie ragten also hinaus. Gemessen lagen die Mitten von Leiste,
	 * linkem Schalter, Titel und Mehr-Knopf bei 20, 26, 20 und 38: vier
	 * Werte fuer eine Zeile. Das sah man, ohne es benennen zu koennen.
	 *
	 * Mit Flexbox rechnet der Browser die Mitte aus, und zwar fuer alles,
	 * was drin steht. Die Reihenfolge macht `order`: Ordner ganz links, dann
	 * der Titel, rechts die drei Punkte und die Werkzeugspalte.
	 *
	 * 56 Pixel hoch - Peter am 26.08.2026: "die koennte ein bisschen hoeher
	 * sein". Das ist die Hoehe, bei der ein 44er Knopf mit sechs Pixeln Luft
	 * darin steht.
	 */
	#boxMiddle h2,
	#boxMiddle .h2 {
		display: flex;
		align-items: center;
		gap: 4px;

		height: 56px !important;
		line-height: 1 !important;
		padding: 0 6px !important;

		font-size: 17px;
		font-weight: 500;
	}

	/* Der Titel nimmt den Platz zwischen den Schaltern und schiebt alles
	   Weitere nach rechts. */
	#boxMiddle h2 .module-title {
		flex: 1 1 auto;
		min-width: 0;
		order: 2;
		margin: 0 4px !important;
		padding: 0 !important;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
		line-height: 1;
	}

	/*
	 * Nur das Lesezeichenmodul kennt .module-title und #toolmenu. Alle
	 * anderen - Lists, Contacts, Notes, Docs, News, Teams - schreiben ihren
	 * Namen in ein div#title und haengen ihre Symbole direkt ins h2.
	 *
	 * Ohne order stehen die auf 0, also VOR allem, was hier eine Ordnung
	 * bekommen hat. Gemessen bei Contacts: Papierkorb auf x=18, Stift auf
	 * 42, Plus auf 68, der Ordnername erst auf 87 - und die beiden
	 * Spaltenschalter ganz rechts auf 194 und 242. Peter am 26.08.2026:
	 * "der Miss Kirby ist jetzt ganz links, what the fuck?"
	 *
	 * Die Ordnung gilt jetzt fuer alle: Ordnerschalter, Name, Werkzeuge,
	 * Mehr-Knopf, Werkzeugspalte.
	 */
	#boxMiddle h2 > #title,
	#boxMiddle .h2 > #title {
		flex: 1 1 auto;
		min-width: 0;
		order: 2;
		margin: 0 4px !important;
		padding: 0 !important;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
		line-height: 1;
	}

	/* Die Symbole der uebrigen Module: hinter den Namen, und gross genug
	   fuer einen Finger. */
	#boxMiddle h2 > i.icon,
	#boxMiddle .h2 > i.icon {
		order: 3;
		flex: 0 0 auto;
		display: flex !important;
		align-items: center;
		justify-content: center;
		width: 40px !important;
		height: 40px !important;
		margin: 0 !important;
		padding: 0 !important;
		float: none !important;
		font-size: 20px;
		line-height: 1 !important;
	}

	/* Ein Aufraeumer fuer Floats. In einem Flexbox-Streifen ist er nur ein
	   Klotz von vier Pixeln, der die Mitte verschiebt. */
	#boxMiddle h2 > .clear,
	#boxMiddle .h2 > .clear {
		display: none !important;
	}

	#fhideBox { order: 1; }
	#mehrBtn  { order: 4; }
	#bhideBox { order: 5; }

	/*
	 * screen.css haengt die beiden Schalter absolut an die Raender der
	 * Leiste (position:absolute, top:0). In einem Flexbox-Streifen zaehlen
	 * sie damit nicht mit, und die Mitte ging an ihnen vorbei: gemessen
	 * sassen sie auf 22, waehrend Titel und Mehr-Knopf auf 28 lagen.
	 */
	h2 #fhideBox,
	h2 #bhideBox {
		position: static !important;
		top: auto !important;
		left: auto !important;
		right: auto !important;
	}

	#fhideBox,
	#bhideBox,
	#mehrBtn {
		flex: 0 0 auto;
		display: flex !important;
		align-items: center;
		justify-content: center;

		width: 44px !important;
		height: 44px !important;
		margin: 0 !important;
		padding: 0 !important;
		float: none !important;
		line-height: 1 !important;
	}

	/* Die Flaeche ist 44 Pixel - die Zeichnung darin soll das auch fuellen.
	   Bei den drei Punkten sah man sonst eine grosse leere Flaeche mit
	   einem winzigen Zeichen in der Mitte. */
	#mehrBtn svg,
	#fhideBox svg,
	#bhideBox svg,
	#mehrBtn i,
	#fhideBox i,
	#bhideBox i {
		width: 24px;
		height: 24px;
		font-size: 24px;
		float: none !important;
		margin: 0 !important;
	}

	/* Was sonst noch im h2 haengt, bleibt am Schreibtisch, verschwindet
	   aber hier - die Werkzeuge sitzen jetzt in der Klappliste. */
	#boxMiddle h2 > i.sep {
		display: none;
	}

	/*
	 * Die Klappliste haengt unter dem Knopf und ist zu, bis jemand tippt.
	 * Die Symbole darin stehen untereinander - jedes mit einer Flaeche, die
	 * man trifft.
	 */
	/*
	 * fixed und nicht absolute.
	 *
	 * Das h2 und #boxBookmarks stehen beide auf overflow:hidden - eine
	 * absolut positionierte Liste darin wird abgeschnitten. Gemessen war sie
	 * 56 mal 408 Pixel gross und trotzdem unsichtbar; an ihrer Stelle lag
	 * die Tabelle obenauf. Peter am 26.08.2026: "da geht so ein kleines Ding
	 * auf hinter der Liste".
	 *
	 * Ein fixed positioniertes Element haengt am Fenster und kuemmert sich
	 * nicht um das overflow seiner Eltern. Der Preis: die Lage muss das
	 * JavaScript setzen, weil sie nicht mehr vom Knopf abgeleitet wird -
	 * siehe functions.js, WerkzeugeStellen().
	 */
	/*
	 * Ein Blatt an der unteren Kante, kein schwebendes Menue.
	 *
	 * Die erste Fassung hing am Knopf oben rechts. Auf einem Telefon taugt
	 * das nicht: sie deckt die Liste zu, man sieht nicht, wie man sie wieder
	 * loswird, und was nicht auf den Schirm passt, ist unerreichbar. Peter am
	 * 27.08.2026: "dass es fast den gesamten Bereich ausfuellt, dass man darin
	 * scrollt und es mit einem X wieder schliesst - eher wie ein Pop-up."
	 *
	 * Unten, weil dort der Daumen liegt. Hoechstens 85 Prozent der Hoehe,
	 * damit immer ein Streifen der Liste sichtbar bleibt - man soll sehen,
	 * WORUEBER das Blatt liegt. Der Rest scrollt in sich.
	 *
	 * 100dvh statt 100vh: auf dem Telefon zaehlt vh die Adresszeile mit, auch
	 * wenn sie eingefahren ist - das Blatt waere unten abgeschnitten.
	 */
	#toolmenu {
		position: fixed;
		z-index: 1400;   /* ueber dem Vorhang (1003) und ueber den Spalten (1004) */

		/*
		 * Unten, dort wo der Daumen liegt.
		 *
		 * Es sass zwischendurch in der Mitte - Peter am 27.08.2026 zuerst:
		 * "ich will nicht, dass es ganz unten sitzt, entweder sitzt es in der
		 * Mitte", nach dem Ausprobieren dann: "jetzt finde ich es doch
		 * besser, wenn es unten ist."
		 *
		 * Rundum 12px Abstand, damit es nicht am Fensterrand klebt - das war
		 * der Einwand gegen die erste Fassung, und der galt dem Kleben, nicht
		 * der Lage. Dazu die sichere Zone, sonst liegt der untere Rand auf
		 * dem Strich zum Wechseln der Apps.
		 *
		 * Kein transform zum Setzen der Lage: es macht das Element zum
		 * Bezugsrahmen fuer alles darin, und diese Falle hatten wir heute
		 * schon einmal.
		 */
		left: 12px;
		right: 12px;
		top: auto;
		bottom: 12px;
		bottom: calc(12px + env(safe-area-inset-bottom, 0px));
		margin: 0;

		display: none;
		flex-direction: column;
		height: fit-content;
		max-height: 85vh;
		max-height: min(85dvh, calc(100dvh - 24px - env(safe-area-inset-bottom, 0px)));
		padding: 0 0 8px;

		background: #fff;
		border-radius: 16px;
		box-shadow: 0 8px 32px rgba(0, 0, 0, .35);

		overflow-y: auto;
		overscroll-behavior: contain;
	}

	body.toolmenu-open #toolmenu {
		display: flex;
	}

	/* Der Vorhang dahinter - dasselbe Element wie beim Wischen der Spalten. */
	body.toolmenu-open .bm-scrim {
		opacity: .45;
		pointer-events: auto;
	}

	/*
	 * Die Kopfzeile des Blattes. Sie bleibt beim Scrollen stehen, sonst
	 * scrollt einem das Kreuz aus dem Bild - und dann ist man wieder da, wo
	 * die alte Klappliste war.
	 */
	#toolmenu .toolmenu-kopf {
		position: sticky;
		top: 0;
		z-index: 1;

		display: flex;
		align-items: center;
		justify-content: space-between;

		padding: 4px 8px 4px 20px;
		background: #fff;
		border-bottom: 1px solid rgba(0, 0, 0, .08);
	}

	#toolmenu .toolmenu-titel {
		font-size: 15px;
		font-weight: 500;
		opacity: .6;
	}

	#toolmenu .toolmenu-zu {
		display: flex;
		align-items: center;
		justify-content: center;

		width: 44px;
		height: 44px;

		font-size: 20px;
		font-style: normal;
		line-height: 1;
		cursor: pointer;
		opacity: .55;
	}

	#toolmenu .toolmenu-zu:hover {
		opacity: 1;
	}

	/*
	 * Jede Zeile: Symbol links, Name daneben.
	 *
	 * Vorher standen hier nackte Symbole untereinander. Peter am
	 * 26.08.2026: "ist schoen, aber bitte Text dazu" - ein Bleistift und ein
	 * Pluszeichen sind ohne Beschriftung Raten, und den Mauszeiger, der am
	 * Schreibtisch den Titel zeigt, gibt es auf dem Telefon nicht.
	 *
	 * 48 Pixel hoch: knapp ueber dem, was ein Daumen sicher trifft, und
	 * schmal genug, dass die ganze Liste ohne Scrollen auf den Schirm passt.
	 */
	#toolmenu {
		min-width: 210px;
	}

	#toolmenu .tool {
		display: flex;
		align-items: center;
		gap: 10px;

		height: 48px;
		padding: 0 14px 0 12px;

		float: none !important;
		color: #444;
		font-size: 15px;
		white-space: nowrap;
	}

	#toolmenu .tool .icon,
	#toolmenu .tool > i,
	#toolmenu .tool > svg {
		/* Alle Symbole auf derselben Senkrechten, damit die Namen daneben
		   eine Kante bilden - unterschiedlich breite Zeichen wuerden sie
		   sonst versetzen. */
		flex: 0 0 24px;
		width: 24px;
		height: 24px;
		font-size: 20px;
		line-height: 24px;
		margin: 0 !important;
		float: none !important;
		text-align: center;
	}

	/* screen.css blendet den Namen aus - am Schreibtisch steht in der Zeile
	   nur das Symbol. Hier wird er wieder eingeschaltet. */
	#toolmenu .tool .toollabel {
		display: block;
		flex: 1 1 auto;
		line-height: 1;
	}

	/* Was gerade gilt - die eingestellte Ansicht, die eingestellte
	   Sortierung - steht kraeftiger da. */
	#toolmenu .tool:has(.op) {
		font-weight: 600;
		color: #222;
	}

	/* Eine Ueberschrift ueber einer Gruppe, kein Schalter. */
	#toolmenu .tooltitle {
		display: block;
		padding: 8px 14px 4px;
		color: #8a9099;
		font-size: 11px;
		font-weight: 600;
		letter-spacing: .04em;
		text-transform: uppercase;
	}

	#toolmenu > i.icon,
	#toolmenu > .icon,
	#toolmenu #viewtypes > .icon {
		display: block;
		float: none !important;
		width: 56px;
		height: 48px;
		line-height: 48px;
		font-size: 22px;
		margin: 0;
		text-align: center;
		color: #444;
	}

	#toolmenu #viewtypes,
	#toolmenu #sortmenu {
		display: block;
		float: none !important;
	}

	/*
	 * Erst die Liste, zuletzt die Kacheln - dieselbe Folge wie am
	 * Schreibtisch. Im Markup stehen sie andersherum, weil dort einmal die
	 * reichste Ansicht zuerst stehen sollte; Peter will es in beiden Ansichten
	 * gleich: "die Liste zuerst und die Tiles danach."
	 */
	#toolmenu #viewtypes {
		display: flex;
		flex-direction: column;
	}

	#toolmenu #viewtypes .tool:has(#vt_0) { order: 0; }
	#toolmenu #viewtypes .tool:has(#vt_1) { order: 1; }
	#toolmenu #viewtypes .tool:has(#vt_2) { order: 2; }
	#toolmenu #viewtypes .tool:has(#vt_3) { order: 3; }

	/*
	 * Die Trenner werden zu Haarlinien statt zu senkrechten Strichen.
	 *
	 * padding:0 ist der Punkt: die Grundregel gibt .sep fuenf Pixel Polster
	 * (screen.css), und mit box-sizing:border-box wurde aus der 1-Pixel-Linie
	 * ein zehn Pixel hoher grauer Balken. Peter am 27.08.2026: "diese dicken
	 * grauen Balken - wenn schon Linien, dann bitte duenne."
	 */
	#toolmenu .sep {
		display: block;
		float: none !important;
		width: auto;
		height: 1px;
		min-height: 0;
		padding: 0;
		margin: 8px 20px;
		background: rgba(0, 0, 0, .1);
	}

	/* ---------------------------------------------------------------
	 * Die Lesezeichenliste: schmal bleibt der Titel.
	 *
	 * Bisher standen alle Spalten nebeneinander weiter, und weil kein Platz
	 * war, endete die Beschreibung nach zwei Buchstaben ("ne..."). Waagrecht
	 * scrollen konnte man nicht - und wollte auch niemand. Peter am
	 * 26.08.2026: "das muss alles auf die Seite passen. Im Mobile Phone
	 * zeigen wir einfach nur die Titel."
	 *
	 * Weg sind: Beschreibung, Adresse, Kurzform, Daten, Zaehler. Bleiben:
	 * Nummer, Symbol, Titel, Stern.
	 * --------------------------------------------------------------- */

	#bookmarks th#desc,
	#bookmarks th#uri,
	#bookmarks th#short,
	#bookmarks th#la,
	#bookmarks th#lu,
	#bookmarks th.hits,
	#bookmarks td.wr,
	#bookmarks td.ds,
	#bookmarks td.dsr,
	#bookmarks td.URL,
	#bookmarks td.date,
	#bookmarks td.hits {
		display: none !important;
	}

	/*
	 * Der Titel bekommt den Platz, der frei wird.
	 *
	 * Ohne feste Breiten verteilt die Tabelle gleichmaessig: gemessen kamen
	 * auf jede der vier verbliebenen Spalten 117 Pixel - auch auf die beiden
	 * mit einem einzigen Symbol darin. Dem Titel blieb genauso wenig wie dem
	 * Stern, und er endete nach zwei Woertern.
	 *
	 * Also bekommen die schmalen Spalten ihr Mass, und der Titel nimmt den
	 * Rest. Die feste Breite am Titel kommt am Schreibtisch aus der
	 * Nutzereinstellung (bm_w) und steht im Element - daher der Vorrang.
	 */
	#bookmarks th.nr,
	#bookmarks td.nr {
		width: 38px !important;
		padding-left: 8px;
		padding-right: 0;
	}

	#bookmarks th#ic,
	#bookmarks td.ic {
		width: 34px !important;
		padding-left: 0;
		padding-right: 0;
		text-align: center;
	}

	/* Der Stern ganz rechts darf etwas mehr Flaeche haben - er wird getippt. */
	#bookmarks td.ic:last-child {
		width: 46px !important;
	}

	/* Siehe oben bei .narrow-main: mit table-layout:fixed muss die Spalte,
	   die den Rest bekommen soll, 100% verlangen. Die Kennungen hier sind
	   spezifischer als die allgemeine Regel und wuerden sie sonst schlagen. */
	#bookmarks th#bm_w,
	#bookmarks th#title,
	#bookmarks td.bmk {
		width: 100% !important;
		max-width: none !important;
	}

	/* Ein Titel, der nicht passt, endet mit Punkten statt umzubrechen -
	   sonst wuerden die Zeilen unterschiedlich hoch. */
	#bookmarks td.bmk a {
		display: block;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	/*
	 * Groessere Zeilen.
	 *
	 * 13 Pixel und 22 hohe Zeilen sind fuer die Maus gebaut. Ein Finger
	 * braucht 44 - das ist die Zahl, die Apple und Google seit Jahren
	 * nennen, und man merkt sofort, warum: darunter trifft man daneben.
	 */
	#bookmarks td {
		padding-top: 11px;
		padding-bottom: 11px;
		font-size: 16px;
		line-height: 1.35;
	}

	/*
	 * Kraeftiger als am Schreibtisch.
	 *
	 * Die Anwendung laeuft auf font-weight 300 - das ist fuer lange Listen
	 * am grossen Schirm richtig, wo Ruhe zaehlt. Auf einem Telefon, oft in
	 * der Sonne und in Bewegung, liest sich das duenn. Peter am 26.08.2026,
	 * nach dem Vergleich mit Proton Mail und X: "die Schriften sind alle ein
	 * bisschen dicker". Dort steht 500 bis 600.
	 */
	#bookmarks td.bmk a,
	#bookmarks td.bmk {
		font-size: 16px;
		font-weight: 500;
	}

	#boxLeft,
	#boxRight,
	#boxLeftInner,
	#boxRightInner {
		font-weight: 400;
	}

	#boxLeftInner li > a,
	#boxLeftInner li > span,
	#boxRightInner li > a,
	#boxRightInner li > span {
		font-weight: 500;
	}

	/* Die Kopfzeile der Tabelle sagt bei einer Spalte nichts mehr. */
	#bookmarks thead {
		display: none;
	}

	/* Der Griff zum Sortieren braucht auf dem Telefon keinen Platz - dort
	   wird nicht mit der Maus umgeordnet. */
	#bookmarks td.nr .handle,
	#bookmarks .drag {
		display: none;
	}

	/* ---------------------------------------------------------------
	 * Zettel: schmal gilt das Raster, auch wenn es nicht eingeschaltet ist.
	 *
	 * Die Zettel liegen frei auf der Flaeche - Lage und Groesse stehen je
	 * Zettel in der Datenbank (Memos.l/t/w/h/z) und kommen als Stil im
	 * Element. Auf einem Telefon geht das zweimal schief:
	 *
	 * 1. Ein Zettel bei left:700px bleibt dort stehen, auch wenn nur noch 350
	 *    Pixel da sind. Er laeuft rechts hinaus, unter die Werkzeugspalte.
	 * 2. Schlimmer: alle Zettel sind absolut positioniert und tragen damit
	 *    nichts zur Hoehe ihres Kastens bei. Am Schreibtisch faellt das nicht
	 *    auf, weil das JavaScript dem .scrollBox eine feste Hoehe schreibt -
	 *    schmal setzt diese Datei die aber auf auto zurueck (weiter oben, alle
	 *    Spalten sollen mit der Seite scrollen). Der Kasten wurde damit null
	 *    Pixel hoch, und weil er overflow:auto hat, war die ganze Pinnwand
	 *    weg. Genau das war der leere Bildschirm unter /memos.
	 *
	 * Die Regeln sind dieselben, die f_memos.php fuer die Rasteransicht
	 * ausgibt. Die gespeicherten Werte bleiben unangetastet - am Schreibtisch
	 * liegt alles wieder, wo es lag. Das Ziehen ist in diesem Zustand aus
	 * (js_memos.js), sonst schriebe der erste Fingertipp neue Koordinaten.
	 * --------------------------------------------------------------- */

	#memobox {
		display: grid;
		grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
		gap: 15px;
		align-content: start;
		padding: 15px;
		height: auto !important;
	}

	#memobox .memo {
		position: static !important;
		left: auto !important;
		top: auto !important;
		width: auto !important;
		height: 220px !important;
		z-index: auto !important;
	}

	#memobox .memo .content {
		height: 185px !important;
	}

	/* Kein Ziehen, kein Ziehen-Zeiger, kein Anfasser fuer die Groesse */
	#memobox .memo .handle {
		cursor: default;
	}

	#memobox .memo .bm-size {
		display: none;
	}


	/*
	 * In der Titelzeile steht der Name des Ordners - und wenn keiner gewaehlt
	 * ist, der des Moduls. Dann steht er zweimal da, denn oben in der
	 * Auswahlbox steht er ohnehin. In dem Fall faellt er hier weg; ein
	 * Ordnername bleibt selbstverstaendlich stehen.
	 *
	 * #boxMiddle davor, damit diese Regel gegen "h2 > .module-title" weiter
	 * unten besteht: beide treffen dasselbe Element, und ohne den Vorsprung
	 * gewann display: block - der Modulname stand doch da.
	 */
	/*
	 * Nicht display:none, sondern nur ohne Schrift.
	 *
	 * Weg war der Name damit zwar, aber mit ihm auch das einzige Element,
	 * das in der Leiste flex:1 traegt und alles Uebrige nach rechts schiebt.
	 * Bei den Lesezeichen rueckten deshalb Ordnerschalter, die drei Punkte
	 * und das Zahnrad zusammen an den linken Rand. Peter am 26.08.2026:
	 * "das Zahnrad und die drei Punkte bei Bookmarks noch links".
	 *
	 * So bleibt der Platzhalter stehen und dehnt sich, der Name selbst ist
	 * nicht zu sehen.
	 */
	#boxMiddle h2 > .title-as-module {
		font-size: 0;
	}

	/*
	 * Lange Ordnernamen liefen in die Symbole hinein - die stehen rechts und
	 * fliessen, der Name lief darunter durch. Jetzt bekommt er den Platz, der
	 * uebrig bleibt, und wird sonst mit Auslassungspunkten gekuerzt.
	 */
	h2 > .module-title {
		display: block;
		overflow: hidden;
		text-overflow: ellipsis;
		white-space: nowrap;
	}

	/* Die Hoehen setzt functions.js am Desktop hart in Pixeln, damit jede
	   Spalte fuer sich scrollt. Hier scrollt die Seite als Ganzes. */
	#boxMiddle .scrollBox,
	#boxLeft .scrollBox,
	#boxRight .scrollBox,
	.scrollBoxEdit {
		height: auto !important;
		max-height: none !important;
	}

	/*
	 * Die Knopfleiste bleibt am unteren Bildschirmrand.
	 *
	 * Am Schreibtisch steht sie "position: absolute; bottom: 0" im Kasten, und
	 * der Kasten hat eine feste Hoehe - die Leiste sitzt damit unten im Blick.
	 * Schmal bekommt die Scrollbox oben "height: auto", damit die SEITE
	 * scrollt; die Leiste haengt sich dann an das Ende des INHALTS und
	 * scrollte mit hinaus. Wer ein langes Formular ausfuellt, sucht am Ende
	 * den Speichern-Knopf. Peter am 27.08.2026: "der sollte ja unten am
	 * Bildschirmrand sitzen und nicht rausscrollen. Beim Desktop ist das unten
	 * an das untere Ende des Views angehaengt."
	 *
	 * Also fest ans Fenster. Das gilt fuer jedes Formular, nicht nur fuer die
	 * Lesezeichen - .buttonBox tragen sie alle.
	 */
	.buttonBox {
		position: fixed;
		left: 0;
		right: 0;
		bottom: 0;
		width: auto;
		z-index: 1100;
		box-shadow: 0 -2px 10px rgba(0, 0, 0, .15);
	}

	/* Platz fuer die Fusszeile, sonst liegt sie ueber dem letzten Feld. */
	.scrollBoxEdit {
		padding-bottom: 60px;
	}

	/*
	 * In der Fusszeile stehen schmal nur Save und Cancel.
	 *
	 * Daneben steht am Schreibtisch "created by <Name> on <Datum>". Auf 390
	 * Pixeln nimmt das die ganze Zeile, und Cancel wurde hinausgedraengt -
	 * Peter am 27.08.2026: "das geht sich doch nie im Leben aus, nur Save und
	 * Cancel beim Mobile."
	 *
	 * DrawEditInfo() wollte das schon verhindern und fragt $_SESSION['mobile']
	 * ab - das steht seit der Zusammenlegung der Ansichten fest auf 0, die
	 * Zeile kam also immer. Hier ist ohnehin die richtige Stelle: es haengt an
	 * der Breite, nicht am Geraet. Ein schmal gezogenes Fenster am
	 * Schreibtisch hat dasselbe Problem.
	 *
	 * Die Auskunft geht nicht verloren, sie steht in der Zeile "Info" im
	 * Formular darueber.
	 */
	.buttonBox .editinfo {
		display: none;
	}

	/* Die zwei Knoepfe nebeneinander, mit Luft dazwischen und Platz fuer den
	   Daumen - 44 Pixel sind die kleinste Zielflaeche, die sicher trifft. */
	.buttonBox {
		display: flex;
		align-items: center;
		gap: 10px;
		height: 56px;
		padding: 6px 12px;
	}

	.buttonBox .btn {
		min-height: 40px;
		padding: 8px 18px;
	}
}


/* ------------------------------------------------------------------
 * Handy - unter 768px.
 * ------------------------------------------------------------------ */

@media (max-width: 767px) {

	/* Fingerbreite Ziele statt Mausgenauigkeit */
	#boxLeft li a,
	#boxLeft li span,
	#boxRight li a {
		min-height: 24px;
	}

	/*
	 * Der Umschalter zwischen den drei Listenansichten war hier ausgeblendet,
	 * als Platzentscheidung im Responsive-Umbau. Das war ein Fehlschluss:
	 * gerade auf dem Handy ist die Wahl zwischen schmaler Liste und Kacheln
	 * der Unterschied zwischen Suchen und Finden, und die Einstellung haengt
	 * am Konto - wer sie am Schreibtisch auf Kacheln stellt, konnte sie
	 * unterwegs nicht mehr zurueckdrehen.
	 *
	 * Die drei Symbole brauchen zusammen keine 70 Pixel. Was Platz kostet,
	 * ist die grosse Liste - siehe die Regeln weiter unten.
	 */

	/* Die Bookmarkliste ist eine Tabelle. Datum, Zaehler und Kuerzel treten
	   zurueck - Titel und Adresse sind, worauf es ankommt. */
	.list .date,
	.list .hits,
	.list .sh {
		display: none;
	}

	/*
	 * Grosse Liste (viewtype 2) auf schmalem Schirm.
	 *
	 * Am Schreibtisch steht dort ein 210 Pixel breites Vorschaubild neben
	 * Titel und einer Spalte mit Datum, Benutzung und Zaehlern. Auf 360 Pixel
	 * bleibt fuer den Titel dann nichts uebrig. Das Bild wird deshalb auf ein
	 * Drittel gesetzt und die Zahlenspalte faellt weg - sie steht ohnehin
	 * schon in der schmalen Liste zur Verfuegung.
	 */
	table.list .thumbshot,
	table.list .thumbshot img {
		width: 90px;
	}

	.thumblist .infos {
		display: none;
	}

}


/* ------------------------------------------------------------------
 * Das Kreuz zum Schliessen der Spalten.
 *
 * Es haengt das JavaScript beim Oeffnen ein - am Desktop gibt es die
 * Ueberlagerung nicht und damit auch nichts zu schliessen.
 * ------------------------------------------------------------------ */

.col-close {
	display: none;
}

@media (max-width: 959px) {

	/*
	 * Es steht in der Kopfzeile bei den anderen Symbolen und soll aussehen wie
	 * sie - also keine eigene Flaeche, keine eigene Farbe: es erbt beides von
	 * der Zeile, in der es steht.
	 *
	 * Gross wie die Symbole im Hauptkopf: 40 Pixel Flaeche, 20 Pixel Zeichen.
	 * Vorher stand es auf der Schriftgroesse der Kopfzeile und war damit halb
	 * so gross wie alles daneben - es wird aber mit dem Daumen getroffen, nicht
	 * mit der Maus. Peter am 26.08.2026: "das X groesser, mein Abstand zum Text
	 * gilt fuer links und rechts in allen Modulen."
	 *
	 * Der Abstand steht deshalb an der Klasse selbst und nicht an #boxLeft:
	 * er gilt in beiden Spalten und in jedem Modul.
	 */
	.col-close {
		display: flex;
		align-items: center;
		justify-content: center;

		/* Ganz nach links, vor den Titel. Die Ordnung der Kopfzeile steht
		   weiter unten, "Eine Ordnung fuer alle Titelzeilen". */
		order: -1;
		flex: 0 0 32px;
		width: 32px;
		height: 40px;

		/* Der Kasten ist 40 breit, das Zeichen darin knapp 20 - der Rest ist
		   Luft, die man nicht sieht, aber misst. Zusaetzliche Raender
		   verdoppeln sie: das Kreuz stand dadurch weit vom Rand und der Titel
		   weit vom Kreuz. Peter am 27.08.2026: "das X ist zu weit links, daran
		   sollten Folders und Text anschliessen." Also links buendig, rechts
		   nur so viel, dass es nicht klebt. */
		margin-left: -12px;
		margin-right: 0;

		font-size: 20px;
		line-height: 1;

		cursor: pointer;
		opacity: .85;
	}

	.col-close:hover {
		opacity: 1;
	}
}


/* ------------------------------------------------------------------
 * Solange etwas darueber liegt, steht die Seite still.
 *
 * Sonst scrollt der Inhalt unter dem offenen Menue oder der Spalte weg, und
 * beim Schliessen findet man sich an einer ganz anderen Stelle wieder.
 * ------------------------------------------------------------------ */

@media (max-width: 959px) {

	body.menu-open,
	body.col-left-open,
	body.col-right-open {
		overflow: hidden;
	}
}


/* ------------------------------------------------------------------
 * Kachelgruppen: zwei nebeneinander statt einer langen Spalte.
 *
 * Die Kacheln haben feste 170px. Wird der Platz knapp, passen zwei nicht mehr
 * nebeneinander und rutschen untereinander - eine schmale Wurst, durch die man
 * scrollen muss, obwohl daneben Platz frei bleibt. Ein Raster aus zwei
 * gleichen Spalten nutzt die Breite, egal wie schmal es wird.
 * ------------------------------------------------------------------ */

@media (max-width: 959px) {

	/*
	 * Die Regeln fuer #premium_buttons standen hier und waren wirkungslos:
	 * DrawStripeButtons() gibt seinen eigenen style-Block im Seitenkoerper
	 * aus, der kommt nach dieser Datei und gewinnt bei gleicher Spezifitaet.
	 * Sie stehen jetzt dort, in f_html.php.
	 */

	/* Die Vorlagenauswahl in den Einstellungen ist derselbe Fall */
	.sys_tmpl {
		float: none;
		margin: 0;
	}
}


/* ------------------------------------------------------------------
 * Schriftgroessen.
 *
 * Die angemeldete Anwendung bleibt auf 13 Pixeln. Kurz standen hier 14 - das
 * liest sich besser, aber es haette jedem bestehenden Konto ueber Nacht ein
 * anderes Aussehen gegeben: groessere Zeilen, weniger Eintraege auf dem
 * Schirm. Wer die Anwendung seit Jahren benutzt, hat das nicht bestellt.
 *
 * Die Anmeldeseiten bekommen 15: dort steht wenig auf viel Flaeche, es wird
 * gelesen statt ueberflogen, und es ist das Erste, was ein neuer Nutzer von
 * Bookmax sieht. Wer sie sieht, ist noch nicht angemeldet - da aendert sich
 * fuer niemanden etwas Gewohntes.
 *
 * Steht hier und nicht in screen.css, weil die aus SCSS erzeugt wird und
 * Aenderungen daran beim naechsten Bauen verloren gingen.
 * ------------------------------------------------------------------ */

body {
	/*
	 * Ubuntu bleibt die Grundschrift.
	 *
	 * Kurz stand hier Figtree. Das haette aber jedem bestehenden Konto ueber
	 * Nacht ein anderes Aussehen gegeben, ohne dass jemand danach gefragt
	 * haette - kein Template traegt eine eigene Schrift, alle haengen an
	 * dieser Zeile. Die neuen Schriften stehen unter Einstellungen / Template
	 * zur Wahl (siehe /fonts/auswahl.css); wer mag, nimmt eine, wer nicht,
	 * behaelt Ubuntu.
	 */
	font-family: 'Ubuntu', sans-serif;

	/*
	 * Die Groesse entsteht aus zwei Werten: dem Grundmass der Umgebung
	 * (--bm-basis: 13 am Schreibtisch, 15 auf schmalen Schirmen) und der Stufe,
	 * die der Nutzer unter Einstellungen / Template gewaehlt hat
	 * (--bm-schrift, von DrawTemplate() gesetzt).
	 *
	 * Frueher stand dort eine feste Pixelzahl. Die passte immer nur zu einem
	 * Bildschirm: wer am Desktop 13 waehlte, las auf dem Handy zu klein.
	 */
	font-size: calc(var(--bm-basis, 13px) * var(--bm-schrift, 1));
}

/* Eingabefelder und Knoepfe erben die Groesse nicht vom body */
.form-control,
.btn,
input,
select,
textarea {
	font-size: calc(var(--bm-basis, 13px) * var(--bm-schrift, 1));
}

.boxLogin,
.boxLogin .form-control,
.boxLogin .btn {
	font-size: 15px;
}

.boxLogin .form-control {
	height: auto;
	padding: 9px 12px;
}

/*
 * Listen und Tabellen brauchen keine eigene Angabe mehr - sie erben die 13px
 * vom body, wie vor der Umstellung. Die Regel stand hier, um sie von der
 * groesseren Grundschrift auszunehmen; die gibt es nicht mehr.
 */

/*
 * Fokusrahmen nur fuer die Tastatur
 *
 * Nach einem Klick bleibt der Fokus auf dem Knopf stehen, und Bootstrap zeichnet
 * ihn blau um - beim Speichern, beim Abbrechen, sogar am Logo. Mit der Maus
 * sieht das aus wie ein Fehler.
 *
 * Weggenommen wird er nur dort, wo der Browser selbst sagt, dass er nicht
 * gebraucht wird (:focus-visible ist bei Tastaturbedienung gesetzt, bei Klick
 * nicht). Wer mit der Tabulatortaste arbeitet, sieht also weiter, wo er steht -
 * ohne diese Unterscheidung waere die Seite ohne Maus unbedienbar.
 */
:focus:not(:focus-visible) {
	outline: none;
}

.btn:focus:not(:focus-visible),
a:focus:not(:focus-visible),
button:focus:not(:focus-visible),
input[type="button"]:focus:not(:focus-visible),
input[type="submit"]:focus:not(:focus-visible),
[tabindex]:focus:not(:focus-visible) {
	outline: none;
	box-shadow: none;
}

/*
 * Das Schattenbild beim Ziehen eines Ordners
 *
 * Es haengt am Zeiger und zeigt, was man gerade in der Hand hat - im Baum
 * selbst rastet der Ordner weiter an der Stelle ein, an der er landen wuerde.
 * Es faengt keine Ereignisse ab, sonst laege es zwischen Zeiger und Ziel.
 */
.bm-ghost {
	position: fixed;
	z-index: 3000;
	pointer-events: none;
	opacity: .9;
	padding: 3px 10px;
	border-radius: 4px;
	background: #3D79C1;
	color: #fff;
	box-shadow: 0 4px 14px rgba(0,0,0,.35);
	white-space: nowrap;
	font-size: 13px;
}

.bm-ghost .switch {
	display: none;
}

/* Waehrend gezogen wird, ueberall der Verschiebe-Zeiger */
body.bm-dragging {
	cursor: grabbing;
}

/*
 * Griff eines Bereichs, der rechts klebt - dort gehoert er an die linke Kante.
 * Beim Ueberfahren zeigt eine feine Linie, wo die Grenze liegt.
 */
.bm-width-handle.links {
	right: auto;
	left: -3px;
}

.bm-width-handle.links:hover,
body.bm-dragging .bm-width-handle.links {
	background: rgba(61,121,193,.35);
}

body.bm-dragging {
	cursor: col-resize;
	user-select: none;
}

/*
 * Der Detailbereich reicht bis zum unteren Rand, auch wenn wenig drinsteht -
 * sonst ist der Griff nur so hoch wie die Karte und schwer zu treffen.
 */
#box_contact:not(.leer),
.note:not(.leer) {
	min-height: 100%;
}


/* ==========================================================================
   Tabellen auf dem Telefon: eine Spalte, der Rest zum Aufklappen

   Eine Tabelle mit sechs Spalten passt auf 390 Pixel nicht. Vorher standen
   sie trotzdem alle nebeneinander, jede wurde ein Stummel, und waagrecht
   scrollen ging nicht. Peter am 26.08.2026 mit dem Comics-Regal vor Augen:
   "Wir koennen auf Mobile keine Tabellen darstellen, das geht einfach nicht.
   Man sieht nur eben die erste Spalte. Und wenn man dann draufklickt, sieht
   man alles."

   Welche Spalte bleibt, entscheidet TabellenSchmal() in functions.js - dort
   steht auch, warum es nicht footable macht.
   ========================================================================== */
@media (max-width: 959px) {

	.narrow-hidden {
		display: none !important;
	}

	/*
	 * Die Hauptspalte nimmt, was die weggefallenen frei machen.
	 *
	 * Ohne das behielten die stehengebliebenen Spalten ihre alten Breiten -
	 * gemessen endete der Inhalt bei 250 Pixeln in einer 380 Pixel breiten
	 * Tabelle, und rechts stand nichts.
	 */
	table.narrow-table {
		width: 100% !important;
		/*
		 * fixed, nicht auto.
		 *
		 * Mit auto rechnet der Browser die Spalten nach ihrem Inhalt - und
		 * ein Lesezeichentitel ist gern zweihundert Zeichen lang. Gemessen
		 * lief die Tabelle damit ueber den rechten Rand hinaus, und weder
		 * das Aufklappzeichen noch der Stern waren noch zu sehen. Mit fixed
		 * gilt die Breite, die hier steht, und der Text darin bricht oder
		 * endet mit Punkten.
		 */
		table-layout: fixed !important;
	}

	/*
	 * 100 Prozent, nicht auto.
	 *
	 * Bei table-layout:fixed heisst "auto" fuer den Browser: gleichmaessig
	 * auf alle Spalten ohne Angabe verteilen. Gemessen blieben dem Titel
	 * damit 60 Pixel, waehrend rechts Platz leer stand. Eine Spalte auf 100
	 * Prozent bekommt dagegen alles, was die Spalten mit festem Mass uebrig
	 * lassen - der uebliche Weg, eine Spalte "den Rest" nehmen zu lassen.
	 */
	table.narrow-table .narrow-main {
		width: 100% !important;
		max-width: none !important;
	}

	/* Ein langer Name bricht sonst um, und die Zeile wird doppelt so hoch.
	   Die zweite Regel gilt dem Inhalt: bei den Lesezeichen steht der Titel
	   in einem Link, und die Punkte muessen dann dort entstehen. */
	table.narrow-table tbody td.narrow-main,
	table.narrow-table tbody td.narrow-main > a,
	table.narrow-table tbody td.narrow-main > div,
	table.narrow-table tbody td.narrow-main > span {
		overflow: hidden;
		white-space: nowrap;
		text-overflow: ellipsis;
	}

	/* Zeilen, die man mit dem Daumen trifft. */
	table.narrow-table tbody tr > td {
		height: 44px;
		padding-top: 0;
		padding-bottom: 0;
		font-size: 15px;
	}

	/* Das Zeichen zum Aufklappen sitzt rechts in der Hauptspalte - eine
	   eigene Spalte haette jeden Index verschoben, auf den sich Auswahl,
	   Sortieren und Ziehen stuetzen. */
	/*
	 * Das Zeichen haengt an der rechten Kante der Zelle, nicht im Textfluss.
	 *
	 * Mit float:right stand es unter dem Titel statt daneben: die Zelle
	 * traegt white-space:nowrap und overflow:hidden, damit ein langer Titel
	 * mit Punkten endet - ein gefloatetes Element hat darin keinen Platz
	 * mehr und rutscht in die naechste Zeile.
	 *
	 * Der Innenabstand rechts haelt den Titel davon frei, damit die Punkte
	 * nicht unter dem Zeichen liegen.
	 */
	table.narrow-table td.narrow-main {
		position: relative;
		padding-right: 40px !important;
	}

	/*
	 * Die Flaeche fuer den Daumen, nicht fuer den Mauszeiger.
	 *
	 * 28 Pixel waren es vorher - gemessen, und damit unter den 44, die Apple
	 * und Google als kleinste Zielflaeche nennen. Peter am 27.08.2026: "ist
	 * das Icon nicht ein bisschen klein fuer mobile?"
	 *
	 * Die Zeile selbst ist rund 40 Pixel hoch; hoeher kann die Flaeche nicht
	 * werden, ohne in die Nachbarzeile zu ragen. Getroffen wird ohnehin die
	 * GANZE Zeile (der Handler in functions.js haengt an tr, nicht am
	 * Zeichen) - das hier ist die Marke, nicht der Knopf.
	 */
	table.narrow-table .narrow-toggle {
		position: absolute;
		top: 50%;
		right: 0;
		transform: translateY(-50%);

		width: 40px;
		height: 40px;

		opacity: .45;
		font-style: normal;
		line-height: 40px;
		text-align: center;
	}

	table.narrow-table .narrow-toggle:before {
		content: "\203A";               /* einfaches Anfuehrungszeichen rechts */
		display: block;
		font-size: 24px;
		line-height: 40px;
		transition: transform .18s ease;
		transform: rotate(90deg);
	}

	table.narrow-table tr.expanded .narrow-toggle:before {
		transform: rotate(-90deg);
	}

	/* Die Detailzeile steht da, ist aber zu, bis jemand tippt. */
	table.narrow-table tr.narrow-detail {
		display: none;
	}

	table.narrow-table tr.narrow-detail.is-open {
		display: table-row;
	}

	table.narrow-table tr.narrow-detail > td {
		padding: 0 !important;
		border-top: 0;
	}

	table.narrow-table .dbox {
		padding: 10px 14px 12px 42px;
		/* Abgesetzt vom Grund der Zeile darueber, damit man sieht, dass das
		   hier zu ihr gehoert und keine eigene Zeile ist. */
		background: color-mix(in srgb, currentColor 5%, transparent);
		font-size: 14px;
	}

	table.narrow-table .dpaar {
		display: flex;
		gap: 10px;
		padding: 3px 0;
	}

	table.narrow-table .dname {
		flex: 0 0 40%;
		max-width: 150px;
		opacity: .6;
	}

	table.narrow-table .dwert {
		flex: 1 1 auto;
		min-width: 0;
		/* Eine Adresse oder eine Beschreibung ohne Leerzeichen muss brechen
		   duerfen, sonst schiebt sie die Zeile ueber den Rand. Und der
		   nowrap der Hauptspalte darf hier nicht durchschlagen. */
		white-space: normal;
		overflow-wrap: anywhere;
	}

	/* Was im Wert steckt, kam aus einer Tabellenzelle und bringt deren
	   Ausrichtung mit - hier steht es aber links neben seiner Beschriftung. */
	table.narrow-table .dwert img {
		max-width: 100%;
		height: auto;
		float: none;
	}
}



/* ==========================================================================
   Die Koepfe der Spalten so hoch wie der der Hauptliste

   Der Streifen in der Mitte ist 56 Pixel hoch (siehe #boxMiddle h2 weiter
   oben) - das ist die Hoehe, bei der ein 44er Knopf mit Luft darin steht.
   Die Koepfe der beiden Spalten standen daneben auf 40 und wirkten dadurch
   wie aus einer anderen Anwendung. Peter am 26.08.2026: "der Header ist
   wieder so klein, der sollte genauso gross sein wie von der Hauptliste.
   Auf der linken Seite dasselbe bei der Navigation."
   ========================================================================== */
@media (max-width: 959px) {

	#boxLeft h2,
	#boxLeft .h2,
	#boxRight h2,
	#boxRight .h2 {
		display: flex;
		align-items: center;

		height: 56px !important;
		padding: 0 14px !important;
		line-height: 1 !important;

		font-size: 17px;
		font-weight: 500;
	}

	/*
	 * Auch hier standen die Symbole vor dem Namen.
	 *
	 * Der Name der Spalte ist ein blosser Textknoten im h2, kein Element -
	 * in einem Flexbox-Streifen wird daraus ein namenloses Feld mit order 0.
	 * Die Symbole haben ebenfalls 0, stehen im Markup aber davor, also
	 * kamen sie zuerst. Gemessen bei Lists: Papierkorb auf x=21, Stift auf
	 * 41, Plus auf 63 - und "Lists" erst dahinter. Peter am 26.08.2026:
	 * "in der Navigation sind die Icons schon wieder falsch positioniert".
	 *
	 * Mit einer hoeheren Ordnung rutschen sie hinter den Namen; das
	 * margin-left am ersten schiebt die ganze Gruppe an den rechten Rand.
	 */
	/*
	 * Die Symbole ruecken zusammen.
	 *
	 * Jedes sass in einem 40 Pixel breiten Kasten, in dem ein 20-Pixel-Zeichen
	 * steht - zwischen zwei Zeichen lagen damit 20 Pixel Luft, obwohl die
	 * Kaesten aneinander stiessen. Peter am 27.08.2026: "rechts die drei Icons
	 * haben auch zu viel Abstand zueinander."
	 *
	 * 34 statt 40: das Zeichen bleibt gleich gross, die Reihe wird ruhiger,
	 * und mit 34 Pixeln Breite bei 40 Pixeln Hoehe trifft der Daumen immer
	 * noch sicher - die Zeile ist 56 hoch, die Flaeche also 34x56.
	 */
	#boxLeft h2 > i.icon,
	#boxLeft .h2 > i.icon,
	#boxRight h2 > i.icon,
	#boxRight .h2 > i.icon {
		order: 5;
		flex: 0 0 auto;
		display: flex !important;
		align-items: center;
		justify-content: center;
		width: 30px !important;
		height: 40px !important;
		margin: 0 !important;
		padding: 0 !important;
		float: none !important;
		font-size: 20px;
		line-height: 1 !important;
	}

	#boxLeft h2 > i.icon:first-of-type,
	#boxLeft .h2 > i.icon:first-of-type,
	#boxRight h2 > i.icon:first-of-type,
	#boxRight .h2 > i.icon:first-of-type {
		margin-left: auto !important;
	}

	/* ---------------------------------------------------------------
	 * Die Eintraege in den Spalten: Flaeche fuer einen Finger.
	 *
	 * Die Zeilen kamen vom Schreibtisch: 13 Pixel Schrift, ein Symbol von
	 * 12 Pixeln dicht am Wort. Peter am 26.08.2026: "mobile das Icon ein
	 * bisschen groesser, mehr Abstand zum Text."
	 * --------------------------------------------------------------- */
	#boxLeft .content a,
	#boxRight .content a,
	#boxLeft .content li,
	#boxRight .content li {
		display: flex;
		align-items: center;
		gap: 12px;

		min-height: 40px;
		font-size: 15px;
	}

	#boxLeft .content a > i,
	#boxRight .content a > i,
	#boxLeft .content li > i,
	#boxRight .content li > i,
	#boxLeft .content a > svg,
	#boxRight .content a > svg,
	#boxLeft .content li > svg,
	#boxRight .content li > svg {
		/* Alle auf derselben Senkrechten, damit die Namen daneben eine Kante
		   bilden - verschieden breite Zeichen wuerden sie sonst versetzen. */
		flex: 0 0 20px;
		width: 20px;
		font-size: 17px;
		margin: 0 !important;
		text-align: center;
	}
}


/* ==========================================================================
   Eine Ordnung fuer alle Titelzeilen

   Die Regeln weiter oben vergaben `order` an das, was einen Namen hat -
   #fhideBox, .module-title, #title. Damit blieb genau der Fall offen, der am
   haeufigsten vorkommt: der Titel ist gar kein Element, sondern ein blosser
   Text im h2. Bei den Einstellungen steht dort "Account Type", in der
   Werkzeugspalte "Tools", in der Ordnerspalte die Reiter.

   Ein solcher Text wird in einem Flexbox-Streifen zu einem namenlosen Feld.
   Man kann ihn nicht ansprechen, ihm kein flex:1 geben, ihn nicht ordnen -
   er steht auf 0 und dehnt sich nie. Die Symbole klebten deshalb an ihm,
   statt am rechten Rand zu sitzen. Peter am 26.08.2026, mit der
   Ordnerspalte vor Augen: "die sind falsch eingereiht und muessen nach
   rechts. Das ist ein Horror gerade."

   Der Ausweg ist ein dehnbares Pseudo-Element zwischen Titel und Symbolen.
   Es traegt das flex:1, das der Text nicht tragen kann, und schiebt alles
   mit hoeherer Ordnung an den rechten Rand - egal ob der Titel ein Element
   ist oder nur ein Wort.

   Die Ordnung, von links nach rechts:

     -1  der Schalter fuer die Ordnerspalte
      0  der Titel, ob Element oder blosser Text
      1  der Trenner, der sich dehnt
      2  die Symbole des Moduls
      3  der Knopf mit den drei Punkten
      4  der Schalter fuer die Werkzeugspalte, das Kreuz zum Schliessen
   ========================================================================== */
@media (max-width: 959px) {

	#boxMiddle h2::after,
	#boxMiddle .h2::after,
	#boxLeft h2::after,
	#boxLeft .h2::after,
	#boxRight h2::after,
	#boxRight .h2::after {
		content: "";
		order: 1;
		flex: 1 1 auto;
		min-width: 0;
	}

	#fhideBox { order: -1 !important; }

	#boxMiddle h2 > .module-title,
	#boxMiddle .h2 > .module-title,
	#boxMiddle h2 > #title,
	#boxMiddle .h2 > #title,
	#boxLeft h2 > #typeSelector,
	#boxLeft .h2 > #typeSelector {
		order: 0 !important;
		/* Kein flex mehr - der Trenner dahinter macht die Arbeit. So bleibt
		   ein kurzer Titel kurz, statt sich ueber die halbe Zeile zu ziehen,
		   und ein langer wird von den Symbolen begrenzt. */
		flex: 0 1 auto !important;
		max-width: 60%;
	}

	#boxMiddle h2 > i.icon,
	#boxMiddle .h2 > i.icon,
	#boxLeft h2 > i.icon,
	#boxLeft .h2 > i.icon,
	#boxRight h2 > i.icon,
	#boxRight .h2 > i.icon {
		order: 2 !important;
		margin-left: 0 !important;
	}

	/*
	 * Der Papierkorb steht hinter allen anderen.
	 *
	 * In der Klappliste steht Anlegen oben und Loeschen unten - erst das,
	 * was man oft will, zuletzt das, was man selten will. In den Kopfzeilen
	 * war es umgekehrt: der Papierkorb kam zuerst. Peter am 26.08.2026 bei
	 * den Notizen: "der Miskuebel, der ist doch immer rechts."
	 *
	 * Ueber die Kennung statt ueber die Stelle im Markup, weil jedes Modul
	 * seine eigene vergibt: ftrash, itrash, mtrash, btrash, tag_trash.
	 */
	#boxMiddle h2 > i.icon[id$="trash"],
	#boxMiddle .h2 > i.icon[id$="trash"],
	#boxLeft h2 > i.icon[id$="trash"],
	#boxLeft .h2 > i.icon[id$="trash"],
	#boxRight h2 > i.icon[id$="trash"],
	#boxRight .h2 > i.icon[id$="trash"] {
		order: 3 !important;
	}

	#mehrBtn { order: 4 !important; }

	#bhideBox,
	#boxLeft h2 > .close,
	#boxRight h2 > .close {
		order: 5 !important;
	}
}


/* ==========================================================================
   Die Kontaktkarte legt sich ueber die Liste

   Am Schreibtisch stehen Liste und Karte nebeneinander - dafuer ist die
   Ansicht gemacht. Schmal blieben der Liste rund 120 Pixel: die Namen
   endeten nach einem Buchstaben ("H...", "K..."), und die Nummer daneben
   brach senkrecht um, eine Ziffer je Zeile. Peter am 26.08.2026: "da
   koennen wir doch nicht rechts diese Kontaktinfos einfuegen. Das muesste
   dann direkt unter dem Kontakt sein... so ist diese Ansicht natuerlich nur
   fuer Desktop interessant."

   Also derselbe Weg wie bei den Spalten: die Karte legt sich darueber, mit
   einem Kreuz zurueck. Die Liste bekommt die ganze Breite und zeigt nur den
   Namen.
   ========================================================================== */
@media (max-width: 959px) {

	#box_contactlist {
		width: 100% !important;
		margin: 0 !important;
	}

	/* Der Ziehgriff zwischen den beiden Spalten hat schmal keinen Sinn. */
	#box_contact + .bm-divider,
	.bm-divider[data-teil="kontakt"] {
		display: none !important;
	}

	#box_contact:not(.leer) {
		position: fixed;
		top: 0;
		left: 0;
		right: 0;
		bottom: 0;
		z-index: 1006;

		width: auto !important;
		margin: 0 !important;
		padding: 0 !important;

		overflow-y: auto;
		overscroll-behavior: contain;
		box-shadow: 0 0 24px rgba(0, 0, 0, .35);
	}

	/* Leer ist leer - ohne das bliebe ein weisser Kasten ueber der Liste. */
	#box_contact.leer {
		display: none !important;
	}

	/*
	 * Das Kreuz zurueck. Es haengt am Kasten selbst und nicht im Inhalt,
	 * denn der wird bei jedem Kontakt neu geladen - ein Kreuz darin waere
	 * jedes Mal weg.
	 */
	#box_contact .bm-back {
		position: absolute;
		top: 10px;
		right: 10px;
		z-index: 2;

		width: 44px;
		height: 44px;

		border-radius: 22px;
		background: rgba(0, 0, 0, .06);
		color: inherit;
		font-size: 22px;
		line-height: 44px;
		text-align: center;
		cursor: pointer;
	}
}


/* ==========================================================================
   Die Vorlagenauswahl auf dem Telefon

   Die Kacheln kamen unveraendert vom Schreibtisch: ein Bild von 200 Pixeln,
   darunter ein Knopf, der die ganze Spaltenbreite einnahm, und dessen
   Beschriftung in Textfarbe auf grauem Grund stand. Peter am 26.08.2026:
   "warum sind die Bilder so klein, wir haben doch mehr Platz. Dafuer muss
   der Button darunter, nicht ueber die gesamte Breite. Hier kann man gar
   nicht lesen auf dem grauen Hintergrund."
   ========================================================================== */
@media (max-width: 959px) {

	#system_templates {
		display: flex;
		flex-direction: column;
		gap: 6px;
	}

	.sys_tmpl {
		float: none;
		margin: 0 0 18px;
	}

	/* Das Bild nimmt die Breite, die da ist - es zeigt eine ganze
	   Oberflaeche, und bei 200 Pixeln erkennt man davon nichts. */
	.sys_tmpl img {
		width: 100% !important;
		max-width: 100%;
		height: auto;
		margin-bottom: 10px;
	}

	/*
	 * Der Knopf so breit wie sein Wort, nicht so breit wie die Spalte.
	 *
	 * Ein Kasten ueber die ganze Breite sieht nach Ueberschrift aus, nicht
	 * nach Schalter - und die Beschriftung stand verloren in seiner Mitte.
	 */
	.sys_tmpl .tmpl_sel {
		display: inline-block;
		min-width: 120px;
		padding: 10px 22px;

		border: 1px solid color-mix(in srgb, currentColor 25%, transparent);
		border-radius: 6px;
		font-size: 15px;
		font-weight: 500;
	}

	/*
	 * Die gewaehlte Vorlage: heller Text auf dunklem Grund, mit genug
	 * Abstand dazwischen. Vorher stand die Textfarbe der Vorlage auf dem
	 * festen Grau - auf einer dunklen Vorlage war das dunkelgrau auf grau.
	 */
	.sys_tmpl.active .tmpl_sel {
		background: #4a5568;
		color: #fff;
		border-color: #4a5568;
	}
}


/* ==========================================================================
   Ansichtsumschalter im Kopf: schmal weg

   Drei Ansichten nebeneinander sind eine Wahl fuer den Schreibtisch. Auf
   390 Pixeln gibt es nur eine, die taugt - bei den Nachrichten die Kacheln,
   bei den Dokumenten das Aufklappen -, und die drei Symbole kosten den
   Platz, den der Titel braucht. Peter am 26.08.2026: "der dritte View
   bringt bei mobile sowieso nichts, ich wuerde die drei View-Icons
   ueberhaupt weggeben" und "bei den RSS-Feeds machen wir nur den rechten
   View, diesen Grid-View, alles andere kommt weg."

   Nicht betroffen sind die Lesezeichen: dort liegt #viewtypes in der
   Klappliste unter den drei Punkten, wo es niemandem im Weg steht.
   ========================================================================== */
@media (max-width: 959px) {

	#boxMiddle h2 > #viewtypes,
	#boxMiddle .h2 > #viewtypes {
		display: none !important;
	}
}



/* ==========================================================================
   Die grosse Liste hat schmal keinen Sinn

   Sie zeigt zu jedem Lesezeichen ein Vorschaubild in voller Breite. Auf
   390 Pixeln passt damit ein einziger Eintrag auf den Schirm, und wer den
   zweiten sehen will, scrollt an einem Bildschirmfoto vorbei, auf dem
   nichts zu erkennen ist. Peter am 26.08.2026: "mobile macht die Big List
   wenig Sinn, oder? Da nehmen wir nur Liste und Kacheln."

   Die Kachelansicht zeigt dasselbe Bild kleiner, dafuer drei davon, und die
   Liste zeigt die Titel. Dazwischen fehlt nichts.
   ========================================================================== */
@media (max-width: 959px) {

	#toolmenu .tool:has(#vt_2) {
		display: none !important;
	}
}
