Add PowerPoint generation improvements for Alimentari Piccolo

- Fix html2pptx Windows file path handling (file:/// URLs)
- Fix Italian flag diagonal (remove CSS rotation, use positioned rectangles)
- Add Chinese character background watermark (意)
- Add geometric pattern attempt (Art Deco style)
- Fix validation errors (text positioning, margins)
- Add backup slides directory
- Add build scripts and image resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
StillHammer 2025-12-03 11:21:54 +08:00
parent 3d09642576
commit 1d1d42b8d9
31 changed files with 1739 additions and 355 deletions

View File

@ -120,9 +120,21 @@ function validateTextBoxPosition(slideData, bodyDimensions) {
// Helper: Add background to slide // Helper: Add background to slide
async function addBackground(slideData, targetSlide, tmpDir) { async function addBackground(slideData, targetSlide, tmpDir) {
if (slideData.background.type === 'image' && slideData.background.path) { if (slideData.background.type === 'image' && slideData.background.path) {
let imagePath = slideData.background.path.startsWith('file://') let imagePath = slideData.background.path;
? slideData.background.path.replace('file://', '') if (imagePath.startsWith('file://')) {
: slideData.background.path; // Use URL to properly handle file:// paths on all platforms
try {
const url = new URL(imagePath);
imagePath = url.pathname;
// On Windows, pathname starts with / before drive letter, remove it
if (process.platform === 'win32' && /^\/[A-Z]:/.test(imagePath)) {
imagePath = imagePath.slice(1);
}
} catch (e) {
// Fallback to simple replace
imagePath = imagePath.replace('file://', '');
}
}
targetSlide.background = { path: imagePath }; targetSlide.background = { path: imagePath };
} else if (slideData.background.type === 'color' && slideData.background.value) { } else if (slideData.background.type === 'color' && slideData.background.value) {
targetSlide.background = { color: slideData.background.value }; targetSlide.background = { color: slideData.background.value };
@ -133,7 +145,21 @@ async function addBackground(slideData, targetSlide, tmpDir) {
function addElements(slideData, targetSlide, pres) { function addElements(slideData, targetSlide, pres) {
for (const el of slideData.elements) { for (const el of slideData.elements) {
if (el.type === 'image') { if (el.type === 'image') {
let imagePath = el.src.startsWith('file://') ? el.src.replace('file://', '') : el.src; let imagePath = el.src;
if (imagePath.startsWith('file://')) {
// Use URL to properly handle file:// paths on all platforms
try {
const url = new URL(imagePath);
imagePath = url.pathname;
// On Windows, pathname starts with / before drive letter, remove it
if (process.platform === 'win32' && /^\/[A-Z]:/.test(imagePath)) {
imagePath = imagePath.slice(1);
}
} catch (e) {
// Fallback to simple replace
imagePath = imagePath.replace('file://', '');
}
}
targetSlide.addImage({ targetSlide.addImage({
path: imagePath, path: imagePath,
x: el.position.x, x: el.position.x,

View File

@ -1,6 +1,7 @@
{ {
"dependencies": { "dependencies": {
"playwright": "^1.56.1", "playwright": "^1.56.1",
"pptxgenjs": "^4.0.1" "pptxgenjs": "^4.0.1",
"sharp": "^0.34.5"
} }
} }

View File

@ -56,11 +56,11 @@
.title-container { .title-container {
position: absolute; position: absolute;
top: 95pt; top: 80pt;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
background: #F8F8F8; background: #F8F8F8;
padding: 28pt 45pt; padding: 24pt 45pt;
border-radius: 15pt; border-radius: 15pt;
box-shadow: 0 8pt 25pt rgba(0, 0, 0, 0.15); box-shadow: 0 8pt 25pt rgba(0, 0, 0, 0.15);
border: 3pt solid #D4AF37; border: 3pt solid #D4AF37;
@ -363,7 +363,7 @@
.final-box { .final-box {
position: absolute; position: absolute;
bottom: 62pt; bottom: 90pt;
left: 30pt; left: 30pt;
right: 30pt; right: 30pt;
height: 46pt; height: 46pt;

View File

@ -0,0 +1,32 @@
const pptxgen = require('pptxgenjs');
const html2pptx = require('../../../.claude/skills/pptx/scripts/html2pptx.js');
const path = require('path');
async function generatePresentation() {
console.log('🍝 Génération Alimentari Piccolo PowerPoint...\n');
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9';
pptx.author = 'Alexis - Xiezuo Course';
pptx.title = 'Alimentari Piccolo - 意大利餐吧评价';
pptx.subject = '餐厅评价作业';
const htmlFile = path.join(__dirname, 'alimentari_piccolo.html');
try {
await html2pptx(htmlFile, pptx, { tmpDir: __dirname });
const outputPath = path.join(__dirname, '..', 'Alimentari_Piccolo.pptx');
await pptx.writeFile({ fileName: outputPath });
console.log(`✅ Présentation créée avec succès: ${outputPath}`);
} catch (error) {
console.error('❌ Erreur lors de la génération:', error.message);
if (error.stack) {
console.error(error.stack);
}
process.exit(1);
}
}
generatePresentation();

View File

@ -17,7 +17,7 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide1_title.html'), path.join(__dirname, 'slides/slide1_title.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Slide 2: Location // Slide 2: Location
@ -25,7 +25,7 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide2_location.html'), path.join(__dirname, 'slides/slide2_location.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Slide 3: Piadina // Slide 3: Piadina
@ -33,7 +33,7 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide3_piadina.html'), path.join(__dirname, 'slides/slide3_piadina.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Slide 4: Croquettes // Slide 4: Croquettes
@ -41,7 +41,7 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide4_croquettes.html'), path.join(__dirname, 'slides/slide4_croquettes.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Slide 5: Ambiance // Slide 5: Ambiance
@ -49,7 +49,7 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide5_ambiance.html'), path.join(__dirname, 'slides/slide5_ambiance.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Slide 6: Menu // Slide 6: Menu
@ -57,7 +57,7 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide6_menu.html'), path.join(__dirname, 'slides/slide6_menu.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Slide 7: Credits // Slide 7: Credits
@ -65,11 +65,12 @@ async function createPresentation() {
await html2pptx( await html2pptx(
path.join(__dirname, 'slides/slide7_credits.html'), path.join(__dirname, 'slides/slide7_credits.html'),
pptx, pptx,
{ tmpDir: '/tmp' } { tmpDir: path.join(__dirname, '_build') }
); );
// Save // Save
const outputFile = 'Alimentari_Piccolo_v3.pptx'; const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
const outputFile = `Alimentari_Piccolo_${timestamp}.pptx`;
await pptx.writeFile({ fileName: path.join(__dirname, outputFile) }); await pptx.writeFile({ fileName: path.join(__dirname, outputFile) });
console.log('\n✅ 演示文稿创建成功!'); console.log('\n✅ 演示文稿创建成功!');

View File

@ -0,0 +1,58 @@
const fs = require('fs');
const path = require('path');
const slidesDir = path.join(__dirname, 'slides');
const files = fs.readdirSync(slidesDir).filter(f => f.endsWith('.html') && f !== 'slide1_title.html');
const flagCSSFix = `/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}`;
files.forEach(file => {
const filePath = path.join(slidesDir, file);
let content = fs.readFileSync(filePath, 'utf8');
// Replace the old flag CSS with the new one
content = content.replace(
/\/\* Italian flag diagonal \*\/[\s\S]*?\.flag-red \{[\s\S]*?\}/,
flagCSSFix
);
// Remove the flag-diagonal wrapper div in HTML
content = content.replace(
/<div class="flag-diagonal">\s*<div class="flag-green"><\/div>\s*<div class="flag-white"><\/div>\s*<div class="flag-red"><\/div>\s*<\/div>/,
'<div class="flag-green"></div>\n <div class="flag-white"></div>\n <div class="flag-red"></div>'
);
fs.writeFileSync(filePath, content, 'utf8');
console.log(`✓ Fixed ${file}`);
});
console.log(`\n✅ Fixed ${files.length} slides`);

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -102,36 +88,101 @@ body {
letter-spacing: 1pt; letter-spacing: 1pt;
} }
/* Geometric pattern */ /* Chinese character background - 意 (Italy) */
.pattern { .chinese-bg {
position: absolute;
bottom: 40pt;
left: 80pt;
width: 60pt;
height: 60pt;
border: 2pt solid #D4AF37;
transform: rotate(45deg);
opacity: 0.3;
}
.pattern-inner {
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
width: 30pt; z-index: 1;
height: 30pt; pointer-events: none;
border: 2pt solid #D4AF37;
} }
.chinese-bg p {
font-size: 280pt;
font-weight: 900;
color: #2A2A2A;
opacity: 0.08;
font-family: "SimHei", "STHeiti", "Microsoft YaHei", sans-serif;
line-height: 1;
margin: 0;
padding: 0;
}
/* Geometric pattern - Art Deco Italian style */
.pattern-grid {
position: absolute;
top: 0;
right: 0;
width: 200pt;
height: 405pt;
opacity: 0.04;
z-index: 2;
overflow: hidden;
}
.pattern-line {
position: absolute;
background: #D4AF37;
height: 1pt;
}
.pattern-line-1 { top: 30pt; left: 0; width: 200pt; }
.pattern-line-2 { top: 60pt; left: 0; width: 200pt; }
.pattern-line-3 { top: 90pt; left: 0; width: 200pt; }
.pattern-line-4 { top: 120pt; left: 0; width: 200pt; }
.pattern-line-5 { top: 150pt; left: 0; width: 200pt; }
.pattern-line-6 { top: 180pt; left: 0; width: 200pt; }
.pattern-line-7 { top: 210pt; left: 0; width: 200pt; }
.pattern-line-8 { top: 240pt; left: 0; width: 200pt; }
.pattern-line-9 { top: 270pt; left: 0; width: 200pt; }
.pattern-line-10 { top: 300pt; left: 0; width: 200pt; }
.pattern-line-11 { top: 330pt; left: 0; width: 200pt; }
.pattern-line-12 { top: 360pt; left: 0; width: 200pt; }
.pattern-box {
position: absolute;
border: 1pt solid #D4AF37;
}
.pattern-box-1 { top: 40pt; right: 20pt; width: 30pt; height: 30pt; }
.pattern-box-2 { top: 100pt; right: 60pt; width: 25pt; height: 25pt; }
.pattern-box-3 { top: 160pt; right: 30pt; width: 35pt; height: 35pt; }
.pattern-box-4 { top: 220pt; right: 70pt; width: 28pt; height: 28pt; }
.pattern-box-5 { top: 280pt; right: 45pt; width: 32pt; height: 32pt; }
.pattern-box-6 { top: 340pt; right: 25pt; width: 30pt; height: 30pt; }
</style> </style>
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal"> <!-- Background elements (lowest z-index) -->
<div class="chinese-bg"><p></p></div>
<div class="pattern-grid">
<div class="pattern-line pattern-line-1"></div>
<div class="pattern-line pattern-line-2"></div>
<div class="pattern-line pattern-line-3"></div>
<div class="pattern-line pattern-line-4"></div>
<div class="pattern-line pattern-line-5"></div>
<div class="pattern-line pattern-line-6"></div>
<div class="pattern-line pattern-line-7"></div>
<div class="pattern-line pattern-line-8"></div>
<div class="pattern-line pattern-line-9"></div>
<div class="pattern-line pattern-line-10"></div>
<div class="pattern-line pattern-line-11"></div>
<div class="pattern-line pattern-line-12"></div>
<div class="pattern-box pattern-box-1"></div>
<div class="pattern-box pattern-box-2"></div>
<div class="pattern-box pattern-box-3"></div>
<div class="pattern-box pattern-box-4"></div>
<div class="pattern-box pattern-box-5"></div>
<div class="pattern-box pattern-box-6"></div>
</div>
<!-- Foreground elements -->
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>
@ -139,10 +190,6 @@ body {
<h1>ALIMENTARI<br>PICCOLO</h1> <h1>ALIMENTARI<br>PICCOLO</h1>
<p>意大利餐吧 · 番禺路</p> <p>意大利餐吧 · 番禺路</p>
</div> </div>
<div class="pattern">
<div class="pattern-inner"></div>
</div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -19,43 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
transform: rotate(-45deg);
overflow: hidden;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B9B83; background: #2D5016;
opacity: 0.85;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #FFFFFF; background: #F5F5DC;
opacity: 0.85;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #B8867D; background: #8B1A1A;
opacity: 0.85;
} }
/* Photo grid */ /* Photo grid */
@ -118,21 +110,19 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="photo-grid"> <div class="photo-grid">
<div class="photo-large"> <div class="photo-large">
<img src="file:///tmp/pptx_build/OutsideResto.jpg" alt="Outside"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/OutsideResto.jpg" alt="Outside">
</div> </div>
<div class="photo-small"> <div class="photo-small">
<img src="file:///tmp/pptx_build/InsideResto.jpg" alt="Inside"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/InsideResto.jpg" alt="Inside">
</div> </div>
<div class="photo-small"> <div class="photo-small">
<img src="file:///tmp/pptx_build/LayoutTable.jpg" alt="Table"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/LayoutTable.jpg" alt="Table">
</div> </div>
</div> </div>

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -131,16 +117,14 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>
<div class="hero-photo"> <div class="hero-photo">
<img src="file:///tmp/pptx_build/OutsideResto.jpg" alt="Outside"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/OutsideResto.jpg" alt="Outside">
</div> </div>
<div class="info-overlay"> <div class="info-overlay">

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -147,16 +133,14 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>
<div class="dish-photo"> <div class="dish-photo">
<img src="file:///tmp/pptx_build/piadina.jpg" alt="Piadina"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/piadina.jpg" alt="Piadina">
</div> </div>
<div class="dish-info"> <div class="dish-info">

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -147,16 +133,14 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>
<div class="dish-photo"> <div class="dish-photo">
<img src="file:///tmp/pptx_build/croquettes.jpg" alt="Croquettes"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/croquettes.jpg" alt="Croquettes">
</div> </div>
<div class="dish-info"> <div class="dish-info">

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -151,20 +137,18 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>
<div class="photo-left"> <div class="photo-left">
<img src="file:///tmp/pptx_build/InsideResto.jpg" alt="Inside"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/InsideResto.jpg" alt="Inside">
</div> </div>
<div class="photo-right"> <div class="photo-right">
<img src="file:///tmp/pptx_build/LayoutTable.jpg" alt="Table"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/LayoutTable.jpg" alt="Table">
</div> </div>
<div class="eval-panel"> <div class="eval-panel">

View File

@ -19,43 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
transform: rotate(-45deg);
overflow: hidden;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B9B83; background: #2D5016;
opacity: 0.85;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #FFFFFF; background: #F5F5DC;
opacity: 0.85;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #B8867D; background: #8B1A1A;
opacity: 0.85;
} }
/* Menu photos */ /* Menu photos */
@ -129,18 +121,16 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="menu-photos"> <div class="menu-photos">
<div class="menu-card"> <div class="menu-card">
<img src="file:///tmp/pptx_build/CarteCNNice.jpg" alt="Menu"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/CarteCNNice.jpg" alt="Menu">
</div> </div>
<div class="menu-card"> <div class="menu-card">
<img src="file:///tmp/pptx_build/CarteENTravers.jpg" alt="Menu"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/CarteENTravers.jpg" alt="Menu">
</div> </div>
</div> </div>

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -128,11 +114,9 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>
@ -141,7 +125,7 @@ body {
</div> </div>
<div class="menu-center"> <div class="menu-center">
<img src="file:///tmp/pptx_build/CarteCNNice.jpg" alt="Menu CN"> <img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/CarteCNNice.jpg" alt="Menu CN">
</div> </div>
<div class="pattern"></div> <div class="pattern"></div>

View File

@ -19,49 +19,35 @@ body {
position: relative; position: relative;
} }
/* Italian flag diagonal */ /* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green { .flag-green {
position: absolute; position: absolute;
top: 0; top: 15pt;
left: 0; left: 15pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #2D5016; background: #2D5016;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-white { .flag-white {
position: absolute; position: absolute;
top: 0; top: 27pt;
left: 33.33%; left: 27pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #F5F5DC; background: #F5F5DC;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top left;
} }
.flag-red { .flag-red {
position: absolute; position: absolute;
top: 0; top: 39pt;
right: 0; left: 39pt;
width: 33.33%; width: 45pt;
height: 100%; height: 12pt;
background: #8B1A1A; background: #8B1A1A;
transform: rotate(-45deg); opacity: 0.85;
transform-origin: top right;
} }
/* Signature gold bar */ /* Signature gold bar */
@ -127,11 +113,9 @@ body {
</head> </head>
<body> <body>
<div class="slide-content"> <div class="slide-content">
<div class="flag-diagonal">
<div class="flag-green"></div> <div class="flag-green"></div>
<div class="flag-white"></div> <div class="flag-white"></div>
<div class="flag-red"></div> <div class="flag-red"></div>
</div>
<div class="gold-bar"></div> <div class="gold-bar"></div>

View File

@ -0,0 +1,130 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
right: 60pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
}
/* Main title */
.title-container {
position: absolute;
top: 50%;
left: 80pt;
right: 100pt;
transform: translateY(-50%);
}
.title-container h1 {
font-size: 56pt;
font-weight: 700;
color: #D4AF37;
margin: 0 0 20pt 0;
padding: 0;
letter-spacing: 3pt;
line-height: 1.1;
}
.title-container p {
font-size: 20pt;
color: #C9C9C9;
margin: 0;
padding: 0;
font-weight: 300;
letter-spacing: 1pt;
}
/* Geometric pattern - diamond shape without rotation */
.pattern {
position: absolute;
bottom: 40pt;
left: 80pt;
width: 42pt;
height: 42pt;
border: 2pt solid #D4AF37;
opacity: 0.3;
}
.pattern-inner {
position: absolute;
top: 10pt;
left: 10pt;
width: 20pt;
height: 20pt;
border: 2pt solid #D4AF37;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="title-container">
<h1>ALIMENTARI<br>PICCOLO</h1>
<p>意大利餐吧 · 番禺路</p>
</div>
<div class="pattern">
<div class="pattern-inner"></div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,145 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #F5EFE0;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Photo grid */
.photo-grid {
position: absolute;
top: 40pt;
left: 40pt;
right: 40pt;
bottom: 140pt;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15pt;
}
.photo-large {
grid-column: span 2;
border-radius: 8pt;
overflow: hidden;
box-shadow: 0 4pt 20pt rgba(0, 0, 0, 0.1);
}
.photo-small {
border-radius: 8pt;
overflow: hidden;
box-shadow: 0 4pt 20pt rgba(0, 0, 0, 0.1);
}
.photo-large img,
.photo-small img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Info bar */
.info-bar {
position: absolute;
bottom: 50pt;
left: 40pt;
right: 40pt;
display: flex;
justify-content: space-around;
}
.info-item p {
font-size: 16pt;
color: #8B9B83;
margin: 0;
padding: 0;
text-align: center;
}
.info-value {
font-size: 20pt;
color: #B8867D;
font-weight: 600;
margin-top: 5pt;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="photo-grid">
<div class="photo-large">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/OutsideResto.jpg" alt="Outside">
</div>
<div class="photo-small">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/InsideResto.jpg" alt="Inside">
</div>
<div class="photo-small">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/LayoutTable.jpg" alt="Table">
</div>
</div>
<div class="info-bar">
<div class="info-item">
<p>📍</p>
<p class="info-value">番禺路390号</p>
</div>
<div class="info-item">
<p></p>
<p class="info-value">4.4/5</p>
</div>
<div class="info-item">
<p>💰</p>
<p class="info-value">¥136/人</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,146 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
right: 60pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
z-index: 5;
}
/* Main photo */
.hero-photo {
position: absolute;
top: 60pt;
left: 60pt;
right: 100pt;
bottom: 160pt;
border-radius: 4pt;
overflow: hidden;
box-shadow: 0 8pt 30pt rgba(0, 0, 0, 0.5);
}
.hero-photo img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Info overlay */
.info-overlay {
position: absolute;
bottom: 60pt;
left: 60pt;
right: 100pt;
height: 80pt;
background: rgba(26, 26, 26, 0.95);
border-left: 4pt solid #D4AF37;
display: flex;
align-items: center;
justify-content: space-around;
padding: 0 30pt;
}
.info-item {
text-align: center;
}
.info-item p:first-child {
font-size: 14pt;
color: #999999;
margin: 0 0 5pt 0;
padding: 0;
letter-spacing: 1pt;
}
.info-item p:last-child {
font-size: 22pt;
color: #D4AF37;
margin: 0;
padding: 0;
font-weight: 600;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="hero-photo">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/OutsideResto.jpg" alt="Outside">
</div>
<div class="info-overlay">
<div class="info-item">
<p>位置</p>
<p>番禺路390号</p>
</div>
<div class="info-item">
<p>评分</p>
<p>4.4★</p>
</div>
<div class="info-item">
<p>价格</p>
<p>¥136</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,163 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
right: 300pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
z-index: 5;
}
/* Dish photo */
.dish-photo {
position: absolute;
top: 60pt;
left: 60pt;
right: 330pt;
bottom: 80pt;
border-radius: 4pt;
overflow: hidden;
box-shadow: 0 8pt 30pt rgba(0, 0, 0, 0.6);
}
.dish-photo img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Info section */
.dish-info {
position: absolute;
right: 60pt;
top: 120pt;
width: 200pt;
}
.dish-info h1 {
font-size: 38pt;
font-weight: 700;
color: #D4AF37;
margin: 0 0 10pt 0;
padding: 0;
line-height: 1.1;
letter-spacing: 1pt;
}
.dish-info p {
font-size: 16pt;
color: #8B8B8B;
margin: 0 0 30pt 0;
padding: 0;
}
.keyword-box {
margin: 10pt 0;
padding: 0 0 0 15pt;
border-left: 2pt solid #2D5016;
}
.keyword-box p {
font-size: 14pt;
color: #C9C9C9;
margin: 0;
padding: 0;
}
/* Price */
.price {
position: absolute;
right: 60pt;
bottom: 60pt;
font-size: 32pt;
color: #D4AF37;
font-weight: 700;
margin: 0;
padding: 0;
letter-spacing: 2pt;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="dish-photo">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/piadina.jpg" alt="Piadina">
</div>
<div class="dish-info">
<h1>PIADINA</h1>
<p>意式皮亚迪纳</p>
<div class="keyword-box">
<p>现烤薄饼</p>
</div>
<div class="keyword-box">
<p>新鲜蔬菜</p>
</div>
<div class="keyword-box">
<p>意式火腿</p>
</div>
</div>
<p class="price">¥65-75</p>
</div>
</body>
</html>

View File

@ -0,0 +1,163 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
left: 300pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
z-index: 5;
}
/* Dish photo */
.dish-photo {
position: absolute;
top: 60pt;
right: 60pt;
left: 330pt;
bottom: 80pt;
border-radius: 4pt;
overflow: hidden;
box-shadow: 0 8pt 30pt rgba(0, 0, 0, 0.6);
}
.dish-photo img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Info section */
.dish-info {
position: absolute;
left: 60pt;
top: 120pt;
width: 200pt;
}
.dish-info h1 {
font-size: 36pt;
font-weight: 700;
color: #D4AF37;
margin: 0 0 10pt 0;
padding: 0;
line-height: 1.1;
letter-spacing: 1pt;
}
.dish-info p {
font-size: 16pt;
color: #8B8B8B;
margin: 0 0 30pt 0;
padding: 0;
}
.keyword-box {
margin: 10pt 0;
padding: 0 0 0 15pt;
border-left: 2pt solid #8B1A1A;
}
.keyword-box p {
font-size: 14pt;
color: #C9C9C9;
margin: 0;
padding: 0;
}
/* Price */
.price {
position: absolute;
left: 60pt;
bottom: 60pt;
font-size: 32pt;
color: #D4AF37;
font-weight: 700;
margin: 0;
padding: 0;
letter-spacing: 2pt;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="dish-photo">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/croquettes.jpg" alt="Croquettes">
</div>
<div class="dish-info">
<h1>CROQUETTES</h1>
<p>意式炸肉丸</p>
<div class="keyword-box">
<p>金黄酥脆</p>
</div>
<div class="keyword-box">
<p>肉质鲜嫩</p>
</div>
<div class="keyword-box">
<p>奶油酱汁</p>
</div>
</div>
<p class="price">¥65</p>
</div>
</body>
</html>

View File

@ -0,0 +1,164 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
right: 60pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
z-index: 5;
}
/* Photos section */
.photo-left {
position: absolute;
top: 60pt;
left: 60pt;
width: 270pt;
bottom: 80pt;
border-radius: 4pt;
overflow: hidden;
box-shadow: 0 6pt 25pt rgba(0, 0, 0, 0.5);
}
.photo-left img {
width: 100%;
height: 100%;
object-fit: cover;
}
.photo-right {
position: absolute;
top: 60pt;
left: 350pt;
right: 100pt;
bottom: 190pt;
border-radius: 4pt;
overflow: hidden;
box-shadow: 0 6pt 25pt rgba(0, 0, 0, 0.5);
}
.photo-right img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Evaluation section */
.eval-panel {
position: absolute;
bottom: 60pt;
left: 350pt;
right: 100pt;
height: 100pt;
background: rgba(26, 26, 26, 0.95);
border-left: 4pt solid #D4AF37;
padding: 20pt 25pt;
}
.eval-panel h2 {
font-size: 20pt;
font-weight: 700;
color: #D4AF37;
margin: 0 0 15pt 0;
padding: 0;
letter-spacing: 2pt;
}
.eval-row {
display: flex;
justify-content: space-between;
}
.eval-row p {
font-size: 14pt;
color: #999999;
margin: 0;
padding: 0;
}
.eval-row p span {
color: #C9C9C9;
font-weight: 600;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="photo-left">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/InsideResto.jpg" alt="Inside">
</div>
<div class="photo-right">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/LayoutTable.jpg" alt="Table">
</div>
<div class="eval-panel">
<h2>VALUTAZIONE</h2>
<div class="eval-row">
<p>性价比 <span>优秀</span></p>
<p>服务 <span>热情</span></p>
<p>环境 <span>舒适</span></p>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,158 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #F5EFE0;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Menu photos */
.menu-photos {
position: absolute;
top: 40pt;
left: 40pt;
right: 40pt;
height: 180pt;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20pt;
}
.menu-card {
border-radius: 10pt;
overflow: hidden;
box-shadow: 0 4pt 15pt rgba(0, 0, 0, 0.1);
}
.menu-card img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Evaluation section */
.eval-section {
position: absolute;
bottom: 50pt;
left: 40pt;
right: 40pt;
text-align: center;
}
.eval-section h2 {
font-size: 28pt;
font-weight: 400;
color: #8B9B83;
margin: 0 0 15pt 0;
padding: 0;
}
.eval-grid {
display: flex;
justify-content: space-around;
margin-top: 15pt;
}
.eval-item p {
font-size: 15pt;
color: #666666;
margin: 0;
padding: 0;
}
.eval-value {
font-size: 20pt;
color: #B8867D;
font-weight: 600;
margin-top: 5pt;
}
.divider {
width: 60pt;
height: 1pt;
background: #C9A976;
margin: 15pt auto;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="menu-photos">
<div class="menu-card">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/CarteCNNice.jpg" alt="Menu">
</div>
<div class="menu-card">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/CarteENTravers.jpg" alt="Menu">
</div>
</div>
<div class="eval-section">
<div class="divider"></div>
<h2>值得一试</h2>
<div class="eval-grid">
<div class="eval-item">
<p>性价比</p>
<p class="eval-value">优秀</p>
</div>
<div class="eval-item">
<p>服务</p>
<p class="eval-value">热情</p>
</div>
<div class="eval-item">
<p>环境</p>
<p class="eval-value">舒适</p>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,134 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
right: 60pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
z-index: 5;
}
/* Menu photo centered */
.menu-center {
position: absolute;
top: 80pt;
left: 50%;
transform: translateX(-50%);
width: 300pt;
height: 260pt;
border-radius: 4pt;
overflow: hidden;
box-shadow: 0 8pt 30pt rgba(0, 0, 0, 0.6);
}
.menu-center img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* Title */
.menu-title {
position: absolute;
top: 80pt;
left: 60pt;
right: 100pt;
text-align: center;
}
.menu-title h1 {
font-size: 32pt;
font-weight: 700;
color: #D4AF37;
margin: 0;
padding: 0;
letter-spacing: 3pt;
}
/* Geometric pattern */
.pattern {
position: absolute;
bottom: 60pt;
left: 50%;
transform: translateX(-50%);
width: 50pt;
height: 50pt;
border: 2pt solid #D4AF37;
transform: translateX(-50%) rotate(45deg);
opacity: 0.3;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="menu-title">
<h1>菜单</h1>
</div>
<div class="menu-center">
<img src="file:///C:/Users/alexi/Documents/projects/couple-repo/work_chinese/PPT04122025/pptx_build/CarteCNNice.jpg" alt="Menu CN">
</div>
<div class="pattern"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,132 @@
<!DOCTYPE html>
<html>
<head>
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
background: #1A1A1A;
font-family: Georgia, serif;
display: flex;
}
.slide-content {
width: 100%;
height: 100%;
position: relative;
}
/* Italian flag diagonal - simple rectangles positioned diagonally */
.flag-green {
position: absolute;
top: 15pt;
left: 15pt;
width: 45pt;
height: 12pt;
background: #2D5016;
opacity: 0.85;
}
.flag-white {
position: absolute;
top: 27pt;
left: 27pt;
width: 45pt;
height: 12pt;
background: #F5F5DC;
opacity: 0.85;
}
.flag-red {
position: absolute;
top: 39pt;
left: 39pt;
width: 45pt;
height: 12pt;
background: #8B1A1A;
opacity: 0.85;
}
/* Signature gold bar */
.gold-bar {
position: absolute;
right: 60pt;
top: 60pt;
bottom: 60pt;
width: 3pt;
background: #D4AF37;
}
/* Credits container */
.credits {
position: absolute;
top: 50%;
left: 80pt;
right: 100pt;
transform: translateY(-50%);
text-align: center;
}
.credits h1 {
font-size: 40pt;
font-weight: 700;
color: #D4AF37;
margin: 0 0 50pt 0;
padding: 0;
letter-spacing: 3pt;
}
.names {
font-size: 28pt;
color: #C9C9C9;
line-height: 1.8;
margin: 0;
padding: 0;
letter-spacing: 2pt;
}
/* Geometric pattern */
.pattern {
position: absolute;
bottom: 40pt;
left: 50%;
transform: translateX(-50%) rotate(45deg);
width: 60pt;
height: 60pt;
border: 2pt solid #D4AF37;
opacity: 0.3;
}
.pattern-inner {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30pt;
height: 30pt;
border: 2pt solid #D4AF37;
}
</style>
</head>
<body>
<div class="slide-content">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
<div class="gold-bar"></div>
<div class="credits">
<h1>GRAZIE</h1>
<p class="names">李知珉<br>闵智铉<br>亓昊天</p>
</div>
<div class="pattern">
<div class="pattern-inner"></div>
</div>
</div>
</body>
</html>