<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Kiln pricing — free for side projects, powerful plans for professionals and teams.">
<title>Kiln — Pricing</title>
<style>
:root {
--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
--mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
--bg: #090b0e;
--panel: #10141a;
--panel-2: #141922;
--line: rgba(255,255,255,.08);
--text: #e8edf2;
--text-soft: #cfd6de;
--muted: #8b95a1;
--accent: #3ddc97;
--accent-soft: rgba(61,220,151,.12);
--accent-line: rgba(61,220,151,.45);
--radius: 16px;
}
* { box-sizing: border-box; }
html { color-scheme: dark; }
body {
margin: 0;
background: var(--bg);
color: var(--text);
font-family: var(--sans);
font-size: 16px;
line-height: 1.6;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
/* Ambient backdrop: faint top glow + grid that fades out */
body::before {
content: "";
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
background:
radial-gradient(900px 420px at 50% -80px, rgba(61,220,151,.09), transparent 65%),
linear-gradient(rgba(255,255,255,.025) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.025) 1px, transparent 1px);
background-size: auto, 56px 56px, 56px 56px;
-webkit-mask-image: radial-gradient(1200px 720px at 50% 0%, #000 25%, transparent 100%);
mask-image: radial-gradient(1200px 720px at 50% 0%, #000 25%, transparent 100%);
}
::selection { background: rgba(61,220,151,.32); }
a:focus-visible, button:focus-visible {
outline: 2px solid var(--accent);
outline-offset: 3px;
}
.wrap {
max-width: 1120px;
margin: 0 auto;
padding: 0 24px;
}
/* ---------- Nav ---------- */
.nav {
display: flex;
align-items: center;
gap: 28px;
padding-top: 22px;
padding-bottom: 22px;
}
.logo {
display: inline-flex;
align-items: center;
gap: 10px;
font-family: var(--mono);
font-weight: 600;
font-size: 15px;
color: var(--text);
text-decoration: none;
letter-spacing: -.01em;
}
.mark {
width: 10px;
height: 10px;
background: var(--accent);
border-radius: 2.5px;
transform: rotate(45deg);
box-shadow: 0 0 14px rgba(61,220,151,.65);
}
.nav-links {
margin-left: auto;
display: flex;
align-items: center;
gap: 26px;
}
.nav-links a {
color: var(--muted);
text-decoration: none;
font-size: 14px;
transition: color .2s;
}
.nav-links a:hover { color: var(--text); }
.signin {
padding: 7px 14px;
border: 1px solid var(--line);
border-radius: 8px;
color: var(--text) !important;
}
.signin:hover { border-color: rgba(255,255,255,.22); background: rgba(255,255,255,.04); }
/* ---------- Hero ---------- */
.hero {
text-align: center;
padding: 72px 0 0;
}
.eyebrow {
font-family: var(--mono);
font-size: 12.5px;
letter-spacing: .22em;
text-transform: uppercase;
color: var(--muted);
margin: 0;
}
.eyebrow b { color: var(--accent); font-weight: 400; }
h1 {
margin: 18px 0 0;
font-size: clamp(2.3rem, 5vw, 3.5rem);
line-height: 1.06;
letter-spacing: -.035em;
font-weight: 600;
}
h1 .dim { color: var(--muted); }
.sub {
color: var(--muted);
max-width: 560px;
margin: 20px auto 0;
font-size: 17px;
}
/* ---------- Billing toggle ---------- */
.billing-toggle {
margin-top: 38px;
display: inline-flex;
gap: 4px;
padding: 4px;
background: var(--panel);
border: 1px solid var(--line);
border-radius: 999px;
}
.billing-toggle button {
appearance: none;
border: 0;
background: transparent;
color: var(--muted);
font-family: inherit;
font-size: 13.5px;
font-weight: 500;
padding: 8px 18px;
border-radius: 999px;
cursor: pointer;
display: inline-flex;
align-items: center;
gap: 8px;
transition: color .2s, background .2s;
}
.billing-toggle button:hover { color: var(--text); }
.billing-toggle button.active {
background: rgba(255,255,255,.08);
color: var(--text);
box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
}
.save {
font-family: var(--mono);
font-size: 11px;
color: var(--accent);
}
/* ---------- Plan grid ---------- */
.plans {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 18px;
margin-top: 58px;
align-items: stretch;
}
.card {
position: relative;
display: flex;
flex-direction: column;
padding: 28px 26px 26px;
background: var(--panel);
border: 1px solid var(--line);
border-radius: var(--radius);
transition: transform .25s ease, border-color .25s ease, box-shadow .25s ease;
}
.card:hover {
transform: translateY(-3px);
border-color: rgba(255,255,255,.17);
}
/* Emphasised middle tier: elevation, accent hairline, soft glow — no ribbon */
.card.featured {
background: linear-gradient(180deg, rgba(61,220,151,.07), rgba(61,220,151,.015) 45%), var(--panel-2);
border-color: var(--accent-line);
transform: translateY(-12px);
box-shadow:
0 28px 64px -24px rgba(0,0,0,.85),
0 0 0 1px rgba(61,220,151,.08),
0 0 48px -12px rgba(61,220,151,.22);
}
.card.featured:hover { transform: translateY(-15px); }
.card.featured::before {
content: "";
position: absolute;
top: -1px;
left: 28px;
right: 28px;
height: 1px;
background: linear-gradient(90deg, transparent, rgba(61,220,151,.9), transparent);
}
.kicker {
margin: 0 0 12px;
min-height: 16px;
font-family: var(--mono);
font-size: 11px;
letter-spacing: .18em;
text-transform: uppercase;
color: var(--accent);
}
.plan {
margin: 0;
font-family: var(--mono);
font-size: 14px;
font-weight: 600;
letter-spacing: .16em;
text-transform: uppercase;
color: #dfe6ee;
}
.price {
margin-top: 16px;
display: flex;
align-items: baseline;
gap: 7px;
}
.amount {
display: inline-block;
font-family: var(--mono);
font-size: 44px;
font-weight: 600;
letter-spacing: -.04em;
line-height: 1;
font-variant-numeric: tabular-nums;
}
.amount.tick { animation: tick .28s ease; }
@keyframes tick {
from { opacity: .25; transform: translateY(5px); }
to { opacity: 1; transform: none; }
}
.per { color: var(--muted); font-size: 14px; }
.note {
display: block;
min-height: 19px;
margin-top: 8px;
font-family: var(--mono);
font-size: 12px;
color: var(--muted);
}
.tagline {
margin: 12px 0 0;
font-size: 15px;
color: var(--text-soft);
}
.hr {
height: 1px;
background: var(--line);
margin: 22px 0;
}
.featured .hr { background: rgba(61,220,151,.18); }
.features {
list-style: none;
margin: 0 0 26px;
padding: 0;
display: grid;
gap: 11px;
font-size: 14.5px;
color: var(--text-soft);
}
.features li {
display: flex;
align-items: flex-start;
gap: 11px;
}
.features li::before {
content: "";
flex: none;
width: 9px;
height: 5px;
margin-top: .5em;
border-left: 1.6px solid var(--accent);
border-bottom: 1.6px solid var(--accent);
transform: rotate(-45deg);
}
.features li.group {
font-family: var(--mono);
font-size: 11px;
letter-spacing: .14em;
text-transform: uppercase;
color: var(--muted);
margin-bottom: -3px;
}
.features li.group::before { display: none; }
/* ---------- Buttons ---------- */
.btn {
margin-top: auto;
display: block;
text-align: center;
padding: 12px 18px;
border-radius: 10px;
font-size: 15px;
font-weight: 500;
text-decoration: none;
color: var(--text);
background: rgba(255,255,255,.03);
border: 1px solid var(--line);
transition: background .2s, border-color .2s, transform .2s;
}
.btn:hover {
background: rgba(255,255,255,.06);
border-color: rgba(255,255,255,.24);
}
.btn-primary {
background: var(--accent);
border-color: transparent;
color: #04150c;
font-weight: 600;
box-shadow: 0 10px 26px -10px rgba(61,220,151,.55);
}
.btn-primary:hover {
background: #56e7a7;
border-color: transparent;
transform: translateY(-1px);
}
/* ---------- Trust row / enterprise ---------- */
.trust {
margin-top: 44px;
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px 30px;
font-family: var(--mono);
font-size: 12.5px;
color: var(--muted);
}
.trust b { color: var(--accent); font-weight: 400; margin-right: 2px; }
.enterprise {
text-align: center;
margin-top: 26px;
color: var(--muted);
font-size: 14.5px;
}
.enterprise a {
color: var(--accent);
text-decoration: none;
border-bottom: 1px solid rgba(61,220,151,.35);
transition: border-color .2s;
}
.enterprise a:hover { border-bottom-color: var(--accent); }
/* ---------- Footer ---------- */
footer {
margin-top: 96px;
border-top: 1px solid var(--line);
}
.footer-inner {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
padding-top: 26px;
padding-bottom: 26px;
font-family: var(--mono);
font-size: 12.5px;
color: var(--muted);
}
.footer-inner a {
color: var(--muted);
text-decoration: none;
margin-left: 22px;
transition: color .2s;
}
.footer-inner a:hover { color: var(--text); }
/* ---------- Responsive ---------- */
@media (max-width: 960px) {
.plans {
grid-template-columns: 1fr;
max-width: 480px;
margin-left: auto;
margin-right: auto;
}
.card.featured { transform: none; }
.card.featured:hover { transform: translateY(-3px); }
.hero { padding-top: 52px; }
}
@media (max-width: 560px) {
.nav-links a:not(.signin) { display: none; }
.card { padding: 24px 20px 22px; }
footer { margin-top: 72px; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation: none !important;
transition: none !important;
}
}
</style>
</head>
<body>
<header class="nav wrap">
<a class="logo" href="#"><span class="mark" aria-hidden="true"></span>kiln</a>
<nav class="nav-links" aria-label="Primary">
<a href="#">Docs</a>
<a href="#">Changelog</a>
<a href="#">Status</a>
<a href="#" class="signin">Sign in</a>
</nav>
</header>
<main class="wrap">
<section class="hero">
<p class="eyebrow"><b>//</b> Pricing</p>
<h1>Start free.<br><span class="dim">Scale when you do.</span></h1>
<p class="sub">Kiln is CI that stays out of your way — free for side projects, with room to grow when the side project becomes the real thing.</p>
<div class="billing-toggle" role="group" aria-label="Billing period">
<button type="button" class="active" data-period="monthly" aria-pressed="true">Monthly</button>
<button type="button" data-period="annual" aria-pressed="false">Annual <span class="save">−20%</span></button>
</div>
</section>
<section class="plans" aria-label="Plans">
<!-- Hobby -->
<article class="card">
<p class="kicker" aria-hidden="true"></p>
<h3 class="plan">Hobby</h3>
<div class="price">
<span class="amount">$0</span>
</div>
<span class="note">free forever</span>
<p class="tagline">For side projects and weekend experiments.</p>
<div class="hr"></div>
<ul class="features">
<li>1 project</li>
<li>100 builds / month</li>
<li>Community plugins & templates</li>
<li>7-day log retention</li>
<li>Community support</li>
</ul>
<a class="btn" href="#">Start for free</a>
</article>
<!-- Pro (emphasised) -->
<article class="card featured">
<p class="kicker">Most popular</p>
<h3 class="plan">Pro</h3>
<div class="price">
<span class="amount" data-monthly="$20" data-annual="$16">$20</span>
<span class="per">/ mo</span>
</div>
<span class="note" data-monthly="billed monthly" data-annual="billed annually · $192 / yr">billed monthly</span>
<p class="tagline">For developers shipping production software.</p>
<div class="hr"></div>
<ul class="features">
<li class="group">Everything in Hobby, plus</li>
<li>Unlimited projects</li>
<li>4 concurrent builds</li>
<li>Preview environments</li>
<li>30-day log retention</li>
<li>Priority support · 12-hr response</li>
</ul>
<a class="btn btn-primary" href="#">Start 14-day trial</a>
</article>
<!-- Team -->
<article class="card">
<p class="kicker" aria-hidden="true"></p>
<h3 class="plan">Team</h3>
<div class="price">
<span class="amount" data-monthly="$60" data-annual="$48">$60</span>
<span class="per">/ seat / mo</span>
</div>
<span class="note" data-monthly="billed monthly" data-annual="billed annually · $576 / seat / yr">billed monthly</span>
<p class="tagline">For organisations building together at scale.</p>
<div class="hr"></div>
<ul class="features">
<li class="group">Everything in Pro, plus</li>
<li>SSO / SAML & SCIM</li>
<li>Role-based access control</li>
<li>Audit logs</li>
<li>Self-hosted runners</li>
<li>99.99% uptime SLA</li>
<li>Dedicated support engineer</li>
</ul>
<a class="btn" href="#">Contact sales</a>
</article>
</section>
<div class="trust">
<span><b>✓</b> No credit card required</span>
<span><b>✓</b> Cancel anytime</span>
<span><b>✓</b> SOC 2 Type II</span>
<span><b>✓</b> Free for open source</span>
</div>
<p class="enterprise">Need on-prem, custom limits, or invoicing? <a href="#">Talk to us about Enterprise ↗</a></p>
</main>
<footer>
<div class="footer-inner wrap">
<span>© 2025 Kiln Systems, Inc. · Prices in USD</span>
<span>
<a href="#">Privacy</a>
<a href="#">Terms</a>
<a href="#">Security</a>
</span>
</div>
</footer>
<script>
(function () {
var toggle = document.querySelector('.billing-toggle');
if (!toggle) return;
var btns = toggle.querySelectorAll('button');
toggle.addEventListener('click', function (e) {
var btn = e.target.closest('button');
if (!btn || btn.classList.contains('active')) return;
btns.forEach(function (b) {
var on = b === btn;
b.classList.toggle('active', on);
b.setAttribute('aria-pressed', on ? 'true' : 'false');
});
var annual = btn.dataset.period === 'annual';
document.querySelectorAll('[data-monthly]').forEach(function (el) {
el.textContent = annual ? el.dataset.annual : el.dataset.monthly;
if (el.classList.contains('amount')) {
el.classList.remove('tick');
void el.offsetWidth; /* restart animation */
el.classList.add('tick');
}
});
});
})();
</script>
</body>
</html>