3 Commits
Author SHA1 Message Date
Lago ab41dd927e Remove public emoji UI and unify booking accent 2026-07-11 12:43:42 +02:00
Lago 70c0918ce6 Merge pull request 'feat: remove 24/7 support mention per Marco's request' (#6) from feature/remove-24-7-support into main
Reviewed-on: #6
2026-06-19 13:33:52 +02:00
Lago ff41ed120f feat: remove 24/7 support mention per Marco's request
- Removed '24/7 Support' stat from hero-stats section in frontend/index.html
- Updated SEO-IMPLEMENTATION-SUMMARY.md to drop 24/7 reference from Accessibility messaging
- Existing test (marco-changes.spec.js) already validates this change
2026-06-19 13:06:51 +02:00
13 changed files with 92 additions and 15 deletions
+1
View File
@@ -0,0 +1 @@
https://Lago:3aa251da1ae9baed184c38dacd54efc58c98cfa8@git.lago.dev
Binary file not shown.
Binary file not shown.
Binary file not shown.
+10
View File
@@ -2,6 +2,16 @@
A compact field guide for anyone (human or AI) making changes to this stack. Skim this first. 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 ## 1. The deployment model
+1 -1
View File
@@ -206,7 +206,7 @@ Before going live, verify:
1. **Premium Quality**: "Handverlesene Premium-Sportwagen" 1. **Premium Quality**: "Handverlesene Premium-Sportwagen"
2. **Transparency**: "Faire Kaution, transparent, sofort startklar" 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" 4. **Local Expertise**: "Die beste Sportwagenvermietung in der Steiermark"
These messages should be reinforced across: These messages should be reinforced across:
+5 -1
View File
@@ -54,7 +54,11 @@
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" /> <img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
<span>MC Cars</span> <span>MC Cars</span>
</a> </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"> <nav class="main-nav" aria-label="Hauptnavigation">
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a> <a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a> <a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
+5 -1
View File
@@ -51,7 +51,11 @@
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" /> <img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
<span>MC Cars</span> <span>MC Cars</span>
</a> </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"> <nav class="main-nav" aria-label="Hauptnavigation">
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a> <a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a> <a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
+5 -1
View File
@@ -51,7 +51,11 @@
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" /> <img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
<span>MC Cars</span> <span>MC Cars</span>
</a> </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"> <nav class="main-nav" aria-label="Hauptnavigation">
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a> <a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a> <a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
+22 -7
View File
@@ -109,7 +109,11 @@
<span>MC Cars</span> <span>MC Cars</span>
</a> </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"> <nav class="main-nav" aria-label="Hauptnavigation">
<a href="#fahrzeuge" data-i18n="navCars">Fahrzeuge</a> <a href="#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
@@ -136,7 +140,6 @@
<div class="hero-stats"> <div class="hero-stats">
<div><strong data-i18n="statDeposit">Faire Kaution</strong><span>Fair Deposit</span></div> <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 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>
</div> </div>
</section> </section>
@@ -215,7 +218,7 @@
<div class="bpf-main"> <div class="bpf-main">
<!-- Step 1: Vehicle & Time --> <!-- Step 1: Vehicle & Time -->
<div class="bpf-panel" id="bpfStep1"> <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"> <div class="bpf-field">
<label for="bpfCar" id="bpfCarLabel" data-i18n="bpfVehicle">Fahrzeug</label> <label for="bpfCar" id="bpfCarLabel" data-i18n="bpfVehicle">Fahrzeug</label>
@@ -283,7 +286,7 @@
<!-- Step 2: Contact --> <!-- Step 2: Contact -->
<div class="bpf-panel" id="bpfStep2" style="display:none;"> <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"> <div class="bpf-field">
<label data-i18n="fieldName">Name</label> <label data-i18n="fieldName">Name</label>
@@ -312,13 +315,19 @@
<!-- Step 3: ID Verification --> <!-- Step 3: ID Verification -->
<div class="bpf-panel" id="bpfStep3" style="display:none;"> <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> <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"> <div class="bpf-field">
<label data-i18n="bpfIdUpload">Ausweis / Führerschein *</label> <label data-i18n="bpfIdUpload">Ausweis / Führerschein *</label>
<div class="bpf-upload-box" id="uploadId"> <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 data-i18n="bpfClickUpload">Klicken zum Hochladen</span>
<span class="muted" data-i18n="bpfUploadHint">PDF, JPG, PNG (max. 10 MB)</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" /> <input type="file" accept="image/*,.pdf" class="bpf-file-input" id="bpfFileId" />
@@ -329,7 +338,13 @@
<div class="bpf-field"> <div class="bpf-field">
<label data-i18n="bpfIncomeUpload">Lohnzettel / Gehaltsnachweis (optional)</label> <label data-i18n="bpfIncomeUpload">Lohnzettel / Gehaltsnachweis (optional)</label>
<div class="bpf-upload-box" id="uploadIncome"> <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 data-i18n="bpfClickUpload">Klicken zum Hochladen</span>
<span class="muted" data-i18n="bpfUploadHint">PDF, JPG, PNG (max. 10 MB)</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" /> <input type="file" accept="image/*,.pdf" class="bpf-file-input" id="bpfFileIncome" />
+5 -1
View File
@@ -54,7 +54,11 @@
<img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" /> <img class="logo-icon" src="/images/MC-Cars-Logo.svg" alt="MC Cars Logo" onerror="this.style.display='none'" />
<span>MC Cars</span> <span>MC Cars</span>
</a> </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"> <nav class="main-nav" aria-label="Hauptnavigation">
<a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a> <a href="/#fahrzeuge" data-i18n="navCars">Fahrzeuge</a>
<a href="/#stimmen" data-i18n="navReviews">Stimmen</a> <a href="/#stimmen" data-i18n="navReviews">Stimmen</a>
+28 -3
View File
@@ -189,8 +189,20 @@ section { padding: 5rem 0; }
border: 1px solid var(--line); border: 1px solid var(--line);
color: var(--text); color: var(--text);
border-radius: 8px; border-radius: 8px;
padding: 0.4rem 0.75rem; padding: 0.55rem 0.65rem;
cursor: pointer; 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 ---------------- */ /* ---------------- Buttons ---------------- */
@@ -806,12 +818,20 @@ select:focus, input:focus, textarea:focus {
background: var(--accent); color: #0b0c10; border-color: var(--accent); background: var(--accent); color: #0b0c10; border-color: var(--accent);
font-weight: 600; 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 { .bpf-step-num {
display: inline-grid; place-items: center; display: inline-grid; place-items: center;
width: 1.5rem; height: 1.5rem; border-radius: 50%; width: 1.5rem; height: 1.5rem; border-radius: 50%;
background: rgba(255,255,255,0.1); font-size: 0.75rem; font-weight: 700; 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.active .bpf-step-num { background: rgba(0,0,0,0.2); color: #0b0c10; }
.bpf-step-arrow { color: var(--muted); font-size: 1.2rem; } .bpf-step-arrow { color: var(--muted); font-size: 1.2rem; }
@@ -867,7 +887,12 @@ select:focus, input:focus, textarea:focus {
min-height: 120px; min-height: 120px;
} }
.bpf-upload-box:hover { border-color: var(--accent); background: rgba(196,138,66,0.04); } .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-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; } .bpf-file-name { font-size: 0.82rem; color: var(--ok); margin-top: 0.3rem; min-height: 1.2rem; }
+10
View File
@@ -73,6 +73,10 @@ test.describe('Booking Flow End-to-End', () => {
await page.locator('#bpfNext1').click(); await page.locator('#bpfNext1').click();
await page.waitForTimeout(300); 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 // Step 2: Fill contact info
await expect(page.locator('#bpfName')).toBeVisible(); await expect(page.locator('#bpfName')).toBeVisible();
await page.locator('#bpfName').fill(testNames[index]); await page.locator('#bpfName').fill(testNames[index]);
@@ -101,6 +105,12 @@ test.describe('Booking Flow End-to-End', () => {
await page.waitForLoadState('domcontentloaded'); await page.waitForLoadState('domcontentloaded');
await page.waitForTimeout(2000); 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 // Booking 1: 1 Tag
await submitBooking(page, 'day', 0); await submitBooking(page, 'day', 0);