/* persist.click — one stylesheet. Minimal on purpose: the product is a link
   that still works in 20 years, and the site should feel like it could too. */
:root{
  --bg:#fbfaf8; --fg:#17150f; --muted:#6b6558; --line:#e2ded4;
  --accent:#1f6f4a; --accent-fg:#fff; --card:#fff; --warn:#8a5a00;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Inter,sans-serif;
}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]){
  --bg:#12110f; --fg:#eeeae1; --muted:#9a9384; --line:#2b2823;
  --accent:#4fbf8b; --accent-fg:#0a0a08; --card:#1a1815;
}}
:root[data-theme=dark]{
  --bg:#12110f; --fg:#eeeae1; --muted:#9a9384; --line:#2b2823;
  --accent:#4fbf8b; --accent-fg:#0a0a08; --card:#1a1815;
}
*{box-sizing:border-box}
body{background:var(--bg);color:var(--fg);font:16px/1.6 var(--sans);margin:0}
.wrap{max-width:720px;margin:0 auto;padding:0 24px}
header.site{padding:28px 0;display:flex;justify-content:space-between;align-items:center}
.logo{font:600 17px/1 var(--mono);letter-spacing:-.3px;text-decoration:none;color:var(--fg)}
.logo span{color:var(--muted);font-weight:400}
h1{font-size:clamp(34px,6vw,52px);line-height:1.08;letter-spacing:-.028em;margin:.4em 0 .3em}
h2{font-size:22px;letter-spacing:-.015em;margin:2.6em 0 .7em}
p{margin:0 0 1em}
.lede{font-size:19px;color:var(--muted);max-width:33em}
.addr{font-family:var(--mono);font-size:15px;color:var(--muted)}
.btn{display:inline-block;background:var(--accent);color:var(--accent-fg);
  border:0;border-radius:9px;padding:14px 22px;font:600 16px/1 var(--sans);
  text-decoration:none;cursor:pointer}
.btn:hover{filter:brightness(1.07)}
.btn.ghost{background:transparent;color:var(--fg);border:1px solid var(--line);font-weight:500}
.steps{display:grid;gap:14px;grid-template-columns:repeat(3,1fr);margin:0 0 8px;padding:0;list-style:none}
.steps li{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:16px}
.steps b{display:block;font-size:13px;color:var(--accent);margin-bottom:5px;letter-spacing:.03em}
/* feature list — deliberately NOT .steps; different meaning, different shape */
.feat{list-style:none;margin:18px 0;padding:0}
.feat li{padding:9px 0 9px 26px;border-bottom:1px solid var(--line);position:relative}
.feat li:last-child{border-bottom:0}
.feat li::before{content:"";position:absolute;left:4px;top:17px;width:8px;height:8px;
  border-radius:50%;background:var(--accent)}
/* the product, made concrete: a link that looks like a link */
.demo{background:var(--card);border:1px solid var(--line);border-radius:13px;
  padding:0;overflow:hidden;margin:28px 0 8px;max-width:520px}
.demo .bar2{display:flex;align-items:center;gap:8px;padding:11px 14px;
  border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--fg) 3%,transparent)}
.demo .dot{width:9px;height:9px;border-radius:50%;background:var(--line)}
.demo .url{flex:1;font:14px var(--mono);color:var(--fg);white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.demo .body{padding:18px 14px;color:var(--muted);font-size:14px}
.demo .body b{color:var(--fg);font-weight:600}
.years{display:flex;gap:0;margin:6px 0 0;font:12px var(--mono);color:var(--muted)}
.years span{flex:1;padding:7px 0;text-align:center;border-top:2px solid var(--line)}
.years span.on{border-top-color:var(--accent);color:var(--accent)}
@media (max-width:560px){
  .steps{grid-template-columns:1fr}
  .wrap{padding:0 18px}
  h1{font-size:clamp(28px,9vw,40px)}
}
.why{border-left:2px solid var(--accent);padding-left:20px;margin:0 0 8px}
.why p{max-width:34em}
.why strong{font-weight:650}
.price{background:var(--card);border:1px solid var(--line);border-radius:13px;padding:24px;margin:12px 0}
.price .big{font-size:38px;font-weight:650;letter-spacing:-.02em}
.price ul{margin:12px 0 0;padding-left:18px;color:var(--muted)}
.note{color:var(--muted);font-size:14px}
details{border-top:1px solid var(--line);padding:14px 0}
summary{cursor:pointer;font-weight:550}
details p{margin:10px 0 0;color:var(--muted);max-width:34em}
footer{border-top:1px solid var(--line);margin-top:64px;padding:26px 0 48px;
  color:var(--muted);font-size:14px}
.field{display:flex;align-items:center;gap:0;border:1px solid var(--line);
  border-radius:10px;background:var(--card);overflow:hidden;max-width:460px}
.field input{flex:1;border:0;background:transparent;color:var(--fg);
  font:16px var(--mono);padding:14px 14px;outline:none;min-width:0}
.field .suffix{padding:0 14px;color:var(--muted);font:15px var(--mono);white-space:nowrap}
.ok{color:var(--accent);font-weight:600}
table{width:100%;border-collapse:collapse;font-size:15px}
th,td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line)}
th{color:var(--muted);font-weight:550;font-size:13px}
.bar{height:7px;background:var(--line);border-radius:4px;overflow:hidden;max-width:340px}
.bar i{display:block;height:100%;background:var(--accent)}

/* comparison */
.cmp{width:100%;border-collapse:collapse;margin:14px 0 8px;font-size:15px}
.cmp th,.cmp td{padding:12px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.cmp thead th{font-size:13px;color:var(--muted);font-weight:550;border-bottom:1px solid var(--line)}
.cmp thead th:last-child{color:var(--accent)}
.cmp td:first-child{color:var(--muted)}
.cmp td:last-child{font-weight:600}
.cmp tr.hero td{font-size:17px}
.cmp .no{font-weight:400;color:var(--muted)}
@media (max-width:560px){.cmp th,.cmp td{padding:10px 6px;font-size:14px}}

/* ── wallet (v2 after looking at it) ───────────────────────────────────
   The product is permanence, so the wallet should feel archival rather than
   financial: quiet, solid, unhurried. No tickers, no balances, no charts.
   The NAME is the hero on every card — it is the thing they own. */
.names{display:grid;gap:16px;margin:24px 0}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:20px 22px;transition:border-color .15s}
.card:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}
.card h3{margin:0 0 2px;font:600 22px/1.25 var(--mono);letter-spacing:-.02em;
  word-break:break-all}
.card h3 .tail{color:var(--muted);font-weight:400}
.points{display:flex;align-items:baseline;gap:8px;margin:14px 0 0;
  padding-top:14px;border-top:1px solid var(--line);flex-wrap:wrap}
.points .lbl{font-size:12px;color:var(--muted);letter-spacing:.04em;
  text-transform:uppercase;min-width:74px}
.points .val{font:14px var(--mono);word-break:break-all;flex:1}
.perm{margin-top:12px;padding:11px 13px;border-radius:9px;
  background:color-mix(in srgb,var(--accent) 7%,transparent);
  border:1px solid color-mix(in srgb,var(--accent) 22%,transparent)}
.perm .lbl{font-size:12px;color:var(--accent);font-weight:600;letter-spacing:.02em}
.perm .val{font:12px/1.5 var(--mono);color:var(--muted);word-break:break-all;margin-top:3px}
.acts{display:flex;gap:9px;margin-top:16px;flex-wrap:wrap}
.acts button{background:transparent;border:1px solid var(--line);color:var(--fg);
  border-radius:8px;padding:9px 15px;font:500 14px var(--sans);cursor:pointer}
.acts button:hover{border-color:var(--fg)}
.acts button.primary{background:var(--accent);color:var(--accent-fg);border-color:transparent;font-weight:600}
.empty{text-align:center;padding:64px 20px;color:var(--muted)}
.empty .big{font-size:19px;color:var(--fg);margin-bottom:8px}
.who{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--muted)}
.who .pill{background:var(--card);border:1px solid var(--line);border-radius:20px;
  padding:5px 12px;font:12px var(--mono)}
.sheet{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 82%,transparent);
  display:flex;align-items:center;justify-content:center;padding:20px;z-index:10}
.sheet[hidden]{display:none}
.sheet .inner{background:var(--card);border:1px solid var(--line);border-radius:16px;
  padding:26px;max-width:460px;width:100%}
.sheet h4{margin:0 0 6px;font-size:19px;letter-spacing:-.01em}
.sheet p{color:var(--muted);font-size:14px}
.sheet input{width:100%;border:1px solid var(--line);border-radius:9px;background:var(--bg);
  color:var(--fg);font:15px var(--mono);padding:12px 13px;margin:10px 0 2px;outline:none}
.sheet input:focus{border-color:var(--accent)}
.warn{font-size:13px;color:var(--warn);margin-top:10px}
@media (max-width:560px){.card{padding:16px}.points .lbl{min-width:0;width:100%}}

/* v2: the first pass read like a settings page. Tighter rhythm, a real storage
   bar, a file glyph so a link feels like a THING rather than a database row, and
   the permanent address styled as a seal rather than a form field. */
.card{padding:18px 20px}
.card .top{display:flex;align-items:flex-start;gap:14px}
.glyph{flex:none;width:42px;height:42px;border-radius:10px;display:grid;place-items:center;
  background:color-mix(in srgb,var(--accent) 12%,transparent);
  color:var(--accent);font:600 11px/1 var(--sans);letter-spacing:.04em;text-transform:uppercase}
.card h3{margin:0;font-size:21px}
.card .sub{color:var(--muted);font-size:13.5px;margin-top:3px}
.points{margin:12px 0 0;padding-top:0;border-top:0;display:block}
.meter{display:flex;align-items:center;gap:10px;margin-top:11px}
.meter .track{flex:1;height:5px;border-radius:3px;background:var(--line);overflow:hidden;max-width:230px}
.meter .track i{display:block;height:100%;background:var(--accent);border-radius:3px;min-width:6px}
.meter .cap{font-size:12.5px;color:var(--muted);white-space:nowrap}
.perm{margin-top:14px;padding:10px 12px;display:flex;gap:10px;align-items:flex-start}
.perm .seal{flex:none;color:var(--accent);font-size:9px;line-height:1.9;opacity:.75}
.perm .lbl{font-size:11.5px;letter-spacing:.02em}
.perm .val{font-size:11.5px;margin-top:2px}
.acts{margin-top:14px}
.acts button{padding:8px 14px;font-size:13.5px}
footer{margin-top:40px}

/* upload — the moment the product delivers. Big, calm, obviously droppable. */
.drop{border:2px dashed var(--line);border-radius:14px;padding:44px 24px;text-align:center;
  background:var(--card);transition:border-color .15s,background .15s;cursor:pointer}
.drop:hover,.drop.over{border-color:var(--accent);
  background:color-mix(in srgb,var(--accent) 5%,var(--card))}
.drop .icon{font-size:30px;line-height:1;color:var(--accent);opacity:.8}
.drop .main{font-size:17px;font-weight:600;margin-top:12px}
.drop .sub{color:var(--muted);font-size:13.5px;margin-top:5px}
.picked{display:flex;align-items:center;gap:13px;background:var(--card);border:1px solid var(--line);
  border-radius:12px;padding:15px 17px;margin-top:14px}
.picked .glyph{width:38px;height:38px;font-size:10px}
.picked .nm{font:600 15px var(--sans);word-break:break-all}
.picked .mt{color:var(--muted);font-size:13px;margin-top:2px}
.steps-dots{display:flex;gap:6px;align-items:center}
.steps-dots i{width:6px;height:6px;border-radius:50%;background:var(--line);display:block}
.steps-dots i.done{background:color-mix(in srgb,var(--accent) 55%,var(--line))}
.steps-dots i.on{background:var(--accent);width:18px;border-radius:3px}
.copybtn{background:transparent;border:1px solid var(--line);color:var(--muted);
  border-radius:7px;padding:5px 11px;font:500 12.5px var(--sans);cursor:pointer}
.copybtn:hover{border-color:var(--fg);color:var(--fg)}
.done-mark{width:54px;height:54px;border-radius:50%;display:grid;place-items:center;
  background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);
  font-size:26px;margin-bottom:18px}
.btn:disabled{opacity:.38;cursor:not-allowed}
.btn:disabled:hover{filter:none}
.txid{font:500 13px/1.5 var(--mono);word-break:break-all}
.txid.pending{color:var(--muted);font-style:italic;font-family:var(--sans)}
.brandlink{font-family:var(--mono)}
.qmark{display:inline;cursor:pointer;color:var(--muted);font-size:12px;margin-left:4px;list-style:none}
.qmark::-webkit-details-marker{display:none}
.qmark:hover{color:var(--fg)}

/* Upload progress. The only moving thing on the site, and it earns that: this
   step crosses the network twice and can take minutes, and a page that sits
   perfectly still reads as a hang — which is when people close the tab, mid
   upload, on a file we have already started paying for. */
.bar{height:6px;border-radius:4px;background:var(--line);overflow:hidden;margin-top:18px}
.bar i{display:block;height:100%;width:0;border-radius:4px;background:var(--accent);
  transition:width .25s ease}
/* "Working, but we cannot say how far": once the bytes have left the browser,
   posting them onward reports nothing back. Better to be honestly indeterminate
   than to park a fake bar at 99%. */
.bar i.waiting{transition:none;background-image:linear-gradient(90deg,
    color-mix(in srgb,var(--accent) 35%,var(--line)) 0 50%, var(--accent) 50% 100%);
  background-size:200% 100%;animation:barmove 1.2s linear infinite}
@keyframes barmove{from{background-position:0 0}to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){
  .bar i{transition:none} .bar i.waiting{animation:none;background:var(--accent);opacity:.55}
}
