Compare commits
No commits in common. "b74dd3744e5cf3f5f3e0d560c52f95cad7fd4252" and "f2507033c3f475b00c08d059270a4715f614e7dd" have entirely different histories.
b74dd3744e
...
f2507033c3
1
.gitignore
vendored
|
|
@ -1,3 +1,2 @@
|
||||||
node_modules/
|
node_modules/
|
||||||
.claude/
|
.claude/
|
||||||
images/fotowebsite/
|
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,10 @@ Tischlerei-Staffenberger/
|
||||||
│ ├── build.js # Baut templates/ + partials/ zu den Root-HTML-Dateien
|
│ ├── build.js # Baut templates/ + partials/ zu den Root-HTML-Dateien
|
||||||
│ └── optimize-images.js # Erzeugt WebP/JPEG-Varianten aus images/fotowebsite/
|
│ └── optimize-images.js # Erzeugt WebP/JPEG-Varianten aus images/fotowebsite/
|
||||||
└── images/
|
└── images/
|
||||||
├── fotowebsite/ # Original-Fotos (Rohmaterial, unkomprimiert) – nicht in git, siehe unten
|
├── fotowebsite/ # Original-Fotos (Rohmaterial, unkomprimiert)
|
||||||
└── optimized/ # Generierte WebP/JPEG-Varianten (von optimize-images.js)
|
└── optimized/ # Generierte WebP/JPEG-Varianten (von optimize-images.js)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Hinweis zu `images/fotowebsite/`:** Die unkomprimierten Rohfotos (oft mehrere MB pro
|
|
||||||
Bild) sind bewusst nicht in git getrackt (`.gitignore`), um das Repository klein zu
|
|
||||||
halten – ausgeliefert wird ohnehin nur `images/optimized/`. Rohfotos bitte separat
|
|
||||||
sichern (z. B. externe Festplatte/Cloud-Speicher), bevor sie lokal gelöscht werden.
|
|
||||||
|
|
||||||
### Seiten bearbeiten (Templates + Build)
|
### Seiten bearbeiten (Templates + Build)
|
||||||
|
|
||||||
Header und Footer sind identisch auf allen Seiten und liegen daher nur einmal in
|
Header und Footer sind identisch auf allen Seiten und liegen daher nur einmal in
|
||||||
|
|
@ -98,7 +93,7 @@ Von dort aus funktionieren alle Links, Schriftarten und Platzhalter-Bilder.
|
||||||
|-------------|--------|
|
|-------------|--------|
|
||||||
| **Start** | Banner, Willkommenstext, Über mich, Leistungen (Möbel, Küchen, Außen), CTA „Kontakt“. |
|
| **Start** | Banner, Willkommenstext, Über mich, Leistungen (Möbel, Küchen, Außen), CTA „Kontakt“. |
|
||||||
| **Bilder** | Galerie mit Filter: Alle / Küche / Außenbereich / Sonderanfertigung. |
|
| **Bilder** | Galerie mit Filter: Alle / Küche / Außenbereich / Sonderanfertigung. |
|
||||||
| **Shop** | Leer bis Artikel ergänzt werden (siehe `shop-item-template.html`); jede Karte zeigt Bild, Beschreibung, Preis und Button „Anfragen” (öffnet E-Mail). |
|
| **Shop** | 6 Beispielprodukte mit Bild, Beschreibung, Preis und Button „Anfragen“ (öffnet E-Mail). |
|
||||||
| **Impressum** | Anbieter, Kontakt, USt-ID, Verantwortlichkeit, Haftungsausschluss (Platzhalter). |
|
| **Impressum** | Anbieter, Kontakt, USt-ID, Verantwortlichkeit, Haftungsausschluss (Platzhalter). |
|
||||||
|
|
||||||
Navigation ist auf allen Seiten gleich; die aktuelle Seite wird hervorgehoben.
|
Navigation ist auf allen Seiten gleich; die aktuelle Seite wird hervorgehoben.
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
Traditional, warm, responsive design
|
Traditional, warm, responsive design
|
||||||
============================================ */
|
============================================ */
|
||||||
|
|
||||||
/* Google Fonts are loaded via <link rel="preconnect"/stylesheet"> in each page's <head> */
|
/* --- Google Fonts --- */
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap');
|
||||||
|
|
||||||
/* --- CSS Custom Properties --- */
|
/* --- CSS Custom Properties --- */
|
||||||
:root {
|
:root {
|
||||||
|
|
|
||||||
BIN
images/fotowebsite/banner.jpg
Executable file
|
After Width: | Height: | Size: 19 MiB |
BIN
images/fotowebsite/custom/FotoPosch 430.jpg
Normal file
|
After Width: | Height: | Size: 6 MiB |
BIN
images/fotowebsite/custom/FotoPosch 431.jpg
Normal file
|
After Width: | Height: | Size: 5 MiB |
BIN
images/fotowebsite/custom/FotoPosch 432.jpg
Normal file
|
After Width: | Height: | Size: 4.3 MiB |
BIN
images/fotowebsite/custom/FotoPosch 433.jpg
Normal file
|
After Width: | Height: | Size: 5.4 MiB |
BIN
images/fotowebsite/custom/FotoPosch 434.jpg
Normal file
|
After Width: | Height: | Size: 4.8 MiB |
BIN
images/fotowebsite/custom/FotoPosch 435.jpg
Normal file
|
After Width: | Height: | Size: 4.7 MiB |
BIN
images/fotowebsite/custom/FotoPosch029.jpg
Normal file
|
After Width: | Height: | Size: 5.7 MiB |
BIN
images/fotowebsite/custom/FotoPosch103.jpg
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 307.jpg
Normal file
|
After Width: | Height: | Size: 4 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 317.jpg
Normal file
|
After Width: | Height: | Size: 5.4 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 318.jpg
Normal file
|
After Width: | Height: | Size: 5.2 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 419.jpg
Normal file
|
After Width: | Height: | Size: 5.5 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 420.jpg
Normal file
|
After Width: | Height: | Size: 3.6 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 421.jpg
Normal file
|
After Width: | Height: | Size: 5 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 422.jpg
Normal file
|
After Width: | Height: | Size: 5.4 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 423.jpg
Normal file
|
After Width: | Height: | Size: 5 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 424.jpg
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 425.jpg
Normal file
|
After Width: | Height: | Size: 4.7 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 426.jpg
Normal file
|
After Width: | Height: | Size: 5.5 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 427.jpg
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
images/fotowebsite/kitchen/FotoPosch 428.jpg
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 101.jpg
Normal file
|
After Width: | Height: | Size: 4.8 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 102.jpg
Normal file
|
After Width: | Height: | Size: 5.6 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 108.jpg
Normal file
|
After Width: | Height: | Size: 5.6 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 109.jpg
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 110.jpg
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 111.jpg
Normal file
|
After Width: | Height: | Size: 5.1 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 112.jpg
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 204.jpg
Normal file
|
After Width: | Height: | Size: 4.9 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 205.jpg
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 213.jpg
Normal file
|
After Width: | Height: | Size: 4.8 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 214.jpg
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 215.jpg
Normal file
|
After Width: | Height: | Size: 5 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 216.jpg
Normal file
|
After Width: | Height: | Size: 3.9 MiB |
BIN
images/fotowebsite/outdoor/FotoPosch 306.jpg
Normal file
|
After Width: | Height: | Size: 5.3 MiB |
|
|
@ -10,11 +10,7 @@
|
||||||
<meta property="og:site_name" content="Tischlerei Staffenberger">
|
<meta property="og:site_name" content="Tischlerei Staffenberger">
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Impressum – Tischlerei Staffenberger">
|
<meta property="og:title" content="Impressum – Tischlerei Staffenberger">
|
||||||
<meta property="og:description" content="Impressum der Tischlerei Staffenberger – Kontakt- und Anbieterinformationen.">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -69,7 +65,7 @@
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h2>Umsatzsteuer-Identifikationsnummer (UID)</h2>
|
<h2>Umsatzsteuer-Identifikationsnummer (UID)</h2>
|
||||||
<p>ATU52635509</p>
|
<p>Liegt noch nicht vor und wird ergänzt, sobald vorhanden.</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Tischlerei Staffenberger – Möbel & Küchen nach Maß">
|
<meta property="og:title" content="Tischlerei Staffenberger – Möbel & Küchen nach Maß">
|
||||||
<meta property="og:description" content="Möbel, Küchen und Objekte für Haus und Garten nach Maß – handgefertigt in einem Ein-Mann-Betrieb in Österreich.">
|
<meta property="og:description" content="Möbel, Küchen und Objekte für Haus und Garten nach Maß – handgefertigt in einem Ein-Mann-Betrieb in Österreich.">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,6 @@
|
||||||
var requestBtns = document.querySelectorAll('.product-card .btn[data-product]');
|
var requestBtns = document.querySelectorAll('.product-card .btn[data-product]');
|
||||||
requestBtns.forEach(function (btn) {
|
requestBtns.forEach(function (btn) {
|
||||||
btn.addEventListener('click', function (e) {
|
btn.addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
|
||||||
var product = this.getAttribute('data-product');
|
var product = this.getAttribute('data-product');
|
||||||
if (product) {
|
if (product) {
|
||||||
// Open mail with subject line (no real checkout) – replace email with your address
|
// Open mail with subject line (no real checkout) – replace email with your address
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Bilder – Tischlerei Staffenberger">
|
<meta property="og:title" content="Bilder – Tischlerei Staffenberger">
|
||||||
<meta property="og:description" content="Referenzen und Bilder: Küchen, Außenbereich und Sonderanfertigungen aus eigener Werkstatt.">
|
<meta property="og:description" content="Referenzen und Bilder: Küchen, Außenbereich und Sonderanfertigungen aus eigener Werkstatt.">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -67,20 +67,9 @@ async function main() {
|
||||||
|
|
||||||
console.log(`[${inputSubdir}] – ${files.length} images`);
|
console.log(`[${inputSubdir}] – ${files.length} images`);
|
||||||
|
|
||||||
const usedNames = new Map(); // baseName -> source filename, to catch collisions
|
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const inputPath = path.join(inputDir, file);
|
const inputPath = path.join(inputDir, file);
|
||||||
const baseName = safeName(file);
|
const baseName = safeName(file);
|
||||||
|
|
||||||
const collidesWith = usedNames.get(baseName);
|
|
||||||
if (collidesWith) {
|
|
||||||
throw new Error(
|
|
||||||
`Filename collision in ${inputSubdir}: "${file}" and "${collidesWith}" both normalize to "${baseName}" ` +
|
|
||||||
`and would overwrite each other's optimized output. Rename one of the source files and re-run.`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
usedNames.set(baseName, file);
|
|
||||||
|
|
||||||
await processImage(inputPath, outputDir, baseName, GALLERY_SIZES);
|
await processImage(inputPath, outputDir, baseName, GALLERY_SIZES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Shop – Tischlerei Staffenberger">
|
<meta property="og:title" content="Shop – Tischlerei Staffenberger">
|
||||||
<meta property="og:description" content="Kleine Serie und Einzelstücke zum Anfragen – handgefertigte Möbel nach Maß.">
|
<meta property="og:description" content="Kleine Serie und Einzelstücke zum Anfragen – handgefertigte Möbel nach Maß.">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,7 @@
|
||||||
<meta property="og:site_name" content="Tischlerei Staffenberger">
|
<meta property="og:site_name" content="Tischlerei Staffenberger">
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Impressum – Tischlerei Staffenberger">
|
<meta property="og:title" content="Impressum – Tischlerei Staffenberger">
|
||||||
<meta property="og:description" content="Impressum der Tischlerei Staffenberger – Kontakt- und Anbieterinformationen.">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
@ -51,7 +47,7 @@
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h2>Umsatzsteuer-Identifikationsnummer (UID)</h2>
|
<h2>Umsatzsteuer-Identifikationsnummer (UID)</h2>
|
||||||
<p>ATU52635509</p>
|
<p>Liegt noch nicht vor und wird ergänzt, sobald vorhanden.</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Tischlerei Staffenberger – Möbel & Küchen nach Maß">
|
<meta property="og:title" content="Tischlerei Staffenberger – Möbel & Küchen nach Maß">
|
||||||
<meta property="og:description" content="Möbel, Küchen und Objekte für Haus und Garten nach Maß – handgefertigt in einem Ein-Mann-Betrieb in Österreich.">
|
<meta property="og:description" content="Möbel, Küchen und Objekte für Haus und Garten nach Maß – handgefertigt in einem Ein-Mann-Betrieb in Österreich.">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Bilder – Tischlerei Staffenberger">
|
<meta property="og:title" content="Bilder – Tischlerei Staffenberger">
|
||||||
<meta property="og:description" content="Referenzen und Bilder: Küchen, Außenbereich und Sonderanfertigungen aus eigener Werkstatt.">
|
<meta property="og:description" content="Referenzen und Bilder: Küchen, Außenbereich und Sonderanfertigungen aus eigener Werkstatt.">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@
|
||||||
<meta property="og:locale" content="de_AT">
|
<meta property="og:locale" content="de_AT">
|
||||||
<meta property="og:title" content="Shop – Tischlerei Staffenberger">
|
<meta property="og:title" content="Shop – Tischlerei Staffenberger">
|
||||||
<meta property="og:description" content="Kleine Serie und Einzelstücke zum Anfragen – handgefertigte Möbel nach Maß.">
|
<meta property="og:description" content="Kleine Serie und Einzelstücke zum Anfragen – handgefertigte Möbel nach Maß.">
|
||||||
<meta property="og:image" content="https://www.tischlerei-staffenberger.at/images/optimized/banner-1920w.jpg">
|
<meta property="og:image" content="images/optimized/banner-1920w.jpg">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Source+Sans+3:wght@400;500;600&display=swap">
|
|
||||||
<link rel="stylesheet" href="css/style.css">
|
<link rel="stylesheet" href="css/style.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
||||||