@ohos-ports/slides-grab 1.5.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README-ko.md +292 -0
- package/README.md +301 -0
- package/bin/ohos-postinstall.cjs +118 -0
- package/bin/ppt-agent.js +620 -0
- package/convert.cjs +20 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/glib-2.0/include/glibconfig.h +220 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/index.js +1 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/libexpat.so +0 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/libffi.so +0 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/libjpeg.so +0 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/libpcre2-8.so.0 +0 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/libvips-cpp.so.42.20.3 +0 -0
- package/native/@img/sharp-libvips-openharmony-arm64/lib/libvips.so.42.20.3 +0 -0
- package/native/@img/sharp-libvips-openharmony-arm64/package.json +13 -0
- package/native/@img/sharp-openharmony-arm64/lib/sharp-openharmony-arm64.node +0 -0
- package/native/@img/sharp-openharmony-arm64/package.json +16 -0
- package/package.json +95 -0
- package/runtimes/claude-code/agents/design-critic-agent.md +23 -0
- package/runtimes/codex/agents/slides-grab-design-critic.md +22 -0
- package/scripts/build-viewer.js +444 -0
- package/scripts/design-gate.js +258 -0
- package/scripts/download-video.js +213 -0
- package/scripts/editor-server.js +1167 -0
- package/scripts/figma-export.js +169 -0
- package/scripts/generate-image.js +116 -0
- package/scripts/generate-images.js +164 -0
- package/scripts/html2pdf.js +822 -0
- package/scripts/html2png.js +246 -0
- package/scripts/html2pptx.js +162 -0
- package/scripts/import-template.js +86 -0
- package/scripts/install-runtime.js +216 -0
- package/scripts/render-tldraw.js +44 -0
- package/scripts/validate-slides.js +221 -0
- package/skills/slides-grab/SKILL.md +65 -0
- package/skills/slides-grab/references/presentation-workflow-reference.md +61 -0
- package/skills/slides-grab-card-news/SKILL.md +35 -0
- package/skills/slides-grab-design/SKILL.md +88 -0
- package/skills/slides-grab-design/references/beautiful-slide-defaults.md +88 -0
- package/skills/slides-grab-design/references/design-gate.md +349 -0
- package/skills/slides-grab-design/references/design-rules.md +76 -0
- package/skills/slides-grab-design/references/design-system-full.md +568 -0
- package/skills/slides-grab-design/references/detailed-design-rules.md +70 -0
- package/skills/slides-grab-export/SKILL.md +55 -0
- package/skills/slides-grab-export/references/export-rules.md +27 -0
- package/skills/slides-grab-export/references/html2pptx.md +627 -0
- package/skills/slides-grab-export/references/ooxml.md +427 -0
- package/skills/slides-grab-export/references/pptx-skill-reference.md +189 -0
- package/skills/slides-grab-html/SKILL.md +67 -0
- package/skills/slides-grab-image/SKILL.md +82 -0
- package/skills/slides-grab-plan/SKILL.md +68 -0
- package/skills/slides-grab-plan/references/design-md-to-slides-conversion.md +135 -0
- package/skills/slides-grab-plan/references/outline-format.md +47 -0
- package/skills/slides-grab-plan/references/plan-workflow-reference.md +140 -0
- package/src/codex-imagen.js +182 -0
- package/src/design-diversity-data.js +6932 -0
- package/src/design-gate-report.js +244 -0
- package/src/design-gate-state.js +329 -0
- package/src/design-import.js +164 -0
- package/src/design-md-parser.js +415 -0
- package/src/design-styles-data.js +1928 -0
- package/src/design-styles.js +209 -0
- package/src/editor/codex-edit.js +584 -0
- package/src/editor/edit-subprocess.js +170 -0
- package/src/editor/editor-codex-prompt.md +50 -0
- package/src/editor/editor.html +1785 -0
- package/src/editor/js/editor-bbox.js +332 -0
- package/src/editor/js/editor-chat.js +56 -0
- package/src/editor/js/editor-direct-edit.js +238 -0
- package/src/editor/js/editor-dom.js +59 -0
- package/src/editor/js/editor-init.js +405 -0
- package/src/editor/js/editor-navigation.js +54 -0
- package/src/editor/js/editor-select.js +558 -0
- package/src/editor/js/editor-send.js +175 -0
- package/src/editor/js/editor-sse.js +163 -0
- package/src/editor/js/editor-state.js +41 -0
- package/src/editor/js/editor-type.js +71 -0
- package/src/editor/js/editor-utils.js +167 -0
- package/src/editor/js/model-registry.js +37 -0
- package/src/editor/screenshot.js +82 -0
- package/src/export-resolution.cjs +68 -0
- package/src/figma.js +71 -0
- package/src/html2pptx-scale.cjs +120 -0
- package/src/html2pptx.cjs +1262 -0
- package/src/image-contract.js +329 -0
- package/src/image-native.js +468 -0
- package/src/nano-banana.js +841 -0
- package/src/ohos-browser-bridge.cjs +272 -0
- package/src/pptx-raster-export.cjs +299 -0
- package/src/resolve.js +110 -0
- package/src/slide-mode.cjs +72 -0
- package/src/template-fidelity.js +267 -0
- package/src/template-import.js +505 -0
- package/src/template-layout.js +261 -0
- package/src/template-pack.js +255 -0
- package/src/tldraw/render.js +473 -0
- package/src/validation/cli.js +120 -0
- package/src/validation/core.js +1023 -0
- package/templates/chart.html +121 -0
- package/templates/closing.html +54 -0
- package/templates/content.html +50 -0
- package/templates/contents.html +60 -0
- package/templates/cover.html +64 -0
- package/templates/custom/.gitkeep +0 -0
- package/templates/custom/README.md +7 -0
- package/templates/design-styles/README.md +20 -0
- package/templates/design-styles/preview.html +4438 -0
- package/templates/diagram-tldraw.html +56 -0
- package/templates/diagram.html +98 -0
- package/templates/quote.html +31 -0
- package/templates/section-divider.html +43 -0
- package/templates/split-layout.html +43 -0
- package/templates/statistics.html +55 -0
- package/templates/team.html +49 -0
- package/templates/timeline.html +59 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #ffffff;
|
|
12
|
+
color: #111827;
|
|
13
|
+
padding: 34pt 40pt 28pt;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
gap: 12pt;
|
|
17
|
+
}
|
|
18
|
+
.diagram-frame {
|
|
19
|
+
flex: 1;
|
|
20
|
+
min-height: 0;
|
|
21
|
+
border: 1pt solid #e5e7eb;
|
|
22
|
+
border-radius: 14pt;
|
|
23
|
+
background: #f8fafc;
|
|
24
|
+
padding: 12pt;
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
}
|
|
30
|
+
.diagram-frame img {
|
|
31
|
+
display: block;
|
|
32
|
+
width: 100%;
|
|
33
|
+
height: 100%;
|
|
34
|
+
object-fit: contain;
|
|
35
|
+
}
|
|
36
|
+
</style>
|
|
37
|
+
</head>
|
|
38
|
+
<body>
|
|
39
|
+
<div style="display: flex; justify-content: space-between; align-items: baseline;">
|
|
40
|
+
<h2 style="font-size: 28pt; font-weight: 700; letter-spacing: -0.01em;">System Diagram</h2>
|
|
41
|
+
<p style="font-size: 10pt; color: #6b7280;">DIAGRAM / TLDRAW</p>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<p style="font-size: 12pt; color: #4b5563;">
|
|
45
|
+
Render a current-format local .tldr file with slides-grab tldraw, then reference the generated SVG asset below.
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
<div class="diagram-frame">
|
|
49
|
+
<img src="./assets/diagram.svg" alt="System architecture diagram" />
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<p style="font-size: 9pt; color: #9ca3af;">
|
|
53
|
+
Example asset path: ./assets/diagram.svg
|
|
54
|
+
</p>
|
|
55
|
+
</body>
|
|
56
|
+
</html>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
|
|
6
|
+
<style>
|
|
7
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
8
|
+
body {
|
|
9
|
+
width: 720pt;
|
|
10
|
+
height: 405pt;
|
|
11
|
+
font-family: 'Pretendard', sans-serif;
|
|
12
|
+
background: #ffffff;
|
|
13
|
+
padding: 36pt 40pt;
|
|
14
|
+
display: flex;
|
|
15
|
+
flex-direction: column;
|
|
16
|
+
color: #111827;
|
|
17
|
+
}
|
|
18
|
+
.diagram-grid {
|
|
19
|
+
flex: 1;
|
|
20
|
+
min-height: 0;
|
|
21
|
+
display: grid;
|
|
22
|
+
grid-template-columns: 1fr 1fr;
|
|
23
|
+
gap: 14pt;
|
|
24
|
+
margin-top: 18pt;
|
|
25
|
+
}
|
|
26
|
+
.diagram-card {
|
|
27
|
+
border: 1px solid #e5e7eb;
|
|
28
|
+
border-radius: 10pt;
|
|
29
|
+
padding: 10pt;
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
min-height: 0;
|
|
33
|
+
}
|
|
34
|
+
.diagram-wrap {
|
|
35
|
+
flex: 1;
|
|
36
|
+
min-height: 0;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
}
|
|
39
|
+
pre.mermaid {
|
|
40
|
+
width: 100%;
|
|
41
|
+
height: 100%;
|
|
42
|
+
font-family: 'Pretendard', sans-serif;
|
|
43
|
+
background: #ffffff;
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
46
|
+
</head>
|
|
47
|
+
<body>
|
|
48
|
+
<div style="display: flex; justify-content: space-between; align-items: baseline;">
|
|
49
|
+
<h2 style="font-size: 28pt; font-weight: 700; letter-spacing: -0.01em;">Process Diagram</h2>
|
|
50
|
+
<p style="font-size: 10pt; color: #6b7280;">DIAGRAM / MERMAID</p>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<p style="font-size: 12pt; color: #4b5563; margin-top: 8pt;">
|
|
54
|
+
Flowchart와 sequence diagram을 한 장에 배치하는 템플릿
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<div class="diagram-grid">
|
|
58
|
+
<div class="diagram-card">
|
|
59
|
+
<p style="font-size: 10pt; color: #374151; margin-bottom: 6pt;">Flowchart</p>
|
|
60
|
+
<div class="diagram-wrap">
|
|
61
|
+
<pre class="mermaid">
|
|
62
|
+
flowchart TD
|
|
63
|
+
A[요청 수신] --> B[아웃라인 생성]
|
|
64
|
+
B --> C[디자인 슬라이드 생성]
|
|
65
|
+
C --> D[PPTX 변환]
|
|
66
|
+
D --> E[검토]
|
|
67
|
+
</pre>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="diagram-card">
|
|
71
|
+
<p style="font-size: 10pt; color: #374151; margin-bottom: 6pt;">Sequence Diagram</p>
|
|
72
|
+
<div class="diagram-wrap">
|
|
73
|
+
<pre class="mermaid">
|
|
74
|
+
sequenceDiagram
|
|
75
|
+
participant User
|
|
76
|
+
participant Agent
|
|
77
|
+
participant Converter
|
|
78
|
+
User->>Agent: 슬라이드 생성 요청
|
|
79
|
+
Agent->>Converter: HTML 전달
|
|
80
|
+
Converter-->>Agent: PPTX 반환
|
|
81
|
+
Agent-->>User: 결과 전달
|
|
82
|
+
</pre>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<p style="font-size: 9pt; color: #9ca3af; margin-top: 10pt;">Rendered with Mermaid</p>
|
|
88
|
+
|
|
89
|
+
<script>
|
|
90
|
+
mermaid.initialize({
|
|
91
|
+
startOnLoad: true,
|
|
92
|
+
securityLevel: 'loose',
|
|
93
|
+
theme: 'default',
|
|
94
|
+
fontFamily: 'Pretendard'
|
|
95
|
+
});
|
|
96
|
+
</script>
|
|
97
|
+
</body>
|
|
98
|
+
</html>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #1a1a1a;
|
|
12
|
+
padding: 64pt;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
align-items: center;
|
|
17
|
+
text-align: center;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
</head>
|
|
21
|
+
<body>
|
|
22
|
+
<p style="font-size: 48pt; color: #444; margin-bottom: 24pt;">"</p>
|
|
23
|
+
<h2 style="font-size: 28pt; font-weight: 400; color: #ffffff; letter-spacing: -0.01em; line-height: 1.5; max-width: 540pt;">
|
|
24
|
+
The best way to predict the future is to create it.
|
|
25
|
+
</h2>
|
|
26
|
+
<div style="margin-top: 40pt;">
|
|
27
|
+
<p style="font-size: 13pt; font-weight: 500; color: #ffffff;">Peter Drucker</p>
|
|
28
|
+
<p style="font-size: 11pt; color: #666; margin-top: 4pt;">Management Consultant</p>
|
|
29
|
+
</div>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #1a1a1a;
|
|
12
|
+
padding: 48pt;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
justify-content: space-between;
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<!-- 상단 섹션 정보 -->
|
|
21
|
+
<div style="display: flex; justify-content: space-between; align-items: flex-start;">
|
|
22
|
+
<div>
|
|
23
|
+
<p style="display: inline-block; padding: 4pt 10pt; background: #fff; color: #1a1a1a; border-radius: 4pt; font-size: 8pt; font-weight: 600;">SECTION 1</p>
|
|
24
|
+
</div>
|
|
25
|
+
<p style="font-size: 9pt; color: #666;">©2025 YOUR BRAND</p>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- 메인 타이틀 -->
|
|
29
|
+
<div>
|
|
30
|
+
<h1 style="font-size: 64pt; font-weight: 500; color: #ffffff; letter-spacing: -0.02em; line-height: 1.1;">
|
|
31
|
+
Introduction
|
|
32
|
+
</h1>
|
|
33
|
+
<p style="font-size: 16pt; color: #888; margin-top: 16pt; max-width: 400pt; line-height: 1.6;">
|
|
34
|
+
Brief description of what this section covers and why it matters.
|
|
35
|
+
</p>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<!-- 페이지 번호 -->
|
|
39
|
+
<div style="display: flex; justify-content: flex-end;">
|
|
40
|
+
<p style="font-size: 10pt; color: #666;">01</p>
|
|
41
|
+
</div>
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #ffffff;
|
|
12
|
+
display: grid;
|
|
13
|
+
grid-template-columns: 1fr 1fr;
|
|
14
|
+
}
|
|
15
|
+
</style>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<!-- 이미지 영역 -->
|
|
19
|
+
<div style="background: #e5e5e0; display: flex; align-items: center; justify-content: center; position: relative;">
|
|
20
|
+
<div data-image-placeholder style="width: 100%; height: 100%; border: 1pt dashed #b8b8b0; background: #d9d9d2; display: flex; align-items: center; justify-content: center;">
|
|
21
|
+
<p style="font-size: 11pt; font-weight: 600; letter-spacing: 0.06em; color: #5f5f58; text-transform: uppercase;">Image Placeholder</p>
|
|
22
|
+
</div>
|
|
23
|
+
<p style="position: absolute; bottom: 16pt; left: 16pt; font-size: 9pt; color: #666;">©2025 YOUR BRAND</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<!-- 텍스트 영역 -->
|
|
27
|
+
<div style="padding: 48pt; display: flex; flex-direction: column; justify-content: center;">
|
|
28
|
+
<p style="display: inline-block; padding: 4pt 10pt; background: #1a1a1a; color: #fff; border-radius: 4pt; font-size: 8pt; font-weight: 600; margin-bottom: 24pt; align-self: flex-start;">FEATURE</p>
|
|
29
|
+
<h2 style="font-size: 32pt; font-weight: 600; color: #1a1a1a; letter-spacing: -0.01em; line-height: 1.2; margin-bottom: 20pt;">
|
|
30
|
+
Transform Your Business
|
|
31
|
+
</h2>
|
|
32
|
+
<p style="font-size: 14pt; color: #666; line-height: 1.7;">
|
|
33
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
34
|
+
</p>
|
|
35
|
+
<div style="margin-top: 32pt; display: flex; align-items: center; gap: 12pt;">
|
|
36
|
+
<p style="font-size: 12pt; font-weight: 500; color: #1a1a1a;">Learn more</p>
|
|
37
|
+
<div style="width: 28pt; height: 28pt; border: 1px solid #1a1a1a; border-radius: 50%; display: flex; align-items: center; justify-content: center;">
|
|
38
|
+
<p style="font-size: 12pt; color: #1a1a1a;">→</p>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #f5f5f0;
|
|
12
|
+
padding: 40pt 48pt;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<!-- 헤더 -->
|
|
20
|
+
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 32pt;">
|
|
21
|
+
<h2 style="font-size: 28pt; font-weight: 600; color: #1a1a1a;">Key Metrics</h2>
|
|
22
|
+
<p style="font-size: 10pt; color: #999;">03</p>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- 통계 카드 그리드 -->
|
|
26
|
+
<div style="flex: 1; display: grid; grid-template-columns: repeat(3, 1fr); gap: 24pt;">
|
|
27
|
+
<div style="background: #1a1a1a; border-radius: 12pt; padding: 28pt; display: flex; flex-direction: column; justify-content: space-between;">
|
|
28
|
+
<p style="font-size: 10pt; color: #888; text-transform: uppercase; letter-spacing: 0.05em;">Revenue Growth</p>
|
|
29
|
+
<div>
|
|
30
|
+
<p style="font-size: 48pt; font-weight: 600; color: #ffffff; letter-spacing: -0.02em;">85%</p>
|
|
31
|
+
<p style="font-size: 11pt; color: #666; margin-top: 8pt;">Year over year</p>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div style="background: #ffffff; border-radius: 12pt; padding: 28pt; display: flex; flex-direction: column; justify-content: space-between; border: 1px solid #e5e5e0;">
|
|
35
|
+
<p style="font-size: 10pt; color: #888; text-transform: uppercase; letter-spacing: 0.05em;">Active Users</p>
|
|
36
|
+
<div>
|
|
37
|
+
<p style="font-size: 48pt; font-weight: 600; color: #1a1a1a; letter-spacing: -0.02em;">2.4M</p>
|
|
38
|
+
<p style="font-size: 11pt; color: #888; margin-top: 8pt;">+340K this quarter</p>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div style="background: #ffffff; border-radius: 12pt; padding: 28pt; display: flex; flex-direction: column; justify-content: space-between; border: 1px solid #e5e5e0;">
|
|
42
|
+
<p style="font-size: 10pt; color: #888; text-transform: uppercase; letter-spacing: 0.05em;">Customer Satisfaction</p>
|
|
43
|
+
<div>
|
|
44
|
+
<p style="font-size: 48pt; font-weight: 600; color: #1a1a1a; letter-spacing: -0.02em;">4.9</p>
|
|
45
|
+
<p style="font-size: 11pt; color: #888; margin-top: 8pt;">Out of 5.0 rating</p>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- 푸터 -->
|
|
51
|
+
<div style="display: flex; justify-content: flex-end; padding-top: 16pt;">
|
|
52
|
+
<p style="font-size: 9pt; color: #999;">Source: Internal Analytics 2025</p>
|
|
53
|
+
</div>
|
|
54
|
+
</body>
|
|
55
|
+
</html>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #f5f5f0;
|
|
12
|
+
padding: 40pt 48pt;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<!-- 헤더 -->
|
|
20
|
+
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 32pt;">
|
|
21
|
+
<h2 style="font-size: 28pt; font-weight: 600; color: #1a1a1a;">Our Team</h2>
|
|
22
|
+
<p style="font-size: 10pt; color: #999;">05</p>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- 팀원 그리드 -->
|
|
26
|
+
<div style="flex: 1; display: grid; grid-template-columns: repeat(4, 1fr); gap: 20pt;">
|
|
27
|
+
<div style="text-align: center;">
|
|
28
|
+
<div style="width: 100%; aspect-ratio: 1; background: #d0d0c8; border-radius: 8pt; margin-bottom: 12pt;"></div>
|
|
29
|
+
<p style="font-size: 13pt; font-weight: 600; color: #1a1a1a;">John Smith</p>
|
|
30
|
+
<p style="font-size: 10pt; color: #888; margin-top: 4pt;">CEO & Founder</p>
|
|
31
|
+
</div>
|
|
32
|
+
<div style="text-align: center;">
|
|
33
|
+
<div style="width: 100%; aspect-ratio: 1; background: #d0d0c8; border-radius: 8pt; margin-bottom: 12pt;"></div>
|
|
34
|
+
<p style="font-size: 13pt; font-weight: 600; color: #1a1a1a;">Sarah Johnson</p>
|
|
35
|
+
<p style="font-size: 10pt; color: #888; margin-top: 4pt;">CTO</p>
|
|
36
|
+
</div>
|
|
37
|
+
<div style="text-align: center;">
|
|
38
|
+
<div style="width: 100%; aspect-ratio: 1; background: #d0d0c8; border-radius: 8pt; margin-bottom: 12pt;"></div>
|
|
39
|
+
<p style="font-size: 13pt; font-weight: 600; color: #1a1a1a;">Mike Chen</p>
|
|
40
|
+
<p style="font-size: 10pt; color: #888; margin-top: 4pt;">Design Lead</p>
|
|
41
|
+
</div>
|
|
42
|
+
<div style="text-align: center;">
|
|
43
|
+
<div style="width: 100%; aspect-ratio: 1; background: #d0d0c8; border-radius: 8pt; margin-bottom: 12pt;"></div>
|
|
44
|
+
<p style="font-size: 13pt; font-weight: 600; color: #1a1a1a;">Emily Davis</p>
|
|
45
|
+
<p style="font-size: 10pt; color: #888; margin-top: 4pt;">Marketing</p>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</body>
|
|
49
|
+
</html>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/static/pretendard.min.css">
|
|
5
|
+
<style>
|
|
6
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
7
|
+
body {
|
|
8
|
+
width: 720pt;
|
|
9
|
+
height: 405pt;
|
|
10
|
+
font-family: 'Pretendard', sans-serif;
|
|
11
|
+
background: #ffffff;
|
|
12
|
+
padding: 40pt 48pt;
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<!-- 헤더 -->
|
|
20
|
+
<div style="margin-bottom: 32pt;">
|
|
21
|
+
<h2 style="font-size: 28pt; font-weight: 600; color: #1a1a1a;">Our Journey</h2>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!-- 타임라인 -->
|
|
25
|
+
<div style="flex: 1; display: flex; align-items: center;">
|
|
26
|
+
<div style="display: flex; width: 100%; justify-content: space-between; position: relative;">
|
|
27
|
+
<!-- 연결선 -->
|
|
28
|
+
<div style="position: absolute; top: 12pt; left: 40pt; right: 40pt; height: 2pt; background: #e5e5e0;"></div>
|
|
29
|
+
|
|
30
|
+
<!-- 타임라인 아이템들 -->
|
|
31
|
+
<div style="text-align: center; z-index: 1;">
|
|
32
|
+
<div style="width: 24pt; height: 24pt; background: #1a1a1a; border-radius: 50%; margin: 0 auto 16pt;"></div>
|
|
33
|
+
<p style="font-size: 18pt; font-weight: 600; color: #1a1a1a;">2020</p>
|
|
34
|
+
<p style="font-size: 11pt; color: #888; margin-top: 8pt; max-width: 100pt;">Company Founded</p>
|
|
35
|
+
</div>
|
|
36
|
+
<div style="text-align: center; z-index: 1;">
|
|
37
|
+
<div style="width: 24pt; height: 24pt; background: #1a1a1a; border-radius: 50%; margin: 0 auto 16pt;"></div>
|
|
38
|
+
<p style="font-size: 18pt; font-weight: 600; color: #1a1a1a;">2021</p>
|
|
39
|
+
<p style="font-size: 11pt; color: #888; margin-top: 8pt; max-width: 100pt;">First Product Launch</p>
|
|
40
|
+
</div>
|
|
41
|
+
<div style="text-align: center; z-index: 1;">
|
|
42
|
+
<div style="width: 24pt; height: 24pt; background: #1a1a1a; border-radius: 50%; margin: 0 auto 16pt;"></div>
|
|
43
|
+
<p style="font-size: 18pt; font-weight: 600; color: #1a1a1a;">2023</p>
|
|
44
|
+
<p style="font-size: 11pt; color: #888; margin-top: 8pt; max-width: 100pt;">Series A Funding</p>
|
|
45
|
+
</div>
|
|
46
|
+
<div style="text-align: center; z-index: 1;">
|
|
47
|
+
<div style="width: 24pt; height: 24pt; background: #1a1a1a; border-radius: 50%; margin: 0 auto 16pt;"></div>
|
|
48
|
+
<p style="font-size: 18pt; font-weight: 600; color: #1a1a1a;">2025</p>
|
|
49
|
+
<p style="font-size: 11pt; color: #888; margin-top: 8pt; max-width: 100pt;">Global Expansion</p>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<!-- 푸터 -->
|
|
55
|
+
<div style="display: flex; justify-content: flex-end; padding-top: 16pt;">
|
|
56
|
+
<p style="font-size: 10pt; color: #999;">06</p>
|
|
57
|
+
</div>
|
|
58
|
+
</body>
|
|
59
|
+
</html>
|