@bagdja/kumpul 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -2120,6 +2120,20 @@
2120
2120
  window.addEventListener("resize", updateHeaderHeight);
2121
2121
  }
2122
2122
  }
2123
+ document.querySelectorAll("[data-plan-live]").forEach((workflow) => {
2124
+ const tabs = Array.from(workflow.querySelectorAll("[data-plan-step-tab]"));
2125
+ const panels = Array.from(workflow.querySelectorAll("[data-plan-step-panel]"));
2126
+ tabs.forEach((tab) => {
2127
+ tab.addEventListener("click", () => {
2128
+ if (tab.disabled) return;
2129
+ const step = tab.dataset.planStepTab;
2130
+ tabs.forEach((item) => item.setAttribute("aria-pressed", String(item === tab)));
2131
+ panels.forEach((panel) => {
2132
+ panel.hidden = panel.dataset.planStepPanel !== step;
2133
+ });
2134
+ });
2135
+ });
2136
+ });
2123
2137
  document.querySelectorAll("[data-calendar-page]").forEach((calendar) => {
2124
2138
  const tabs = Array.from(calendar.querySelectorAll("[data-calendar-tab]"));
2125
2139
  const panels = Array.from(calendar.querySelectorAll("[data-calendar-panel]"));
package/dist/server.cjs CHANGED
@@ -165,6 +165,8 @@ var require_page_adapter = __commonJS({
165
165
  workflow_step: plan.workflowStep,
166
166
  workflow_step_label: plan.workflowStepLabel,
167
167
  invite_policy: plan.invitePolicy,
168
+ can_cancel: plan.canCancel === true,
169
+ public_invitation_href: plan.publicInvitationHref,
168
170
  occurrence: {
169
171
  status: occurrence.status,
170
172
  status_label: occurrence.statusLabel,
@@ -193,6 +195,46 @@ var require_page_adapter = __commonJS({
193
195
  }
194
196
  };
195
197
  }
198
+ function adaptInvitations(page) {
199
+ return list2(page.invitations).map((invitation) => ({
200
+ key: invitation.key,
201
+ name: invitation.name,
202
+ status: invitation.status,
203
+ status_label: invitation.statusLabel,
204
+ channel: invitation.channel,
205
+ invite_href: invitation.inviteHref,
206
+ can_revoke: invitation.canRevoke === true
207
+ }));
208
+ }
209
+ function adaptRegistrations(page) {
210
+ return list2(page.registrations).map((registration) => ({
211
+ key: registration.key,
212
+ name: registration.name,
213
+ registration_status: registration.registrationStatus,
214
+ payment_status: registration.paymentStatus,
215
+ status_label: registration.statusLabel,
216
+ invoice_amount: registration.invoiceAmount,
217
+ selected_options: list2(registration.selectedOptions),
218
+ rejection_message: registration.rejectionMessage,
219
+ can_reject: registration.canReject === true,
220
+ can_checkout: registration.canCheckout === true,
221
+ can_cancel_checkout: registration.canCancelCheckout === true,
222
+ can_refund: registration.canRefund === true
223
+ }));
224
+ }
225
+ function adaptOperation(page) {
226
+ const operation = page.operation;
227
+ if (!operation || typeof operation !== "object") return null;
228
+ return {
229
+ kind: operation.kind,
230
+ status: operation.status,
231
+ label: operation.label,
232
+ processed: operation.processedCount,
233
+ total: operation.totalCount,
234
+ failed: operation.failedCount,
235
+ message: operation.message
236
+ };
237
+ }
196
238
  function adaptCalendar(page) {
197
239
  return {
198
240
  title: "Kalender Acara",
@@ -257,6 +299,10 @@ var require_page_adapter = __commonJS({
257
299
  rsvp_status: invitee.rsvpStatus,
258
300
  rsvp_label: invitee.rsvpLabel
259
301
  })),
302
+ // Kontrak v2: data pengelolaan initiator (tanpa kontak peserta).
303
+ invitations: adaptInvitations(page),
304
+ registrations: adaptRegistrations(page),
305
+ operation: adaptOperation(page),
260
306
  viewerRole: page.viewerRole
261
307
  };
262
308
  default:
@@ -1174,6 +1220,395 @@ function GatheringPlanSimulator({ plan, props }) {
1174
1220
  )
1175
1221
  );
1176
1222
  }
1223
+ function jakartaInputValue(value) {
1224
+ const time = typeof value === "string" ? Date.parse(value) : Number.NaN;
1225
+ return Number.isFinite(time) ? new Date(time + 7 * 3600 * 1e3).toISOString().slice(0, 16) : "";
1226
+ }
1227
+ function planDateTime(value) {
1228
+ const date = formatCalendarDate(value);
1229
+ const time = formatCalendarTime(value);
1230
+ return date ? `${date}${time ? ` \xB7 ${time} WIB` : ""}` : "Belum ditentukan";
1231
+ }
1232
+ var invitationChannels = {
1233
+ email: "Email",
1234
+ whatsapp: "WhatsApp",
1235
+ email_whatsapp: "Email & WhatsApp",
1236
+ public: "Tautan terbuka"
1237
+ };
1238
+ function PlanOperationNotice({ operation, kinds }) {
1239
+ if (!operation || !kinds.includes(operation.kind)) return null;
1240
+ const failed = operation.status === "FAILED";
1241
+ return h(
1242
+ "p",
1243
+ { className: `kumpul-plan-live-operation${failed ? " is-failed" : ""}`, role: "status" },
1244
+ h("strong", null, failed ? `${operation.label} gagal` : `${operation.label}\u2026`),
1245
+ ` ${Number(operation.processed) || 0}/${Number(operation.total) || 0} diproses`,
1246
+ Number(operation.failed) ? ` \xB7 ${operation.failed} gagal` : "",
1247
+ operation.message ? ` \xB7 ${operation.message}` : "",
1248
+ failed ? null : " \xB7 muat ulang halaman untuk melihat progres terbaru."
1249
+ );
1250
+ }
1251
+ function PlanSummaryFields({ plan, openedOptions }) {
1252
+ const occurrence = plan.occurrence || {};
1253
+ return h(
1254
+ "div",
1255
+ null,
1256
+ h(
1257
+ "dl",
1258
+ { className: "kumpul-detail-fields" },
1259
+ h("div", null, h("dt", null, "Nama rencana"), h("dd", null, text(plan.title, "Rencana gathering"))),
1260
+ h("div", null, h("dt", null, "Akses peserta"), h("dd", null, plan.invite_policy === "INVITE_ONLY" ? "Khusus undangan" : "Terbuka")),
1261
+ h("div", null, h("dt", null, "Batas reservasi"), h("dd", null, planDateTime(occurrence.rsvp_close_at))),
1262
+ h("div", null, h("dt", null, "Batas pembayaran"), h("dd", null, planDateTime(occurrence.payment_deadline))),
1263
+ h("div", null, h("dt", null, "Tanggal acara"), h("dd", null, planDateTime(occurrence.final_schedule))),
1264
+ h("div", null, h("dt", null, "Pilihan dibuka"), h(
1265
+ "dd",
1266
+ null,
1267
+ openedOptions.length ? openedOptions.map((option) => `${text(option.option_group_key, "Pilihan")} \xB7 ${text(option.label)}`).join(", ") : "Belum ada"
1268
+ ))
1269
+ )
1270
+ );
1271
+ }
1272
+ function PlanPeopleList({ registrations, selectable, selectAction, props, rowActions }) {
1273
+ if (!registrations.length) {
1274
+ return h("p", { className: "kumpul-plan-sim-help" }, "Belum ada peserta yang mengonfirmasi kehadiran.");
1275
+ }
1276
+ return h(
1277
+ "ul",
1278
+ { className: "kumpul-plan-live-people" },
1279
+ ...registrations.map((registration) => h(
1280
+ "li",
1281
+ { key: registration.key, className: "kumpul-plan-sim-person" },
1282
+ h(
1283
+ "div",
1284
+ { className: "kumpul-plan-sim-person-heading" },
1285
+ h(
1286
+ "label",
1287
+ { className: "kumpul-plan-live-person-name" },
1288
+ selectable(registration) ? h("input", {
1289
+ type: "checkbox",
1290
+ "data-bagdja-selectable": "",
1291
+ "data-bagdja-key": registration.key,
1292
+ disabled: !intentEnabled(props, selectAction),
1293
+ "aria-label": `Pilih ${text(registration.name, "peserta")}`
1294
+ }) : null,
1295
+ h("strong", null, text(registration.name, "Peserta"))
1296
+ ),
1297
+ h("span", null, [
1298
+ registration.status_label,
1299
+ list(registration.selected_options).join(", "),
1300
+ Number.isFinite(Number(registration.invoice_amount)) ? formatCurrency(registration.invoice_amount) : ""
1301
+ ].filter(Boolean).join(" \xB7 ")),
1302
+ registration.rejection_message ? h("span", null, `Alasan: ${registration.rejection_message}`) : null
1303
+ ),
1304
+ rowActions ? h("div", { className: "kumpul-plan-live-row-actions" }, ...rowActions(registration)) : null
1305
+ ))
1306
+ );
1307
+ }
1308
+ function LivePlanWorkflow({ plan, props }) {
1309
+ const page = props.kumpulPage || {};
1310
+ const occurrence = plan.occurrence || {};
1311
+ const options = list(occurrence.option_groups_snapshot);
1312
+ const openedIds = new Set(list(occurrence.opened_option_ids_snapshot));
1313
+ const openedOptions = options.filter((option) => openedIds.has(option.product_option_id));
1314
+ const invitations = list(page.invitations);
1315
+ const privateInvitations = invitations.filter((invitation) => invitation.channel !== "public");
1316
+ const registrations = list(page.registrations);
1317
+ const activeRegistrations = registrations.filter((registration) => registration.registration_status === "RSVP_CONFIRMED");
1318
+ const paidRegistrations = activeRegistrations.filter((registration) => registration.payment_status === "PAID");
1319
+ const operation = page.operation;
1320
+ const stepIndex = gatheringWorkflowSteps.findIndex((step) => step.key === plan.workflow_step);
1321
+ const finished = stepIndex < 0;
1322
+ const currentIndex = finished ? gatheringWorkflowSteps.length - 1 : stepIndex;
1323
+ const has = (action) => list(page.actions).includes(action);
1324
+ const button = (action, label, extra = {}, className = "kumpul-plan-sim-primary") => h("button", {
1325
+ type: "button",
1326
+ className,
1327
+ disabled: !intentEnabled(props, action),
1328
+ ...intentAttributes(action, plan.key, extra)
1329
+ }, label);
1330
+ const minMax = `min. ${Number(occurrence.min_attendees) || 0} \xB7 maks. ${Number(occurrence.max_attendees) || 0}`;
1331
+ const publicLink = plan.invite_policy === "OPEN" && plan.public_invitation_href ? h(
1332
+ "p",
1333
+ { className: "kumpul-plan-live-public" },
1334
+ "Undangan terbuka: ",
1335
+ h("a", { href: plan.public_invitation_href }, "Buka halaman undangan"),
1336
+ " \u2014 bagikan tautan halaman tersebut ke calon peserta."
1337
+ ) : null;
1338
+ const planPanel = (editable) => editable && has("gathering.plan.save") ? h(
1339
+ "div",
1340
+ { "data-bagdja-scope": "" },
1341
+ h("p", { className: "kumpul-plan-sim-help" }, "Tetapkan akses undangan, tenggat, tanggal acara, dan pilihan produk yang dibuka untuk peserta."),
1342
+ h(
1343
+ "div",
1344
+ { className: "kumpul-plan-sim-form" },
1345
+ h(
1346
+ "label",
1347
+ null,
1348
+ "Nama rencana",
1349
+ h("input", { type: "text", required: true, minLength: 3, maxLength: 255, defaultValue: text(plan.title), "data-bagdja-field": "title" })
1350
+ ),
1351
+ h(
1352
+ "label",
1353
+ null,
1354
+ "Akses peserta",
1355
+ h(
1356
+ "select",
1357
+ { defaultValue: plan.invite_policy === "INVITE_ONLY" ? "INVITE_ONLY" : "OPEN", "data-bagdja-field": "invitePolicy" },
1358
+ h("option", { value: "OPEN" }, "Terbuka"),
1359
+ h("option", { value: "INVITE_ONLY" }, "Khusus undangan")
1360
+ )
1361
+ )
1362
+ ),
1363
+ h(
1364
+ "div",
1365
+ { className: "kumpul-plan-sim-form kumpul-plan-live-dates" },
1366
+ ...[
1367
+ ["rsvpCloseAt", "Batas reservasi", occurrence.rsvp_close_at],
1368
+ ["paymentDueAt", "Batas pembayaran", occurrence.payment_deadline],
1369
+ ["scheduledAt", "Tanggal acara", occurrence.final_schedule]
1370
+ ].map(([field, label, value]) => h(
1371
+ "label",
1372
+ { key: field },
1373
+ `${label} (WIB)`,
1374
+ h("input", { type: "datetime-local", defaultValue: jakartaInputValue(value), "data-bagdja-field": field })
1375
+ ))
1376
+ ),
1377
+ h(
1378
+ "fieldset",
1379
+ { className: "kumpul-plan-sim-options" },
1380
+ h("legend", null, "Pilihan dari produk yang dibuka"),
1381
+ options.length ? options.map((option) => h(
1382
+ "label",
1383
+ { key: option.product_option_id, className: "kumpul-plan-sim-option" },
1384
+ h("input", { type: "checkbox", value: option.product_option_id, defaultChecked: openedIds.has(option.product_option_id), "data-bagdja-field": "optionKeys" }),
1385
+ h(
1386
+ "span",
1387
+ null,
1388
+ h("strong", null, `${text(option.option_group_key, "Pilihan")} \xB7 ${text(option.label)}`),
1389
+ option.venue_location || option.description ? h("small", null, [option.venue_location, option.description].filter(Boolean).join(" \xB7 ")) : null
1390
+ )
1391
+ )) : h("p", null, "Produk ini tidak memiliki pilihan.")
1392
+ ),
1393
+ h(
1394
+ "div",
1395
+ { className: "kumpul-plan-sim-actions" },
1396
+ button("gathering.plan.save", "Simpan", {}, "kumpul-plan-sim-secondary"),
1397
+ button("gathering.plan.save", "Submit & lanjut buat undangan", { "data-bagdja-submit": "true" })
1398
+ )
1399
+ ) : h(PlanSummaryFields, { plan, openedOptions });
1400
+ const invitationsPanel = (editable) => h(
1401
+ "div",
1402
+ null,
1403
+ h("p", { className: "kumpul-plan-sim-help" }, plan.invite_policy === "INVITE_ONLY" ? "Rencana khusus undangan: tambahkan calon peserta lewat email atau WhatsApp, lalu kirim undangan." : "Rencana terbuka: undangan publik dibuat saat undangan dikirim, lalu siapa pun dengan tautan bisa RSVP."),
1404
+ publicLink,
1405
+ editable && has("gathering.invitation.add") ? h(
1406
+ "div",
1407
+ { className: "kumpul-plan-sim-invite-form", "data-bagdja-scope": "" },
1408
+ h("label", null, "Nama calon peserta", h("input", { type: "text", maxLength: 120, placeholder: "Nama peserta", "data-bagdja-field": "invitee.name" })),
1409
+ h("label", null, "Email", h("input", { type: "email", maxLength: 254, placeholder: "nama@email.com", "data-bagdja-field": "invitee.email" })),
1410
+ h("label", null, "WhatsApp", h("input", { type: "tel", maxLength: 20, placeholder: "+628123456789", "data-bagdja-field": "invitee.whatsapp" })),
1411
+ button("gathering.invitation.add", "Tambah peserta", {}, "")
1412
+ ) : null,
1413
+ privateInvitations.length ? h(
1414
+ "ul",
1415
+ { className: "kumpul-plan-live-people" },
1416
+ ...privateInvitations.map((invitation) => h(
1417
+ "li",
1418
+ { key: invitation.key, className: "kumpul-plan-sim-person" },
1419
+ h(
1420
+ "div",
1421
+ { className: "kumpul-plan-sim-person-heading" },
1422
+ h("strong", null, text(invitation.name, "Peserta")),
1423
+ h("span", null, `${invitationChannels[invitation.channel] || "Undangan"} \xB7 ${text(invitation.status_label)}`)
1424
+ ),
1425
+ h(
1426
+ "div",
1427
+ { className: "kumpul-plan-live-row-actions" },
1428
+ invitation.invite_href ? h("a", { href: invitation.invite_href }, "Lihat undangan") : null,
1429
+ editable && invitation.can_revoke && has("gathering.invitation.revoke") ? h("button", {
1430
+ type: "button",
1431
+ disabled: !intentEnabled(props, "gathering.invitation.revoke"),
1432
+ ...intentAttributes("gathering.invitation.revoke", plan.key, { "data-bagdja-target": invitation.key })
1433
+ }, "Cabut") : null
1434
+ )
1435
+ ))
1436
+ ) : plan.invite_policy === "INVITE_ONLY" ? h("p", { className: "kumpul-plan-sim-help" }, "Belum ada calon peserta.") : null,
1437
+ h(PlanOperationNotice, { operation, kinds: ["INVITATION_DISPATCH", "INVITATION_REVOCATION"] }),
1438
+ editable && has("gathering.invitations.submit") ? h("div", { className: "kumpul-plan-sim-actions" }, button("gathering.invitations.submit", "Kirim undangan")) : null
1439
+ );
1440
+ const confirmationPanel = (editable) => {
1441
+ const canReject = editable && has("gathering.registrations.reject");
1442
+ return h(
1443
+ "div",
1444
+ { "data-bagdja-scope": "" },
1445
+ h("p", { className: "kumpul-plan-sim-help" }, `Peserta hadir ${activeRegistrations.length} (${minMax}). Jumlah harus memenuhi batas produk sebelum RSVP ditutup.`),
1446
+ editable ? publicLink : null,
1447
+ h(PlanPeopleList, {
1448
+ registrations,
1449
+ props,
1450
+ selectAction: "gathering.registrations.reject",
1451
+ selectable: (registration) => canReject && registration.can_reject
1452
+ }),
1453
+ canReject ? h(
1454
+ "label",
1455
+ { className: "kumpul-plan-live-reason" },
1456
+ "Alasan penolakan untuk peserta terpilih",
1457
+ h("textarea", { rows: 2, maxLength: 2e3, "data-bagdja-field": "message" })
1458
+ ) : null,
1459
+ editable && (canReject || has("gathering.reservations.confirm")) ? h(
1460
+ "div",
1461
+ { className: "kumpul-plan-sim-actions" },
1462
+ canReject ? button("gathering.registrations.reject", "Tolak peserta terpilih", {}, "kumpul-plan-sim-secondary") : null,
1463
+ has("gathering.reservations.confirm") ? button("gathering.reservations.confirm", "Tutup RSVP & buka pembayaran") : null
1464
+ ) : null
1465
+ );
1466
+ };
1467
+ const paymentPanel = (editable) => {
1468
+ const canCheckout = editable && has("gathering.registrations.checkout");
1469
+ const groups = [...new Set(openedOptions.map((option) => text(option.option_group_key, "Pilihan")))];
1470
+ const deposit = Number(occurrence.deposit_amount_per_seat) || 0;
1471
+ return h(
1472
+ "div",
1473
+ { "data-bagdja-scope": "" },
1474
+ h(
1475
+ "p",
1476
+ { className: "kumpul-plan-sim-help" },
1477
+ `Peserta lunas ${paidRegistrations.length} dari ${activeRegistrations.length} (${minMax}).`,
1478
+ deposit ? ` DP ${formatCurrency(deposit * paidRegistrations.length)} dicairkan ke penyelenggara saat acara dikonfirmasi.` : ""
1479
+ ),
1480
+ h(PlanOperationNotice, { operation, kinds: ["INVOICE_ISSUANCE"] }),
1481
+ h(PlanPeopleList, {
1482
+ registrations: activeRegistrations,
1483
+ props,
1484
+ selectAction: "gathering.registrations.checkout",
1485
+ selectable: (registration) => canCheckout && registration.can_checkout,
1486
+ rowActions: editable ? (registration) => [
1487
+ registration.can_cancel_checkout && has("gathering.registration.cancel_checkout") ? h("button", {
1488
+ type: "button",
1489
+ key: "cancel",
1490
+ disabled: !intentEnabled(props, "gathering.registration.cancel_checkout"),
1491
+ ...intentAttributes("gathering.registration.cancel_checkout", plan.key, { "data-bagdja-target": registration.key })
1492
+ }, "Batalkan checkout") : null,
1493
+ registration.can_refund && has("gathering.registration.refund") ? h("button", {
1494
+ type: "button",
1495
+ key: "refund",
1496
+ disabled: !intentEnabled(props, "gathering.registration.refund"),
1497
+ ...intentAttributes("gathering.registration.refund", plan.key, { "data-bagdja-target": registration.key })
1498
+ }, "Refund") : null
1499
+ ] : null
1500
+ }),
1501
+ editable && (canCheckout || has("gathering.invoices.resend")) ? h(
1502
+ "div",
1503
+ { className: "kumpul-plan-sim-actions" },
1504
+ has("gathering.invoices.resend") ? button("gathering.invoices.resend", "Kirim ulang invoice", {}, "kumpul-plan-sim-secondary") : null,
1505
+ canCheckout ? button("gathering.registrations.checkout", "Bayarkan peserta terpilih", {}, "kumpul-plan-sim-secondary") : null
1506
+ ) : null,
1507
+ h(
1508
+ "fieldset",
1509
+ { className: "kumpul-plan-sim-options" },
1510
+ h("legend", null, "Opsi final gathering"),
1511
+ groups.length ? groups.map((group) => h(
1512
+ "div",
1513
+ { key: group, className: "kumpul-plan-sim-final-group" },
1514
+ h("strong", null, group),
1515
+ ...openedOptions.filter((option) => text(option.option_group_key, "Pilihan") === group).map((option) => {
1516
+ const votes = Number((occurrence.voting_results || {})[option.product_option_id]);
1517
+ const voteLabel = Number.isFinite(votes) ? ` \xB7 ${votes} suara` : "";
1518
+ return editable && has("gathering.event.confirm") ? h(
1519
+ "label",
1520
+ { key: option.product_option_id },
1521
+ h("input", {
1522
+ type: "radio",
1523
+ name: `kumpul-final-${group}`,
1524
+ value: option.product_option_id,
1525
+ defaultChecked: option.is_final_selection === true,
1526
+ "data-bagdja-field": "optionKeys"
1527
+ }),
1528
+ `${text(option.label)}${voteLabel}`
1529
+ ) : h(
1530
+ "p",
1531
+ { key: option.product_option_id },
1532
+ `${text(option.label)}${option.is_final_selection ? " \xB7 opsi final" : ""}${voteLabel}`
1533
+ );
1534
+ })
1535
+ )) : h("p", null, "Tidak ada pilihan yang perlu ditetapkan.")
1536
+ ),
1537
+ editable && has("gathering.event.confirm") ? h("div", { className: "kumpul-plan-sim-actions" }, button("gathering.event.confirm", "Konfirmasi acara")) : null
1538
+ );
1539
+ };
1540
+ const panels = [planPanel, invitationsPanel, confirmationPanel, paymentPanel];
1541
+ return h(
1542
+ "section",
1543
+ {
1544
+ className: "kumpul-plan-simulator kumpul-plan-live",
1545
+ "aria-label": "Tahapan gathering",
1546
+ "data-plan-live": "",
1547
+ "data-current-step": finished ? "DONE" : plan.workflow_step
1548
+ },
1549
+ h(
1550
+ "div",
1551
+ { className: "kumpul-plan-simulator-heading" },
1552
+ h(
1553
+ "div",
1554
+ null,
1555
+ h("p", { className: "kumpul-eyebrow" }, "Kelola rencana"),
1556
+ h("h2", null, finished ? "Rencana selesai diproses" : `Tahap ${currentIndex + 1}: ${gatheringWorkflowSteps[currentIndex].label}`),
1557
+ h("p", null, "Klik tahap sebelumnya untuk melihat ringkasan yang sudah diisi.")
1558
+ )
1559
+ ),
1560
+ h(
1561
+ "ol",
1562
+ { className: "kumpul-plan-sim-steps", "aria-label": "Tahapan gathering" },
1563
+ ...gatheringWorkflowSteps.map((step, index) => h(
1564
+ "li",
1565
+ {
1566
+ key: step.key,
1567
+ className: finished || index < currentIndex ? "is-complete" : index === currentIndex ? "is-current" : ""
1568
+ },
1569
+ h(
1570
+ "button",
1571
+ {
1572
+ type: "button",
1573
+ "data-plan-step-tab": step.key,
1574
+ "aria-current": index === currentIndex ? "step" : void 0,
1575
+ "aria-pressed": index === currentIndex ? "true" : "false",
1576
+ disabled: index > currentIndex
1577
+ },
1578
+ h("span", null, finished || index < currentIndex ? "\u2713" : String(index + 1)),
1579
+ h("span", null, step.label)
1580
+ )
1581
+ ))
1582
+ ),
1583
+ ...gatheringWorkflowSteps.map((step, index) => {
1584
+ const editable = !finished && index === currentIndex;
1585
+ return h(
1586
+ "div",
1587
+ {
1588
+ key: step.key,
1589
+ className: "kumpul-plan-sim-panel",
1590
+ "data-plan-step-panel": step.key,
1591
+ hidden: index !== currentIndex
1592
+ },
1593
+ h("h3", null, `${index + 1}. ${step.label}`),
1594
+ index < currentIndex || finished ? h("p", { className: "kumpul-plan-live-readonly" }, "Ringkasan tahap yang sudah dilewati \u2014 tidak dapat diubah.") : null,
1595
+ panels[index](editable)
1596
+ );
1597
+ }),
1598
+ has("gathering.cancel") ? h(
1599
+ "details",
1600
+ { className: "kumpul-plan-live-cancel", "data-bagdja-scope": "" },
1601
+ h("summary", null, "Batalkan acara"),
1602
+ h(
1603
+ "label",
1604
+ null,
1605
+ "Alasan pembatalan (opsional)",
1606
+ h("input", { type: "text", maxLength: 500, placeholder: "Dibatalkan oleh initiator", "data-bagdja-field": "reason" })
1607
+ ),
1608
+ button("gathering.cancel", "Batalkan acara", {}, "kumpul-plan-live-danger")
1609
+ ) : null
1610
+ );
1611
+ }
1177
1612
  function GatheringPlanDetailSection({ props, section }) {
1178
1613
  const sectionContent = section?.content || {};
1179
1614
  const plan = props.kumpulPage && props.kumpulPage.plan || sectionContent.gatheringPlan || {};
@@ -1221,26 +1656,7 @@ function GatheringPlanDetailSection({ props, section }) {
1221
1656
  "Preview desainer \xB7 data contoh saja. Status dan pengelolaan rencana dilakukan oleh host Bagdja."
1222
1657
  ) : null,
1223
1658
  props.isPreview === true ? h(GatheringPlanSimulator, { plan, props }) : null,
1224
- props.isPreview === true ? null : h(
1225
- "section",
1226
- { className: "kumpul-plan-workflow", "aria-label": "Tahapan gathering" },
1227
- h("p", { className: "kumpul-plan-current-step" }, "Tahap saat ini: ", h("strong", { "data-plan-current-step": "" }, currentStep)),
1228
- h(
1229
- "ol",
1230
- null,
1231
- ...gatheringWorkflowSteps.map((step, index) => h(
1232
- "li",
1233
- {
1234
- key: step.key,
1235
- className: index < currentStepIndex ? "is-complete" : index === currentStepIndex ? "is-current" : "",
1236
- "aria-current": index === currentStepIndex ? "step" : void 0
1237
- },
1238
- h("span", { className: "kumpul-plan-step-marker", "aria-hidden": "true" }, index < currentStepIndex ? "\u2713" : String(index + 1)),
1239
- h("span", null, step.label)
1240
- ))
1241
- ),
1242
- h("p", { className: "kumpul-plan-readonly" }, "Ringkasan ini hanya untuk melihat progres. Aksi rencana tersedia melalui host Bagdja.")
1243
- ),
1659
+ props.isPreview === true ? null : h(LivePlanWorkflow, { plan, props }),
1244
1660
  h(
1245
1661
  "div",
1246
1662
  { className: "kumpul-plan-layout" },
@@ -1312,7 +1728,7 @@ function GatheringPlanDetailSection({ props, section }) {
1312
1728
  h("h2", null, "Status rencana"),
1313
1729
  h("span", { className: "kumpul-transaction-status kumpul-transaction-status-info" }, workflowStatus),
1314
1730
  h("p", null, "Tahap kerja \xB7 ", h("span", { "data-plan-aside-step": "" }, currentStep)),
1315
- h("p", null, "Rencana gathering dikelola terpisah dari keranjang. Pembayaran peserta hanya tersedia setelah tahap konfirmasi melalui host Bagdja."),
1731
+ h("p", null, "Rencana gathering dikelola terpisah dari keranjang. Pembayaran peserta dibuka setelah RSVP ditutup di tahap Konfirmasi undangan."),
1316
1732
  order.id ? h("p", { className: "kumpul-plan-order-ref" }, `Referensi pesanan \xB7 ${order.id}`) : null,
1317
1733
  h("a", { className: "kumpul-plan-account-link", href: tenantPath(props, "/cart") }, "Kembali ke Keranjang")
1318
1734
  )
@@ -1395,10 +1811,11 @@ function BillingSection({ props }) {
1395
1811
  const title = text(isGathering ? invoice.gathering_title : invoice.productName, "Tagihan gathering");
1396
1812
  const reference = isGathering ? `${text(invoice.invoice_id, "Invoice")} \xB7 ${text(invoice.attendee_name, "Peserta")}` : `${text(invoice.label, "Termin pembayaran")} \xB7 ${text(invoice.anchorStepName, text(invoice.orderId, "Pesanan"))}`;
1397
1813
  const dueDate = invoice.payment_deadline || invoice.dueDate;
1814
+ const cardHref = isGathering ? invoice.detail_href : invoice.transaction_href;
1398
1815
  return h(
1399
1816
  "article",
1400
1817
  {
1401
- className: `kumpul-billing-card kumpul-billing-card-${status}`,
1818
+ className: `kumpul-billing-card kumpul-billing-card-${status}${cardHref ? " kumpul-billing-card-linked" : ""}`,
1402
1819
  "data-billing-item": "",
1403
1820
  "data-billing-status": status,
1404
1821
  key: invoice.id || index
@@ -1410,7 +1827,7 @@ function BillingSection({ props }) {
1410
1827
  "div",
1411
1828
  null,
1412
1829
  h("span", { className: "kumpul-billing-kind" }, isGathering ? "Tagihan gathering" : `Termin ${invoice.sequence || ""}`.trim()),
1413
- h("h3", null, title),
1830
+ h("h3", null, cardHref ? h("a", { className: "kumpul-billing-card-link", href: cardHref }, title) : title),
1414
1831
  h("p", null, reference)
1415
1832
  ),
1416
1833
  h("span", { className: `kumpul-billing-status kumpul-billing-status-${statusInfo.tone}` }, statusInfo.label)
@@ -1898,7 +2315,8 @@ function CalendarSection({ props, section }) {
1898
2315
  title: text(plan.title, "Rencana gathering"),
1899
2316
  statusLabel: text(plan.status_label, calendarStatusLabels[plan.status] || "Status belum tersedia"),
1900
2317
  event_date: plan.event_date,
1901
- location: text(plan.event_location)
2318
+ location: text(plan.event_location),
2319
+ href: plan.detail_href
1902
2320
  })),
1903
2321
  ...invitations.filter((invitation) => calendarDateKey(invitation.event_date)).map((invitation) => ({
1904
2322
  id: invitation.id || invitation.plan_number,
@@ -1907,7 +2325,8 @@ function CalendarSection({ props, section }) {
1907
2325
  title: text(invitation.gathering_title, "Undangan gathering"),
1908
2326
  statusLabel: text(invitation.action_label, "Undangan diterima"),
1909
2327
  event_date: invitation.event_date,
1910
- location: text(invitation.event_location)
2328
+ location: text(invitation.event_location),
2329
+ href: invitation.detail_href
1911
2330
  }))
1912
2331
  ].sort((left, right) => new Date(left.event_date).getTime() - new Date(right.event_date).getTime());
1913
2332
  const initialMonth = calendarMonthKey(content.month, events[0]?.event_date);
@@ -2059,7 +2478,7 @@ function CalendarSection({ props, section }) {
2059
2478
  ...events.map((event, index) => h(
2060
2479
  "article",
2061
2480
  {
2062
- className: `kumpul-calendar-event kumpul-calendar-event-${event.type}`,
2481
+ className: `kumpul-calendar-event kumpul-calendar-event-${event.type}${event.href ? " kumpul-calendar-event-linked" : ""}`,
2063
2482
  "data-calendar-event": "",
2064
2483
  "data-calendar-date": calendarDateKey(event.event_date),
2065
2484
  hidden: calendarDateKey(event.event_date) !== selectedDate,
@@ -2070,7 +2489,7 @@ function CalendarSection({ props, section }) {
2070
2489
  "div",
2071
2490
  { className: "kumpul-calendar-event-copy" },
2072
2491
  h("span", { className: "kumpul-calendar-event-kind" }, event.typeLabel),
2073
- h("h4", null, event.title),
2492
+ h("h4", null, event.href ? h("a", { className: "kumpul-calendar-event-link", href: event.href }, event.title) : event.title),
2074
2493
  h("p", null, `${event.statusLabel}${event.location ? ` \xB7 ${event.location}` : ""}`)
2075
2494
  )
2076
2495
  )),
@@ -2500,11 +2919,11 @@ function styles(colors) {
2500
2919
  @media(max-width:760px){.kumpul-cart-layout{grid-template-columns:1fr;gap:15px}.kumpul-cart-item{grid-template-columns:20px 52px minmax(0,1fr);gap:10px;padding:12px}.kumpul-cart-art{width:52px;height:52px;border-radius:12px;font-size:23px}.kumpul-cart-copy h2{font-size:11px}.kumpul-cart-item-controls{grid-column:3;min-width:0;width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px}.kumpul-cart-price{margin-right:auto;font-size:12px}.kumpul-cart-summary{position:static}.kumpul-cart-heading h1{font-size:32px}}
2501
2920
  .kumpul-transactions{max-width:980px;margin:0 auto}.kumpul-transactions-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.kumpul-transactions-heading h1{margin:0;color:var(--kt-text);font-size:clamp(30px,4vw,42px);line-height:1.15;letter-spacing:-.04em}.kumpul-transactions-heading>div:first-child>p:last-child{margin:9px 0 0;color:var(--kt-muted);font-size:13px}.kumpul-transactions-total{padding:13px 16px;display:grid;gap:2px;border:1px solid var(--kt-border);border-radius:15px;background:var(--kt-surface)}.kumpul-transactions-total strong{font-size:21px;line-height:1.1}.kumpul-transactions-total span{color:var(--kt-muted);font-size:10px}.kumpul-transactions-preview-note{margin:20px 0 0;padding:11px 14px;border:1px solid var(--kt-border);border-radius:12px;background:var(--kt-surface);color:var(--kt-muted);font-size:11px}.kumpul-transactions-filters{margin:25px 0 22px;padding-bottom:7px;display:flex;gap:8px;overflow-x:auto;border-bottom:1px solid var(--kt-border);scrollbar-width:thin}.kumpul-transactions-filters button{padding:9px 12px;display:inline-flex;align-items:center;gap:8px;border:1px solid transparent;border-radius:11px 11px 0 0;background:transparent;color:var(--kt-muted);font:inherit;font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}.kumpul-transactions-filters button[aria-pressed=true]{border-color:var(--kt-border);border-bottom-color:var(--kt-surface);background:var(--kt-surface);color:var(--kt-accent)}.kumpul-transactions-filters button span{min-width:20px;height:20px;padding:2px 6px;display:grid;place-items:center;border-radius:99px;background:var(--kt-bg);color:var(--kt-muted);font-size:9px}.kumpul-transactions-list{display:grid;gap:12px}.kumpul-transaction-card{overflow:hidden;border:1px solid var(--kt-border);border-radius:16px;background:var(--kt-surface)}.kumpul-transaction-top{padding:13px 18px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid #e8f0f2}.kumpul-transaction-top>div{display:flex;align-items:center;gap:8px;color:var(--kt-muted);font-size:10px}.kumpul-transaction-ref{color:var(--kt-text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:750}.kumpul-transaction-status{padding:6px 9px;flex:none;border-radius:99px;font-size:9px;font-weight:800}.kumpul-transaction-status-warning{background:#fff4da;color:#a15c00}.kumpul-transaction-status-info{background:#e8f2ff;color:#2563eb}.kumpul-transaction-status-success{background:#e5f7ef;color:#08734f}.kumpul-transaction-status-danger{background:#ffeded;color:#b91c1c}.kumpul-transaction-status-muted{background:#eef1f4;color:#64748b}.kumpul-transaction-body{padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:20px}.kumpul-transaction-item{min-width:0;display:flex;align-items:center;gap:13px}.kumpul-transaction-art{width:58px;height:58px;flex:none;display:grid;place-items:center;border:1px solid var(--kt-border);border-radius:14px;background:var(--kt-bg);color:var(--kt-accent);font-size:26px}.kumpul-transaction-item>div{min-width:0}.kumpul-transaction-item h2{margin:0;font-size:13px}.kumpul-transaction-item p{margin:5px 0 0;color:var(--kt-muted);font-size:10px}.kumpul-transaction-total{flex:none;text-align:right}.kumpul-transaction-total span{display:block;color:var(--kt-muted);font-size:10px}.kumpul-transaction-total strong{display:block;margin-top:3px;font-size:16px}.kumpul-transaction-actions{padding:0 18px 15px;display:flex;justify-content:flex-end;gap:8px}.kumpul-transaction-actions button{min-height:34px;padding:7px 11px;border:1px solid var(--kt-border);border-radius:10px;background:var(--kt-surface);color:var(--kt-text);font:inherit;font-size:9px;font-weight:750;opacity:.62;cursor:not-allowed}.kumpul-transaction-actions button:disabled{opacity:.62}.kumpul-transactions-empty{margin:0;padding:32px 18px;border:1px dashed var(--kt-border);border-radius:15px;color:var(--kt-muted);font-size:12px;text-align:center}
2502
2921
  @media(max-width:700px){.kumpul-transactions-heading{align-items:flex-start;flex-direction:column;gap:16px}.kumpul-transactions-total{width:100%;padding:11px 13px}.kumpul-transactions-total strong{font-size:18px}.kumpul-transactions-filters{margin-top:20px}.kumpul-transaction-top{align-items:flex-start;padding:12px 14px}.kumpul-transaction-top>div{flex-wrap:wrap;gap:5px;font-size:9px}.kumpul-transaction-status{max-width:120px;white-space:normal;text-align:center}.kumpul-transaction-body{align-items:flex-start;padding:14px;gap:10px}.kumpul-transaction-art{width:44px;height:44px;border-radius:12px;font-size:20px}.kumpul-transaction-item{gap:9px}.kumpul-transaction-item h2{font-size:11px}.kumpul-transaction-total strong{font-size:13px}.kumpul-transaction-actions{padding:0 14px 13px;flex-wrap:wrap}.kumpul-transaction-actions button,.kumpul-transaction-actions .kumpul-transaction-action-link{flex:1;padding:7px 8px;font-size:8px}}
2503
- .kumpul-billing{max-width:980px;margin:0 auto}.kumpul-billing-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.kumpul-billing-heading h1{margin:0;color:var(--kt-text);font-size:clamp(30px,4vw,42px);line-height:1.15;letter-spacing:-.04em}.kumpul-billing-description{margin:9px 0 0;color:var(--kt-muted);font-size:13px}.kumpul-billing-summary{display:flex;gap:10px}.kumpul-billing-summary-card{min-width:132px;padding:13px 16px;display:grid;gap:2px;border:1px solid var(--kt-border);border-radius:15px;background:var(--kt-surface)}.kumpul-billing-summary-card strong{font-size:21px;line-height:1.1}.kumpul-billing-summary-card span{color:var(--kt-muted);font-size:10px}.kumpul-billing-preview-note{margin:20px 0 0;padding:11px 14px;border:1px solid var(--kt-border);border-radius:12px;background:var(--kt-surface);color:var(--kt-muted);font-size:11px}.kumpul-billing-filters{margin:25px 0 22px;padding-bottom:7px;display:flex;gap:8px;overflow-x:auto;border-bottom:1px solid var(--kt-border);scrollbar-width:thin}.kumpul-billing-filters button{padding:9px 12px;display:inline-flex;align-items:center;gap:8px;border:1px solid transparent;border-radius:11px 11px 0 0;background:transparent;color:var(--kt-muted);font:inherit;font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}.kumpul-billing-filters button[aria-pressed=true]{border-color:var(--kt-border);border-bottom-color:var(--kt-surface);background:var(--kt-surface);color:var(--kt-accent)}.kumpul-billing-filters button span{min-width:20px;height:20px;padding:2px 6px;display:grid;place-items:center;border-radius:99px;background:var(--kt-bg);color:var(--kt-muted);font-size:9px}.kumpul-billing-results-heading{margin-bottom:12px;display:flex;align-items:baseline;justify-content:space-between;gap:12px}.kumpul-billing-results-heading h2{margin:0;font-size:16px}.kumpul-billing-results-heading span{color:var(--kt-muted);font-size:11px}.kumpul-billing-list{display:grid;gap:12px}.kumpul-billing-card{overflow:hidden;border:1px solid var(--kt-border);border-radius:16px;background:var(--kt-surface)}.kumpul-billing-card-top{padding:17px 19px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;border-bottom:1px solid #e8f0f2}.kumpul-billing-kind{color:var(--kt-accent);font-size:9px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.kumpul-billing-card h3{margin:4px 0 0;font-size:14px}.kumpul-billing-card-top p{margin:5px 0 0;color:var(--kt-muted);font-size:10px}.kumpul-billing-status{padding:6px 9px;flex:none;border-radius:99px;font-size:9px;font-weight:800}.kumpul-billing-status-warning{background:#fff4da;color:#a15c00}.kumpul-billing-status-success{background:#e5f7ef;color:#08734f}.kumpul-billing-status-muted{background:#eef1f4;color:#64748b}.kumpul-billing-card-bottom{padding:14px 19px;display:flex;align-items:center;justify-content:space-between;gap:16px}.kumpul-billing-card-bottom strong{font-size:17px;color:var(--kt-accent)}.kumpul-billing-card-bottom p{margin:4px 0 0;color:var(--kt-muted);font-size:10px}.kumpul-billing-action{min-height:36px;padding:8px 13px;border:0;border-radius:10px;background:var(--kt-accent);color:#fff;font:inherit;font-size:10px;font-weight:750;opacity:.62;cursor:not-allowed}.kumpul-billing-empty{margin:0;padding:32px 18px;border:1px dashed var(--kt-border);border-radius:15px;color:var(--kt-muted);font-size:12px;text-align:center}
2922
+ .kumpul-billing{max-width:980px;margin:0 auto}.kumpul-billing-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.kumpul-billing-heading h1{margin:0;color:var(--kt-text);font-size:clamp(30px,4vw,42px);line-height:1.15;letter-spacing:-.04em}.kumpul-billing-description{margin:9px 0 0;color:var(--kt-muted);font-size:13px}.kumpul-billing-summary{display:flex;gap:10px}.kumpul-billing-summary-card{min-width:132px;padding:13px 16px;display:grid;gap:2px;border:1px solid var(--kt-border);border-radius:15px;background:var(--kt-surface)}.kumpul-billing-summary-card strong{font-size:21px;line-height:1.1}.kumpul-billing-summary-card span{color:var(--kt-muted);font-size:10px}.kumpul-billing-preview-note{margin:20px 0 0;padding:11px 14px;border:1px solid var(--kt-border);border-radius:12px;background:var(--kt-surface);color:var(--kt-muted);font-size:11px}.kumpul-billing-filters{margin:25px 0 22px;padding-bottom:7px;display:flex;gap:8px;overflow-x:auto;border-bottom:1px solid var(--kt-border);scrollbar-width:thin}.kumpul-billing-filters button{padding:9px 12px;display:inline-flex;align-items:center;gap:8px;border:1px solid transparent;border-radius:11px 11px 0 0;background:transparent;color:var(--kt-muted);font:inherit;font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}.kumpul-billing-filters button[aria-pressed=true]{border-color:var(--kt-border);border-bottom-color:var(--kt-surface);background:var(--kt-surface);color:var(--kt-accent)}.kumpul-billing-filters button span{min-width:20px;height:20px;padding:2px 6px;display:grid;place-items:center;border-radius:99px;background:var(--kt-bg);color:var(--kt-muted);font-size:9px}.kumpul-billing-results-heading{margin-bottom:12px;display:flex;align-items:baseline;justify-content:space-between;gap:12px}.kumpul-billing-results-heading h2{margin:0;font-size:16px}.kumpul-billing-results-heading span{color:var(--kt-muted);font-size:11px}.kumpul-billing-list{display:grid;gap:12px}.kumpul-billing-card{overflow:hidden;border:1px solid var(--kt-border);border-radius:16px;background:var(--kt-surface)}.kumpul-billing-card-top{padding:17px 19px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;border-bottom:1px solid #e8f0f2}.kumpul-billing-kind{color:var(--kt-accent);font-size:9px;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.kumpul-billing-card h3{margin:4px 0 0;font-size:14px}.kumpul-billing-card-linked{position:relative;transition:border-color .15s,box-shadow .15s}.kumpul-billing-card-linked:hover{border-color:var(--kt-accent);box-shadow:0 8px 22px rgba(15,23,42,.06)}.kumpul-billing-card-linked:focus-within{border-color:var(--kt-accent)}.kumpul-billing-card-link{color:inherit;text-decoration:none;outline:none}.kumpul-billing-card-link::after{content:'';position:absolute;inset:0;z-index:0;border-radius:inherit}.kumpul-billing-card-linked .kumpul-billing-status,.kumpul-billing-card-linked .kumpul-billing-action{position:relative;z-index:1}.kumpul-billing-card-top p{margin:5px 0 0;color:var(--kt-muted);font-size:10px}.kumpul-billing-status{padding:6px 9px;flex:none;border-radius:99px;font-size:9px;font-weight:800}.kumpul-billing-status-warning{background:#fff4da;color:#a15c00}.kumpul-billing-status-success{background:#e5f7ef;color:#08734f}.kumpul-billing-status-muted{background:#eef1f4;color:#64748b}.kumpul-billing-card-bottom{padding:14px 19px;display:flex;align-items:center;justify-content:space-between;gap:16px}.kumpul-billing-card-bottom strong{font-size:17px;color:var(--kt-accent)}.kumpul-billing-card-bottom p{margin:4px 0 0;color:var(--kt-muted);font-size:10px}.kumpul-billing-action{min-height:36px;padding:8px 13px;border:0;border-radius:10px;background:var(--kt-accent);color:#fff;font:inherit;font-size:10px;font-weight:750;opacity:.62;cursor:not-allowed}.kumpul-billing-empty{margin:0;padding:32px 18px;border:1px dashed var(--kt-border);border-radius:15px;color:var(--kt-muted);font-size:12px;text-align:center}
2504
2923
  @media(max-width:700px){.kumpul-billing-heading{align-items:flex-start;flex-direction:column;gap:16px}.kumpul-billing-summary{width:100%}.kumpul-billing-summary-card{min-width:0;flex:1;padding:11px 13px}.kumpul-billing-summary-card strong{font-size:18px}.kumpul-billing-filters{margin-top:20px}.kumpul-billing-card-top{padding:15px;gap:10px}.kumpul-billing-card h3{font-size:13px}.kumpul-billing-status{max-width:120px;white-space:normal;text-align:center}.kumpul-billing-card-bottom{padding:13px 15px}.kumpul-billing-card-bottom strong{font-size:15px}}
2505
2924
  .kumpul-calendar-agenda:not([open]){display:none}.kumpul-calendar-agenda[open]{position:fixed;inset:50% auto auto 50%;z-index:10;width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 48px);margin:0;padding:0;display:flex;flex-direction:column;transform:translate(-50%,-50%);overflow:hidden;border:1px solid var(--kt-border);border-radius:22px;background:var(--kt-bg);color:var(--kt-text);box-shadow:0 24px 80px #0f172a45}.kumpul-calendar-agenda::backdrop{background:rgb(15 23 42 / 45%);backdrop-filter:blur(2px)}.kumpul-calendar-agenda-handle{display:none}.kumpul-calendar-agenda-heading{padding:22px 24px 16px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;border-bottom:1px solid var(--kt-border)}.kumpul-calendar-agenda-heading .kumpul-eyebrow{margin:0 0 4px}.kumpul-calendar-agenda-heading h2{margin:0;font-size:20px;text-transform:capitalize}.kumpul-calendar-agenda-close{width:36px;height:36px;flex:none;border:1px solid var(--kt-border);border-radius:50%;background:var(--kt-surface);color:var(--kt-text);font:inherit;font-size:22px;line-height:1;cursor:pointer}.kumpul-calendar-agenda-content{min-height:0;padding:18px 24px 24px;overflow:auto;overscroll-behavior:contain}.kumpul-calendar-agenda-list{display:grid;gap:10px}.kumpul-calendar-empty{margin:0;padding:18px;border:1px dashed var(--kt-border);border-radius:14px;color:var(--kt-muted);font-size:13px;text-align:center}
2506
2925
  @media(max-width:620px){.kumpul-calendar-agenda[open]{inset:auto 0 0;width:100%;max-width:none;max-height:min(84dvh,720px);padding-bottom:env(safe-area-inset-bottom);transform:none;border-right:0;border-bottom:0;border-left:0;border-radius:22px 22px 0 0}.kumpul-calendar-agenda-handle{width:38px;height:4px;margin:10px auto 0;display:block;border-radius:99px;background:#cbd5e1}.kumpul-calendar-agenda-heading{padding:14px 20px 14px}.kumpul-calendar-agenda-content{padding:16px 20px 22px}.kumpul-calendar-agenda-close{width:34px;height:34px}}
2507
- .kumpul-calendar-month-toolbar{margin:22px 0 14px;padding:17px 19px;display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--kt-border);border-radius:17px;background:var(--kt-surface)}.kumpul-calendar-month-title h2{margin:0;font-size:20px;line-height:1.2;text-transform:capitalize}.kumpul-calendar-month-title p{margin:5px 0 0;color:var(--kt-muted);font-size:11px}.kumpul-calendar-month-actions{display:flex;align-items:center;gap:7px}.kumpul-calendar-month-actions button{min-width:38px;height:38px;padding:7px 11px;border:1px solid var(--kt-border);border-radius:11px;background:var(--kt-surface);color:var(--kt-text);font:inherit;font-size:12px;font-weight:700;cursor:pointer}.kumpul-calendar-month-actions button[data-calendar-previous],.kumpul-calendar-month-actions button[data-calendar-next]{font-size:22px;line-height:1}.kumpul-calendar-month-view{overflow:hidden;border:1px solid var(--kt-border);border-radius:17px;background:var(--kt-surface)}.kumpul-calendar-weekdays,.kumpul-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.kumpul-calendar-weekdays{border-bottom:1px solid var(--kt-border);background:#f8fbfc}.kumpul-calendar-weekdays span{padding:10px 6px;color:var(--kt-muted);font-size:10px;font-weight:750;text-align:center}.kumpul-calendar-day{position:relative;min-width:0;min-height:77px;padding:9px;display:flex;align-items:flex-start;justify-content:space-between;gap:4px;border:0;border-right:1px solid #e8f0f2;border-bottom:1px solid #e8f0f2;background:var(--kt-surface);color:var(--kt-text);font:inherit;text-align:left;cursor:pointer}.kumpul-calendar-day:nth-child(7n){border-right:0}.kumpul-calendar-day:nth-last-child(-n+7){border-bottom:0}.kumpul-calendar-day:hover{background:#f4fafb}.kumpul-calendar-day[aria-pressed=true]{background:#e6f4f6;box-shadow:inset 0 0 0 2px var(--kt-accent)}.kumpul-calendar-day[data-outside-month=true]{color:#a7b3bd;background:#fbfcfd}.kumpul-calendar-day>span{font-size:11px;font-weight:700}.kumpul-calendar-day small{min-width:19px;height:19px;padding:2px 5px;display:grid;place-items:center;border-radius:999px;background:var(--kt-accent);color:#fff;font-size:9px;font-weight:800}.kumpul-calendar-day:focus-visible,.kumpul-calendar-month-actions button:focus-visible{position:relative;z-index:1;outline:3px solid var(--kt-success);outline-offset:-3px}.kumpul-calendar-agenda{margin-top:24px}.kumpul-calendar-agenda>h3{margin:0 0 12px;font-size:16px;text-transform:capitalize}.kumpul-calendar-event{padding:14px 16px;display:grid;grid-template-columns:76px 1fr;align-items:start;gap:14px;border:1px solid var(--kt-border);border-left:4px solid var(--kt-accent);border-radius:14px;background:var(--kt-surface)}.kumpul-calendar-event[hidden]{display:none}.kumpul-calendar-event-invitation{border-left-color:var(--kt-success)}.kumpul-calendar-event-time{padding-top:2px;color:var(--kt-accent);font-size:11px;font-weight:800}.kumpul-calendar-event-copy{min-width:0}.kumpul-calendar-event-kind{color:var(--kt-muted);font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kumpul-calendar-event-copy h4{margin:3px 0 0;font-size:13px}.kumpul-calendar-event-copy p{margin:4px 0 0;color:var(--kt-muted);font-size:10px}
2926
+ .kumpul-calendar-month-toolbar{margin:22px 0 14px;padding:17px 19px;display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--kt-border);border-radius:17px;background:var(--kt-surface)}.kumpul-calendar-month-title h2{margin:0;font-size:20px;line-height:1.2;text-transform:capitalize}.kumpul-calendar-month-title p{margin:5px 0 0;color:var(--kt-muted);font-size:11px}.kumpul-calendar-month-actions{display:flex;align-items:center;gap:7px}.kumpul-calendar-month-actions button{min-width:38px;height:38px;padding:7px 11px;border:1px solid var(--kt-border);border-radius:11px;background:var(--kt-surface);color:var(--kt-text);font:inherit;font-size:12px;font-weight:700;cursor:pointer}.kumpul-calendar-month-actions button[data-calendar-previous],.kumpul-calendar-month-actions button[data-calendar-next]{font-size:22px;line-height:1}.kumpul-calendar-month-view{overflow:hidden;border:1px solid var(--kt-border);border-radius:17px;background:var(--kt-surface)}.kumpul-calendar-weekdays,.kumpul-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.kumpul-calendar-weekdays{border-bottom:1px solid var(--kt-border);background:#f8fbfc}.kumpul-calendar-weekdays span{padding:10px 6px;color:var(--kt-muted);font-size:10px;font-weight:750;text-align:center}.kumpul-calendar-day{position:relative;min-width:0;min-height:77px;padding:9px;display:flex;align-items:flex-start;justify-content:space-between;gap:4px;border:0;border-right:1px solid #e8f0f2;border-bottom:1px solid #e8f0f2;background:var(--kt-surface);color:var(--kt-text);font:inherit;text-align:left;cursor:pointer}.kumpul-calendar-day:nth-child(7n){border-right:0}.kumpul-calendar-day:nth-last-child(-n+7){border-bottom:0}.kumpul-calendar-day:hover{background:#f4fafb}.kumpul-calendar-day[aria-pressed=true]{background:#e6f4f6;box-shadow:inset 0 0 0 2px var(--kt-accent)}.kumpul-calendar-day[data-outside-month=true]{color:#a7b3bd;background:#fbfcfd}.kumpul-calendar-day>span{font-size:11px;font-weight:700}.kumpul-calendar-day small{min-width:19px;height:19px;padding:2px 5px;display:grid;place-items:center;border-radius:999px;background:var(--kt-accent);color:#fff;font-size:9px;font-weight:800}.kumpul-calendar-day:focus-visible,.kumpul-calendar-month-actions button:focus-visible{position:relative;z-index:1;outline:3px solid var(--kt-success);outline-offset:-3px}.kumpul-calendar-agenda{margin-top:24px}.kumpul-calendar-agenda>h3{margin:0 0 12px;font-size:16px;text-transform:capitalize}.kumpul-calendar-event{padding:14px 16px;display:grid;grid-template-columns:76px 1fr;align-items:start;gap:14px;border:1px solid var(--kt-border);border-left:4px solid var(--kt-accent);border-radius:14px;background:var(--kt-surface)}.kumpul-calendar-event[hidden]{display:none}.kumpul-calendar-event-linked{position:relative;transition:border-color .15s,box-shadow .15s}.kumpul-calendar-event-linked:hover,.kumpul-calendar-event-linked:focus-within{border-color:var(--kt-accent);box-shadow:0 8px 22px rgba(15,23,42,.06)}.kumpul-calendar-event-link{color:inherit;text-decoration:none;outline:none}.kumpul-calendar-event-link::after{content:'';position:absolute;inset:0;border-radius:inherit}.kumpul-calendar-event-invitation{border-left-color:var(--kt-success)}.kumpul-calendar-event-time{padding-top:2px;color:var(--kt-accent);font-size:11px;font-weight:800}.kumpul-calendar-event-copy{min-width:0}.kumpul-calendar-event-kind{color:var(--kt-muted);font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kumpul-calendar-event-copy h4{margin:3px 0 0;font-size:13px}.kumpul-calendar-event-copy p{margin:4px 0 0;color:var(--kt-muted);font-size:10px}
2508
2927
  @media(max-width:620px){.kumpul-calendar-month-toolbar{padding:13px;align-items:flex-start}.kumpul-calendar-month-title h2{font-size:17px}.kumpul-calendar-month-title p{max-width:170px;font-size:9px}.kumpul-calendar-month-actions{gap:4px}.kumpul-calendar-month-actions button{min-width:33px;height:34px;padding:5px 8px;font-size:10px}.kumpul-calendar-weekdays span{padding:8px 2px;font-size:9px}.kumpul-calendar-day{min-height:55px;padding:6px 5px}.kumpul-calendar-day>span{font-size:10px}.kumpul-calendar-day small{min-width:16px;height:16px;padding:1px 4px;font-size:8px}.kumpul-calendar-event{grid-template-columns:52px 1fr;gap:9px;padding:12px}.kumpul-calendar-event-time{font-size:10px}}
2509
2928
  @media(max-width:620px){.kumpul-calendar-tabs{overflow-x:auto}.kumpul-calendar-tabs button{flex:none;white-space:nowrap}}
2510
2929
  .kumpul-template{--kt-bg:${colors.background};--kt-surface:${colors.surface};--kt-text:${colors.text};--kt-muted:${colors.textMuted};--kt-accent:${colors.accent};--kt-hover:${colors.accentHover};--kt-border:${colors.border};--kt-success:${colors.success};--kt-warning:${colors.warning};min-height:100vh;background:var(--kt-bg);color:var(--kt-text);font:400 15px/1.55 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
@@ -2542,7 +2961,7 @@ function styles(colors) {
2542
2961
  .kumpul-footer{padding:26px 28px;display:flex;justify-content:space-between;gap:14px;border-top:1px solid var(--kt-border);color:var(--kt-muted);font-size:11px}.kumpul-footer strong{color:var(--kt-text)}.kumpul-mobile-dock{display:none}
2543
2962
  .kumpul-detail-page{max-width:980px;margin:0 auto}.kumpul-detail-back{display:inline-block;margin-bottom:20px;color:var(--kt-accent);font-size:11px;font-weight:750}.kumpul-detail-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.kumpul-detail-heading h1{margin:0;color:var(--kt-text);font-size:clamp(28px,4vw,40px);line-height:1.15;letter-spacing:-.04em}.kumpul-detail-heading .kumpul-eyebrow{margin-bottom:8px}.kumpul-detail-heading>div>p:last-child{margin:8px 0 0;color:var(--kt-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.kumpul-detail-preview-note{margin:18px 0 0;padding:11px 14px;border:1px solid var(--kt-border);border-radius:12px;background:var(--kt-surface);color:var(--kt-muted);font-size:10px}.kumpul-detail-layout{margin-top:22px;display:grid;grid-template-columns:minmax(0,1fr) 310px;align-items:start;gap:18px}.kumpul-detail-main{display:grid;gap:14px}.kumpul-detail-card{min-width:0;padding:20px;border:1px solid var(--kt-border);border-radius:17px;background:var(--kt-surface)}.kumpul-detail-card h2{margin:0 0 16px;font-size:14px}.kumpul-detail-fields{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.kumpul-detail-fields>div{min-width:0}.kumpul-detail-fields dt,.kumpul-detail-totals dt{color:var(--kt-muted);font-size:9px}.kumpul-detail-fields dd,.kumpul-detail-totals dd{margin:4px 0 0;font-size:11px;font-weight:700;overflow-wrap:anywhere}.kumpul-detail-total{margin-top:20px;padding-top:16px;display:flex;align-items:baseline;justify-content:space-between;gap:12px;border-top:1px solid var(--kt-border);color:var(--kt-muted);font-size:11px}.kumpul-detail-total strong{color:var(--kt-accent);font-size:22px}.kumpul-detail-aside{position:sticky;top:20px}.kumpul-detail-aside>p{margin:13px 0 0;color:var(--kt-muted);font-size:10px;line-height:1.6}.kumpul-detail-aside>button{width:100%;min-height:42px;margin-top:16px;padding:10px;border:0;border-radius:11px;background:var(--kt-accent);color:#fff;font:inherit;font-size:11px;font-weight:800;opacity:.55;cursor:not-allowed}.kumpul-detail-login-info{margin-top:15px;padding:13px;border-left:3px solid var(--kt-accent);background:var(--kt-bg)}.kumpul-detail-login-info h3{margin:0;font-size:11px}.kumpul-detail-login-info p{margin:7px 0 0;color:var(--kt-muted);font-size:10px;line-height:1.6}.kumpul-detail-items{display:grid}.kumpul-detail-item{padding:13px 0;display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:12px;border-top:1px solid var(--kt-border)}.kumpul-detail-item-art{width:48px;height:48px;display:grid;place-items:center;border:1px solid var(--kt-border);border-radius:13px;background:var(--kt-bg);color:var(--kt-accent);font-size:20px;font-weight:800}.kumpul-detail-item-copy{min-width:0}.kumpul-detail-item h3{margin:0;font-size:11px}.kumpul-detail-item p{margin:5px 0 0;color:var(--kt-muted);font-size:9px}.kumpul-detail-item>strong{font-size:10px;white-space:nowrap}.kumpul-detail-escrow-note{display:block;margin-top:5px;color:var(--kt-accent);font-size:8px;line-height:1.5}.kumpul-detail-address{margin:0;color:var(--kt-muted);font-size:11px;line-height:1.6}.kumpul-detail-totals{margin:0;display:grid;gap:12px}.kumpul-detail-totals>div{display:flex;justify-content:space-between;gap:12px}.kumpul-detail-totals dd{margin:0;text-align:right}.kumpul-detail-grand-total{padding-top:13px;border-top:1px solid var(--kt-border)}.kumpul-detail-grand-total dt{color:var(--kt-text);font-weight:800}.kumpul-detail-grand-total dd{color:var(--kt-accent);font-size:16px}.kumpul-detail-payment-fields{margin-top:17px;padding-top:14px;border-top:1px solid var(--kt-border)}.kumpul-detail-fields .kumpul-detail-mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px}.kumpul-detail-payment-note{padding:10px 12px;border:1px solid var(--kt-border);border-radius:11px;background:var(--kt-bg)}
2544
2963
  .kumpul-plan-detail{max-width:980px;margin:0 auto}.kumpul-plan-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.kumpul-plan-heading h1{margin:0;color:var(--kt-text);font-size:clamp(28px,4vw,40px);line-height:1.15;letter-spacing:-.04em}.kumpul-plan-heading .kumpul-eyebrow{margin-bottom:8px}.kumpul-plan-number{margin:9px 0 0;color:var(--kt-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px}.kumpul-plan-workflow{margin-top:20px;padding:17px;border:1px solid var(--kt-border);border-radius:16px;background:var(--kt-surface)}.kumpul-plan-current-step{margin:0 0 14px;color:var(--kt-muted);font-size:10px}.kumpul-plan-current-step strong{color:var(--kt-text)}.kumpul-plan-workflow ol{margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none}.kumpul-plan-workflow li{min-width:0;padding:12px 9px 0;display:flex;align-items:center;gap:7px;border-top:2px solid var(--kt-border);color:var(--kt-muted);font-size:9px;font-weight:700}.kumpul-plan-workflow li.is-complete,.kumpul-plan-workflow li.is-current{border-color:var(--kt-accent);color:var(--kt-text)}.kumpul-plan-step-marker{width:21px;height:21px;flex:none;display:grid;place-items:center;border:1px solid var(--kt-border);border-radius:50%;font-size:9px}.kumpul-plan-workflow li.is-complete .kumpul-plan-step-marker,.kumpul-plan-workflow li.is-current .kumpul-plan-step-marker{border-color:var(--kt-accent);background:var(--kt-accent);color:#fff}.kumpul-plan-readonly{margin:12px 0 0;color:var(--kt-muted);font-size:9px;line-height:1.5}.kumpul-plan-layout{margin-top:16px;display:grid;grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:16px}.kumpul-plan-main{display:grid;gap:14px}.kumpul-plan-options{margin:0;padding:0;display:grid;list-style:none}.kumpul-plan-options li{padding:13px 0;border-top:1px solid var(--kt-border)}.kumpul-plan-option-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.kumpul-plan-option-group{color:var(--kt-muted);font-size:8px;font-weight:750;letter-spacing:.08em;text-transform:uppercase}.kumpul-plan-option-heading h3{margin:3px 0 0;font-size:11px}.kumpul-plan-options li>p{margin:6px 0 0;color:var(--kt-muted);font-size:9px;line-height:1.5}.kumpul-plan-final-option{padding:5px 8px;border:1px solid var(--kt-accent);border-radius:99px;color:var(--kt-accent);font-size:8px;font-weight:800;white-space:nowrap}.kumpul-plan-votes{display:inline-block;margin-top:8px;color:var(--kt-accent);font-size:9px;font-weight:750}.kumpul-plan-empty-options{margin:0;color:var(--kt-muted);font-size:10px}.kumpul-plan-aside>p{margin:13px 0 0;color:var(--kt-muted);font-size:10px;line-height:1.6}.kumpul-plan-order-ref{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:8px!important}.kumpul-plan-account-link{margin-top:16px;padding:10px 12px;display:block;border:1px solid var(--kt-border);border-radius:10px;color:var(--kt-accent);font-size:10px;font-weight:800;text-align:center}
2545
- .kumpul-plan-simulator{margin-top:18px;padding:20px;border:1px solid var(--kt-border);border-radius:18px;background:var(--kt-surface);box-shadow:0 8px 26px #0f172a0a}.kumpul-plan-simulator-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.kumpul-plan-simulator-heading h2{margin:0;font-size:19px;letter-spacing:-.025em}.kumpul-plan-simulator-heading .kumpul-eyebrow{margin-bottom:7px}.kumpul-plan-simulator-heading>div>p:last-child{margin:7px 0 0;color:var(--kt-muted);font-size:10px;line-height:1.55}.kumpul-plan-simulation-badge{padding:6px 9px;flex:none;border-radius:99px;background:#e6f4f6;color:var(--kt-accent);font-size:8px;font-weight:800}.kumpul-plan-simulation-note{margin:15px 0;padding:10px 12px;border:1px solid var(--kt-border);border-radius:10px;background:var(--kt-bg);color:var(--kt-muted);font-size:9px;line-height:1.55}.kumpul-plan-sim-steps{margin:17px 0 0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none}.kumpul-plan-sim-steps li{min-width:0;border-top:2px solid var(--kt-border)}.kumpul-plan-sim-steps li.is-current,.kumpul-plan-sim-steps li.is-complete{border-color:var(--kt-accent)}.kumpul-plan-sim-steps button{width:100%;padding:10px 5px 4px;display:flex;align-items:center;gap:6px;border:0;background:none;color:var(--kt-muted);font:inherit;font-size:8px;font-weight:750;text-align:left}.kumpul-plan-sim-steps li.is-current button,.kumpul-plan-sim-steps li.is-complete button{color:var(--kt-text)}.kumpul-plan-sim-steps button:disabled{cursor:not-allowed;opacity:.65}.kumpul-plan-sim-steps button:not(:disabled){cursor:pointer}.kumpul-plan-sim-steps button>span:first-child{width:20px;height:20px;flex:none;display:grid;place-items:center;border:1px solid var(--kt-border);border-radius:50%;font-size:8px}.kumpul-plan-sim-steps li.is-current button>span:first-child,.kumpul-plan-sim-steps li.is-complete button>span:first-child{border-color:var(--kt-accent);background:var(--kt-accent);color:#fff}.kumpul-plan-sim-panel{margin-top:17px}.kumpul-plan-sim-panel[hidden],.kumpul-plan-sim-complete[hidden]{display:none}.kumpul-plan-sim-panel h3,.kumpul-plan-sim-complete h3{margin:0;font-size:15px}.kumpul-plan-sim-help{margin:6px 0 14px;color:var(--kt-muted);font-size:9px;line-height:1.5}.kumpul-plan-sim-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.kumpul-plan-sim-form label,.kumpul-plan-sim-invite-form label,.kumpul-plan-sim-person>label{min-width:0;display:grid;gap:5px;color:var(--kt-muted);font-size:9px;font-weight:700}.kumpul-plan-sim-form input,.kumpul-plan-sim-form select,.kumpul-plan-sim-invite-form input,.kumpul-plan-sim-invitees input,.kumpul-plan-sim-person select{width:100%;min-width:0;min-height:37px;padding:8px 9px;border:1px solid var(--kt-border);border-radius:9px;background:#fff;color:var(--kt-text);font:inherit;font-size:10px}.kumpul-plan-sim-options{min-width:0;margin:15px 0 0;padding:11px;border:1px solid var(--kt-border);border-radius:11px}.kumpul-plan-sim-options legend{padding:0 5px;color:var(--kt-text);font-size:10px;font-weight:800}.kumpul-plan-sim-option{margin:5px 10px 5px 0;display:inline-flex;align-items:center;gap:6px;color:var(--kt-muted);font-size:9px}.kumpul-plan-sim-option input{accent-color:var(--kt-accent)}.kumpul-plan-sim-actions{margin-top:15px;display:flex;justify-content:flex-end;gap:8px}.kumpul-plan-sim-actions button,.kumpul-plan-sim-invite-form button,.kumpul-plan-sim-invitees button,.kumpul-plan-sim-payment button,.kumpul-plan-sim-complete button{min-height:36px;padding:8px 12px;border:1px solid var(--kt-border);border-radius:9px;background:#fff;color:var(--kt-text);font:inherit;font-size:9px;font-weight:800;cursor:pointer}.kumpul-plan-sim-actions .kumpul-plan-sim-primary{border-color:var(--kt-accent);background:var(--kt-accent);color:#fff}.kumpul-plan-sim-actions .kumpul-plan-sim-secondary{color:var(--kt-accent)}.kumpul-plan-sim-error{margin:12px 0 0;color:#b91c1c;font-size:9px;font-weight:700}.kumpul-plan-sim-invite-form{display:grid;grid-template-columns:1fr 1fr auto;align-items:end;gap:9px}.kumpul-plan-sim-invitees{margin:12px 0 0;padding:0;display:grid;gap:7px;list-style:none}.kumpul-plan-sim-invitees li{display:flex;align-items:center;gap:8px}.kumpul-plan-sim-invitees li>div{flex:1;display:grid;grid-template-columns:1fr 1fr;gap:8px}.kumpul-plan-sim-invitees button,.kumpul-plan-sim-payment button{min-height:33px;padding:7px 9px;color:var(--kt-accent)}.kumpul-plan-sim-participants,.kumpul-plan-sim-payments{display:grid;gap:9px}.kumpul-plan-sim-person{padding:12px;display:grid;grid-template-columns:minmax(0,1fr) 170px;align-items:center;gap:11px;border:1px solid var(--kt-border);border-radius:12px;background:var(--kt-bg)}.kumpul-plan-sim-person-heading{min-width:0;display:grid;gap:3px}.kumpul-plan-sim-person-heading strong{font-size:10px}.kumpul-plan-sim-person-heading span{overflow-wrap:anywhere;color:var(--kt-muted);font-size:8px}.kumpul-plan-sim-person-options{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.kumpul-plan-sim-payment{grid-template-columns:minmax(0,1fr) auto}.kumpul-plan-sim-payment[data-sim-paid=true]{border-color:var(--kt-success);background:#effaf5}.kumpul-plan-sim-final-group{margin:7px 0 0;padding:8px;border:1px solid var(--kt-border);border-radius:9px}.kumpul-plan-sim-final-group legend{padding:0 4px;font-size:9px;font-weight:800}.kumpul-plan-sim-final-group label{margin:5px 10px 5px 0;display:inline-flex;align-items:center;gap:6px;color:var(--kt-muted);font-size:9px}.kumpul-plan-sim-final-group input{accent-color:var(--kt-accent)}.kumpul-plan-sim-complete{margin-top:18px;padding:22px;border:1px solid #8bd1ae;border-radius:13px;background:#effaf5;text-align:center}.kumpul-plan-sim-complete>span{width:34px;height:34px;margin:0 auto 9px;display:grid;place-items:center;border-radius:50%;background:var(--kt-success);color:#fff;font-weight:900}.kumpul-plan-sim-complete p{margin:7px 0 13px;color:var(--kt-muted);font-size:9px;line-height:1.5}
2964
+ .kumpul-plan-simulator{margin-top:18px;padding:20px;border:1px solid var(--kt-border);border-radius:18px;background:var(--kt-surface);box-shadow:0 8px 26px #0f172a0a}.kumpul-plan-simulator-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.kumpul-plan-simulator-heading h2{margin:0;font-size:19px;letter-spacing:-.025em}.kumpul-plan-simulator-heading .kumpul-eyebrow{margin-bottom:7px}.kumpul-plan-simulator-heading>div>p:last-child{margin:7px 0 0;color:var(--kt-muted);font-size:10px;line-height:1.55}.kumpul-plan-simulation-badge{padding:6px 9px;flex:none;border-radius:99px;background:#e6f4f6;color:var(--kt-accent);font-size:8px;font-weight:800}.kumpul-plan-simulation-note{margin:15px 0;padding:10px 12px;border:1px solid var(--kt-border);border-radius:10px;background:var(--kt-bg);color:var(--kt-muted);font-size:9px;line-height:1.55}.kumpul-plan-sim-steps{margin:17px 0 0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none}.kumpul-plan-sim-steps li{min-width:0;border-top:2px solid var(--kt-border)}.kumpul-plan-sim-steps li.is-current,.kumpul-plan-sim-steps li.is-complete{border-color:var(--kt-accent)}.kumpul-plan-sim-steps button{width:100%;padding:10px 5px 4px;display:flex;align-items:center;gap:6px;border:0;background:none;color:var(--kt-muted);font:inherit;font-size:8px;font-weight:750;text-align:left}.kumpul-plan-sim-steps li.is-current button,.kumpul-plan-sim-steps li.is-complete button{color:var(--kt-text)}.kumpul-plan-sim-steps button:disabled{cursor:not-allowed;opacity:.65}.kumpul-plan-sim-steps button:not(:disabled){cursor:pointer}.kumpul-plan-sim-steps button>span:first-child{width:20px;height:20px;flex:none;display:grid;place-items:center;border:1px solid var(--kt-border);border-radius:50%;font-size:8px}.kumpul-plan-sim-steps li.is-current button>span:first-child,.kumpul-plan-sim-steps li.is-complete button>span:first-child{border-color:var(--kt-accent);background:var(--kt-accent);color:#fff}.kumpul-plan-sim-panel{margin-top:17px}.kumpul-plan-sim-panel[hidden],.kumpul-plan-sim-complete[hidden]{display:none}.kumpul-plan-sim-panel h3,.kumpul-plan-sim-complete h3{margin:0;font-size:15px}.kumpul-plan-sim-help{margin:6px 0 14px;color:var(--kt-muted);font-size:9px;line-height:1.5}.kumpul-plan-sim-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.kumpul-plan-sim-form label,.kumpul-plan-sim-invite-form label,.kumpul-plan-sim-person>label{min-width:0;display:grid;gap:5px;color:var(--kt-muted);font-size:9px;font-weight:700}.kumpul-plan-sim-form input,.kumpul-plan-sim-form select,.kumpul-plan-sim-invite-form input,.kumpul-plan-sim-invitees input,.kumpul-plan-sim-person select{width:100%;min-width:0;min-height:37px;padding:8px 9px;border:1px solid var(--kt-border);border-radius:9px;background:#fff;color:var(--kt-text);font:inherit;font-size:10px}.kumpul-plan-sim-options{min-width:0;margin:15px 0 0;padding:11px;border:1px solid var(--kt-border);border-radius:11px}.kumpul-plan-sim-options legend{padding:0 5px;color:var(--kt-text);font-size:10px;font-weight:800}.kumpul-plan-sim-option{margin:5px 10px 5px 0;display:inline-flex;align-items:center;gap:6px;color:var(--kt-muted);font-size:9px}.kumpul-plan-sim-option input{accent-color:var(--kt-accent)}.kumpul-plan-sim-actions{margin-top:15px;display:flex;justify-content:flex-end;gap:8px}.kumpul-plan-sim-actions button,.kumpul-plan-sim-invite-form button,.kumpul-plan-sim-invitees button,.kumpul-plan-sim-payment button,.kumpul-plan-sim-complete button{min-height:36px;padding:8px 12px;border:1px solid var(--kt-border);border-radius:9px;background:#fff;color:var(--kt-text);font:inherit;font-size:9px;font-weight:800;cursor:pointer}.kumpul-plan-sim-actions .kumpul-plan-sim-primary{border-color:var(--kt-accent);background:var(--kt-accent);color:#fff}.kumpul-plan-sim-actions .kumpul-plan-sim-secondary{color:var(--kt-accent)}.kumpul-plan-sim-error{margin:12px 0 0;color:#b91c1c;font-size:9px;font-weight:700}.kumpul-plan-sim-invite-form{display:grid;grid-template-columns:1fr 1fr auto;align-items:end;gap:9px}.kumpul-plan-sim-invitees{margin:12px 0 0;padding:0;display:grid;gap:7px;list-style:none}.kumpul-plan-sim-invitees li{display:flex;align-items:center;gap:8px}.kumpul-plan-sim-invitees li>div{flex:1;display:grid;grid-template-columns:1fr 1fr;gap:8px}.kumpul-plan-sim-invitees button,.kumpul-plan-sim-payment button{min-height:33px;padding:7px 9px;color:var(--kt-accent)}.kumpul-plan-sim-participants,.kumpul-plan-sim-payments{display:grid;gap:9px}.kumpul-plan-sim-person{padding:12px;display:grid;grid-template-columns:minmax(0,1fr) 170px;align-items:center;gap:11px;border:1px solid var(--kt-border);border-radius:12px;background:var(--kt-bg)}.kumpul-plan-sim-person-heading{min-width:0;display:grid;gap:3px}.kumpul-plan-sim-person-heading strong{font-size:10px}.kumpul-plan-sim-person-heading span{overflow-wrap:anywhere;color:var(--kt-muted);font-size:8px}.kumpul-plan-sim-person-options{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.kumpul-plan-sim-payment{grid-template-columns:minmax(0,1fr) auto}.kumpul-plan-sim-payment[data-sim-paid=true]{border-color:var(--kt-success);background:#effaf5}.kumpul-plan-sim-final-group{margin:7px 0 0;padding:8px;border:1px solid var(--kt-border);border-radius:9px}.kumpul-plan-sim-final-group legend{padding:0 4px;font-size:9px;font-weight:800}.kumpul-plan-sim-final-group label{margin:5px 10px 5px 0;display:inline-flex;align-items:center;gap:6px;color:var(--kt-muted);font-size:9px}.kumpul-plan-sim-final-group input{accent-color:var(--kt-accent)}.kumpul-plan-sim-complete{margin-top:18px;padding:22px;border:1px solid #8bd1ae;border-radius:13px;background:#effaf5;text-align:center}.kumpul-plan-sim-complete>span{width:34px;height:34px;margin:0 auto 9px;display:grid;place-items:center;border-radius:50%;background:var(--kt-success);color:#fff;font-weight:900}.kumpul-plan-sim-complete p{margin:7px 0 13px;color:var(--kt-muted);font-size:9px;line-height:1.5}.kumpul-plan-live .kumpul-plan-sim-steps{position:sticky;top:var(--kumpul-header-height,0px);z-index:8;padding-top:10px;background:var(--kt-surface)}.kumpul-plan-live-dates{margin-top:11px;grid-template-columns:repeat(3,minmax(0,1fr))}.kumpul-plan-live .kumpul-plan-sim-option{width:100%;margin:7px 0;display:flex;align-items:flex-start}.kumpul-plan-live .kumpul-plan-sim-option>span{display:grid;gap:3px}.kumpul-plan-live .kumpul-plan-sim-option small{color:var(--kt-muted);font-size:8px;line-height:1.45}.kumpul-plan-live .kumpul-plan-sim-invite-form{margin-bottom:12px;grid-template-columns:repeat(3,minmax(0,1fr)) auto}.kumpul-plan-live-readonly{margin:6px 0 12px;padding:8px 10px;border-radius:9px;background:var(--kt-bg);color:var(--kt-muted);font-size:9px}.kumpul-plan-live-people{margin:12px 0 0;padding:0;display:grid;gap:8px;list-style:none}.kumpul-plan-live-people .kumpul-plan-sim-person{grid-template-columns:minmax(0,1fr) auto}.kumpul-plan-live-person-name{display:flex;align-items:center;gap:8px}.kumpul-plan-live-person-name input{accent-color:var(--kt-accent)}.kumpul-plan-live-row-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px;font-size:9px;font-weight:800}.kumpul-plan-live-row-actions a{color:var(--kt-accent)}.kumpul-plan-live-row-actions button{min-height:32px;padding:6px 10px;border:1px solid var(--kt-border);border-radius:9px;background:#fff;color:var(--kt-accent);font:inherit;cursor:pointer}.kumpul-plan-live-public{margin:0 0 12px;padding:10px 12px;border:1px dashed var(--kt-accent);border-radius:11px;color:var(--kt-muted);font-size:9px}.kumpul-plan-live-public a{color:var(--kt-accent);font-weight:800}.kumpul-plan-live-operation{margin:12px 0 0;padding:10px 12px;border-radius:10px;background:#e6f4f6;color:var(--kt-text);font-size:9px}.kumpul-plan-live-operation.is-failed{background:#fdecec;color:#b91c1c}.kumpul-plan-live-reason{margin-top:12px;display:grid;gap:5px;color:var(--kt-muted);font-size:9px;font-weight:700}.kumpul-plan-live-reason textarea,.kumpul-plan-live-cancel input{width:100%;padding:8px 9px;border:1px solid var(--kt-border);border-radius:9px;font:inherit;font-size:10px}.kumpul-plan-live .kumpul-plan-sim-final-group{display:grid;gap:4px}.kumpul-plan-live .kumpul-plan-sim-final-group p{margin:0;color:var(--kt-muted);font-size:9px}.kumpul-plan-live-cancel{margin-top:18px;padding-top:12px;border-top:1px solid var(--kt-border);font-size:10px}.kumpul-plan-live-cancel summary{color:#b91c1c;font-weight:800;cursor:pointer}.kumpul-plan-live-cancel label{margin:10px 0;display:grid;gap:5px;color:var(--kt-muted);font-size:9px;font-weight:700}.kumpul-plan-live-danger{min-height:36px;padding:8px 12px;border:0;border-radius:9px;background:#b91c1c;color:#fff;font:inherit;font-size:9px;font-weight:800;cursor:pointer}.kumpul-plan-live button:disabled{cursor:not-allowed;opacity:.55}@media(max-width:760px){.kumpul-plan-live-dates,.kumpul-plan-live .kumpul-plan-sim-invite-form,.kumpul-plan-live-people .kumpul-plan-sim-person{grid-template-columns:1fr}.kumpul-plan-live-row-actions{justify-content:flex-start}}
2546
2965
  @media(max-width:760px){.kumpul-plan-heading{flex-direction:column;gap:12px}.kumpul-plan-workflow{padding:14px}.kumpul-plan-workflow ol{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.kumpul-plan-workflow li{padding:9px 5px 0;font-size:8px}.kumpul-plan-layout{grid-template-columns:1fr;gap:13px}.kumpul-plan-aside{position:static}.kumpul-plan-simulator{padding:15px}.kumpul-plan-simulator-heading{flex-direction:column;gap:10px}.kumpul-plan-sim-form{grid-template-columns:1fr}.kumpul-plan-sim-invite-form{grid-template-columns:1fr}.kumpul-plan-sim-invite-form button{width:100%}.kumpul-plan-sim-invitees li{align-items:flex-start;flex-direction:column}.kumpul-plan-sim-invitees li>div{width:100%;grid-template-columns:1fr}.kumpul-plan-sim-invitees button{align-self:flex-end}.kumpul-plan-sim-person{grid-template-columns:1fr}.kumpul-plan-sim-person-options{grid-template-columns:1fr}.kumpul-plan-sim-payment{grid-template-columns:1fr}.kumpul-plan-sim-payment button{width:100%}.kumpul-plan-sim-steps button{align-items:flex-start;flex-direction:column;font-size:7px}.kumpul-plan-sim-actions{flex-wrap:wrap}.kumpul-plan-sim-actions button{flex:1}}
2547
2966
  @media(max-width:760px){.kumpul-detail-heading{align-items:flex-start;flex-direction:column}.kumpul-detail-layout{grid-template-columns:1fr;gap:13px}.kumpul-detail-aside{position:static}.kumpul-detail-card{padding:16px}.kumpul-detail-fields{gap:13px}.kumpul-detail-total strong{font-size:19px}.kumpul-detail-item{grid-template-columns:40px minmax(0,1fr);gap:10px}.kumpul-detail-item-art{width:40px;height:40px}.kumpul-detail-item>strong{grid-column:2}.kumpul-detail-page .kumpul-detail-preview-note{font-size:9px}}
2548
2967
  .kumpul-transaction-actions .kumpul-transaction-action-link{display:inline-flex;min-height:34px;align-items:center;justify-content:center;padding:7px 11px;border:1px solid var(--kt-border);border-radius:10px;background:var(--kt-surface);color:var(--kt-text);font-size:9px;font-weight:750;text-decoration:none}
package/manifest.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "manifestVersion": 1,
3
3
  "slug": "kumpul",
4
4
  "name": "Kumpul",
5
- "version": "1.1.0",
5
+ "version": "1.2.0",
6
6
  "rendererApiVersion": 1,
7
7
  "businessProfiles": [
8
8
  "gathering"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bagdja/kumpul",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Kumpul website template for Bagdja",
5
5
  "license": "UNLICENSED",
6
6
  "type": "commonjs",