/* ═══════════════════════════════════════════════════════════════════════
   Ladeschirm - die gezeichnete Startsequenz vor dem Showreel
   ═══════════════════════════════════════════════════════════════════════

   Motoren laufen hoch, die Drohne loest sich vom Boden, legt sich in
   eine Kurve, kommt auf den Betrachter zu - und ist im Vorbeiflug weg.
   Danach steht kurz nur Schwarz. Erst dann geht der Vorhang auf und der
   Film kommt herein, noch in Bewegung, und laeuft aus.

   Drei getrennte Schritte, absichtlich ohne Ueberblendung: die Drohne
   war frueher halbtransparent ueber dem laufenden Video zu sehen.

   KEIN zweites Video. Ein Vorspann-MP4 muesste geladen und dekodiert
   werden, gleichzeitig mit dem Showreel, dem es Luft verschaffen soll;
   gemessen kostete das genau die Ruckler, die es verhindern wollte.
   Die SVG kostet nichts und traegt dieselbe Erzaehlung.

   Zeitachse (haengt an FLUG_MOTOR/FLUG_DAUER in assets/js/boot.js -
   werden die Zahlen hier geaendert, muessen sie dort mit):
     0 - 900 ms    Hochlauf: Rotoren auf Drehzahl, Drohne am Boden
     900 - 4300 ms Flug: Start, Kurve, Anflug - ab 74 % loest sie sich auf
     ab 4300 ms    Vorhang auf + Sog. Zeitpunkt sagt das Skript, nicht die
                   Animation: erst wenn der Film ein Bild gezeichnet hat
   ─────────────────────────────────────────────────────────────────── */

#boot{position:fixed;inset:0;z-index:9000;background:#050505;display:none;overflow:hidden;
  isolation:isolate;transition:opacity .24s var(--ease-out)}
html.js #boot{display:block}
#boot.done{opacity:0;pointer-events:none}
#boot .flight-stage{position:absolute;inset:0;display:block;background:#050505}
/* Der Zoom-IN der abgehenden Seite. Die Drohne wird am Schluss nicht nur
   gross - die ganze Buehne faehrt mit hinein, und das ist der Unterschied
   zwischen einem Objekt, das waechst, und einem Blick, der reinfaehrt.
   Setzt bei 78 % mit Steigung null ein und beschleunigt bis zum Schluss
   hart (Endsteigung 4,3). Zusammen mit der Drohne, die selbst auf das
   Zehnfache geht, ergibt das den Stoss, in dem der Schnitt sitzt. */
@keyframes buehneRein{0%,78%{transform:scale(1)}100%{transform:scale(1.62)}}
#boot.flight .flight-stage{animation:buehneRein var(--flug) cubic-bezier(.6,0,.85,.35) forwards}

/* ── Die Drohne ───────────────────────────────────────────────────────
   DREI Ebenen, absichtlich getrennt - jede traegt genau eine Bewegung:

     .fpv-mount   die Hoehe    (steigt)
     .fpv-schwenk der Bogen    (Auslenkung + Schraeglage)
     .fpv-naeher  die Groesse  (kommt auf einen zu)

   Alle drei sind eine transform, und auf EINEM Element wuerde die
   spaetere Animation die fruehere komplett ersetzen statt sie zu
   ueberlagern. Getrennt bekommt jede Bewegung ihre eigene Kurve - und
   das ist hier der ganze Punkt: Steigen und Naeherkommen verlaufen
   voellig verschieden, waren aber vorher in EINE Keyframe-Reihe
   gezwungen und mussten sich deren Stuetzstellen teilen.

   Der Drehpunkt der Groesse liegt auf dem Objektiv (50% / 56% der
   viewBox), nicht in der Mitte der Zelle. Dadurch waechst die Drohne um
   ihre eigene Kamera herum: die bleibt stehen, wo sie ist, und alles
   andere kommt um sie herum auf einen zu. Dort oeffnet sich der Film. */
#boot .fpv-mount{position:absolute;z-index:3;left:50%;top:54%;width:clamp(220px,28vw,390px);
  transform:translate(-50%,-22%);will-change:transform;
  animation:fpvLastHoehe .9s cubic-bezier(.4,0,.6,1) forwards}
#boot .fpv-schwenk{display:block;transform-origin:50% 56%;will-change:transform}
#boot .fpv-naeher{display:block;transform:scale(.86);transform-origin:50% 56%;will-change:transform;
  animation:fpvLastGroesse .9s cubic-bezier(.4,0,.6,1) forwards}
#boot .fpv-drone{display:block;width:100%;overflow:visible;
  filter:drop-shadow(0 18px 20px rgba(0,0,0,.72))}
#boot .fpv-arm{fill:none;stroke:rgba(247,246,243,.64);stroke-width:8;stroke-linecap:round}
#boot .fpv-body{fill:#121212;stroke:rgba(247,246,243,.9);stroke-width:4}
/* ── Der Sturz ins Objektiv ───────────────────────────────────────────
   Zum Schluss zieht das Objektiv noch einmal eigens an. Das gab es ganz
   am Anfang schon einmal und war damals aufgesetzt - weil die Linse
   wuchs, waehrend die Drohne klein blieb und etwas anderes tat. Es war
   ein Effekt NEBEN der Bewegung.

   Jetzt ist es der letzte Schlag DERSELBEN Bewegung: die Drohne steht zu
   diesem Zeitpunkt bereits auf dem Achtfachen und kommt entgegen, die
   Buehne faehrt mit hinein, und das Objektiv zieht obendrauf. Drei
   Groessen auf denselben Punkt, alle beschleunigend - das liest sich als
   Sturz durchs Glas, nicht als wachsender Kreis.

   Der Einsatz liegt mit Steigung null bei 74 %, es setzt also nahtlos
   aus dem Anflug heraus ein. Und es blendet mit allem anderen weg
   (86-97 %), bevor es den Rahmen weiss fuellen koennte - Licht, das den
   Rahmen fuellt, drueckt, und das war der Fehler des ersten Versuchs. */
#boot .fpv-lens{fill:#eae9e4;stroke:#0a0a0a;stroke-width:8;
  transform-box:fill-box;transform-origin:center}
@keyframes linseRein{0%,74%{transform:scale(1)}100%{transform:scale(3.6)}}
#boot.flight .fpv-lens{animation:linseRein var(--flug) cubic-bezier(.55,0,.85,.35) forwards}

/* ── Rotoren: echte Quadcopter-Physik ─────────────────────────────────
   Jeder drehende Propeller erzeugt nicht nur Schub, sondern auch ein
   Drehmoment auf die Zelle - ein einzelner wuerde die Drohne unter sich
   wegdrehen. Deshalb laufen BENACHBARTE Rotoren gegenlaeufig und
   DIAGONAL gegenueberliegende gleichlaeufig: zwei CW, zwei CCW, die
   Momente heben sich auf und die Drohne haelt ihre Nase. Genau darueber
   steuert sie auch die Gierbewegung - ein Diagonalpaar leicht schneller
   drehen lassen, und sie dreht sich kontrolliert.

   Blickrichtung: die Drohne schaut uns an (Objektiv zum Betrachter),
   ihre Nase ist unten - das sind die groesseren, naeheren Ducts. Weil
   sie uns zugewandt ist, liegt ihre linke Seite auf unserer rechten:

                    Bild links          Bild rechts
     oben (hinten)  hinten-rechts CCW   hinten-links  CW
     unten (vorne)  vorne-rechts  CW    vorne-links   CCW

   Das ist die uebliche Belegung (vorne-links und hinten-rechts CCW).
   Vorher war jede Richtung seitenverkehrt.

   Kein `animation-direction:reverse` mehr. Das galt fuer die GANZE
   Kurzschreibweise, also auch fuer den Hochlauf - die zwei Gegenrotoren
   BREMSTEN ab, waehrend die anderen zwei beschleunigten, und starteten
   dabei um eine halbe Umdrehung versetzt. Genau das sah verkehrt aus.
   Jede Richtung hat jetzt eigene Keyframes mit derselben Kurve. */
/* Kein will-change hier: die Rotoren liegen in einem Element, das auf
   das Zehnfache skaliert. Eine eigene Ebene wuerde einmal in kleiner
   Aufloesung gerastert und dann hochgezogen - unscharf, oder staendig
   neu gerastert und damit teuer. Die aeusseren Ebenen behalten es. */
#boot .fpv-rotor{transform-box:fill-box;transform-origin:center}
#boot .fpv-rotor.cw {animation:rotorHochCW  var(--hoch) var(--hoch-kurve) forwards,
                               rotorLaufCW  var(--lauf) linear var(--hoch) infinite}
#boot .fpv-rotor.ccw{animation:rotorHochCCW var(--hoch) var(--hoch-kurve) forwards,
                               rotorLaufCCW var(--lauf) linear var(--hoch) infinite}
#boot{
  --hoch:.9s;                              /* Dauer des Hochlaufs */
  --lauf:.28s;                             /* eine Umdrehung bei Betriebsdrehzahl */
  /* Dauer des Fluges. EINZIGE Quelle - assets/js/boot.js liest diesen Wert
     hier aus, statt ihn ein zweites Mal zu fuehren. Frueher stand die Zahl
     in beiden Dateien; das sind zwei getrennt cachebare Dateien, ein
     Besucher konnte also altes Skript und neues Stylesheet mischen und
     bekam einen Vorhang, der zur falschen Zeit aufgeht. */
  --flug:3s;
  /* Endsteigung dieser Kurve ist (1−.55)/(1−.72) = 1.607. Der Hochlauf
     dreht 720° in .9 s, im Mittel also 800 °/s, am Ende folglich
     1.607 × 800 = 1286 °/s - exakt die Betriebsdrehzahl (360°/.28 s).
     Dadurch gibt es beim Wechsel keinen Geschwindigkeitssprung. Vorher
     endete der Hochlauf bei ~5250 °/s und fiel schlagartig auf 720 °/s:
     das war der sichtbare Ruck. 720° ist ausserdem ein Vielfaches von
     360° UND von 90°, der Propeller steht beim Wechsel also genau so
     wie am Anfang - kein Winkelsprung. */
  --hoch-kurve:cubic-bezier(.45,.03,.72,.55)
}
@keyframes rotorHochCW  {from{transform:rotate(0)}      to{transform:rotate(720deg)}}
@keyframes rotorHochCCW {from{transform:rotate(0)}      to{transform:rotate(-720deg)}}
@keyframes rotorLaufCW  {from{transform:rotate(0)}      to{transform:rotate(360deg)}}
@keyframes rotorLaufCCW {from{transform:rotate(0)}      to{transform:rotate(-360deg)}}

#boot .fpv-duct{fill:#0a0a0a;stroke:rgba(247,246,243,.72);stroke-width:4}
/* Ein Propeller auf Drehzahl ist fuer das Auge keine Kreuzform mehr,
   sondern eine durchscheinende Scheibe mit einem wandernden Glanz.
   Genau so wird er hier auch gebaut: die Blaetter blenden waehrend des
   Hochlaufs fast weg, die Scheibe und der Glanzbogen blenden auf.

   Das ist nicht nur huebscher, es loest ein echtes Problem: die
   Kreuzform ist vierfach symmetrisch, wiederholt sich also alle 90°.
   Bei Betriebsdrehzahl faellt das mit 60 Bildern/s zusammen und der
   Propeller scheint zu stehen oder rueckwaerts zu laufen (Wagenrad-
   Effekt). Der Glanzbogen ist einfach symmetrisch - er wiederholt sich
   erst nach 360°, also 3,6-mal pro Sekunde, und laeuft dadurch sauber. */
#boot .fpv-prop{fill:none;stroke:rgba(247,246,243,.86);stroke-width:4.5;stroke-linecap:round;
  animation:blattVerwischen var(--hoch) var(--hoch-kurve) forwards}
#boot .fpv-disc{fill:rgba(247,246,243,.13);opacity:0;
  animation:scheibeAuf var(--hoch) linear forwards}
#boot .fpv-sheen{fill:none;stroke:rgba(247,246,243,.42);stroke-width:6;stroke-linecap:round;
  stroke-dasharray:34 999;opacity:0;
  animation:glanzAuf var(--hoch) linear forwards}
/* Im Hochlauf werden die Blaetter nur duenner, nicht weg - sie sind das,
   was die Drohne lebendig macht, solange sie klein ist. */
@keyframes blattVerwischen{from{opacity:1}to{opacity:.52}}
@keyframes scheibeAuf{from{opacity:0}to{opacity:.38}}
@keyframes glanzAuf{from{opacity:0}to{opacity:1}}

/* ── Unschaerfe waechst mit der Naehe ─────────────────────────────────
   Die Drehzahl bleibt konstant, die Drohne aber waechst auf das Zehnfache
   - und damit auch der Weg, den eine Blattspitze zwischen zwei Bildern
   zuruecklegt. Nachgemessen bei 60 Bildern/s:

     bei 10 % des Fluges    5 px pro Bild   (Groesse 0,9)
     bei 50 %              24 px            (Groesse 1,9)
     bei 70 %              45 px            (Groesse 3,7)
     bei 90 %              85 px            (Groesse 7,0)

   Ab etwa 45 px kann kein Auge das mehr zu einer Drehung zusammensetzen.
   Es sieht Einzelbilder und liest sie als Stillstand - genau eine
   Sekunde vor dem Wechsel, genau wie beobachtet. Die Animation lief
   dabei durchgehend weiter (gemessen 21,5 Grad pro Bild, ohne Luecke);
   es ist keine Aussetzer, sondern eine Wahrnehmungsgrenze.

   Deshalb sieht man bei einer echten Nahaufnahme auch keine Blaetter
   mehr, sondern eine Scheibe: die Bewegungsunschaerfe waechst mit der
   Bildgroesse. Hier passiert dasselbe - Blaetter und Glanz blenden weg,
   solange sie noch lesbar sind, und die Scheibe wird dichter. Was
   uebrig bleibt, kann gar nicht mehr stocken, weil es rund ist. */
#boot.flight .fpv-prop {animation:blattNah   var(--flug) linear forwards}
#boot.flight .fpv-disc {animation:scheibeNah var(--flug) linear forwards}
@keyframes blattNah  {0%,20%{opacity:.52}66%,100%{opacity:.04}}
@keyframes scheibeNah{0%,20%{opacity:.38}66%,100%{opacity:1}}

/* Der Glanzbogen BLEIBT - und mit ihm die sichtbare Drehung.
   Beim ersten Anlauf hatte ich auch ihn wegblenden lassen; uebrig blieb
   eine gleichfoermige Scheibe, und die zeigt gar keine Drehung mehr.
   Genau das las sich dann als Stillstand am Schluss.

   Der Bogen ist EINFACH symmetrisch: er wiederholt sich erst nach einer
   ganzen Umdrehung und kann darum nie optisch umkippen wie die vierfach
   symmetrische Kreuzform. Bleibt nur die Frage, wie weit er zwischen
   zwei Bildern wandert - und die haengt am Radius, der mit der Drohne
   waechst. Also wird das Tempo so gefuehrt, dass dieser Weg konstant bei
   22 px bleibt: verfolgbar, egal wie gross sie gerade ist.

     Tempo   1286 -> 431 Grad/s ueber den Flug
     Glanz   10%: 6px   40%: 10px   70%: 22px   100%: 22px

   Das ist langsamer als die echte Drehzahl. Der Preis ist bewusst: eine
   Nahaufnahme ohne Bewegungsunschaerfe KANN schnelle Drehung nicht
   zeigen - sie zerfaellt in Einzelbilder. Sichtbar langsamer drehen ist
   die einzige Variante, die als Drehung liest statt als Stillstand.

   3780 Grad sind 10,5 Umdrehungen und ein Vielfaches von 90, der
   Uebergang aus dem Hochlauf (der auf 720 Grad endet) ist also
   winkelgleich. Kurve auf 0,4 % angepasst, Startsteigung 1269 Grad/s -
   die Betriebsdrehzahl, also auch tempogleich. */
@keyframes rotorFlugCW {from{transform:rotate(0)} to{transform:rotate(3330deg)}}
@keyframes rotorFlugCCW{from{transform:rotate(0)} to{transform:rotate(-3330deg)}}
#boot.flight .fpv-rotor.cw {animation:rotorFlugCW  var(--flug) cubic-bezier(.84,.96,.68,.84) forwards}
#boot.flight .fpv-rotor.ccw{animation:rotorFlugCCW var(--flug) cubic-bezier(.84,.96,.68,.84) forwards}

/* ── Hochlauf am Boden ────────────────────────────────────────────────
   Die Drohne steht. Sie schwebt NICHT - ein Geraet am Boden wippt nicht,
   es vibriert unter der steigenden Motorlast, und die Zelle wird
   leichter, je mehr Schub anliegt (fpvLast: minimal hoeher, minimal
   groesser). Der Schatten zieht sich dabei zusammen.

   Frueher lief hier eine Schwebe-Schleife ueber 2,6 s, waehrend der Flug
   nach 900 ms startete - die Drohne stand also an einer beliebigen
   Stelle dieser Schleife, und der Flug begann bei einer anderen Pose.
   Das war der sichtbare Sprung beim Aufstarten. Jetzt endet der
   Hochlauf exakt auf der Pose, mit der der Flug beginnt. */
@keyframes fpvLastHoehe  {from{transform:translate(-50%,-22%)} to{transform:translate(-50%,-22.6%)}}
@keyframes fpvLastGroesse{from{transform:scale(.86)}           to{transform:scale(.864)}}
}
#boot .fpv-shadow{fill:rgba(0,0,0,.72);filter:blur(7px);
  transform-box:fill-box;transform-origin:center;
  animation:schattenLast .9s linear forwards}
@keyframes schattenLast{from{transform:scale(1);opacity:.62}to{transform:scale(.9);opacity:.5}}

/* ── Der Flug ─────────────────────────────────────────────────────────
   Sie steigt und kommt dann auf einen zu. Mehr passiert nicht - kein
   Bogen, keine Schraeglage, kein Zurueckschwenken. Die frueheren
   Seitwaertsschlenker sahen aus wie Taumeln, und weil die Drohne 87 %
   der Zeit klein blieb und erst am Schluss aufgezogen wurde, wirkte der
   ganze Start zaeh.

   Davor lag der Flug als Reihe von acht Stuetzstellen mit `linear`
   dazwischen. Das ergibt pro Abschnitt eine konstante Geschwindigkeit
   und an JEDER Grenze einen Sprung - nachgemessen verdoppelte sich das
   Tempo sechsmal (Faktor 2.38, 2.04, 1.96, 1.91, 2.15, 2.41). Genau
   diese sechs Sprunge sieht man als Stocken: fahren, Absatz, fahren.

   Mehr Stuetzstellen haetten das nur feiner gemacht, nicht behoben. Es
   sind jetzt ZWEI: Anfang und Ende, dazwischen eine einzige
   cubic-bezier. Eine solche Kurve ist von sich aus stetig - es gibt
   keine Grenze mehr, an der etwas springen koennte, weil es keine
   Zwischenstelle mehr gibt.

   Beide Kurven starten mit Steigung null (der zweite Wert ist 0), also
   aus dem Stand heraus - nahtlos an den Hochlauf, der ebenfalls im
   Stand endet.

   Groesse: bleibt zuerst gleich - bis 22 % waechst sie um keine 12 %,
   in dieser Zeit steigt sie nur. Danach gleichbleibende WAHRGENOMMENE
   Annaeherung, also konstantes Groessenverhaeltnis pro Zeit. Die Kurve
   ist auf 1,2 % genau angepasst. (Echte Perspektive bei konstantem
   Tempo waere noch extremer - nach drei Vierteln der Zeit erst ein
   Fuenftel der Groesse. Das ist das Kriechen, das vorher beanstandet
   wurde; ein Pilot fliegt auch nicht mit konstantem Tempo auf die
   Kamera zu.)

   Hoehe: steigt frueh und legt sich dann flach - erst hoch, dann
   geradeaus entgegen. Am Ende steht das Objektiv in Blickmitte. */
@keyframes fpvAnflug {from{transform:scale(.864)}            to{transform:scale(9.44)}}
@keyframes fpvSteigen{from{transform:translate(-50%,-22.6%)} to{transform:translate(-50%,-68%)}}
#boot.flight .fpv-naeher{animation:fpvAnflug  var(--flug) cubic-bezier(.3,0,.7,0) forwards}
#boot.flight .fpv-mount {animation:fpvSteigen var(--flug) cubic-bezier(.15,0,.6,1) forwards,
                                   fpvWeg     var(--flug) linear forwards}

/* ── Der Bogen ────────────────────────────────────────────────────────
   Nur geradeaus entgegenfliegen war zu wenig. Sie legt sich zwischen
   18 % und 94 % in eine Kurve nach links und kommt in der Gegenkurve
   zurueck - Scheitel bei 56 %, 11 % Auslenkung, 7 Grad Schraeglage.
   Neigung und Auslenkung stammen aus DERSELBEN Funktion, liegen also
   immer im selben Verhaeltnis: ein Multicopter hat keine Ruder, er
   bewegt sich seitwaerts, indem er sich neigt.

/* Hin UND zurueck kann eine einzelne cubic-bezier nicht - wohl aber
   DIESELBE Kurve, zweimal gespielt, das zweite Mal rueckwaerts
   (`alternate`). cubic-bezier(.4,0,.6,1) hat an BEIDEN Enden Steigung
   null: der Bogen setzt aus dem Geradeausflug heraus sanft ein, kommt
   am Scheitel zur Ruhe und laeuft von dort zurueck. Damit ist auch die
   Umkehr stossfrei, ohne eine einzige Zwischenstelle.

   Verzoegerung 612 ms = 18 % des Fluges (solange steigt sie nur),
   2 x 1292 ms = 76 %, Ende bei 94 %. Der Drehpunkt liegt auch hier auf
   dem Objektiv, damit die Schraeglage den Landepunkt nicht verschiebt. */
@keyframes fpvBogen{from{transform:translateX(0) rotate(0deg)}
                    to  {transform:translateX(-11%) rotate(-7deg)}}
#boot.flight .fpv-schwenk{animation:fpvBogen calc(var(--flug)*.38) cubic-bezier(.4,0,.6,1) calc(var(--flug)*.18) 2 alternate forwards}
#boot.flight .fpv-shadow{animation:schattenWeg 1.1s cubic-bezier(.4,0,.7,.6) forwards}
/* Der Schatten waechst und verliert sich, je hoeher sie steigt - so
   verhaelt sich Licht, und es verankert die Hoehe ohne zweites Objekt. */
@keyframes schattenWeg{from{transform:scale(.9);opacity:.5}to{transform:scale(1.9);opacity:0}}

/* ── Uebergang ────────────────────────────────────────────────────────
   Es gibt keinen Effekt mehr, der den Uebergang macht. Frueher wuchs das
   Objektiv als eigene Animation auf das 8,5-fache, waehrend die Drohne
   etwas anderes tat - das sah nach aufgesetztem Zoom aus, weil es einer
   war. Jetzt oeffnet allein der Anflug den Blick: die Drohne kommt
   entgegen, ihr Objektiv steht in Blickmitte und waechst mit ihr, und
   waehrend es den Rahmen fuellt, loest sich der Vorhang darueber auf.

   Nur opacity: das rechnet die Grafikkarte, ohne ein einziges Bild neu
   zu malen. Eine Maske oder ein clip-path saehe aehnlich aus und wuerde
   genau das Ruckeln erzeugen, das der Vorhang verhindern soll. */
/* Die Drohne geht WEG, bevor irgendetwas vom Film zu sehen ist. Vorher
   wurde der ganze Vorhang ab 58 % durchsichtig - die Drohne lag dann
   halbtransparent ueber dem laufenden Video. Jetzt loest sie sich im
   Vorbeiflug auf (74 % bis 90 %), danach steht kurz nur Schwarz, und
   erst dann geht der Vorhang auf. Drei Schritte statt einer Ueberblendung.

   Der Vorhang selbst wird NICHT mehr von der Flug-Animation aufgeloest.
   Das uebernimmt das Skript, wenn der Film wirklich ein Bild gezeichnet
   hat (bootAusblenden -> .done). Nur so liegen Vorhang und Sog auf
   demselben Takt; vorher war der Film 1,4 s vor dem Sog sichtbar. */
@keyframes fpvWeg{0%,86%{opacity:1}97%,100%{opacity:0}}

/* ── Der Sog ──────────────────────────────────────────────────────────
   Kein weisses Aufblenden mehr. Licht, das auf einen zukommt, DRUECKT -
   es ist ein Scheinwerfer, kein Tunnel. Gezogen wird man vom Gegenteil:
   davon, dass die Fahrt weitergeht, wenn der Vorhang faellt.

   Der Film kommt deshalb schon in Bewegung an - leicht herangefahren,
   und laeuft aus. Das ist das ENDE einer Vorwaertsfahrt, nicht ihr
   Anfang: man ist durch das Objektiv hindurch und kommt an. Der Anflug
   der Drohne hoert nicht auf, er wird uebergeben.

   Sitzt auf .reelstage, nicht auf .frame - die hat ihre eigene, sehr
   langsame Transform-Fahrt, und zwei Transforms auf einem Element
   ersetzen sich gegenseitig. Nur transform, also ohne Neuzeichnen. */
/* Die Kurve ist gemessen gewaehlt: nach einem Viertel der Zeit sind 45 %
   erledigt, nach der Haelfte 75 %. Eine haertere Ausgangskurve war nach
   einem Viertel schon bei 81 % - das schnappt, statt zu gleiten. Die
   Bewegung soll bis zum Schluss lesbar bleiben und weich auslaufen. */
body.loaded .reelstage{animation:sogEin .72s cubic-bezier(.22,.62,.35,1) forwards}
@keyframes sogEin{from{transform:scale(1.38)}to{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){
  body.loaded .reelstage{animation:none}
}


/* Auf dem Telefon fuellte die Drohne bei 82vw fast die ganze Breite und
   wirkte dadurch groesser als der Film, den sie ankuendigt. Schmaler
   gefasst bleibt sie ein Objekt IM Raum statt der Raum selbst. */
@media (max-width:600px){
  #boot .fpv-mount{width:min(66vw,272px)}
}
/* Wer keine Bewegung will, bekommt gar keinen Vorhang - nicht einen
   stillstehenden. Der Showreel startet dann direkt. */
@media (prefers-reduced-motion:reduce){
  #boot{display:none!important}
}
/* Derselbe Fall aus einem anderen Grund: der Vorhang ist die Ankunft auf der
   Seite und gehoert dem ersten Eindruck. Wer neu laedt oder zurueckkommt, ist
   schon da - dann waere er kein Auftakt mehr, sondern eine Sperre vor der
   Stelle, an der man gerade war. Gesetzt wird die Klasse im Kopf der Seite,
   noch bevor hier etwas gezeichnet wird. */
html.kein-vorhang #boot{display:none!important}
