:root { --g:#00ff66; --d:#00a845; --bg:#030806; --r:#ff3355; --a:#ffcc00; }
* { box-sizing:border-box; }
body {
  margin:0; background:var(--bg); color:var(--g);
  font-family:"Fira Code","Courier New",monospace; font-size:15px; line-height:1.5;
  text-shadow:0 0 4px rgba(0,255,102,.5);
}
body::after { /* scanlines */
  content:""; position:fixed; inset:0; pointer-events:none;
  background:repeating-linear-gradient(transparent 0 2px, rgba(0,0,0,.25) 2px 3px);
}
.wrap { max-width:1200px; margin:0 auto; padding:1.5rem; }
header { border-bottom:1px dashed var(--d); padding-bottom:.5rem; margin-bottom:1.5rem;
  display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:.5rem; }
h1,h2,h3 { margin:.2em 0 .6em; font-weight:normal; font-size:1em; }
h1::before { content:"root@voucher:~# "; color:var(--d); font-size:.7em; }
h2::before { content:"> "; color:var(--d); }
a { color:var(--g); }
.panel { border:1px solid var(--d); padding:1rem; margin-bottom:1.5rem;
  box-shadow:0 0 12px rgba(0,255,102,.15) inset; background:rgba(0,40,15,.25); }
input,textarea,select,button {
  font:inherit; color:var(--g); background:#000; border:1px solid var(--d);
  padding:.45rem .6rem; outline:none; }
input:focus,textarea:focus,select:focus { border-color:var(--g); box-shadow:0 0 8px var(--g); }
textarea { width:100%; min-height:110px; }
button { cursor:pointer; text-transform:uppercase; letter-spacing:.05em; }
button:hover { background:var(--g); color:#000; text-shadow:none; }
button.danger { color:var(--r); border-color:var(--r); }
button.danger:hover { background:var(--r); color:#000; }
label { display:block; margin:.5rem 0 .2rem; color:var(--d); }
.row { display:flex; gap:1rem; flex-wrap:wrap; align-items:end; }
table { width:100%; border-collapse:collapse; }
th,td { text-align:left; padding:.3rem .5rem; border-bottom:1px dotted var(--d); word-break:break-all; }
th { color:var(--d); font-weight:normal; }
.badge { padding:0 .4rem; border:1px solid; }
.available,.open { color:var(--g); } .reserved,.revealed { color:var(--a); }
.used,.paid { color:#6aa; } .revoked { color:var(--r); }
.flash { padding:.5rem 1rem; border:1px solid; margin-bottom:1rem; word-break:break-all; }
.message { white-space:pre-line; }
.flash.error { color:var(--r); border-color:var(--r); }
.flash.ok,.flash.link { border-color:var(--g); }
.copy-message { cursor:pointer; white-space:pre-line; user-select:none; }
.copy-message:hover,.copy-message:focus { background:rgba(0,255,102,.12); outline:none; }
.copy-hint { display:block; margin-top:.75rem; color:var(--d); }
.copy-button { margin-left:.5rem; padding:.2rem .4rem; font-size:.85em; }
.copy-actions { display:flex; flex-wrap:wrap; gap:.35rem; margin-top:.35rem; }
.copy-actions .copy-button { margin-left:0; }
.link-list { display:grid; gap:1rem; }
.link-card { border:1px solid var(--d); padding:1rem; background:rgba(0,40,15,.25); }
.link-card-head,.link-card-meta,.link-card-actions { display:flex; gap:1rem; align-items:center; flex-wrap:wrap; }
.link-card-head { justify-content:space-between; border-bottom:1px dotted var(--d); padding-bottom:.6rem; }
.link-card-meta { padding:.7rem 0; }
.link-card-meta > div { min-width:12rem; }
.link-card-edit { border-top:1px dotted var(--d); border-bottom:1px dotted var(--d); padding:.7rem 0; }
.link-card-edit label { margin:0; }
.link-card-edit input { min-width:15rem; }
.link-card-actions { padding-top:.7rem; }
.link-card-actions form.row { align-items:center; }
.link-card-actions label.payment-method-field { display:flex; align-items:center; gap:.4rem; margin:0; }
.link-card-actions label.payment-method-field[hidden] { display:none !important; }
.link-card-messages { padding-top:.7rem; }
.link-card-revoke { margin-top:.7rem; }
.link-search { margin-bottom:1rem; }
.link-search input { width:min(100%, 30rem); }
.code { font-size:1.2rem; padding:.5rem; border:1px dashed var(--g); margin:.4rem 0;
  background:#000; user-select:all; word-break:break-all; }
label.radio { display:block; border:1px solid var(--d); padding:.5rem; margin:.4rem 0; cursor:pointer; color:var(--g); }
.radio input { margin-right:.6rem; }
.cursor::after { content:"█"; animation:blink 1s steps(1) infinite; }
@keyframes blink { 50% { opacity:0; } }
.muted { color:var(--d); }
