blankify

This screen ships with every software update and it's simpler than you think #changelog #css #html

Source Code

index.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>Changelog</title>
  <link rel="stylesheet" href="styles.css"/>
</head>
<body>
  <main class="card">
    <div class="top">
      <h2>What's new</h2>
      <span class="version">v2.4.0</span>
    </div>
    <div class="entries">
      <div class="entry">
        <div class="dot new"></div>
        <div class="body">
          <span class="badge new">NEW</span>
          <p class="title">Dark mode support</p>
          <p class="desc">Auto theme switching based on system preferences</p>
        </div>
      </div>
      <div class="entry">
        <div class="dot improve"></div>
        <div class="body">
          <span class="badge improve">IMPROVED</span>
          <p class="title">Faster page loads</p>
          <p class="desc">Reduced bundle size by 40% with tree shaking</p>
        </div>
      </div>
      <div class="entry">
        <div class="dot fix"></div>
        <div class="body">
          <span class="badge fix">FIX</span>
          <p class="title">Auth token refresh</p>
          <p class="desc">Fixed session expiry loop on mobile</p>
        </div>
      </div>
    </div>
  </main>
</body>
</html>
styles.css
* {
  margin: 0;
  box-sizing: border-box;
}

body {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background: linear-gradient(160deg, #050608, #0a0e18 60%, #0e1428);
  font-family: system-ui, sans-serif;
}

.card {
  width: 420px;
  border-radius: 20px;
  overflow: hidden;
  background: rgba(255,255,255,0.06);
  backdrop-filter: blur(40px);
  border: 1px solid rgba(255,255,255,0.1);
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
}

.top {
  padding: 28px;
  background: linear-gradient(180deg, rgba(99,102,241,0.1), transparent);
  display: flex;
  align-items: center;
  font-size: 20px;
  font-weight: 700;
  color: #eef2ff;
}

.version {
  margin-left: auto;
  padding: 4px 12px;
  border-radius: 12px;
  background: rgba(99,102,241,0.15);
  border: 1px solid rgba(99,102,241,0.25);
  font-size: 12px;
  color: #a5b4fc;
}

.entries {
  padding: 8px 28px 28px;
}

.entry {
  display: flex;
  gap: 20px;
  padding: 14px 0;
}

.dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  margin-top: 6px;
}

.dot.new {
  background: #22c55e;
  box-shadow: 0 0 8px rgba(34,197,94,0.4);
}

.dot.improve {
  background: #3b82f6;
  box-shadow: 0 0 8px rgba(59,130,246,0.4);
}

.dot.fix {
  background: #f59e0b;
  box-shadow: 0 0 8px rgba(245,158,11,0.4);
}

.badge {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 4px;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 1px;
  margin-bottom: 6px;
}

.badge.new {
  background: rgba(34,197,94,0.12);
  color: #4ade80;
}

.badge.improve {
  background: rgba(59,130,246,0.12);
  color: #60a5fa;
}

.badge.fix {
  background: rgba(245,158,11,0.12);
  color: #fbbf24;
}

.title {
  font-size: 14px;
  font-weight: 600;
  color: rgba(255,255,255,0.85);
  margin-bottom: 4px;
}

.desc {
  font-size: 12px;
  color: rgba(255,255,255,0.4);
}