nicer visual aperance

This commit is contained in:
Hadrian Burkhardt
2026-05-10 10:31:51 +02:00
parent 120d1672a3
commit 1eb389ea5e
12 changed files with 1821 additions and 171 deletions
@@ -0,0 +1,525 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=1080, height=1920, initial-scale=1">
<title>Private QR Scanner Screenshot 2</title>
<style>
:root {
--bg: #f6fbfa;
--surface: #ffffff;
--surface-2: #edf8f5;
--ink: #0b1220;
--muted: #607080;
--line: #dce8e6;
--teal: #0f766e;
--teal-bright: #2dd4bf;
--mint: #dff7f2;
--blue: #1d4ed8;
}
* {
box-sizing: border-box;
}
html,
body {
width: 1080px;
height: 1920px;
margin: 0;
overflow: hidden;
font-family: Inter, "DejaVu Sans", Arial, sans-serif;
background: var(--bg);
color: var(--ink);
}
.shot {
position: relative;
width: 1080px;
height: 1920px;
overflow: hidden;
background:
radial-gradient(circle at 92% -4%, rgba(45, 212, 191, 0.20), transparent 31%),
linear-gradient(180deg, #f6fbfa 0%, #eff8f6 100%);
}
.status {
display: flex;
justify-content: space-between;
align-items: center;
height: 92px;
padding: 22px 44px 0;
color: var(--ink);
font-size: 24px;
font-weight: 760;
}
.system-icons {
display: flex;
align-items: center;
gap: 10px;
}
.signal {
display: flex;
align-items: end;
gap: 4px;
height: 22px;
}
.signal span {
width: 5px;
border-radius: 999px;
background: var(--ink);
}
.signal span:nth-child(1) { height: 8px; }
.signal span:nth-child(2) { height: 12px; }
.signal span:nth-child(3) { height: 16px; }
.signal span:nth-child(4) { height: 21px; }
.battery {
width: 42px;
height: 20px;
border: 2px solid var(--ink);
border-radius: 6px;
padding: 3px;
}
.battery::after {
content: "";
display: block;
width: 27px;
height: 10px;
border-radius: 3px;
background: var(--teal-bright);
}
.content {
padding: 30px 48px 144px;
}
.app-head {
display: flex;
align-items: center;
gap: 18px;
margin-bottom: 28px;
}
.app-icon {
width: 80px;
height: 80px;
border-radius: 20px;
box-shadow: 0 14px 28px rgba(15, 118, 110, 0.18);
}
.app-title {
margin: 0;
font-size: 34px;
line-height: 1.08;
font-weight: 850;
letter-spacing: 0;
}
.app-subtitle {
margin-top: 5px;
color: var(--muted);
font-size: 20px;
font-weight: 660;
}
.hero {
margin-bottom: 28px;
padding: 28px;
border-radius: 34px;
background:
radial-gradient(circle at 88% 20%, rgba(45, 212, 191, 0.18), transparent 34%),
linear-gradient(145deg, #0b1220, #123b3f);
color: #f8fafc;
box-shadow: 0 22px 44px rgba(7, 17, 31, 0.18);
}
.hero-row {
display: grid;
grid-template-columns: 1fr 152px;
gap: 20px;
align-items: center;
}
.hero h1 {
margin: 0;
font-size: 47px;
line-height: 1.04;
font-weight: 850;
letter-spacing: 0;
}
.hero p {
margin: 16px 0 0;
color: #cbe7e3;
font-size: 25px;
line-height: 1.25;
font-weight: 560;
}
.safe-card {
display: grid;
place-items: center;
width: 152px;
height: 152px;
border-radius: 30px;
background: rgba(223, 247, 242, 0.12);
border: 1px solid rgba(223, 247, 242, 0.18);
}
.safe-card svg {
width: 86px;
height: 86px;
}
.privacy-strip {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 13px;
margin-top: 26px;
}
.privacy-pill {
display: flex;
align-items: center;
justify-content: center;
min-height: 58px;
border-radius: 18px;
background: rgba(223, 247, 242, 0.12);
color: #dff7f2;
font-size: 20px;
font-weight: 820;
text-align: center;
}
.section-title {
margin: 0 0 18px;
color: #132032;
font-size: 31px;
font-weight: 850;
}
.search {
display: flex;
align-items: center;
gap: 14px;
height: 72px;
margin-bottom: 16px;
padding: 0 22px;
border: 2px solid #cfe0de;
border-radius: 20px;
background: var(--surface);
color: var(--muted);
font-size: 22px;
font-weight: 640;
}
.search svg {
width: 26px;
height: 26px;
color: var(--teal);
}
.export-row {
display: flex;
gap: 12px;
margin-bottom: 20px;
}
.export {
height: 50px;
padding: 0 18px;
border: 0;
border-radius: 15px;
background: var(--mint);
color: var(--teal);
font-size: 18px;
font-weight: 840;
}
.delete {
margin-left: auto;
background: #fff1f2;
color: #be123c;
}
.history-list {
display: grid;
gap: 14px;
}
.history-item {
display: grid;
grid-template-columns: 58px 1fr;
gap: 16px;
padding: 19px;
border-radius: 24px;
background: var(--surface);
border: 1px solid rgba(15, 23, 42, 0.06);
box-shadow: 0 14px 30px rgba(15, 23, 42, 0.06);
}
.type-icon {
display: grid;
place-items: center;
width: 58px;
height: 58px;
border-radius: 16px;
background: var(--surface-2);
color: var(--teal);
}
.type-icon svg {
width: 30px;
height: 30px;
}
.row-top {
display: flex;
justify-content: space-between;
gap: 18px;
align-items: baseline;
}
.type {
color: #132032;
font-size: 24px;
font-weight: 850;
}
.time {
color: #7b8b98;
font-size: 18px;
font-weight: 680;
white-space: nowrap;
}
.value {
margin-top: 7px;
color: #41566a;
font-size: 21px;
line-height: 1.25;
font-weight: 620;
}
.settings-panel {
margin-top: 30px;
padding: 24px;
border-radius: 30px;
background: var(--surface);
box-shadow: 0 18px 38px rgba(15, 23, 42, 0.07);
}
.setting {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 74px;
border-bottom: 1px solid var(--line);
color: #172033;
font-size: 24px;
font-weight: 780;
}
.setting:last-child {
border-bottom: 0;
}
.switch {
position: relative;
width: 70px;
height: 40px;
border-radius: 999px;
background: var(--teal);
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.04);
}
.switch::after {
content: "";
position: absolute;
top: 5px;
right: 5px;
width: 30px;
height: 30px;
border-radius: 50%;
background: #ffffff;
box-shadow: 0 4px 8px rgba(15, 23, 42, 0.24);
}
.nav {
position: absolute;
left: 0;
right: 0;
bottom: 0;
z-index: 9;
display: grid;
grid-template-columns: repeat(3, 1fr);
height: 118px;
padding: 12px 56px 18px;
background: #fcfffe;
color: #607080;
border-top: 1px solid rgba(15, 23, 42, 0.08);
}
.nav-item {
display: grid;
place-items: center;
align-content: center;
gap: 7px;
font-size: 20px;
font-weight: 740;
}
.nav-item svg {
width: 28px;
height: 28px;
}
.nav-item.active {
color: var(--teal);
}
</style>
</head>
<body>
<main class="shot">
<div class="status">
<div>9:41</div>
<div class="system-icons">
<div class="signal"><span></span><span></span><span></span><span></span></div>
<div class="battery"></div>
</div>
</div>
<section class="content">
<header class="app-head">
<img class="app-icon" src="./private-qr-scanner-icon.svg" alt="">
<div>
<h1 class="app-title">Private QR Scanner</h1>
<div class="app-subtitle">Optional history stays on your device</div>
</div>
</header>
<section class="hero">
<div class="hero-row">
<div>
<h1>Review past scans locally</h1>
<p>Search, export, or delete saved scans whenever you choose.</p>
</div>
<div class="safe-card" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none">
<path d="M12 3L19 6V11C19 15.7 16.1 19.9 12 21.8C7.9 19.9 5 15.7 5 11V6L12 3Z" fill="#2DD4BF"/>
<path d="M8.6 12.2L10.9 14.5L15.8 9.5" stroke="#07111F" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
</div>
<div class="privacy-strip">
<div class="privacy-pill">No ads</div>
<div class="privacy-pill">No tracking</div>
<div class="privacy-pill">No account</div>
</div>
</section>
<h2 class="section-title">History</h2>
<div class="search">
<svg viewBox="0 0 24 24" fill="none">
<path d="M10.8 18.2C14.9 18.2 18.2 14.9 18.2 10.8C18.2 6.7 14.9 3.4 10.8 3.4C6.7 3.4 3.4 6.7 3.4 10.8C3.4 14.9 6.7 18.2 10.8 18.2Z" stroke="currentColor" stroke-width="2.2"/>
<path d="M16.4 16.4L21 21" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/>
</svg>
Search saved scans
</div>
<div class="export-row">
<button class="export">TXT</button>
<button class="export">CSV</button>
<button class="export">JSON</button>
<button class="export delete">Delete all</button>
</div>
<div class="history-list">
<article class="history-item">
<div class="type-icon">
<svg viewBox="0 0 24 24" fill="none">
<path d="M10 13A5 5 0 0 0 17.1 13L20 10.1A5 5 0 0 0 12.9 3L11.8 4.1" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
<path d="M14 11A5 5 0 0 0 6.9 11L4 13.9A5 5 0 0 0 11.1 21L12.2 19.9" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
</div>
<div>
<div class="row-top"><div class="type">URL</div><div class="time">Today, 9:38 AM</div></div>
<div class="value">https://example.org/menu</div>
</div>
</article>
<article class="history-item">
<div class="type-icon">
<svg viewBox="0 0 24 24" fill="none">
<path d="M4 8L12 13L20 8" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5 6H19C19.6 6 20 6.4 20 7V17C20 17.6 19.6 18 19 18H5C4.4 18 4 17.6 4 17V7C4 6.4 4.4 6 5 6Z" stroke="currentColor" stroke-width="2.2"/>
</svg>
</div>
<div>
<div class="row-top"><div class="type">Email</div><div class="time">Today, 9:21 AM</div></div>
<div class="value">support@example.org</div>
</div>
</article>
<article class="history-item">
<div class="type-icon">
<svg viewBox="0 0 24 24" fill="none">
<path d="M5 12.5C8.9 8.7 15.1 8.7 19 12.5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/>
<path d="M8.2 15.4C10.3 13.4 13.7 13.4 15.8 15.4" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/>
<path d="M12 19H12.02" stroke="currentColor" stroke-width="3.2" stroke-linecap="round"/>
</svg>
</div>
<div>
<div class="row-top"><div class="type">Wi-Fi</div><div class="time">Yesterday</div></div>
<div class="value">SSID: Guest Network</div>
</div>
</article>
</div>
<section class="settings-panel">
<div class="setting">
<span>Save history (local)</span>
<span class="switch"></span>
</div>
<div class="setting">
<span>Security warnings</span>
<span class="switch"></span>
</div>
<div class="setting">
<span>Scan feedback</span>
<span class="switch"></span>
</div>
</section>
</section>
<nav class="nav">
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none">
<path d="M5 7V5H9M15 5H19V9M19 15V19H15M9 19H5V15" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"/>
<path d="M8 12H16" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"/>
</svg>
Scan
</div>
<div class="nav-item active">
<svg viewBox="0 0 24 24" fill="none">
<path d="M5 5H19V19H5V5Z" stroke="currentColor" stroke-width="2"/>
<path d="M8 9H16M8 13H16M8 17H13" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
History
</div>
<div class="nav-item">
<svg viewBox="0 0 24 24" fill="none">
<path d="M12 15.5C13.9 15.5 15.5 13.9 15.5 12C15.5 10.1 13.9 8.5 12 8.5C10.1 8.5 8.5 10.1 8.5 12C8.5 13.9 10.1 15.5 12 15.5Z" stroke="currentColor" stroke-width="2"/>
<path d="M19 12H21M3 12H5M12 3V5M12 19V21M17 7L18.4 5.6M5.6 18.4L7 17M17 17L18.4 18.4M5.6 5.6L7 7" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
Settings
</div>
</nav>
</main>
</body>
</html>