181 lines
5.0 KiB
CSS
181 lines
5.0 KiB
CSS
/* Gemeinsames Aussehen der Dialoge.
|
|
Bewusst zurückhaltend, damit sie sich in die Oberfläche von
|
|
Thunderbird einfügen statt sich abzuheben. */
|
|
|
|
:root {
|
|
--gruen: #175420;
|
|
--rand: #c8ccd0;
|
|
--hell: #f6f6f4;
|
|
color-scheme: light dark;
|
|
}
|
|
|
|
* { box-sizing: border-box; }
|
|
|
|
/* Muss VOR den Anzeigearten stehen und !important tragen: Eine Regel wie
|
|
".wahl { display: flex }" überstimmt sonst das eingebaute
|
|
"[hidden] { display: none }", und ausgeblendete Elemente erscheinen. */
|
|
[hidden] { display: none !important; }
|
|
|
|
body {
|
|
font: message-box;
|
|
font-size: 13px;
|
|
margin: 0;
|
|
padding: 12px 14px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
|
|
/* Feste Höhe UND overflow:hidden. Mit min-height wuchs die Seite über
|
|
das Fenster hinaus, und die Fußzeile lag unerreichbar darunter.
|
|
Gestaucht wird stattdessen innen: Die Listen blättern selbst. */
|
|
height: 100vh;
|
|
overflow: hidden;
|
|
}
|
|
|
|
h1 { font-size: 14px; margin: 0 0 2px; font-weight: 600; }
|
|
|
|
fieldset {
|
|
border: 1px solid var(--rand);
|
|
border-radius: 4px;
|
|
margin: 0;
|
|
padding: 8px 10px 10px;
|
|
min-width: 0;
|
|
}
|
|
legend { padding: 0 4px; font-weight: 600; }
|
|
|
|
label { display: block; margin: 4px 0 2px; }
|
|
|
|
input[type=text], input[type=password], input[type=number], select {
|
|
width: 100%;
|
|
padding: 4px 6px;
|
|
border: 1px solid var(--rand);
|
|
border-radius: 3px;
|
|
background: Field;
|
|
color: FieldText;
|
|
}
|
|
|
|
.zeile { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
|
|
.zeile > input[type=text] { flex: 1; }
|
|
|
|
/* Kompakte Zahlenfelder mit vorangestellter Beschriftung. */
|
|
.masse { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
|
|
.mass { display: flex; gap: 5px; align-items: center; }
|
|
.mass label { margin: 0; white-space: nowrap; }
|
|
.mass input { width: 68px; }
|
|
|
|
.wahl { display: flex; gap: 6px; align-items: center; margin: 3px 0; }
|
|
.wahl input { width: auto; margin: 0; }
|
|
|
|
/* Dateiliste mit Wahl der Ablageart je Datei. */
|
|
.dateizeile {
|
|
display: flex; align-items: center; gap: 10px;
|
|
padding: 3px 0; flex-wrap: wrap;
|
|
}
|
|
.dateizeile .name { flex: 1; min-width: 200px; }
|
|
.dateizeile .art { display: flex; gap: 12px; align-items: center; }
|
|
.dateizeile .art label { margin: 0; white-space: nowrap; font-size: 12px; }
|
|
.dateizeile .art input { width: auto; margin: 0; }
|
|
.dateizeile .art label.aus { color: GrayText; }
|
|
|
|
button {
|
|
padding: 5px 14px;
|
|
border: 1px solid var(--rand);
|
|
border-radius: 3px;
|
|
background: ButtonFace;
|
|
color: ButtonText;
|
|
cursor: pointer;
|
|
}
|
|
button.haupt {
|
|
background: var(--gruen); color: #fff; border-color: var(--gruen);
|
|
}
|
|
button:disabled { opacity: .5; cursor: default; }
|
|
|
|
.fuss {
|
|
display: flex; justify-content: flex-end; gap: 8px; margin-top: auto;
|
|
}
|
|
|
|
.liste {
|
|
border: 1px solid var(--rand);
|
|
border-radius: 3px;
|
|
overflow: auto;
|
|
background: Field;
|
|
flex: 1;
|
|
min-height: 80px;
|
|
}
|
|
|
|
table {
|
|
width: 100%; border-collapse: collapse;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
th, td { padding: 3px 8px; text-align: left; white-space: nowrap; }
|
|
th {
|
|
position: sticky; top: 0;
|
|
background: var(--hell);
|
|
border-bottom: 1px solid var(--rand);
|
|
font-weight: 600;
|
|
}
|
|
td.zahl, th.zahl { text-align: right; }
|
|
tr.gewaehlt { background: SelectedItem; color: SelectedItemText; }
|
|
tbody tr { cursor: default; }
|
|
|
|
.hinweis { color: GrayText; font-size: 12px; }
|
|
.fehler { color: #b32; }
|
|
.trefferHervor { background: color-mix(in srgb, Mark 60%, transparent); }
|
|
|
|
.wachsen {
|
|
flex: 1; display: flex; flex-direction: column; gap: 6px; min-height: 0;
|
|
}
|
|
|
|
/* --------------------------------------------------- Zweispaltig */
|
|
|
|
/* KEIN flex-wrap.
|
|
Mit Umbruch bemisst sich die Hoehe einer Flexzeile nach ihrem INHALT,
|
|
nicht nach dem Behaelter - die Spalten wachsen dann, statt sich zu
|
|
stauchen, und die Liste laeuft wieder aus dem Fenster.
|
|
Der urspruengliche Dialog hatte genau deshalb keinen Umbruch. Das
|
|
Fenster ist ohnehin 980 px breit; zwei Spalten zu 340 px passen
|
|
immer. */
|
|
.spalten {
|
|
display: flex;
|
|
flex-wrap: nowrap;
|
|
gap: 12px;
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* KEIN fieldset für wachsende Bereiche.
|
|
Ein fieldset taugt nicht als Flex-Behälter: Browser behandeln seinen
|
|
inneren anonymen Kasten gesondert, height:100% löst sich darin nicht
|
|
verlässlich auf, und eine Liste darin wächst über den Rahmen hinaus.
|
|
Ein gewöhnliches Element verhält sich wie erwartet.
|
|
Der einzige sichtbare Unterschied: Die Überschrift steht innen statt
|
|
auf dem Rahmen. */
|
|
.kasten {
|
|
border: 1px solid var(--rand);
|
|
border-radius: 4px;
|
|
padding: 10px;
|
|
/* Grundbreite 0 statt 340 px: Bei nowrap wuerde eine Grundbreite die
|
|
Spalten ueber das Fenster hinausschieben. Die Aufteilung ergibt
|
|
sich aus flex-grow zu gleichen Teilen. */
|
|
flex: 1 1 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
min-height: 0;
|
|
min-width: 0;
|
|
}
|
|
.kasten > h2 {
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
margin: 0 0 4px;
|
|
}
|
|
|
|
/* Die Liste füllt, was nach den festen Elementen übrig bleibt, und
|
|
blättert selbst. Genau das war das Ziel - es scheiterte bisher am
|
|
fieldset, nicht an der Vorgehensweise. */
|
|
.kasten .liste {
|
|
flex: 1;
|
|
min-height: 80px;
|
|
}
|