diff --git a/app/components/EventTicketPurchase.vue b/app/components/EventTicketPurchase.vue
index 02a6e6a..eede73d 100644
--- a/app/components/EventTicketPurchase.vue
+++ b/app/components/EventTicketPurchase.vue
@@ -38,14 +38,14 @@
-
Registration
You're Registered!
You have access to this event via your series pass for
- {{ ticketInfo.series?.title }} .
+ {{ ticketInfo.series?.title }} .
You're all set for this event. Check your email for confirmation
@@ -70,13 +70,11 @@
-
- {{ ticketInfo.isFree ? "Register" : "Purchase Ticket" }}
-
-
- Payment of {{ ticketInfo.formattedPrice }} will be processed
- securely
+ Payment of {{ ticketInfo.formattedPrice }} will be processed securely
+ />
@@ -142,7 +139,7 @@
autocomplete="email"
required
:disabled="processing"
- >
+ />
+ Create a free guest account so I can manage my
+ registration
- Create a free guest account so I can manage my registration
- Guest accounts let you view your tickets and register faster next time. We won't add you to member communications.
+ Guest accounts let you view your tickets and register faster next
+ time. We won't add you to member communications.
@@ -190,24 +191,18 @@
class="ticket-panel"
>
Waitlist
-
- Event Sold Out
-
+ Event Sold Out
This event is currently at capacity. Join the waitlist to be notified
if spots become available.
-
- Join Waitlist
-
+ Join Waitlist
Tickets
-
- Event Sold Out
-
+
Event Sold Out
Unfortunately, this event is at capacity and no longer accepting
registrations.
@@ -311,7 +306,9 @@ const fetchTicketInfo = async (emailOverride = null) => {
}
// Regular ticket availability check
- const params = effectiveEmail ? `?email=${encodeURIComponent(effectiveEmail)}` : "";
+ const params = effectiveEmail
+ ? `?email=${encodeURIComponent(effectiveEmail)}`
+ : "";
const response = await $fetch(
`/api/events/${props.eventId}/tickets/available${params}`,
);
diff --git a/app/pages/events/[slug].vue b/app/pages/events/[slug].vue
index 61117f9..6a5ac57 100644
--- a/app/pages/events/[slug].vue
+++ b/app/pages/events/[slug].vue
@@ -30,10 +30,6 @@
-
- Capacity
- {{ event.registeredCount || 0 }}/{{ event.maxAttendees }} seats
-
@@ -85,7 +81,7 @@
About This Event
-
{{ event.description }}
+
@@ -94,17 +90,23 @@
class="section"
>
About the {{ event.series.title }} Series
- {{ event.series.description }}
+
+
+
+
+
+
Additional Information
+
@@ -143,7 +145,7 @@
Event Details
Type
- {{ event.eventType }}
+ {{ eventTypeLabel(event.eventType) }}
Members only
@@ -169,6 +171,8 @@
@@ -349,12 +350,79 @@ useHead(() => ({
margin-bottom: 8px;
}
.section p {
- font-size: 12px;
+ font-size: 14px;
color: var(--text-dim);
line-height: 1.7;
max-width: 560px;
}
+.prose {
+ font-size: 14px;
+ color: var(--text-dim);
+ line-height: 1.7;
+ max-width: 560px;
+}
+.prose :deep(p) {
+ margin-bottom: 12px;
+}
+.prose :deep(p:last-child) {
+ margin-bottom: 0;
+}
+.prose :deep(a) {
+ color: var(--ember);
+ text-decoration: underline;
+ text-underline-offset: 2px;
+}
+.prose :deep(strong) {
+ color: var(--text-bright);
+}
+.prose :deep(ul),
+.prose :deep(ol) {
+ list-style: none;
+ padding: 0;
+ margin: 8px 0 12px;
+}
+.prose :deep(ul li),
+.prose :deep(ol li) {
+ position: relative;
+ padding: 2px 0 2px 16px;
+ margin-bottom: 4px;
+}
+.prose :deep(ul li::before) {
+ content: "›";
+ position: absolute;
+ left: 0;
+ top: 2px;
+ color: var(--candle-faint);
+ font-size: 14px;
+ line-height: 1.7;
+}
+.prose :deep(ol) {
+ counter-reset: prose-item;
+}
+.prose :deep(ol li) {
+ counter-increment: prose-item;
+ padding-left: 28px;
+}
+.prose :deep(ol li::before) {
+ content: counter(prose-item) ".";
+ position: absolute;
+ left: 0;
+ top: 2px;
+ color: var(--candle-faint);
+}
+.prose :deep(blockquote) {
+ border-left: 2px solid var(--candle-faint);
+ padding-left: 12px;
+ margin: 12px 0;
+ color: var(--text-faint);
+}
+.prose :deep(code) {
+ font-family: "Commit Mono", monospace;
+ background: var(--input-bg);
+ padding: 0 4px;
+}
+
.circle-badges {
display: flex;
gap: 6px;
@@ -367,10 +435,27 @@ useHead(() => ({
}
.agenda-list {
- padding-left: 20px;
- font-size: 12px;
+ list-style: none;
+ padding: 0;
+ margin: 8px 0 0;
+ font-size: 14px;
color: var(--text-dim);
- line-height: 2;
+ line-height: 1.7;
+ max-width: 560px;
+}
+.agenda-list li {
+ position: relative;
+ padding: 2px 0 2px 16px;
+ margin-bottom: 4px;
+}
+.agenda-list li::before {
+ content: "›";
+ position: absolute;
+ left: 0;
+ top: 2px;
+ color: var(--candle-faint);
+ font-size: 14px;
+ line-height: 1.7;
}
.speaker {
diff --git a/app/pages/events/index.vue b/app/pages/events/index.vue
index bfcf9b3..da0ce91 100644
--- a/app/pages/events/index.vue
+++ b/app/pages/events/index.vue
@@ -45,34 +45,21 @@
cancelled
+ Registered
{{ event.tagline }}
{{
- event.eventType
+ eventTypeLabel(event.eventType)
}}
·
{{ formatLocation(event) }}
-
-
-
- {{ event.registeredCount || 0 }}/{{ event.maxAttendees }} seats
-
- Sold out
- Limited tickets
-
- Open
-
Members
@@ -119,15 +106,20 @@