Settings-Dialog: fester Kopf/Fuß mit scrollendem Mittelteil, Feinschliff

Breite min(48rem, 94vw), Schließen-Kreuz, kräftigerer Rahmen; Kopfzeile
und Aktionsleiste stehen fest, nur der Gruppen-Mittelteil scrollt, wenn
das Fenster niedriger ist als der Inhalt. Todo-Zeile über die volle
Dialogbreite; Aktions-Buttons einheitlich 10.5rem.
This commit is contained in:
marcus hinz
2026-07-20 12:01:21 +02:00
parent b743de5f34
commit 8068471120
+54 -11
View File
@@ -650,8 +650,10 @@ onUnmounted(() => window.clearInterval(timer));
<div v-if="settings" class="overlay"> <div v-if="settings" class="overlay">
<div class="dialog settings-dialog"> <div class="dialog settings-dialog">
<button class="close" :title="$t('projects.cancel')" @click="settings = null"></button>
<h3>{{ $t("projects.terminal", { name: settings.name }) }}</h3> <h3>{{ $t("projects.terminal", { name: settings.name }) }}</h3>
<div class="sbody">
<section class="sgroup"> <section class="sgroup">
<h4 class="eyebrow">{{ $t("projects.groupAppearance") }}</h4> <h4 class="eyebrow">{{ $t("projects.groupAppearance") }}</h4>
<label class="srow"> <label class="srow">
@@ -745,17 +747,12 @@ onUnmounted(() => window.clearInterval(timer));
<section class="sgroup"> <section class="sgroup">
<h4 class="eyebrow">{{ $t("projects.groupSession") }}</h4> <h4 class="eyebrow">{{ $t("projects.groupSession") }}</h4>
<div class="srow"> <label class="checkline todo-line">
<span class="slbl">{{ $t("projects.todo") }}</span>
<span class="sval">
<label class="checkline">
<input v-model="settings.todo" type="checkbox" /> <input v-model="settings.todo" type="checkbox" />
{{ $t("projects.todoDesc") }} <span>{{ $t("projects.todo") }} {{ $t("projects.todoDesc") }}</span>
</label> </label>
</span>
<span class="sacts"></span>
</div>
</section> </section>
</div>
<div class="actions"> <div class="actions">
<button @click="settings = null">{{ $t("projects.cancel") }}</button> <button @click="settings = null">{{ $t("projects.cancel") }}</button>
@@ -789,9 +786,49 @@ onUnmounted(() => window.clearInterval(timer));
<style scoped> <style scoped>
/* Settings-Dialog: festes Grid Label | Wert | Aktionen in drei Gruppen. */ /* Settings-Dialog: festes Grid Label | Wert | Aktionen in drei Gruppen. */
.settings-dialog { .settings-dialog {
width: 36rem; position: relative;
max-width: 36rem; width: min(48rem, 94vw);
gap: 0.8rem; max-width: none;
/* Kopf und Aktionszeile stehen fest; nur der Mittelteil (.sbody) scrollt,
wenn das Fenster niedriger ist als der Inhalt. */
max-height: 94vh;
overflow: hidden;
gap: 0.7rem;
border-color: var(--surface2);
}
.sbody {
display: flex;
flex-direction: column;
gap: 0.7rem;
overflow-y: auto;
min-height: 0;
margin: 0 -0.5rem;
padding: 0 0.5rem;
}
/* Aktions-Buttons gleich breit — ruhige Aktionsspalte; das Schließen-Kreuz
ist davon ausgenommen. */
.settings-dialog .sacts button,
.settings-dialog .actions button {
width: 10.5rem;
}
.settings-dialog .close {
position: absolute;
top: 0.7rem;
right: 0.7rem;
width: 1.8rem;
height: 1.8rem;
padding: 0;
line-height: 1;
color: var(--overlay);
background: none;
border: none;
}
.settings-dialog .close:hover {
color: var(--text);
} }
.sgroup { .sgroup {
@@ -845,6 +882,12 @@ onUnmounted(() => window.clearInterval(timer));
justify-content: flex-end; justify-content: flex-end;
} }
/* Todo-Zeile: volle Dialogbreite, der Text wird nie gekürzt. */
.todo-line {
font-size: 0.85rem;
color: var(--subtext);
}
.spath { .spath {
font-family: var(--mono); font-family: var(--mono);
font-size: 0.75rem; font-size: 0.75rem;