- {storyline.title}
-
-
- {storyline.genre && (
-
- {storyline.genre}
+ {/* Elastic band */}
+
+ {/* Top: genre */}
+
+
+ {storyline.genre || "Uncategorized"}
- )}
- {storyline.sunset ? (
-
- complete
+
+ {/* Center: title */}
+
+
+ {storyline.title}
+
+
+ {/* Bottom: plot count + status */}
+
+
+ {storyline.plot_count} {storyline.plot_count === 1 ? "plot" : "plots"}
- ) : (
-
- active
+ {storyline.sunset ? (
+
+ complete
+
+ ) : (
+
+ active
+
+ )}
+
+
+
+
+ {/* Info below/beside the book — all visible, no toggles */}
+
+ {/* Stats row */}
+
+ {priceInfo ? (
+
+ Price: {formatPrice(priceInfo.pricePerToken)} {RESERVE_LABEL}
+ {plotUsd != null && (≈ {formatUsdValue(Number(priceInfo.pricePerToken) * plotUsd)})}
+ ) : (
+ Price: —
+ )}
+ ·
+ {holderCount !== undefined ? `${holderCount} holder${holderCount !== 1 ? "s" : ""}` : "—"}
+ ·
+ {formatViewCount(storyline.view_count)} views
+ {storyline.block_timestamp && (
+ <>
+ ·
+
+ {new Date(storyline.block_timestamp).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" })}
+
+ >
)}
-
- {/* Row 2: Key stats — inline */}
-
- {storyline.plot_count} {storyline.plot_count === 1 ? "plot" : "plots"}
- ·
- {holderCount !== undefined ? `${holderCount} holder${holderCount !== 1 ? "s" : ""}` : "—"}
- ·
- {formatViewCount(storyline.view_count)} views
- ·
- {priceInfo ? (
-
- {formatPrice(priceInfo.pricePerToken)} {RESERVE_LABEL}
- {plotUsd != null && (
- (≈ {formatUsdValue(Number(priceInfo.pricePerToken) * plotUsd)})
- )}
-
- ) : (
- —
+ {/* TVL + trading stats */}
+ {storyline.token_address && (
+
)}
- {storyline.block_timestamp && (
- <>
- ·
-
- {new Date(storyline.block_timestamp).toLocaleDateString("en-US", {
- month: "short",
- day: "numeric",
- year: "numeric",
- })}
-
- >
+
+ {/* Donations */}
+ {storyline.token_address && (
+
)}
-
- {/* Deadline countdown — own profile only, active storylines */}
- {isOwnProfile && !storyline.sunset && storyline.last_plot_time && (
-
- )}
+ {/* Deadline countdown */}
+ {!storyline.sunset && storyline.last_plot_time && (
+
+ )}
- {/* Genre prompt — own profile only, when genre not set */}
- {isOwnProfile && !storyline.genre && (
-
- )}
+ {/* Genre prompt */}
+ {isOwnProfile && !storyline.genre && (
+
+ )}
- {/* Claim royalties — own profile only */}
- {isOwnProfile && storyline.token_address && (
-
+ {/* Claim royalties */}
+ {isOwnProfile && storyline.token_address && (
-
- )}
+ )}
- {/* Expandable: TVL, donations, donation history */}
- {storyline.token_address && (
-
-
- ▶ more details
- ▼ details
-
-
-
-
- {isOwnProfile && (
-
- )}
-
-
- )}
+ {/* Donation history */}
+ {isOwnProfile && storyline.token_address && (
+
+ )}
+