Add xiezuo PPT: Alimentari Piccolo restaurant review (Italian theme)

Created luxury dark-themed PowerPoint presentation for Chinese writing course:
- 7 slides: title, location, 2 dishes (piadina/croquettes), ambiance, menu CN, credits
- Design: black bg #1A1A1A, gold #D4AF37, Italian flag diagonal (rotated squares)
- All text in Chinese/Italian (zero English)
- Individual HTML slides + conversion script (html2pptx architecture)
- Final version: Alimentari_Piccolo_v3.pptx
- Team: 李知珉、闵智铉、亓昊天

🤖 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 07:13:25 +08:00
parent d5b0dce774
commit 3d09642576
25 changed files with 2153 additions and 0 deletions

View File

@ -0,0 +1,24 @@
const pptxgen = require('pptxgenjs');
const html2pptx = require('/mnt/e/Users/Alexis Trouvé/Documents/Projets/couple_matters/.claude/skills/pptx/scripts/html2pptx.js');
const path = require('path');
async function generatePresentation() {
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9';
const htmlFile = '/tmp/pptx_build/alimentari_piccolo.html';
try {
await html2pptx(htmlFile, pptx, { tmpDir: '/tmp' });
const outputPath = '/mnt/e/Users/Alexis Trouvé/Documents/Projets/couple_matters/work_chinese/PPT04122025/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);
process.exit(1);
}
}
generatePresentation();

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: 509 KiB

Binary file not shown.

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: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -0,0 +1,530 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
html { background: #ffffff; }
body {
width: 720pt;
height: 405pt;
margin: 0;
padding: 0;
font-family: Georgia, serif;
color: #2C2C2C;
display: flex;
}
.slide {
width: 720pt;
height: 405pt;
position: relative;
overflow: hidden;
page-break-after: always;
}
/* Slide 1 - Title */
.slide-1 {
background: #FFFFFF;
}
.flag-stripe-top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 20pt;
background: #009246;
}
.flag-stripe-mid {
position: absolute;
top: 20pt;
left: 0;
width: 100%;
height: 20pt;
background: #FFFFFF;
}
.flag-stripe-bot {
position: absolute;
top: 40pt;
left: 0;
width: 100%;
height: 20pt;
background: #CE2B37;
}
.title-container {
position: absolute;
top: 95pt;
left: 50%;
transform: translateX(-50%);
background: #F8F8F8;
padding: 28pt 45pt;
border-radius: 15pt;
box-shadow: 0 8pt 25pt rgba(0, 0, 0, 0.15);
border: 3pt solid #D4AF37;
text-align: center;
}
.title-main {
font-size: 44pt;
font-weight: 700;
color: #009246;
margin-bottom: 12pt;
}
.title-sub {
font-size: 26pt;
color: #CE2B37;
font-weight: 600;
margin-bottom: 8pt;
}
.title-tag {
font-size: 16pt;
color: #666666;
font-style: italic;
}
/* Slide 2 - Location */
.slide-2 {
background: #FFFFFF;
}
.header-green {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 60pt;
background: #009246;
}
.header-text {
position: absolute;
top: 12pt;
left: 35pt;
font-size: 32pt;
font-weight: 700;
color: #FFFFFF;
}
.info-box-1 {
position: absolute;
top: 80pt;
left: 30pt;
width: 300pt;
background: #F8F8F8;
border-radius: 10pt;
padding: 15pt;
border-left: 5pt solid #009246;
box-shadow: 0 3pt 10pt rgba(0, 0, 0, 0.08);
}
.info-box-2 {
position: absolute;
top: 80pt;
right: 30pt;
width: 300pt;
background: #F8F8F8;
border-radius: 10pt;
padding: 15pt;
border-left: 5pt solid #009246;
box-shadow: 0 3pt 10pt rgba(0, 0, 0, 0.08);
}
.info-box-3 {
position: absolute;
top: 185pt;
left: 30pt;
width: 300pt;
background: #F8F8F8;
border-radius: 10pt;
padding: 15pt;
border-left: 5pt solid #009246;
box-shadow: 0 3pt 10pt rgba(0, 0, 0, 0.08);
}
.info-box-4 {
position: absolute;
top: 185pt;
right: 30pt;
width: 300pt;
background: #F8F8F8;
border-radius: 10pt;
padding: 15pt;
border-left: 5pt solid #009246;
box-shadow: 0 3pt 10pt rgba(0, 0, 0, 0.08);
}
.info-title {
font-size: 16pt;
color: #CE2B37;
font-weight: 700;
margin-bottom: 6pt;
}
.info-text {
font-size: 19pt;
color: #2C2C2C;
font-weight: 600;
line-height: 1.2;
}
.star-gold {
color: #D4AF37;
}
.image-bottom {
position: absolute;
bottom: 20pt;
left: 30pt;
right: 30pt;
height: 90pt;
border-radius: 10pt;
box-shadow: 0 4pt 15pt rgba(0, 0, 0, 0.12);
}
/* Slide 3 & 4 - Dishes */
.slide-dish {
background: #FFFFFF;
}
.dish-photo-section {
position: absolute;
top: 0;
left: 0;
width: 400pt;
height: 405pt;
}
.dish-photo {
width: 100%;
height: 100%;
object-fit: cover;
}
.dish-details-section {
position: absolute;
top: 0;
right: 0;
width: 320pt;
height: 405pt;
background: #F8F8F8;
border-left: 6pt solid #009246;
padding: 45pt 25pt 90pt 25pt;
}
.dish-label {
font-size: 14pt;
color: #CE2B37;
font-weight: 700;
margin-bottom: 7pt;
}
.dish-title {
font-size: 27pt;
font-weight: 700;
color: #009246;
margin-bottom: 12pt;
line-height: 1.1;
}
.keyword-item {
background: #FFFFFF;
padding: 6pt 11pt;
border-radius: 6pt;
border-left: 3pt solid #D4AF37;
box-shadow: 0 2pt 5pt rgba(0, 0, 0, 0.06);
margin-bottom: 7pt;
}
.keyword-txt {
font-size: 14pt;
color: #2C2C2C;
font-weight: 600;
}
.price-badge {
background: #009246;
padding: 8pt 15pt;
border-radius: 8pt;
display: inline-block;
box-shadow: 0 3pt 10pt rgba(0, 146, 70, 0.25);
margin-top: 10pt;
}
.price-val {
font-size: 20pt;
color: #FFFFFF;
font-weight: 700;
}
/* Slide 5 - Evaluation */
.slide-5 {
background: #F8F8F8;
}
.eval-head {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 55pt;
background: #CE2B37;
}
.eval-head-txt {
position: absolute;
top: 10pt;
left: 50%;
transform: translateX(-50%);
font-size: 34pt;
font-weight: 700;
color: #FFFFFF;
white-space: nowrap;
}
.eval-item-1 {
position: absolute;
top: 75pt;
left: 30pt;
width: 310pt;
height: 90pt;
background: #FFFFFF;
border-radius: 10pt;
padding: 12pt;
box-shadow: 0 4pt 12pt rgba(0, 0, 0, 0.08);
border-top: 5pt solid #D4AF37;
text-align: center;
}
.eval-item-2 {
position: absolute;
top: 75pt;
right: 30pt;
width: 310pt;
height: 90pt;
background: #FFFFFF;
border-radius: 10pt;
padding: 12pt;
box-shadow: 0 4pt 12pt rgba(0, 0, 0, 0.08);
border-top: 5pt solid #D4AF37;
text-align: center;
}
.eval-item-3 {
position: absolute;
top: 185pt;
left: 30pt;
width: 310pt;
height: 90pt;
background: #FFFFFF;
border-radius: 10pt;
padding: 12pt;
box-shadow: 0 4pt 12pt rgba(0, 0, 0, 0.08);
border-top: 5pt solid #D4AF37;
text-align: center;
}
.eval-item-4 {
position: absolute;
top: 185pt;
right: 30pt;
width: 310pt;
height: 90pt;
background: #FFFFFF;
border-radius: 10pt;
padding: 12pt;
box-shadow: 0 4pt 12pt rgba(0, 0, 0, 0.08);
border-top: 5pt solid #D4AF37;
text-align: center;
}
.eval-label {
font-size: 18pt;
color: #CE2B37;
font-weight: 700;
margin-bottom: 8pt;
}
.eval-value {
font-size: 24pt;
color: #009246;
font-weight: 700;
margin-bottom: 4pt;
}
.eval-detail {
font-size: 15pt;
color: #666666;
}
.final-box {
position: absolute;
bottom: 62pt;
left: 30pt;
right: 30pt;
height: 46pt;
background: #009246;
border-radius: 10pt;
box-shadow: 0 4pt 15pt rgba(0, 146, 70, 0.25);
display: flex;
align-items: center;
justify-content: center;
}
.final-msg {
font-size: 20pt;
color: #FFFFFF;
font-weight: 700;
text-align: center;
}
.flag-badge {
position: absolute;
bottom: 15pt;
right: 15pt;
width: 40pt;
height: 40pt;
border-radius: 5pt;
box-shadow: 0 2pt 6pt rgba(0, 0, 0, 0.15);
}
.badge-green { background: #009246; }
.badge-white { background: #FFFFFF; border: 2pt solid #D4AF37; }
.badge-red { background: #CE2B37; }
</style>
</head>
<body>
<!-- Slide 1: Title -->
<div class="slide slide-1">
<div class="flag-stripe-top"></div>
<div class="flag-stripe-mid"></div>
<div class="flag-stripe-bot"></div>
<div class="title-container">
<p class="title-main">Alimentari Piccolo</p>
<p class="title-sub">意大利餐吧 & 披萨</p>
<p class="title-tag">上海番禺路店</p>
</div>
<div class="flag-badge badge-green"></div>
</div>
<!-- Slide 2: Location & Ambiance -->
<div class="slide slide-2">
<div class="header-green"></div>
<p class="header-text">餐厅概况 | RISTORANTE</p>
<div class="info-box-1">
<p class="info-title">📍 位置</p>
<p class="info-text">番禺路390号103室A区</p>
</div>
<div class="info-box-2">
<p class="info-title">🍝 类型</p>
<p class="info-text">正宗意大利料理</p>
</div>
<div class="info-box-3">
<p class="info-title">🌟 评分</p>
<p class="info-text"><span class="star-gold">★★★★</span> 4.4/5 (3511条)</p>
</div>
<div class="info-box-4">
<p class="info-title">💰 人均</p>
<p class="info-text" style="color: #D4AF37;">¥136/人</p>
</div>
<img src="outside.jpg" class="image-bottom" alt="Restaurant">
<div class="flag-badge badge-red"></div>
</div>
<!-- Slide 3: Dish 1 - Piadina -->
<div class="slide slide-dish">
<div class="dish-photo-section">
<img src="plat1.jpg" class="dish-photo" alt="Piadina">
</div>
<div class="dish-details-section">
<p class="dish-label">推荐菜品 #1 | ¥65-75</p>
<p class="dish-title">意式皮亚迪纳<br>Piadina</p>
<div class="keyword-item">
<p class="keyword-txt">🔥 现烤薄饼 金黄酥脆</p>
</div>
<div class="keyword-item">
<p class="keyword-txt">🥗 新鲜蔬菜 色彩缤纷</p>
</div>
<div class="keyword-item">
<p class="keyword-txt">🥓 意式火腿 奶酪酱汁</p>
</div>
</div>
<div class="flag-badge badge-green"></div>
</div>
<!-- Slide 4: Dish 2 - Croquettes -->
<div class="slide slide-dish">
<div class="dish-photo-section">
<img src="plat2.jpg" class="dish-photo" alt="Croquettes">
</div>
<div class="dish-details-section">
<p class="dish-label">推荐菜品 #2 | ¥65</p>
<p class="dish-title">意式炸肉丸<br>Croquettes</p>
<div class="keyword-item">
<p class="keyword-txt">✨ 金黄酥脆 外壳完美</p>
</div>
<div class="keyword-item">
<p class="keyword-txt">🥩 肉质鲜嫩 多汁饱满</p>
</div>
<div class="keyword-item">
<p class="keyword-txt">🧈 奶油酱汁 香草点缀</p>
</div>
</div>
<div class="flag-badge badge-white"></div>
</div>
<!-- Slide 5: Price & Evaluation -->
<div class="slide slide-5">
<div class="eval-head"></div>
<p class="eval-head-txt">综合评价 | VALUTAZIONE</p>
<div class="eval-item-1">
<p class="eval-label">💵 价格区间</p>
<p class="eval-value">¥65-75/道菜</p>
<p class="eval-detail">人均约¥136</p>
</div>
<div class="eval-item-2">
<p class="eval-label">⭐ 性价比</p>
<p class="eval-value">优秀</p>
<p class="eval-detail">物超所值</p>
</div>
<div class="eval-item-3">
<p class="eval-label">👨‍🍳 服务</p>
<p class="eval-value">热情周到</p>
<p class="eval-detail">专业细致</p>
</div>
<div class="eval-item-4">
<p class="eval-label">🏆 总体评分</p>
<p class="eval-value">4.4/5 ★★★★</p>
<p class="eval-detail">强烈推荐</p>
</div>
<div class="final-box">
<p class="final-msg">正宗意式风味 · 温馨舒适环境 · 值得一试!</p>
</div>
<div class="flag-badge badge-red"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,24 @@
const pptxgen = require('pptxgenjs');
const html2pptx = require('/mnt/e/Users/Alexis Trouvé/Documents/Projets/couple_matters/.claude/skills/pptx/scripts/html2pptx.js');
const path = require('path');
async function generatePresentation() {
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9';
const htmlFile = path.join(__dirname, 'alimentari_piccolo.html');
try {
await html2pptx(htmlFile, pptx);
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);
process.exit(1);
}
}
generatePresentation();

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -0,0 +1,106 @@
const pptxgen = require('pptxgenjs');
const path = require('path');
const html2pptx = require('../../.claude/skills/pptx/scripts/html2pptx.js');
async function createPresentation() {
console.log('🍝 Création présentation Alimentari Piccolo (Design LUXE)...\n');
const pptx = new pptxgen();
pptx.layout = 'LAYOUT_16x9';
pptx.author = 'Alexis - Xiezuo Course';
pptx.title = 'Alimentari Piccolo - 意大利餐吧评价';
pptx.subject = '餐厅评价作业';
try {
// Slide 1: Title
console.log('📄 Slide 1: 封面 LUXE...');
await html2pptx(
path.join(__dirname, 'slides/slide1_title.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Slide 2: Location
console.log('📄 Slide 2: 位置 (hero photo + overlay)...');
await html2pptx(
path.join(__dirname, 'slides/slide2_location.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Slide 3: Piadina
console.log('📄 Slide 3: Piadina (asymétrique)...');
await html2pptx(
path.join(__dirname, 'slides/slide3_piadina.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Slide 4: Croquettes
console.log('📄 Slide 4: Croquettes (asymétrique inversé)...');
await html2pptx(
path.join(__dirname, 'slides/slide4_croquettes.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Slide 5: Ambiance
console.log('📄 Slide 5: Ambiance intérieure + évaluation...');
await html2pptx(
path.join(__dirname, 'slides/slide5_ambiance.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Slide 6: Menu
console.log('📄 Slide 6: Menu (carte CN uniquement)...');
await html2pptx(
path.join(__dirname, 'slides/slide6_menu.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Slide 7: Credits
console.log('📄 Slide 7: Crédits (noms membres)...');
await html2pptx(
path.join(__dirname, 'slides/slide7_credits.html'),
pptx,
{ tmpDir: '/tmp' }
);
// Save
const outputFile = 'Alimentari_Piccolo_v3.pptx';
await pptx.writeFile({ fileName: path.join(__dirname, outputFile) });
console.log('\n✅ 演示文稿创建成功!');
console.log(`📁 文件名: ${outputFile}`);
console.log('📍 位置: work_chinese/PPT04122025/');
console.log('\n🎨 Design LUXE & CLASSE :');
console.log(' ✓ Fond noir #1A1A1A (ultra-premium)');
console.log(' ✓ Or riche #D4AF37 (signature)');
console.log(' ✓ Vert forêt #2D5016 + Bordeaux #8B1A1A');
console.log(' ✓ Barre dorée verticale SIGNATURE');
console.log(' ✓ Pattern géométrique italien');
console.log(' ✓ Drapeau diagonal 3 bandes (rotation globale)');
console.log(' ✓ TOUTES les images utilisées');
console.log(' ✓ Design asymétrique luxueux');
console.log(' ✓ Texte 100% chinois/italien (zéro anglais)');
console.log(' ✓ 7 slides premium');
console.log('\n📝 Contenu :');
console.log(' 1. Titre LUXE avec pattern géométrique');
console.log(' 2. Hero photo extérieur + overlay info (位置/评分/价格)');
console.log(' 3. Piadina (grande photo gauche, info droite)');
console.log(' 4. Croquettes (inversé : info gauche, photo droite)');
console.log(' 5. Ambiance intérieure (2 photos) + évaluation');
console.log(' 6. Menu (carte CN uniquement, centrée)');
console.log(' 7. Crédits (李知珉、闵智铉、亓昊天)');
} catch (error) {
console.error('\n❌ 错误:', error.message);
if (error.stack) {
console.error('\nStack:', error.stack);
}
}
}
createPresentation();

View File

@ -0,0 +1,148 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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 */
.pattern {
position: absolute;
bottom: 40pt;
left: 80pt;
width: 60pt;
height: 60pt;
border: 2pt solid #D4AF37;
transform: rotate(45deg);
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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</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,155 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
transform: rotate(-45deg);
overflow: hidden;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #8B9B83;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #FFFFFF;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #B8867D;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="photo-grid">
<div class="photo-large">
<img src="file:///tmp/pptx_build/OutsideResto.jpg" alt="Outside">
</div>
<div class="photo-small">
<img src="file:///tmp/pptx_build/InsideResto.jpg" alt="Inside">
</div>
<div class="photo-small">
<img src="file:///tmp/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,162 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="gold-bar"></div>
<div class="hero-photo">
<img src="file:///tmp/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,179 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="gold-bar"></div>
<div class="dish-photo">
<img src="file:///tmp/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,179 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="gold-bar"></div>
<div class="dish-photo">
<img src="file:///tmp/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,180 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="gold-bar"></div>
<div class="photo-left">
<img src="file:///tmp/pptx_build/InsideResto.jpg" alt="Inside">
</div>
<div class="photo-right">
<img src="file:///tmp/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,168 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
transform: rotate(-45deg);
overflow: hidden;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #8B9B83;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #FFFFFF;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #B8867D;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="menu-photos">
<div class="menu-card">
<img src="file:///tmp/pptx_build/CarteCNNice.jpg" alt="Menu">
</div>
<div class="menu-card">
<img src="file:///tmp/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,150 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</div>
<div class="gold-bar"></div>
<div class="menu-title">
<h1>菜单</h1>
</div>
<div class="menu-center">
<img src="file:///tmp/pptx_build/CarteCNNice.jpg" alt="Menu CN">
</div>
<div class="pattern"></div>
</div>
</body>
</html>

View File

@ -0,0 +1,148 @@
<!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 */
.flag-diagonal {
position: absolute;
top: -20pt;
left: -20pt;
width: 120pt;
height: 120pt;
overflow: hidden;
opacity: 0.8;
z-index: 10;
}
.flag-green {
position: absolute;
top: 0;
left: 0;
width: 33.33%;
height: 100%;
background: #2D5016;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-white {
position: absolute;
top: 0;
left: 33.33%;
width: 33.33%;
height: 100%;
background: #F5F5DC;
transform: rotate(-45deg);
transform-origin: top left;
}
.flag-red {
position: absolute;
top: 0;
right: 0;
width: 33.33%;
height: 100%;
background: #8B1A1A;
transform: rotate(-45deg);
transform-origin: top right;
}
/* 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-diagonal">
<div class="flag-green"></div>
<div class="flag-white"></div>
<div class="flag-red"></div>
</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>