Compare commits
3
Commits
fc902768a1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ab41dd927e | ||
|
|
70c0918ce6 | ||
|
|
ff41ed120f |
@@ -0,0 +1 @@
|
||||
https://Lago:3aa251da1ae9baed184c38dacd54efc58c98cfa8@git.lago.dev
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2,6 +2,16 @@
|
||||
|
||||
A compact field guide for anyone (human or AI) making changes to this stack. Skim this first.
|
||||
|
||||
## 0. Operating mode for agents
|
||||
|
||||
When working in this repository, act as an orchestrator rather than a single-threaded implementer:
|
||||
|
||||
1. Always make a short plan before changing code or configuration.
|
||||
2. Delegate both targeted exploration and targeted implementation work to local models when available; the current default is Qwen 3.6 27B.
|
||||
3. Do not treat delegation as optional for substantive work: research, code changes, refactors, and test updates should be routed through an agent first, then reviewed by the orchestrator.
|
||||
4. Review delegated output critically, then apply, refine, or reject the result yourself.
|
||||
5. Keep final responsibility for correctness, verification, and repo consistency in the orchestrating agent.
|
||||
|
||||
---
|
||||
|
||||
## 1. The deployment model
|
||||
|
||||
@@ -206,7 +206,7 @@ Before going live, verify:
|
||||
|
||||
1. **Premium Quality**: "Handverlesene Premium-Sportwagen"
|
||||
2. **Transparency**: "Faire Kaution, transparent, sofort startklar"
|
||||
3. **Accessibility**: "24/7 Support, Vollkasko, kein Überziehen"
|
||||
3. **Accessibility**: "Vollkasko, kein Überziehen"
|
||||
4. **Local Expertise**: "Die beste Sportwagenvermietung in der Steiermark"
|
||||
|
||||
These messages should be reinforced across:
|
||||
|
||||
+5
-1
@@ -54,7 +54,11 @@
|
||||
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
|
||||
<span>MC Cars</span>
|
||||
</a>
|
||||
<button class="menu-toggle" aria-label="Menü">☰</button>
|
||||
<button class="menu-toggle" type="button" aria-label="Menü">
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
</button>
|
||||
<nav class="main-nav" aria-label="Hauptnavigation">
|
||||
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
|
||||
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
|
||||
|
||||
@@ -51,7 +51,11 @@
|
||||
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
|
||||
<span>MC Cars</span>
|
||||
</a>
|
||||
<button class="menu-toggle" aria-label="Menü">☰</button>
|
||||
<button class="menu-toggle" type="button" aria-label="Menü">
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
</button>
|
||||
<nav class="main-nav" aria-label="Hauptnavigation">
|
||||
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
|
||||
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
|
||||
|
||||
@@ -51,7 +51,11 @@
|
||||
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
|
||||
<span>MC Cars</span>
|
||||
</a>
|
||||
<button class="menu-toggle" aria-label="Menü">☰</button>
|
||||
<button class="menu-toggle" type="button" aria-label="Menü">
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
</button>
|
||||
<nav class="main-nav" aria-label="Hauptnavigation">
|
||||
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
|
||||
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
|
||||
|
||||
+22
-7
@@ -109,7 +109,11 @@
|
||||
<span>MC Cars</span>
|
||||
</a>
|
||||
|
||||
<button class="menu-toggle" aria-label="Menü">☰</button>
|
||||
<button class="menu-toggle" type="button" aria-label="Menü">
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
</button>
|
||||
|
||||
<nav class="main-nav" aria-label="Hauptnavigation">
|
||||
<a href="#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
|
||||
@@ -136,7 +140,6 @@
|
||||
<div class="hero-stats">
|
||||
<div><strong data-i18n="statDeposit">Faire Kaution</strong><span>Fair Deposit</span></div>
|
||||
<div><strong id="statCarsCount">–</strong><span id="statCarsLabel" data-i18n="statCar">Fahrzeug</span></div>
|
||||
<div><strong>24/7</strong><span data-i18n="statSupport">Support</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -215,7 +218,7 @@
|
||||
<div class="bpf-main">
|
||||
<!-- Step 1: Vehicle & Time -->
|
||||
<div class="bpf-panel" id="bpfStep1">
|
||||
<h3 class="bpf-panel-title">🚗 <span data-i18n="stepVehicleTime">Fahrzeug & Zeitraum</span></h3>
|
||||
<h3 class="bpf-panel-title"><span data-i18n="stepVehicleTime">Fahrzeug & Zeitraum</span></h3>
|
||||
|
||||
<div class="bpf-field">
|
||||
<label for="bpfCar" id="bpfCarLabel" data-i18n="bpfVehicle">Fahrzeug</label>
|
||||
@@ -283,7 +286,7 @@
|
||||
|
||||
<!-- Step 2: Contact -->
|
||||
<div class="bpf-panel" id="bpfStep2" style="display:none;">
|
||||
<h3 class="bpf-panel-title">📋 <span data-i18n="stepContact">Kontaktdaten</span></h3>
|
||||
<h3 class="bpf-panel-title"><span data-i18n="stepContact">Kontaktdaten</span></h3>
|
||||
|
||||
<div class="bpf-field">
|
||||
<label data-i18n="fieldName">Name</label>
|
||||
@@ -312,13 +315,19 @@
|
||||
|
||||
<!-- Step 3: ID Verification -->
|
||||
<div class="bpf-panel" id="bpfStep3" style="display:none;">
|
||||
<h3 class="bpf-panel-title">🔐 <span data-i18n="stepVerification">ID-Verifizierung</span></h3>
|
||||
<h3 class="bpf-panel-title"><span data-i18n="stepVerification">ID-Verifizierung</span></h3>
|
||||
<p class="muted" style="margin-bottom:1.5rem;">Bitte laden Sie einen gültigen Ausweis sowie einen aktuellen Lohnzettel / Gehaltsnachweis hoch.</p>
|
||||
|
||||
<div class="bpf-field">
|
||||
<label data-i18n="bpfIdUpload">Ausweis / Führerschein *</label>
|
||||
<div class="bpf-upload-box" id="uploadId">
|
||||
<span class="bpf-upload-icon">⬆</span>
|
||||
<span class="bpf-upload-icon" aria-hidden="true">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M12 17V5"></path>
|
||||
<path d="M7 10l5-5 5 5"></path>
|
||||
<path d="M5 19h14"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span data-i18n="bpfClickUpload">Klicken zum Hochladen</span>
|
||||
<span class="muted" data-i18n="bpfUploadHint">PDF, JPG, PNG (max. 10 MB)</span>
|
||||
<input type="file" accept="image/*,.pdf" class="bpf-file-input" id="bpfFileId" />
|
||||
@@ -329,7 +338,13 @@
|
||||
<div class="bpf-field">
|
||||
<label data-i18n="bpfIncomeUpload">Lohnzettel / Gehaltsnachweis (optional)</label>
|
||||
<div class="bpf-upload-box" id="uploadIncome">
|
||||
<span class="bpf-upload-icon">⬆</span>
|
||||
<span class="bpf-upload-icon" aria-hidden="true">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M12 17V5"></path>
|
||||
<path d="M7 10l5-5 5 5"></path>
|
||||
<path d="M5 19h14"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span data-i18n="bpfClickUpload">Klicken zum Hochladen</span>
|
||||
<span class="muted" data-i18n="bpfUploadHint">PDF, JPG, PNG (max. 10 MB)</span>
|
||||
<input type="file" accept="image/*,.pdf" class="bpf-file-input" id="bpfFileIncome" />
|
||||
|
||||
@@ -54,7 +54,11 @@
|
||||
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
|
||||
<span>MC Cars</span>
|
||||
</a>
|
||||
<button class="menu-toggle" aria-label="Menü">☰</button>
|
||||
<button class="menu-toggle" type="button" aria-label="Menü">
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
<span class="menu-toggle-bar" aria-hidden="true"></span>
|
||||
</button>
|
||||
<nav class="main-nav" aria-label="Hauptnavigation">
|
||||
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
|
||||
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
|
||||
|
||||
+28
-3
@@ -189,8 +189,20 @@ section { padding: 5rem 0; }
|
||||
border: 1px solid var(--line);
|
||||
color: var(--text);
|
||||
border-radius: 8px;
|
||||
padding: 0.4rem 0.75rem;
|
||||
padding: 0.55rem 0.65rem;
|
||||
cursor: pointer;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.22rem;
|
||||
}
|
||||
|
||||
.menu-toggle-bar {
|
||||
display: block;
|
||||
width: 1rem;
|
||||
height: 2px;
|
||||
border-radius: 999px;
|
||||
background: currentColor;
|
||||
}
|
||||
|
||||
/* ---------------- Buttons ---------------- */
|
||||
@@ -806,12 +818,20 @@ select:focus, input:focus, textarea:focus {
|
||||
background: var(--accent); color: #0b0c10; border-color: var(--accent);
|
||||
font-weight: 600;
|
||||
}
|
||||
.bpf-step.done { border-color: var(--ok); color: var(--ok); }
|
||||
.bpf-step.done {
|
||||
border-color: rgba(196, 138, 66, 0.65);
|
||||
background: rgba(196, 138, 66, 0.06);
|
||||
color: var(--accent-strong);
|
||||
}
|
||||
.bpf-step-num {
|
||||
display: inline-grid; place-items: center;
|
||||
width: 1.5rem; height: 1.5rem; border-radius: 50%;
|
||||
background: rgba(255,255,255,0.1); font-size: 0.75rem; font-weight: 700;
|
||||
}
|
||||
.bpf-step.done .bpf-step-num {
|
||||
background: rgba(196, 138, 66, 0.16);
|
||||
color: var(--accent-strong);
|
||||
}
|
||||
.bpf-step.active .bpf-step-num { background: rgba(0,0,0,0.2); color: #0b0c10; }
|
||||
.bpf-step-arrow { color: var(--muted); font-size: 1.2rem; }
|
||||
|
||||
@@ -867,7 +887,12 @@ select:focus, input:focus, textarea:focus {
|
||||
min-height: 120px;
|
||||
}
|
||||
.bpf-upload-box:hover { border-color: var(--accent); background: rgba(196,138,66,0.04); }
|
||||
.bpf-upload-icon { font-size: 1.5rem; }
|
||||
.bpf-upload-icon {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--accent-strong);
|
||||
}
|
||||
.bpf-file-input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }
|
||||
.bpf-file-name { font-size: 0.82rem; color: var(--ok); margin-top: 0.3rem; min-height: 1.2rem; }
|
||||
|
||||
|
||||
@@ -73,6 +73,10 @@ test.describe('Booking Flow End-to-End', () => {
|
||||
await page.locator('#bpfNext1').click();
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
const completedStep = page.locator('.bpf-step[data-step="1"]');
|
||||
await expect(completedStep).toHaveClass(/done/);
|
||||
expect(await completedStep.evaluate((el) => getComputedStyle(el).color)).toBe('rgb(224, 165, 91)');
|
||||
|
||||
// Step 2: Fill contact info
|
||||
await expect(page.locator('#bpfName')).toBeVisible();
|
||||
await page.locator('#bpfName').fill(testNames[index]);
|
||||
@@ -101,6 +105,12 @@ test.describe('Booking Flow End-to-End', () => {
|
||||
await page.waitForLoadState('domcontentloaded');
|
||||
await page.waitForTimeout(2000);
|
||||
|
||||
const panelTitles = await page.locator('.bpf-panel-title').allTextContents();
|
||||
for (const title of panelTitles) {
|
||||
expect(title).not.toMatch(/[🚗📋🔐⬆☰]/u);
|
||||
}
|
||||
await expect(page.locator('.bpf-upload-icon svg')).toHaveCount(2);
|
||||
|
||||
// Booking 1: 1 Tag
|
||||
await submitBooking(page, 'day', 0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user