UI Components Easy
Report Cover Page
Document or report cover page with title, subtitle, branding, date, and department details. Professional print-ready layout.
Open in Lab
MCP
vanilla-js css
Targets: JS HTML
Code
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: #f0f0f0;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
padding: 0 0 48px;
}
.screen-bar {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 24px;
background: #fff;
border-bottom: 1px solid #e5e7eb;
margin-bottom: 28px;
position: sticky;
top: 0;
z-index: 10;
}
.screen-bar-title {
font-size: 14px;
font-weight: 700;
color: #374151;
}
.print-btn {
background: #6366f1;
color: #fff;
border: none;
border-radius: 8px;
padding: 8px 18px;
font-size: 13px;
font-weight: 600;
cursor: pointer;
}
.print-btn:hover {
opacity: 0.85;
}
.cover {
width: 100%;
max-width: 794px;
min-height: 560px;
background: #0f0a2a;
position: relative;
overflow: hidden;
display: flex;
flex-direction: column;
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.15);
padding: 40px 48px;
}
/* Background shapes */
.cover-bg {
position: absolute;
inset: 0;
pointer-events: none;
}
.cover-shape {
position: absolute;
border-radius: 50%;
filter: blur(60px);
}
.cover-shape--1 {
width: 400px;
height: 400px;
background: rgba(99, 102, 241, 0.25);
top: -100px;
right: -80px;
}
.cover-shape--2 {
width: 300px;
height: 300px;
background: rgba(236, 72, 153, 0.12);
bottom: 0;
left: -60px;
}
.cover-shape--3 {
width: 200px;
height: 200px;
background: rgba(245, 158, 11, 0.08);
top: 40%;
left: 30%;
}
/* Layout */
.cover-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: auto;
position: relative;
}
.cover-logo {
font-size: 18px;
font-weight: 900;
color: rgba(255, 255, 255, 0.9);
letter-spacing: 0.02em;
}
.cover-year {
font-size: 14px;
font-weight: 700;
color: rgba(255, 255, 255, 0.3);
letter-spacing: 0.12em;
}
.cover-main {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
padding: 40px 0;
position: relative;
}
.cover-eyebrow {
font-size: 11px;
font-weight: 800;
text-transform: uppercase;
letter-spacing: 0.16em;
color: #818cf8;
margin-bottom: 16px;
}
.cover-title {
font-size: 44px;
font-weight: 900;
color: #fff;
line-height: 1.12;
letter-spacing: -0.025em;
margin-bottom: 20px;
}
.cover-subtitle {
font-size: 15px;
color: rgba(255, 255, 255, 0.55);
line-height: 1.7;
max-width: 440px;
}
/* Footer */
.cover-footer {
position: relative;
}
.cover-stats {
display: flex;
align-items: center;
gap: 0;
background: rgba(255, 255, 255, 0.05);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 12px;
padding: 16px 24px;
margin-bottom: 20px;
backdrop-filter: blur(10px);
}
.stat-block {
text-align: center;
flex: 1;
}
.stat-value {
font-size: 22px;
font-weight: 900;
color: #fff;
letter-spacing: -0.02em;
line-height: 1;
margin-bottom: 4px;
}
.stat-label {
font-size: 11px;
color: rgba(255, 255, 255, 0.4);
text-transform: uppercase;
letter-spacing: 0.06em;
}
.stat-divider {
width: 1px;
height: 36px;
background: rgba(255, 255, 255, 0.1);
}
.cover-footer-bar {
display: flex;
justify-content: space-between;
font-size: 10px;
color: rgba(255, 255, 255, 0.2);
padding-top: 12px;
border-top: 1px solid rgba(255, 255, 255, 0.06);
}
@media print {
.screen-bar {
display: none !important;
}
body {
background: #fff;
padding: 0;
}
.cover {
max-width: 100%;
min-height: 100vh;
box-shadow: none;
}
@page {
margin: 0;
size: A4;
}
}(function () {
const printBtn = document.querySelector(".print-btn");
if (!printBtn) return;
const dlBtn = document.createElement("button");
dlBtn.textContent = "\u2B07 Download HTML";
dlBtn.className = "print-btn";
dlBtn.style.cssText = "background:#fff;color:#4f46e5;border:1.5px solid #c7d2fe;margin-left:8px;";
printBtn.after(dlBtn);
dlBtn.addEventListener("click", function () {
const styles = Array.from(document.querySelectorAll("style"))
.map(function (s) {
return s.textContent;
})
.join("\n");
const bodyClone = document.body.cloneNode(true);
bodyClone.querySelector(".screen-bar")?.remove();
const html = [
"<!DOCTYPE html>",
'<html lang="en">',
"<head>",
'<meta charset="UTF-8">',
"<title>Annual Report 2025 - Acme Corp</title>",
"<style>",
styles,
".screen-bar{display:none!important;}",
"</style>",
"</head>",
"<body>",
bodyClone.innerHTML.trim(),
"</body>",
"</html>",
].join("\n");
const blob = new Blob([html], { type: "text/html" });
const a = document.createElement("a");
a.href = URL.createObjectURL(blob);
a.download = "annual-report-2025.html";
a.click();
URL.revokeObjectURL(a.href);
});
document.addEventListener("keydown", function (e) {
if ((e.metaKey || e.ctrlKey) && e.key === "p") {
// browser default print
}
});
})();<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Annual Report 2025</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="screen-bar">
<span class="screen-bar-title">Report Cover Preview</span>
<button class="print-btn" onclick="window.print()">🖨 Print / Save PDF</button>
</div>
<div class="cover">
<div class="cover-bg">
<div class="cover-shape cover-shape--1"></div>
<div class="cover-shape cover-shape--2"></div>
<div class="cover-shape cover-shape--3"></div>
</div>
<header class="cover-header">
<div class="cover-logo">Acme Corp</div>
<div class="cover-year">2025</div>
</header>
<main class="cover-main">
<div class="cover-eyebrow">Annual Report</div>
<h1 class="cover-title">Building the<br>Future of Commerce</h1>
<p class="cover-subtitle">A year of record growth, global expansion, and the technology that drives tomorrow's transactions.</p>
</main>
<footer class="cover-footer">
<div class="cover-stats">
<div class="stat-block">
<div class="stat-value">$4.2B</div>
<div class="stat-label">Revenue</div>
</div>
<div class="stat-divider"></div>
<div class="stat-block">
<div class="stat-value">+38%</div>
<div class="stat-label">YoY Growth</div>
</div>
<div class="stat-divider"></div>
<div class="stat-block">
<div class="stat-value">120+</div>
<div class="stat-label">Countries</div>
</div>
<div class="stat-divider"></div>
<div class="stat-block">
<div class="stat-value">12K</div>
<div class="stat-label">Employees</div>
</div>
</div>
<div class="cover-footer-bar">
<span>Acme Corp · Annual Report 2025 · CONFIDENTIAL</span>
<span>acmecorp.com/investors</span>
</div>
</footer>
</div>
<script src="./script.js"></script>
</body>
</html>Professional report cover page with full-height color band, company logo placeholder, report title in large type, subtitle, author, department, and date. Looks great on screen and prints on A4/Letter.