dokio-create-template 1.0.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.md +162 -0
- package/bin/cli.js +5 -0
- package/index.js +1 -0
- package/lib/creator.js +144 -0
- package/package.json +50 -0
- package/templates/email/CHANGELOG.md +14 -0
- package/templates/email/data.yaml +70 -0
- package/templates/email/index.html +96 -0
- package/templates/email/style.scss.hbs +56 -0
- package/templates/general/CHANGELOG.md +9 -0
- package/templates/general/data.yaml +43 -0
- package/templates/general/index.html +16 -0
- package/templates/general/style.scss.hbs +41 -0
- package/templates/pdf/CHANGELOG.md +12 -0
- package/templates/pdf/data.yaml +70 -0
- package/templates/pdf/index.html +15 -0
- package/templates/pdf/style.scss.hbs +108 -0
- package/templates/video/CHANGELOG.md +11 -0
- package/templates/video/data.yaml +43 -0
- package/templates/video/index.html +16 -0
- package/templates/video/style.scss.hbs +57 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dokio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# dokio-create-template
|
|
2
|
+
|
|
3
|
+
🚀 **CLI tool to scaffold Dokio templates**
|
|
4
|
+
|
|
5
|
+
Quickly generate starter templates for Dokio with all the necessary files and configurations.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
### Global Installation (Recommended)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g dokio-create-template
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Local Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install dokio-create-template
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
### Global Installation
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
dokio-create-template
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Local Installation
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx dokio-create-template
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Interactive Prompts
|
|
36
|
+
|
|
37
|
+
The CLI will guide you through the template creation process with the following prompts:
|
|
38
|
+
|
|
39
|
+
1. **Template Type**: Choose from General (Image), PDF, Email, or Video
|
|
40
|
+
2. **Template Name**: Enter a human-readable name for your template
|
|
41
|
+
3. **Template ID**: Enter a slug/ID (auto-generated from name by default)
|
|
42
|
+
4. **Subdomain**: Specify the Dokio subdomain (default: `test`)
|
|
43
|
+
5. **Output Directory**: Where to save the template files (default: `./{template-id}`)
|
|
44
|
+
|
|
45
|
+
### Additional Prompts (PDF Templates)
|
|
46
|
+
|
|
47
|
+
For PDF templates, you'll also be asked:
|
|
48
|
+
|
|
49
|
+
- **Prince Version**: Choose between version 11 or 15 (15 supports Flexbox)
|
|
50
|
+
- **Resizable**: Whether the template should support dynamic sizing
|
|
51
|
+
- **Dynamic Pages**: Whether the template should support variable page count
|
|
52
|
+
|
|
53
|
+
## Generated Files
|
|
54
|
+
|
|
55
|
+
The tool generates the following files:
|
|
56
|
+
|
|
57
|
+
- **index.html** - Template markup
|
|
58
|
+
- **style.scss.hbs** - SCSS styles with Handlebars support
|
|
59
|
+
- **data.yaml** - Template configuration and field definitions
|
|
60
|
+
- **CHANGELOG.md** - Version history
|
|
61
|
+
|
|
62
|
+
## Template Types
|
|
63
|
+
|
|
64
|
+
### General (Image)
|
|
65
|
+
- Export formats: JPG, PNG
|
|
66
|
+
- Dimensions: 400x400px (customizable)
|
|
67
|
+
- Use case: Social media graphics, banners, thumbnails
|
|
68
|
+
|
|
69
|
+
### PDF
|
|
70
|
+
- Export formats: Hi-res PDF, Low-res PDF, Print orders
|
|
71
|
+
- Prince XML support (versions 11 or 15)
|
|
72
|
+
- Built-in support for headers, footers, page numbers
|
|
73
|
+
- Use case: Brochures, flyers, certificates, reports
|
|
74
|
+
|
|
75
|
+
### Email
|
|
76
|
+
- Responsive design (desktop and mobile)
|
|
77
|
+
- Outlook and Gmail compatible
|
|
78
|
+
- Export formats: Standalone HTML, Hosted HTML, URL
|
|
79
|
+
- Built-in accessibility features
|
|
80
|
+
- Use case: Marketing emails, newsletters, transactional emails
|
|
81
|
+
|
|
82
|
+
### Video
|
|
83
|
+
- Resolution: 1920x1080 (Full HD)
|
|
84
|
+
- Default duration: 30 seconds
|
|
85
|
+
- Export format: 1080p video
|
|
86
|
+
- Use case: Social media videos, ads, animations
|
|
87
|
+
|
|
88
|
+
## Example
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
$ dokio-create-template
|
|
92
|
+
|
|
93
|
+
🚀 Dokio Template Generator
|
|
94
|
+
|
|
95
|
+
? What type of template do you want to create? PDF
|
|
96
|
+
? Template name: Marketing Brochure
|
|
97
|
+
? Template ID (slug): marketing-brochure
|
|
98
|
+
? Subdomain: production
|
|
99
|
+
? Output directory: ./marketing-brochure
|
|
100
|
+
? Prince version: 15
|
|
101
|
+
? Is this a resizable template? No
|
|
102
|
+
? Will this template have dynamic page count? Yes
|
|
103
|
+
|
|
104
|
+
✔ Template created successfully!
|
|
105
|
+
|
|
106
|
+
📁 Files created:
|
|
107
|
+
./marketing-brochure/index.html
|
|
108
|
+
./marketing-brochure/style.scss.hbs
|
|
109
|
+
./marketing-brochure/data.yaml
|
|
110
|
+
./marketing-brochure/CHANGELOG.md
|
|
111
|
+
|
|
112
|
+
✨ Next steps:
|
|
113
|
+
cd marketing-brochure
|
|
114
|
+
Start customizing your template files
|
|
115
|
+
Upload to Dokio when ready
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Template Customization
|
|
119
|
+
|
|
120
|
+
After generating your template, you can customize:
|
|
121
|
+
|
|
122
|
+
### data.yaml
|
|
123
|
+
- Add/modify fields
|
|
124
|
+
- Configure export options
|
|
125
|
+
- Set page dimensions
|
|
126
|
+
- Define default values
|
|
127
|
+
|
|
128
|
+
### index.html
|
|
129
|
+
- Add markup structure
|
|
130
|
+
- Use Handlebars syntax for dynamic content
|
|
131
|
+
- Reference field values with `{{{field-name}}}`
|
|
132
|
+
|
|
133
|
+
### style.scss.hbs
|
|
134
|
+
- Write SCSS styles
|
|
135
|
+
- Use Handlebars for dynamic styling
|
|
136
|
+
- Configure responsive breakpoints (email templates)
|
|
137
|
+
|
|
138
|
+
### CHANGELOG.md
|
|
139
|
+
- Document template changes
|
|
140
|
+
- Track version history
|
|
141
|
+
|
|
142
|
+
## Dokio Resources
|
|
143
|
+
|
|
144
|
+
- **Documentation**: https://docs.dokio.com
|
|
145
|
+
- **Developer Reference**: See your Dokio Developer Reference PDF
|
|
146
|
+
- **Support**: https://support.dokio.com
|
|
147
|
+
|
|
148
|
+
## Contributing
|
|
149
|
+
|
|
150
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
151
|
+
|
|
152
|
+
## License
|
|
153
|
+
|
|
154
|
+
MIT
|
|
155
|
+
|
|
156
|
+
## Author
|
|
157
|
+
|
|
158
|
+
Dokio - https://dokio.com
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
**Need help?** Check the [Dokio Developer Reference](https://docs.dokio.com) for detailed information on template development.
|
package/bin/cli.js
ADDED
package/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./lib/creator');
|
package/lib/creator.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
const inquirer = require('inquirer');
|
|
2
|
+
const chalk = require('chalk');
|
|
3
|
+
const ora = require('ora');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
|
|
7
|
+
async function createTemplate() {
|
|
8
|
+
console.log(chalk.cyan.bold('\n🚀 Dokio Template Generator\n'));
|
|
9
|
+
|
|
10
|
+
try {
|
|
11
|
+
// Ask user for template type
|
|
12
|
+
const answers = await inquirer.prompt([
|
|
13
|
+
{
|
|
14
|
+
type: 'list',
|
|
15
|
+
name: 'templateType',
|
|
16
|
+
message: 'What type of template do you want to create?',
|
|
17
|
+
choices: [
|
|
18
|
+
{ name: 'General (Image)', value: 'general' },
|
|
19
|
+
{ name: 'PDF', value: 'pdf' },
|
|
20
|
+
{ name: 'Email', value: 'email' },
|
|
21
|
+
{ name: 'Video', value: 'video' },
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
type: 'input',
|
|
26
|
+
name: 'templateName',
|
|
27
|
+
message: 'Template name:',
|
|
28
|
+
default: 'My Template',
|
|
29
|
+
validate: (input) => input.trim() !== '' || 'Template name cannot be empty',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'input',
|
|
33
|
+
name: 'templateId',
|
|
34
|
+
message: 'Template ID (slug):',
|
|
35
|
+
default: (answers) => answers.templateName.toLowerCase().replace(/\s+/g, '-'),
|
|
36
|
+
validate: (input) => /^[a-z0-9-]+$/.test(input) || 'Template ID must be lowercase letters, numbers, and hyphens only',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
type: 'input',
|
|
40
|
+
name: 'subdomain',
|
|
41
|
+
message: 'Subdomain:',
|
|
42
|
+
default: 'test',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'input',
|
|
46
|
+
name: 'outputDir',
|
|
47
|
+
message: 'Output directory:',
|
|
48
|
+
default: (answers) => `./${answers.templateId}`,
|
|
49
|
+
},
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
// Additional questions for PDF templates
|
|
53
|
+
let pdfOptions = {};
|
|
54
|
+
if (answers.templateType === 'pdf') {
|
|
55
|
+
pdfOptions = await inquirer.prompt([
|
|
56
|
+
{
|
|
57
|
+
type: 'list',
|
|
58
|
+
name: 'princeVersion',
|
|
59
|
+
message: 'Prince version:',
|
|
60
|
+
choices: ['11', '15'],
|
|
61
|
+
default: '15',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
type: 'confirm',
|
|
65
|
+
name: 'resizable',
|
|
66
|
+
message: 'Is this a resizable template?',
|
|
67
|
+
default: false,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
type: 'confirm',
|
|
71
|
+
name: 'dynamicPages',
|
|
72
|
+
message: 'Will this template have dynamic page count?',
|
|
73
|
+
default: false,
|
|
74
|
+
},
|
|
75
|
+
]);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Create the template
|
|
79
|
+
const spinner = ora('Creating template files...').start();
|
|
80
|
+
|
|
81
|
+
await generateTemplateFiles({
|
|
82
|
+
...answers,
|
|
83
|
+
...pdfOptions,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
spinner.succeed(chalk.green('Template created successfully!'));
|
|
87
|
+
|
|
88
|
+
console.log(chalk.cyan('\n📁 Files created:'));
|
|
89
|
+
console.log(chalk.gray(` ${answers.outputDir}/index.html`));
|
|
90
|
+
console.log(chalk.gray(` ${answers.outputDir}/style.scss.hbs`));
|
|
91
|
+
console.log(chalk.gray(` ${answers.outputDir}/data.yaml`));
|
|
92
|
+
console.log(chalk.gray(` ${answers.outputDir}/CHANGELOG.md`));
|
|
93
|
+
|
|
94
|
+
console.log(chalk.cyan('\n✨ Next steps:'));
|
|
95
|
+
console.log(chalk.gray(` cd ${answers.outputDir}`));
|
|
96
|
+
console.log(chalk.gray(' Start customizing your template files'));
|
|
97
|
+
console.log(chalk.gray(' Upload to Dokio when ready\n'));
|
|
98
|
+
|
|
99
|
+
} catch (error) {
|
|
100
|
+
if (error.isTtyError) {
|
|
101
|
+
console.error(chalk.red('Prompt couldn\'t be rendered in the current environment'));
|
|
102
|
+
} else {
|
|
103
|
+
console.error(chalk.red('Error creating template:'), error.message);
|
|
104
|
+
}
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async function generateTemplateFiles(config) {
|
|
110
|
+
const { templateType, outputDir } = config;
|
|
111
|
+
|
|
112
|
+
// Create output directory
|
|
113
|
+
if (!fs.existsSync(outputDir)) {
|
|
114
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Load template files
|
|
118
|
+
const templatesDir = path.join(__dirname, '../templates', templateType);
|
|
119
|
+
|
|
120
|
+
// Generate files from templates
|
|
121
|
+
const files = ['index.html', 'style.scss.hbs', 'data.yaml', 'CHANGELOG.md'];
|
|
122
|
+
|
|
123
|
+
for (const file of files) {
|
|
124
|
+
const templatePath = path.join(templatesDir, file);
|
|
125
|
+
let content = fs.readFileSync(templatePath, 'utf8');
|
|
126
|
+
|
|
127
|
+
// Replace placeholders
|
|
128
|
+
content = replacePlaceholders(content, config);
|
|
129
|
+
|
|
130
|
+
const outputPath = path.join(outputDir, file);
|
|
131
|
+
fs.writeFileSync(outputPath, content);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function replacePlaceholders(content, config) {
|
|
136
|
+
return content
|
|
137
|
+
.replace(/\{\{TEMPLATE_NAME\}\}/g, config.templateName)
|
|
138
|
+
.replace(/\{\{TEMPLATE_ID\}\}/g, config.templateId)
|
|
139
|
+
.replace(/\{\{SUBDOMAIN\}\}/g, config.subdomain)
|
|
140
|
+
.replace(/\{\{PRINCE_VERSION\}\}/g, config.princeVersion || '15')
|
|
141
|
+
.replace(/\{\{DATE\}\}/g, new Date().toISOString().split('T')[0]);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
module.exports = { createTemplate };
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dokio-create-template",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool to scaffold Dokio templates (general, pdf, email, video)",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"dokio-create-template": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"dokio",
|
|
14
|
+
"template",
|
|
15
|
+
"cli",
|
|
16
|
+
"scaffold",
|
|
17
|
+
"generator",
|
|
18
|
+
"pdf",
|
|
19
|
+
"email",
|
|
20
|
+
"video",
|
|
21
|
+
"create-template",
|
|
22
|
+
"boilerplate"
|
|
23
|
+
],
|
|
24
|
+
"author": "Dokio",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://github.com/yourusername/dokio-create-template.git"
|
|
29
|
+
},
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/yourusername/dokio-create-template/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/yourusername/dokio-create-template#readme",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"inquirer": "^8.2.5",
|
|
36
|
+
"chalk": "^4.1.2",
|
|
37
|
+
"ora": "^5.4.1"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=14.0.0"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"bin/",
|
|
44
|
+
"lib/",
|
|
45
|
+
"templates/",
|
|
46
|
+
"index.js",
|
|
47
|
+
"README.md",
|
|
48
|
+
"LICENSE"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Changelog - {{TEMPLATE_NAME}}
|
|
2
|
+
|
|
3
|
+
## [1.0.0] - {{DATE}}
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Initial email template creation
|
|
7
|
+
- Responsive design (desktop and mobile)
|
|
8
|
+
- Subject line and preheader fields
|
|
9
|
+
- Customizable brand color
|
|
10
|
+
- CTA button with URL field
|
|
11
|
+
- Gmail and Outlook compatibility
|
|
12
|
+
- Accessibility features (role attributes, semantic HTML)
|
|
13
|
+
- Multiple export options (standalone, hosted HTML, URL)
|
|
14
|
+
- Unsubscribe link support
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
|
|
3
|
+
mode: email
|
|
4
|
+
status: 0
|
|
5
|
+
subdomain: {{SUBDOMAIN}}
|
|
6
|
+
sendable: true
|
|
7
|
+
allow_pdf_proof: true
|
|
8
|
+
export_options:
|
|
9
|
+
downloadables:
|
|
10
|
+
standalone:
|
|
11
|
+
title: Standalone Download (local assets)
|
|
12
|
+
host_files: false
|
|
13
|
+
output: zip
|
|
14
|
+
hosted-html:
|
|
15
|
+
title: HTML Download (hosted assets)
|
|
16
|
+
host_files: true
|
|
17
|
+
output: zip
|
|
18
|
+
hosted-url:
|
|
19
|
+
title: URL (hosted assets)
|
|
20
|
+
host_files: true
|
|
21
|
+
output: url
|
|
22
|
+
fields_data:
|
|
23
|
+
subject-line:
|
|
24
|
+
type: text
|
|
25
|
+
title: Email Subject Line
|
|
26
|
+
default: "{{TEMPLATE_NAME}}"
|
|
27
|
+
placeholder: Enter subject line
|
|
28
|
+
maximum_characters: 100
|
|
29
|
+
|
|
30
|
+
preheader:
|
|
31
|
+
type: text
|
|
32
|
+
title: Preheader Text
|
|
33
|
+
default: "Preview text appears here"
|
|
34
|
+
placeholder: Enter preheader text
|
|
35
|
+
maximum_characters: 150
|
|
36
|
+
|
|
37
|
+
heading:
|
|
38
|
+
type: text
|
|
39
|
+
title: Heading
|
|
40
|
+
default: Welcome
|
|
41
|
+
placeholder: Enter heading text
|
|
42
|
+
|
|
43
|
+
body-text:
|
|
44
|
+
type: textarea
|
|
45
|
+
title: Body Text
|
|
46
|
+
default: |
|
|
47
|
+
This is your email body text.
|
|
48
|
+
Add your content here.
|
|
49
|
+
output_html_safe: true
|
|
50
|
+
output_auto_br: true
|
|
51
|
+
|
|
52
|
+
cta-text:
|
|
53
|
+
type: text
|
|
54
|
+
title: Call to Action Text
|
|
55
|
+
default: Learn More
|
|
56
|
+
placeholder: Enter button text
|
|
57
|
+
|
|
58
|
+
cta-url:
|
|
59
|
+
type: url
|
|
60
|
+
title: Call to Action URL
|
|
61
|
+
placeholder: https://example.com
|
|
62
|
+
|
|
63
|
+
brand-color:
|
|
64
|
+
type: colour
|
|
65
|
+
title: Brand Colour
|
|
66
|
+
customisable: true
|
|
67
|
+
options:
|
|
68
|
+
'0079C8': Blue
|
|
69
|
+
'FF6B35': Orange
|
|
70
|
+
'004E89': Navy
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width">
|
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
7
|
+
<meta name="x-apple-disable-message-reformatting">
|
|
8
|
+
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no">
|
|
9
|
+
<title>{{{subject-line}}}</title>
|
|
10
|
+
|
|
11
|
+
<!--[if mso]>
|
|
12
|
+
<style>
|
|
13
|
+
* { font-family: Arial, sans-serif !important; }
|
|
14
|
+
</style>
|
|
15
|
+
<![endif]-->
|
|
16
|
+
</head>
|
|
17
|
+
|
|
18
|
+
<body width="100%" style="margin: 0; padding: 0 !important; mso-line-height-rule: exactly; background-color: #f4f4f4;">
|
|
19
|
+
|
|
20
|
+
<!-- Preheader (hidden) -->
|
|
21
|
+
<div style="display: none; max-height: 0px; overflow: hidden;">
|
|
22
|
+
{{{preheader}}}
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- Gmail fix -->
|
|
26
|
+
<span style="display: block; width: 600px !important; max-width: 600px !important; height: 1px" class="mobileOff"></span>
|
|
27
|
+
|
|
28
|
+
<!-- Email Container -->
|
|
29
|
+
<center role="article" aria-roledescription="email" lang="en" style="width: 100%; background-color: #f4f4f4;">
|
|
30
|
+
|
|
31
|
+
<!-- Outer table -->
|
|
32
|
+
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="margin: auto;">
|
|
33
|
+
<tr>
|
|
34
|
+
<td style="padding: 20px 0;">
|
|
35
|
+
|
|
36
|
+
<!-- Main Email Table -->
|
|
37
|
+
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600" style="margin: auto; background-color: #ffffff;" class="email-container">
|
|
38
|
+
|
|
39
|
+
<!-- Header -->
|
|
40
|
+
<tr>
|
|
41
|
+
<td style="padding: 40px 30px; text-align: center; background-color: #{{brand-color}};">
|
|
42
|
+
<h1 style="margin: 0; font-family: Arial, sans-serif; font-size: 28px; line-height: 36px; color: #ffffff; font-weight: bold;">
|
|
43
|
+
{{{heading}}}
|
|
44
|
+
</h1>
|
|
45
|
+
</td>
|
|
46
|
+
</tr>
|
|
47
|
+
|
|
48
|
+
<!-- Body -->
|
|
49
|
+
<tr>
|
|
50
|
+
<td style="padding: 40px 30px; font-family: Arial, sans-serif; font-size: 16px; line-height: 24px; color: #333333;">
|
|
51
|
+
<p style="margin: 0 0 20px 0;">
|
|
52
|
+
{{{body-text}}}
|
|
53
|
+
</p>
|
|
54
|
+
</td>
|
|
55
|
+
</tr>
|
|
56
|
+
|
|
57
|
+
<!-- CTA Button -->
|
|
58
|
+
{{#if cta-url}}
|
|
59
|
+
<tr>
|
|
60
|
+
<td style="padding: 0 30px 40px 30px;">
|
|
61
|
+
<table role="presentation" cellspacing="0" cellpadding="0" border="0" style="margin: 0 auto;">
|
|
62
|
+
<tr>
|
|
63
|
+
<td style="background-color: #{{brand-color}}; text-align: center; border-radius: 4px;" class="button-td">
|
|
64
|
+
<a href="{{{cta-url.full_url}}}" style="background-color: #{{brand-color}}; border: 15px solid #{{brand-color}}; font-family: Arial, sans-serif; font-size: 16px; line-height: 20px; text-align: center; text-decoration: none; display: block; border-radius: 4px; font-weight: bold;" class="button-a">
|
|
65
|
+
<span style="color: #ffffff;" class="button-link">{{{cta-text}}}</span>
|
|
66
|
+
</a>
|
|
67
|
+
</td>
|
|
68
|
+
</tr>
|
|
69
|
+
</table>
|
|
70
|
+
</td>
|
|
71
|
+
</tr>
|
|
72
|
+
{{/if}}
|
|
73
|
+
|
|
74
|
+
<!-- Footer -->
|
|
75
|
+
<tr>
|
|
76
|
+
<td style="padding: 30px; background-color: #f8f8f8; text-align: center; font-family: Arial, sans-serif; font-size: 12px; line-height: 18px; color: #666666;">
|
|
77
|
+
<p style="margin: 0;">
|
|
78
|
+
© {{TEMPLATE_NAME}}<br>
|
|
79
|
+
{{#if unsubscribe_link}}
|
|
80
|
+
<a href="{{unsubscribe_link}}" style="color: #666666; text-decoration: underline;">Unsubscribe</a>
|
|
81
|
+
{{/if}}
|
|
82
|
+
</p>
|
|
83
|
+
</td>
|
|
84
|
+
</tr>
|
|
85
|
+
|
|
86
|
+
</table>
|
|
87
|
+
<!-- End Main Email Table -->
|
|
88
|
+
|
|
89
|
+
</td>
|
|
90
|
+
</tr>
|
|
91
|
+
</table>
|
|
92
|
+
<!-- End Outer table -->
|
|
93
|
+
|
|
94
|
+
</center>
|
|
95
|
+
</body>
|
|
96
|
+
</html>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// {{TEMPLATE_NAME}} Email Styles
|
|
2
|
+
// Mode: Email
|
|
3
|
+
|
|
4
|
+
// Mobile styles
|
|
5
|
+
@media screen and (max-width: 599px) {
|
|
6
|
+
|
|
7
|
+
// Gmail fix
|
|
8
|
+
.mobileOff {
|
|
9
|
+
width: 0px !important;
|
|
10
|
+
display: none !important;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Stack columns
|
|
14
|
+
.email-container {
|
|
15
|
+
width: 100% !important;
|
|
16
|
+
max-width: 100% !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Full width on mobile
|
|
20
|
+
.mobile-full-width {
|
|
21
|
+
width: 100% !important;
|
|
22
|
+
max-width: 100% !important;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Adjust padding on mobile
|
|
26
|
+
.mobile-padding {
|
|
27
|
+
padding: 20px !important;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Center buttons on mobile
|
|
31
|
+
.button-td,
|
|
32
|
+
.button-a {
|
|
33
|
+
text-align: center !important;
|
|
34
|
+
display: block !important;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Outlook-specific styles
|
|
39
|
+
<!--[if mso]>
|
|
40
|
+
<style type="text/css">
|
|
41
|
+
table {
|
|
42
|
+
border-collapse: collapse !important;
|
|
43
|
+
mso-table-lspace: 0pt !important;
|
|
44
|
+
mso-table-rspace: 0pt !important;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
img {
|
|
48
|
+
-ms-interpolation-mode: bicubic;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.button-td {
|
|
52
|
+
padding-left: 20px !important;
|
|
53
|
+
padding-right: 20px !important;
|
|
54
|
+
}
|
|
55
|
+
</style>
|
|
56
|
+
<![endif]-->
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
|
|
3
|
+
mode: general
|
|
4
|
+
subdomain: {{SUBDOMAIN}}
|
|
5
|
+
dimension_mode: px
|
|
6
|
+
compositing_data: {}
|
|
7
|
+
page_count: 1
|
|
8
|
+
dimension_width: 400
|
|
9
|
+
dimension_height: 400
|
|
10
|
+
export_options:
|
|
11
|
+
downloadables:
|
|
12
|
+
jpg_chrome:
|
|
13
|
+
title: JPG
|
|
14
|
+
renderer: image
|
|
15
|
+
format: jpg
|
|
16
|
+
png_chrome:
|
|
17
|
+
title: PNG
|
|
18
|
+
renderer: image
|
|
19
|
+
format: png
|
|
20
|
+
fields_data:
|
|
21
|
+
heading:
|
|
22
|
+
type: text
|
|
23
|
+
title: Heading
|
|
24
|
+
default: Welcome to {{TEMPLATE_NAME}}
|
|
25
|
+
placeholder: Enter heading text
|
|
26
|
+
|
|
27
|
+
body-text:
|
|
28
|
+
type: textarea
|
|
29
|
+
title: Body Text
|
|
30
|
+
default: |
|
|
31
|
+
This is your template body text.
|
|
32
|
+
Add your content here.
|
|
33
|
+
output_html_safe: true
|
|
34
|
+
output_auto_br: true
|
|
35
|
+
|
|
36
|
+
background-color:
|
|
37
|
+
type: colour
|
|
38
|
+
title: Background Colour
|
|
39
|
+
customisable: true
|
|
40
|
+
options:
|
|
41
|
+
'ffffff': White
|
|
42
|
+
'000000': Black
|
|
43
|
+
'0079C8': Blue
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>{{TEMPLATE_NAME}}</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<div class="container" style="background-color: #{{background-color}};">
|
|
10
|
+
<div class="content">
|
|
11
|
+
<h1 class="heading">{{{heading}}}</h1>
|
|
12
|
+
<div class="body-text">{{{body-text}}}</div>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// {{TEMPLATE_NAME}} Styles
|
|
2
|
+
// Mode: General (Image)
|
|
3
|
+
|
|
4
|
+
* {
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
body {
|
|
11
|
+
font-family: Arial, sans-serif;
|
|
12
|
+
-webkit-font-smoothing: antialiased;
|
|
13
|
+
-moz-osx-font-smoothing: grayscale;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.container {
|
|
17
|
+
width: 400px;
|
|
18
|
+
height: 400px;
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
padding: 40px;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.content {
|
|
26
|
+
text-align: center;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.heading {
|
|
30
|
+
font-size: 32px;
|
|
31
|
+
font-weight: bold;
|
|
32
|
+
margin-bottom: 20px;
|
|
33
|
+
color: #333;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.body-text {
|
|
37
|
+
font-size: 16px;
|
|
38
|
+
line-height: 1.6;
|
|
39
|
+
color: #666;
|
|
40
|
+
white-space: pre-line;
|
|
41
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog - {{TEMPLATE_NAME}}
|
|
2
|
+
|
|
3
|
+
## [1.0.0] - {{DATE}}
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Initial PDF template creation
|
|
7
|
+
- Prince version {{PRINCE_VERSION}} support
|
|
8
|
+
- Rich text editor for body content
|
|
9
|
+
- Customizable primary color
|
|
10
|
+
- Page numbers and headers
|
|
11
|
+
- Hi-res and low-res PDF export options
|
|
12
|
+
- Print-ready with bleed and crop marks
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
|
|
3
|
+
mode: pdf
|
|
4
|
+
prince_version: {{PRINCE_VERSION}}
|
|
5
|
+
status: 0
|
|
6
|
+
subdomain: {{SUBDOMAIN}}
|
|
7
|
+
dimension_mode: mm
|
|
8
|
+
page_count: 1
|
|
9
|
+
draft_proofable: true
|
|
10
|
+
dimension_width: 210
|
|
11
|
+
dimension_height: 297
|
|
12
|
+
compositing_data: {}
|
|
13
|
+
export_options:
|
|
14
|
+
orderable:
|
|
15
|
+
title: Print order
|
|
16
|
+
description: Order from Snap
|
|
17
|
+
description_complete: Ordered from Snap
|
|
18
|
+
title_download: This is the title for the orderable download
|
|
19
|
+
description_download: Download for your own printer
|
|
20
|
+
description_download_complete: Downloaded for your own printer
|
|
21
|
+
marks: true
|
|
22
|
+
bleed: true
|
|
23
|
+
supplier_choice: true
|
|
24
|
+
downloadables:
|
|
25
|
+
hi_res:
|
|
26
|
+
title: Hi-res Download
|
|
27
|
+
description: High resolution PDF for printing
|
|
28
|
+
renderer: pdf
|
|
29
|
+
marks: true
|
|
30
|
+
bleed: true
|
|
31
|
+
slug: false
|
|
32
|
+
approval_required: false
|
|
33
|
+
disable_printing: false
|
|
34
|
+
low-res-pdf:
|
|
35
|
+
title: Local Printer PDF
|
|
36
|
+
description: Use this version when emailing or printing in-house
|
|
37
|
+
renderer: pdf
|
|
38
|
+
bleed: false
|
|
39
|
+
slug: false
|
|
40
|
+
marks: false
|
|
41
|
+
approval_required: false
|
|
42
|
+
disable_printing: false
|
|
43
|
+
resolution: 200
|
|
44
|
+
fields_data:
|
|
45
|
+
heading:
|
|
46
|
+
type: text
|
|
47
|
+
title: Heading
|
|
48
|
+
default: {{TEMPLATE_NAME}}
|
|
49
|
+
placeholder: Enter heading text
|
|
50
|
+
|
|
51
|
+
body-text:
|
|
52
|
+
type: richtext
|
|
53
|
+
title: Body Text
|
|
54
|
+
placeholder: Enter your content here
|
|
55
|
+
font_sizes: 10px:14px 12px:16px 16px:18px:p 18px:20px
|
|
56
|
+
toolbar:
|
|
57
|
+
- bold
|
|
58
|
+
- italic
|
|
59
|
+
- link
|
|
60
|
+
- ul
|
|
61
|
+
- ol
|
|
62
|
+
|
|
63
|
+
primary-color:
|
|
64
|
+
type: colour
|
|
65
|
+
title: Primary Colour
|
|
66
|
+
customisable: true
|
|
67
|
+
options:
|
|
68
|
+
'0079C8': Blue
|
|
69
|
+
'FF6B35': Orange
|
|
70
|
+
'004E89': Navy
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>{{TEMPLATE_NAME}}</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<div class="page">
|
|
9
|
+
<div class="content">
|
|
10
|
+
<h1 class="heading" style="color: #{{primary-color}};">{{{heading}}}</h1>
|
|
11
|
+
<div class="body-text">{{{body-text}}}</div>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</body>
|
|
15
|
+
</html>
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
// {{TEMPLATE_NAME}} Styles
|
|
2
|
+
// Mode: PDF
|
|
3
|
+
// Prince Version: {{PRINCE_VERSION}}
|
|
4
|
+
|
|
5
|
+
// Page setup
|
|
6
|
+
@page {
|
|
7
|
+
size: A4 portrait;
|
|
8
|
+
margin: 15mm;
|
|
9
|
+
|
|
10
|
+
@top-center {
|
|
11
|
+
content: "{{TEMPLATE_NAME}}";
|
|
12
|
+
font-size: 10pt;
|
|
13
|
+
color: #999;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@bottom-right {
|
|
17
|
+
content: "Page " counter(page);
|
|
18
|
+
font-size: 10pt;
|
|
19
|
+
color: #999;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// PDF color conversion
|
|
24
|
+
@prince-pdf {
|
|
25
|
+
prince-pdf-color-conversion: full;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Reset
|
|
29
|
+
* {
|
|
30
|
+
margin: 0;
|
|
31
|
+
padding: 0;
|
|
32
|
+
box-sizing: border-box;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
body {
|
|
36
|
+
font-family: Arial, sans-serif;
|
|
37
|
+
font-size: 12pt;
|
|
38
|
+
line-height: 1.6;
|
|
39
|
+
color: #333;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.page {
|
|
43
|
+
width: 210mm;
|
|
44
|
+
height: 297mm;
|
|
45
|
+
position: relative;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.content {
|
|
49
|
+
padding: 20mm;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.heading {
|
|
53
|
+
font-size: 24pt;
|
|
54
|
+
font-weight: bold;
|
|
55
|
+
margin-bottom: 10mm;
|
|
56
|
+
line-height: 1.2;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.body-text {
|
|
60
|
+
font-size: 12pt;
|
|
61
|
+
line-height: 1.6;
|
|
62
|
+
|
|
63
|
+
p {
|
|
64
|
+
margin-bottom: 5mm;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
p:last-child {
|
|
68
|
+
margin-bottom: 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
strong {
|
|
72
|
+
font-weight: bold;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
em {
|
|
76
|
+
font-style: italic;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
ul, ol {
|
|
80
|
+
margin-left: 10mm;
|
|
81
|
+
margin-bottom: 5mm;
|
|
82
|
+
list-style-position: outside;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
li {
|
|
86
|
+
margin-bottom: 2mm;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
a {
|
|
90
|
+
color: #0079C8;
|
|
91
|
+
text-decoration: underline;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Utility: prevent orphans and widows
|
|
96
|
+
p {
|
|
97
|
+
orphans: 3;
|
|
98
|
+
widows: 3;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Utility: page breaks
|
|
102
|
+
.page-break {
|
|
103
|
+
page-break-before: always;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.avoid-break {
|
|
107
|
+
page-break-inside: avoid;
|
|
108
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Changelog - {{TEMPLATE_NAME}}
|
|
2
|
+
|
|
3
|
+
## [1.0.0] - {{DATE}}
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Initial video template creation
|
|
7
|
+
- 1920x1080 Full HD resolution
|
|
8
|
+
- 30 second duration
|
|
9
|
+
- Customizable background and text colors
|
|
10
|
+
- Fade-in animation effects
|
|
11
|
+
- Main text and subheading fields
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {{TEMPLATE_ID}} - {{TEMPLATE_NAME}}
|
|
3
|
+
mode: video
|
|
4
|
+
subdomain: {{SUBDOMAIN}}
|
|
5
|
+
duration: '30'
|
|
6
|
+
highlight_point: '27'
|
|
7
|
+
dimension_height: 1080
|
|
8
|
+
dimension_width: 1920
|
|
9
|
+
export_options:
|
|
10
|
+
downloadables:
|
|
11
|
+
hi-res:
|
|
12
|
+
title: 1080p
|
|
13
|
+
fields_data:
|
|
14
|
+
main-text:
|
|
15
|
+
type: text
|
|
16
|
+
title: Main Text
|
|
17
|
+
default: {{TEMPLATE_NAME}}
|
|
18
|
+
placeholder: Enter main text
|
|
19
|
+
|
|
20
|
+
subheading:
|
|
21
|
+
type: text
|
|
22
|
+
title: Subheading
|
|
23
|
+
default: Your message here
|
|
24
|
+
placeholder: Enter subheading
|
|
25
|
+
|
|
26
|
+
background-color:
|
|
27
|
+
type: colour
|
|
28
|
+
title: Background Colour
|
|
29
|
+
customisable: true
|
|
30
|
+
options:
|
|
31
|
+
'0079C8': Blue
|
|
32
|
+
'FF6B35': Orange
|
|
33
|
+
'000000': Black
|
|
34
|
+
'FFFFFF': White
|
|
35
|
+
|
|
36
|
+
text-color:
|
|
37
|
+
type: colour
|
|
38
|
+
title: Text Colour
|
|
39
|
+
customisable: true
|
|
40
|
+
options:
|
|
41
|
+
'FFFFFF': White
|
|
42
|
+
'000000': Black
|
|
43
|
+
'0079C8': Blue
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>{{TEMPLATE_NAME}}</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<div class="video-container" style="background-color: #{{background-color}};">
|
|
10
|
+
<div class="content">
|
|
11
|
+
<h1 class="main-text" style="color: #{{text-color}};">{{{main-text}}}</h1>
|
|
12
|
+
<p class="subheading" style="color: #{{text-color}};">{{{subheading}}}</p>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// {{TEMPLATE_NAME}} Video Styles
|
|
2
|
+
// Mode: Video
|
|
3
|
+
// Duration: 30 seconds
|
|
4
|
+
// Dimensions: 1920x1080 (Full HD)
|
|
5
|
+
|
|
6
|
+
* {
|
|
7
|
+
margin: 0;
|
|
8
|
+
padding: 0;
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
body {
|
|
13
|
+
font-family: Arial, sans-serif;
|
|
14
|
+
-webkit-font-smoothing: antialiased;
|
|
15
|
+
-moz-osx-font-smoothing: grayscale;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.video-container {
|
|
19
|
+
width: 1920px;
|
|
20
|
+
height: 1080px;
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: center;
|
|
24
|
+
position: relative;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.content {
|
|
28
|
+
text-align: center;
|
|
29
|
+
padding: 100px;
|
|
30
|
+
max-width: 1400px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.main-text {
|
|
34
|
+
font-size: 120px;
|
|
35
|
+
font-weight: bold;
|
|
36
|
+
line-height: 1.2;
|
|
37
|
+
margin-bottom: 40px;
|
|
38
|
+
animation: fadeIn 1s ease-in;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.subheading {
|
|
42
|
+
font-size: 60px;
|
|
43
|
+
line-height: 1.4;
|
|
44
|
+
animation: fadeIn 1.5s ease-in;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Animation keyframes
|
|
48
|
+
@keyframes fadeIn {
|
|
49
|
+
from {
|
|
50
|
+
opacity: 0;
|
|
51
|
+
transform: translateY(20px);
|
|
52
|
+
}
|
|
53
|
+
to {
|
|
54
|
+
opacity: 1;
|
|
55
|
+
transform: translateY(0);
|
|
56
|
+
}
|
|
57
|
+
}
|