diff --git a/html/css/office.css b/html/css/office.css
index 87e52e9..7f079ea 100644
--- a/html/css/office.css
+++ b/html/css/office.css
@@ -24,15 +24,32 @@
box-sizing: border-box;
}
+/* Die Szene soll immer vollstaendig sichtbar sein - auch im normalen Fenstermodus,
+ ohne Scrollen. Dazu spannt der body eine Flex-Spalte ueber die Viewport-Hoehe auf:
+ Header nimmt seine natuerliche Hoehe, #office-scene bekommt den Rest, und das SVG
+ skaliert sich per aspect-ratio in diesen Rest hinein (siehe unten). */
+html {
+ height: 100%;
+}
+
body {
margin: 0;
font-family: "Segoe UI", Verdana, Arial, sans-serif;
background: #dbe7f3;
color: var(--color-text);
+ /* height (nicht min-height): Nur eine definite Hoehe laesst die prozentualen
+ max-height-Angaben weiter unten aufloesen. dvh rechnet mobile Browserleisten
+ mit, vh ist der Fallback fuer aeltere Engines. */
+ height: 100vh;
+ height: 100dvh;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
}
header.office-header {
- padding: 16px 24px;
+ flex: 0 0 auto;
+ padding: 12px 24px;
display: flex;
align-items: baseline;
gap: 16px;
@@ -50,20 +67,65 @@ header.office-header p {
}
#office-scene {
- width: 100%;
- max-width: 1920px;
- margin: 0 auto;
- padding: 0 16px 32px;
+ flex: 1 1 auto;
+ /* min-height: 0 hebt die Flex-Default-Mindesthoehe (min-content) auf - sonst kann
+ das Kind den Container nicht unterschreiten und die Szene laeuft aus dem Bild. */
+ min-height: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0 16px 16px;
}
+/* Das SVG soll sich an der jeweils knapperen Achse ausrichten. Welche das ist, haengt
+ vom Seitenverhaeltnis des Fensters ab - daher die beiden Media-Queries unten. Die
+ max-*-Grenzen sind das Sicherheitsnetz fuer den Grenzbereich (die Header-Hoehe geht
+ in das Verhaeltnis der Szenenflaeche ein, in die Media-Query aber nicht): Dort wird
+ die Elementbox notfalls leicht gestaucht - der Szeneninhalt bleibt dank
+ preserveAspectRatio unverzerrt und vollstaendig sichtbar. */
.office-svg {
- width: 100%;
- height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ aspect-ratio: 1920 / 1080;
display: block;
border-radius: 12px;
box-shadow: 0 10px 30px rgba(15, 23, 42, 0.25);
}
+/* Fenster breiter als 16:9 -> die Hoehe ist der Engpass. */
+@media (min-aspect-ratio: 16 / 9) {
+ .office-svg {
+ height: 100%;
+ width: auto;
+ }
+}
+
+/* Fenster schmaler als 16:9 -> die Breite ist der Engpass. */
+@media (max-aspect-ratio: 16 / 9) {
+ .office-svg {
+ width: 100%;
+ height: auto;
+ }
+}
+
+/* Bei knappem Platz weicht zuerst der erklaerende Fliesstext - er kostet in flachen
+ oder schmalen Fenstern mehrere Zeilen Hoehe, die der Szene fehlen. */
+@media (max-height: 640px), (max-width: 760px) {
+ header.office-header p {
+ display: none;
+ }
+}
+
+@media (max-height: 640px) {
+ header.office-header {
+ padding: 8px 16px;
+ }
+
+ header.office-header h1 {
+ font-size: 1.1rem;
+ }
+}
+
.floor {
fill: var(--color-floor);
}