Walrus blob · mainnet
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Coweb Bounties</title>
<meta name="description" content="Coweb Bounties — post and find crypto bounties, backed by X identity.">
<link rel="icon" type="image/png" href="data:image/png;base64,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">
<!-- Zero external script/style dependencies on purpose: no CDN, no build
step, no SDK. This is intentional — see README for why. -->
<script>
// Runs before <style> is parsed so there's no flash of the wrong theme.
(function () {
try {
var saved = localStorage.getItem("coweb-theme");
var theme = saved || (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
if (theme === "dark") document.documentElement.setAttribute("data-theme", "dark");
} catch (e) { /* storage may be unavailable — default to light, no worse than before this feature existed */ }
})();
</script>
<style>
:root {
--accent-50:#f0f9ff; --accent-100:#e0f2fe; --accent-200:#bae6fd;
--accent-500:#0ea5e9; --accent-600:#0284c7; --accent-700:#0369a1; --accent-800:#075985;
--ink-900:#0f172a; --ink-700:#334155; --ink-500:#64748b; --ink-300:#cbd5e1; --ink-100:#f1f5f9;
--shadow-card: 0 1px 2px rgba(15,23,42,.04), 0 1px 3px rgba(15,23,42,.06);
--shadow-card-hover: 0 4px 12px -2px rgba(15,23,42,.08), 0 2px 4px -2px rgba(15,23,42,.04);
--shadow-pop: 0 20px 60px -12px rgba(15,23,42,.18);
--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
font-family: var(--font);
color: var(--ink-900);
background: #ffffff;
-webkit-font-smoothing: antialiased;
}
a { color: inherit; }
button, input, textarea, select { font-family: inherit; font-size: inherit; color: inherit; }
button { cursor: pointer; }
.container { max-width: 960px; margin: 0 auto; padding: 0 16px; }
/* ---- Footer ---- */
.app-footer { border-top: 1px solid var(--ink-100); margin-top: 48px; padding: 32px 0 40px; }
.footer-grid { display: grid; grid-template-columns: 1fr; gap: 28px; }
.footer-section h2 { font-size: 15px; font-weight: 600; margin: 0 0 12px; color: var(--ink-900); }
.footer-links { display: flex; flex-wrap: wrap; gap: 10px 20px; }
.footer-links a { font-size: 14px; font-weight: 500; color: var(--accent-600); text-decoration: none; }
.footer-links a:hover { text-decoration: underline; }
.footer-steps { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 8px; font-size: 14px; color: var(--ink-700); }
@media (min-width: 640px) {
.footer-grid { grid-template-columns: 1fr 1.4fr; }
}
/* ---- Header ---- */
header.app-header {
position: sticky; top: 0; z-index: 30;
border-bottom: 1px solid var(--ink-100);
background: rgba(255,255,255,0.85);
backdrop-filter: blur(8px);
}
.header-inner {
max-width: 960px; margin: 0 auto; padding: 18px 16px;
display: flex; align-items: center; justify-content: space-between;
flex-wrap: wrap; row-gap: 10px;
}
.brand { display: flex; align-items: center; gap: 10px; }
.brand-mark {
width: 32px; height: 32px; border-radius: 8px;
object-fit: contain; display: block;
}
.brand-name { font-weight: 600; font-size: 18px; letter-spacing: -0.01em; }
.header-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; row-gap: 8px; }
@media (max-width: 480px) {
.header-inner { padding: 16px 12px 12px; }
.brand-name { font-size: 15px; }
.header-actions { width: 100%; justify-content: flex-start; gap: 6px; }
.header-actions .btn { padding: 6px 10px; font-size: 13px; }
.header-actions .select { padding: 6px 8px; font-size: 12px; }
.header-actions .btn-label { display: none; }
}
.user-chip {
display: flex; align-items: center; gap: 8px; border: 1px solid var(--ink-100);
border-radius: 8px; padding: 4px 12px 4px 4px;
}
.user-chip span { font-size: 14px; font-weight: 500; color: var(--ink-700); }
/* ---- Buttons ---- */
.btn {
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
font-weight: 500; font-size: 14px; padding: 10px 16px; border-radius: 8px;
border: 1px solid transparent; transition: background-color .15s, opacity .15s;
}
.btn:disabled { cursor: not-allowed; opacity: .55; }
.btn-primary { background: var(--accent-500); color: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.06); }
.btn-primary:hover:not(:disabled) { background: var(--accent-600); }
.btn-secondary { background: #fff; color: var(--ink-900); border-color: var(--ink-300); }
.btn-secondary:hover:not(:disabled) { background: var(--ink-100); }
.btn-ghost { background: transparent; color: var(--ink-700); }
.btn-ghost:hover:not(:disabled) { background: var(--ink-100); }
.theme-toggle { border: 1px solid var(--ink-300); background: #fff; color: var(--ink-700); border-radius: 999px; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; padding: 0; }
.btn-danger { background: #fff; color: #dc2626; border-color: #fecaca; }
.btn-danger:hover:not(:disabled) { background: #fef2f2; }
.btn-icon { padding: 10px; }
.full-width { width: 100%; }
/* ---- Badges ---- */
.badge {
display: inline-flex; align-items: center; gap: 4px; border-radius: 999px;
padding: 4px 10px; font-size: 12px; font-weight: 500;
}
.badge-open { background: #ecfdf5; color: #047857; box-shadow: inset 0 0 0 1px #a7f3d0; }
.badge-closed { background: var(--ink-100); color: var(--ink-500); box-shadow: inset 0 0 0 1px var(--ink-300); }
.badge-neutral { background: var(--ink-100); color: var(--ink-700); box-shadow: inset 0 0 0 1px var(--ink-300); }
.badge-pending { background: #fffbeb; color: #b45309; box-shadow: inset 0 0 0 1px #fde68a; }
/* ---- Avatars ---- */
.avatar { border-radius: 999px; object-fit: cover; flex-shrink: 0; }
.avatar-sm { width: 28px; height: 28px; }
.avatar-md { width: 36px; height: 36px; }
.avatar-placeholder { background: var(--ink-300); }
/* ---- Icons ---- */
.icon { width: 16px; height: 16px; }
.icon-xs { width: 14px; height: 14px; }
.icon-sm { width: 16px; height: 16px; }
/* ---- Page heading / main ---- */
main.app-main { padding: 32px 0 48px; }
.page-heading { margin-bottom: 24px; }
.page-heading h1 { font-size: 26px; font-weight: 700; letter-spacing: -0.01em; margin: 0 0 6px; }
.page-heading p { font-size: 14px; color: var(--ink-500); margin: 0; }
/* ---- Filters ---- */
.filters-bar { display: flex; flex-direction: column; gap: 12px; margin-bottom: 20px; }
.search-wrap { position: relative; max-width: 320px; }
.search-icon { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--ink-500); pointer-events: none; }
.search-input {
width: 100%; padding: 10px 12px 10px 36px; border: 1px solid var(--ink-300); border-radius: 8px;
outline: none;
}
.search-input:focus { border-color: var(--accent-500); box-shadow: 0 0 0 3px rgba(14,165,233,.15); }
.filters-right { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.chip-group { display: flex; align-items: center; border: 1px solid var(--ink-300); border-radius: 8px; padding: 4px; }
.chip-btn { border: none; background: transparent; padding: 6px 12px; border-radius: 6px; font-size: 14px; font-weight: 500; color: var(--ink-700); }
.chip-btn-active { background: var(--accent-500); color: #fff; }
/* ---- Tab bar (Bounties / My Dashboard / Leaderboard) ---- */
.tabs-bar {
display: flex; gap: 4px; padding: 4px 16px; overflow-x: auto; -webkit-overflow-scrolling: touch;
border-bottom: 1px solid var(--ink-100); background: #fff;
}
.tabs-bar::-webkit-scrollbar { display: none; }
.tabs-bar .chip-btn {
padding: 12px 14px; white-space: nowrap; border-radius: 0; border-bottom: 2px solid transparent; font-size: 14px;
}
.tabs-bar .chip-btn-active {
background: transparent; color: var(--accent-600); border-bottom: 2px solid var(--accent-500); font-weight: 700;
}
.select {
border: 1px solid var(--ink-300); border-radius: 8px; padding: 10px 12px; font-weight: 500; background: #fff;
}
.select:focus { outline: none; border-color: var(--accent-500); box-shadow: 0 0 0 3px rgba(14,165,233,.15); }
@media (min-width: 640px) {
.filters-bar { flex-direction: row; align-items: center; justify-content: space-between; }
}
.error-banner { border: 1px solid #fecaca; background: #fef2f2; color: #b91c1c; padding: 12px 16px; border-radius: 8px; font-size: 14px; margin-bottom: 20px; }
/* ---- Grid / cards ---- */
.grid { display: grid; grid-template-columns: 1fr; gap: 16px; }
@media (min-width: 640px) { .grid { grid-template-columns: 1fr 1fr; } }
.card {
position: relative; overflow: hidden; border-radius: 12px; border: 1px solid var(--ink-100);
background: #fff; box-shadow: var(--shadow-card); text-align: left; width: 100%;
transition: transform .15s, box-shadow .15s;
}
.bounty-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-card-hover); }
.bounty-card-closed { opacity: .7; }
.status-rail { position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--ink-300); }
.status-rail-open { background: var(--accent-500); }
.status-rail-pending { background: #f59e0b; }
.bounty-card-inner { display: flex; flex-direction: column; gap: 12px; padding: 18px 18px 18px 22px; }
.bounty-card-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.poster-info { display: flex; align-items: center; gap: 8px; min-width: 0; }
.poster-name { margin: 0; font-size: 14px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.poster-time { margin: 0; font-size: 12px; color: var(--ink-500); }
.bounty-title { margin: 0; font-size: 16px; font-weight: 600; line-height: 1.3; }
.bounty-desc {
margin: 0; font-size: 14px; line-height: 1.5; color: var(--ink-700);
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.bounty-bottom { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.prize-pill {
display: inline-flex; align-items: center; background: var(--accent-50); color: var(--accent-700);
font-family: ui-monospace, Menlo, Consolas, monospace; font-weight: 600; font-size: 14px;
padding: 6px 12px; border-radius: 8px; box-shadow: inset 0 0 0 1px var(--accent-100);
}
.tg-hint { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 500; color: var(--ink-500); }
/* ---- Skeleton ---- */
.skeleton { background: var(--ink-100); border-radius: 8px; animation: pulse 1.5s ease-in-out infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: .5; } }
.skeleton-card { position: relative; overflow: hidden; border-radius: 12px; border: 1px solid var(--ink-100); background: #fff; padding: 18px 18px 18px 22px; box-shadow: var(--shadow-card); }
/* ---- Empty state ---- */
.empty-state {
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px;
border: 1px dashed var(--ink-300); background: rgba(241,245,249,.5); border-radius: 12px;
padding: 60px 24px; text-align: center;
}
.empty-state-icon { width: 44px; height: 44px; border-radius: 999px; background: #fff; box-shadow: var(--shadow-card); display: flex; align-items: center; justify-content: center; }
.empty-state h3 { margin: 0; font-size: 15px; font-weight: 600; }
.empty-state p { margin: 0; font-size: 14px; color: var(--ink-500); max-width: 320px; }
/* ---- Modal ---- */
.modal-overlay {
position: fixed; inset: 0; z-index: 50; display: flex; align-items: flex-end; justify-content: center;
background: rgba(15,23,42,.4); backdrop-filter: blur(1px); animation: fadeIn .18s ease-out;
}
@media (min-width: 640px) { .modal-overlay { align-items: center; } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
.modal-panel {
width: 100%; max-width: 520px; background: #fff; border-radius: 16px 16px 0 0; box-shadow: var(--shadow-pop);
max-height: 92vh; max-height: 92dvh; overflow-y: auto; animation: slideUp .2s cubic-bezier(.16,1,.3,1);
}
@media (min-width: 640px) { .modal-panel { border-radius: 16px; } }
@keyframes slideUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
.modal-header {
position: sticky; top: 0; display: flex; align-items: center; justify-content: space-between;
border-bottom: 1px solid var(--ink-100); background: rgba(255,255,255,.95); padding: 16px 20px;
}
.modal-header-plain { justify-content: flex-end; border-bottom: none; padding-bottom: 0; }
.modal-header h2 { margin: 0; font-size: 17px; font-weight: 600; }
.modal-close { background: transparent; border: none; padding: 6px; border-radius: 8px; color: var(--ink-500); }
.modal-close:hover { background: var(--ink-100); color: var(--ink-900); }
.modal-body { padding: 20px; display: flex; flex-direction: column; gap: 16px; }
/* ---- Forms ---- */
.field { display: flex; flex-direction: column; gap: 6px; }
.field-label { font-size: 14px; font-weight: 500; color: var(--ink-700); }
.field-error { font-size: 12px; font-weight: 500; color: #dc2626; }
.muted { font-size: 13px; color: var(--ink-500, #6b7280); }
.notif-bell { position: relative; }
.notif-badge {
position: absolute; top: -4px; right: -4px; background: #dc2626; color: #fff;
font-size: 11px; font-weight: 700; line-height: 1; min-width: 16px; height: 16px;
border-radius: 8px; display: flex; align-items: center; justify-content: center; padding: 0 3px;
}
.notif-item { padding: 12px 0; border-bottom: 1px solid var(--ink-100); cursor: pointer; }
.notif-item:last-child { border-bottom: none; }
.notif-unread { font-weight: 600; }
.claim-card { border: 1px solid var(--ink-100); border-radius: 10px; padding: 12px; margin-bottom: 10px; display: flex; flex-direction: column; gap: 6px; }
.input, .textarea {
width: 100%; border: 1px solid var(--ink-300); border-radius: 8px; padding: 10px 14px; outline: none;
}
.textarea { resize: none; }
.input:focus, .textarea:focus { border-color: var(--accent-500); box-shadow: 0 0 0 3px rgba(14,165,233,.15); }
.input-error, .input-error:focus, .textarea.input-error { border-color: #fca5a5; }
.form-row { display: grid; grid-template-columns: 1fr; gap: 16px; }
@media (min-width: 640px) { .form-row { grid-template-columns: 1fr 1fr; } }
.posting-as { display: flex; align-items: center; gap: 10px; background: var(--ink-100); border-radius: 8px; padding: 10px 14px; font-size: 14px; }
.modal-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; padding-top: 4px; }
/* ---- Detail modal ---- */
.detail-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.detail-title { margin: 0; font-size: 20px; font-weight: 600; line-height: 1.3; }
.detail-desc { margin: 0; font-size: 14px; line-height: 1.6; color: var(--ink-700); white-space: pre-wrap; }
.detail-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.prize-box { border: 1px solid var(--accent-100); background: var(--accent-50); border-radius: 12px; padding: 16px; }
.prize-label { margin: 0 0 4px; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: rgba(3,105,161,.8); }
.prize-value { margin: 0; font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 24px; font-weight: 700; color: var(--accent-800); }
.tg-cta {
display: flex; align-items: center; justify-content: center; gap: 8px; border-radius: 12px;
padding: 15px 20px; font-size: 16px; font-weight: 600; color: #fff; background: var(--accent-500);
text-decoration: none; transition: background-color .15s;
}
.tg-cta:hover { background: var(--accent-600); }
.tg-cta-disabled { background: var(--ink-300); pointer-events: none; }
/* ---- Toasts ---- */
.toast-root { position: fixed; top: 16px; left: 50%; transform: translateX(-50%); z-index: 100; width: 100%; max-width: 380px; padding: 0 16px; display: flex; flex-direction: column; gap: 8px; }
/* ---- Coweb AI floating assistant ----
z-index 40: above the header (30) so it's always reachable, below
modals (50) so it naturally tucks out of the way whenever a modal is
open — no extra JS needed to keep it from interrupting other tasks. */
#coweb-ai-root {
position: fixed; right: 20px; bottom: 20px; z-index: 40;
display: flex; flex-direction: column; align-items: flex-end; gap: 10px;
}
.coweb-ai-fab {
width: 56px; height: 56px; border-radius: 999px; background: var(--accent-500); border: none;
box-shadow: var(--shadow-pop); display: flex; align-items: center; justify-content: center;
cursor: grab; padding: 0; touch-action: none; flex: none;
}
.coweb-ai-fab:active { cursor: grabbing; }
.coweb-ai-fab-avatar { width: 32px; height: 32px; border-radius: 50%; object-fit: contain; pointer-events: none; background: #fff; }
.coweb-ai-greeting {
max-width: 250px; background: #fff; border-radius: 14px; box-shadow: var(--shadow-pop); padding: 12px 30px 12px 12px;
position: relative; animation: slideUp .2s ease;
}
.coweb-ai-greeting-close { position: absolute; top: 8px; right: 8px; background: none; border: none; padding: 3px; color: var(--ink-500); cursor: pointer; }
.coweb-ai-greeting-row { display: flex; gap: 8px; align-items: flex-start; }
.coweb-ai-greeting-avatar { width: 26px; height: 26px; border-radius: 50%; flex: none; background: var(--accent-50); }
.coweb-ai-greeting p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--ink-900); }
.coweb-ai-panel {
width: 380px; max-width: calc(100vw - 40px); height: 620px;
max-height: calc(100vh - 120px); max-height: calc(100dvh - 120px);
min-width: 280px; min-height: 360px;
background: #fff; border-radius: 16px; box-shadow: var(--shadow-pop); overflow: hidden;
display: none; flex-direction: column; resize: both;
}
.coweb-ai-panel-header {
display: flex; align-items: center; justify-content: space-between; padding: 12px 14px;
border-bottom: 1px solid var(--ink-100); cursor: grab; touch-action: none; flex: none;
}
.coweb-ai-panel-header:active { cursor: grabbing; }
.coweb-ai-panel-avatar { width: 24px; height: 24px; border-radius: 50%; }
.coweb-ai-iframe { border: 0; width: 100%; flex: 1; }
@media (max-width: 480px) {
#coweb-ai-root { right: 12px; bottom: 12px; }
.coweb-ai-panel { width: calc(100vw - 24px); }
}
.toast {
display: flex; align-items: flex-start; justify-content: space-between; gap: 10px;
border-radius: 12px; padding: 12px 14px; box-shadow: var(--shadow-pop); font-size: 14px;
animation: slideUp .2s cubic-bezier(.16,1,.3,1);
}
.toast-success { background: #ecfdf5; border: 1px solid #a7f3d0; color: #065f46; }
.toast-error { background: #fef2f2; border: 1px solid #fecaca; color: #991b1b; }
.toast-info { background: var(--accent-50); border: 1px solid var(--accent-100); color: var(--accent-800); }
.toast-message { margin: 0; font-weight: 500; }
.toast-desc { margin: 2px 0 0; font-size: 12px; opacity: .85; }
.toast-close { background: transparent; border: none; font-size: 16px; line-height: 1; opacity: .6; padding: 2px; }
.toast-close:hover { opacity: 1; }
/* ---- Setup notice ---- */
.setup-notice {
max-width: 480px; margin: 0 auto; min-height: 100vh; flex-direction: column;
align-items: center; justify-content: center; gap: 16px; padding: 24px; text-align: center;
}
.setup-notice code { background: var(--ink-100); border-radius: 4px; padding: 2px 6px; font-family: ui-monospace, Menlo, Consolas, monospace; }
/* ---- Welcome screen (shown before the dashboard, first visit only) ---- */
.welcome-screen {
min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column;
align-items: center; justify-content: center; text-align: center;
padding: 32px 20px; background: linear-gradient(180deg, var(--accent-50) 0%, #fff 55%);
}
.welcome-logo { width: 64px; height: 64px; border-radius: 16px; margin-bottom: 20px; }
.welcome-screen h1 { font-size: 30px; font-weight: 700; margin: 0 0 10px; letter-spacing: -0.02em; max-width: 440px; }
.welcome-screen > p.welcome-sub { font-size: 15px; color: var(--ink-700); max-width: 420px; margin: 0 0 28px; line-height: 1.6; }
.welcome-steps {
display: flex; flex-direction: column; gap: 14px; max-width: 380px; width: 100%;
margin-bottom: 32px; text-align: left;
}
.welcome-step { display: flex; gap: 12px; align-items: flex-start; }
.welcome-step-num {
flex: none; width: 26px; height: 26px; border-radius: 999px; background: var(--accent-100); color: var(--accent-700);
display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700;
}
.welcome-step p { margin: 0; font-size: 14px; color: var(--ink-700); line-height: 1.5; }
.welcome-actions { display: flex; flex-direction: column; gap: 12px; width: 100%; max-width: 320px; }
.welcome-skip { background: none; border: none; font-size: 14px; color: var(--ink-500); text-decoration: underline; padding: 8px; cursor: pointer; }
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background-color: var(--ink-300); border-radius: 999px; }
::-webkit-scrollbar-track { background: transparent; }
/* ============================================================================
Dark theme — additive only. Every rule below is scoped under
[data-theme="dark"] on <html>, so none of the rules above are modified;
this block simply overrides them when dark mode is active.
========================================================================= */
html[data-theme="dark"] {
--accent-50:#0c2233; --accent-100:#0e2c42; --accent-200:#124066;
--ink-900:#f1f5f9; --ink-700:#cbd5e1; --ink-500:#94a3b8; --ink-300:#334155; --ink-100:#1e293b;
}
html[data-theme="dark"] body { background: #0b1220; }
html[data-theme="dark"] header.app-header { background: rgba(11,18,32,0.85); }
html[data-theme="dark"] .tabs-bar { background: #0b1220; }
html[data-theme="dark"] .welcome-screen { background: linear-gradient(180deg, var(--accent-50) 0%, #0b1220 55%); }
html[data-theme="dark"] .welcome-step-num { background: var(--accent-100); color: #7dd3fc; }
html[data-theme="dark"] .coweb-On-chain registration not yet visible.
The aggregator served this blob, but we couldn't locate a matching BlobRegistered event in our scan window. It may not be certified yet, or live further back than we paged.
Lifecycle data is unavailable until the blob registration is visible on-chain.