@import url('/theme.css?v=7aeb5de03803');
@import url('/design.css?v=7aeb5de03803');
@import url('/social.css?v=7aeb5de03803');

@import url('/refinement.css?v=7aeb5de03803');

/* ------------------------------------------------------------------ *
 * Brand
 *
 * One wordmark everywhere: a cropped mascot mark and the two-tone
 * name. The storefront, the journal, the credits page and an invoice
 * all use the same markup, so they cannot drift apart.
 * ------------------------------------------------------------------ */
.wordmark{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:30px;font-weight:800;letter-spacing:-1px;line-height:1;color:var(--white);text-decoration:none}
.wordmark .brand-crop{flex:none}
.wordmark em{font-style:normal;color:var(--lime)}
.journal-header .wordmark{font-size:26px}
.invoice-brand .wordmark{font-size:26px}

/* ------------------------------------------------------------------ *
 * Icons
 *
 * One scale, so a tick in a list, an arrow in a link and a glyph in
 * the Discord banner are not three different sizes by accident.
 * ------------------------------------------------------------------ */
.lucide{width:16px;height:16px;flex:none;vertical-align:-0.15em}
.btn .lucide{width:16px;height:16px}
.btn.small .lucide{width:14px;height:14px}
.check .lucide{width:14px;height:14px}
summary .lucide,.faq-list summary .lucide{width:16px;height:16px}
.discord-banner-icon .lucide{width:20px;height:20px}
.discord-banner-cta .lucide{width:14px;height:14px}
.social-preview-wrap>h3 .lucide{width:18px;height:18px}
.social-event .lucide{width:14px;height:14px}
.search-empty>.lucide{width:32px;height:32px}

/* ------------------------------------------------------------------ *
 * Browse tools: the search field, its icon and the button sit on one
 * line at the same height.
 * ------------------------------------------------------------------ */
.browse-tools{display:flex;align-items:center;gap:var(--space-3);width:100%}
.browse-tools .search{flex:1 1 260px;min-width:0;height:44px;align-items:stretch}
.browse-tools .btn{flex:none;min-height:44px}
.search{display:flex;align-items:stretch;gap:var(--space-2);position:relative;min-width:0;height:44px}
.search .lucide{width:16px;height:16px;flex:none;align-self:center;color:var(--muted);pointer-events:none}
.search input{width:100%;min-width:0;height:44px;min-height:44px;padding:12px 14px;margin-top:0}
.search input:focus-visible .lucide{color:var(--lime)}

/* ------------------------------------------------------------------ *
 * The credits page renders licence text and a provenance list.
 * ------------------------------------------------------------------ */
.legal .license{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-control);padding:var(--space-3);font-size:11px;line-height:1.65;white-space:pre-wrap;overflow:auto;max-height:240px;color:var(--muted);margin:0 0 var(--space-4)}
.legal .provenance{list-style:none;padding:0;margin:0 0 var(--space-4);display:grid;gap:6px}
.legal .provenance li{padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:12px;line-height:1.6;color:var(--muted)}
.legal .provenance strong{color:var(--white)}
.legal a{color:var(--lime)}
.legal code{font-size:12px;color:var(--white)}

/* ------------------------------------------------------------------ *
 * Onboarding: a guided path to a connected account and a routine.
 * ------------------------------------------------------------------ */
.onboarding{border:1px solid var(--line);border-left:3px solid var(--lime);border-radius:var(--radius-panel);background:var(--panel);padding:var(--space-5);margin:0 0 var(--space-5)}
.onboarding .eyebrow{margin-bottom:6px}
.onboarding h2{font-size:30px;margin-bottom:6px}
.onboarding-head p{margin-bottom:var(--space-4);max-width:62ch}
.onboarding-steps{list-style:none;padding:0;margin:0 0 var(--space-4);display:grid;gap:8px}
.onboarding-steps li{display:flex;gap:12px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--elevated)}
.onboarding-steps li.done{border-color:transparent;background:color-mix(in srgb,var(--lime) 8%,var(--elevated))}
.onboarding-mark{flex:none;width:22px;height:22px;border-radius:50%;border:1px solid var(--line);display:inline-flex;align-items:center;justify-content:center;font-size:12px;color:var(--lime)}
.onboarding-steps li.done .onboarding-mark{background:var(--lime);border-color:var(--lime);color:#10140d}
.onboarding-text{display:flex;flex-direction:column;gap:2px}
.onboarding-text strong{font-size:13px;color:var(--white)}
.onboarding-text small{font-size:11px;color:var(--muted)}
.onboarding-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.onboarding-banner{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:11px 16px;border:1px solid var(--line);border-left:3px solid var(--lime);border-radius:var(--radius-control);background:var(--panel);margin-bottom:var(--space-4);font-size:12px}
.onboarding-banner strong{color:var(--white)}
.onboarding-banner .btn{margin-left:auto}

/* ------------------------------------------------------------------ *
 * Delivery report: what was actually done.
 * ------------------------------------------------------------------ */
.delivery-list{display:grid;gap:10px}
.delivery{border:1px solid var(--line);border-radius:var(--radius-control);background:var(--elevated);padding:14px 16px}
.delivery-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px}
.delivery-head strong{font-size:14px}
.delivery-scope{list-style:none;padding:0;margin:0 0 8px;display:flex;flex-wrap:wrap;gap:6px}
.delivery-scope li{font-size:11px;color:var(--lime);background:color-mix(in srgb,var(--lime) 10%,transparent);border-radius:var(--radius-sm);padding:3px 8px}
.delivery-note{font-size:13px;color:var(--white);margin:0 0 8px;line-height:1.6}
.delivery-meta{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.delivery-meta small{font-size:11px;color:var(--muted)}
.delivery-evidence{display:flex;gap:6px}
.delivery-evidence img{width:64px;height:44px;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--line)}

/* The staff completion checklist. */
.checklist{display:grid;gap:4px;margin-top:8px}
.checklist .checkbox{margin-top:0}

/* ------------------------------------------------------------------ *
 * A custom invoice, as a document the customer can read and pay.
 * ------------------------------------------------------------------ */
.invoice-page{background:var(--bg);min-height:100vh;padding:var(--space-6) 0}
.invoice-sheet{max-width:760px;margin:0 auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-lg);padding:var(--space-6)}
.invoice-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-4);padding-bottom:var(--space-4);border-bottom:1px solid var(--line)}
.invoice-meta{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.invoice-number{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.invoice-status{font-size:11px;font-weight:700;border-radius:var(--radius-sm);padding:3px 9px}
.invoice-status.due{color:var(--lime);background:color-mix(in srgb,var(--lime) 12%,transparent)}
.invoice-status.paid{color:var(--white);background:color-mix(in srgb,var(--lime) 22%,transparent)}
.invoice-parties{display:flex;gap:var(--space-6);flex-wrap:wrap;margin:var(--space-5) 0}
.invoice-parties div{display:flex;flex-direction:column;gap:3px}
.invoice-parties small{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.invoice-parties strong{font-size:14px;color:var(--white)}
.invoice-parties span{font-size:12px;color:var(--muted)}
.invoice-title{font-family:var(--font-display);font-size:clamp(30px,5vw,44px);margin:0 0 10px;letter-spacing:-.02em}
.invoice-lede{color:var(--muted);font-size:14px;line-height:1.7;margin:0 0 var(--space-5);max-width:62ch}
.invoice-table{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:var(--space-5)}
.invoice-table th{text-align:left;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:0 0 10px;border-bottom:1px solid var(--line)}
.invoice-table td{padding:14px 0;border-bottom:1px solid var(--line);vertical-align:top}
.invoice-table td strong{display:block;color:var(--white);margin-bottom:4px}
.invoice-table td span{display:block;color:var(--muted);font-size:12px;line-height:1.6}
.invoice-amount{text-align:right;white-space:nowrap}
.invoice-table tfoot td{padding-top:16px;border-bottom:0;font-weight:700;color:var(--white)}
.invoice-table tfoot .invoice-amount{font-family:var(--font-display);font-size:26px}
.invoice-actions{display:flex;flex-direction:column;gap:var(--space-3);align-items:flex-start;margin-bottom:var(--space-5)}
.invoice-pay{min-height:48px;padding:14px 26px;font-size:13px}
.invoice-note{font-size:12px;color:var(--muted);margin:0;max-width:60ch;line-height:1.65}
.invoice-note.warning{color:var(--warning)}
.invoice-paid{display:flex;flex-direction:column;gap:6px;padding:var(--space-4);border:1px solid var(--line);border-left:3px solid var(--lime);border-radius:var(--radius-control);background:var(--elevated);margin-bottom:var(--space-5)}
.invoice-paid strong{color:var(--lime)}
.invoice-paid span{font-size:13px;color:var(--muted);line-height:1.6}
.invoice-foot{display:flex;justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;padding-top:var(--space-4);border-top:1px solid var(--line);font-size:11px;color:var(--muted)}
.invoice-foot a{color:var(--lime)}

/* ------------------------------------------------------------------ *
 * Admin: the custom work and invoice tools.
 * ------------------------------------------------------------------ */
.admin-invoice-link{display:inline-block;margin-top:6px;font-size:12px;color:var(--lime);word-break:break-all}
.admin-invoice-link:hover{text-decoration:underline}

/* ------------------------------------------------------------------ *
 * Sign in: Discord on one side, the operator account on the other.
 * ------------------------------------------------------------------ */
.login-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--space-4);align-items:start}

/* ------------------------------------------------------------------ *
 * The screen a customer lands on after paying.
 *
 * The rings breathe slowly and the tick draws itself once. The page is
 * deliberately calm: nothing moves fast enough to feel like a slot
 * machine, and the navigation stays so nobody is stranded.
 * ------------------------------------------------------------------ */
.complete-page{padding:var(--space-6) 0}
.complete{max-width:640px;margin:0 auto;padding:var(--space-6) var(--space-5);text-align:center;border:1px solid var(--line);border-radius:var(--radius-xl);background:var(--panel)}
.complete h1{font-size:clamp(36px,6vw,58px);margin:var(--space-3) 0 var(--space-2)}
.complete p{color:var(--muted);font-size:15px;line-height:1.7;max-width:46ch;margin:0 auto var(--space-5)}
.complete .hint{margin-top:var(--space-5);margin-bottom:0;font-size:11px}
.complete-actions{display:flex;gap:var(--space-3);justify-content:center;flex-wrap:wrap}
.complete-mark{position:relative;width:96px;height:96px;margin:0 auto var(--space-4);display:grid;place-items:center}
.complete-ring{position:absolute;inset:0;border-radius:50%;border:1px solid color-mix(in srgb,var(--lime) 45%,transparent)}
.complete-ring-2{inset:-14px;border-color:color-mix(in srgb,var(--lime) 22%,transparent)}
.complete-tick{position:relative;width:52px;height:52px;color:var(--lime)}
.complete-tick path{stroke-dasharray:48;stroke-dashoffset:0}

@media (prefers-reduced-motion: no-preference){
 .complete-ring{animation:complete-pulse 5s var(--ease) infinite}
 .complete-ring-2{animation:complete-pulse 5s var(--ease) infinite;animation-delay:-2.5s}
 .complete-tick path{animation:complete-draw .9s var(--ease) both}
 .complete{animation:complete-in .5s var(--ease) both}
}
@keyframes complete-pulse{0%,100%{transform:scale(1);opacity:.55}50%{transform:scale(1.06);opacity:1}}
@keyframes complete-draw{from{stroke-dashoffset:48}to{stroke-dashoffset:0}}
@keyframes complete-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}

/* ------------------------------------------------------------------ *
 * Support staff permissions.
 * ------------------------------------------------------------------ */
.permission-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--space-2);margin-top:var(--space-2)}
.permission-grid .checkbox{align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--elevated);margin-top:0}
.permission-grid .checkbox:has(input:checked){border-color:color-mix(in srgb,var(--lime) 45%,var(--line));background:color-mix(in srgb,var(--lime) 7%,var(--elevated))}
.permission-grid small{font-size:11px;color:var(--muted);line-height:1.5;display:block;margin-top:3px}
.staff-list{display:grid;gap:10px}
.staff-row{display:grid;grid-template-columns:1fr;gap:8px;padding:14px;border:1px solid var(--line);border-radius:var(--radius-control);background:var(--elevated)}
.staff-row strong{font-size:13px}
.staff-row small{font-size:11px;color:var(--muted)}
.staff-perms{display:flex;flex-wrap:wrap;gap:5px}
.staff-perms .pill{font-size:10px;color:var(--lime);border-color:color-mix(in srgb,var(--lime) 30%,var(--line))}
.staff-row .actions{justify-content:flex-end}
@media(min-width:700px){.staff-row{grid-template-columns:1.1fr 1.4fr auto;align-items:center}}
