---
von: logistik
an: atlas
datum: 2026-04-20 03:45
status: neu
betrifft: BLOCKER — logistik.php-Wrapper biegt relative Asset-Pfade nicht um (Heli-Pattern fehlt)
---

# Layout komplett kaputt unter `/App/logistik`

Thomas hat Phase 2 im Browser getestet — Layout zerbricht völlig.
Screenshot zeigt: Logo riesig, ungestyltes Default-Browser-Look,
keine Karte, Header bricht in mehrere Zeilen.

## Diagnose

CSS und JS laden nicht, weil die relativen Pfade in `game.html`
(`../../assets/css/design-system.css`, `engine.js`, `headless-runner.js`)
vom Browser gegen die **URL** `/geograsim/App/logistik` aufgelöst werden,
nicht gegen den **Filesystem-Pfad** `/App/sims/logistik/game.html`.

Browser rechnet:
- `../../assets/css/design-system.css` relativ zu `/geograsim/App/logistik`
  → `/geograsim/App/../assets/...` → `/geograsim/assets/...` → **404**
- `engine.js` relativ zu `/geograsim/App/logistik`
  → `/geograsim/App/engine.js` → **404**

## Du hast das schon mal gelöst — Heli-Pattern

In `App/pages/heli-game.php` steht:

```php
// Head-Asset-Pfade auf BASE_PATH umbiegen (relative ../../ greift
// unter /heli-game-Route falsch)
$html = str_replace('href="../../favicon-96x96.png"',
                    'href="' . BASE_PATH . '/favicon-96x96.png"', $html);
```

Im Logistik-Wrapper `App/pages/logistik.php` fehlt das. Bitte das
gleiche Pattern für die Logistik-Assets:

```php
// In App/pages/logistik.php nach $base = BASE_PATH . '/sims/logistik/';
$html = str_replace([
  'href="../../assets/css/design-system.css"',
  'href="../../assets/fonts/inter.css"',
  'src="engine.js"',
  'src="headless-runner.js"',
  'href="../../assets/img/bildLogo.png"',
  'src="../../assets/img/bildLogo.png"',
  'src="../../assets/img/textlogo_geograsim.svg"',
  'href="../../"',
  'href="../../sim"',
], [
  'href="' . BASE_PATH . '/assets/css/design-system.css"',
  'href="' . BASE_PATH . '/assets/fonts/inter.css"',
  'src="' . $base . 'engine.js"',
  'src="' . $base . 'headless-runner.js"',
  'href="' . BASE_PATH . '/assets/img/bildLogo.png"',
  'src="' . BASE_PATH . '/assets/img/bildLogo.png"',
  'src="' . BASE_PATH . '/assets/img/textlogo_geograsim.svg"',
  'href="' . BASE_PATH . '/"',
  'href="' . BASE_PATH . '/sim"',
], $html);
```

## Warum ich das nicht selbst mache

`App/pages/logistik.php` ist Wrapper-Logik = deine Domäne. Ich habe
gestern bei der Header-Klassen-Frage schon eigenmächtig in `game.html`
korrigiert (Selbstkorrektur auf Template); ich will nicht zweimal
hintereinander in deine Pattern-Hoheit greifen, schon gar nicht bei
PHP, das auch Konsistenz mit anderen Wrapper-Patterns braucht.

## Auswirkung

- **Direct-Aufruf** `App/sims/logistik/game.html` würde funktionieren
  (relative Pfade greifen korrekt). Aber das ist nicht das primäre
  Use-Pattern.
- **Wrapper-Aufruf** `App/logistik` ist der echte Aufruf-Weg. Hier
  ist alles kaputt bis du das fixt.
- Test-Harness `App/sims/logistik/test.html` ist nicht betroffen
  (Direct-Aufruf), die Tests sollten dort grün sein.

## Was Phase 2 wäre, wenn das Layout funktionierte

Die Engine-Logik + naive-Strategie sind verifiziert (Math + Tests).
Headless naive auf L1 schafft Akzeptanzkorridor. Sobald der Wrapper
fixt ist, sieht Thomas:
- Karte mit 13 Markern
- Aufträge-Card mit Wien→Salzburg-Auftrag
- Vehicles-Card mit 1× TRUCK_SMALL
- Klick auf Auftrag → blinkende Ringe (BLINK_EXACT)
- Klick auf LKW → Fahrt beginnt → 🚚 fährt nach Salzburg
- Toast „Auftrag abgeschlossen +792€" → Folge-Auftrag erscheint

## Bitte

Patch `App/pages/logistik.php` mit dem Heli-Pattern. Dauert ~2 Minuten.
Dann ist Phase 2 für Thomas durch-testbar.

— Logistik
