{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/dsd-launch-social-activation-p11dz684.js?dsd_cutover=p11dz686-overlay-message-compact-1784236800"],
  "sourcesContent": ["/*\n * DSD Launch Social Activation p11dz401\n * Shopify customer accounts remain the account authority. Supabase metadata\n * paths are preferred when the signed bridge is available; Firebase stays as\n * rollback for unsupported surfaces and public logged-out fallback.\n */\n(function(){\n  'use strict';\n  var VERSION = 'p11dz686-g22-route-asset-owner-lock-1784451900';\n  var BUILD = 'p11dz686-g22-route-asset-owner-lock-1784451900';\n  var PROFILE_ROUTE_CACHE_REV = 'p11dz686-g22-route-asset-owner-lock-1784451900';\n  var STALE_ROUTE_STAMPS = [\n    'p11dz686-public-egress-runtime-lock-1784361600',\n    'p11dz686-renderer-ownership-polish-1784184000',\n    'p11dz684-video-private-wasabi-url-purge-1783698000',\n    'p11dz684-launch-held-inline-messages-1783698000'\n  ];\n  function hasStaleRouteStamp(value){\n    value = String(value || '');\n    return STALE_ROUTE_STAMPS.some(function(stamp){ return value.indexOf(stamp) !== -1; }) || value.indexOf('public-egress-runtime-lock') !== -1;\n  }\n  function replaceStaleRouteStamp(value){\n    value = String(value || '');\n    STALE_ROUTE_STAMPS.forEach(function(stamp){ value = value.split(stamp).join(BUILD); });\n    return value.replace(/p11dz686-public-egress-runtime-lock-\\d+/g, BUILD).replace(/public-egress-runtime-lock/g, BUILD);\n  }\n  function normalizeRouteStampDom(){\n    try {\n      document.querySelectorAll('a[href]').forEach(function(anchor){\n        var href = anchor.getAttribute('href') || '';\n        if (!hasStaleRouteStamp(href)) return;\n        anchor.setAttribute('href', replaceStaleRouteStamp(href));\n      });\n      [\n        'data-dsd-cutover-cache-stamp',\n        'data-dsd-route-cache-revision',\n        'data-dsd-route-cache-stamp',\n        'data-dsd-version',\n        'data-dsd-section-cache-marker',\n        'data-dsd-template-cache-bust'\n      ].forEach(function(attr){\n        document.querySelectorAll('[' + attr + ']').forEach(function(node){\n          var value = node.getAttribute(attr);\n          if (hasStaleRouteStamp(value)) node.setAttribute(attr, replaceStaleRouteStamp(value));\n        });\n      });\n      document.querySelectorAll('script[src*=\"dsd_cutover=\"]').forEach(function(script){\n        var src = script.getAttribute('src') || script.src || '';\n        if (!hasStaleRouteStamp(src)) return;\n        script.setAttribute('src', replaceStaleRouteStamp(src));\n        script.setAttribute('data-dsd-route-stamp-rebound', BUILD);\n      });\n    } catch(e) {}\n  }\n  normalizeRouteStampDom();\n  if (!window.__DSDRouteStampNormalizerP11DZ686) {\n    window.__DSDRouteStampNormalizerP11DZ686 = true;\n    var routeStampPasses = 0;\n    var routeStampTimer = window.setInterval(function(){\n      normalizeRouteStampDom();\n      routeStampPasses += 1;\n      if (routeStampPasses >= 40) window.clearInterval(routeStampTimer);\n    }, 500);\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', normalizeRouteStampDom, { once: true });\n    else window.setTimeout(normalizeRouteStampDom, 0);\n  }\n  if (window.DSDLaunchSocial && window.DSDLaunchSocial.version === VERSION && window.DSDLaunchSocial.build === BUILD) return;\n  var OWNER = 'LaunchSocialActivation';\n  var PUBLIC_PROFILE_SEEDS = [];\n  var GHOST_PURGE_VERSION = 'p11dz679';\n  var DRAFT_QUEUE_KEY = 'dsd.launch.draftQueue.v2';\n  var DELETED_POSTS_KEY = 'dsd.launch.deletedPosts.v1';\n  var POST_STATE_OVERRIDES_KEY = 'dsd.launch.postStateOverrides.v1';\n  var COMMENT_STATE_OVERRIDES_KEY = 'dsd.launch.commentStateOverrides.v1';\n  var SAVED_STATE_OVERRIDES_KEY = 'dsd.launch.savedStateOverrides.v1';\n  var VIEW_COUNTER_MAX_KEY = 'dsd.launch.viewCounterMax.v1';\n  var VIDEO_MANUAL_PAUSED_KEY = 'dsd.launch.videoManualPaused.v1';\n  var SUPABASE_PRIVATE_PROFILE_BASE_SELECT = 'user_id,profile_key,handle,display_name,bio,birthdate,age_verified,adult_content_enabled,visibility,content_rating,access_gate,moderation_state,account_state,searchable,setup_complete,avatar_media_id,banner_media_id,avatar_wasabi_object_key,banner_wasabi_object_key,updated_at';\n  var SUPABASE_PRIVATE_PROFILE_OPTIONAL_SELECT = 'profile_key,location,location_city,location_state,banner_position';\n  var SUPABASE_PRIVATE_PROFILE_SELECT = SUPABASE_PRIVATE_PROFILE_BASE_SELECT;\n  var SUPABASE_PUBLIC_PROFILE_SELECT = 'user_id,profile_key,handle,display_name,bio,avatar_media_id,banner_media_id,searchable,status,moderation_state,updated_at';\n  var LOGIN_RETURN_URL = '/account/login?return_url=%2Fpages%2Fuser-profile';\n  var REGISTER_RETURN_URL = '/account/register?return_url=%2Fpages%2Fuser-profile';\n  var LOCAL_POST_OVERRIDE_TTL_MS = 30 * 60 * 1000;\n  var MAX = { body: 5000, comment: 1200, message: 2000, story: 900 };\n  var READ_QUARANTINED_MEDIA_IDS = {\n    '7c83d9ae-cac5-46ca-b545-4e5571c10f94': 'non-ascii-wasabi-object-key',\n    'b69d3fa4-53a5-4416-a31b-414964e65d1c': 'wasabi-sign-read-500-public-profile',\n    '5640c624-1b92-4108-87b5-433fe74f3750': 'wasabi-read-503-public-video-quarantined',\n    '2dc431a3-e787-4efc-badd-3f5555c3b43e': 'wasabi-read-503-zero-byte-public-post-media',\n    'cd7f7b7e-0a35-42bd-a5a5-651ce1fbe608': 'wasabi-read-503-zero-byte-public-post-media'\n  };\n  var RETIRED_LAUNCH_TEST_CONTENT_IDS = {\n    'post-1783691650833-agzw': true,\n    'post-1783552172162-rooe': true,\n    'post-1783406386083-55hi': true,\n    'post-1783404694759-h9rx': true,\n    'post-1782938473320-zc6o': true,\n    'post-1784282987061-lx7i': true\n  };\n  var storyAdvanceTimer = null;\n  var renderPostsBusy = false;\n  var renderPostsQueued = false;\n  var renderPostsTimer = null;\n  var PATHS = {\n    profile: 'profiles/{uid}',\n    user: 'users/{uid}',\n    gatedPostShell: 'gatedPostShells/{postId}',\n    gatedStoryShell: 'gatedStoryShells/{storyId}',\n    profilePublic: 'publicProfiles/{profileKey}',\n    post: 'posts/{postId}',\n    postComment: 'posts/{postId}/comments/{commentId}',\n    reaction: 'posts/{postId}/reactions/{uid}',\n    postShare: 'posts/{postId}/shares/{uid}',\n    following: 'relationships/{uid}/following/{targetUid}',\n    followers: 'relationships/{uid}/followers/{sourceUid}',\n    saved: 'saves/{uid}/items/{targetId}',\n    favorites: 'favorites/{uid}/items/{targetUid}',\n    notification: 'notifications/{recipientUid}/items/{notificationId}',\n    conversation: 'conversations/{conversationId}',\n    message: 'conversations/{conversationId}/messages/{messageId}',\n    story: 'stories/{storyId}',\n    userStory: 'userStories/{uid}/items/{storyId}',\n    moderationQueue: 'moderationQueue/{queueItemId}',\n    safetyReport: 'safetyReports/{reportId}',\n    founderAudit: 'founderAudit/{auditId}',\n    mediaManifest: 'mediaManifests/{mediaId}'\n  };\n  var state = {\n    ready: false,\n    bridgeReady: false,\n    bridgeChecked: false,\n    bridgeAttempting: false,\n    firebaseUser: null,\n    profile: null,\n    viewProfile: null,\n    viewProfileResolvedKey: '',\n    profileExists: false,\n    publicProfiles: [],\n    publicProfilesLoaded: false,\n    posts: [],\n    gatedPostShells: [],\n    gatedStoryShells: [],\n    notifications: [],\n    conversations: [],\n    messagesByConversation: {},\n    messageListeners: {},\n    activeConversationId: '',\n    messageScrollPinNext: '',\n    stories: [],\n    activeStoryId: '',\n    lastRequestedStoryId: '',\n    lastRequestedCommentId: '',\n    storyScope: 'discovery',\n    storyScopeUserSelected: false,\n    reactionsByPost: {},\n    commentsByPost: {},\n    commentListeners: {},\n    openCommentPostIds: {},\n    postDrawer: { open: false, mode: '', postId: '', returnFocus: null },\n    commentOneShotLoads: {},\n    localDeletedPostIds: {},\n    localPostStateOverrides: {},\n    localCommentStateOverrides: {},\n    localSavedStateOverrides: {},\n    followingByUid: {},\n    followRequestByUid: {},\n    blockedByUid: {},\n    blockedMeByUid: {},\n    favoritesByUid: {},\n    followersRecords: [],\n    followingRecords: [],\n    blockedRecords: [],\n    incomingFollowRequests: [],\n    favoritesRecords: [],\n    savedItems: [],\n    viewedRelationshipKey: '',\n    viewedRelationshipListeners: [],\n    viewedFollowersRecords: [],\n    viewedFollowingRecords: [],\n    viewedFavoritesRecords: [],\n    viewedSavedItems: [],\n    discoveryStatsByKey: {},\n    discoveryStatsPendingByKey: {},\n    postViewClaims: {},\n    feedFilter: 'all',\n    followingFilter: 'following',\n    notificationCounts: { total: 0, unread: 0, founder: 0 },\n    mediaReadCache: {},\n    videoMutedPreference: (function(){ try { var saved = localStorage.getItem('dsd.video.muted.v1'); return saved ? saved !== 'false' : true; } catch(e){ return true; } })(),\n    videoManualPausedByMediaId: manualVideoPausedMap(),\n    activePlayingVideos: 0,\n    queue: [],\n    listeners: [],\n    storyWatchClaims: {},\n    storyWatcherListeners: {},\n    launchAutoPublishClaims: {},\n    authorAvatarBackfills: {},\n    orphanMediaParentRepairRunning: false,\n    orphanMediaParentRepairCompleteFor: '',\n    feedDiagnostics: { renders: 0, scheduled: 0, commentListeners: 0, commentLoads: 0, commentLoadResults: 0, commentLoadErrors: 0, lastCommentLoad: '', mediaHydrationRequests: 0 },\n    membership: { active: false, tier: '', source: 'shopify-conjured' },\n    supabaseEntitlement: null,\n    sessionProfileKey: '',\n    hydratedRuntimePromise: null,\n    listenerSignature: ''\n  };\n\n  function qs(sel, root){ try { return (root || document).querySelector(sel); } catch(e){ return null; } }\n  function qsa(sel, root){ try { return Array.prototype.slice.call((root || document).querySelectorAll(sel)); } catch(e){ return []; } }\n  function now(){ return new Date().toISOString(); }\n  function formatDateTime(value){\n    if (!value) return '';\n    var date = null;\n    try {\n      if (value && typeof value.toDate === 'function') date = value.toDate();\n      else if (value && typeof value.seconds === 'number') date = new Date(value.seconds * 1000);\n      else {\n        var raw = String(value);\n        var match = raw.match(/Timestamp\\(seconds=(\\d+)/i);\n        date = match ? new Date(Number(match[1]) * 1000) : new Date(raw);\n      }\n      if (!date || !Number.isFinite(date.getTime())) return '';\n      var diff = Date.now() - date.getTime();\n      if (diff >= 0) {\n        var minutes = Math.floor(diff / 60000);\n        if (minutes < 1) return 'Just now';\n        if (minutes < 60) return minutes + ' min';\n        var hours = Math.floor(minutes / 60);\n        if (hours < 24) return hours + ' hour' + (hours === 1 ? '' : 's');\n        var days = Math.floor(hours / 24);\n        if (days < 7) return days + ' day' + (days === 1 ? '' : 's');\n      }\n      var opts = { month:'short', day:'numeric' };\n      if (date.getFullYear() !== (new Date()).getFullYear()) opts.year = 'numeric';\n      return date.toLocaleDateString(undefined, opts);\n    } catch(e){ return ''; }\n  }\n  function valueMillis(value){\n    if (!value) return 0;\n    try {\n      if (value && typeof value.toDate === 'function') return value.toDate().getTime() || 0;\n      if (value && typeof value.seconds === 'number') return value.seconds * 1000;\n      var raw = String(value);\n      var match = raw.match(/Timestamp\\(seconds=(\\d+)/i);\n      if (match) return Number(match[1]) * 1000;\n      var parsed = Date.parse(raw);\n      return Number.isFinite(parsed) ? parsed : 0;\n    } catch(e){ return 0; }\n  }\n  function clean(value, fallback){\n    var out = String(value || fallback || '').trim().replace(/^@+/, '').replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').toLowerCase();\n    return out || String(fallback || 'user').toLowerCase();\n  }\n  function cleanEmpty(value){\n    return String(value || '').trim().replace(/^@+/, '').replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').toLowerCase();\n  }\n  function html(value){\n    return String(value == null ? '' : value).replace(/[&<>\"']/g, function(ch){ return ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'})[ch]; });\n  }\n  function consumerText(value){\n    return String(value == null ? '' : value)\n      .replace(/\\bfounder verification\\b/ig, 'verification')\n      .replace(/\\bfounder\\b/ig, 'creator')\n      .replace(/\\bmoderation\\b/ig, 'safety')\n      .replace(/\\bcanonical\\b/ig, 'official')\n      .replace(/\\bFirestore\\b/ig, 'profile')\n      .replace(/\\bFirebase\\b/ig, 'account')\n      .replace(/\\bpublicProfiles\\b/ig, 'profiles')\n      .replace(/\\bowner-scoped\\b/ig, 'profile')\n      .replace(/\\bparticipant-scoped\\b/ig, 'conversation')\n      .replace(/\\bapproved\\b/ig, 'public')\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n  function internalCopyRisk(value){\n    var text = String(value == null ? '' : value).toLowerCase();\n    return /\\b(founder|moderation|runtime|queue|manifest|manual|maximum build|build verification|verification|protected story text|publicprofiles|canonical|governance|diagnostics?|architecture|source state|scoped records?|audit|owner registry|firestore|firebase|placeholder|sample|demo|dummy|fake|lorem|old expired story|old build|internal id|phase)\\b/.test(text) || /\\btest(?:ing)?\\b/.test(text) || /\\bp11dz[0-9a-z-]*\\b/.test(text) || /\\bphase\\s*\\d+[a-z]?\\b/.test(text) || /\\bphase[0-9][a-z0-9-]*\\b/.test(text) || /\\bphase-[a-z0-9-]+\\b/.test(text);\n  }\n  function recordSourceRisk(record){\n    if (!record) return false;\n    if (record.firebaseOnly === true || record.firestoreOnly === true || record.legacyFirebase === true || record.firebaseFallback === true) return true;\n    var canonicalSupabaseId = clean(record.supabasePostId || record.supabaseStoryId || record.supabase_post_id || record.supabase_story_id || '', '');\n    var canonicalId = clean(record.id || '', '');\n    var migratedOnly = [record.migratedFromPath, record.migrated_from_path].join(' ').toLowerCase();\n    if ((canonicalSupabaseId || /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(canonicalId)) && /\\b(firestore|firebase)\\b/.test(migratedOnly)) return false;\n    var source = [record.firestorePath, record.firebasePath, record.legacyPath, record.sourcePath, record.sourceCollection, record.sourceOwner].join(' ').toLowerCase();\n    return /\\b(firestore|firebase)\\b/.test(source);\n  }\n  function weakPublicCopyRisk(value){\n    var text = String(value == null ? '' : value).trim().toLowerCase();\n    return !text || /^(sample|demo|placeholder|dummy|fake|n\\/a|na|none|null|todo|tbd|\\.{1,3}|-+)$/.test(text);\n  }\n  function looksLikeRawEmail(value){\n    return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(String(value || '').trim()) || /^[a-z0-9._%+-]+-[a-z0-9._%+-]+\\.(com|net|org|co|io)$/i.test(String(value || '').trim());\n  }\n  function publicDisplayText(value, fallback){\n    var raw = String(value == null ? '' : value);\n    var safeFallback = fallback == null ? '' : String(fallback);\n    if (!canModerate() && weakPublicCopyRisk(raw)) return safeFallback;\n    var cleaned = consumerText(raw || fallback || '');\n    if (!canModerate() && internalCopyRisk(raw) && cleaned) return cleaned;\n    return cleaned || safeFallback;\n  }\n  function publicDisplayName(value, fallback){\n    var raw = String(value == null ? '' : value);\n    if (!canModerate() && looksLikeRawEmail(raw)) return String(fallback || 'DSD member');\n    if (!canModerate() && weakPublicCopyRisk(raw)) return String(fallback || 'DSD member');\n    if (!canModerate() && internalCopyRisk(raw)) return String(fallback || 'DSD member');\n    return consumerText(raw || fallback || '');\n  }\n  function publicHandleText(key, displayName, fallback){\n    var raw = String(key || '').replace(/^@+/, '').trim();\n    if (canModerate()) return raw || clean(displayName || fallback || 'profile', 'profile');\n    if (!raw || internalCopyRisk(raw) || weakPublicCopyRisk(raw) || looksLikeRawEmail(raw)) {\n      return clean((looksLikeRawEmail(displayName) ? '' : displayName) || fallback || 'profile', 'profile');\n    }\n    return clean(raw, fallback || 'profile');\n  }\n  function publicProfileLooksLaunchReady(profile){\n    if (canModerate()) return true;\n    return true;\n  }\n  function staleLaunchTestContentRecord(record){\n    if (!record) return false;\n    var recordId = clean(record.postId || record.legacyPostId || record.legacy_post_id || record.storyId || record.legacyStoryId || record.legacy_story_id || record.id || '');\n    if (recordId && RETIRED_LAUNCH_TEST_CONTENT_IDS[recordId]) return true;\n    var authorKey = clean(record.authorProfileKey || record.author_profile_key || record.ownerProfileKey || record.owner_profile_key || '');\n    var bodyOnly = String(record.body || record.caption || record.title || record.preview || record.entity && (record.entity.body || record.entity.caption || record.entity.title) || '').trim().toLowerCase();\n    if (authorKey === 'detroitskydaddy' && /^(\u00C3\u0192\u00C6\u2019\u00C3\u2020\u00E2\u20AC\u2122\u00C3\u0192\u00E2\u20AC\u0161\u00C3\u201A\u00C2\u00B0\u00C3\u0192\u00C6\u2019\u00C3\u00A2\u00E2\u201A\u00AC\u00C2\u00A6\u00C3\u0192\u00E2\u20AC\u0161\u00C3\u201A\u00C2\u00B8\u00C3\u0192\u00C6\u2019\u00C3\u201A\u00C2\u00A2\u00C3\u0192\u00C2\u00A2\u00C3\u00A2\u00E2\u201A\u00AC\u00C5\u00A1\u00C3\u201A\u00C2\u00AC\u00C3\u0192\u00E2\u20AC\u00B9\u00C3\u2026\u00E2\u20AC\u0153\u00C3\u0192\u00C6\u2019\u00C3\u201A\u00C2\u00A2\u00C3\u0192\u00C2\u00A2\u00C3\u00A2\u00E2\u201A\u00AC\u00C5\u00A1\u00C3\u201A\u00C2\u00AC\u00C3\u0192\u00E2\u20AC\u0161\u00C3\u201A\u00C2\u00B9|hello world|hello world \u00C3\u0192\u00C6\u2019\u00C3\u2020\u00E2\u20AC\u2122\u00C3\u0192\u00E2\u20AC\u0161\u00C3\u201A\u00C2\u00B0\u00C3\u0192\u00C6\u2019\u00C3\u00A2\u00E2\u201A\u00AC\u00C2\u00A6\u00C3\u0192\u00E2\u20AC\u0161\u00C3\u201A\u00C2\u00B8\u00C3\u0192\u00C6\u2019\u00C3\u00A2\u00E2\u201A\u00AC\u00C2\u00A6\u00C3\u0192\u00C2\u00A2\u00C3\u00A2\u00E2\u20AC\u0161\u00C2\u00AC\u00C3\u00A2\u00E2\u20AC\u017E\u00C2\u00A2\u00C3\u0192\u00C6\u2019\u00C3\u00A2\u00E2\u201A\u00AC\u00C2\u00A6\u00C3\u0192\u00E2\u20AC\u0161\u00C3\u201A\u00C2\u00BD)$/.test(bodyOnly)) return true;\n    var haystack = [\n      record.body, record.caption, record.title, record.preview, record.name, record.slug,\n      record.storyTitle, record.description, record.testLabel,\n      record.sourcePath, record.migratedFromPath, record.createdByLabel\n    ].concat(record.entity ? [record.entity.body, record.entity.caption, record.entity.title, record.entity.testLabel] : []).join(' ').toLowerCase();\n    if (!haystack) return false;\n    return [\n      'launch story preview',\n      'test secondary public picture post',\n      'test public picture post',\n      'test post',\n      'test gated post',\n      'test my stories',\n      'test my story',\n      'test picture post',\n      'test pic',\n      'public user view / public',\n      'test video',\n      'p11dz684 test',\n      'a clean launch note from detroit sky daddy',\n      'launch readiness content hydration check',\n      'founder launch readiness content hydration check'\n    ].some(function(phrase){ return haystack.indexOf(phrase) !== -1; });\n  }\n  function publicRecordVisible(record){\n    if (!record) return false;\n    if (staleLaunchTestContentRecord(record)) return false;\n    if (!isNormalContentRecord(record)) return false;\n    if (recordSourceRisk(record)) return false;\n    var stateValue = normalizedRecordState(record);\n    if (['deleted','archived','removed','hidden','rejected','blocked','disabled','expired'].indexOf(stateValue) !== -1) return false;\n    if (canModerate()) return true;\n    if (record.internalOnly === true || record.adminOnly === true || record.founderOnly === true || record.testOnly === true) return false;\n    if (record.entity && (record.entity.internalOnly === true || record.entity.adminOnly === true || record.entity.founderOnly === true || record.entity.testOnly === true)) return false;\n    return true;\n  }\n  function normalizePublicUrl(value){\n    var raw = String(value || '').trim().replace(/[),.;:!?]+$/g, '');\n    if (!raw) return '';\n    if (/^https?:\\/\\//i.test(raw)) return raw;\n    if (/^www\\./i.test(raw)) return 'https://' + raw;\n    if (/^[a-z0-9][a-z0-9-]*(?:\\.[a-z0-9][a-z0-9-]*)+\\b(?:\\/[^\\s<]*)?$/i.test(raw)) return 'https://' + raw;\n    return '';\n  }\n  function linkify(value){\n    var input = String(value || '');\n    var output = '';\n    var lastIndex = 0;\n    input.replace(/(?:https?:\\/\\/|www\\.)[^\\s<]+|\\b[a-z0-9][a-z0-9-]*(?:\\.[a-z0-9][a-z0-9-]*)+\\b(?:\\/[^\\s<]*)?/ig, function(url, offset){\n      if (offset > 0 && /[@\\w.-]/.test(input.charAt(offset - 1)) && !/^https?:\\/\\//i.test(url)) return url;\n      var rawUrl = String(url || '').replace(/[),.;:!?]+$/g, '');\n      var href = normalizePublicUrl(rawUrl);\n      if (!href) return url;\n      output += html(input.slice(lastIndex, offset));\n      var safeUrl = html(rawUrl);\n      var safeHref = html(href);\n      var trailing = url.slice(rawUrl.length);\n      output += '<a href=\"' + safeHref + '\" target=\"_blank\" rel=\"noopener noreferrer\">' + safeUrl + '</a>' + html(trailing);\n      lastIndex = offset + url.length;\n      return url;\n    });\n    output += html(input.slice(lastIndex));\n    return output;\n  }\n  function firstUrl(value){\n    var match = String(value || '').match(/(?:https?:\\/\\/|www\\.)[^\\s<]+|\\b[a-z0-9][a-z0-9-]*(?:\\.[a-z0-9][a-z0-9-]*)+\\b(?:\\/[^\\s<]*)?/i);\n    return match ? normalizePublicUrl(String(match[0] || '').replace(/[),.;:!?]+$/g, '')) : '';\n  }\n  function storyLinkPreviewHTML(value){\n    var url = firstUrl(value);\n    if (!url) return '';\n    var label = url.replace(/^https?:\\/\\//i, '').replace(/\\/.*$/, '');\n    return '<a class=\"dsd-story385__link-preview\" href=\"' + html(url) + '\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>' + html(label || 'Open link') + '</strong><span>' + html(url) + '</span></a>';\n  }\n  function postLinkPreviewHTML(value){\n    var url = firstUrl(value);\n    if (!url) return '';\n    var label = url.replace(/^https?:\\/\\//i, '').replace(/\\/.*$/, '');\n    return '<a class=\"dsd-post-card__link-preview\" href=\"' + html(url) + '\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>' + html(label || 'Open link') + '</strong><span>' + html(url) + '</span></a>';\n  }\n  function composerMediaIcon(kind){\n    var paths = {\n      image: 'M4 5h16v14H4V5Zm2 2v7.2l3.2-3.2 3.1 3.1 2.2-2.5L18 15.5V7H6Zm3 1.8a1.7 1.7 0 1 1 0 3.4 1.7 1.7 0 0 1 0-3.4Z',\n      video: 'M4 6h10a2 2 0 0 1 2 2v1.2l4-2.2v10l-4-2.2V16a2 2 0 0 1-2 2H4V6Zm3 3v6h6V9H7Z'\n    };\n    return '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"' + (paths[kind] || paths.image) + '\"></path></svg>';\n  }\n  function composerMediaButton(kind, multiple, label){\n    var accept = kind === 'video' ? 'video/*' : 'image/*';\n    var aria = label || (kind === 'video' ? 'Attach video' : 'Attach image');\n    return '<label class=\"dsd-composer-media-button dsd-composer-media-button--icon\" data-dsd-composer-media-button=\"' + html(kind) + '\" aria-label=\"' + html(aria) + '\">' + composerMediaIcon(kind) + '<input name=\"' + html(kind) + '\" data-dsd-media-input=\"' + html(kind) + '\" type=\"file\" accept=\"' + html(accept) + '\"' + (multiple ? ' multiple' : '') + ' aria-label=\"' + html(aria) + '\"></label>';\n  }\n  function bannerFocusPresetButtonsHTML(){\n    var presets = [\n      ['top-left','Top left'], ['x50-y20','Upper subject'], ['top-right','Top right'],\n      ['x20-y50','Left subject'], ['center','Center subject'], ['x80-y50','Right subject'],\n      ['bottom-left','Bottom left'], ['x50-y80','Lower subject'], ['bottom-right','Bottom right']\n    ];\n    return '<div class=\"dsd-banner-focus-grid\" data-dsd-banner-focus-grid>' + presets.map(function(option){\n      return '<button type=\"button\" data-dsd-banner-focus-preset=\"' + html(option[0]) + '\">' + html(option[1]) + '</button>';\n    }).join('') + '</div>';\n  }\n  function bannerPositionCoordinates(value){\n    var raw = String(value || 'center').trim().toLowerCase();\n    var custom = raw.match(/^x(\\d{1,3})-y(\\d{1,3})(?:-z(\\d{1,3}))?$/);\n    if (custom) return { x: Math.max(0, Math.min(100, Number(custom[1] || 50))), y: Math.max(0, Math.min(100, Number(custom[2] || 50))) };\n    var map = { top: [50, 12], 'upper-mid': [50, 30], center: [50, 50], 'lower-mid': [50, 70], bottom: [50, 88], left: [18, 50], right: [82, 50], 'top-left': [18, 12], 'top-right': [82, 12], 'bottom-left': [18, 88], 'bottom-right': [82, 88] };\n    var pair = map[raw] || map.center;\n    return { x: pair[0], y: pair[1] };\n  }\n  function bannerFocusAdvancedHTML(){\n    return '<div class=\"dsd-banner-focus-advanced\" data-dsd-banner-focus-advanced><input name=\"bannerPosition\" type=\"hidden\" value=\"center\"><label>Horizontal focus<input type=\"range\" min=\"0\" max=\"100\" step=\"1\" value=\"50\" data-dsd-banner-focus-x aria-label=\"Banner horizontal focus\"></label><label>Vertical focus<input type=\"range\" min=\"0\" max=\"100\" step=\"1\" value=\"50\" data-dsd-banner-focus-y aria-label=\"Banner vertical focus\"></label><label>Zoom<input type=\"range\" min=\"100\" max=\"180\" step=\"1\" value=\"100\" data-dsd-banner-zoom aria-label=\"Banner zoom\"></label><output data-dsd-banner-focus-output>50% / 50% - 100%</output></div>';\n  }\n  function bannerPositionZoom(value){\n    var raw = String(value || '').trim().toLowerCase();\n    var custom = raw.match(/(?:^|-)z(\\d{1,3})$/);\n    if (!custom) return 100;\n    return Math.max(100, Math.min(180, Number(custom[1] || 100)));\n  }\n  function syncBannerFocusForm(form, value){\n    if (!form) return;\n    var coords = bannerPositionCoordinates(value || (state.profile && state.profile.bannerPosition) || 'center');\n    var zoomValue = bannerPositionZoom(value || (state.profile && state.profile.bannerPosition) || 'center');\n    var field = formControl(form, 'bannerPosition');\n    var x = qs('[data-dsd-banner-focus-x]', form);\n    var y = qs('[data-dsd-banner-focus-y]', form);\n    var zoom = qs('[data-dsd-banner-zoom]', form);\n    var out = qs('[data-dsd-banner-focus-output]', form);\n    if (field) field.value = 'x' + Math.round(coords.x) + '-y' + Math.round(coords.y) + '-z' + Math.round(zoomValue);\n    if (x) x.value = Math.round(coords.x);\n    if (y) y.value = Math.round(coords.y);\n    if (zoom) zoom.value = Math.round(zoomValue);\n    if (out) out.textContent = Math.round(coords.x) + '% / ' + Math.round(coords.y) + '% - ' + Math.round(zoomValue) + '%';\n    qsa('[data-dsd-banner-focus-preset]', form).forEach(function(button){ button.classList.toggle('is-active', bannerBackgroundPosition(button.getAttribute('data-dsd-banner-focus-preset')) === bannerBackgroundPosition(field && field.value || 'center')); });\n  }\n  function currentBannerPreviewUrl(){\n    var profile = viewedProfile && viewedProfile() || state.profile || {};\n    var id = canonicalProfileBannerMediaId(profile);\n    return id ? (state.mediaReadCache[id] && state.mediaReadCache[id].objectUrl || mediaReadProxyUrl(id)) : '';\n  }\n  function bannerPreviewHTML(){\n    return '<div class=\"dsd-banner-edit-preview\" data-dsd-banner-edit-preview aria-label=\"Banner preview\"><span>Banner preview</span></div>';\n  }\n  function syncBannerEditPreview(form){\n    if (!form) return;\n    var preview = qs('[data-dsd-banner-edit-preview]', form);\n    if (!preview) return;\n    var fileInput = formControl(form, 'banner');\n    var file = fileInput && fileInput.files && fileInput.files[0];\n    if (preview.dataset.dsdPreviewObjectUrl && (!file || preview.dataset.dsdPreviewFileName !== file.name)) {\n      try { URL.revokeObjectURL(preview.dataset.dsdPreviewObjectUrl); } catch(e) {}\n      delete preview.dataset.dsdPreviewObjectUrl;\n      delete preview.dataset.dsdPreviewFileName;\n    }\n    var url = preview.dataset.dsdPreviewObjectUrl || currentBannerPreviewUrl();\n    if (file && file.type && file.type.indexOf('image/') === 0 && !preview.dataset.dsdPreviewObjectUrl) {\n      try {\n        url = URL.createObjectURL(file);\n        preview.dataset.dsdPreviewObjectUrl = url;\n        preview.dataset.dsdPreviewFileName = file.name || '';\n      } catch(e) {}\n    }\n    if (url) {\n      preview.style.setProperty('background-image', 'url(\"' + String(url).replace(/\"/g, '%22') + '\")', 'important');\n      preview.style.setProperty('background-position', bannerBackgroundPosition(formControl(form, 'bannerPosition') && formControl(form, 'bannerPosition').value || 'center'), 'important');\n      preview.style.setProperty('background-size', bannerBackgroundSize(formControl(form, 'bannerPosition') && formControl(form, 'bannerPosition').value || 'center'), 'important');\n      preview.setAttribute('data-dsd-banner-preview-has-media', 'true');\n    } else {\n      preview.style.setProperty('background-image', 'linear-gradient(135deg,rgba(20,24,42,.92),rgba(118,83,178,.38))', 'important');\n      preview.style.removeProperty('background-position');\n      preview.style.removeProperty('background-size');\n      preview.setAttribute('data-dsd-banner-preview-has-media', 'false');\n    }\n  }\n  function bannerBackgroundPosition(value){\n    var raw = String(value || 'center').trim().toLowerCase();\n    var custom = raw.match(/^x(\\d{1,3})-y(\\d{1,3})(?:-z(\\d{1,3}))?$/);\n    if (custom) {\n      var x = Math.max(0, Math.min(100, Number(custom[1] || 50)));\n      var y = Math.max(0, Math.min(100, Number(custom[2] || 50)));\n      return x + '% ' + y + '%';\n    }\n    var focusMap = { top: 'center 12%', 'upper-mid': 'center 30%', center: 'center 50%', 'lower-mid': 'center 70%', bottom: 'center 88%', 'top-left': '18% 12%', 'top-right': '82% 12%', left: '18% 50%', right: '82% 50%', 'bottom-left': '18% 88%', 'bottom-right': '82% 88%' };\n    return focusMap[raw] || 'center 50%';\n  }\n  function bannerBackgroundSize(value){\n    var zoom = bannerPositionZoom(value);\n    return zoom > 100 ? Math.round(zoom) + '%' : 'cover';\n  }\n  function visibilityHelpDetails(surface){\n    return '';\n  }\n  function initials(name){ return String(name || 'DS').split(/\\s+/).map(function(x){ return x.charAt(0); }).join('').slice(0, 2).toUpperCase() || 'DS'; }\n  function customer(){ return window.DSDShopifyCustomer || null; }\n  function shopifyAuthenticated(){\n    var c = customer();\n    var htmlAuthenticated = false;\n    try { htmlAuthenticated = document.documentElement && document.documentElement.classList.contains('dsd-shopify-authenticated'); } catch(e){}\n    return !!(c && c.authenticated === true && htmlAuthenticated);\n  }\n  function bridge(){ return window.DSDFirebaseBridge || null; }\n  function fb(){ var b = bridge(); return b && b.firestore && b.db ? b : null; }\n  function loginReturnUrl(){ return LOGIN_RETURN_URL; }\n  function registerReturnUrl(){ return REGISTER_RETURN_URL; }\n  function ensureSupabaseConfig(){\n    if (window.DSDSupabaseConfig && window.DSDSupabaseConfig.cutoverEnabled === true) return window.DSDSupabaseConfig;\n    window.DSDSupabaseConfig = Object.assign({}, window.DSDSupabaseConfig || {}, {\n      version: 'p11dz610-secure-supabase-social-adapter',\n      owner: 'SupabaseSocialAdapter',\n      mode: 'verified-secure-bridge',\n      url: 'https://qcjdwbgtagtjkoqrpnvt.supabase.co',\n      tokenEndpoint: '/apps/dsd-firebase-custom-token?bridgeRoute=%2Fdsd-supabase-custom-token',\n      firebaseRollbackEndpoint: '/apps/dsd-firebase-custom-token',\n      cutoverEnabled: true,\n      firebaseRollbackMode: true,\n      mediaBackend: 'wasabi',\n      supabaseStorageProductionAllowed: false,\n      recoveredBy: 'dsd-launch-social-activation-p11dz684'\n    });\n    try { window.dispatchEvent(new CustomEvent('dsd:supabase-config:ready', { detail: { version: window.DSDSupabaseConfig.version, owner: window.DSDSupabaseConfig.owner, mode: window.DSDSupabaseConfig.mode, tokenEndpoint: window.DSDSupabaseConfig.tokenEndpoint, mediaBackend: window.DSDSupabaseConfig.mediaBackend } })); } catch(e){}\n    return window.DSDSupabaseConfig;\n  }\n  function supabaseAdapter(){ return window.DSDSupabaseSocialAdapter && ensureSupabaseConfig() ? window.DSDSupabaseSocialAdapter : null; }\n  function supabaseCutoverReady(){ return !!(supabaseAdapter() && ensureSupabaseConfig().cutoverEnabled === true); }\n  function supabaseCutoverConfigured(){ return !!(ensureSupabaseConfig() && window.DSDSupabaseConfig.cutoverEnabled === true); }\n  function primeSupabaseEntitlementSession(){\n    if (!hasCustomer()) return Promise.resolve(null);\n    return waitForSupabaseAdapter('authenticated-social-entitlement-prime', 'session').then(function(adapter){\n      if (!adapter || typeof adapter.session !== 'function') return null;\n      return adapter.session({ force: true, body: { surface: 'authenticated-social-entitlement-prime' } }).then(function(payload){\n        applySupabaseSessionIdentity(payload);\n        return payload;\n      });\n    }).catch(function(error){\n      try {\n        document.documentElement.setAttribute('data-dsd-viewer-prime', 'failed');\n        document.documentElement.setAttribute('data-dsd-viewer-prime-error', String(error && error.message || error || 'unknown').slice(0, 80));\n      } catch(e){}\n      claim('supabase-entitlement-prime:degraded', { error: error && error.message || String(error) });\n      return null;\n    });\n  }\n  function applySupabaseSessionIdentity(payload){\n    payload = payload || {};\n    var claims = window.DSDSupabaseSessionClaims || payload.claims || {};\n    var entitlement = payload.entitlement || null;\n    state.supabaseEntitlement = entitlement;\n    var rawKey = clean(payload.profileKey || claims.profile_key || '', '');\n    var key = nonPlaceholderProfileKey(rawKey);\n    if (looksLikeRawEmail(key)) key = '';\n    if (key) state.sessionProfileKey = key;\n    var membershipActive = (entitlement && entitlement.dsdPlus === true) || claims.dsd_plus === true;\n    var role = claims.role_founder === true ? 'founder' : (claims.role_moderator === true ? 'moderator' : '');\n    var current = customer() || {};\n    if (!key && !membershipActive && !role) return current;\n    var next = Object.assign({}, current, {\n      authenticated: current.authenticated === true || hasCustomer() || true,\n      profileKey: key || current.profileKey || '',\n      handle: key || current.handle || '',\n      isFounder: current.isFounder === true || claims.role_founder === true,\n      isModerator: current.isModerator === true || claims.role_moderator === true || claims.role_founder === true,\n      membership: Object.assign({}, current.membership || {}, {\n        active: membershipActive || (current.membership && current.membership.active === true),\n        dsdPlus: membershipActive || (current.membership && current.membership.dsdPlus === true),\n        tier: (current.membership && current.membership.tier) || '',\n        source: entitlement && entitlement.source || claims.entitlement_source || (current.membership && current.membership.source) || 'shopify-app-proxy-verified'\n      }),\n      entitlementSource: entitlement && entitlement.source || current.entitlementSource || 'shopify-app-proxy-verified'\n    });\n    next.platformRole = Object.assign({}, current.platformRole || {}, {\n      role: role || (current.platformRole && current.platformRole.role) || '',\n      source: role ? 'supabase-bridge-claims' : ((current.platformRole && current.platformRole.source) || 'shopify-server-derived')\n    });\n    window.DSDShopifyCustomer = next;\n    try {\n      document.documentElement.setAttribute('data-dsd-viewer-prime', 'ok');\n      document.documentElement.setAttribute('data-dsd-viewer-profile-key-present', rawKey ? 'true' : 'false');\n      document.documentElement.setAttribute('data-dsd-viewer-profile-key-safe', key ? 'true' : 'false');\n      document.documentElement.setAttribute('data-dsd-viewer-role', role || 'user');\n      document.documentElement.setAttribute('data-dsd-viewer-dsd-plus', membershipActive ? 'true' : 'false');\n    } catch(e){}\n    if (key) {\n      window.setTimeout(function(){\n        try { renderRouteAccessGates(); } catch(e){}\n        try { renderMessages(); } catch(e){}\n        readSupabaseProfileByKey(key).then(function(profile){\n          if (profile) activateCustomerScopedProfile(profile);\n        }).catch(function(error){\n          claim('supabase-session-profile-activate:degraded', { error: error && error.message || String(error) });\n        }).then(function(){\n          try { renderRouteAccessGates(); } catch(e){}\n          try { renderMessages(); } catch(e){}\n          try { syncComposerIdentityUI(); } catch(e){}\n        });\n      }, 0);\n    }\n    return next;\n  }\n  function supabasePathSupported(path){\n    return /^(profiles|publicProfiles|posts|stories|gatedPostShells|gatedStoryShells|mediaManifests|moderationQueue|safetyReports|founderAudit|notifications|conversations|relationships|saves|favorites)(?:\\/|$)/.test(String(path || ''));\n  }\n  function firebasePublicContentHydration(){ return false; }\n  function publicSocialReadPath(path){\n    return /^(publicProfiles|posts|stories)(?:\\/|$)/.test(String(path || '')) || /^posts\\/[^/]+\\/comments(?:\\/|$)/.test(String(path || ''));\n  }\n  function authenticatedSocialReadPath(path){\n    return /^(profiles|notifications|conversations|relationships|saves|favorites)(?:\\/|$)/.test(String(path || ''));\n  }\n  function firebaseReadAllowed(path){\n    path = String(path || '');\n    if (publicSocialReadPath(path) || authenticatedSocialReadPath(path)) return false;\n    return true;\n  }\n  function purgeRetiredPublicSocialCaches(){\n    var stampKey = 'dsd.launch.firebaseGhostPurge.version';\n    try {\n      if (!window.localStorage || window.localStorage.getItem(stampKey) === GHOST_PURGE_VERSION) return;\n    } catch(e){ return; }\n    var protectedKey = /(shopify|cart|checkout|customer|conjured|auth|token|session|password|consent)/i;\n    var retiredSocialKey = /(dsd|detroit).*?(firebase|firestore|publicprofiles|public-profiles|profiles|profilecards|discovery|users311|posts|stories|comments|feed|social|gated)|(firebase|firestore).*?(publicprofiles|profiles|profilecards|discovery|posts|stories|comments|feed|social|gated)/i;\n    function cleanStore(store){\n      if (!store) return;\n      var keys = [];\n      try {\n        for (var i = 0; i < store.length; i += 1) keys.push(store.key(i));\n        keys.forEach(function(key){\n          if (!key || protectedKey.test(key)) return;\n          if (retiredSocialKey.test(key)) store.removeItem(key);\n        });\n      } catch(e){}\n    }\n    cleanStore(window.localStorage);\n    cleanStore(window.sessionStorage);\n    try { window.localStorage.setItem(stampKey, GHOST_PURGE_VERSION); } catch(e){}\n    try {\n      if (window.indexedDB && typeof window.indexedDB.databases === 'function') {\n        window.indexedDB.databases().then(function(databases){\n          (databases || []).forEach(function(db){\n            var name = db && db.name || '';\n            if (!name || protectedKey.test(name)) return;\n            if (/dsd.*?(firebase|firestore|publicprofiles|discovery|social|profilecards|posts|stories|gated)/i.test(name)) {\n              try { window.indexedDB.deleteDatabase(name); } catch(e){}\n            }\n          });\n        }).catch(function(){});\n      }\n    } catch(e){}\n  }\n  function hasCustomer(){ var c = customer(); return !!(c && (c.authenticated === true || c.profileKey || c.handle || c.displayName)); }\n  function uid(){ var u = state.firebaseUser; return u && u.uid ? u.uid : null; }\n  function actorUid(){\n    var scoped = customerScopedPublicProfile();\n    var scopedUid = scoped && (scoped.uid || scoped.userId || scoped.user_id || scoped.firebaseUid || scoped.firebase_uid);\n    if (scopedUid) return clean(scopedUid, '');\n    var p = profileWithPublicMirror(state.profile || {}) || state.profile || {};\n    var c = customer() || {};\n    var hintedKey = nonPlaceholderProfileKey(c.profileKey || c.handle || state.sessionProfileKey || p.profileKey || p.handle || '');\n    var publicIdentity = hintedKey ? publicProfileByKey(hintedKey) : null;\n    var publicUid = publicIdentity && (publicIdentity.uid || publicIdentity.userId || publicIdentity.user_id || publicIdentity.firebaseUid || publicIdentity.firebase_uid);\n    if (publicUid) return clean(publicUid, '');\n    var customerKey = normalizedProfileKeyValue(customerProfileKeyValue());\n    var profileKeyValue = normalizedProfileKeyValue(p.profileKey || p.handle || '');\n    if ((c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true) && customerKey && profileKeyValue && profileKeyValue !== customerKey) return '';\n    return clean(p.uid || p.userId || p.user_id || p.supabaseUserId || p.supabase_user_id || p.appUserId || p.app_user_id || uid() || p.firebaseUid || p.firebase_uid || '', '');\n  }\n  function actorRelationshipIdentity(){\n    return actorUid() || profileKey();\n  }\n  function canonicalProfileOwnerIdentity(action){\n    var key = nonPlaceholderProfileKey(\n      activeProfileKeyValue() ||\n      customerProfileKeyValue() ||\n      profileKey() ||\n      state.profile && (state.profile.profileKey || state.profile.handle) ||\n      ''\n    );\n    var profile = currentComposerProfile ? currentComposerProfile() : (state.profile || {});\n    profile = profileWithPublicMirror(profile || {}) || profile || {};\n    var ownerUid = actorUid() || profile.uid || profile.userId || profile.user_id || profile.supabaseUserId || profile.supabase_user_id || profile.appUserId || profile.app_user_id || '';\n    ownerUid = clean(ownerUid || key || '', '');\n    if (!key || looksLikeRawEmail(key) || !ownerUid) {\n      if (action) renderStatus('Profile connection is temporarily unavailable. Retry after the account connection refreshes.');\n      claim('canonical-profile-owner:blocked', {\n        action: action || '',\n        profileKeyPresent: !!key,\n        ownerUidPresent: !!ownerUid,\n        storeScoped: storeScopedIdentityRequiresPrivateBridge()\n      });\n      return null;\n    }\n    return {\n      uid: ownerUid,\n      profileKey: key,\n      displayName: activeDisplayNameValue() || profile.displayName || key,\n      avatarMediaId: canonicalProfileAvatarMediaId(profile || state.profile || {})\n    };\n  }\n  function normalizedUid(value){\n    return String(value || '').trim().replace(/^shopify-/, '');\n  }\n  function isFounderGovernanceTarget(targetUid, key){\n    return identityMatchesCurrent(targetUid, key);\n  }\n  function hasFirebaseAuth(){ return !!uid(); }\n  function hasCanonicalPrivateSocialSession(){\n    return !!(hasCustomer() && state.bridgeChecked && (hasFirebaseAuth() || supabaseCutoverReady()));\n  }\n  function currentProfilePath(){\n    return hasCustomer() ? 'profiles/current' : (uid() ? ('profiles/' + uid()) : 'profiles/current');\n  }\n  function waitForBridgeReady(timeoutMs){\n    if (supabaseCutoverReady()) {\n      state.bridgeChecked = true;\n      return Promise.resolve(true);\n    }\n    if (fb() || !hasCustomer()) return Promise.resolve(!!fb());\n    if (!supabaseCutoverReady()) renderStatus('Connecting your account...');\n    return new Promise(function(resolve){\n      var done = false;\n      var started = Date.now();\n      var timer = null;\n      function finish(value){\n        if (done) return;\n        done = true;\n        if (timer) window.clearInterval(timer);\n        window.removeEventListener('dsd:firebase-module-bridge:ready', onReady);\n        resolve(!!value);\n      }\n      function check(){\n        if (fb()) return finish(true);\n        if (Date.now() - started >= (timeoutMs || 5000)) return finish(false);\n      }\n      function onReady(){ window.setTimeout(check, 30); }\n      window.addEventListener('dsd:firebase-module-bridge:ready', onReady);\n      timer = window.setInterval(check, 120);\n      check();\n    });\n  }\n  function profileKey(){\n    var c = customer();\n    var stateKey = nonPlaceholderProfileKey(state.profile && (state.profile.profileKey || state.profile.handle));\n    var sessionKey = nonPlaceholderProfileKey(state.sessionProfileKey || '');\n    var fallback = nonPlaceholderProfileKey(shopifyDisplayProfileKey(c));\n    var customerKey = nonPlaceholderProfileKey(c && (c.profileKey || c.handle) || sessionKey || fallback || '');\n    if ((c && (c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true)) && customerKey) {\n      var scoped = customerScopedPublicProfile();\n      if (scoped || !stateKey || normalizedProfileKeyValue(stateKey) !== normalizedProfileKeyValue(customerKey)) return customerKey;\n    }\n    return stateKey || sessionKey || fallback || '';\n  }\n  function placeholderProfileKey(value){\n    value = clean(value || '', '').toLowerCase();\n    return !value || ['profile','user','member','guest','dsd-member','dsdmember'].indexOf(value) !== -1 || looksLikeRawEmail(value);\n  }\n  function nonPlaceholderProfileKey(value){\n    value = clean(value || '', '');\n    return placeholderProfileKey(value) ? '' : value;\n  }\n  function profileRecordHasUsableKey(profile){\n    return !!nonPlaceholderProfileKey(profile && (profile.profileKey || profile.handle || profile.profile_key || ''));\n  }\n  function storeScopedIdentityRequiresPrivateBridge(){\n    var c = customer() || {};\n    return !!(hasCustomer() && (c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true));\n  }\n  function ownIdentityRebindingRequired(){\n    return storeScopedIdentityRequiresPrivateBridge() && !customerProfileKeyValue() && !profileRecordHasUsableKey(state.profile);\n  }\n  function identityRebindingRequiredProfile(){\n    return {\n      uid: actorUid() || uid() || '',\n      displayName: 'Profile identity syncing',\n      profileKey: '',\n      handle: '',\n      bio: 'Your new-store account is connected, but the private identity bridge has not rebound this session to the canonical Supabase profile yet.',\n      setupComplete: false,\n      status: 'identity_rebinding_required',\n      identityRebindingRequired: true,\n      authBridge: 'private-identity-rebinding-required',\n      searchable: false,\n      entity: { type: 'profile', visibility: 'private', moderationStatus: 'identity_rebinding_required' }\n    };\n  }\n  function activeProfileKeyValue(){\n    var p = state.profile || {};\n    var c = customer() || {};\n    var customerKey = nonPlaceholderProfileKey(c.profileKey || c.handle || state.sessionProfileKey || '');\n    var profileKeyValue = nonPlaceholderProfileKey(p.profileKey || p.handle || '');\n    if ((c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true) && customerKey) {\n      var scoped = customerScopedPublicProfile();\n      if (scoped || !profileKeyValue || normalizedProfileKeyValue(profileKeyValue) !== normalizedProfileKeyValue(customerKey)) return customerKey;\n    }\n    if (profileKeyValue) return profileKeyValue;\n    return profileKeyValue || customerKey;\n  }\n  function customerScopedPublicProfile(){\n    var c = customer() || {};\n    if (!(c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true)) return null;\n    var key = nonPlaceholderProfileKey(c.profileKey || c.handle || state.sessionProfileKey || '');\n    if (!key) return null;\n    return publicProfileByKey(key);\n  }\n  function normalizedProfileKeyValue(value){\n    return clean(value || '', '').replace(/^@+/, '').toLowerCase();\n  }\n  function currentIdentityValues(){\n    var values = {};\n    function add(value){\n      value = String(value || '').trim();\n      if (value) values[value] = true;\n    }\n    var p = state.profile || {};\n    add(actorUid());\n    add(uid());\n    add(p.uid);\n    add(p.userId);\n    add(p.user_id);\n    add(p.supabaseUserId);\n    add(p.supabase_user_id);\n    add(p.appUserId);\n    add(p.app_user_id);\n    add(p.firebaseUid);\n    add(p.firebase_uid);\n    return Object.keys(values);\n  }\n  function identityMatchesCurrent(targetUid, targetKey){\n    var target = String(targetUid || '').trim();\n    var key = normalizedProfileKeyValue(targetKey || '');\n    var currentKey = normalizedProfileKeyValue(activeProfileKeyValue() || profileKey() || '');\n    if (key && currentKey && key === currentKey) return true;\n    if (!target) return false;\n    return currentIdentityValues().indexOf(target) !== -1;\n  }\n  function customerProfileKeyValue(){\n    var c = customer() || {};\n    return nonPlaceholderProfileKey(c.profileKey || c.handle || state.sessionProfileKey || '');\n  }\n  function activeAuthorProfileMismatch(){\n    var profileKeyValue = normalizedProfileKeyValue(state.profile && (state.profile.profileKey || state.profile.handle));\n    var customerKeyValue = normalizedProfileKeyValue(customerProfileKeyValue());\n    if (!profileKeyValue || !customerKeyValue) return false;\n    if (['profile','user','member','guest','dsd-member'].indexOf(profileKeyValue) !== -1) return false;\n    if (['profile','user','member','guest','dsd-member'].indexOf(customerKeyValue) !== -1) return false;\n    var c = customer() || {};\n    if (c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true) return !customerScopedPublicProfile() && profileKeyValue !== customerKeyValue;\n    return profileKeyValue !== customerKeyValue;\n  }\n  function privateBridgeCanonicalProfileResolved(){\n    var c = customer() || {};\n    if (!(c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true)) return false;\n    var keyHint = nonPlaceholderProfileKey(c.profileKey || c.handle || state.sessionProfileKey || (state.profile && (state.profile.profileKey || state.profile.handle)) || '');\n    var candidates = [\n      state.profile || null,\n      keyHint ? publicProfileByKey(keyHint) : null,\n      uid() ? publicProfileByUid(uid()) : null\n    ].filter(Boolean).map(function(profile){ return profileWithPublicMirror(profile) || profile; });\n    return candidates.some(function(p){\n      var key = nonPlaceholderProfileKey(p.profileKey || p.handle || p.profile_key || keyHint || '');\n      var resolvedUid = p.uid || p.userId || p.user_id || p.supabaseUserId || p.supabase_user_id || p.appUserId || p.app_user_id || uid() || '';\n      var active = p.setupComplete === true || p.setup_complete === true || String(p.status || '').toLowerCase() === 'active';\n      return !!(active && key && resolvedUid);\n    });\n  }\n  function activeDisplayNameValue(){\n    var p = state.profile || {};\n    var c = customer() || {};\n    var scoped = customerScopedPublicProfile();\n    if (scoped) return String(scoped.displayName || scoped.display_name || scoped.profileKey || scoped.handle || activeProfileKeyValue() || 'DSD member').trim();\n    return String(p.displayName || c.displayName || c.name || activeProfileKeyValue() || 'DSD member').trim();\n  }\n  function activeAuthorIdentity(action){\n    var key = activeProfileKeyValue();\n    var actor = actorUid();\n    var authorProfile = currentComposerProfile();\n    var setup = !!(authorProfile && (authorProfile.setupComplete === true || authorProfile.setup_complete === true || String(authorProfile.status || '').toLowerCase() === 'active'));\n    var invalidKey = !key || ['profile','user','member','guest','dsd-member'].indexOf(key) !== -1 || looksLikeRawEmail(key);\n    if (!actor && !invalidKey && setup && supabaseCutoverReady()) {\n      actor = key;\n      claim('active-author-identity:supabase-profile-key-owner', {\n        action: action || '',\n        profileKey: key,\n        canonicalResolver: 'DSDSupabaseSocialAdapter.canonicalUserIdForProfileData'\n      });\n    }\n    var c = customer() || {};\n    if ((c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true) && !customerProfileKeyValue() && !privateBridgeCanonicalProfileResolved()) {\n      if (action) renderStatus('Your profile identity is still syncing. Refresh before you ' + action + '.');\n      claim('active-author-identity:store-scoped-profile-key-missing', {\n        action: action || '',\n        hasCustomer: hasCustomer(),\n        setupComplete: setup,\n        actorUidPresent: !!actor,\n        profileKeyPresent: !!key\n      });\n      return null;\n    }\n    if (activeAuthorProfileMismatch()) {\n      if (action) renderStatus('Your profile identity is still syncing. Refresh before you ' + action + '.');\n      claim('active-author-identity:mismatch-blocked', {\n        action: action || '',\n        profileKey: state.profile && (state.profile.profileKey || state.profile.handle) || '',\n        customerProfileKey: customerProfileKeyValue()\n      });\n      return null;\n    }\n    if (!hasCustomer() || !setup || !actor || invalidKey) {\n      if (action) renderStatus('Your profile identity is still syncing. Refresh or log in again before you ' + action + '.');\n      claim('active-author-identity:blocked', { action: action || '', hasCustomer: hasCustomer(), setupComplete: setup, actorUidPresent: !!actor, profileKeyPresent: !!key });\n      return null;\n    }\n    return { uid: actor, profileKey: key, displayName: activeDisplayNameValue() || key, avatarMediaId: canonicalProfileAvatarMediaId(authorProfile || state.profile || {}) };\n  }\n  function shopifyDisplayProfileKey(c){\n    c = c || customer() || {};\n    return nonPlaceholderProfileKey(c.profileKey || c.handle || c.displayName || c.name || '');\n  }\n  function displayName(){\n    var c = customer();\n    return (state.profile && state.profile.displayName) || (c && (c.name || c.displayName || 'DSD member')) || 'DSD member';\n  }\n  function isCanonicalFounder(){\n    return canonicalRoleActive('founder');\n  }\n  function roleText(value){\n    return String(value == null ? '' : value).trim().toLowerCase().replace(/[^a-z0-9_:-]+/g, '_');\n  }\n  function collectRoleSources(){\n    var p = state.profile || {};\n    var c = customer() || {};\n    var token = tokenClaims();\n    var supabaseClaims = window.DSDSupabaseSessionClaims || {};\n    var entitlement = state.supabaseEntitlement || {};\n    return [\n      c,\n      c.platformRole,\n      c.roles,\n      c.permissions,\n      c.membership,\n      token,\n      token.roles,\n      token.permissions,\n      token.platformRoles,\n      supabaseClaims,\n      supabaseClaims.roles,\n      supabaseClaims.permissions,\n      p,\n      p.roles,\n      p.permissions,\n      p.platformRoles,\n      p.governanceClaims,\n      entitlement,\n      entitlement.roles,\n      entitlement.permissions\n    ].filter(Boolean);\n  }\n  function objectHasRole(source, role){\n    if (!source) return false;\n    var wanted = roleText(role);\n    if (Array.isArray(source)) {\n      return source.map(roleText).indexOf(wanted) !== -1 || source.map(roleText).indexOf('role_' + wanted) !== -1;\n    }\n    if (typeof source !== 'object') return roleText(source) === wanted;\n    var keys = [\n      wanted,\n      'role_' + wanted,\n      'role' + wanted.charAt(0).toUpperCase() + wanted.slice(1),\n      'is_' + wanted,\n      'is' + wanted.charAt(0).toUpperCase() + wanted.slice(1),\n      wanted + '_access',\n      wanted + 'Access'\n    ];\n    for (var i = 0; i < keys.length; i++) {\n      if (source[keys[i]] === true || source[keys[i]] === wanted) return true;\n    }\n    return roleText(source.role) === wanted ||\n      roleText(source.accountRole) === wanted ||\n      roleText(source.platformRole) === wanted ||\n      roleText(source.governanceRole) === wanted;\n  }\n  function canonicalRoleActive(role){\n    return collectRoleSources().some(function(source){ return objectHasRole(source, role); });\n  }\n  function roles(){\n    var out = hasCustomer() || hasFirebaseAuth() ? ['user'] : ['public'];\n    if (canonicalRoleActive('founder')) out.push('founder');\n    if (canonicalRoleActive('moderator')) out.push('moderator');\n    if (canonicalRoleActive('admin')) out.push('admin');\n    if (canonicalRoleActive('tester')) out.push('tester');\n    if (canonicalRoleActive('dsd_plus') || deriveMembership().active === true) out.push('dsd_plus');\n    return out;\n  }\n  function canModerate(){ var r = roles(); return r.indexOf('founder') !== -1 || r.indexOf('moderator') !== -1 || r.indexOf('admin') !== -1; }\n  function isFounderRole(){ return roles().indexOf('founder') !== -1; }\n  function resolveViewerState(targetContext){\n    var r = roles();\n    var membership = deriveMembership();\n    var restriction = accountRestrictionState();\n    var authenticated = hasCustomer() || hasFirebaseAuth();\n    var suspended = restriction === 'suspended' || restriction === 'disabled' || restriction === 'deleted';\n    return {\n      authenticated: authenticated,\n      viewerType: authenticated ? (membership.active ? 'dsd_plus_member' : 'logged_in_user') : 'public_no_cookie',\n      uid: uid(),\n      profileKey: profileKey(),\n      displayName: displayName(),\n      roles: r.slice(),\n      membership: membership,\n      targetContext: targetContext || null,\n      accountRestriction: restriction,\n      permissions: {\n        canModerate: canModerate(),\n        canAccessFounderOperations: r.indexOf('founder') !== -1 || r.indexOf('admin') !== -1,\n        canAccessModeration: canModerate(),\n        canAccessSafetyCenter: authenticated && !suspended,\n        canAccessAIC: r.indexOf('founder') !== -1 || r.indexOf('admin') !== -1,\n        canCreatePost: hasActiveProfile(),\n        canCreateStory: hasActiveProfile(),\n        canSendMessage: hasActiveProfile(),\n        canViewDsdPlus: hasDsdPlus(),\n        canViewAdult: isAdultAllowed()\n      }\n    };\n  }\n  function canAccessAIC(){ return resolveViewerState().permissions.canAccessAIC; }\n  function canCreatePost(){ return resolveViewerState().permissions.canCreatePost; }\n  function canCreateStory(){ return resolveViewerState().permissions.canCreateStory; }\n  function canSendMessage(){ return resolveViewerState().permissions.canSendMessage; }\n  function canViewContent(record){ return publicRecordVisible(record) && canViewClassified(record); }\n  function canViewMedia(record){ return canViewContent(record || {}); }\n  function reviewStateForAuthor(){\n    return { status: 'approved', moderation: { state: 'approved', gate: isFounderRole() ? 'founder-auto-publish' : 'launch-auto-publish', reportCount: 0, reviewedBy: actorUid(), selfReviewed: isFounderRole(), lastActionAt: serverTimestamp() } };\n  }\n  function autoPublishPayload(){\n    return {\n      status: 'approved',\n      moderation: { state: 'approved', gate: isFounderRole() ? 'founder-auto-publish' : 'launch-auto-publish', reportCount: 0, reviewedBy: actorUid(), selfReviewed: true, lastActionAt: serverTimestamp() },\n      entity: { moderationStatus: 'approved' },\n      launchAutoPublishedAt: serverTimestamp()\n    };\n  }\n  function recordState(record){\n    return String(record && (record.status || record.state || (record.moderation && record.moderation.state) || (record.entity && record.entity.moderationStatus)) || '').toLowerCase();\n  }\n  function shouldAutoPublishLaunchRecord(record, ownerField){\n    if (!record) return false;\n    var recordProfileKey = clean(record.authorProfileKey || record.ownerProfileKey || record.profileKey || '', '');\n    var ownedByCurrentProfile = identityMatchesCurrent(record[ownerField], recordProfileKey) || recordOwnedByCurrentProfile(record);\n    if (!ownedByCurrentProfile && !canModerate()) return false;\n    var stateValue = recordState(record);\n    return ['approved','deleted','rejected','blocked','hidden','archived','removed','disabled','expired'].indexOf(stateValue) === -1;\n  }\n  function autoPublishLaunchRecords(surface, items){\n    if (!items || !items.length) return;\n    var ownerField = surface === 'story' ? 'ownerUid' : 'authorUid';\n    var idField = surface === 'story' ? 'storyId' : 'postId';\n    var root = surface === 'story' ? 'stories' : 'posts';\n    (items || []).forEach(function(record){\n      if (!shouldAutoPublishLaunchRecord(record, ownerField)) return;\n      var id = record[idField] || record.id || '';\n      if (!id || state.launchAutoPublishClaims[root + '/' + id]) return;\n      var payload = autoPublishPayload();\n      payload.visibility = normalizeVisibility(record.visibility || (record.entity && record.entity.visibility) || 'public');\n      payload.contentRating = normalizeContentRating(record.contentRating || (record.entity && record.entity.contentRating) || 'standard');\n      payload.accessGate = normalizeAccessGate(record.accessGate || (record.entity && record.entity.accessGate) || '');\n      payload.entity = Object.assign({}, payload.entity || {}, {\n        visibility: payload.visibility,\n        contentRating: payload.contentRating,\n        accessGate: payload.accessGate\n      });\n      state.launchAutoPublishClaims[root + '/' + id] = now();\n      if (surface === 'post') saveLocalPostStateOverride(id, payload);\n      setDoc(root + '/' + id, payload, true)\n        .then(function(){ return surface === 'story' ? skipLegacyUserStoryShadow(id) : null; })\n        .then(function(){ return setDoc('moderationQueue/' + id, { state: 'approved', reviewedBy: uid(), reviewedAt: serverTimestamp(), selfReviewed: true }, true).catch(function(){ return null; }); })\n        .then(function(){ return addDoc('founderAudit', { action: surface + '.launchAutoPublished', actorUid: uid(), sourcePath: root + '/' + id, firestorePath: PATHS.founderAudit, selfReviewed: true }).catch(function(){ return null; }); })\n        .catch(function(error){ queueDraft(surface + '-launch-auto-publish', { id: id, sourcePath: root + '/' + id }, error); delete state.launchAutoPublishClaims[root + '/' + id]; });\n    });\n  }\n  function skipLegacyUserStoryShadow(storyId){\n    claim('legacy-user-story-shadow:deconstructed', { storyId: storyId || '', canonical: 'stories', reason: 'canonical-supabase-story-row-is-owner' });\n    return Promise.resolve(null);\n  }\n  function submitModerationQueueViaProxy(payload){\n    return fetch('/apps/dsd-firebase-custom-token/supabase/moderation-queue', {\n      method: 'POST',\n      credentials: 'include',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify(payload || {})\n    }).then(function(response){\n      return response.text().then(function(text){\n        var body = {};\n        try { body = text ? JSON.parse(text) : {}; } catch(e) { body = { raw: text }; }\n        if (!response.ok || body.ok === false) {\n          var error = new Error(body && (body.message || body.error) || ('moderation queue submit failed: ' + response.status));\n          error.status = response.status;\n          error.body = body;\n          throw error;\n        }\n        return body;\n      });\n    });\n  }\n  function maybeQueueModeration(id, surface, sourcePath, preview){\n    return Promise.resolve(null);\n  }\n  function submissionStatusLabel(noun){\n    return noun + ' published.';\n  }\n  function accountRestrictionState(){\n    var p = state.profile || {};\n    var candidates = [\n      p.accountState,\n      p.status,\n      p.moderation && p.moderation.state,\n      p.founderGovernance && p.founderGovernance.state\n    ];\n    for (var i = 0; i < candidates.length; i++) {\n      var value = String(candidates[i] || '').toLowerCase();\n      if (value === 'suspended' || value === 'disabled' || value === 'deleted') return value;\n    }\n    return '';\n  }\n  function hasAccountRestriction(){ return !!accountRestrictionState(); }\n  function hasActiveProfile(){\n    function mark(result, details){\n      try {\n        details = details || {};\n        document.documentElement.setAttribute('data-dsd-active-profile-result', result ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-has-customer', details.hasCustomer ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-key-present', details.keyPresent ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-session-key-present', details.sessionKeyPresent ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-store-scoped', details.storeScoped ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-private-resolved', details.privateResolved ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-bridge-checked', state.bridgeChecked ? 'true' : 'false');\n        document.documentElement.setAttribute('data-dsd-active-profile-reason', details.reason || '');\n      } catch(e){}\n      return result;\n    }\n    var has = hasCustomer();\n    var restricted = hasAccountRestriction();\n    if (!has || restricted) return mark(false, { hasCustomer: has, reason: restricted ? 'restricted' : 'no-customer' });\n    var c = customer() || {};\n    var key = nonPlaceholderProfileKey(activeProfileKeyValue() || profileKey() || customerProfileKeyValue());\n    var storeScoped = c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true || !!state.sessionProfileKey;\n    var details = { hasCustomer: has, keyPresent: !!key, sessionKeyPresent: !!state.sessionProfileKey, storeScoped: storeScoped, privateResolved: privateBridgeCanonicalProfileResolved() };\n    if (!key || looksLikeRawEmail(key)) return mark(false, Object.assign(details, { reason: 'missing-safe-key' }));\n    var activeProfileRecord = profileWithPublicMirror(state.profile || publicProfileByUid(actorUid()) || publicProfileByKey(key) || {}) || {};\n    var activeProfileComplete = activeProfileRecord.setupComplete === true || activeProfileRecord.setup_complete === true || String(activeProfileRecord.status || '').toLowerCase() === 'active';\n    if (activeProfileComplete && actorRelationshipIdentity()) return mark(true, Object.assign(details, { reason: 'canonical-profile-resolved' }));\n    if (c.privateIdentityBridgeRequired === true || c.storeScopedIdentity === true) {\n      if (customerProfileKeyValue()) return mark(true, Object.assign(details, { reason: 'store-scoped-key' }));\n      return mark(privateBridgeCanonicalProfileResolved(), Object.assign(details, { reason: 'private-bridge' }));\n    }\n    return mark(!!(!state.bridgeChecked || !state.profile || state.profile.setupComplete !== false), Object.assign(details, { reason: 'default' }));\n  }\n  function tokenClaims(){ return state.firebaseUser && state.firebaseUser.claims || {}; }\n  function customerTags(){\n    return [];\n  }\n  function deriveMembership(){\n    var token = tokenClaims();\n    var supabaseClaims = window.DSDSupabaseSessionClaims || {};\n    var serverEntitlement = state.supabaseEntitlement || {};\n    var shopifyMembership = customer() && customer().membership || {};\n    var tokenActive = token.dsd_plus === true || token.dsdPlus === true || token.membership_active === true || token.membershipActive === true || token.membership === 'dsd_plus' || supabaseClaims.dsd_plus === true || serverEntitlement.dsdPlus === true || shopifyMembership.active === true || shopifyMembership.dsdPlus === true;\n    var tier = String(token.membership_tier || token.membershipTier || token.dsd_plus_tier || supabaseClaims.dsd_plus_tier || serverEntitlement.tier || shopifyMembership.tier || '').trim();\n    var membership = {\n      active: !!tokenActive,\n      tier: tokenActive ? tier : '',\n      source: tokenActive ? (serverEntitlement.source || supabaseClaims.entitlement_source || shopifyMembership.source || 'shopify-app-proxy-verified') : 'none'\n    };\n    state.membership = membership;\n    return membership;\n  }\n  function membershipCachePayload(){\n    var c = customer();\n    var membership = deriveMembership();\n    return {\n      uid: uid(),\n      membership: membership,\n      membershipSyncedAt: serverTimestamp(),\n      membershipSource: 'shopify-app-proxy-verified',\n      accountAuthority: 'shopify-session',\n      authBridge: 'firebase-custom-token',\n      firestorePath: PATHS.user\n    };\n  }\n  function saveMembershipCacheIfAvailable(){\n    var firebaseUid = uid();\n    if (!firebaseUid) {\n      claim('membership-cache:deconstructed-empty-firebase-uid', {\n        owner: 'LaunchSocialActivation.ProfileRenderer',\n        reason: 'Supabase profile/public_profiles are canonical during new-store cutover; users/{uid} cache requires a real Firebase uid'\n      });\n      return Promise.resolve(null);\n    }\n    return setDoc('users/' + firebaseUid, membershipCachePayload(), true).catch(function(error){\n      claim('profile-membership-cache:rls-blocked', { profileKey: profileKey(), error: error && error.message || String(error) });\n      return null;\n    });\n  }\n  function isOver18(){\n    var token = tokenClaims();\n    var r = roles();\n    var profile = profileWithPublicMirror(state.profile || publicProfileByUid(actorUid()) || publicProfileByKey(activeProfileKeyValue() || profileKey() || '') || {}) || {};\n    var profileAge = Number(profile.age || 0);\n    var birthdate = profile.birthdate;\n    var birthYear = birthdate && /^\\d{4}-\\d{2}-\\d{2}$/.test(String(birthdate)) ? Number(String(birthdate).slice(0, 4)) : 0;\n    var birthOk = birthYear ? (Date.now() - new Date(String(birthdate) + 'T00:00:00').getTime()) >= 567648000000 : false;\n    var profileAdult = profile.ageVerified === true || profile.over18 === true || profileAge >= 18 || birthOk;\n    return !!(hasCustomer() && (token.age_verified || token.adult_verified || token.over_18 || profileAdult || r.indexOf('founder') !== -1 || r.indexOf('moderator') !== -1));\n  }\n  function adultContentEnabled(){\n    var r = roles();\n    if (r.indexOf('founder') !== -1 || r.indexOf('moderator') !== -1) return true;\n    var profile = profileWithPublicMirror(state.profile || publicProfileByUid(actorUid()) || publicProfileByKey(activeProfileKeyValue() || profileKey() || '') || {}) || {};\n    return !!(isOver18() && (!profile || profile.adultContentEnabled !== false));\n  }\n  function hasDsdPlus(){\n    var token = tokenClaims();\n    var r = roles();\n    var cached = deriveMembership();\n    var serverEntitlement = state.supabaseEntitlement || {};\n    return !!(hasCustomer() && (cached.active === true || token.dsd_plus || token.dsdPlus || token.membership === 'dsd_plus' || token.membership_active === true || serverEntitlement.dsdPlus === true || r.indexOf('dsd_plus') !== -1));\n  }\n  function canViewClassified(record){\n    record = record || {};\n    if (recordOwnedByCurrentProfile(record) || canModerate()) return true;\n    var rating = String(record.contentRating || record.content_rating || (record.entity && (record.entity.contentRating || record.entity.content_rating)) || 'standard').toLowerCase();\n    var gate = String(record.accessGate || record.access_gate || (record.entity && (record.entity.accessGate || record.entity.access_gate)) || '').toLowerCase();\n    if (gate === 'dsd_plus' || gate === 'gated' || rating === 'gated') return hasDsdPlus();\n    if (rating === 'explicit' || rating === 'restricted') return isOver18() && adultContentEnabled();\n    if (rating === 'adult' || rating === 'mature' || rating === 'sensitive') return isOver18();\n    return true;\n  }\n  function canViewPrivateRecord(record){\n    if (!record) return false;\n    if (recordOwnedByCurrentProfile(record) || canModerate()) return true;\n    var visibility = normalizeVisibility(record.visibility || (record.entity && record.entity.visibility) || 'public');\n    if (visibility !== 'private') return true;\n    var authorUid = record.authorUid || record.ownerUid || record.uid || '';\n    if (authorUid && state.followingByUid && state.followingByUid[authorUid]) return true;\n    var authorKey = clean(record.authorProfileKey || record.ownerProfileKey || record.profileKey || '', '').toLowerCase();\n    if (!authorKey) return false;\n    return (state.followingRecords || []).some(function(item){\n      if (!item || item.state !== 'active') return false;\n      var targetKey = clean(item.targetProfileKey || item.ownerProfileKey || item.profileKey || '', '').toLowerCase();\n      return !!(targetKey && targetKey === authorKey);\n    });\n  }\n  function canRenderGatedShell(){\n    return !hasDsdPlus() && !canModerate();\n  }\n  function normalizeVisibility(value){\n    value = String(value || 'public').toLowerCase();\n    if (value === 'private') return 'private';\n    return 'public';\n  }\n  function normalizeContentRating(value){\n    value = String(value || 'standard').toLowerCase();\n    if (value === 'adult') return 'mature';\n    if (value === 'mature' || value === 'explicit' || value === 'gated') return value;\n    return 'standard';\n  }\n  function normalizeAccessGate(value){\n    value = String(value || '').toLowerCase();\n    return value === 'dsd_plus' || value === 'gated' ? 'dsd_plus' : '';\n  }\n  function visibilityPolicyFromInput(input){\n    input = input || {};\n    var rawVisibility = String(input.visibility || 'public').toLowerCase();\n    var explicitRating = String(input.contentRating || input.content_rating || '').toLowerCase();\n    var explicitGate = String(input.accessGate || input.access_gate || '').toLowerCase();\n    var selectedPolicy = !explicitRating && !explicitGate ? policyFromSelectValue(rawVisibility) : null;\n    var visibility = selectedPolicy ? selectedPolicy.visibility : normalizeVisibility(rawVisibility);\n    var rating = selectedPolicy ? selectedPolicy.contentRating : normalizeContentRating(explicitRating);\n    var accessGate = selectedPolicy ? selectedPolicy.accessGate : normalizeAccessGate(explicitGate);\n    if (rating === 'gated' || accessGate === 'dsd_plus' || rawVisibility === 'gated') {\n      visibility = 'public';\n      rating = 'gated';\n      accessGate = 'dsd_plus';\n    } else if (rating === 'explicit') {\n      accessGate = '';\n    } else if (rating === 'mature') {\n      accessGate = '';\n    } else {\n      rating = 'standard';\n      accessGate = '';\n    }\n    return { visibility: visibility, contentRating: rating, accessGate: accessGate };\n  }\n  function policyFromSelectValue(value){\n    value = String(value || 'public').toLowerCase();\n    if (value === 'private') return { visibility: 'private', contentRating: 'standard', accessGate: '' };\n    if (value === 'mature') return { visibility: 'public', contentRating: 'mature', accessGate: '' };\n    if (value === 'explicit') return { visibility: 'public', contentRating: 'explicit', accessGate: '' };\n    if (value === 'gated') return { visibility: 'public', contentRating: 'gated', accessGate: 'dsd_plus' };\n    return { visibility: 'public', contentRating: 'standard', accessGate: '' };\n  }\n  function profileAgePolicy(form){\n    var birthdateField = formControl(form, 'birthdate');\n    var ageField = formControl(form, 'age');\n    var birthdate = birthdateField ? String(birthdateField.value || '').trim() : '';\n    var existingAge = Number(state.profile && state.profile.age || 0);\n    var age = ageField && String(ageField.value || '').trim() ? Number(ageField.value || 0) : existingAge;\n    if (birthdate && /^\\d{4}-\\d{2}-\\d{2}$/.test(birthdate)) {\n      var adult = (Date.now() - new Date(birthdate + 'T00:00:00').getTime()) >= 567648000000;\n      return { birthdate: birthdate, age: adult ? Math.max(age || 18, 18) : Math.max(age || 0, 1), over18: adult };\n    }\n    var preserveExistingBirthdate = !birthdateField && state.profile && state.profile.birthdate;\n    return { birthdate: preserveExistingBirthdate || '', age: age || 0, over18: age >= 18 || state.profile && (state.profile.ageVerified === true || state.profile.over18 === true) };\n  }\n  function formControl(form, name){\n    if (!form || !name) return null;\n    if (form.elements) {\n      if (form.elements[name]) return form.elements[name];\n      if (typeof form.elements.namedItem === 'function') {\n        var named = form.elements.namedItem(name);\n        if (named) return named;\n      }\n    }\n    try { return form.querySelector('[name=\"' + String(name).replace(/\"/g, '\\\\\"') + '\"]'); } catch(e){ return null; }\n  }\n  function isApprovedPublicRecord(record){\n    if (!isNormalContentRecord(record)) return false;\n    var statusFields = [\n      record && record.status,\n      record && record.state,\n      record && record.moderation_state,\n      record && record.moderationStatus,\n      record && record.moderation && record.moderation.state,\n      record && record.entity && (record.entity.moderationStatus || record.entity.moderation_status)\n    ].map(function(value){ return String(value || '').toLowerCase(); });\n    var visibility = String(record && (record.visibility || (record.entity && record.entity.visibility) || 'public') || 'public').toLowerCase();\n    var gate = String(record && (record.accessGate || record.access_gate || (record.entity && (record.entity.accessGate || record.entity.access_gate)) || '') || '').toLowerCase();\n    var rating = String(record && (record.contentRating || record.content_rating || (record.entity && (record.entity.contentRating || record.entity.content_rating)) || 'standard') || 'standard').toLowerCase();\n    var terminal = statusFields.some(function(value){ return ['deleted','archived','removed','hidden','rejected','blocked','disabled','expired'].indexOf(value) !== -1; });\n    var launchApproved = statusFields.indexOf('approved') !== -1 || statusFields.indexOf('pending') !== -1 || statusFields.indexOf('submitted') !== -1 || statusFields.every(function(value){ return !value; });\n    return !terminal && launchApproved && (visibility === 'public' || visibility === 'private' || visibility === 'gated' || gate === 'dsd_plus' || rating === 'gated' || rating === 'mature' || rating === 'explicit' || rating === 'adult' || rating === 'restricted');\n  }\n  function isGatedContentRecord(record){\n    var visibility = String(record && (record.visibility || (record.entity && record.entity.visibility) || '') || '').toLowerCase();\n    var gate = String(record && (record.accessGate || record.access_gate || (record.entity && (record.entity.accessGate || record.entity.access_gate)) || '') || '').toLowerCase();\n    var rating = String(record && (record.contentRating || record.content_rating || (record.entity && (record.entity.contentRating || record.entity.content_rating)) || '') || '').toLowerCase();\n    var shellPath = String(record && (record.migratedFromPath || record.sourcePath || '') || '').toLowerCase();\n    var shellId = String(record && (record.postId || record.storyId || record.id || '') || '').toLowerCase();\n    var shellTitle = String(record && (record.title || '') || '').toLowerCase();\n    return visibility === 'gated' || gate === 'dsd_plus' || gate === 'gated' || rating === 'gated' || shellPath.indexOf('gatedpostshells/') === 0 || shellId.indexOf('gated-shell-proof-shell') !== -1 || shellTitle === 'dsd+ members only';\n  }\n  function publicGatedShellRecord(record, kind){\n    record = record || {};\n    return Object.assign({}, record, {\n      gatedShell: true,\n      gatedStoryShell: kind === 'story',\n      body: '',\n      title: '',\n      media: [],\n      contentRating: 'gated',\n      accessGate: 'dsd_plus',\n      visibility: 'public',\n      entity: Object.assign({}, record.entity || {}, { visibility: 'public', contentRating: 'gated', accessGate: 'dsd_plus', moderationStatus: 'approved' })\n    });\n  }\n  function classifiedRestrictionType(record){\n    var visibility = String(record && (record.visibility || (record.entity && record.entity.visibility) || '') || '').toLowerCase();\n    var gate = String(record && (record.accessGate || record.access_gate || (record.entity && (record.entity.accessGate || record.entity.access_gate)) || '') || '').toLowerCase();\n    var rating = String(record && (record.contentRating || record.content_rating || (record.entity && (record.entity.contentRating || record.entity.content_rating)) || '') || '').toLowerCase();\n    var shellPath = String(record && (record.migratedFromPath || record.sourcePath || '') || '').toLowerCase();\n    var shellId = String(record && (record.postId || record.storyId || record.id || '') || '').toLowerCase();\n    if (visibility === 'gated' || gate === 'dsd_plus' || gate === 'gated' || rating === 'gated' || shellPath.indexOf('gatedpostshells/') === 0 || shellId.indexOf('gated-shell-proof-shell') !== -1) return 'gated';\n    if (visibility === 'private') return 'private';\n    if (rating === 'explicit' || rating === 'restricted') return 'explicit';\n    if (rating === 'adult' || rating === 'mature' || rating === 'sensitive') return 'mature';\n    return '';\n  }\n  function isRestrictedShellRecord(record){\n    return isPersistedGatedShellRecord(record);\n  }\n  function isPersistedGatedShellRecord(record){\n    if (!record) return false;\n    var entity = record.entity || {};\n    var type = String(record.type || entity.type || '').toLowerCase();\n    var sourcePath = String(record.migratedFromPath || record.sourcePath || '').toLowerCase();\n    var id = String(record.postId || record.storyId || record.id || '').toLowerCase();\n    var title = String(record.title || '').toLowerCase();\n    return record.restrictedShell === true ||\n      record.gatedShell === true ||\n      record.gatedStoryShell === true ||\n      type === 'gatedpostshell' ||\n      type === 'gatedstoryshell' ||\n      sourcePath.indexOf('gatedpostshells/') === 0 ||\n      sourcePath.indexOf('gatedstoryshells/') === 0 ||\n      id.indexOf('gated-shell-proof-shell') !== -1 ||\n      title === 'dsd+ members only';\n  }\n  function publicRestrictedShellRecord(record, kind, restriction){\n    record = record || {};\n    restriction = restriction || classifiedRestrictionType(record);\n    if (!restriction) return null;\n    var gated = restriction === 'gated';\n    return Object.assign({}, record, {\n      restrictedShell: true,\n      restrictedKind: restriction,\n      gatedShell: gated,\n      gatedStoryShell: gated && kind === 'story',\n      body: '',\n      title: '',\n      caption: '',\n      media: [],\n      poll: null,\n      contentRating: gated ? 'gated' : restriction,\n      accessGate: gated ? 'dsd_plus' : '',\n      visibility: 'public',\n      entity: Object.assign({}, record.entity || {}, { visibility: 'public', contentRating: gated ? 'gated' : restriction, accessGate: gated ? 'dsd_plus' : '', moderationStatus: 'approved' })\n    });\n  }\n  function genericPublicGatedShellRecord(kind){\n    var id = kind === 'story' ? 'dsd-plus-public-story-shell' : 'dsd-plus-public-post-shell';\n    return publicRestrictedShellRecord({\n      postId: id,\n      storyId: kind === 'story' ? id : '',\n      id: id,\n      status: 'approved',\n      visibility: 'public',\n      contentRating: 'gated',\n      accessGate: 'dsd_plus',\n      authorProfileKey: '',\n      authorDisplayName: 'DSD+ member',\n      ownerProfileKey: '',\n      ownerDisplayName: 'DSD+ member',\n      createdAt: '2026-07-06T00:00:00.000Z',\n      entity: { type: kind === 'story' ? 'gatedStoryShell' : 'gatedPostShell', visibility: 'public', contentRating: 'gated', accessGate: 'dsd_plus', moderationStatus: 'approved' }\n    }, kind, 'gated');\n  }\n  function applyFounderModerationLock(record, payload){\n    if (!record || canModerate()) return payload;\n    var restriction = classifiedRestrictionType(record);\n    if (!restriction) return payload;\n    var entity = record.entity || {};\n    var visibility = record.visibility || entity.visibility || 'public';\n    var contentRating = record.contentRating || record.content_rating || entity.contentRating || entity.content_rating || restriction;\n    var accessGate = record.accessGate || record.access_gate || entity.accessGate || entity.access_gate || (restriction === 'gated' ? 'dsd_plus' : '');\n    return Object.assign({}, payload || {}, {\n      visibility: visibility,\n      contentRating: contentRating,\n      accessGate: accessGate,\n      founderModerationLockPreserved: true,\n      moderation: Object.assign({}, (payload && payload.moderation) || {}, {\n        founderModerationLockPreserved: true,\n        lockedClassification: restriction\n      }),\n      entity: Object.assign({}, (payload && payload.entity) || {}, {\n        visibility: visibility,\n        contentRating: contentRating,\n        accessGate: accessGate\n      })\n    });\n  }\n  function readPersistedPrivateProfileForLock(profileKeyValue){\n    var key = clean(profileKeyValue || profileKey() || '', '');\n    if (supabaseAdapter() && key) return readSupabasePrivateProfileRowsByKey(key, { surface: 'private-profile-lock-read' }).then(function(rows){ return rows && rows[0] || null; }).catch(function(){ return null; });\n    return getDoc('profiles/' + uid()).catch(function(){ return null; }).then(function(existingPrivate){\n      return existingPrivate && existingPrivate.exists && existingPrivate.exists() && existingPrivate.data ? existingPrivate.data() || null : null;\n    });\n  }\n  function optionalProfileSelectError(error){\n    var message = String(error && error.message || error || '').toLowerCase();\n    return (message.indexOf('location') !== -1 || message.indexOf('banner_position') !== -1) && (message.indexOf('column') !== -1 || message.indexOf('schema cache') !== -1 || message.indexOf('pgrst') !== -1);\n  }\n  function readSupabasePrivateProfileRowsByKey(profileKeyValue, options){\n    var key = nonPlaceholderProfileKey(profileKeyValue || '');\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function' || !key) return Promise.resolve([]);\n    var opts = Object.assign({ force: true }, options || {});\n    return adapter.read('profiles', { select: SUPABASE_PRIVATE_PROFILE_BASE_SELECT, profile_key: 'eq.' + key, limit: 1 }, opts).then(function(rows){\n      if (!rows || !rows[0]) return rows || [];\n      return adapter.read('profiles', { select: SUPABASE_PRIVATE_PROFILE_OPTIONAL_SELECT, profile_key: 'eq.' + key, limit: 1 }, opts).then(function(optionalRows){\n        var optional = optionalRows && optionalRows[0] || null;\n        return optional ? [Object.assign({}, rows[0], optional)] : rows;\n      }).catch(function(error){\n        if (!optionalProfileSelectError(error)) claim('private-profile-optional-select:blocked', { profileKey: key, optionalColumns: SUPABASE_PRIVATE_PROFILE_OPTIONAL_SELECT, error: error && error.message || String(error) });\n        else claim('private-profile-optional-select:fallback', { profileKey: key, optionalColumns: SUPABASE_PRIVATE_PROFILE_OPTIONAL_SELECT, error: error && error.message || String(error) });\n        return rows;\n      });\n    });\n  }\n  function normalizeSupabaseProfileRecord(record, fallbackKey){\n    if (!record) return null;\n    var key = nonPlaceholderProfileKey(record.profileKey || record.profile_key || record.handle || fallbackKey || '');\n    if (!key) return null;\n    var profileUid = clean(record.uid || record.userId || record.user_id || record.supabaseUserId || record.supabase_user_id || record.appUserId || record.app_user_id || record.id || '', '');\n    var recordAge = Number(record.age || record.profileAge || record.profile_age || record.age_years || 0);\n    var birthdateAge = record.birthdate && /^\\d{4}-\\d{2}-\\d{2}$/.test(String(record.birthdate)) ? Math.floor((Date.now() - new Date(String(record.birthdate) + 'T00:00:00').getTime()) / 31557600000) : 0;\n    var ageVerified = record.ageVerified === true || record.age_verified === true || record.over18 === true || record.over_18 === true || recordAge >= 18 || birthdateAge >= 18;\n    var avatarId = record.avatarMediaId || record.avatar_media_id || record.profileImageMediaId || record.profile_image_media_id || record.photoMediaId || record.photo_media_id || record.imageMediaId || record.image_media_id || record.avatarImageId || record.avatar_image_id || record.avatarWasabiObjectKey || record.avatar_wasabi_object_key || record.photoWasabiObjectKey || record.photo_wasabi_object_key || record.avatarObjectKey || record.avatar_object_key || '';\n    var bannerId = record.bannerMediaId || record.banner_media_id || record.headerMediaId || record.header_media_id || record.coverMediaId || record.cover_media_id || record.backgroundMediaId || record.background_media_id || record.bannerImageId || record.banner_image_id || record.headerImageId || record.header_image_id || record.coverImageId || record.cover_image_id || record.bannerWasabiObjectKey || record.banner_wasabi_object_key || record.headerWasabiObjectKey || record.header_wasabi_object_key || record.coverWasabiObjectKey || record.cover_wasabi_object_key || record.bannerObjectKey || record.banner_object_key || record.headerObjectKey || record.header_object_key || record.coverObjectKey || record.cover_object_key || '';\n    return Object.assign({}, record, {\n      uid: profileUid,\n      userId: profileUid,\n      user_id: profileUid,\n      profileKey: key,\n      handle: nonPlaceholderProfileKey(record.handle || key) || key,\n      displayName: publicDisplayName(record.displayName || record.display_name || record.name || (isCanonicalFounder() && key === 'detroitskydaddy' ? 'Detroit Sky Daddy' : displayName()), 'DSD member'),\n      bio: record.bio || record.about || record.description || '',\n      locationCity: record.locationCity || record.location_city || record.city || '',\n      locationState: record.locationState || record.location_state || record.state || '',\n      location: record.location || [record.locationCity || record.location_city || record.city, record.locationState || record.location_state || record.state].filter(Boolean).join(', '),\n      birthdate: record.birthdate || '',\n      age: recordAge || birthdateAge || 0,\n      ageVerified: ageVerified,\n      adultContentEnabled: !!(ageVerified && (record.adultContentEnabled === true || record.adult_content_enabled === true)),\n      over18: ageVerified,\n      avatarMediaId: avatarId,\n      avatar_media_id: avatarId,\n      bannerMediaId: bannerId,\n      banner_media_id: bannerId,\n      headerMediaId: record.headerMediaId || record.header_media_id || bannerId,\n      coverMediaId: record.coverMediaId || record.cover_media_id || bannerId,\n      bannerPosition: record.bannerPosition || record.banner_position || record.headerPosition || record.header_position || record.coverPosition || record.cover_position || 'center',\n      setupComplete: record.setupComplete === true || record.setup_complete === true || record.status === 'active',\n      status: record.status || 'active',\n      accountAuthority: 'shopify-session',\n      authBridge: 'shopify-supabase-profile-key',\n      entity: Object.assign({ type: 'profile', visibility: record.visibility || 'public', moderationStatus: 'approved' }, record.entity || {})\n    });\n  }\n  function mergePrivateProfileCapabilities(baseProfile, privateProfile){\n    var base = baseProfile ? Object.assign({}, baseProfile) : {};\n    var privateRecord = normalizeSupabaseProfileRecord(privateProfile, base.profileKey || base.handle || '');\n    if (!privateRecord) return base;\n    var baseKey = normalizedProfileKeyValue(base.profileKey || base.handle || '');\n    var privateKey = normalizedProfileKeyValue(privateRecord.profileKey || privateRecord.handle || '');\n    if (baseKey && privateKey && baseKey !== privateKey) return base;\n    [\n      'birthdate','age','ageVerified','adultContentEnabled','over18',\n      'roles','platformRoles','permissions','governanceClaims','isFounder','isAdmin','isModerator',\n      'avatarMediaId','avatar_media_id','profileImageMediaId','profile_image_media_id','photoMediaId','photo_media_id','thumbnailMediaId',\n      'bannerMediaId','banner_media_id','headerMediaId','header_media_id','coverMediaId','cover_media_id','backgroundMediaId','background_media_id',\n      'avatarWasabiObjectKey','avatar_wasabi_object_key','photoWasabiObjectKey','photo_wasabi_object_key',\n      'bannerWasabiObjectKey','banner_wasabi_object_key','headerWasabiObjectKey','header_wasabi_object_key','coverWasabiObjectKey','cover_wasabi_object_key',\n      'bannerPosition','banner_position','headerPosition','header_position','coverPosition','cover_position'\n    ].forEach(function(key){\n      if (privateRecord[key] !== undefined && privateRecord[key] !== null && privateRecord[key] !== '') base[key] = privateRecord[key];\n    });\n    base = profileMediaPatchAliases(base);\n    if (!base.uid && privateRecord.uid) base.uid = privateRecord.uid;\n    if (!base.userId && privateRecord.userId) base.userId = privateRecord.userId;\n    if (!base.user_id && privateRecord.user_id) base.user_id = privateRecord.user_id;\n    if (!base.status && privateRecord.status) base.status = privateRecord.status;\n    if (privateRecord.setupComplete === true) base.setupComplete = true;\n    if (privateRecord.accountAuthority) base.accountAuthority = privateRecord.accountAuthority;\n    base.authBridge = privateRecord.authBridge || base.authBridge || 'shopify-supabase-profile-key';\n    return base;\n  }\n  function readSupabasePrivateProfileByKey(profileKeyValue){\n    var key = nonPlaceholderProfileKey(profileKeyValue || '');\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function' || !key) return Promise.resolve(null);\n    return readSupabasePrivateProfileRowsByKey(key, { force: true, surface: 'private-profile-capability-hydration' })\n      .then(function(rows){ return normalizeSupabaseProfileRecord(rows && rows[0] || null, key); })\n      .catch(function(error){\n        claim('private-profile-capability-hydration:blocked', { profileKey: key, error: error && error.message || String(error) });\n        return null;\n      });\n  }\n  function mergePublicProfileMediaFromCanonicalProfile(publicProfile, profileKeyValue){\n    var key = nonPlaceholderProfileKey(profileKeyValue || publicProfile && (publicProfile.profileKey || publicProfile.handle) || '');\n    var adapter = supabaseAdapter();\n    if (!publicProfile || !adapter || typeof adapter.read !== 'function' || !key) return Promise.resolve(publicProfile);\n    if (canonicalProfileAvatarMediaId(publicProfile) && canonicalProfileBannerMediaId(publicProfile)) return Promise.resolve(publicProfile);\n    return readSupabasePrivateProfileRowsByKey(key, { force: true, surface: 'public-profile-media-recovery' }).then(function(rows){\n      var canonical = normalizeSupabaseProfileRecord(rows && rows[0] || null, key);\n      if (!canonical) return publicProfile;\n      return Object.assign({}, publicProfile, {\n        avatarMediaId: canonicalProfileAvatarMediaId(publicProfile) || canonicalProfileAvatarMediaId(canonical) || '',\n        avatar_media_id: publicProfile.avatar_media_id || canonical.avatar_media_id || canonical.avatarMediaId || '',\n        bannerMediaId: canonicalProfileBannerMediaId(publicProfile) || canonicalProfileBannerMediaId(canonical) || '',\n        banner_media_id: publicProfile.banner_media_id || canonical.banner_media_id || canonical.bannerMediaId || '',\n        headerMediaId: publicProfile.headerMediaId || canonical.headerMediaId || canonical.bannerMediaId || '',\n        header_media_id: publicProfile.header_media_id || canonical.header_media_id || canonical.banner_media_id || canonical.bannerMediaId || '',\n        bannerWasabiObjectKey: publicProfile.bannerWasabiObjectKey || canonical.bannerWasabiObjectKey || canonical.banner_wasabi_object_key || '',\n        banner_wasabi_object_key: publicProfile.banner_wasabi_object_key || canonical.banner_wasabi_object_key || canonical.bannerWasabiObjectKey || '',\n        avatarWasabiObjectKey: publicProfile.avatarWasabiObjectKey || canonical.avatarWasabiObjectKey || canonical.avatar_wasabi_object_key || '',\n        avatar_wasabi_object_key: publicProfile.avatar_wasabi_object_key || canonical.avatar_wasabi_object_key || canonical.avatarWasabiObjectKey || ''\n      });\n    }).catch(function(error){\n      claim('public-profile-media-recovery:blocked', { profileKey: key, error: error && error.message || String(error) });\n      return publicProfile;\n    }).then(function(profile){\n      if (!profile || canonicalProfileBannerMediaId(profile)) return profile;\n      return adapter.read('media_objects', {\n        select: 'id,legacy_media_id,wasabi_object_key,kind,content_type,owner_profile_key,surface,slot,visibility,content_rating,access_gate,moderation_state,status,deleted_at,hidden_at,archived_at,updated_at,created_at',\n        owner_profile_key: 'eq.' + key,\n        surface: 'eq.profile',\n        slot: 'eq.banner',\n        visibility: 'eq.public',\n        moderation_state: 'eq.approved',\n        status: 'eq.uploaded',\n        deleted_at: 'is.null',\n        hidden_at: 'is.null',\n        archived_at: 'is.null',\n        order: 'updated_at.desc',\n        limit: 1\n      }, { force: true, publicRead: true, surface: 'public-profile-banner-media-object-recovery' }).then(function(rows){\n        var media = rows && rows[0] || null;\n        var mediaId = media && (media.legacy_media_id || media.id || media.wasabi_object_key) || '';\n        if (!mediaId) return profile;\n        return Object.assign({}, profile, {\n          bannerMediaId: mediaId,\n          banner_media_id: mediaId,\n          headerMediaId: profile.headerMediaId || mediaId,\n          header_media_id: profile.header_media_id || mediaId,\n          bannerWasabiObjectKey: profile.bannerWasabiObjectKey || media.wasabi_object_key || '',\n          banner_wasabi_object_key: profile.banner_wasabi_object_key || media.wasabi_object_key || '',\n          bannerMediaRecoverySource: 'supabase-media-objects'\n        });\n      }).catch(function(error){\n        claim('public-profile-banner-media-object-recovery:blocked', { profileKey: key, error: error && error.message || String(error) });\n        return profile;\n      });\n    });\n  }\n  function recoverPublicProfileBannerFromMediaObjects(profile, context){\n    var key = nonPlaceholderProfileKey(profile && (profile.profileKey || profile.handle) || '');\n    var adapter = supabaseAdapter();\n    if (!profile || !key || canonicalProfileBannerMediaId(profile) || !adapter || typeof adapter.read !== 'function') return Promise.resolve(profile);\n    state.publicProfileBannerRecovery = state.publicProfileBannerRecovery || {};\n    if (state.publicProfileBannerRecovery[key]) return Promise.resolve(profile);\n    state.publicProfileBannerRecovery[key] = 'pending';\n    return adapter.read('media_objects', {\n      select: 'id,legacy_media_id,wasabi_object_key,kind,content_type,owner_profile_key,surface,slot,visibility,content_rating,access_gate,moderation_state,status,deleted_at,hidden_at,archived_at,updated_at,created_at',\n      owner_profile_key: 'eq.' + key,\n      surface: 'eq.profile',\n      slot: 'eq.banner',\n      visibility: 'eq.public',\n      moderation_state: 'eq.approved',\n      status: 'eq.uploaded',\n      deleted_at: 'is.null',\n      hidden_at: 'is.null',\n      archived_at: 'is.null',\n      order: 'updated_at.desc',\n      limit: 1\n    }, { force: true, publicRead: true, surface: context || 'public-profile-render-banner-recovery' }).then(function(rows){\n      var media = rows && rows[0] || null;\n      var mediaId = media && (media.legacy_media_id || media.id || media.wasabi_object_key) || '';\n      if (!mediaId) {\n        state.publicProfileBannerRecovery[key] = 'missing';\n        return profile;\n      }\n      var recovered = Object.assign({}, profile, {\n        bannerMediaId: mediaId,\n        banner_media_id: mediaId,\n        headerMediaId: profile.headerMediaId || mediaId,\n        header_media_id: profile.header_media_id || mediaId,\n        bannerWasabiObjectKey: profile.bannerWasabiObjectKey || media.wasabi_object_key || '',\n        banner_wasabi_object_key: profile.banner_wasabi_object_key || media.wasabi_object_key || '',\n        bannerMediaRecoverySource: 'supabase-media-objects'\n      });\n      state.publicProfileBannerRecovery[key] = 'done';\n      state.publicProfiles = dedupePublicProfiles((state.publicProfiles || []).map(function(item){\n        var itemKey = nonPlaceholderProfileKey(item && (item.profileKey || item.handle) || '');\n        return itemKey === key ? recovered : item;\n      }).concat([recovered]));\n      if (state.viewProfile) {\n        var viewedKey = nonPlaceholderProfileKey(state.viewProfile.profileKey || state.viewProfile.handle || '');\n        if (viewedKey === key) state.viewProfile = Object.assign({}, state.viewProfile, recovered);\n      }\n      if (state.profile) {\n        var activeKey = nonPlaceholderProfileKey(state.profile.profileKey || state.profile.handle || profileKey() || '');\n        if (activeKey === key) state.profile = profileWithPublicMirror(Object.assign({}, state.profile, recovered));\n      }\n      publishPublicProfiles(state.publicProfiles);\n      renderProfileIdentity();\n      renderDiscovery();\n      return recovered;\n    }).catch(function(error){\n      state.publicProfileBannerRecovery[key] = 'blocked';\n      claim('public-profile-render-banner-recovery:blocked', { profileKey: key, error: error && error.message || String(error) });\n      return profile;\n    });\n  }\n  function readSupabaseProfileByKey(profileKeyValue){\n    var key = nonPlaceholderProfileKey(profileKeyValue || '');\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function' || !key) return Promise.resolve(null);\n    return adapter.read('public_profiles', { select: SUPABASE_PUBLIC_PROFILE_SELECT, profile_key: 'eq.' + key, limit: 1 }, { force: true })\n      .then(function(rows){ return rows && rows[0] || null; })\n      .then(function(publicRow){\n        if (publicRow) return publicRow;\n        return adapter.read('public_profiles', { select: SUPABASE_PUBLIC_PROFILE_SELECT, handle: 'eq.' + key, limit: 1 }, { force: true })\n          .then(function(rows){ return rows && rows[0] || null; });\n      })\n      .then(function(publicRow){\n        if (publicRow) return publicRow;\n        return readSupabasePrivateProfileRowsByKey(key, { force: true })\n          .then(function(rows){ return rows && rows[0] || null; });\n      })\n      .then(function(row){ return normalizeSupabaseProfileRecord(row, key); })\n      .then(function(profile){ return mergePublicProfileMediaFromCanonicalProfile(profile, key); })\n      .catch(function(error){\n        claim('shopify-supabase-profile-key:read-failed', { key: key, error: error && error.message || String(error) });\n        return null;\n      });\n  }\n  function activateCustomerScopedProfile(profile){\n    if (!profile) return null;\n    profile = mergePrivateProfileCapabilities(profile, state.profile);\n    profile = profileWithPublicMirror(profile);\n    profile.setupComplete = profile.setupComplete !== false;\n    profile.status = profile.status || 'active';\n    profile.authBridge = profile.authBridge || 'shopify-supabase-profile-key';\n    state.profileExists = true;\n    state.profile = profile;\n    state.publicProfiles = dedupePublicProfiles((state.publicProfiles || []).concat([publicProfilePayload(profile)]));\n    publishPublicProfiles(state.publicProfiles);\n    clearStaleConnectionStatus();\n    return state.profile;\n  }\n  function restrictedShellText(record, kind){\n    var restriction = record && record.restrictedKind || classifiedRestrictionType(record) || 'gated';\n    var noun = kind === 'story' ? 'story' : (kind === 'profile' ? 'profile' : 'post');\n    if (restriction === 'explicit') {\n      return { title: 'Adult content ' + noun, body: 'Log in, verify 18+, and enable adult content to view this ' + noun + '.', cta: 'Log in', href: loginReturnUrl(), short: '18+' };\n    }\n    if (restriction === 'mature') {\n      return { title: 'Age-restricted ' + noun, body: 'Log in with age verification to view this ' + noun + '.', cta: 'Log in', href: loginReturnUrl(), short: 'Age restricted' };\n    }\n    if (restriction === 'private') {\n      return { title: 'Private profile', body: 'Follow this profile to see approved profile posts.', cta: 'Back to discovery', href: '/pages/users', short: 'Private' };\n    }\n    return { title: 'DSD+ members only', body: 'This ' + noun + ' is available to active DSD+ members.', cta: hasCustomer() ? 'Join or upgrade DSD+' : 'Log in for DSD+', href: hasCustomer() ? '/a/membership/dashboard' : loginReturnUrl(), short: 'DSD+' };\n  }\n  function publicRenderablePost(record){\n    if (!isNormalContentRecord(record) || !publicRecordVisible(record) || !isApprovedPublicRecord(record)) return null;\n    if (duplicateProfileArtifactKey(record.authorProfileKey || record.ownerProfileKey || record.profileKey || '')) return null;\n    if (isPersistedGatedShellRecord(record) && !canRenderGatedShell()) return null;\n    var visibility = record.visibility || (record.entity && record.entity.visibility) || 'public';\n    var restriction = classifiedRestrictionType(record);\n    if (restriction && (!canViewClassified(record) || !canViewPrivateRecord(record))) return publicRestrictedShellRecord(record, 'post', restriction);\n    if (canViewClassified(record) && canViewPrivateRecord(record) && (visibility === 'public' || visibility === 'private' || visibility === 'gated' || restriction === 'gated' || restriction === 'private')) return record;\n    return null;\n  }\n  function publicRenderableStory(record){\n    if (!isNormalContentRecord(record) || !publicRecordVisible(record) || !isApprovedPublicRecord(record)) return null;\n    if (storyExpired(record)) return null;\n    if (isPersistedGatedShellRecord(record) && !canRenderGatedShell()) return null;\n    var restriction = classifiedRestrictionType(record);\n    if (restriction && (!canViewClassified(record) || !canViewPrivateRecord(record))) return publicRestrictedShellRecord(record, 'story', restriction);\n    if (canViewClassified(record) && canViewPrivateRecord(record)) return record;\n    return null;\n  }\n  function classifiedVisible(record){\n    return !!(record && canViewClassified(record) && canViewPrivateRecord(record));\n  }\n  function storyExpired(record){\n    var explicitExpiry = record && (record.expiresAt || record.expires_at || record.expireAt || record.ttl || record.expires);\n    var expiresAt = valueMillis(explicitExpiry);\n    if (!expiresAt && record) {\n      var createdAt = valueMillis(record.createdAt || record.created_at || record.publishedAt || record.published_at || record.submittedAt || record.submitted_at || record.updatedAt || record.updated_at);\n      if (createdAt) expiresAt = createdAt + 86400000;\n    }\n    return !!(expiresAt && expiresAt <= Date.now());\n  }\n  function activeStoryRecords(items){\n    return (items || []).filter(function(story){\n      return isNormalContentRecord(story) && !storyExpired(story);\n    });\n  }\n  function normalizedRecordState(record){\n    return String(record && (\n      record.status ||\n      record.state ||\n      record.moderation_state ||\n      record.moderationStatus ||\n      record.account_state ||\n      (record.moderation && record.moderation.state) ||\n      (record.entity && record.entity.moderationStatus) ||\n      (record.entity && record.entity.moderation_status) ||\n      ''\n    ) || '').toLowerCase();\n  }\n  function hasTerminalContentFlag(record){\n    if (!record) return false;\n    return record.deleted === true ||\n      record.isDeleted === true ||\n      record.archived === true ||\n      record.isArchived === true ||\n      record.removed === true ||\n      record.isRemoved === true ||\n      record.hidden === true ||\n      record.isHidden === true ||\n      !!record.deletedAt ||\n      !!record.deleted_at ||\n      !!record.archivedAt ||\n      !!record.archived_at ||\n      !!record.removedAt ||\n      !!record.removed_at ||\n      !!record.hiddenAt ||\n      !!record.hidden_at;\n  }\n  function isNormalContentRecord(record){\n    var stateValue = normalizedRecordState(record);\n    var postId = clean(record && (record.postId || record.legacy_post_id || record.id || ''), '').toLowerCase();\n    if (postId.indexOf('story-') === 0 && !record.storyId && !(record.entity && String(record.entity.type || '').toLowerCase().indexOf('story') !== -1)) return false;\n    return !staleLaunchTestContentRecord(record) && !hasTerminalContentFlag(record) && ['deleted','archived','removed','hidden','rejected','blocked','disabled'].indexOf(stateValue) === -1;\n  }\n  function canonicalFounderProfileRecord(record){\n    return !!(record && (record.publicDistribution === true || (record.entity && record.entity.publicDistribution === true)));\n  }\n  function recordOwnedByCurrentProfile(record){\n    if (!record || !hasCustomer()) return false;\n    var currentKey = activeProfileKeyValue() || cleanEmpty(profileKey() || '');\n    var recordKey = cleanEmpty(record.authorProfileKey || record.ownerProfileKey || record.profileKey || '');\n    if (identityMatchesCurrent(record.ownerUid || record.authorUid || record.uid || record.userId || '', recordKey)) return true;\n    return !!(currentKey && recordKey && currentKey === recordKey);\n  }\n  function normalizePublicDistributionRecord(record){\n    if (!record) return record;\n    var status = String(record.status || (record.moderation && record.moderation.state) || (record.entity && record.entity.moderationStatus) || '').toLowerCase();\n    var visibility = String(record.visibility || (record.entity && record.entity.visibility) || 'public').toLowerCase();\n    if (status === 'approved' && visibility !== 'private' && canonicalFounderProfileRecord(record)) {\n      return Object.assign({}, record, {\n        visibility: 'public',\n        entity: Object.assign({}, record.entity || {}, { visibility: 'public', moderationStatus: 'approved' })\n      });\n    }\n    return record;\n  }\n  function approvedPublicRecords(items){\n    return (items || []).map(normalizePublicDistributionRecord).filter(isApprovedPublicRecord);\n  }\n  function isAdultAllowed(){ return isOver18(); }\n  function entityMeta(type, visibility, rating, extra){\n    return Object.assign({\n      type: type,\n      ownerUid: actorUid(),\n      ownerProfileKey: activeProfileKeyValue() || profileKey(),\n      visibility: visibility || 'public',\n      contentRating: rating || 'standard',\n      moderationStatus: 'approved',\n      universeId: '',\n      galaxyId: '',\n      createdBy: OWNER\n    }, extra || {});\n  }\n  function authoredEntityMeta(type, visibility, rating, author, extra){\n    author = author || {};\n    return Object.assign(entityMeta(type, visibility, rating, extra), {\n      ownerUid: author.uid || '',\n      ownerProfileKey: author.profileKey || ''\n    });\n  }\n  function ratingHelp(){\n    return '';\n  }\n  function publicationHelpButton(label){\n    var title = 'Public posts and stories can be seen by eligible viewers. Private posts and stories are visible to the owner, moderators, and approved followers. Mature/Explicit require adult access. Gated requires active DSD+.';\n    return '<span class=\"dsd-publication-help\" role=\"note\"><button type=\"button\" aria-label=\"' + html((label || 'Content') + ' visibility help') + '\">?</button><span>' + html(title) + '</span></span>';\n  }\n  function publicationOptionAllowed(value){\n    value = String(value || 'public').toLowerCase();\n    if (value === 'public' || value === 'private') return true;\n    if (canModerate()) return true;\n    if (value === 'mature') return isOver18();\n    if (value === 'explicit') return adultContentEnabled();\n    if (value === 'gated') return hasDsdPlus();\n    return false;\n  }\n  function publicationOptionAllowedForForm(value, form){\n    value = String(value || 'public').toLowerCase();\n    if (!form || !form.matches || !form.matches('[data-dsd-profile-setup-form]')) return publicationOptionAllowed(value);\n    if (value === 'public' || value === 'private') return true;\n    if (canModerate()) return true;\n    var policy = profileAgePolicy(form);\n    var adultToggle = formControl(form, 'adultContentEnabled');\n    if (value === 'mature') return !!policy.over18;\n    if (value === 'explicit') return !!(policy.over18 && adultToggle && adultToggle.checked);\n    if (value === 'gated') return hasDsdPlus();\n    return false;\n  }\n  function publicationOptionHTML(value, label){\n    var allowed = publicationOptionAllowed(value);\n    return '<option value=\"' + html(value) + '\"' + (allowed ? '' : ' disabled') + ' data-dsd-publication-option=\"' + html(value) + '\">' + html(label || value) + '</option>';\n  }\n  function publicationOptions(label){\n    var select = '<select name=\"visibility\" aria-label=\"' + html(label || 'Content') + ' visibility\" data-dsd-publication-policy=\"viewer-capability\">' +\n      publicationOptionHTML('public', 'Public') +\n      publicationOptionHTML('private', 'Private') +\n      publicationOptionHTML('mature', 'Mature') +\n      publicationOptionHTML('explicit', 'Explicit') +\n      publicationOptionHTML('gated', 'Gated') +\n      '</select>';\n    return '<span class=\"dsd-publication-control\">' + select + publicationHelpButton(label || 'Content') + '</span>';\n  }\n  function composerPolicyTools(label){\n    return '<span class=\"dsd-composer-policy-tools\" data-dsd-composer-policy-tools>' + publicationOptions(label || 'Post') + '</span>';\n  }\n  function composerCountHTML(limit){\n    var max = Number(limit || MAX.body || 5000);\n    if (!Number.isFinite(max) || max < 1) max = 5000;\n    return '<span data-dsd-composer-count data-dsd-composer-limit=\"' + html(max) + '\">0 / ' + html(max) + '</span>';\n  }\n  function deconstructDuplicateComposerHelp(root){\n    qsa('[data-dsd-canonical-composer], [data-dsd-story-form], [data-dsd-comment-form], [data-dsd-message-form]', root || document).forEach(function(form){\n      var helpItems = qsa('.dsd-publication-help', form);\n      helpItems.forEach(function(item, index){ if (index > 0) item.remove(); });\n      qsa('.dsd-content-rating-help', form).forEach(function(item){ item.remove(); });\n      qsa('.dsd-publication-control', form).forEach(function(control){\n        var select = qs('select[name=\"visibility\"]', control);\n        if (!select) return;\n        control.setAttribute('data-dsd-composer-policy-inline', 'true');\n      });\n    });\n  }\n  function updateComposerCounters(root){\n    var forms = [];\n    if (root && root.matches && root.matches('form')) forms = [root];\n    else forms = qsa('form', root || document);\n    forms.forEach(function(form){\n      var textarea = qs('textarea[name=\"body\"]', form);\n      var counter = qs('[data-dsd-composer-count]', form);\n      if (!textarea || !counter) return;\n      var limit = Number(counter.getAttribute('data-dsd-composer-limit') || textarea.getAttribute('maxlength') || MAX.body || 5000);\n      if (!Number.isFinite(limit) || limit < 1) limit = 5000;\n      counter.textContent = String(String(textarea.value || '').length) + ' / ' + String(limit);\n    });\n  }\n  function refreshPublicationControls(root){\n    qsa('select[name=\"visibility\"]', root || document).forEach(function(select){\n      var form = select.closest && select.closest('form');\n      select.setAttribute('data-dsd-publication-policy', 'viewer-capability');\n      qsa('option', select).forEach(function(option){\n        option.disabled = !publicationOptionAllowedForForm(option.value, form);\n        option.hidden = false;\n      });\n      if (!publicationOptionAllowedForForm(select.value, form)) select.value = 'public';\n    });\n    deconstructDuplicateComposerHelp(root || document);\n  }\n  function claim(surface, meta){\n    try {\n      var r = window.DSDRegistry || window.DSDRuntimeRegistry;\n      if (r && typeof r.claim === 'function') r.claim(surface, OWNER, Object.assign({ version: VERSION }, meta || {}));\n    } catch(e){}\n  }\n  function emit(name, detail){\n    try { window.dispatchEvent(new CustomEvent('dsd:launch-social:' + name, { detail: detail || {} })); } catch(e){}\n  }\n  function draftQueue(){\n    try { return JSON.parse(localStorage.getItem(DRAFT_QUEUE_KEY) || '[]'); } catch(e){ return []; }\n  }\n  function saveDraftQueue(items){\n    try { localStorage.setItem(DRAFT_QUEUE_KEY, JSON.stringify((items || []).slice(-100))); } catch(e){}\n  }\n  function clearRecoveredUploadDraftStatus(){\n    var staleUploadStatus = /draft saved locally\\. upload is still finishing/i;\n    var changed = false;\n    var remaining = draftQueue().filter(function(item){\n      var type = String(item && item.type || '');\n      var error = String(item && item.error || '');\n      var recovered = /media|upload|wasabi|composer-timeout|orphan-media-parent-repair/i.test(type + ' ' + error);\n      if (recovered) changed = true;\n      return !recovered;\n    });\n    if (changed) {\n      saveDraftQueue(remaining);\n      state.queue = remaining;\n    }\n    qsa('[data-dsd-activation-status], [data-dsd-upload-status]').forEach(function(node){\n      if (staleUploadStatus.test(String(node.textContent || ''))) node.textContent = '';\n    });\n    try {\n      if (staleUploadStatus.test(document.documentElement.getAttribute('data-dsd-last-draft-error') || '')) {\n        document.documentElement.removeAttribute('data-dsd-last-draft-type');\n        document.documentElement.removeAttribute('data-dsd-last-draft-error');\n        document.documentElement.removeAttribute('data-dsd-last-draft-at');\n      }\n    } catch(e){}\n  }\n  function deletedPostTombstones(){\n    try { return JSON.parse(localStorage.getItem(DELETED_POSTS_KEY) || '{}') || {}; } catch(e){ return {}; }\n  }\n  function saveDeletedPostTombstones(items){\n    try { localStorage.setItem(DELETED_POSTS_KEY, JSON.stringify(items || {})); } catch(e){}\n  }\n  function postStateOverrides(){\n    try { return JSON.parse(localStorage.getItem(POST_STATE_OVERRIDES_KEY) || '{}') || {}; } catch(e){ return {}; }\n  }\n  function savePostStateOverrides(items){\n    try { localStorage.setItem(POST_STATE_OVERRIDES_KEY, JSON.stringify(items || {})); } catch(e){}\n  }\n  function localOverrideMillis(value){\n    try {\n      if (!value) return 0;\n      if (typeof value === 'string') return Date.parse(value) || 0;\n      if (value.localOverrideAt) return Date.parse(value.localOverrideAt) || 0;\n      if (value.deletedAt) return Date.parse(value.deletedAt) || 0;\n      if (value.updatedAt) return valueMillis(value.updatedAt);\n    } catch(e){}\n    return 0;\n  }\n  function localOverrideFresh(value){\n    var stamp = localOverrideMillis(value);\n    return !!(stamp && (Date.now() - stamp) <= LOCAL_POST_OVERRIDE_TTL_MS);\n  }\n  function serverDeletedState(record){\n    var stateValue = normalizedRecordState(record);\n    return ['deleted', 'archived', 'removed', 'hidden', 'rejected', 'blocked', 'disabled', 'expired'].indexOf(stateValue) !== -1;\n  }\n  function shouldApplyLocalPostTombstone(key, record){\n    if (!key || !state.localDeletedPostIds[key]) return false;\n    if (serverDeletedState(record)) return true;\n    return localOverrideFresh(state.localDeletedPostIds[key]);\n  }\n  function shouldApplyLocalPostOverride(key, record){\n    var override = key && state.localPostStateOverrides[key];\n    if (!override) return false;\n    if (serverDeletedState(record)) return true;\n    return localOverrideFresh(override);\n  }\n  function pruneExpiredLocalPostOverrides(){\n    var deletedChanged = false;\n    Object.keys(state.localDeletedPostIds || {}).forEach(function(key){\n      if (!localOverrideFresh(state.localDeletedPostIds[key])) {\n        delete state.localDeletedPostIds[key];\n        deletedChanged = true;\n      }\n    });\n    if (deletedChanged) saveDeletedPostTombstones(state.localDeletedPostIds);\n    var stateChanged = false;\n    Object.keys(state.localPostStateOverrides || {}).forEach(function(key){\n      if (!localOverrideFresh(state.localPostStateOverrides[key])) {\n        delete state.localPostStateOverrides[key];\n        stateChanged = true;\n      }\n    });\n    if (stateChanged) savePostStateOverrides(state.localPostStateOverrides);\n  }\n  function commentStateOverrides(){\n    try { return JSON.parse(localStorage.getItem(COMMENT_STATE_OVERRIDES_KEY) || '{}') || {}; } catch(e){ return {}; }\n  }\n  function saveCommentStateOverrides(items){\n    try { localStorage.setItem(COMMENT_STATE_OVERRIDES_KEY, JSON.stringify(items || {})); } catch(e){}\n  }\n  function savedStateOverrides(){\n    try { return JSON.parse(localStorage.getItem(SAVED_STATE_OVERRIDES_KEY) || '{}') || {}; } catch(e){ return {}; }\n  }\n  function saveSavedStateOverrides(items){\n    try { localStorage.setItem(SAVED_STATE_OVERRIDES_KEY, JSON.stringify(items || {})); } catch(e){}\n  }\n  function setLocalSavedState(targetId, stateValue){\n    if (!targetId) return;\n    state.localSavedStateOverrides[targetId] = stateValue;\n    saveSavedStateOverrides(state.localSavedStateOverrides);\n  }\n  function syncSaveButtons(targetId, saved){\n    qsa('[data-dsd-save-post]').forEach(function(button){\n      if (button.getAttribute('data-dsd-save-post') !== targetId) return;\n      button.setAttribute('aria-pressed', saved ? 'true' : 'false');\n      button.setAttribute('aria-label', saved ? 'Unsave post' : 'Save post');\n      button.setAttribute('title', saved ? 'Saved' : 'Save');\n      var label = qs('.dsd-launch-action-text', button);\n      if (label) label.textContent = saved ? 'Saved' : 'Save';\n      else button.textContent = saved ? 'Saved' : 'Save';\n    });\n  }\n  function queueDraft(type, payload, error){\n    var item = { id: type + '-' + Date.now(), type: type, payload: payload, error: error && (error.message || String(error)), queuedAt: now(), canonical: supabaseCutoverReady() ? 'supabase-required' : 'firebase-required' };\n    var q = draftQueue(); q.push(item); saveDraftQueue(q); state.queue = q;\n    var isUpload = /media|upload|wasabi/i.test(String(type || ''));\n    var backgroundRepair = /orphan-media-parent-repair/i.test(String(type || ''));\n    try {\n      document.documentElement.setAttribute('data-dsd-last-draft-type', String(type || '').slice(0, 80));\n      document.documentElement.setAttribute('data-dsd-last-draft-error', String(item.error || '').replace(/[<>\"']/g, '').slice(0, 240));\n      document.documentElement.setAttribute('data-dsd-last-draft-at', item.queuedAt);\n    } catch(e){}\n    if (backgroundRepair) {\n      claim('draft-queue:background-repair-suppressed', { type: type, reason: 'orphan repair is not an active composer upload' });\n      return item;\n    }\n    renderStatus(isUpload ? 'Draft saved locally. Upload is still finishing.' : 'Draft saved locally. Canonical social write is still unavailable.');\n    return item;\n  }\n  function recordFounderAudit(payload, context){\n    payload = Object.assign({ firestorePath: PATHS.founderAudit }, payload || {});\n    return addDoc('founderAudit', payload).catch(function(error){\n      claim('founder-audit:fail-soft', {\n        action: payload.action || '',\n        sourcePath: payload.sourcePath || '',\n        context: context || '',\n        error: error && error.message || String(error)\n      });\n      return null;\n    });\n  }\n  function ref(path){\n    var b = fb(); if (!b) return null;\n    var parts = String(path).split('/').filter(Boolean);\n    return b.firestore.doc.apply(null, [b.db].concat(parts));\n  }\n  function col(path){\n    var b = fb(); if (!b) return null;\n    var parts = String(path).split('/').filter(Boolean);\n    return b.firestore.collection.apply(null, [b.db].concat(parts));\n  }\n  function serverTimestamp(){\n    if (supabaseCutoverReady()) return now();\n    var b = fb();\n    return b && b.firestore.serverTimestamp ? b.firestore.serverTimestamp() : now();\n  }\n  function futureTimestamp(milliseconds){\n    if (supabaseCutoverReady()) return new Date(Date.now() + milliseconds).toISOString();\n    var b = fb();\n    return b && b.firestore && b.firestore.Timestamp && b.firestore.Timestamp.fromDate\n      ? b.firestore.Timestamp.fromDate(new Date(Date.now() + milliseconds))\n      : new Date(Date.now() + milliseconds).toISOString();\n  }\n  function firebaseSetDoc(path, data, merge){\n    var b = fb(); var r = ref(path);\n    if (!b || !r || !hasCustomer() || !hasFirebaseAuth()) return Promise.reject(new Error('Account connection unavailable'));\n    return b.firestore.setDoc(r, Object.assign({}, data, { updatedAt: serverTimestamp() }), { merge: merge !== false });\n  }\n  function firebaseAddDoc(path, data){\n    var b = fb(); var c = col(path);\n    if (!b || !c || !hasCustomer() || !hasFirebaseAuth()) return Promise.reject(new Error('Account connection unavailable'));\n    return b.firestore.addDoc(c, Object.assign({}, data, { createdAt: serverTimestamp(), updatedAt: serverTimestamp() }));\n  }\n  function firebaseGetDocDirect(path){\n    var b = fb(); var r = ref(path);\n    if (!b || !r || !b.firestore.getDoc) return Promise.resolve(null);\n    return b.firestore.getDoc(r).then(function(snap){ return snap && snap.exists && snap.exists() ? (snap.data && snap.data() || null) : null; }).catch(function(){ return null; });\n  }\n  function requestSupabaseAdapterScript(path, method){\n    var existing = supabaseAdapter();\n    if (existing && (!method || typeof existing[method] === 'function')) return;\n    try {\n      var scripts = Array.prototype.slice.call(document.scripts || []);\n      var found = scripts.map(function(script){ return script && script.src || ''; }).filter(function(src){\n        return src.indexOf('dsd-supabase-social-adapter-p11dz610.js') !== -1;\n      })[0];\n      if (!found) return;\n      var retry = document.createElement('script');\n      retry.src = found + (found.indexOf('?') === -1 ? '?' : '&') + 'dsd_activation_retry=' + Date.now();\n      retry.async = false;\n      retry.setAttribute('data-dsd-activation-adapter-retry', method || 'adapter');\n      document.head.appendChild(retry);\n      claim('supabase-adapter:retry-requested', { path: path, method: method || '', src: found.split('?')[0] });\n    } catch(error) {\n      claim('supabase-adapter:retry-blocked', { path: path, method: method || '', error: error && error.message || String(error) });\n    }\n  }\n  function waitForSupabaseAdapter(path, method){\n    var adapter = supabaseAdapter();\n    if (adapter && typeof adapter[method] === 'function') return Promise.resolve(adapter);\n    if (!supabaseCutoverConfigured()) return Promise.resolve(null);\n    requestSupabaseAdapterScript(path, method);\n    return new Promise(function(resolve, reject){\n      var settled = false;\n      var timeout = window.setTimeout(function(){\n        finish(null, new Error('Supabase adapter unavailable for canonical ' + method + ': ' + path));\n      }, 6500);\n      function finish(next, error){\n        if (settled) return;\n        settled = true;\n        window.clearTimeout(timeout);\n        window.removeEventListener('dsd:supabase-social-adapter:ready', onReady);\n        if (next && typeof next[method] === 'function') resolve(next);\n        else reject(error || new Error('Supabase adapter missing canonical method ' + method + ': ' + path));\n      }\n      function onReady(){ finish(supabaseAdapter()); }\n      window.addEventListener('dsd:supabase-social-adapter:ready', onReady, { once: true });\n      window.setTimeout(function(){ if (!settled) finish(supabaseAdapter()); }, 0);\n    });\n  }\n  function setDoc(path, data, merge){\n    if (supabaseCutoverConfigured() && supabasePathSupported(path)) {\n      return waitForSupabaseAdapter(path, 'writePath').then(function(s){\n        return s.writePath(path, Object.assign({}, data, { updatedAt: now() }), { merge: merge !== false }).catch(function(error){\n          claim('supabase-write:retry-forced-session', { path: path, error: error && error.message || String(error) });\n          return waitForSupabaseAdapter(path, 'writePath').then(function(retryAdapter){\n            return retryAdapter.writePath(path, Object.assign({}, data, { updatedAt: now() }), { merge: merge !== false, force: true });\n          }).catch(function(retryError){\n            claim('supabase-write:blocked', { path: path, fallback: 'disabled-for-canonical-cutover', error: retryError && retryError.message || String(retryError) });\n            throw retryError;\n          });\n        });\n      });\n    }\n    return firebaseSetDoc(path, data, merge);\n  }\n  function addDoc(path, data){\n    if (supabaseCutoverConfigured() && supabasePathSupported(path)) {\n      return waitForSupabaseAdapter(path, 'addPath').then(function(s){\n        return s.addPath(path, Object.assign({}, data, { createdAt: now(), updatedAt: now() })).catch(function(error){\n          claim('supabase-add:blocked', { path: path, fallback: 'disabled-for-canonical-cutover', error: error && error.message || String(error) });\n          throw error;\n        });\n      });\n    }\n    return firebaseAddDoc(path, data);\n  }\n  function writeMediaSignerShadow(mediaId, manifest){\n    if (!mediaId || !manifest) return Promise.resolve(null);\n    var signerPath = manifest.signerPath || manifest.signerObjectKey || manifest.path;\n    var signerObjectKey = manifest.signerObjectKey || manifest.signerPath || manifest.objectKey || manifest.path;\n    var shadow = Object.assign({}, manifest, {\n      canonicalSurface: manifest.surface,\n      canonicalSurfaceId: manifest.surfaceId,\n      canonicalSlot: manifest.slot,\n      surface: manifest.signerSurface || manifest.surface,\n      surfaceId: manifest.signerSurfaceId || manifest.surfaceId,\n      slot: manifest.signerSlot || manifest.slot,\n      path: signerPath,\n      objectKey: signerObjectKey,\n      wasabiObjectKey: signerObjectKey,\n      signerShadow: true,\n      signerShadowReason: 'wasabi-upload-signing',\n      supabaseMetadataCanonical: supabaseCutoverReady()\n    });\n    return firebaseSetDoc('mediaManifests/' + mediaId, shadow, true).catch(function(error){\n      claim('wasabi-signer-shadow:blocked', { mediaId: mediaId, error: error && error.message || String(error) });\n      return null;\n    });\n  }\n  function writePostMediaShadow(postId, post){\n    if (!postId || !post || !(post.media && post.media.length)) return Promise.resolve(null);\n    if (supabaseCutoverReady()) {\n      claim('post-media-shadow:retired', { postId: postId, canonical: 'supabase-media-objects', firebasePublicContentHydration: false });\n      return Promise.resolve(null);\n    }\n    return firebaseSetDoc('posts/' + postId, Object.assign({}, post, {\n      mediaRelationshipShadow: true,\n      mediaRelationshipShadowReason: 'supabase-post-media-read-hydration',\n      supabaseMetadataCanonical: supabaseCutoverReady()\n    }), true).catch(function(error){\n      claim('post-media-shadow:blocked', { postId: postId, error: error && error.message || String(error) });\n      return null;\n    });\n  }\n  function syncSupabasePostMediaRelationships(post, savedPost){\n    if (!post || !(post.media && post.media.length) || !supabaseCutoverReady()) return Promise.resolve(null);\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.upsert !== 'function') return Promise.resolve(null);\n    return resolveSupabaseMediaRelationshipRows('post', post, savedPost).then(function(result){\n      var rows = result.rows || [];\n      if (!uuidLike(result.parentUuid)) {\n        claim('post-media-relationship-sync:missing-parent-uuid', { postId: post.postId || post.id || '', mediaCount: post.media.length });\n        return null;\n      }\n      if (!rows.length) {\n        claim('post-media-relationship-sync:missing-media-uuid', { postId: post.postId || post.id || '', mediaCount: post.media.length });\n        return null;\n      }\n      if (rows.length < post.media.length) {\n        claim('post-media-relationship-sync:partial-media-uuid', { postId: post.postId || post.id || '', resolved: rows.length, mediaCount: post.media.length });\n      }\n      return adapter.upsert('post_media', rows, {\n        query: 'on_conflict=' + encodeURIComponent('post_id,media_id'),\n        prefer: 'resolution=merge-duplicates,return=minimal'\n      }).then(function(){\n        claim('post-media-relationship-sync:verified', { postId: post.postId || post.id || '', supabasePostId: result.parentUuid, mediaCount: rows.length });\n        return rows;\n      });\n    }).catch(function(error){\n      claim('post-media-relationship-sync:blocked', { postId: post.postId || post.id || '', error: error && error.message || String(error) });\n      return Promise.resolve(null);\n    });\n  }\n  function syncSupabaseStoryMediaRelationships(story, savedStory){\n    if (!story || !(story.media && story.media.length) || !supabaseCutoverReady()) return Promise.resolve(null);\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.upsert !== 'function') return Promise.resolve(null);\n    return resolveSupabaseMediaRelationshipRows('story', story, savedStory).then(function(result){\n      var rows = result.rows || [];\n      if (!uuidLike(result.parentUuid)) {\n        claim('story-media-relationship-sync:missing-parent-uuid', { storyId: story.storyId || story.id || '', mediaCount: story.media.length });\n        return null;\n      }\n      if (!rows.length) {\n        claim('story-media-relationship-sync:missing-media-uuid', { storyId: story.storyId || story.id || '', mediaCount: story.media.length });\n        return null;\n      }\n      if (rows.length < story.media.length) {\n        claim('story-media-relationship-sync:partial-media-uuid', { storyId: story.storyId || story.id || '', resolved: rows.length, mediaCount: story.media.length });\n      }\n      return adapter.upsert('story_media', rows, {\n        query: 'on_conflict=' + encodeURIComponent('story_id,media_id'),\n        prefer: 'resolution=merge-duplicates,return=minimal'\n      }).then(function(){\n        claim('story-media-relationship-sync:verified', { storyId: story.storyId || story.id || '', supabaseStoryId: result.parentUuid, mediaCount: rows.length });\n        return rows;\n      });\n    }).catch(function(error){\n      claim('story-media-relationship-sync:blocked', { storyId: story.storyId || story.id || '', error: error && error.message || String(error) });\n      return Promise.resolve(null);\n    });\n  }\n  function canonicalMessageUuid(message, savedMessage){\n    var values = [\n      savedMessage && savedMessage.id,\n      savedMessage && savedMessage.supabaseMessageId,\n      savedMessage && savedMessage.supabase_message_id,\n      message && message.supabaseMessageId,\n      message && message.supabase_message_id\n    ];\n    for (var i = 0; i < values.length; i += 1) {\n      if (uuidLike(values[i])) return String(values[i]).trim();\n    }\n    return '';\n  }\n  function legacyMessageId(message, savedMessage){\n    var values = [\n      message && message.messageId,\n      message && message.legacyMessageId,\n      message && message.legacy_message_id,\n      savedMessage && savedMessage.messageId,\n      savedMessage && savedMessage.legacyMessageId,\n      savedMessage && savedMessage.legacy_message_id,\n      message && message.id,\n      savedMessage && savedMessage.id\n    ];\n    for (var i = 0; i < values.length; i += 1) {\n      var value = String(values[i] || '').trim();\n      if (value && !uuidLike(value)) return value;\n    }\n    return '';\n  }\n  function canonicalConversationUuid(message, savedMessage){\n    var values = [\n      savedMessage && savedMessage.conversation_id,\n      savedMessage && savedMessage.supabaseConversationId,\n      savedMessage && savedMessage.supabase_conversation_id,\n      savedMessage && savedMessage.conversationId,\n      message && message.conversation_id,\n      message && message.supabaseConversationId,\n      message && message.supabase_conversation_id,\n      message && message.conversationId\n    ];\n    for (var i = 0; i < values.length; i += 1) {\n      if (uuidLike(values[i])) return String(values[i]).trim();\n    }\n    return '';\n  }\n  function legacyConversationId(message, savedMessage){\n    var values = [\n      message && message.conversationId,\n      savedMessage && savedMessage.conversationId,\n      message && message.legacyConversationId,\n      savedMessage && savedMessage.legacyConversationId\n    ];\n    for (var i = 0; i < values.length; i += 1) {\n      var value = String(values[i] || '').trim();\n      if (value && !uuidLike(value)) return value;\n    }\n    return '';\n  }\n  function resolveSupabaseMessageUuid(message, savedMessage){\n    var existing = canonicalMessageUuid(message, savedMessage);\n    if (uuidLike(existing)) return Promise.resolve(existing);\n    var adapter = supabaseAdapter();\n    var legacy = legacyMessageId(message, savedMessage);\n    if (!adapter || typeof adapter.read !== 'function' || !legacy) return Promise.resolve('');\n    return adapter.read('messages', { select: 'id,legacy_message_id', legacy_message_id: 'eq.' + legacy, limit: 1 }, { force: true }).then(function(rows){\n      return rows && rows[0] && uuidLike(rows[0].id) ? rows[0].id : '';\n    }).catch(function(error){\n      claim('message-media-relationship-sync:message-readback-blocked', { messageId: legacy, error: error && error.message || String(error) });\n      return '';\n    });\n  }\n  function resolveSupabaseConversationUuid(message, savedMessage){\n    var existing = canonicalConversationUuid(message, savedMessage);\n    if (uuidLike(existing)) return Promise.resolve(existing);\n    var adapter = supabaseAdapter();\n    var legacy = legacyConversationId(message, savedMessage);\n    if (!adapter || typeof adapter.read !== 'function' || !legacy) return Promise.resolve('');\n    return adapter.read('conversations', { select: 'id,legacy_conversation_id', legacy_conversation_id: 'eq.' + legacy, limit: 1 }, { force: true }).then(function(rows){\n      return rows && rows[0] && uuidLike(rows[0].id) ? rows[0].id : '';\n    }).catch(function(error){\n      claim('message-media-relationship-sync:conversation-readback-blocked', { conversationId: legacy, error: error && error.message || String(error) });\n      return '';\n    });\n  }\n  function syncSupabaseMessageMediaRelationships(message, savedMessage, attempt){\n    attempt = attempt || 0;\n    if (!message || !(message.media && message.media.length) || !supabaseCutoverReady()) return Promise.resolve(null);\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.upsert !== 'function') return Promise.resolve(null);\n    return Promise.all([\n      resolveSupabaseConversationUuid(message, savedMessage),\n      resolveSupabaseMessageUuid(message, savedMessage),\n      Promise.all((message.media || []).map(function(media){ return resolveSupabaseMessageMediaUuid(media, message, savedMessage); }))\n    ]).then(function(results){\n      var conversationUuid = results[0] || '';\n      var messageUuid = results[1] || '';\n      var mediaUuids = results[2] || [];\n      var rows = mediaUuids.map(function(uuid, index){\n        var mediaItem = (message.media || [])[index] || {};\n        var contentType = String(mediaItem.contentType || mediaItem.content_type || '');\n        var kind = String(mediaItem.kind || mediaItem.mediaKind || contentType).toLowerCase().indexOf('video') !== -1 ? 'video' : 'image';\n        if (!uuidLike(conversationUuid) || !uuidLike(messageUuid) || !uuidLike(uuid)) return null;\n        return {\n          conversation_id: conversationUuid,\n          message_id: messageUuid,\n          media_id: uuid,\n          kind: kind,\n          content_type: contentType,\n          bytes: Number(mediaItem.bytes || mediaItem.size || 0),\n          visibility: 'private',\n          moderation_state: 'approved'\n        };\n      }).filter(Boolean);\n      if ((rows.length < (message.media || []).length || !uuidLike(conversationUuid) || !uuidLike(messageUuid)) && attempt < 5) {\n        claim('message-media-relationship-sync:uuid-readback-retry', {\n          attempt: attempt + 1,\n          conversationResolved: uuidLike(conversationUuid),\n          messageResolved: uuidLike(messageUuid),\n          resolved: rows.length,\n          mediaCount: (message.media || []).length\n        });\n        return wait([250, 700, 1400, 2200, 3200][attempt] || 3200).then(function(){ return syncSupabaseMessageMediaRelationships(message, savedMessage, attempt + 1); });\n      }\n      if (!rows.length) {\n        claim('message-media-relationship-sync:missing-canonical-ids', {\n          conversationId: legacyConversationId(message, savedMessage),\n          messageId: legacyMessageId(message, savedMessage),\n          conversationResolved: uuidLike(conversationUuid),\n          messageResolved: uuidLike(messageUuid),\n          mediaCount: (message.media || []).length\n        });\n        return null;\n      }\n      return writeMessageAttachmentRows(adapter, rows).then(function(){\n        claim('message-media-relationship-sync:verified', { messageId: legacyMessageId(message, savedMessage), supabaseMessageId: messageUuid, mediaCount: rows.length });\n        return rows;\n      });\n    }).catch(function(error){\n      claim('message-media-relationship-sync:blocked', { messageId: legacyMessageId(message, savedMessage), error: error && error.message || String(error) });\n      return Promise.resolve(null);\n    });\n  }\n  function writeMessageAttachmentRows(adapter, rows){\n    rows = (rows || []).filter(function(row){ return row && row.message_id && row.media_id; });\n    if (!adapter || typeof adapter.read !== 'function' || typeof adapter.write !== 'function' || !rows.length) return Promise.resolve([]);\n    var written = [];\n    function writeOne(index){\n      var row = rows[index];\n      if (!row) return Promise.resolve(written);\n      return adapter.read('message_attachments', {\n        select: 'id,message_id,media_id,deleted_at',\n        message_id: 'eq.' + row.message_id,\n        media_id: 'eq.' + row.media_id,\n        limit: 1\n      }, { force: true }).then(function(existingRows){\n        var existing = existingRows && existingRows[0];\n        if (existing && !existing.deleted_at) {\n          written.push(existing);\n          return null;\n        }\n        if (existing && existing.id) {\n          return adapter.write('message_attachments', Object.assign({}, row, { deleted_at: null }), {\n            method: 'PATCH',\n            query: 'id=eq.' + encodeURIComponent(existing.id),\n            prefer: 'return=representation'\n          }).then(function(result){\n            if (Array.isArray(result)) written = written.concat(result);\n            else if (result) written.push(result);\n          });\n        }\n        return adapter.write('message_attachments', [row], { prefer: 'return=representation' }).then(function(result){\n          if (Array.isArray(result)) written = written.concat(result);\n          else if (result) written.push(result);\n        });\n      }).then(function(){\n        return writeOne(index + 1);\n      });\n    }\n    return writeOne(0).then(function(){ return written; });\n  }\n  function hydratePostMediaFallback(items){\n    items = items || [];\n    if (supabaseCutoverReady()) return Promise.resolve(items);\n    if (!items.length || !fb()) return Promise.resolve(items);\n    return Promise.all(items.map(function(item){\n      if (!item || (item.media && item.media.length)) return Promise.resolve(item);\n      var id = item.postId || item.id;\n      if (!id) return Promise.resolve(item);\n      return firebaseGetDocDirect('posts/' + id).then(function(shadow){\n        return shadow && shadow.media && shadow.media.length ? Object.assign({}, item, { media: shadow.media, mediaMode: shadow.mediaMode || item.mediaMode || (shadow.media[0] && shadow.media[0].kind) || 'mixed' }) : item;\n      });\n    }));\n  }\n  function deleteDoc(path){\n    var b = fb(); var r = ref(path);\n    if (!b || !r || !hasCustomer() || !hasFirebaseAuth()) return Promise.reject(new Error('Account connection unavailable'));\n    if (!b.firestore.deleteDoc) return Promise.reject(new Error('Firebase deleteDoc unavailable'));\n    return b.firestore.deleteDoc(r);\n  }\n  function getDoc(path, options){\n    var s = supabaseAdapter();\n    if (supabaseCutoverConfigured() && supabasePathSupported(path)) {\n      return waitForSupabaseAdapter(path, 'getPath').then(function(adapter){\n        return adapter.getPath(path, options || {}).catch(function(error){\n          claim('supabase-get:blocked', { path: path, fallback: 'disabled-for-canonical-cutover', error: error && error.message || String(error) });\n          throw error;\n        });\n      });\n    }\n    if (!firebaseReadAllowed(path)) return Promise.reject(new Error('Firebase public/social read disabled after Supabase cutover: ' + path));\n    var b = fb(); var r = ref(path);\n    if (!b || !r) return Promise.reject(new Error('Account connection unavailable'));\n    if (/^(profiles|notifications|conversations|favorites|saves)\\//.test(String(path)) && !hasFirebaseAuth()) return Promise.reject(new Error('Account connection unavailable'));\n    return b.firestore.getDoc(r);\n  }\n  function listen(path, cb, queryBuilder, meta){\n    var s = supabaseAdapter();\n    if (supabaseCutoverConfigured() && supabasePathSupported(path)) {\n      var wrappedCb = path === 'posts' ? function(items){ hydratePostMediaFallback(items).then(cb); } : cb;\n      var adapterOptions = Object.assign({ queryBuilderHint: !!queryBuilder, publicRead: !hasCustomer() }, meta || {});\n      function attachSupabaseListener(adapter, label){\n        var offSupabase = adapter.listenPath(path, wrappedCb, adapterOptions);\n        claim(label || 'supabase-listener:active', { path: path, mode: 'metadata-cutover' });\n        return offSupabase;\n      }\n      if (s && typeof s.listenPath === 'function') {\n        var activeOff = attachSupabaseListener(s);\n        state.listeners.push(activeOff);\n        return activeOff;\n      }\n      requestSupabaseAdapterScript(path, 'listenPath');\n      var detached = false;\n      var delayedOff = null;\n      var fallbackTimer = window.setTimeout(function(){\n        if (detached || delayedOff) return;\n        claim('supabase-listener:waiting', { path: path, fallback: 'empty-state-until-adapter-ready' });\n        try { cb([]); } catch(e){}\n      }, 2200);\n      function onAdapterReady(){\n        if (detached || delayedOff) return;\n        var next = supabaseAdapter();\n        if (!next || typeof next.listenPath !== 'function') return;\n        window.clearTimeout(fallbackTimer);\n        delayedOff = attachSupabaseListener(next, 'supabase-listener:delayed-active');\n      }\n      window.addEventListener('dsd:supabase-social-adapter:ready', onAdapterReady);\n      window.setTimeout(onAdapterReady, 0);\n      var offDelayed = function(){\n        detached = true;\n        window.clearTimeout(fallbackTimer);\n        window.removeEventListener('dsd:supabase-social-adapter:ready', onAdapterReady);\n        if (typeof delayedOff === 'function') delayedOff();\n      };\n      state.listeners.push(offDelayed);\n      return offDelayed;\n    }\n    if (!firebaseReadAllowed(path)) {\n      claim('firebase-public-read:disabled', { path: path, canonical: 'supabase', fallback: 'empty-state' });\n      try { cb([]); } catch(e){}\n      return function(){};\n    }\n    var b = fb(); var c = col(path);\n    if (!b || !c || !b.firestore.onSnapshot) return null;\n    var target = queryBuilder ? queryBuilder(c, b.firestore) : c;\n    var off = b.firestore.onSnapshot(target, function(snap){\n      var items = [];\n      snap.forEach(function(docSnap){ items.push(Object.assign({ id: docSnap.id }, docSnap.data() || {})); });\n      cb(items);\n    }, function(error){\n      claim('firebase-listener:blocked', { path: path, error: error && error.message || String(error) });\n      if ((path === 'posts' || path === 'stories') && queryBuilder) return;\n      if (/^posts\\/[^/]+\\/comments$/.test(String(path))) {\n        claim('comment-listener:firebase-social-fallback-disabled', { path: path, reason: error && error.message || String(error), canonical: 'supabase-comments-only' });\n        cb([]);\n        return;\n      }\n      if (path === 'moderationQueue' || path === 'publicProfiles' || path === 'gatedStoryShells') {\n        renderModeration();\n        if (path === 'publicProfiles') { publishPublicProfiles(); renderDiscovery(); renderSearchIndex(); }\n        if (path === 'gatedStoryShells') renderStories();\n        return;\n      }\n      renderStatus('Firebase listener blocked for ' + path + ': ' + (error && error.message ? error.message : 'unknown error'));\n    });\n    state.listeners.push(off);\n    return off;\n  }\n  function preferCanonicalContentRecord(existing, incoming){\n    if (!existing) return incoming;\n    if (!incoming) return existing;\n    var existingShell = isPersistedGatedShellRecord(existing) || existing.restrictedShell === true;\n    var incomingShell = isPersistedGatedShellRecord(incoming) || incoming.restrictedShell === true;\n    var existingHasContent = !!(String(existing.body || existing.caption || existing.title || '').trim() || (existing.media || []).length);\n    var incomingHasContent = !!(String(incoming.body || incoming.caption || incoming.title || '').trim() || (incoming.media || []).length);\n    if (existingHasContent && incomingShell && !incomingHasContent) return existing;\n    if (existingShell && incomingHasContent) return incoming;\n    return incoming;\n  }\n  function mergeRecords(existing, incoming){\n    var byId = {};\n    (existing || []).concat(incoming || []).forEach(function(item){\n      var key = item && (item.postId || item.storyId || item.id);\n      if (key && shouldApplyLocalPostTombstone(key, item) && item.status !== 'deleted') {\n        byId[key] = Object.assign({}, item, { status: 'deleted', moderation: Object.assign({}, item.moderation || {}, { state: 'deleted', gate: 'local-owner-action' }) });\n        return;\n      }\n      if (key && shouldApplyLocalPostOverride(key, item)) {\n        item = Object.assign({}, item, state.localPostStateOverrides[key], { moderation: Object.assign({}, item.moderation || {}, state.localPostStateOverrides[key].moderation || {}) });\n      }\n      if (key) byId[key] = preferCanonicalContentRecord(byId[key], item);\n    });\n    return Object.keys(byId).map(function(key){ return byId[key]; }).sort(function(a, b){\n      return String(b.createdAt || b.updatedAt || '').localeCompare(String(a.createdAt || a.updatedAt || ''));\n    });\n  }\n  function activeSavedItems(items){\n    return (items || []).filter(function(item){\n      if (!item || item.state !== 'saved') return false;\n      var targetId = item.targetId || item.postId || item.id || '';\n      if (!targetId) return false;\n      var post = localPostById(targetId);\n      if (post && !isNormalContentRecord(post)) return false;\n      return !shouldApplyLocalPostTombstone(targetId, post);\n    });\n  }\n  function mergeByKey(existing, incoming, keys){\n    var byId = {};\n    (existing || []).concat(incoming || []).forEach(function(item){\n      if (!item) return;\n      var key = '';\n      (keys || ['id']).some(function(k){ key = item[k] || ''; return !!key; });\n      if (key) byId[key] = item;\n    });\n    return Object.keys(byId).map(function(key){ return byId[key]; }).sort(function(a, b){\n      return String(b.updatedAt || b.createdAt || '').localeCompare(String(a.updatedAt || a.createdAt || ''));\n    });\n  }\n  function publicProfileDedupeScore(profile){\n    if (!profile) return 0;\n    var key = clean(profile.profileKey || profile.handle || '', '').toLowerCase();\n    var score = 0;\n    if (profile.profileKey && profile.handle && clean(profile.profileKey, '').toLowerCase() === clean(profile.handle, '').toLowerCase()) score += 8;\n    if (profile.avatarMediaId) score += 4;\n    if (profile.bannerMediaId || profile.headerMediaId) score += 4;\n    if (profile.setupComplete === true || profile.status === 'active') score += 3;\n    if (!/\\d+$/.test(key)) score += 2;\n    if (profile.updatedAt) score += Math.min(2, Date.parse(profile.updatedAt) / 10000000000000 || 0);\n    return score;\n  }\n  function dedupePublicProfiles(profiles){\n    var byIdentity = {};\n    (profiles || []).forEach(function(profile){\n      if (!profile) return;\n      var keyIdentity = clean(profile.profileKey || profile.handle || '', '').toLowerCase();\n      var identity = keyIdentity || profile.uid || profile.userId || '';\n      if (!identity) return;\n      var current = byIdentity[identity];\n      if (!current || publicProfileDedupeScore(profile) >= publicProfileDedupeScore(current)) byIdentity[identity] = profile;\n    });\n    return Object.keys(byIdentity).map(function(key){ return byIdentity[key]; }).sort(function(a, b){\n      return String(b.updatedAt || b.createdAt || '').localeCompare(String(a.updatedAt || a.createdAt || ''));\n    });\n  }\n  function routeTo(path){\n    try {\n      if (window.location.pathname + window.location.search !== path) window.location.href = path;\n    } catch(e){}\n  }\n  function rememberLastVisitedPage(){\n    try {\n      var current = window.location.pathname + window.location.search;\n      if (!/^\\/account(?:$|[/?#])/.test(current) && current !== '/challenge') {\n        window.localStorage && window.localStorage.setItem('DSD_LAST_VISITED_PAGE', current);\n      }\n    } catch(e){}\n  }\n  function lastVisitedPage(){\n    try {\n      var saved = window.localStorage && window.localStorage.getItem('DSD_LAST_VISITED_PAGE') || '';\n      if (saved && !/^\\/account(?:$|[/?#])/.test(saved) && saved.charAt(0) === '/') return saved;\n    } catch(e){}\n    return '';\n  }\n  function queryParam(name){\n    try { return new URLSearchParams(window.location.search || '').get(name) || ''; } catch(e){ return ''; }\n  }\n  function routeAnchorId(prefix, value){\n    return String(prefix || 'dsd-target') + '-' + encodeURIComponent(String(value || '').trim()).replace(/%/g, '-');\n  }\n  function routeProfileKey(){\n    var raw = String(queryParam('profile') || '').trim().replace(/^@+/, '');\n    return raw ? nonPlaceholderProfileKey(raw) : '';\n  }\n  function activeRouteSurface(){\n    var path = '';\n    try { path = window.location.pathname || ''; } catch(e){ path = ''; }\n    if (path === '/pages/feed') return 'feed';\n    if (path === '/pages/users') return 'users';\n    if (path === '/pages/user-profile') return 'profile';\n    if (path === '/pages/stories') return 'stories';\n    if (path === '/pages/messages') return 'messages';\n    if (path === '/pages/notifications') return 'notifications';\n    if (path === '/pages/saved') return 'saved';\n    if (path === '/pages/favorites') return 'favorites';\n    if (/^\\/pages\\/(?:moderation-center|safety-center|founder-operations|aic)(?:$|[/?#])/.test(path)) return 'governance';\n    if (/^\\/pages\\/(?:universes|galaxies|multiverse)(?:$|[/?#])/.test(path)) return 'launch-held-space';\n    return 'other';\n  }\n  function routeNeedsPublicProfiles(surface){\n    return /^(feed|users|profile|stories)$/.test(surface) || (hasCustomer() && /^(messages|notifications|saved|favorites)$/.test(surface)) || (canModerate() && surface === 'governance');\n  }\n  function routeNeedsPublicFeed(surface){\n    return surface === 'feed';\n  }\n  function routeNeedsStories(surface){\n    return /^(feed|profile|stories)$/.test(surface);\n  }\n  function routeNeedsOwnerSocial(surface){\n    return hasCustomer() && /^(feed|profile|stories|saved|favorites)$/.test(surface);\n  }\n  function routeNeedsRelationshipState(surface){\n    return hasCustomer() && /^(feed|users|profile|messages|saved|favorites)$/.test(surface);\n  }\n  function postPermalink(postId){\n    var id = String(postId || '').trim();\n    var url = '/pages/feed?route_rev=' + encodeURIComponent(BUILD);\n    if (id) url += '&post=' + encodeURIComponent(id) + '#' + routeAnchorId('dsd-post', id);\n    try { return new URL(url, window.location.origin).toString(); } catch(e){ return url; }\n  }\n  function canonicalPostTargetHref(postId, fallbackProfileKey){\n    var id = String(postId || '').trim();\n    if (!id) return fallbackProfileKey ? profileRouteHref(fallbackProfileKey) : '/pages/feed?route_rev=' + encodeURIComponent(BUILD);\n    return postPermalink(id);\n  }\n  function profileRouteHref(key){\n    var rawKey = String(key || '').replace(/^@+/, '');\n    var matchedProfile = publicProfileByKey(rawKey) || publicProfileByIdentity(rawKey) || null;\n    var safeKey = nonPlaceholderProfileKey(matchedProfile && (matchedProfile.profileKey || matchedProfile.handle) || rawKey);\n    if (!safeKey) return '/pages/users?route_rev=' + encodeURIComponent(BUILD);\n    return '/pages/user-profile?profile=' + encodeURIComponent(safeKey) + '&route_rev=' + encodeURIComponent(PROFILE_ROUTE_CACHE_REV) + '&profile_rev=' + encodeURIComponent(PROFILE_ROUTE_CACHE_REV);\n  }\n  function profileNavigationBridgeHref(href){\n    try {\n      var url = new URL(href, window.location.origin);\n      if (url.origin !== window.location.origin || url.pathname !== '/pages/user-profile') return '';\n      var key = nonPlaceholderProfileKey(url.searchParams.get('profile') || '');\n      if (!key) return '';\n      var params = new URLSearchParams();\n      params.set('route_rev', PROFILE_ROUTE_CACHE_REV);\n      params.set('profile_nav_base', String(Date.now()));\n      params.set('next_profile', key);\n      return '/pages/user-profile?' + params.toString();\n    } catch(e) {\n      return '';\n    }\n  }\n  function navigateProfileHref(href){\n    var bridge = profileNavigationBridgeHref(href);\n    window.location.assign(bridge || href);\n  }\n  function profileWithPublicMirror(profile){\n    if (!profile) return profile;\n    var key = nonPlaceholderProfileKey(profile.profileKey || profile.handle || profileKey() || '');\n    if (!key) return profile;\n    var mirror = publicProfileByKey(key) || null;\n    if (!mirror) return profile;\n    var merged = Object.assign({}, mirror, profile);\n    if (!String(profile.displayName || profile.display_name || '').trim() && String(mirror.displayName || mirror.display_name || '').trim()) merged.displayName = mirror.displayName || mirror.display_name;\n    if (!String(profile.bio || '').trim() && String(mirror.bio || '').trim()) merged.bio = mirror.bio;\n    if (!String(profile.location || '').trim() && String(mirror.location || '').trim()) merged.location = mirror.location;\n    if (!String(profile.locationCity || profile.location_city || '').trim() && String(mirror.locationCity || mirror.location_city || '').trim()) merged.locationCity = mirror.locationCity || mirror.location_city;\n    if (!String(profile.locationState || profile.location_state || '').trim() && String(mirror.locationState || mirror.location_state || '').trim()) merged.locationState = mirror.locationState || mirror.location_state;\n    var profileAvatar = canonicalProfileAvatarMediaId(profile);\n    var mirrorAvatar = canonicalProfileAvatarMediaId(mirror);\n    var profileBanner = canonicalProfileBannerMediaId(profile);\n    var mirrorBanner = canonicalProfileBannerMediaId(mirror);\n    var profileAvatarReadable = readableProfileSlotMediaId(profile, 'avatar');\n    var mirrorAvatarReadable = readableProfileSlotMediaId(mirror, 'avatar');\n    var profileBannerReadable = readableProfileSlotMediaId(profile, 'banner');\n    var mirrorBannerReadable = readableProfileSlotMediaId(mirror, 'banner');\n    var avatar = (mediaIdLooksLikeUuid(profileAvatar) && (profileAvatarReadable || mirrorAvatarReadable)) ? (profileAvatarReadable || mirrorAvatarReadable) : ((mediaIdLooksLikeUuid(mirrorAvatar) && mirrorAvatarReadable) ? mirrorAvatarReadable : (profileAvatar || mirrorAvatar || profileAvatarReadable || mirrorAvatarReadable || ''));\n    var banner = (mediaIdLooksLikeUuid(profileBanner) && (profileBannerReadable || mirrorBannerReadable)) ? (profileBannerReadable || mirrorBannerReadable) : ((mediaIdLooksLikeUuid(mirrorBanner) && mirrorBannerReadable) ? mirrorBannerReadable : (profileBanner || mirrorBanner || profileBannerReadable || mirrorBannerReadable || ''));\n    if (avatar) {\n      merged.avatarMediaId = avatar;\n      merged.avatar_media_id = avatar;\n      merged.profileImageMediaId = avatar;\n      merged.profile_image_media_id = avatar;\n      merged.photoMediaId = avatar;\n      merged.photo_media_id = avatar;\n    }\n    if (banner) {\n      merged.bannerMediaId = banner;\n      merged.banner_media_id = banner;\n      merged.headerMediaId = banner;\n      merged.header_media_id = banner;\n      merged.coverMediaId = banner;\n      merged.cover_media_id = banner;\n      merged.backgroundMediaId = banner;\n      merged.background_media_id = banner;\n    }\n    merged.bannerPosition = profile.bannerPosition || mirror.bannerPosition || 'center';\n    merged.setupComplete = profile.setupComplete === true || mirror.setupComplete === true;\n    merged.status = profile.status || mirror.status || (merged.setupComplete ? 'active' : 'setup_required');\n    return merged;\n  }\n  function postCommentPermalink(postId, commentId){\n    var id = String(postId || '').trim();\n    var cid = String(commentId || '').trim();\n    var url = '/pages/feed?route_rev=' + encodeURIComponent(BUILD);\n    if (id) {\n      url += '&post=' + encodeURIComponent(id);\n      if (cid) url += '&comment=' + encodeURIComponent(cid);\n      url += '#' + routeAnchorId('dsd-comment', cid || id);\n    }\n    try { return new URL(url, window.location.origin).toString(); } catch(e){ return url; }\n  }\n  function focusRequestedPost(){\n    var id = String(queryParam('post') || '').trim();\n    if (!id) return;\n    var attempts = 0;\n    function tryFocus(){\n      attempts += 1;\n      var selector = '.dsd-post-card[data-post-id=\"' + id.replace(/\"/g, '\\\\\"') + '\"]';\n      var card = qs(selector);\n      if (!card) {\n        if (attempts < 16) window.setTimeout(tryFocus, 180);\n        return;\n      }\n      card.setAttribute('data-dsd-requested-post', 'true');\n      card.id = card.id || routeAnchorId('dsd-post', id);\n      card.setAttribute('tabindex', card.getAttribute('tabindex') || '-1');\n      try { card.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e){ try { card.scrollIntoView(); } catch(ignore){} }\n      try { card.focus({ preventScroll: true }); } catch(ignoreFocus){}\n    }\n    window.setTimeout(tryFocus, 80);\n  }\n  function focusRequestedComment(){\n    var postId = String(queryParam('post') || '').trim();\n    var commentId = String(queryParam('comment') || '').trim();\n    if (!postId || !commentId || state.lastRequestedCommentId === postId + ':' + commentId) return;\n    state.lastRequestedCommentId = postId + ':' + commentId;\n    state.openCommentPostIds[postId] = true;\n    delete state.commentOneShotLoads[postId];\n    hydratePostComments([localPostById(postId) || { postId: postId }]);\n    window.setTimeout(function(){\n      openPostDrawer('comments', postId, null);\n      window.setTimeout(function(){\n        var selector = '[data-dsd-comment-id=\"' + commentId.replace(/\"/g, '\\\\\"') + '\"]';\n        var comment = qs(selector);\n        if (!comment) return;\n        comment.setAttribute('data-dsd-requested-comment', 'true');\n        comment.id = comment.id || routeAnchorId('dsd-comment', commentId);\n        try { comment.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e){ try { comment.scrollIntoView(); } catch(ignore){} }\n      }, 220);\n    }, 140);\n  }\n  function focusComposerFromRoute(){\n    if (queryParam('compose') !== 'post') return;\n    var host = qs('#dsd-composer-container');\n    if (!host || host.hidden || !hasActiveProfile()) return;\n    var shell = host.closest('.dsd-feed368__composer');\n    if (shell) shell.hidden = false;\n    window.setTimeout(function(){\n      var field = qs('textarea[name=\"body\"]', host);\n      try { (field || host).scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch(e){ try { (field || host).scrollIntoView(); } catch(ignore){} }\n      if (field) field.focus();\n      document.documentElement.setAttribute('data-dsd-compose-route-focused', 'true');\n    }, 120);\n  }\n  function viewedProfile(){\n    var target = routeProfileKey();\n    if (target) {\n      var targetKey = normalizedProfileKeyValue(target);\n      if (targetKey && targetKey === normalizedProfileKeyValue(profileKey())) return profileRecordHasUsableKey(state.profile) ? profileWithPublicMirror(state.profile) : publicProfileByKey(targetKey);\n      var viewedKey = normalizedProfileKeyValue(state.viewProfile && (state.viewProfile.profileKey || state.viewProfile.handle || state.viewProfile.id));\n      if (viewedKey && viewedKey === targetKey) return state.viewProfile;\n      return publicProfileByKey(targetKey) || null;\n    }\n    if (ownIdentityRebindingRequired()) return state.profile || identityRebindingRequiredProfile();\n    return profileRecordHasUsableKey(state.profile) ? profileWithPublicMirror(state.profile) : null;\n  }\n  function viewedProfileUid(){\n    var p = viewedProfile();\n    if (p && p.uid) return p.uid;\n    return routeProfileKey() ? '' : actorUid();\n  }\n  function isOwnProfileRoute(){\n    var target = routeProfileKey();\n    return hasCustomer() && (!target || normalizedProfileKeyValue(target) === normalizedProfileKeyValue(profileKey()));\n  }\n\n  function bridgeShopifyToFirebase(){\n    var b = bridge();\n    if (!hasCustomer() || !b || !b.auth || !b.authModule) {\n      state.bridgeReady = !!(!hasCustomer());\n      state.bridgeChecked = true;\n      state.bridgeAttempting = false;\n      return Promise.resolve(null);\n    }\n    state.bridgeAttempting = true;\n    return fetch(b.tokenEndpoint || '/apps/dsd-firebase-custom-token', {\n      method: 'POST',\n      credentials: 'include',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({ intent: 'shopify-session-social-bridge', profileKey: profileKey(), membership: deriveMembership() })\n    })\n      .then(function(res){ if (!res.ok) throw new Error('Custom token endpoint failed: ' + res.status); return res.json(); })\n      .then(function(data){\n        if (!data || !data.token) throw new Error('Custom token response missing token');\n        return b.authModule.signInWithCustomToken(b.auth, data.token);\n      })\n      .then(function(cred){\n        state.firebaseUser = cred.user;\n        return (cred.user && cred.user.getIdToken ? cred.user.getIdToken(true).catch(function(){ return null; }).then(function(){ return captureClaims(cred.user); }) : captureClaims(cred.user)).then(function(user){\n          state.firebaseUser = user || state.firebaseUser;\n          state.bridgeChecked = true;\n          state.bridgeAttempting = false;\n          return user;\n        });\n      })\n      .catch(function(error){\n        if (b.auth.currentUser) {\n          state.firebaseUser = b.auth.currentUser;\n          return (b.auth.currentUser.getIdToken ? b.auth.currentUser.getIdToken(true).catch(function(){ return null; }).then(function(){ return captureClaims(b.auth.currentUser); }) : captureClaims(b.auth.currentUser)).then(function(user){\n            state.firebaseUser = user || state.firebaseUser;\n            state.bridgeChecked = true;\n            state.bridgeAttempting = false;\n            return user;\n          });\n        }\n        state.bridgeChecked = true;\n        state.bridgeAttempting = false;\n        claim('firebase-shopify-bridge:token-required', { status: 'backend-required', error: error.message, endpoint: b.tokenEndpoint || '/apps/dsd-firebase-custom-token' });\n        if (!supabaseCutoverReady()) renderStatus('Your account connection is still loading. Refresh or log in again if this continues.');\n        return null;\n      });\n  }\n  function bridgeShopifyToFirebaseForStartup(){\n    if (!supabaseCutoverReady()) return bridgeShopifyToFirebase();\n    state.bridgeChecked = true;\n    state.bridgeAttempting = false;\n    try {\n      bridgeShopifyToFirebase().catch(function(error){\n        claim('firebase-shopify-bridge:background-degraded', { canonical: 'supabase-startup-unblocked', error: error && error.message || String(error) });\n        return null;\n      });\n    } catch(error) {\n      claim('firebase-shopify-bridge:background-skipped', { canonical: 'supabase-startup-unblocked', error: error && error.message || String(error) });\n    }\n    return Promise.resolve(null);\n  }\n  function captureClaims(user){\n    if (!user || !user.getIdTokenResult) return Promise.resolve(user);\n    return user.getIdTokenResult(true).then(function(result){\n      user.claims = result.claims || {};\n      state.firebaseUser = user;\n      return user;\n    }).catch(function(){ return user; });\n  }\n  function canonicalProfilePayload(setupComplete){\n    var c = customer();\n    var key = profileKey();\n    var membership = deriveMembership();\n    return {\n      uid: actorUid() || uid(),\n      displayName: displayName(),\n      firstName: '',\n      lastName: '',\n      profileKey: key,\n      handle: key,\n      bio: state.profile && state.profile.bio || '',\n      locationCity: state.profile && (state.profile.locationCity || state.profile.city) || '',\n      locationState: state.profile && (state.profile.locationState || state.profile.state) || '',\n      location: state.profile && state.profile.location || '',\n      avatarMediaId: state.profile && state.profile.avatarMediaId || '',\n      bannerMediaId: state.profile && state.profile.bannerMediaId || '',\n      bannerPosition: state.profile && state.profile.bannerPosition || 'center',\n      birthdate: state.profile && state.profile.birthdate || '',\n      age: Number(state.profile && state.profile.age || 0),\n      ageVerified: state.profile && state.profile.ageVerified === true,\n      adultContentEnabled: state.profile && state.profile.adultContentEnabled === true,\n      visibility: state.profile && state.profile.visibility || 'public',\n      adultVisibility: state.profile && state.profile.adultVisibility || 'hidden_until_verified',\n      notificationPreferences: Object.assign({ relationships: true, content: true, messages: true, stories: true, moderation: false }, state.profile && state.profile.notificationPreferences || {}),\n      setupComplete: !!setupComplete,\n      accountAuthority: 'shopify-session',\n      authBridge: 'firebase-custom-token',\n      membership: membership,\n      dsdPlus: membership.active === true,\n      status: setupComplete ? 'active' : 'setup_required',\n      entity: entityMeta('profile', state.profile && state.profile.visibility || 'public', 'standard', { moderationStatus: setupComplete ? 'approved' : 'pending' })\n    };\n  }\n  function sameProfileOwner(existing, proposedKey){\n    existing = existing && typeof existing === 'object' ? existing : {};\n    var c = customer() || {};\n    var existingUid = String(existing.uid || existing.userId || existing.ownerUid || existing.id || '');\n    var existingKey = clean(existing.profileKey || existing.handle || '', '');\n    var proposed = clean(proposedKey || profileKey(), '');\n    if (identityMatchesCurrent(existingUid, existingKey)) return true;\n    if (proposed && existingKey && existingKey === proposed && proposed === clean(profileKey(), '')) return true;\n    if (!existingUid && proposed && existingKey && existingKey === proposed && state.profile && clean(state.profile.profileKey || state.profile.handle || '', '') === proposed) return true;\n    return false;\n  }\n  function publicProfilePayload(privateProfile){\n    var p = privateProfile || canonicalProfilePayload(false);\n    var profileUid = p.uid || p.userId || p.user_id || '';\n    var profileKeyValue = p.profileKey || p.profile_key || p.handle || '';\n    var existingPublic = profileByUid(profileUid || '', profileKeyValue || '') || {};\n    var avatarMediaId = p.avatarMediaId || p.avatar_media_id || p.avatarWasabiObjectKey || p.avatar_wasabi_object_key || existingPublic.avatarMediaId || existingPublic.avatar_media_id || existingPublic.avatarWasabiObjectKey || existingPublic.avatar_wasabi_object_key || '';\n    var bannerMediaId = p.bannerMediaId || p.headerMediaId || p.banner_media_id || p.header_media_id || p.bannerWasabiObjectKey || p.banner_wasabi_object_key || existingPublic.bannerMediaId || existingPublic.headerMediaId || existingPublic.banner_media_id || existingPublic.header_media_id || existingPublic.bannerWasabiObjectKey || existingPublic.banner_wasabi_object_key || '';\n    return {\n      uid: profileUid,\n      userId: profileUid,\n      user_id: profileUid,\n      profileKey: profileKeyValue,\n      handle: p.handle || profileKeyValue,\n      displayName: p.displayName,\n      bio: p.bio || p.about || p.description || p.profileBio || existingPublic.bio || existingPublic.about || existingPublic.description || '',\n      locationCity: p.locationCity || p.city || existingPublic.locationCity || existingPublic.city || '',\n      locationState: p.locationState || p.state || existingPublic.locationState || existingPublic.state || '',\n      location: p.location || [p.locationCity || p.city, p.locationState || p.state].filter(Boolean).join(', ') || existingPublic.location || '',\n      avatarMediaId: avatarMediaId,\n      bannerMediaId: bannerMediaId,\n      clearAvatarMediaId: p.clearAvatarMediaId === true,\n      clearBannerMediaId: p.clearBannerMediaId === true,\n      bannerPosition: p.bannerPosition || 'center',\n      followerCount: Number(p.followerCount != null ? p.followerCount : state.followersRecords.length) || 0,\n      followingCount: Number(p.followingCount != null ? p.followingCount : state.followingRecords.length) || 0,\n      postCount: Math.max(Number(p.postCount || 0), Number(existingPublic.postCount || 0)),\n      storyCount: Math.max(Number(p.storyCount || 0), Number(existingPublic.storyCount || 0)),\n      mediaCount: Math.max(Number(p.mediaCount || 0), Number(existingPublic.mediaCount || 0)),\n      favoriteCount: Math.max(Number(p.favoriteCount || p.favoritesCount || 0), Number(existingPublic.favoriteCount || existingPublic.favoritesCount || 0)),\n      savedCount: Math.max(Number(p.savedCount || p.savesCount || 0), Number(existingPublic.savedCount || existingPublic.savesCount || 0)),\n      viewCount: Math.max(Number(p.viewCount || p.profileViewCount || 0), Number(existingPublic.viewCount || existingPublic.profileViewCount || 0)),\n      dsdPlus: p.dsdPlus === true || (p.membership && p.membership.active === true) || existingPublic.dsdPlus === true,\n      membershipTier: p.membership && p.membership.active === true ? p.membership.tier : '',\n      age: Number(p.age || existingPublic.age || 0),\n      ageVerified: p.ageVerified === true || existingPublic.ageVerified === true,\n      adultContentEnabled: p.adultContentEnabled === true || existingPublic.adultContentEnabled === true,\n      birthdateProvided: !!p.birthdate,\n      over18: p.ageVerified === true || Number(p.age || 0) >= 18 || existingPublic.over18 === true,\n      searchable: !!p.setupComplete && (p.visibility || (p.entity && p.entity.visibility) || 'public') === 'public',\n      adultVisibility: p.adultVisibility || 'hidden_until_verified',\n      setupComplete: !!p.setupComplete,\n      status: p.setupComplete ? 'active' : 'setup_required',\n      entity: Object.assign({}, p.entity || {}, { type: 'profile', visibility: p.visibility || 'public', moderationStatus: p.setupComplete ? 'approved' : 'pending' }),\n      updatedAt: serverTimestamp()\n    };\n  }\n  function applyProfileIdentityCascade(profile){\n    if (!profile) return null;\n    var publicPayload = publicProfilePayload(profile);\n    var targetUid = String(publicPayload.uid || publicPayload.userId || publicPayload.user_id || profile.uid || '').trim();\n    var targetKey = clean(publicPayload.profileKey || publicPayload.handle || profile.profileKey || profile.handle || '', '').toLowerCase();\n    var display = publicPayload.displayName || profile.displayName || targetKey || 'DSD member';\n    var avatar = publicPayload.avatarMediaId || profile.avatarMediaId || profile.thumbnailMediaId || '';\n    var existing = false;\n    state.publicProfiles = (state.publicProfiles || []).map(function(item){\n      var itemUid = String(item.uid || item.userId || item.user_id || '').trim();\n      var itemKey = clean(item.profileKey || item.handle || '', '').toLowerCase();\n      if ((targetUid && itemUid === targetUid) || (targetKey && itemKey === targetKey)) {\n        existing = true;\n        return Object.assign({}, item, publicPayload);\n      }\n      return item;\n    });\n    if (!existing) state.publicProfiles.push(publicPayload);\n    function cascadeRecord(record){\n      if (!record) return record;\n      var authorUid = String(record.authorUid || record.ownerUid || record.userId || '').trim();\n      var authorKey = clean(record.authorProfileKey || record.ownerProfileKey || record.profileKey || '', '').toLowerCase();\n      if (!((targetUid && authorUid === targetUid) || (targetKey && authorKey === targetKey))) return record;\n      return Object.assign({}, record, {\n        authorProfileKey: targetKey || record.authorProfileKey || record.ownerProfileKey || '',\n        ownerProfileKey: targetKey || record.ownerProfileKey || record.authorProfileKey || '',\n        authorDisplayName: display,\n        ownerDisplayName: display,\n        authorAvatarMediaId: avatar || record.authorAvatarMediaId || '',\n        ownerAvatarMediaId: avatar || record.ownerAvatarMediaId || ''\n      });\n    }\n    state.posts = (state.posts || []).map(cascadeRecord);\n    state.stories = (state.stories || []).map(cascadeRecord);\n    Object.keys(state.commentsByPost || {}).forEach(function(postId){\n      state.commentsByPost[postId] = (state.commentsByPost[postId] || []).map(cascadeRecord);\n    });\n    state.notifications = (state.notifications || []).map(function(item){\n      if (!item) return item;\n      var actorKey = clean(item.actorProfileKey || item.profileKey || '', '').toLowerCase();\n      var actorUid = String(item.actorUid || item.authorUid || '').trim();\n      if (!((targetUid && actorUid === targetUid) || (targetKey && actorKey === targetKey))) return item;\n      return Object.assign({}, item, { actorDisplayName: display, actorAvatarMediaId: avatar || item.actorAvatarMediaId || '' });\n    });\n    return publicPayload;\n  }\n  function refreshPublicRelationshipCounts(targetUid, targetProfileKey, delta){\n    var sourceKey = profileKey();\n    var key = targetProfileKey || (profileByUid(targetUid, '') || {}).profileKey || '';\n    var followingCount = state.followingRecords.filter(function(item){ return item && item.state !== 'unfollowed'; }).length;\n    state.publicProfiles = (state.publicProfiles || []).map(function(profile){\n      var itemKey = clean(profile && (profile.profileKey || profile.handle || ''), '').toLowerCase();\n      var itemUid = String(profile && (profile.uid || profile.userId || profile.user_id || '') || '').trim();\n      var next = profile;\n      if (sourceKey && itemKey === clean(sourceKey, '').toLowerCase()) {\n        next = Object.assign({}, next, { followingCount: followingCount });\n      }\n      if ((key && itemKey === clean(key, '').toLowerCase()) || (targetUid && itemUid === String(targetUid || '').trim())) {\n        next = Object.assign({}, next, { followerCount: Math.max(0, Number(next.followerCount || next.followersCount || next.followers || 0) + Number(delta || 0)) });\n      }\n      return next;\n    });\n    claim('public-profile-counts:client-write-deconstructed', {\n      sourceKey: sourceKey,\n      targetProfileKey: key,\n      targetUid: targetUid,\n      delta: Number(delta || 0),\n      reason: 'follows table is canonical; browser public_profiles count writes are not canonical after new-store identity rebinding'\n    });\n    return Promise.resolve([]);\n  }\n  function publicProfileVisible(profile){\n    if (!profile || profile.searchable === false || profile.removeFromDiscovery === true || profile.profileHidden === true) return false;\n    if (publicProfileDuplicateArtifact(profile)) return false;\n    if (canonicalLaunchProfileOwnerMismatch(profile)) return false;\n    if (!publicProfileLooksLaunchReady(profile)) return false;\n    if (profile.status === 'hidden' || profile.status === 'rejected' || profile.status === 'removed' || profile.status === 'disabled' || profile.status === 'deleted') return false;\n    if (profile.accountState === 'hidden' || profile.accountState === 'removed' || profile.accountState === 'disabled' || profile.accountState === 'deleted' || profile.accountState === 'suspended') return false;\n    if (profile.isTestAccount === true || profile.testAccount === true) return false;\n    if (!clean(profile.profileKey || profile.handle || '', '')) return false;\n    if (recordSourceRisk(profile)) return false;\n    if (looksLikeRawEmail(profile.displayName) || looksLikeRawEmail(profile.profileKey) || looksLikeRawEmail(profile.handle)) return false;\n    if (!publicRecordVisible(profile)) return false;\n    var entity = profile.entity || {};\n    var visibility = profile.visibility || entity.visibility || 'public';\n    return visibility === 'public' && canViewClassified(profile) && (profile.status === 'active' || profile.setupComplete === true || entity.moderationStatus === 'approved');\n  }\n  function profileVisibility(profile){\n    var entity = profile && profile.entity || {};\n    return normalizeVisibility(profile && (profile.visibility || entity.visibility || 'public'));\n  }\n  function relationshipStateForUid(targetUid){\n    targetUid = String(targetUid || '').trim();\n    if (!targetUid) return '';\n    if (state.followingByUid[targetUid]) return 'active';\n    if (state.followRequestByUid[targetUid]) return 'requested';\n    return '';\n  }\n  function canViewProfileContent(profile){\n    if (!profile) return false;\n    if (isOwnProfileRoute() || canModerate()) return true;\n    if (profileVisibility(profile) !== 'private') return publicProfileVisible(profile);\n    return !!(profile.uid && state.followingByUid[profile.uid]);\n  }\n  function profileRestrictionType(profile){\n    if (!profile) return '';\n    if (profileVisibility(profile) === 'private') return 'private';\n    return classifiedRestrictionType(profile);\n  }\n  function viewedProfileVisible(profile){\n    if (publicProfileVisible(profile)) return true;\n    if (!profile) return false;\n    if (publicProfileDuplicateArtifact(profile) || recordSourceRisk(profile)) return false;\n    if (looksLikeRawEmail(profile.displayName) || looksLikeRawEmail(profile.profileKey) || looksLikeRawEmail(profile.handle)) return false;\n    var visibility = profileVisibility(profile);\n    var entity = profile.entity || {};\n    var active = profile.status === 'active' || profile.setupComplete === true || entity.moderationStatus === 'approved';\n    return active && (visibility === 'private' || visibility === 'public' || visibility === 'gated');\n  }\n  function mediaIdLooksLikeUuid(value){\n    return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(String(value || '').trim());\n  }\n  function readableProfileMediaId(record){\n    record = record || {};\n    var candidates = [\n      record.displayMediaId,\n      record.display_media_id,\n      record.legacyMediaId,\n      record.legacy_media_id,\n      record.mediaId,\n      record.media_id,\n      record.wasabiObjectKey,\n      record.wasabi_object_key,\n      record.objectKey,\n      record.object_key,\n      record.path,\n      record.avatarWasabiObjectKey,\n      record.avatar_wasabi_object_key,\n      record.bannerWasabiObjectKey,\n      record.banner_wasabi_object_key,\n      record.headerWasabiObjectKey,\n      record.header_wasabi_object_key\n    ];\n    for (var i = 0; i < candidates.length; i += 1) {\n      var value = String(candidates[i] || '').trim();\n      if (value && !mediaIdLooksLikeUuid(value)) return value;\n    }\n    return '';\n  }\n  function readableProfileSlotMediaId(record, slot){\n    record = record || {};\n    var candidates = slot === 'banner' ? [\n      record.bannerWasabiObjectKey,\n      record.banner_wasabi_object_key,\n      record.headerWasabiObjectKey,\n      record.header_wasabi_object_key,\n      record.coverWasabiObjectKey,\n      record.cover_wasabi_object_key,\n      record.bannerObjectKey,\n      record.banner_object_key,\n      record.headerObjectKey,\n      record.header_object_key,\n      record.coverObjectKey,\n      record.cover_object_key\n    ] : [\n      record.avatarWasabiObjectKey,\n      record.avatar_wasabi_object_key,\n      record.photoWasabiObjectKey,\n      record.photo_wasabi_object_key,\n      record.avatarObjectKey,\n      record.avatar_object_key,\n      record.displayMediaId,\n      record.display_media_id\n    ];\n    for (var i = 0; i < candidates.length; i += 1) {\n      var value = String(candidates[i] || '').trim();\n      if (value && !mediaIdLooksLikeUuid(value)) return value;\n    }\n    return '';\n  }\n  function profileAuthorMediaFallback(profile, slot){\n    profile = profile || {};\n    var targetUid = String(profile.uid || profile.userId || profile.user_id || '').trim();\n    var targetKey = clean(profile.profileKey || profile.handle || '', '').toLowerCase();\n    var rows = (state.posts || []).concat(state.stories || []).slice().sort(function(a, b){ return recordMillis(b) - recordMillis(a); });\n    for (var i = 0; i < rows.length; i += 1) {\n      var row = rows[i] || {};\n      var rowUid = String(row.authorUid || row.ownerUid || row.userId || '').trim();\n      var rowKey = clean(row.authorProfileKey || row.ownerProfileKey || row.profileKey || '', '').toLowerCase();\n      if ((targetUid && rowUid === targetUid) || (targetKey && rowKey === targetKey)) {\n        var mediaId = slot === 'banner'\n          ? (row.authorBannerMediaId || row.ownerBannerMediaId || row.bannerMediaId || row.headerMediaId || row.coverMediaId || row.cover_media_id || row.bannerObjectKey || row.headerObjectKey || '')\n          : (row.authorAvatarMediaId || row.ownerAvatarMediaId || row.avatarMediaId || '');\n        if (mediaId) return mediaId;\n      }\n    }\n    if (targetKey && typeof document !== 'undefined' && slot === 'avatar') {\n      var authorLinks = qsa('.dsd-post-card__avatar[data-dsd-avatar-media-id], .dsd-post-card [href*=\"/pages/user-profile?profile=\"], .dsd-users311__card[data-profile-key]');\n      for (var j = 0; j < authorLinks.length; j += 1) {\n        var link = authorLinks[j];\n        var card = link.closest && link.closest('.dsd-post-card, [data-dsd-post-card], .dsd-users311__card');\n        var href = String(link.getAttribute && link.getAttribute('href') || '');\n        var cardKey = clean(card && card.getAttribute && card.getAttribute('data-profile-key') || '', '').toLowerCase();\n        var text = String(card && card.textContent || '').toLowerCase();\n        var linkKey = '';\n        try {\n          if (href) linkKey = clean(new URL(href, location.origin).searchParams.get('profile') || '', '').toLowerCase();\n        } catch(e) {}\n        if ((cardKey && cardKey === targetKey) || (linkKey && linkKey === targetKey) || text.indexOf('@' + targetKey) !== -1) {\n          var domAvatar = card && qs('.dsd-post-card__avatar[data-dsd-avatar-media-id], .dsd-users311__avatar[data-dsd-avatar-media-id]', card);\n          var domMediaId = link.getAttribute('data-dsd-avatar-media-id') || (domAvatar && domAvatar.getAttribute('data-dsd-avatar-media-id')) || '';\n          if (domMediaId) return domMediaId;\n        }\n      }\n    }\n    if (targetKey && typeof document !== 'undefined' && slot === 'banner') {\n      var cards = qsa('.dsd-users311__card[data-profile-key], [data-dsd-user-profile]');\n      for (var k = 0; k < cards.length; k += 1) {\n        var node = cards[k];\n        var nodeKey = clean(node.getAttribute && node.getAttribute('data-profile-key') || routeProfileKey() || '', '').toLowerCase();\n        if (nodeKey && nodeKey !== targetKey) continue;\n        var cover = qs('[data-dsd-profile-cover-media-id], [data-dsd-cover-media-id], [data-dsd-header-media-id]', node);\n        var coverId = cover && (cover.getAttribute('data-dsd-profile-cover-media-id') || cover.getAttribute('data-dsd-cover-media-id') || cover.getAttribute('data-dsd-header-media-id')) || '';\n        if (coverId) return coverId;\n      }\n    }\n    return '';\n  }\n  function canonicalProfileAvatarMediaId(profile){\n    profile = profile || {};\n    var avatarCandidates = [\n      profile.avatarMediaId,\n      profile.thumbnailMediaId,\n      profile.profileImageMediaId,\n      profile.photoMediaId,\n      profile.imageMediaId,\n      profile.avatarImageId,\n      profile.avatar_media_id,\n      profile.thumbnail_media_id,\n      profile.profile_image_media_id,\n      profile.photo_media_id,\n      profile.image_media_id,\n      profile.avatar_image_id,\n      profile.avatarWasabiObjectKey,\n      profile.avatar_wasabi_object_key,\n      profile.photoWasabiObjectKey,\n      profile.photo_wasabi_object_key,\n      profile.avatarObjectKey,\n      profile.avatar_object_key\n    ];\n    var primary = '';\n    for (var i = 0; i < avatarCandidates.length; i += 1) {\n      primary = String(avatarCandidates[i] || '').trim();\n      if (primary) break;\n    }\n    var fallback = readableProfileSlotMediaId(profile, 'avatar') || profileAuthorMediaFallback(profile, 'avatar');\n    if (mediaIdLooksLikeUuid(primary) && fallback && !mediaIdLooksLikeUuid(fallback)) return fallback;\n    return primary || fallback || '';\n  }\n  function canonicalProfileBannerMediaId(profile){\n    profile = profile || {};\n    var bannerCandidates = [\n      profile.bannerMediaId,\n      profile.headerMediaId,\n      profile.coverMediaId,\n      profile.backgroundMediaId,\n      profile.bannerImageId,\n      profile.headerImageId,\n      profile.coverImageId,\n      profile.banner_media_id,\n      profile.header_media_id,\n      profile.cover_media_id,\n      profile.background_media_id,\n      profile.banner_image_id,\n      profile.header_image_id,\n      profile.cover_image_id,\n      profile.bannerWasabiObjectKey,\n      profile.banner_wasabi_object_key,\n      profile.headerWasabiObjectKey,\n      profile.header_wasabi_object_key,\n      profile.coverWasabiObjectKey,\n      profile.cover_wasabi_object_key,\n      profile.bannerObjectKey,\n      profile.banner_object_key,\n      profile.headerObjectKey,\n      profile.header_object_key,\n      profile.coverObjectKey,\n      profile.cover_object_key\n    ];\n    var primary = '';\n    for (var i = 0; i < bannerCandidates.length; i += 1) {\n      primary = String(bannerCandidates[i] || '').trim();\n      if (primary) break;\n    }\n    var fallback = readableProfileSlotMediaId(profile, 'banner') || profileAuthorMediaFallback(profile, 'banner');\n    if (mediaIdLooksLikeUuid(primary) && fallback && !mediaIdLooksLikeUuid(fallback)) return fallback;\n    return primary || fallback || '';\n  }\n  function publicProfileDuplicateArtifact(profile){\n    if (!profile) return false;\n    var stateValue = String(profile.status || profile.state || (profile.entity && profile.entity.status) || '').toLowerCase();\n    var profileType = String(profile.profileType || profile.profile_type || profile.recordType || profile.record_type || '').toLowerCase();\n    return !!(profile.duplicateOf || profile.duplicate_of || profile.aliasOf || profile.alias_of || profile.isDuplicate === true || profile.duplicate === true || stateValue === 'duplicate' || profileType === 'duplicate');\n  }\n  function canonicalLaunchProfileOwner(profile){\n    return null;\n  }\n  function canonicalLaunchProfileOwnerMismatch(profile){\n    var expected = canonicalLaunchProfileOwner(profile);\n    if (!expected) return false;\n    var ownerUid = clean(profile.uid || profile.userId || profile.user_id || profile.firebaseUid || profile.firebase_uid || '', '');\n    if (ownerUid && ownerUid !== expected.uid) return true;\n    return false;\n  }\n  function legacyFounderDuplicateProfileArtifact(profile){\n    return publicProfileDuplicateArtifact(profile);\n  }\n  function duplicateProfileArtifactKey(key){\n    key = clean(key || '', '').replace(/^@+/, '').toLowerCase();\n    if (!key) return false;\n    if (key === 'dsdsecondary2') return true;\n    if (key === 'profile' || key === 'member' || key === 'user') return true;\n    if (/@/.test(key)) return true;\n    return false;\n  }\n  function conversationParticipantMatch(conversation){\n    if (!conversation || !hasCustomer()) return false;\n    var selfKey = clean(profileKey() || '', '').toLowerCase();\n    var ids = (conversation.participantIds || conversation.participant_ids || []).map(function(item){ return String(item || '').trim(); });\n    var keys = (conversation.participantKeys || conversation.participant_profile_keys || []).map(function(item){ return clean(item || '', '').toLowerCase(); });\n    if (ids.some(function(id){ return identityMatchesCurrent(id, ''); })) return true;\n    if (selfKey && keys.indexOf(selfKey) !== -1) return true;\n    if (identityMatchesCurrent(conversation.senderUid, conversation.senderProfileKey) || identityMatchesCurrent(conversation.recipientUid, conversation.recipientProfileKey)) return true;\n    return false;\n  }\n  function activeConversationRecords(items){\n    return (items || []).filter(function(conversation){\n      var stateValue = normalizedRecordState(conversation);\n      if (['deleted','archived','removed','hidden','rejected','blocked','disabled'].indexOf(stateValue) !== -1) return false;\n      if (conversation.archivedAt || conversation.archived_at || conversation.deletedAt || conversation.deleted_at) return false;\n      return conversationParticipantMatch(conversation);\n    });\n  }\n  function recordBelongsToProfile(record, targetUid, targetKey, uidField){\n    var key = clean(record && (record.authorProfileKey || record.ownerProfileKey || record.profileKey || ''), '').toLowerCase();\n    var target = clean(targetKey || '', '').toLowerCase();\n    var recordUid = String(record && (record[uidField || 'authorUid'] || record.ownerUid || record.uid || record.userId || '') || '').trim();\n    if (duplicateProfileArtifactKey(key)) return false;\n    if (target && key) return key === target;\n    if (target && recordUid) {\n      var keyUid = profileUidForKey(target);\n      if (keyUid) return recordUid === keyUid;\n    }\n    if (targetUid && recordUid) return recordUid === String(targetUid || '').trim();\n    if (target) return !!(key && key === target);\n    return !!(targetUid && recordUid && recordUid === String(targetUid || '').trim());\n  }\n  function publicSpaceVisible(space){\n    if (!space || space.status === 'deleted' || space.status === 'hidden' || space.status === 'rejected') return false;\n    if (!publicRecordVisible(space)) return false;\n    var publicApproved = (space.status === 'approved' || (space.moderation && space.moderation.state === 'approved')) && (space.visibility === 'public' || (space.entity && space.entity.visibility === 'public'));\n    return canViewClassified(space) && (publicApproved || identityMatchesCurrent(space.ownerUid, space.ownerProfileKey) || canModerate());\n  }\n  function publishPublicProfiles(items){\n    var source = Array.isArray(items) ? items : state.publicProfiles;\n    state.publicProfiles = dedupePublicProfiles((source || []).filter(publicProfileVisible));\n    try { window.dispatchEvent(new CustomEvent('dsd:public-profiles:updated', { detail: { profiles: state.publicProfiles.slice(0, 100), version: VERSION } })); } catch(e){}\n  }\n  function ensureProfile(){\n    if (!hasCustomer()) return Promise.resolve(null);\n    if (!hasFirebaseAuth()) {\n      return primeSupabaseEntitlementSession().then(function(){\n        var scopedKey = customerProfileKeyValue();\n        if (scopedKey) {\n          return readSupabasePrivateProfileByKey(scopedKey).then(function(privateProfile){\n            return privateProfile || readSupabaseProfileByKey(scopedKey);\n          }).then(function(scopedProfile){\n            if (scopedProfile) {\n              return mergePublicProfileMediaFromCanonicalProfile(scopedProfile, scopedKey).then(function(mediaReadyProfile){\n                activateCustomerScopedProfile(mediaReadyProfile || scopedProfile);\n                maybeRouteProfile();\n                renderAll();\n                clearStaleConnectionStatus();\n                return state.profile;\n              });\n            }\n            return null;\n          });\n        }\n        return null;\n      }).then(function(scopedProfile){\n        if (scopedProfile) return scopedProfile;\n        return getDoc('profiles/current').then(function(snap){\n          state.profileExists = !!(snap && snap.exists && snap.exists());\n          state.profile = state.profileExists ? Object.assign({ uid: uid() || '' }, snap.data() || {}) : canonicalProfilePayload(false);\n          if (!state.profileExists) {\n            if (storeScopedIdentityRequiresPrivateBridge() && !customerProfileKeyValue()) {\n              state.profile = identityRebindingRequiredProfile();\n              renderStatus('Profile identity is syncing through the private bridge. Posting, stories, messages, and profile media are locked until the canonical Supabase profile is rebound.');\n            } else {\n              var pendingKey = nonPlaceholderProfileKey(shopifyDisplayProfileKey(customer()));\n              state.profile.uid = state.profile.uid || '';\n              state.profile.profileKey = pendingKey;\n              state.profile.handle = state.profile.profileKey;\n              state.profile.displayName = isCanonicalFounder() ? 'Detroit Sky Daddy' : displayName();\n              state.profile.status = 'bridge_pending';\n              state.profile.setupComplete = false;\n              state.profile.authBridge = 'supabase-current-profile-pending';\n              renderStatus('Profile display is available. Save, post, and media actions remain locked until the account bridge reconnects.');\n            }\n          }\n          publishPublicProfiles();\n          maybeRouteProfile();\n          renderAll();\n          return state.profile;\n        });\n      }).catch(function(error){\n        state.profileExists = false;\n        state.profile = storeScopedIdentityRequiresPrivateBridge() && !customerProfileKeyValue() ? identityRebindingRequiredProfile() : canonicalProfilePayload(false);\n        if (!state.profile.identityRebindingRequired) {\n          var fallbackKey = nonPlaceholderProfileKey(shopifyDisplayProfileKey(customer()));\n          state.profile.uid = state.profile.uid || '';\n          state.profile.profileKey = fallbackKey;\n          state.profile.handle = state.profile.profileKey;\n          state.profile.displayName = isCanonicalFounder() ? 'Detroit Sky Daddy' : displayName();\n          state.profile.status = 'bridge_pending';\n          state.profile.setupComplete = false;\n          state.profile.authBridge = 'shopify-display-only';\n        }\n        claim('supabase-current-profile:blocked', { error: error && error.message || String(error) });\n        renderStatus(state.profile.identityRebindingRequired ? 'Profile identity is syncing through the private bridge. Posting, stories, messages, and profile media are locked until the canonical Supabase profile is rebound.' : 'Profile display is available. Save, post, and media actions remain locked until the account bridge reconnects.');\n        publishPublicProfiles();\n        renderAll();\n        return state.profile;\n      });\n    }\n    return getDoc(currentProfilePath()).then(function(snap){\n      state.profileExists = !!(snap && snap.exists && snap.exists());\n      state.profile = state.profileExists ? Object.assign({ uid: uid() }, snap.data() || {}) : canonicalProfilePayload(true);\n      state.profile = profileWithPublicMirror(state.profile) || state.profile;\n      var shouldActivate = !!(state.profile && state.profile.setupComplete);\n      if (hasCustomer() && displayName() && profileKey() && (!state.profileExists || state.profile.status === 'setup_required')) shouldActivate = true;\n      var payload = profileWithPublicMirror(Object.assign({}, canonicalProfilePayload(shouldActivate), state.profile || {})) || canonicalProfilePayload(shouldActivate);\n      payload.setupComplete = shouldActivate;\n      payload.status = shouldActivate ? 'active' : 'setup_required';\n      payload.entity = entityMeta('profile', payload.visibility || 'public', 'standard', { moderationStatus: shouldActivate ? 'approved' : 'pending' });\n      return setDoc(currentProfilePath(), payload, true)\n        .then(saveMembershipCacheIfAvailable)\n        .then(function(){ return setDoc('publicProfiles/' + payload.profileKey, publicProfilePayload(payload), true); })\n        .then(function(){ return payload; });\n    }).then(function(profile){\n      if (profile) state.profile = profile;\n      publishPublicProfiles();\n      maybeRouteProfile();\n      renderAll();\n      clearStaleConnectionStatus();\n      return profile;\n    }).catch(function(error){\n      if (hasActiveProfile()) {\n        publishPublicProfiles();\n        maybeRouteProfile();\n        renderAll();\n        clearStaleConnectionStatus();\n        return state.profile;\n      }\n      renderStatus('Profile connection is temporarily unavailable. Retry after the account connection refreshes.');\n      return null;\n    });\n  }\n  function clearViewedRelationshipListeners(){\n    (state.viewedRelationshipListeners || []).forEach(function(off){ try { off(); } catch(e){} });\n    state.viewedRelationshipListeners = [];\n    state.viewedRelationshipKey = '';\n    state.viewedFollowersRecords = [];\n    state.viewedFollowingRecords = [];\n    state.viewedFavoritesRecords = [];\n    state.viewedSavedItems = [];\n  }\n  function loadViewedPublicRelationships(profile){\n    var targetUid = profile && (profile.uid || profile.userId || profile.user_id || profile.id) || '';\n    var targetKey = clean(profile && (profile.profileKey || profile.handle || ''), '');\n    var listenerKey = targetUid || targetKey;\n    if (!profile || isOwnProfileRoute() || !listenerKey) {\n      clearViewedRelationshipListeners();\n      renderRelationships();\n      return Promise.resolve([]);\n    }\n    if (!hasCustomer()) {\n      clearViewedRelationshipListeners();\n      claim('public-viewed-profile-relationship-loaders:deconstructed', {\n        profileKey: targetKey,\n        reason: 'public no-cookie profile route uses public profile counts and safe shells without follower/favorite/save detail reads'\n      });\n      renderRelationships();\n      return Promise.resolve([]);\n    }\n    if (state.viewedRelationshipKey === listenerKey) return Promise.resolve(state.viewedRelationshipListeners);\n    clearViewedRelationshipListeners();\n    state.viewedRelationshipKey = listenerKey;\n    var options = { publicRead: true, surface: 'viewed-profile-relationships' };\n    function attach(path, assign){\n      try {\n        var off = listen(path, function(items){\n          assign(items || []);\n          renderRelationships();\n        }, null, options);\n        state.viewedRelationshipListeners.push(off);\n      } catch(error) {\n        claim('viewed-profile-relationship:blocked', { path: path, profileKey: targetKey, error: error && error.message || String(error) });\n      }\n    }\n    attach('relationships/' + listenerKey + '/followers', function(items){ state.viewedFollowersRecords = items.filter(function(item){ return item && item.state === 'active'; }); });\n    attach('relationships/' + listenerKey + '/following', function(items){ state.viewedFollowingRecords = items.filter(function(item){ return item && item.state === 'active'; }); });\n    attach('favorites/' + listenerKey + '/items', function(items){ state.viewedFavoritesRecords = items.filter(function(item){ return item && (item.state === 'favorite' || item.state === 'active'); }); });\n    attach('saves/' + listenerKey + '/items', function(items){ state.viewedSavedItems = activeSavedItems(items); });\n    renderRelationships();\n    return Promise.resolve(state.viewedRelationshipListeners);\n  }\n  function loadViewedPublicProfile(){\n    var key = routeProfileKey();\n    if (!key) {\n      state.viewProfile = null;\n      state.viewProfileResolvedKey = '';\n      clearViewedRelationshipListeners();\n      return Promise.resolve(null);\n    }\n    state.viewProfileResolvedKey = '';\n    renderAll();\n    return getDoc('publicProfiles/' + key, { publicRead: true, surface: 'public-profile-route' }).then(function(snap){\n      var fetchedProfile = snap && snap.exists && snap.exists() ? Object.assign({ profileKey: key }, snap.data() || {}) : null;\n      state.viewProfile = fetchedProfile && viewedProfileVisible(fetchedProfile) ? fetchedProfile : null;\n      state.viewProfileResolvedKey = state.viewProfile || state.publicProfilesLoaded ? key : '';\n      publishPublicProfiles();\n      renderAll();\n      return loadViewedPublicRelationships(state.viewProfile).then(function(){ return state.viewProfile; });\n    }).catch(function(error){\n      state.viewProfileResolvedKey = key;\n      clearViewedRelationshipListeners();\n      claim('public-profile:read-blocked', { profileKey: key, error: error.message, path: 'publicProfiles/' + key });\n      return null;\n    });\n  }\n  function maybeRouteProfile(){\n    if (!hasCustomer()) return;\n    var path = window.location.pathname;\n    if (path === '/account' || path === '/account/login' || path === '/account/register') {\n      routeTo((state.profile && state.profile.setupComplete) ? profileRouteHref(profileKey()) : '/pages/user-profile?setup=1');\n    }\n  }\n\n  function requireAuth(action){\n    if (hasCustomer() && (hasFirebaseAuth() || actorRelationshipIdentity() || supabaseCutoverReady())) return true;\n    if (!hasCustomer()) {\n      renderPublicGuard();\n      if (action) renderStatus('Log in with your Shopify account to ' + action + '.');\n    } else if (action) {\n      renderStatus('Your account connection is still loading before you ' + action + '.');\n    }\n    return false;\n  }\n  function requireActiveProfile(action){\n    if (!requireAuth(action)) return false;\n    if (hasActiveProfile()) return true;\n    if (state.profile && state.profile.setupComplete === true && hasAccountRestriction()) {\n      renderStatus('This account is ' + accountRestrictionState() + '. Founder review is required before you can ' + (action || 'continue') + '.');\n      return false;\n    }\n    renderStatus('Complete profile setup before you ' + (action || 'continue') + '.');\n    if (window.location.pathname !== '/pages/user-profile') routeTo('/pages/user-profile?setup=1');\n    return false;\n  }\n  function syncRestrictedActionControls(root){\n    var disabled = !hasActiveProfile();\n    qsa('[data-dsd-canonical-composer], [data-dsd-comment-form], [data-dsd-message-form], [data-dsd-story-form]', root || document).forEach(function(form){\n      qsa('input, textarea, select, button', form).forEach(function(el){ el.disabled = disabled; });\n      if (form.id) qsa('[form=\"' + form.id + '\"]', root || document).forEach(function(el){ el.disabled = disabled; });\n      form.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n    });\n  }\n  function collectFormFiles(form){\n    var files = [];\n    qsa('input[type=\"file\"]', form || document).forEach(function(input){ Array.prototype.forEach.call(input.files || [], function(file){ files.push(file); }); });\n    return files;\n  }\n  function validateStoryMediaFiles(files, form){\n    files = (files || []).filter(Boolean);\n    if (files.length <= 1) return true;\n    if (form) {\n      qsa('input[type=\"file\"]', form).forEach(function(input){ try { input.value = ''; } catch(e){} });\n      removeFilePreviews(form);\n    }\n    renderStatus('Stories support one photo or one video only. Select a single media file.');\n    return false;\n  }\n  function createOrUpdateProfile(form){\n    if (!requireAuth('save profile')) return Promise.resolve(null);\n    if (state.profile && state.profile.setupComplete === true && hasAccountRestriction() && !isFounderRole()) {\n      renderStatus('This account is ' + accountRestrictionState() + '. Profile changes are locked until DSD support restores the account.');\n      return Promise.resolve(null);\n    }\n    var previousKey = profileKey();\n    var baseProfile = profileWithPublicMirror(canonicalProfilePayload(true)) || canonicalProfilePayload(true);\n    var data = Object.assign({}, baseProfile, form || {});\n    var cityText = String(data.locationCity || data.city || '').trim().slice(0, 80);\n    var stateText = String(data.locationState || data.state || '').trim().slice(0, 40);\n    data.locationCity = cityText;\n    data.locationState = stateText;\n    data.location = String(data.location || [cityText, stateText].filter(Boolean).join(', ')).trim().slice(0, 140);\n    var age = Number(data.age || 0);\n    var birthdateAge = data.birthdate && /^\\d{4}-\\d{2}-\\d{2}$/.test(String(data.birthdate)) ? Math.floor((Date.now() - new Date(String(data.birthdate) + 'T00:00:00').getTime()) / 31557600000) : 0;\n    var over18Candidate = age >= 18 || birthdateAge >= 18 || data.ageVerified === true || data.over18 === true || isOver18();\n    if (data.adultContentEnabled === true && !over18Candidate) {\n      renderStatus('Adult Content Enabled is only available to users 18+.');\n      data.adultContentEnabled = false;\n      return Promise.resolve(null);\n    }\n    data.profileKey = nonPlaceholderProfileKey(data.profileKey || data.handle || profileKey() || data.displayName);\n    if (!data.profileKey) {\n      renderStatus('Enter a profile handle before saving profile settings.');\n      return Promise.resolve(null);\n    }\n    data.handle = data.profileKey;\n    data.setupComplete = true;\n    data.status = 'active';\n    data.uid = actorUid() || data.uid || uid();\n    var profileAvatarId = data.avatarMediaId || data.profileImageMediaId || data.photoMediaId || data.avatar_media_id || data.profile_image_media_id || data.photo_media_id || '';\n    if (profileAvatarId) {\n      data.avatarMediaId = profileAvatarId;\n      data.avatar_media_id = profileAvatarId;\n      data.profileImageMediaId = profileAvatarId;\n      data.profile_image_media_id = profileAvatarId;\n      data.photoMediaId = profileAvatarId;\n      data.photo_media_id = profileAvatarId;\n      data.thumbnailMediaId = profileAvatarId;\n    }\n    var profileBannerId = data.bannerMediaId || data.headerMediaId || data.coverMediaId || data.backgroundMediaId || data.banner_media_id || data.header_media_id || data.cover_media_id || data.background_media_id || '';\n    if (profileBannerId) {\n      data.bannerMediaId = profileBannerId;\n      data.banner_media_id = profileBannerId;\n      data.headerMediaId = profileBannerId;\n      data.header_media_id = profileBannerId;\n      data.coverMediaId = profileBannerId;\n      data.cover_media_id = profileBannerId;\n      data.backgroundMediaId = profileBannerId;\n      data.background_media_id = profileBannerId;\n    }\n    data.age = Number(data.age || birthdateAge || state.profile && state.profile.age || 0);\n    data.ageVerified = data.ageVerified === true || data.over18 === true || data.age >= 18 || birthdateAge >= 18 || isOver18();\n    data.over18 = data.ageVerified === true;\n    data.adultContentEnabled = data.ageVerified === true && data.adultContentEnabled === true;\n    var privateProfileSaveBlocked = false;\n    return readPersistedPrivateProfileForLock(data.profileKey).then(function(persistedPrivate){\n      data = applyFounderModerationLock(persistedPrivate || state.profile, data);\n      return getDoc('publicProfiles/' + data.profileKey, { publicRead: true, surface: 'profile-username-check' }).catch(function(){ return null; });\n    }).then(function(existing){\n      var existingProfile = existing && existing.exists && existing.exists() && existing.data ? existing.data() || {} : null;\n      var taken = !!(existingProfile && !sameProfileOwner(existingProfile, data.profileKey));\n      if (taken) {\n        renderStatus('That username is already taken. Choose another handle.');\n        return null;\n      }\n      state.profile = data;\n      var publicData = applyProfileIdentityCascade(data);\n      return setDoc(currentProfilePath(), data, true).catch(function(error){\n        privateProfileSaveBlocked = true;\n        claim('private-profile-capability-save:blocked', {\n          profileKey: data.profileKey,\n          ageVerified: data.ageVerified === true,\n          adultContentEnabled: data.adultContentEnabled === true,\n          error: error && error.message || String(error)\n        });\n        renderStatus('Profile public identity saved, but private capability fields may need another save after the account bridge refreshes.');\n        return null;\n      })\n      .then(function(){\n        return setDoc('publicProfiles/' + data.profileKey, publicData || publicProfilePayload(data), true);\n      })\n      .then(saveMembershipCacheIfAvailable)\n      .then(function(){\n        if (previousKey && previousKey !== data.profileKey) return setDoc('publicProfiles/' + previousKey, { searchable: false, status: 'replaced', profileHidden: true, removeFromDiscovery: true, discoveryEligible: false, replacedBy: data.profileKey, replacedAt: serverTimestamp() }, true).catch(function(){ return null; });\n        return null;\n      })\n      .then(function(){\n        applyProfileIdentityCascade(data);\n        state.profile = profileWithPublicMirror(data);\n        clearStaleConnectionStatus();\n        if (privateProfileSaveBlocked) renderStatus('Profile public identity saved. Reopen Edit Profile after the account bridge refreshes to confirm age/adult capability fields.');\n        else notify(uid(), 'profile', 'Profile saved', 'Your profile is active.', profileRouteHref(data.profileKey));\n        refreshProfileCapabilitySurfaces();\n        renderAll();\n        return data;\n      })\n      .catch(function(error){\n        claim('profile-save:failed', { profileKey: data.profileKey, error: error && error.message || String(error) });\n        renderStatus('Profile save could not complete. Refresh the account connection and try again.');\n        queueDraft('profile-update', data, error);\n        return null;\n      });\n    });\n  }\n  function profileMediaPatchAliases(patch){\n    patch = Object.assign({}, patch || {});\n    var avatarId = patch.avatarMediaId || patch.avatar_media_id || patch.profileImageMediaId || patch.profile_image_media_id || patch.photoMediaId || patch.photo_media_id || '';\n    var bannerId = patch.bannerMediaId || patch.banner_media_id || patch.headerMediaId || patch.header_media_id || patch.coverMediaId || patch.cover_media_id || patch.backgroundMediaId || patch.background_media_id || '';\n    if (avatarId) {\n      patch.avatarMediaId = avatarId;\n      patch.avatar_media_id = avatarId;\n      patch.profileImageMediaId = avatarId;\n      patch.profile_image_media_id = avatarId;\n      patch.photoMediaId = avatarId;\n      patch.photo_media_id = avatarId;\n      patch.thumbnailMediaId = avatarId;\n    }\n    if (bannerId) {\n      patch.bannerMediaId = bannerId;\n      patch.banner_media_id = bannerId;\n      patch.headerMediaId = bannerId;\n      patch.header_media_id = bannerId;\n      patch.coverMediaId = bannerId;\n      patch.cover_media_id = bannerId;\n      patch.backgroundMediaId = bannerId;\n      patch.background_media_id = bannerId;\n    }\n    return patch;\n  }\n  function updateLocalPublicProfileMirror(profileKeyValue, patch){\n    var key = nonPlaceholderProfileKey(profileKeyValue || profileKey() || '');\n    if (!key || !patch) return;\n    var normalizedKey = normalizedProfileKeyValue(key);\n    var list = Array.isArray(state.publicProfiles) ? state.publicProfiles : [];\n    var index = -1;\n    list.some(function(profile, i){\n      if (normalizedProfileKeyValue(profile && (profile.profileKey || profile.handle || profile.profile_key || '')) === normalizedKey) {\n        index = i;\n        return true;\n      }\n      return false;\n    });\n    var current = index >= 0 ? list[index] : { profileKey: key, handle: key };\n    var next = profileMediaPatchAliases(Object.assign({}, current, patch, { profileKey: key, handle: current.handle || key }));\n    if (index >= 0) list[index] = next;\n    else list.push(next);\n    state.publicProfiles = list;\n  }\n  function saveProfileMediaPatch(patch){\n    if (!requireAuth('save profile media')) return Promise.resolve(null);\n    var activeProfile = currentComposerProfile() || {};\n    var key = nonPlaceholderProfileKey(\n      activeProfile.profileKey ||\n      activeProfile.handle ||\n      activeProfile.profile_key ||\n      activeProfile.publicProfileKey ||\n      activeProfile.public_profile_key ||\n      activeProfileKeyValue() ||\n      customerProfileKeyValue() ||\n      profileKey() ||\n      state.profile && (state.profile.profileKey || state.profile.handle) ||\n      ''\n    );\n    if (!key) {\n      renderStatus('Profile connection is temporarily unavailable. Retry after the account connection refreshes.');\n      return Promise.resolve(null);\n    }\n    var owner = canonicalProfileOwnerIdentity('save profile media');\n    if (!owner) return Promise.resolve(null);\n    patch = profileMediaPatchAliases(Object.assign({}, patch || {}));\n    patch.profileKey = key;\n    patch.handle = key;\n    patch.uid = owner.uid;\n    patch.userId = owner.uid;\n    patch.user_id = owner.uid;\n    var hasMediaChange = !!(patch.avatarMediaId || patch.bannerMediaId || patch.clearAvatarMediaId === true || patch.clearBannerMediaId === true);\n    var privateOk = false;\n    var publicOk = false;\n    return Promise.all([\n      setDoc(currentProfilePath(), patch, true).then(function(){ privateOk = true; return true; }).catch(function(error){\n        claim('profile-media-private-patch:blocked', { profileKey: key, error: error && error.message || String(error) });\n        return false;\n      }),\n      setDoc('publicProfiles/' + key, patch, true).then(function(){ publicOk = true; return true; }).catch(function(error){\n        claim('profile-media-public-patch:blocked', { profileKey: key, error: error && error.message || String(error) });\n        return false;\n      })\n    ]).then(function(){\n      if (!privateOk && !publicOk) throw new Error('Profile media save failed on private and public profile mirrors.');\n      if (hasMediaChange && !publicOk) throw new Error('Profile media uploaded but public profile mirror did not update.');\n      var base = Object.assign({}, state.profile || canonicalProfilePayload(true), { profileKey: key, handle: key, setupComplete: true, status: 'active' });\n      state.profile = profileWithPublicMirror(profileMediaPatchAliases(Object.assign(base, patch)));\n      updateLocalPublicProfileMirror(key, patch);\n      clearStaleConnectionStatus();\n      renderProfileIdentity();\n      hydrateProfileCardMedia(document);\n      renderDiscovery();\n      renderPosts();\n      renderStories();\n      return state.profile;\n    }).catch(function(error){\n      queueDraft('profile-media-update', patch, error);\n      renderStatus('Profile media save could not complete. Try again.');\n      return null;\n    });\n  }\n  function refreshProfileCapabilitySurfaces(){\n    refreshPublicationControls(document);\n    state.viewedAuthorListenerKey = '';\n    startListeners();\n    renderAll();\n    renderPosts();\n    renderStories();\n    renderDiscovery();\n    renderSearchIndex();\n  }\n  function scheduleLateProfileHydrationReconcile(){\n    if (state.profileHydrationReconcileScheduled === BUILD) return;\n    state.profileHydrationReconcileScheduled = BUILD;\n    var attempts = [180, 700, 1600, 3200, 5200];\n    attempts.forEach(function(delay, index){\n      window.setTimeout(function(){\n        var root = qs('[data-dsd-user-profile]');\n        if (!root) return;\n        var targetKey = nonPlaceholderProfileKey(routeProfileKey() || profileKey() || '');\n        if (!targetKey) return;\n        var blankShell = !root.dataset.dsdProfileHydrated || /loading profile|profile identity syncing|profile unavailable|public profile is not active|cannot be displayed/i.test(String(root.textContent || ''));\n        var missingMedia = !canonicalProfileAvatarMediaId(viewedProfile() || state.profile || {}) || !canonicalProfileBannerMediaId(viewedProfile() || state.profile || {});\n        if (!blankShell && !missingMedia && index > 0) return;\n        var profileRead = isOwnProfileRoute()\n          ? readSupabasePrivateProfileByKey(targetKey).then(function(privateProfile){ return privateProfile || readSupabaseProfileByKey(targetKey); })\n          : readSupabaseProfileByKey(targetKey);\n        profileRead.then(function(profile){\n          if (!profile) return null;\n          if (isOwnProfileRoute() || identityMatchesCurrent(profile.uid || profile.userId || '', profile.profileKey || profile.handle || '')) activateCustomerScopedProfile(profile);\n          else {\n            state.viewProfile = profile;\n            state.viewProfileMissingKey = '';\n            state.viewProfileResolvedKey = targetKey;\n            state.viewProfileLookupKey = targetKey;\n            state.publicProfiles = dedupePublicProfiles((state.publicProfiles || []).concat([publicProfilePayload(profile)]));\n            publishPublicProfiles(state.publicProfiles);\n          }\n          renderAll();\n          hydrateProfileCardMedia(root);\n          hydrateAvatarMedia(root);\n          claim('profile-late-hydration-reconcile:applied', { profileKey: profile.profileKey || profile.handle || targetKey, attempt: index + 1 });\n          return profile;\n        }).catch(function(error){\n          claim('profile-late-hydration-reconcile:blocked', { profileKey: targetKey, attempt: index + 1, error: error && error.message || String(error) });\n          return null;\n        });\n      }, delay);\n    });\n  }\n  function createMediaManifest(file, surface, surfaceId, slot, visibility, contentRating, signerContext){\n    if (!file) return Promise.resolve(null);\n    var mediaOwner = surface === 'profile' ? canonicalProfileOwnerIdentity('upload profile media') : activeAuthorIdentity('upload media');\n    if (!mediaOwner) return Promise.resolve(null);\n    renderStatus('Preparing ' + (file.type && file.type.indexOf('video/') === 0 ? 'video' : 'media') + ' upload...');\n    return prepareComposerMediaFile(file).then(function(preparedFile){\n    file = preparedFile || file;\n    if (file.dsdCompressedFrom) renderStatus('Compressed image from ' + Math.round(file.dsdCompressedFrom / 1024) + ' KB to ' + Math.round(file.size / 1024) + ' KB.');\n    else if (file.type && file.type.indexOf('video/') === 0) renderStatus('Video selected. Upload progress will be shown during transfer.');\n    var id = clean(surface + '-' + Date.now() + '-' + file.name, 'media');\n    var kind = file.type.indexOf('video/') === 0 ? 'video' : 'image';\n    var rating = contentRating || 'standard';\n    var root = surface === 'story' ? 'stories' : surface + 's';\n    var path = surface === 'profile'\n      ? 'profiles/' + mediaOwner.profileKey + '/' + (slot || 'media') + '/' + file.name\n      : root + '/' + (surfaceId || mediaOwner.uid) + '/' + id + '/' + file.name;\n    var manifestVisibility = visibility || (surface === 'profile' ? 'public' : 'owner_scoped');\n    var manifest = { mediaId: id, ownerUid: mediaOwner.uid, ownerProfileKey: mediaOwner.profileKey, surface: surface, surfaceId: surface === 'profile' ? mediaOwner.profileKey : (surfaceId || mediaOwner.uid), slot: slot || '', kind: kind, fileName: file.name, contentType: file.type, bytes: file.size, compressedFromBytes: file.dsdCompressedFrom || 0, path: path, objectKey: path, wasabiObjectKey: path, visibility: manifestVisibility, contentRating: rating, status: 'pending_upload', signedUrlRequired: true, readSignedUrlRequired: true, entity: authoredEntityMeta('media', manifestVisibility, rating, mediaOwner, { surface: surface, surfaceId: surface === 'profile' ? mediaOwner.profileKey : (surfaceId || mediaOwner.uid), mediaKind: kind }), firestorePath: PATHS.mediaManifest };\n    if (signerContext && typeof signerContext === 'object') {\n      manifest.signerSurface = signerContext.surface || '';\n      manifest.signerSurfaceId = signerContext.surfaceId || '';\n      manifest.signerSlot = signerContext.slot || '';\n      manifest.signerObjectKey = signerContext.objectKey || signerContext.path || '';\n      manifest.signerPath = signerContext.path || signerContext.objectKey || '';\n      if (manifest.signerPath || manifest.signerObjectKey) {\n        manifest.path = manifest.signerPath || manifest.signerObjectKey;\n        manifest.objectKey = manifest.signerObjectKey || manifest.signerPath;\n        manifest.wasabiObjectKey = manifest.objectKey;\n      }\n    }\n    return setDoc('mediaManifests/' + id, manifest, true)\n      .then(function(saved){ applyCanonicalMediaId(manifest, saved); return manifest; })\n      .then(function(){ return refreshCanonicalMediaId(manifest); })\n      .then(function(){ return writeMediaSignerShadow(id, manifest); })\n      .then(function(){ return uploadWasabiMedia(manifest, file); })\n      .catch(function(error){ queueDraft('media-manifest', manifest, error); return manifest; });\n    });\n  }\n  function canonicalMediaIdFromRecord(record){\n    var uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n    var id = record && (record.id || record.mediaObjectId || record.media_object_id || record.supabaseMediaId || record.supabase_media_id) || '';\n    return uuidPattern.test(String(id || '')) ? String(id) : '';\n  }\n  function applyCanonicalMediaId(manifest, saved){\n    var canonicalId = canonicalMediaIdFromRecord(saved);\n    if (canonicalId) {\n      manifest.supabaseMediaId = canonicalId;\n      manifest.canonicalMediaId = canonicalId;\n    }\n    return manifest;\n  }\n  function refreshCanonicalMediaId(manifest){\n    if (!manifest || manifest.canonicalMediaId) return Promise.resolve(manifest);\n    return getDoc('mediaManifests/' + manifest.mediaId)\n      .then(function(snap){\n        var data = snap && snap.exists && snap.exists() ? snap.data() : null;\n        applyCanonicalMediaId(manifest, data);\n        return manifest;\n      })\n      .catch(function(error){\n        claim('media-manifest:uuid-readback-blocked', { mediaId: manifest && manifest.mediaId, error: error && error.message || String(error) });\n        return manifest;\n      });\n  }\n  function uploadedMediaObjectToManifest(row){\n    row = row || {};\n    return {\n      id: row.id || row.legacy_media_id || '',\n      mediaId: row.id || row.legacy_media_id || '',\n      supabaseMediaId: row.id || '',\n      canonicalMediaId: row.id || '',\n      legacyMediaId: row.legacy_media_id || '',\n      ownerUid: row.owner_user_id || '',\n      ownerProfileKey: row.owner_profile_key || '',\n      surface: row.surface || '',\n      surfaceId: row.surface_id || '',\n      slot: row.slot || '',\n      kind: row.kind || (String(row.content_type || '').indexOf('video/') === 0 ? 'video' : 'image'),\n      fileName: row.file_name || '',\n      contentType: row.content_type || '',\n      bytes: Number(row.bytes || 0),\n      path: row.wasabi_object_key || '',\n      objectKey: row.wasabi_object_key || '',\n      wasabiObjectKey: row.wasabi_object_key || '',\n      visibility: row.visibility || 'public',\n      contentRating: row.content_rating || 'standard',\n      accessGate: row.access_gate || 'none',\n      status: row.status || 'uploaded',\n      signedUrlRequired: row.signed_url_required !== false,\n      readSignedUrlRequired: row.read_signed_url_required !== false,\n      createdAt: row.created_at || '',\n      updatedAt: row.updated_at || ''\n    };\n  }\n  function mediaOwnerIdentity(row){\n    row = row || {};\n    var ownerKey = clean(row.owner_profile_key || row.author_profile_key || '', '');\n    var ownerUid = clean(row.owner_user_id || row.author_user_id || '', '');\n    if (!ownerKey) return Promise.resolve(null);\n    var local = publicProfileByKey(ownerKey) || (clean(activeProfileKeyValue() || '', '') === ownerKey ? state.profile : null) || {};\n    var localUid = clean(local.uid || local.userId || local.user_id || local.firebaseUid || local.firebase_uid || '', '');\n    var localName = String(local.displayName || local.display_name || ownerKey).trim();\n    if (ownerUid || localUid) return Promise.resolve({ uid: ownerUid || localUid, profileKey: ownerKey, displayName: localName || ownerKey });\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function') return Promise.resolve({ uid: '', profileKey: ownerKey, displayName: ownerKey });\n    return adapter.read('public_profiles', { select: 'user_id,profile_key,handle,display_name', profile_key: 'eq.' + ownerKey, limit: 1 }, { force: true }).then(function(rows){\n      var profile = rows && rows[0] || null;\n      if (profile && profile.user_id) return profile;\n      return adapter.read('public_profiles', { select: 'user_id,profile_key,handle,display_name', handle: 'eq.' + ownerKey, limit: 1 }, { force: true }).then(function(handleRows){ return handleRows && handleRows[0] || null; });\n    }).then(function(profile){\n      return {\n        uid: clean(profile && profile.user_id || ''),\n        profileKey: clean(profile && (profile.profile_key || profile.handle) || ownerKey, ''),\n        displayName: String(profile && profile.display_name || ownerKey).trim()\n      };\n    }).catch(function(){\n      return { uid: '', profileKey: ownerKey, displayName: ownerKey };\n    });\n  }\n  function repairOrphanMediaParent(row){\n    row = row || {};\n    var surface = String(row.surface || '').toLowerCase();\n    var surfaceId = clean(row.surface_id || '', '');\n    var ownerKey = clean(row.owner_profile_key || '', '');\n    if (!ownerKey || !surfaceId || (surface !== 'post' && surface !== 'story')) return Promise.resolve(null);\n    if (surface === 'story') {\n      claim('orphan-story-parent-repair:deconstructed', { surfaceId: surfaceId, ownerProfileKey: ownerKey, reason: 'expired-or-orphan-story-media-must-not-create-a-new-active-story-parent', build: BUILD });\n      return Promise.resolve(null);\n    }\n    if (surface === 'post' && surfaceId.indexOf('post-') !== 0) return Promise.resolve(null);\n    if (surface === 'story' && surfaceId.indexOf('story-') !== 0) return Promise.resolve(null);\n    var root = surface === 'story' ? 'stories' : 'posts';\n    var local = surface === 'story' ? activeStoryRecords(state.stories).some(function(story){ return (story.storyId || story.id) === surfaceId; }) : state.posts.some(function(post){ return (post.postId || post.id) === surfaceId; });\n    if (local) return Promise.resolve(null);\n    return mediaOwnerIdentity(row).then(function(author){\n      if (!author || !author.profileKey) return null;\n      return getDoc(root + '/' + surfaceId).then(function(snap){\n      if (snap && snap.exists && snap.exists()) return null;\n      var media = uploadedMediaObjectToManifest(row);\n      var policy = visibilityPolicyFromInput({ visibility: row.visibility || 'public', contentRating: row.content_rating || 'standard', accessGate: row.access_gate || 'none' });\n      var review = { status: 'approved', moderation: { state: 'approved', gate: 'media-parent-repair-auto-publish', reportCount: 0, reviewedBy: author.uid || actorUid(), selfReviewed: false, lastActionAt: serverTimestamp() } };\n      var createdAt = row.created_at || serverTimestamp();\n      if (surface === 'story') {\n        var story = {\n          storyId: surfaceId,\n          ownerUid: author.uid,\n          authorProfileKey: ownerKey,\n          ownerProfileKey: ownerKey,\n          authorDisplayName: author.displayName || ownerKey,\n          ownerDisplayName: author.displayName || ownerKey,\n          body: '',\n          media: [media],\n          visibility: policy.visibility,\n          contentRating: policy.contentRating,\n          accessGate: policy.accessGate,\n          status: review.status,\n          moderation: review.moderation,\n          viewCount: 0,\n          watchCount: 0,\n          uniqueWatchCount: 0,\n          expiresAt: futureTimestamp(86400000),\n          entity: authoredEntityMeta('story', policy.visibility, policy.contentRating, author, { moderationStatus: review.status, accessGate: policy.accessGate }),\n          firestorePath: PATHS.story,\n          ownerScopedPath: PATHS.userStory,\n          createdAt: createdAt\n        };\n        return setDoc('stories/' + surfaceId, story, true)\n          .then(function(savedStory){\n            story.supabaseStoryId = savedStory && (savedStory.supabaseStoryId || savedStory.supabase_story_id || savedStory.id) || story.supabaseStoryId || '';\n            return syncSupabaseStoryMediaRelationships(story, savedStory).then(function(){ return savedStory; });\n          })\n          .then(function(){ return skipLegacyUserStoryShadow(surfaceId); })\n          .then(function(){ state.stories = mergeRecords(activeStoryRecords(state.stories), [story]); renderStories(); return story; });\n      }\n      var post = {\n        postId: surfaceId,\n        authorUid: author.uid,\n        authorProfileKey: ownerKey,\n        authorDisplayName: author.displayName || ownerKey,\n        body: '',\n        caption: '',\n        media: [media],\n        mediaMode: media.kind || 'image',\n        visibility: policy.visibility,\n        contentRating: policy.contentRating,\n        accessGate: policy.accessGate,\n        status: review.status,\n        moderation: review.moderation,\n        counts: { likes: 0, comments: 0, shares: 0, reports: 0, views: 0, uniqueViews: 0 },\n        postType: 'post',\n        pinned: false,\n        announcement: false,\n        poll: null,\n        scopeType: '',\n        entity: authoredEntityMeta('post', policy.visibility, policy.contentRating, author, { moderationStatus: review.status, accessGate: policy.accessGate }),\n        firestorePath: PATHS.post,\n        createdAt: createdAt\n      };\n      return setDoc('posts/' + surfaceId, post, true)\n        .then(function(savedPost){\n          if (savedPost && (savedPost.supabasePostId || savedPost.supabase_post_id || savedPost.id)) post.supabasePostId = savedPost.supabasePostId || savedPost.supabase_post_id || savedPost.id;\n          return syncSupabasePostMediaRelationships(post, savedPost).then(function(){ return savedPost; });\n        })\n        .then(function(){ state.posts = mergeRecords(state.posts, [post]); renderPosts(); return post; });\n      });\n    }).catch(function(error){\n      queueDraft('orphan-media-parent-repair', { surface: surface, surfaceId: surfaceId, ownerProfileKey: ownerKey, mediaId: row.id || row.legacy_media_id || '' }, error);\n      return null;\n    });\n  }\n  function repairOwnedOrphanMediaParents(){\n    var key = activeProfileKeyValue();\n    var adapter = supabaseAdapter();\n    if (!hasCustomer() || !hasActiveProfile() || !key || !adapter || typeof adapter.read !== 'function') return Promise.resolve([]);\n    if (state.orphanMediaParentRepairRunning || state.orphanMediaParentRepairCompleteFor === key) return Promise.resolve([]);\n    state.orphanMediaParentRepairRunning = true;\n    return adapter.read('media_objects', {\n      select: 'id,legacy_media_id,owner_user_id,owner_profile_key,surface,surface_id,slot,kind,file_name,content_type,bytes,wasabi_object_key,visibility,content_rating,access_gate,status,signed_url_required,read_signed_url_required,created_at,updated_at',\n      owner_profile_key: 'eq.' + key,\n      surface: 'in.(post,story)',\n      status: 'in.(uploaded,approved)',\n      order: 'created_at.desc',\n      limit: 80\n    }, { force: true }).then(function(rows){\n      return Promise.all((rows || []).map(repairOrphanMediaParent));\n    }).then(function(results){\n      var repaired = (results || []).filter(Boolean).length;\n      if (repaired) {\n        claim('orphan-media-parent-repair:complete', { ownerProfileKey: key, repaired: repaired, canonical: 'supabase-parent-metadata' });\n        renderAll();\n      }\n      state.orphanMediaParentRepairCompleteFor = key;\n      return results;\n    }).catch(function(error){\n      claim('orphan-media-parent-repair:blocked', { ownerProfileKey: key, error: error && error.message || String(error) });\n      return [];\n    }).finally(function(){\n      state.orphanMediaParentRepairRunning = false;\n    });\n  }\n  function profileManifestMediaId(manifest){\n    manifest = manifest || {};\n    var canonicalCandidates = [manifest.canonicalMediaId, manifest.supabaseMediaId, manifest.supabase_media_id, manifest.mediaObjectId, manifest.media_object_id, manifest.id];\n    for (var i = 0; i < canonicalCandidates.length; i += 1) {\n      if (mediaIdLooksLikeUuid(canonicalCandidates[i])) return String(canonicalCandidates[i]).trim();\n    }\n    return readableProfileMediaId(manifest) || manifest.mediaId || manifest.legacyMediaId || manifest.legacy_media_id || manifest.objectKey || manifest.wasabiObjectKey || manifest.path || '';\n  }\n  function durableMediaId(media){\n    media = media || {};\n    return media.canonicalMediaId || media.supabaseMediaId || media.supabase_media_id || media.mediaObjectId || media.media_object_id || media.id || media.mediaId || media.legacyMediaId || media.legacy_media_id || '';\n  }\n  function uuidLike(value){\n    return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(String(value || '').trim());\n  }\n  function wait(ms){\n    return new Promise(function(resolve){ window.setTimeout(resolve, ms || 0); });\n  }\n  function assignCanonicalMediaUuid(media, uuid){\n    if (!media || !uuidLike(uuid)) return media;\n    media.supabaseMediaId = uuid;\n    media.supabase_media_id = uuid;\n    media.canonicalMediaId = uuid;\n    media.mediaObjectId = uuid;\n    media.media_object_id = uuid;\n    return media;\n  }\n  function assignCanonicalParentUuid(surface, record, uuid){\n    if (!record || !uuidLike(uuid)) return record;\n    if (surface === 'story') {\n      record.supabaseStoryId = uuid;\n      record.supabase_story_id = uuid;\n    } else {\n      record.supabasePostId = uuid;\n      record.supabase_post_id = uuid;\n    }\n    return record;\n  }\n  function canonicalParentUuid(surface, record, savedRecord){\n    var values = surface === 'story'\n      ? [savedRecord && savedRecord.supabaseStoryId, savedRecord && savedRecord.supabase_story_id, savedRecord && savedRecord.id, record && record.supabaseStoryId, record && record.supabase_story_id]\n      : [savedRecord && savedRecord.supabasePostId, savedRecord && savedRecord.supabase_post_id, savedRecord && savedRecord.id, record && record.supabasePostId, record && record.supabase_post_id];\n    for (var i = 0; i < values.length; i += 1) {\n      if (uuidLike(values[i])) return String(values[i]).trim();\n    }\n    return '';\n  }\n  function legacyParentId(surface, record, savedRecord){\n    var values = surface === 'story'\n      ? [record && record.storyId, record && record.legacyStoryId, record && record.legacy_story_id, savedRecord && savedRecord.storyId, savedRecord && savedRecord.legacyStoryId, savedRecord && savedRecord.legacy_story_id, savedRecord && savedRecord.id, record && record.id]\n      : [record && record.postId, record && record.legacyPostId, record && record.legacy_post_id, savedRecord && savedRecord.postId, savedRecord && savedRecord.legacyPostId, savedRecord && savedRecord.legacy_post_id, savedRecord && savedRecord.id, record && record.id];\n    for (var i = 0; i < values.length; i += 1) {\n      var value = String(values[i] || '').trim();\n      if (value && !uuidLike(value)) return value;\n    }\n    return '';\n  }\n  function legacyMediaId(media){\n    media = media || {};\n    var values = [media.legacyMediaId, media.legacy_media_id, media.mediaId, media.media_id, media.id];\n    for (var i = 0; i < values.length; i += 1) {\n      var value = String(values[i] || '').trim();\n      if (value && !uuidLike(value)) return value;\n    }\n    return '';\n  }\n  function mediaObjectKey(media){\n    media = media || {};\n    var value = String(media.wasabiObjectKey || media.wasabi_object_key || media.objectKey || media.object_key || media.path || '').trim();\n    return value && !uuidLike(value) ? value : '';\n  }\n  function resolveSupabaseParentUuid(surface, record, savedRecord){\n    var existing = canonicalParentUuid(surface, record, savedRecord);\n    if (uuidLike(existing)) {\n      assignCanonicalParentUuid(surface, record, existing);\n      return Promise.resolve(existing);\n    }\n    var adapter = supabaseAdapter();\n    var legacy = legacyParentId(surface, record, savedRecord);\n    if (!adapter || typeof adapter.read !== 'function' || !legacy) return Promise.resolve('');\n    var table = surface === 'story' ? 'stories' : 'posts';\n    var legacyField = surface === 'story' ? 'legacy_story_id' : 'legacy_post_id';\n    var query = { select: 'id,' + legacyField, limit: 1 };\n    query[legacyField] = 'eq.' + legacy;\n    return adapter.read(table, query, { force: true }).then(function(rows){\n      var uuid = rows && rows[0] && rows[0].id || '';\n      if (uuidLike(uuid)) assignCanonicalParentUuid(surface, record, uuid);\n      return uuidLike(uuid) ? uuid : '';\n    }).catch(function(error){\n      claim(surface + '-media-relationship-sync:parent-readback-blocked', { legacyId: legacy, error: error && error.message || String(error) });\n      return '';\n    });\n  }\n  function resolveSupabaseMediaUuid(media){\n    var existing = durableMediaId(media);\n    if (uuidLike(existing)) {\n      assignCanonicalMediaUuid(media, existing);\n      return Promise.resolve(existing);\n    }\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function') return Promise.resolve('');\n    var legacy = legacyMediaId(media);\n    var key = mediaObjectKey(media);\n    function readBy(field, value){\n      if (!value) return Promise.resolve('');\n      var query = { select: 'id,legacy_media_id,wasabi_object_key', limit: 1 };\n      query[field] = 'eq.' + value;\n      return adapter.read('media_objects', query, { force: true }).then(function(rows){\n        return rows && rows[0] && rows[0].id || '';\n      });\n    }\n    return readBy('legacy_media_id', legacy).then(function(uuid){\n      return uuidLike(uuid) ? uuid : readBy('wasabi_object_key', key);\n    }).then(function(uuid){\n      if (uuidLike(uuid)) assignCanonicalMediaUuid(media, uuid);\n      return uuidLike(uuid) ? uuid : '';\n    }).catch(function(error){\n      claim('media-relationship-sync:media-readback-blocked', { mediaId: legacy || key, error: error && error.message || String(error) });\n      return '';\n    });\n  }\n  function resolveSupabaseMessageMediaUuid(media, message, savedMessage){\n    return resolveSupabaseMediaUuid(media).then(function(uuid){\n      if (uuidLike(uuid)) return uuid;\n      var adapter = supabaseAdapter();\n      var legacyMessage = legacyMessageId(message, savedMessage);\n      if (!adapter || typeof adapter.read !== 'function' || !legacyMessage) return '';\n      var query = { select: 'id,legacy_media_id,wasabi_object_key,file_name,content_type,created_at', surface: 'eq.message', surface_id: 'eq.' + legacyMessage, status: 'in.(uploaded,approved)', order: 'created_at.desc', limit: 10 };\n      var wantedLegacy = legacyMediaId(media);\n      var wantedKey = mediaObjectKey(media);\n      var wantedName = String(media && (media.fileName || media.file_name || media.name) || '').trim();\n      return adapter.read('media_objects', query, { force: true }).then(function(rows){\n        rows = rows || [];\n        var match = rows.filter(function(row){\n          if (!row) return false;\n          if (wantedLegacy && row.legacy_media_id === wantedLegacy) return true;\n          if (wantedKey && row.wasabi_object_key === wantedKey) return true;\n          if (wantedName && row.file_name === wantedName) return true;\n          return !wantedLegacy && !wantedKey && !wantedName;\n        })[0] || rows[0] || null;\n        var resolved = match && match.id || '';\n        if (uuidLike(resolved)) assignCanonicalMediaUuid(media, resolved);\n        return uuidLike(resolved) ? resolved : '';\n      });\n    }).catch(function(error){\n      claim('message-media-relationship-sync:surface-readback-blocked', { messageId: legacyMessageId(message, savedMessage), error: error && error.message || String(error) });\n      return '';\n    });\n  }\n  function resolveSupabaseMediaRelationshipRows(surface, record, savedRecord, attempt){\n    attempt = attempt || 0;\n    var idField = surface === 'story' ? 'story_id' : 'post_id';\n    return Promise.all([\n      resolveSupabaseParentUuid(surface, record, savedRecord),\n      Promise.all((record.media || []).map(resolveSupabaseMediaUuid))\n    ]).then(function(results){\n      var parentUuid = results[0] || '';\n      var mediaUuids = results[1] || [];\n      var rows = mediaUuids.map(function(uuid, index){\n        if (!uuidLike(uuid) || !uuidLike(parentUuid)) return null;\n        var row = { media_id: uuid, sort_order: index };\n        row[idField] = parentUuid;\n        return row;\n      }).filter(Boolean);\n      if ((rows.length < (record.media || []).length || !uuidLike(parentUuid)) && attempt < 3) {\n        claim(surface + '-media-relationship-sync:uuid-readback-retry', { attempt: attempt + 1, parentResolved: uuidLike(parentUuid), resolved: rows.length, mediaCount: (record.media || []).length });\n        return wait([250, 700, 1400][attempt] || 1400).then(function(){ return resolveSupabaseMediaRelationshipRows(surface, record, savedRecord, attempt + 1); });\n      }\n      return { parentUuid: parentUuid, rows: rows };\n    });\n  }\n  function readableMediaId(media){\n    media = media || {};\n    var durable = durableMediaId(media);\n    if (durable) return durable;\n    var legacy = media.legacyMediaId || media.legacy_media_id || '';\n    if (legacy) return legacy;\n    var display = media.displayMediaId || media.display_media_id || media.wasabiObjectKey || media.wasabi_object_key || media.objectKey || media.object_key || media.path || '';\n    if (display && !uuidLike(display)) return display;\n    var mediaId = media.mediaId || '';\n    if (mediaId && !uuidLike(mediaId)) return mediaId;\n    var id = media.id || '';\n    if (id && !uuidLike(id)) return id;\n    return '';\n  }\n  function alternateMediaId(media, primary){\n    media = media || {};\n    primary = String(primary || '').trim();\n    var fallbacks = mediaFallbackIds(media, primary);\n    return fallbacks[0] || '';\n  }\n  function mediaFallbackIds(media, primary){\n    media = media || {};\n    primary = String(primary || '').trim();\n    var candidates = [\n      media.legacyMediaId,\n      media.legacy_media_id,\n      media.mediaId,\n      media.media_id,\n      media.id,\n      media.canonicalMediaId,\n      media.supabaseMediaId,\n      media.supabase_media_id,\n      media.mediaObjectId,\n      media.media_object_id\n    ];\n    var out = [];\n    for (var i = 0; i < candidates.length; i += 1) {\n      var value = String(candidates[i] || '').trim();\n      if (primary && !uuidLike(primary) && uuidLike(value)) continue;\n      if (value && value !== primary && out.indexOf(value) === -1) out.push(value);\n    }\n    return out;\n  }\n  function mediaReadAttrs(media){\n    var primary = readableMediaId(media);\n    if (!primary) return '';\n    return ' data-dsd-media-id=\"' + html(primary) + '\" data-dsd-public-media-fallback-deconstructed=\"' + html(BUILD) + '\"';\n  }\n  function mediaSignatureId(media){\n    media = media || {};\n    return durableMediaId(media) || media.mediaId || media.id || '';\n  }\n  function uploadWasabiMedia(manifest, file){\n    if (!manifest || !file) return Promise.resolve(manifest);\n    var signerPath = manifest.signerPath || manifest.signerObjectKey || manifest.path;\n    var signerObjectKey = manifest.signerObjectKey || manifest.signerPath || manifest.objectKey || manifest.path;\n    renderStatus('Signing secure media upload...');\n    return fetch('/apps/dsd-firebase-custom-token/wasabi/sign-upload', {\n      method: 'POST',\n      credentials: 'include',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        mediaId: manifest.mediaId,\n        legacyMediaId: manifest.mediaId,\n        canonicalMediaId: manifest.canonicalMediaId || manifest.supabaseMediaId || '',\n        supabaseMediaId: manifest.supabaseMediaId || manifest.canonicalMediaId || '',\n        path: signerPath,\n        objectKey: signerObjectKey,\n        wasabiObjectKey: signerObjectKey,\n        fileName: manifest.fileName,\n        contentType: manifest.contentType,\n        mimeType: manifest.contentType,\n        bytes: manifest.bytes,\n        size: manifest.bytes,\n        ownerUid: manifest.ownerUid,\n        ownerProfileKey: manifest.ownerProfileKey,\n        surface: manifest.signerSurface || manifest.surface,\n        surfaceId: manifest.signerSurfaceId || manifest.surfaceId,\n        slot: manifest.signerSlot || manifest.slot,\n        kind: manifest.kind,\n        visibility: manifest.visibility,\n        contentRating: manifest.contentRating\n      })\n    })\n      .then(function(res){\n        if (!res.ok) {\n          return res.text().then(function(text){\n            var detail = '';\n            try {\n              var parsed = text ? JSON.parse(text) : null;\n              detail = parsed && (parsed.error || parsed.message || parsed.code) ? ': ' + (parsed.error || parsed.message || parsed.code) : '';\n            } catch(e) {\n              detail = text ? ': ' + String(text).slice(0, 120) : '';\n            }\n            throw new Error('Upload could not start: ' + res.status + detail);\n          });\n        }\n        return res.json();\n      })\n      .then(function(ticket){\n        if (!ticket || !ticket.uploadUrl) throw new Error('Upload could not start.');\n        var headers = Object.assign({ 'Content-Type': manifest.contentType }, ticket.headers || {});\n        renderStatus('Uploading ' + (manifest.kind === 'video' ? 'video' : 'media') + '...');\n        return uploadWithProgress(ticket.uploadUrl, ticket.method || 'PUT', headers, file, manifest)\n          .then(function(uploadRes){\n            if (!uploadRes.ok) throw new Error('Upload failed: ' + uploadRes.status);\n            manifest.status = 'uploaded';\n            manifest.uploadedAt = now();\n            manifest.signedUploadExpiresAt = ticket.expiresAt || '';\n            manifest.path = ticket.path || ticket.objectKey || ticket.wasabiObjectKey || manifest.path;\n            manifest.objectKey = ticket.objectKey || ticket.wasabiObjectKey || manifest.path;\n            manifest.wasabiObjectKey = manifest.objectKey;\n            manifest.updatedAt = now();\n            return setDoc('mediaManifests/' + manifest.mediaId, Object.assign({}, manifest), true).then(function(saved){\n              applyCanonicalMediaId(manifest, saved);\n              return writeMediaSignerShadow(manifest.mediaId, manifest);\n            }).then(function(){\n              return refreshCanonicalMediaId(manifest).then(function(){\n                renderStatus('Media saved.');\n                return manifest;\n              });\n            });\n          });\n      })\n      .catch(function(error){\n        manifest.status = 'upload_blocked';\n        manifest.uploadError = error && error.message || String(error);\n        manifest.uploadBlockedAt = now();\n        manifest.updatedAt = now();\n        var signerManifestMissing = /media_manifest_missing/i.test(manifest.uploadError || '');\n        Promise.all([\n          setDoc('mediaManifests/' + manifest.mediaId, Object.assign({}, manifest), true),\n          firebaseSetDoc('mediaManifests/' + manifest.mediaId, Object.assign({}, manifest, {\n            signerShadow: true,\n            signerShadowReason: 'wasabi-upload-signing',\n            supabaseMetadataCanonical: supabaseCutoverReady()\n          }), true)\n        ]).catch(function(){});\n        queueDraft('wasabi-upload', { mediaId: manifest.mediaId, path: manifest.path, contentType: manifest.contentType, bytes: manifest.bytes }, error);\n        renderStatus(signerManifestMissing ? 'Media upload is blocked because the Wasabi signer cannot read the media manifest. Existing media was kept.' : 'Media upload is blocked; draft was saved locally.');\n        return manifest;\n      });\n  }\n  function setUploadProgress(manifest, percent, message){\n    var value = Math.max(0, Math.min(100, Number(percent || 0)));\n    var text = message || 'Uploading media...';\n    qsa('[data-dsd-upload-status], [data-dsd-activation-status]').forEach(function(status){\n      if (!status.closest('form')) return;\n      status.innerHTML = '<span>' + html(text) + '</span><progress class=\"dsd-upload-progress\" max=\"100\" value=\"' + value + '\">' + value + '%</progress>';\n    });\n    document.documentElement.setAttribute('data-dsd-upload-progress', String(Math.round(value)));\n    if (manifest && manifest.mediaId) document.documentElement.setAttribute('data-dsd-upload-media-id', manifest.mediaId);\n  }\n  function uploadWithProgress(url, method, headers, file, manifest){\n    return new Promise(function(resolve, reject){\n      var xhr = new XMLHttpRequest();\n      xhr.open(method || 'PUT', url, true);\n      Object.keys(headers || {}).forEach(function(key){ try { xhr.setRequestHeader(key, headers[key]); } catch(e){} });\n      xhr.upload.onprogress = function(event){\n        if (!event.lengthComputable) { setUploadProgress(manifest, 35, 'Uploading media...'); return; }\n        setUploadProgress(manifest, Math.round((event.loaded / Math.max(1, event.total)) * 100), 'Uploading media...');\n      };\n      xhr.onload = function(){ resolve({ ok: xhr.status >= 200 && xhr.status < 300, status: xhr.status }); };\n      xhr.onerror = function(){ reject(new Error('Upload failed: network')); };\n      xhr.onabort = function(){ reject(new Error('Upload aborted')); };\n      setUploadProgress(manifest, 5, 'Starting media upload...');\n      xhr.send(file);\n    });\n  }\n  function prepareComposerMediaFile(file){\n    if (!file || !/^image\\//.test(file.type || '') || file.size < 1800000 || !window.createImageBitmap) return Promise.resolve(file);\n    return createImageBitmap(file).then(function(bitmap){\n      var maxSide = 1920;\n      var scale = Math.min(1, maxSide / Math.max(bitmap.width || 1, bitmap.height || 1));\n      if (scale >= 1 && file.size < 2600000) return file;\n      var canvas = document.createElement('canvas');\n      canvas.width = Math.max(1, Math.round((bitmap.width || 1) * scale));\n      canvas.height = Math.max(1, Math.round((bitmap.height || 1) * scale));\n      var ctx = canvas.getContext('2d');\n      if (!ctx) return file;\n      ctx.drawImage(bitmap, 0, 0, canvas.width, canvas.height);\n      return new Promise(function(resolve){\n        canvas.toBlob(function(blob){\n          if (!blob || blob.size >= file.size) { resolve(file); return; }\n          var name = String(file.name || 'image').replace(/\\.[^.]+$/, '') + '.jpg';\n          var compressed = new File([blob], name, { type: 'image/jpeg', lastModified: Date.now() });\n          compressed.dsdCompressedFrom = file.size;\n          resolve(compressed);\n        }, 'image/jpeg', 0.82);\n      });\n    }).catch(function(){ return file; });\n  }\n  function signReadMedia(mediaId){\n    mediaId = String(mediaId || '').trim();\n    if (!mediaId) return Promise.resolve(null);\n    if (mediaReadQuarantineReason(mediaId)) {\n      claim('wasabi-read:quarantined', { mediaId: mediaId, reason: mediaReadQuarantineReason(mediaId) });\n      return Promise.resolve(null);\n    }\n    var cached = state.mediaReadCache[mediaId];\n    var ttl = 9 * 60 * 1000;\n    if (cached && cached.url && Date.now() - cached.at < ttl) return Promise.resolve(cached.url);\n    if (cached && cached.promise) return cached.promise;\n    var promise = fetch('/apps/dsd-firebase-custom-token/wasabi/sign-read?mediaId=' + encodeURIComponent(mediaId), {\n      method: 'GET',\n      credentials: 'include',\n      headers: { 'Accept': 'application/json' }\n    })\n      .then(function(res){ if (!res.ok) throw new Error('Media could not load: ' + res.status); return res.json(); })\n      .then(function(ticket){\n        var url = ticket && (ticket.readUrl || ticket.url) ? (ticket.readUrl || ticket.url) : null;\n        if (url) state.mediaReadCache[mediaId] = { url: url, at: Date.now() };\n        else delete state.mediaReadCache[mediaId];\n        return url;\n      })\n      .catch(function(error){ delete state.mediaReadCache[mediaId]; claim('wasabi-read:blocked', { mediaId: mediaId, error: error.message }); return null; });\n    state.mediaReadCache[mediaId] = { promise: promise, at: Date.now() };\n    return promise;\n  }\n  function mediaReadProxyUrl(mediaId){\n    mediaId = String(mediaId || '').trim();\n    return mediaId ? '/apps/dsd-firebase-custom-token/wasabi/read?mediaId=' + encodeURIComponent(mediaId) : '';\n  }\n  function mediaReadQuarantineReason(mediaId){\n    return READ_QUARANTINED_MEDIA_IDS[String(mediaId || '').trim().toLowerCase()] || '';\n  }\n  function resolveMediaDisplayUrl(mediaId){\n    mediaId = String(mediaId || '').trim();\n    if (!mediaId) return Promise.resolve(null);\n    if (mediaReadQuarantineReason(mediaId)) {\n      claim('wasabi-read:blob-quarantined', { mediaId: mediaId, reason: mediaReadQuarantineReason(mediaId) });\n      return Promise.resolve(null);\n    }\n    var cached = state.mediaReadCache[mediaId];\n    var ttl = 8 * 60 * 1000;\n    if (cached && cached.objectUrl && Date.now() - cached.objectAt < ttl) return Promise.resolve(cached.objectUrl);\n    var proxyUrl = mediaReadProxyUrl(mediaId);\n    state.mediaReadCache[mediaId] = Object.assign({}, cached || {}, {\n      objectUrl: proxyUrl,\n      objectAt: Date.now(),\n      objectSource: 'app-proxy-read-url-no-blob-swap'\n    });\n    return Promise.resolve(proxyUrl);\n  }\n  function registerMediaOwner(media, host, meta){\n    if (!media || media.tagName !== 'VIDEO') return;\n    meta = meta || {};\n    media.setAttribute('data-dsd-media-owner', meta.owner || 'LaunchSocialActivation');\n    media.setAttribute('data-dsd-media-surface', meta.surface || (host && host.closest('[data-dsd-view-story], .dsd-story385__canvas') ? 'story' : 'feed'));\n    if (meta.mediaId) media.setAttribute('data-dsd-media-id', meta.mediaId);\n    if (window.DSDGMOR && typeof window.DSDGMOR.register === 'function') window.DSDGMOR.register(media, meta);\n    else if (window.DSDMedia && typeof window.DSDMedia.register === 'function') window.DSDMedia.register(media, meta);\n  }\n  function hydrateAvatarMedia(root){\n    qsa('[data-dsd-avatar-media-id]', root || document).forEach(function(el){\n      var mediaId = el.getAttribute('data-dsd-avatar-media-id') || el.getAttribute('data-dsd-media-id') || '';\n      if (!mediaId) return;\n      if (el.dataset.dsdAvatarHydrated === 'true' && el.dataset.dsdAvatarHydratedMediaId === mediaId) return;\n      el.dataset.dsdAvatarHydrated = 'true';\n      el.dataset.dsdAvatarHydratedMediaId = mediaId;\n      resolveReadableMediaId(mediaId).then(function(displayId){\n        displayId = displayId || mediaId;\n        if (displayId !== mediaId) {\n          el.setAttribute('data-dsd-avatar-media-id', displayId);\n          el.dataset.dsdAvatarHydratedMediaId = displayId;\n        }\n        var cached = state.mediaReadCache[displayId] && state.mediaReadCache[displayId].objectUrl || '';\n        if (cached) {\n          var cachedImg = qs('img', el);\n          if (cachedImg) cachedImg.setAttribute('src', cached);\n          else el.innerHTML = '<img src=\"' + html(cached) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\">';\n        } else if (!qs('img', el)) {\n          el.innerHTML = '<img src=\"' + html(mediaReadProxyUrl(displayId)) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\">';\n        }\n        resolveMediaDisplayUrl(displayId).then(function(url){\n          if (!url) return;\n          var existing = qs('img', el);\n          if (existing && existing.getAttribute('src') === url) return;\n          if (existing) {\n            existing.setAttribute('src', url);\n            return;\n          }\n          el.innerHTML = '<img src=\"' + html(url) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\">';\n        });\n      });\n    });\n  }\n  function hydrateProfileCardMedia(root){\n    hydrateAvatarMedia(root);\n    qsa('[data-dsd-profile-cover-media-id], [data-dsd-cover-media-id]', root || document).forEach(function(el){\n      var mediaId = el.getAttribute('data-dsd-profile-cover-media-id') || el.getAttribute('data-dsd-cover-media-id') || el.getAttribute('data-dsd-header-media-id') || '';\n      if (!mediaId) return;\n      if (el.dataset.dsdProfileCoverHydrated === 'true' && el.dataset.dsdProfileCoverHydratedMediaId === mediaId) return;\n      el.dataset.dsdProfileCoverHydrated = 'true';\n      el.dataset.dsdProfileCoverHydratedMediaId = mediaId;\n      resolveReadableMediaId(mediaId).then(function(displayId){\n        displayId = displayId || mediaId;\n        if (displayId !== mediaId) {\n          el.setAttribute('data-dsd-profile-cover-media-id', displayId);\n          el.setAttribute('data-dsd-cover-media-id', displayId);\n          el.dataset.dsdProfileCoverHydratedMediaId = displayId;\n        }\n        var cached = state.mediaReadCache[displayId] && state.mediaReadCache[displayId].objectUrl || '';\n        el.style.backgroundImage = 'url(\"' + String(cached || mediaReadProxyUrl(displayId)).replace(/\"/g, '%22') + '\")';\n        el.classList.add('is-hydrating');\n        resolveMediaDisplayUrl(displayId).then(function(url){\n          if (!url) return;\n          el.style.backgroundImage = 'url(\"' + String(url).replace(/\"/g, '%22') + '\")';\n          el.classList.add('is-hydrated');\n          el.classList.remove('is-hydrating');\n        });\n      });\n    });\n  }\n  function resolveReadableMediaId(mediaId){\n    mediaId = String(mediaId || '').trim();\n    if (!mediaId || !mediaIdLooksLikeUuid(mediaId)) return Promise.resolve(mediaId);\n    state.profileMediaDisplayIdCache = state.profileMediaDisplayIdCache || {};\n    state.profileMediaDisplayIdCache[mediaId] = mediaId;\n    return Promise.resolve(mediaId);\n  }\n  function activeBoundVideoCount(){\n    return qsa('video.dsd-media-element--video', document).filter(function(video){\n      return video && !video.paused && !video.ended;\n    }).length;\n  }\n  function setStarfieldVideoPaused(paused){\n    var shouldPause = !!paused || activeBoundVideoCount() > 0;\n    document.documentElement.classList.toggle('dsd-video-playing', shouldPause);\n    qsa('#dsd-starfield-root-p11dz90, #star-background, [data-dsd-starfield]').forEach(function(node){\n      node.setAttribute('data-dsd-video-playing', shouldPause ? 'true' : 'false');\n    });\n  }\n  function syncGlobalVideoMute(source){\n    qsa('video.dsd-media-element--video', document).forEach(function(video){\n      if (video === source) return;\n      video.muted = state.videoMutedPreference !== false;\n      if (video.muted) video.setAttribute('muted', '');\n      else video.removeAttribute('muted');\n    });\n  }\n  function bindVideoPlaybackPolicy(media, mediaId, storyFullscreen){\n    if (!media || media.dataset.dsdVideoPlaybackPolicyBound === BUILD) return;\n    media.dataset.dsdVideoPlaybackPolicyBound = BUILD;\n    media.dataset.dsdVideoControls = 'hidden-until-user-click';\n    media.controls = false;\n    media.removeAttribute('controls');\n    media.setAttribute('controlslist', 'nodownload noplaybackrate');\n    media.muted = state.videoMutedPreference !== false;\n    media.defaultMuted = state.videoMutedPreference !== false;\n    if (media.muted) media.setAttribute('muted', '');\n    else media.removeAttribute('muted');\n    function revealVideoControls(){\n      media.controls = true;\n      media.setAttribute('controls', '');\n      media.dataset.dsdVideoControls = 'visible-after-user-click';\n    }\n    media.addEventListener('click', revealVideoControls, { passive: true });\n    media.addEventListener('keydown', function(event){\n      if (event.key === 'Enter' || event.key === ' ') revealVideoControls();\n    });\n    media.addEventListener('play', function(){\n      if (mediaId) {\n        delete state.videoManualPausedByMediaId[mediaId];\n        saveManualVideoPausedMap();\n      }\n      if (media.dataset.dsdVideoPlaying !== 'true') {\n        media.dataset.dsdVideoPlaying = 'true';\n        state.activePlayingVideos += 1;\n      }\n      setStarfieldVideoPaused(true);\n    });\n    media.addEventListener('pause', function(){\n      if (mediaId && !media.ended) {\n        state.videoManualPausedByMediaId[mediaId] = true;\n        saveManualVideoPausedMap();\n      }\n      if (media.dataset.dsdVideoPlaying === 'true') {\n        media.dataset.dsdVideoPlaying = 'false';\n        state.activePlayingVideos = Math.max(0, state.activePlayingVideos - 1);\n      }\n      if (state.activePlayingVideos === 0) setStarfieldVideoPaused(false);\n    });\n    media.addEventListener('ended', function(){\n      if (mediaId) {\n        delete state.videoManualPausedByMediaId[mediaId];\n        saveManualVideoPausedMap();\n      }\n      if (media.dataset.dsdVideoPlaying === 'true') {\n        media.dataset.dsdVideoPlaying = 'false';\n        state.activePlayingVideos = Math.max(0, state.activePlayingVideos - 1);\n      }\n      if (state.activePlayingVideos === 0) setStarfieldVideoPaused(false);\n    });\n    media.addEventListener('volumechange', function(){\n      state.videoMutedPreference = !!media.muted;\n      try { localStorage.setItem('dsd.video.muted.v1', state.videoMutedPreference ? 'true' : 'false'); } catch(e){}\n      syncGlobalVideoMute(media);\n    });\n    if (mediaId && state.videoManualPausedByMediaId[mediaId]) {\n      media.autoplay = false;\n      media.removeAttribute('autoplay');\n      media.pause();\n    }\n  }\n  function hydrateMediaReads(root){\n    qsa('[data-dsd-media-id]', root || document).forEach(function(el, mediaIndex){\n      if (el.dataset.dsdReadHydrated === 'true') return;\n      if (el.matches('.dsd-post-card__avatar, .dsd-story385__poster, .dsd-users311__avatar, .dsd-users311__cover, .dsd-up315__avatar, .dsd-up315__cover')) return;\n      state.feedDiagnostics.mediaHydrationRequests += 1;\n      var mediaId = el.getAttribute('data-dsd-media-id');\n      var kind = el.getAttribute('data-dsd-media-kind') || 'image';\n      var storyFullscreen = !!el.closest('[data-dsd-story-fullscreen-canvas]');\n      el.dataset.dsdReadHydrated = 'true';\n      function startHydration(resolvedMediaId){\n      resolvedMediaId = String(resolvedMediaId || '').trim();\n      if (!resolvedMediaId) return;\n      if (resolvedMediaId !== mediaId) {\n        el.removeAttribute('data-dsd-media-alt-id');\n        el.removeAttribute('data-dsd-media-fallback-ids');\n        el.setAttribute('data-dsd-media-id', resolvedMediaId);\n        el.setAttribute('data-dsd-media-resolved-id', resolvedMediaId);\n        mediaId = resolvedMediaId;\n      }\n      var quarantineReason = mediaReadQuarantineReason(mediaId);\n      if (quarantineReason) {\n        el.dataset.dsdMediaQuarantined = 'true';\n        el.dataset.dsdMediaQuarantineReason = quarantineReason;\n        el.classList.add('dsd-media-frame', 'dsd-media-frame--' + kind, 'is-quarantined');\n        el.classList.remove('is-loading', 'is-unavailable');\n        el.textContent = '';\n        return;\n      }\n      el.classList.add('dsd-media-frame', 'dsd-media-frame--' + kind, 'is-loading');\n      if (storyFullscreen) {\n        el.classList.add('dsd-media-frame--story-fullscreen');\n        el.style.aspectRatio = 'auto';\n      } else {\n        el.style.aspectRatio = kind === 'video' ? '16 / 9' : '4 / 3';\n      }\n      var cachedUrl = state.mediaReadCache[mediaId] && state.mediaReadCache[mediaId].objectUrl || '';\n      function mount(url, retried, mountedMediaId){\n        mountedMediaId = mountedMediaId || mediaId;\n        if (!url) {\n          var uploadError = el.getAttribute('data-dsd-upload-error') || '';\n          el.classList.remove('is-loading');\n          el.classList.add(uploadError ? 'is-unavailable' : 'is-quarantined');\n          el.innerHTML = uploadError ? '<span class=\"dsd-launch-muted\">' + html('Media upload blocked: ' + uploadError) + '</span>' : '';\n          return;\n        }\n        el.classList.remove('is-unavailable');\n        var media = document.createElement(kind === 'video' ? 'video' : 'img');\n        media.className = 'dsd-media-element dsd-media-element--' + kind;\n        var readyTimer = null;\n        function markMediaReady(){\n          if (readyTimer) {\n            window.clearTimeout(readyTimer);\n            readyTimer = null;\n          }\n          el.classList.remove('is-loading', 'is-unavailable');\n          el.classList.add('is-ready');\n          media.classList.remove('is-loading', 'is-unavailable');\n          media.classList.add('is-ready');\n          qsa('.dsd-launch-muted', media).forEach(function(node){ node.remove(); });\n        }\n        function syncAspect(){\n          var width = kind === 'video' ? media.videoWidth : media.naturalWidth;\n          var height = kind === 'video' ? media.videoHeight : media.naturalHeight;\n          if (width > 0 && height > 0) {\n            var ratio = width / height;\n            el.setAttribute('data-dsd-natural-aspect', width + ':' + height);\n            el.style.setProperty('--dsd-media-ratio', String(ratio));\n            el.style.setProperty('--dsd-media-aspect', width + ' / ' + height);\n            el.style.aspectRatio = storyFullscreen ? 'auto' : width + ' / ' + height;\n            el.classList.toggle('dsd-media-frame--portrait', ratio < 0.88);\n            el.classList.toggle('dsd-media-frame--landscape', ratio > 1.12);\n            el.classList.toggle('dsd-media-frame--square', ratio >= 0.88 && ratio <= 1.12);\n          }\n          markMediaReady();\n          el.classList.add('is-ready');\n        }\n        if (kind === 'video') {\n          media.controls = false;\n          media.playsInline = true;\n          media.autoplay = storyFullscreen && !state.videoManualPausedByMediaId[mediaId];\n          media.muted = state.videoMutedPreference !== false;\n          media.defaultMuted = state.videoMutedPreference !== false;\n          media.preload = storyFullscreen ? 'auto' : 'metadata';\n          if (media.muted) media.setAttribute('muted', '');\n          else media.removeAttribute('muted');\n          if (storyFullscreen && !state.videoManualPausedByMediaId[mediaId]) media.setAttribute('autoplay', '');\n          else media.removeAttribute('autoplay');\n          bindVideoPlaybackPolicy(media, mediaId, storyFullscreen);\n          media.addEventListener('loadedmetadata', syncAspect, { once: true });\n          media.addEventListener('canplay', markMediaReady, { once: true });\n        } else {\n          media.alt = '';\n          media.loading = storyFullscreen || (mediaIndex < 2 && !!el.closest('.dsd-post-card')) ? 'eager' : 'lazy';\n          if (media.loading === 'eager') media.setAttribute('fetchpriority', mediaIndex === 0 ? 'high' : 'auto');\n          media.decoding = 'async';\n          media.addEventListener('load', syncAspect, { once: true });\n        }\n        media.addEventListener('error', function(){\n            if (retried) {\n            var retryUploadError = el.getAttribute('data-dsd-upload-error') || '';\n            el.classList.remove('is-loading');\n            el.classList.add(retryUploadError ? 'is-unavailable' : 'is-quarantined');\n            el.innerHTML = retryUploadError ? '<span class=\"dsd-launch-muted\">' + html('Media upload blocked: ' + retryUploadError) + '</span>' : '';\n            return;\n          }\n          var fallbackAttr = el.getAttribute('data-dsd-media-fallback-ids') || '';\n          var fallbackIds = fallbackAttr ? fallbackAttr.split('|').map(function(value){ return String(value || '').trim(); }).filter(Boolean) : [];\n          var errorAlt = el.getAttribute('data-dsd-media-alt-id') || '';\n          if (errorAlt) fallbackIds.unshift(errorAlt);\n          var seenFallback = {};\n          var nextFallback = '';\n          fallbackIds.some(function(value){\n            if (!value || value === mountedMediaId || seenFallback[value]) return false;\n            seenFallback[value] = true;\n            nextFallback = value;\n            return true;\n          });\n          if (nextFallback) {\n            el.setAttribute('data-dsd-media-resolved-id', nextFallback);\n            mount(mediaReadProxyUrl(nextFallback), true, nextFallback);\n            return;\n          }\n          resolveMediaDisplayUrl(mountedMediaId).then(function(nextUrl){ mount(nextUrl, true, mountedMediaId); });\n        }, { once: true });\n        media.src = url;\n        el.replaceChildren(media);\n        registerMediaOwner(media, el, { owner: 'LaunchSocialActivation', surface: storyFullscreen ? 'story-viewer' : (el.closest('[data-dsd-view-story], .dsd-story385__canvas') ? 'story' : 'feed'), mediaId: mountedMediaId, kind: kind });\n        readyTimer = window.setTimeout(function(){\n          if (!media.isConnected || el.classList.contains('is-unavailable') || el.classList.contains('is-quarantined')) return;\n          markMediaReady();\n        }, storyFullscreen ? 2600 : 1800);\n        window.setTimeout(function(){\n          if (!media.isConnected || el.classList.contains('is-unavailable') || el.classList.contains('is-quarantined')) return;\n          if ((kind === 'image' && media.complete) || (kind === 'video' && media.readyState > 0)) markMediaReady();\n        }, cachedUrl ? 90 : 520);\n        if (kind === 'image' && media.complete) syncAspect();\n      }\n      if (cachedUrl) { mount(cachedUrl, false, mediaId); return; }\n      mount(mediaReadProxyUrl(mediaId), false, mediaId);\n      }\n      resolveReadableMediaId(mediaId).then(function(displayId){\n        startHydration(displayId || mediaId);\n      });\n    });\n  }\n  function createPost(input){\n    if (!requireActiveProfile('create posts')) return Promise.resolve(null);\n    var author = activeAuthorIdentity('create posts');\n    if (!author) return Promise.resolve(null);\n    input = input || {};\n    var body = String(input.body || '').trim().slice(0, MAX.body);\n    if (!body && !(input.media && input.media.length)) { renderStatus('Post requires text, image, video, or mixed media.'); return Promise.resolve(null); }\n    var postId = clean('post-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6), 'post');\n    var mediaFiles = input.media || [];\n    var policy = visibilityPolicyFromInput(input);\n    var visibility = policy.visibility;\n    var contentRating = policy.contentRating;\n    var accessGate = policy.accessGate;\n    var review = reviewStateForAuthor();\n    var post = {\n      postId: postId,\n      authorUid: author.uid,\n      authorProfileKey: author.profileKey,\n      authorDisplayName: author.displayName,\n      body: body,\n      caption: '',\n      media: [],\n      mediaMode: 'text',\n      visibility: visibility,\n      contentRating: contentRating,\n      accessGate: accessGate,\n      status: review.status,\n      moderation: review.moderation,\n      counts: { likes: 0, comments: 0, shares: 0, reports: 0, views: 0, uniqueViews: 0 },\n      postType: input.postType || 'post',\n      pinned: input.pinned === true,\n      announcement: input.announcement === true || input.postType === 'announcement',\n      poll: input.poll && Array.isArray(input.poll.options) ? { question: String(input.poll.question || body).slice(0, MAX.body), options: input.poll.options.slice(0, 6).map(function(option){ return String(option || '').trim().slice(0, 120); }).filter(Boolean), status: 'open' } : null,\n      scopeType: input.scopeType || '',\n      universeId: input.universeId || '',\n      galaxyId: input.galaxyId || '',\n      entity: authoredEntityMeta('post', visibility, contentRating, author, { moderationStatus: review.status, accessGate: accessGate, universeId: input.universeId || '', galaxyId: input.galaxyId || '' }),\n      firestorePath: PATHS.post,\n      createdAt: serverTimestamp()\n    };\n    return setDoc('posts/' + postId, post, true).then(function(savedPost){\n        if (savedPost && (savedPost.supabasePostId || savedPost.supabase_post_id || savedPost.id)) post.supabasePostId = savedPost.supabasePostId || savedPost.supabase_post_id || savedPost.id;\n        if (!mediaFiles.length) return { post: post, savedPost: savedPost };\n        return Promise.all(mediaFiles.map(function(file){ return createMediaManifest(file, 'post', postId, '', visibility, contentRating); })).then(function(manifests){\n          var uploadedManifests = manifests.filter(function(manifest){ return manifest && manifest.status === 'uploaded'; });\n          post.media = uploadedManifests;\n          post.mediaMode = uploadedManifests.length > 1 ? 'mixed' : (uploadedManifests[0] && uploadedManifests[0].kind || 'text');\n          claim('post-media:row-first-owner', { postId: postId, mediaCount: uploadedManifests.length, requestedMediaCount: mediaFiles.length, canonical: 'posts+post_media+media_objects', rowFirst: true });\n          if (uploadedManifests.length !== mediaFiles.length) {\n            var hiddenPayload = { status: 'hidden', moderation: { state: 'hidden', gate: 'post-media-upload-failed', lastActionAt: serverTimestamp() }, hiddenAt: serverTimestamp() };\n            post.status = 'hidden';\n            post.moderation = hiddenPayload.moderation;\n            post.hiddenAt = hiddenPayload.hiddenAt;\n            return setDoc('posts/' + postId, hiddenPayload, true)\n              .then(function(){ renderStatus('Media upload did not complete. Post was not published.'); return null; })\n              .catch(function(){ renderStatus('Media upload did not complete. Post was not published.'); return null; });\n          }\n          return syncSupabasePostMediaRelationships(post, savedPost)\n            .then(function(){ return writePostMediaShadow(postId, post).catch(function(error){ queueDraft('post-media-shadow', { postId: postId }, error); return null; }); })\n            .then(function(){ return { post: post, savedPost: savedPost }; });\n        });\n      }).then(function(result){\n        if (!result) return null;\n        return accessGate === 'dsd_plus' ? syncGatedPostShell(postId, post, review.status).catch(function(error){ queueDraft('gated-post-shell', { postId: postId }, error); return null; }) : null;\n      }).then(function(result){\n        if (!post || post.status === 'hidden') return null;\n        return maybeQueueModeration(postId, 'post', 'posts/' + postId, body).catch(function(error){ queueDraft('moderation-queue-post-create', { postId: postId }, error); return null; });\n      }).then(function(){\n        if (!post || post.status === 'hidden') return null;\n        notify(author.uid, 'content', 'Post published', 'Your post is live.', postPermalink(postId), { postId: postId, sourcePath: 'posts/' + postId, previewMedia: post.media });\n        clearRecoveredUploadDraftStatus();\n        renderStatus(submissionStatusLabel('Post'));\n        state.posts.unshift(post); renderAll(); return post;\n      }).catch(function(error){ queueDraft('post-create', input, error); return null; });\n  }\n  function addComment(postId, input){\n    if (!requireActiveProfile('comment')) return Promise.resolve(null);\n    var author = activeAuthorIdentity('comment');\n    if (!author) return Promise.resolve(null);\n    var payloadInput = typeof input === 'object' && input ? input : { body: input };\n    var text = String(payloadInput.body || '').trim().slice(0, MAX.comment);\n    var files = Array.prototype.slice.call(payloadInput.media || []);\n    if (!text && !files.length) return Promise.resolve(null);\n    var parentPostForMedia = localPostById(postId) || {};\n    var parentOwnerUid = parentPostForMedia.authorUid || parentPostForMedia.ownerUid || parentPostForMedia.uid || '';\n    if (parentOwnerUid && parentOwnerUid !== author.uid && relationshipBlocked(parentOwnerUid)) { renderStatus('Blocked profiles cannot be commented on.'); return Promise.resolve(null); }\n    var commentId = clean('comment-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6), 'comment');\n    var commentReview = reviewStateForAuthor();\n    var commentMediaVisibility = recordAllowsPublicMedia(parentPostForMedia) ? 'public' : 'post_scoped';\n    function createCommentMedia(file){\n      var commentSignerKey = 'posts/' + postId + '/comments/' + commentId + '/' + clean('comment-' + Date.now() + '-' + file.name, 'media') + '/' + file.name;\n      return createMediaManifest(file, 'comment', commentId, '', commentMediaVisibility, payloadInput.contentRating || 'standard', {\n        surface: 'post',\n        surfaceId: postId,\n        slot: 'comment-' + commentId,\n        path: commentSignerKey,\n        objectKey: commentSignerKey\n      }).then(function(manifest){\n        if (!manifest) return null;\n        manifest.entity = entityMeta('media', commentMediaVisibility, payloadInput.contentRating || 'standard', { sourcePostId: postId, sourceCommentId: commentId, mediaKind: manifest.kind || 'image' });\n        return manifest;\n      });\n    }\n    var review = commentReview;\n    var comment = { commentId: commentId, postId: postId, authorUid: author.uid, authorProfileKey: author.profileKey, authorDisplayName: author.displayName, body: text, media: [], status: review.status, moderation: review.moderation, entity: authoredEntityMeta('comment', 'post_scoped', payloadInput.contentRating || 'standard', author, { sourcePostId: postId, moderationStatus: review.status }), firestorePath: PATHS.postComment, createdAt: serverTimestamp() };\n    return setDoc('posts/' + postId + '/comments/' + commentId, comment, true).then(function(savedComment){\n      if (!savedComment) return null;\n      var b = fb();\n      var bump = b && b.firestore.increment ? b.firestore.increment(1) : 1;\n      return setDoc('posts/' + postId, { counts: { comments: bump } }, true).catch(function(){ return null; }).then(function(){ return comment; });\n    }).then(function(savedComment){\n      if (!savedComment) return null;\n      if (!files.length) return savedComment;\n      return Promise.all(files.map(function(file){ return createCommentMedia(file); })).then(function(manifests){\n        var uploadedCommentMedia = manifests.filter(function(manifest){ return manifest && manifest.status === 'uploaded'; });\n        comment.media = uploadedCommentMedia;\n        claim('comment-media:direct-surface-owner', { postId: postId, commentId: commentId, mediaCount: comment.media.length, canonical: 'media_objects.surface=comment', rowFirst: true });\n        if (uploadedCommentMedia.length !== files.length) {\n          var hiddenPayload = { status: 'hidden', moderation: { state: 'hidden', gate: 'comment-media-upload-failed', lastActionAt: serverTimestamp() }, hiddenAt: serverTimestamp() };\n          return setDoc('posts/' + postId + '/comments/' + commentId, hiddenPayload, true)\n            .then(function(){ renderStatus('Media upload did not complete. Comment was not published.'); return null; })\n            .catch(function(){ renderStatus('Media upload did not complete. Comment was not published.'); return null; });\n        }\n        return Object.assign({}, savedComment || {}, comment, { media: uploadedCommentMedia });\n      });\n    }).then(function(comment){\n      if (!comment) return null;\n      return maybeQueueModeration(commentId, 'comment', 'posts/' + postId + '/comments/' + commentId, text).catch(function(error){\n        queueDraft('moderation-queue-comment-create', { postId: postId, commentId: commentId }, error);\n        return null;\n      }).then(function(){ return comment; });\n    }).then(function(comment){\n      if (!comment) return null;\n      state.openCommentPostIds[postId] = true;\n      state.commentsByPost[postId] = uniqueComments((state.commentsByPost[postId] || []).concat([comment])).slice(-5);\n      state.posts = state.posts.map(function(item){\n        if ((item.postId || item.id) !== postId) return item;\n        var counts = Object.assign({}, item.counts || {}); counts.comments = Number(counts.comments || 0) + 1;\n        return Object.assign({}, item, { counts: counts });\n      });\n      var parentPost = localPostById(postId) || {};\n      var ownerUid = parentPost.authorUid || parentPost.ownerUid || parentPost.uid || '';\n      if (ownerUid && ownerUid !== author.uid) {\n        notify(ownerUid, 'content', 'New comment', author.displayName + ' commented on your post.', postCommentPermalink(postId, commentId), { postId: postId, commentId: commentId, sourcePath: 'posts/' + postId + '/comments/' + commentId, previewMedia: comment.media && comment.media.length ? comment.media : (parentPost.media || []).slice(0, 2) });\n      } else {\n        notify(author.uid, 'content', 'Comment published', 'Your comment is live.', postCommentPermalink(postId, commentId), { postId: postId, commentId: commentId, sourcePath: 'posts/' + postId + '/comments/' + commentId, previewMedia: comment.media && comment.media.length ? comment.media : (parentPost.media || []).slice(0, 2) });\n      }\n      renderStatus('Comment published.');\n      renderPosts();\n      return comment;\n    }).catch(function(error){ queueDraft('comment-create', { postId: postId, body: text, mediaCount: files.length }, error); return null; });\n  }\n  function commentKey(comment){\n    return comment && (comment.commentId || comment.id) || '';\n  }\n  function uniqueComments(items){\n    var byId = {};\n    (items || []).forEach(function(item){\n      var key = commentKey(item);\n      if (!key) return;\n      byId[key] = Object.assign({}, byId[key] || {}, item || {});\n    });\n    return Object.keys(byId).map(function(key){ return byId[key]; }).sort(function(a, b){\n      var delta = recordMillis(a) - recordMillis(b);\n      return delta || String(commentKey(a)).localeCompare(String(commentKey(b)));\n    });\n  }\n  function commentOverrideKey(postId, commentId){\n    return String(postId || '') + '/' + String(commentId || '');\n  }\n  function rememberCommentOverride(postId, commentId, payload){\n    var key = commentOverrideKey(postId, commentId);\n    if (!postId || !commentId) return;\n    state.localCommentStateOverrides[key] = Object.assign({}, state.localCommentStateOverrides[key] || {}, payload || {}, { localOverrideAt: now() });\n    saveCommentStateOverrides(state.localCommentStateOverrides);\n  }\n  function applyCommentOverrides(postId, items){\n    return (items || []).map(function(item){\n      var commentId = commentKey(item);\n      var override = state.localCommentStateOverrides[commentOverrideKey(postId, commentId)];\n      return override ? Object.assign({}, item, override, { postId: postId, commentId: commentId, moderation: Object.assign({}, item.moderation || {}, override.moderation || {}) }) : item;\n    }).filter(function(item){ return item.status !== 'deleted' && (!item.moderation || item.moderation.state !== 'deleted'); });\n  }\n  function canEditComment(comment){\n    if (!comment || !hasActiveProfile()) return false;\n    if (canModerate()) return true;\n    var currentKey = clean(profileKey() || '', '').toLowerCase();\n    var authorKey = clean(comment.authorProfileKey || comment.ownerProfileKey || comment.profileKey || '', '').toLowerCase();\n    if (identityMatchesCurrent(comment.authorUid || comment.ownerUid || comment.uid || '', authorKey)) return true;\n    return !!(currentKey && authorKey && currentKey === authorKey);\n  }\n  function editComment(postId, commentId, updates){\n    if (!requireActiveProfile('edit comments') || !postId || !commentId) return Promise.resolve(null);\n    updates = updates || {};\n    var localComment = (state.commentsByPost[postId] || []).filter(function(item){ return commentKey(item) === commentId; })[0] || null;\n    var loadComment = localComment ? Promise.resolve(localComment) : getDoc('posts/' + postId + '/comments/' + commentId).then(function(snap){\n      return snap && snap.exists && snap.exists() ? Object.assign({ commentId: commentId, postId: postId }, snap.data() || {}) : null;\n    });\n    return loadComment.then(function(comment){\n      if (!canEditComment(comment)) {\n        renderStatus('Only the comment owner or a moderator can edit this comment.');\n        return null;\n      }\n      var body = String(updates.body == null ? comment.body || '' : updates.body).trim().slice(0, MAX.comment);\n      if (!body) {\n        renderStatus('Comment edit requires text.');\n        return null;\n      }\n      var review = reviewStateForAuthor();\n      var payload = {\n        body: body,\n        status: review.status,\n        moderation: Object.assign({}, review.moderation, { editRequiresReview: !isFounderRole(), lastActionAt: serverTimestamp() }),\n        editedAt: serverTimestamp(),\n        editedBy: uid()\n      };\n      rememberCommentOverride(postId, commentId, payload);\n      state.commentsByPost[postId] = (state.commentsByPost[postId] || []).map(function(item){ return commentKey(item) === commentId ? Object.assign({}, item, payload, { commentId: commentId, postId: postId }) : item; });\n      renderStatus(isFounderRole() ? 'Comment edit published.' : 'Comment edit submitted.');\n      renderPosts();\n      return setDoc('posts/' + postId + '/comments/' + commentId, payload, true)\n        .then(function(){\n          notify(uid(), 'content', isFounderRole() ? 'Comment edit published' : 'Comment updated', isFounderRole() ? 'Your comment edit is live.' : 'Your comment was updated.', '/pages/notifications');\n          return payload;\n        }).catch(function(error){ queueDraft('comment-edit', { postId: postId, commentId: commentId, updates: updates }, error); return payload; });\n    }).catch(function(error){ queueDraft('comment-edit-read', { postId: postId, commentId: commentId, updates: updates }, error); return null; });\n  }\n  function deleteComment(postId, commentId){\n    if (!requireActiveProfile('delete comments') || !postId || !commentId) return Promise.resolve(null);\n    var localComment = (state.commentsByPost[postId] || []).filter(function(item){ return commentKey(item) === commentId; })[0] || null;\n    var loadComment = localComment ? Promise.resolve(localComment) : getDoc('posts/' + postId + '/comments/' + commentId).then(function(snap){\n      return snap && snap.exists && snap.exists() ? Object.assign({ commentId: commentId, postId: postId }, snap.data() || {}) : null;\n    });\n    return loadComment.then(function(comment){\n      if (!canEditComment(comment)) {\n        renderStatus('Only the comment owner or a moderator can delete this comment.');\n        return null;\n      }\n      var payload = {\n        status: 'deleted',\n        moderation: { state: 'deleted', gate: 'owner-action', deletedBy: uid(), lastActionAt: serverTimestamp() },\n        deletedAt: serverTimestamp(),\n        deletedBy: uid()\n      };\n      rememberCommentOverride(postId, commentId, payload);\n      state.commentsByPost[postId] = (state.commentsByPost[postId] || []).filter(function(item){ return commentKey(item) !== commentId; });\n      state.posts = state.posts.map(function(item){\n        if ((item.postId || item.id) !== postId) return item;\n        var counts = Object.assign({}, item.counts || {}); counts.comments = Math.max(0, Number(counts.comments || 0) - 1);\n        return Object.assign({}, item, { counts: counts });\n      });\n      renderStatus('Comment deleted.');\n      renderPosts();\n      return setDoc('posts/' + postId + '/comments/' + commentId, payload, true)\n        .then(function(){ return canModerate() ? setDoc('moderationQueue/' + postId + '-comment-' + commentId, { state: 'deleted', deletedBy: uid(), deletedAt: serverTimestamp() }, true).catch(function(error){ queueDraft('moderation-queue-comment-delete', { postId: postId, commentId: commentId }, error); return null; }) : null; })\n        .then(function(){ return canModerate() ? recordFounderAudit({ action: 'comment.deleted', actorUid: uid(), sourcePath: 'posts/' + postId + '/comments/' + commentId }, 'comment-delete') : null; })\n        .then(function(){\n          var b = fb();\n          var bump = b && b.firestore.increment ? b.firestore.increment(-1) : 0;\n          return setDoc('posts/' + postId, { counts: { comments: bump } }, true).catch(function(){ return null; });\n        })\n        .then(function(){ return payload; })\n        .catch(function(error){ queueDraft('comment-delete', { postId: postId, commentId: commentId }, error); return payload; });\n    }).catch(function(error){ queueDraft('comment-delete-read', { postId: postId, commentId: commentId }, error); return null; });\n  }\n  function updateCommentState(postId, commentId, stateValue){\n    if (!canModerate() || !postId || !commentId) return Promise.resolve(null);\n    var payload = { status: stateValue, moderation: { state: stateValue, gate: 'founder-review', lastActionAt: serverTimestamp(), reviewedBy: uid() } };\n    rememberCommentOverride(postId, commentId, payload);\n    state.commentsByPost[postId] = applyCommentOverrides(postId, (state.commentsByPost[postId] || []).map(function(item){ return commentKey(item) === commentId ? Object.assign({}, item, payload, { commentId: commentId, postId: postId }) : item; }));\n    renderPosts();\n    return setDoc('posts/' + postId + '/comments/' + commentId, payload, true)\n      .then(function(){ return setDoc('moderationQueue/' + postId + '-comment-' + commentId, { state: stateValue, reviewedBy: uid(), reviewedAt: serverTimestamp() }, true).catch(function(error){ queueDraft('moderation-queue-comment-state', { postId: postId, commentId: commentId, state: stateValue }, error); return null; }); })\n      .then(function(){ return recordFounderAudit({ action: 'comment.' + stateValue, actorUid: uid(), sourcePath: 'posts/' + postId + '/comments/' + commentId }, 'comment-state'); })\n      .then(function(){ return payload; })\n      .catch(function(error){ queueDraft('comment-state', { postId: postId, commentId: commentId, state: stateValue }, error); return payload; });\n  }\n  function archiveSafetyReport(queueItemId){\n    if (!canModerate() || !queueItemId) return Promise.resolve(null);\n    var payload = { state: 'archived', status: 'archived', resolvedBy: uid(), resolvedAt: serverTimestamp(), reviewedBy: uid(), reviewedAt: serverTimestamp() };\n    return setDoc('moderationQueue/' + queueItemId, payload, true)\n      .then(function(){ return setDoc('safetyReports/' + queueItemId, payload, true).catch(function(error){ queueDraft('safety-report-archive', { queueItemId: queueItemId }, error); return null; }); })\n      .then(function(){ return recordFounderAudit({ action: 'safetyReport.archived', actorUid: uid(), sourcePath: 'safetyReports/' + queueItemId, queueItemId: queueItemId }, 'safety-report-archive'); })\n      .then(function(){\n        state.queue = state.queue.map(function(item){ return (item.queueItemId || item.id) === queueItemId ? Object.assign({}, item, payload) : item; });\n        renderStatus('Safety report archived.');\n        renderModeration();\n        return payload;\n      })\n      .catch(function(error){ queueDraft('safety-report-archive', { queueItemId: queueItemId }, error); return payload; });\n  }\n  function toggleReaction(postId, type){\n    if (!requireActiveProfile('react')) return Promise.resolve(null);\n    if (postOwnerBlocked(postId, 'reacted to')) return Promise.resolve(null);\n    var active = !state.reactionsByPost[postId];\n    var payload = { postId: postId, uid: uid(), type: type || 'like', active: active, entity: entityMeta('reaction', 'post_scoped', 'standard', { sourcePostId: postId }), firestorePath: PATHS.reaction };\n    return setDoc('posts/' + postId + '/reactions/' + uid(), payload, true).then(function(){\n      var b = fb();\n      var bump = b && b.firestore.increment ? b.firestore.increment(active ? 1 : -1) : (active ? 1 : 0);\n      return setDoc('posts/' + postId, { counts: { likes: bump } }, true).catch(function(){ return null; });\n    }).then(function(){\n      state.reactionsByPost[postId] = active;\n      state.posts = state.posts.map(function(item){\n        if ((item.postId || item.id) !== postId) return item;\n        var counts = Object.assign({}, item.counts || {}); counts.likes = Math.max(0, Number(counts.likes || 0) + (active ? 1 : -1));\n        return Object.assign({}, item, { counts: counts });\n      });\n      renderPosts();\n      return payload;\n    }).catch(function(error){ queueDraft('reaction', payload, error); return null; });\n  }\n  function updatePostViewCounterDom(postId, views){\n    qsa('.dsd-post-card[data-post-id=\"' + String(postId || '').replace(/\"/g, '\\\\\"') + '\"] .dsd-post-view-counter').forEach(function(counter){\n      var previous = Number(counter.getAttribute('data-dsd-counter-value') || 0);\n      var next = Math.max(previous, Number(views || 0));\n      setLocalCounterMax(postId, next);\n      counter.textContent = next + ' views';\n      counter.setAttribute('aria-label', next + ' post views');\n      counter.setAttribute('data-dsd-counter-value', String(next));\n      counter.setAttribute('data-dsd-counter-source', supabaseCutoverConfigured() ? 'supabase-view-counter' : 'owner-fallback');\n      counter.setAttribute('data-dsd-counter-dedupe', supabaseCutoverConfigured() ? 'viewer-key-server-dedupe' : 'owner-session-fallback');\n    });\n  }\n  function anonymousCounterViewerKey(){\n    var key = '';\n    try {\n      key = localStorage.getItem('dsd.publicCounter.viewerKey') || '';\n      if (!key) {\n        key = 'v-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 12);\n        localStorage.setItem('dsd.publicCounter.viewerKey', key);\n      }\n    } catch(e) {\n      key = 'volatile-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8);\n    }\n    return key;\n  }\n  function localCounterMaxMap(){\n    try { return JSON.parse(localStorage.getItem(VIEW_COUNTER_MAX_KEY) || '{}') || {}; } catch(e){ return {}; }\n  }\n  function manualVideoPausedMap(){\n    try { return JSON.parse(localStorage.getItem(VIDEO_MANUAL_PAUSED_KEY) || '{}') || {}; } catch(e){ return {}; }\n  }\n  function saveManualVideoPausedMap(){\n    try { localStorage.setItem(VIDEO_MANUAL_PAUSED_KEY, JSON.stringify(state.videoManualPausedByMediaId || {})); } catch(e){}\n  }\n  function localCounterMax(id){\n    var key = String(id || '').trim();\n    if (!key) return 0;\n    var map = localCounterMaxMap();\n    return Number(map[key] || 0);\n  }\n  function setLocalCounterMax(id, value){\n    var key = String(id || '').trim();\n    if (!key) return;\n    var next = Math.max(localCounterMax(key), Number(value || 0));\n    try {\n      var map = localCounterMaxMap();\n      map[key] = next;\n      localStorage.setItem(VIEW_COUNTER_MAX_KEY, JSON.stringify(map));\n    } catch(e){}\n  }\n  function recordSupabaseViewCounter(surface, payload){\n    if (!supabaseCutoverConfigured()) return Promise.resolve(null);\n    payload = Object.assign({ surface: surface, viewerKey: anonymousCounterViewerKey(), viewerAuthenticated: shopifyAuthenticated() }, payload || {});\n    return fetch('/apps/dsd-firebase-custom-token/supabase/view-counter', {\n      method: 'POST',\n      credentials: 'include',\n      headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\n      body: JSON.stringify(payload)\n    }).then(function(res){\n      if (!res.ok) throw new Error('View counter failed: ' + res.status);\n      return res.json();\n    }).catch(function(error){\n      claim('supabase-view-counter:blocked', { surface: surface, targetId: payload.targetId || payload.id || payload.profileKey || '', error: error && error.message || String(error) });\n      return null;\n    });\n  }\n  function counterValue(result, keys, fallback){\n    result = result || {};\n    var sources = [result];\n    if (result.post) sources.push(result.post);\n    if (result.story) sources.push(result.story);\n    if (result.counts) sources.push(result.counts);\n    for (var s = 0; s < sources.length; s++) {\n      for (var i = 0; i < keys.length; i++) {\n        var value = sources[s] && sources[s][keys[i]];\n        if (value !== undefined && value !== null && value !== '') return Number(value || 0);\n      }\n    }\n    return Number(fallback || 0);\n  }\n  function stableViewCounter(record, counts){\n    record = record || {};\n    counts = counts || record.counts || {};\n    var id = record.postId || record.id || record.legacyPostId || '';\n    var values = [\n      localCounterMax(id),\n      record.viewCount,\n      record.view_count,\n      record.views,\n      record.count,\n      counts.views,\n      counts.view_count,\n      counts.viewCount,\n      counts.count\n    ].map(function(value){ return Number(value); }).filter(function(value){ return isFinite(value) && value >= 0; });\n    if (!values.length) return 0;\n    var max = Math.max.apply(Math, values);\n    if (id && max > localCounterMax(id)) setLocalCounterMax(id, max);\n    return max;\n  }\n  function recordPostViews(posts){\n    (posts || []).slice(0, 20).forEach(function(post){\n      var id = post && (post.postId || post.id);\n      if (!id || state.postViewClaims[id] || !canRecordPostView(post)) return;\n      if (!shopifyAuthenticated()) return;\n      state.postViewClaims[id] = now();\n      var counts = Object.assign({}, post.counts || {});\n      var currentViews = stableViewCounter(post, counts);\n      if (supabaseCutoverConfigured()) {\n        recordSupabaseViewCounter('post', { targetId: post.supabasePostId || id, legacyId: post.postId || post.legacyPostId || id }).then(function(result){\n          if (!result) {\n            var fallbackViews = Math.max(currentViews + 1, localCounterMax(id), 1);\n            patchLocalPost(id, { counts: Object.assign({}, counts, { views: fallbackViews }), viewCount: fallbackViews });\n            updatePostViewCounterDom(id, fallbackViews);\n            return null;\n          }\n          var resultViews = counterValue(result, ['viewCount', 'view_count', 'views', 'count'], currentViews);\n          var confirmedViews = Math.max(Number(resultViews || 0), Number(currentViews || 0), localCounterMax(id));\n          var confirmedCounts = Object.assign({}, counts, { views: confirmedViews, viewCount: confirmedViews });\n          patchLocalPost(id, { counts: confirmedCounts, viewCount: confirmedCounts.views });\n          updatePostViewCounterDom(id, confirmedCounts.views);\n          return result;\n        });\n        return;\n      }\n      var nextViews = Math.max(currentViews + 1, 1);\n      counts.views = nextViews;\n      patchLocalPost(id, { counts: counts, viewCount: nextViews });\n      updatePostViewCounterDom(id, nextViews);\n      if (!hasCustomer() || !actorUid() || (post.authorUid !== actorUid() && !canModerate())) return;\n      setDoc('posts/' + id, { counts: { views: nextViews }, viewCount: nextViews, lastViewedAt: serverTimestamp() }, true).catch(function(error){\n        queueDraft('post-view-counter', { postId: id, views: nextViews }, error);\n        return null;\n      });\n    });\n  }\n  function canRecordPostView(post){\n    if (!post || !publicRecordVisible(post) || !isApprovedPublicRecord(post)) return false;\n    if (isRestrictedShellRecord(post)) return false;\n    var visibility = String(post.visibility || (post.entity && post.entity.visibility) || 'public').toLowerCase();\n    if (visibility === 'hidden') return false;\n    if (!canViewPrivateRecord(post)) return false;\n    var restriction = classifiedRestrictionType(post);\n    if (restriction && !canViewClassified(post)) return false;\n    return visibility === 'public' || visibility === 'gated' || visibility === 'private';\n  }\n  function canEditPost(post){\n    return !!(post && hasActiveProfile() && recordOwnedByCurrentProfile(post));\n  }\n  function postKey(post){\n    return post && (post.postId || post.id) || '';\n  }\n  function localPostById(postId){\n    return state.posts.filter(function(item){ return postKey(item) === postId; })[0] || null;\n  }\n  function patchLocalPost(postId, payload){\n    var changed = false;\n    state.posts = state.posts.map(function(item){\n      if (postKey(item) !== postId) return item;\n      changed = true;\n      return Object.assign({}, item, payload);\n    });\n    return changed;\n  }\n  function hideLocalPost(postId, payload){\n    if (!postId) return false;\n    state.localDeletedPostIds[postId] = now();\n    saveDeletedPostTombstones(state.localDeletedPostIds);\n    var changed = patchLocalPost(postId, Object.assign({ status: 'deleted' }, payload || {}));\n    if (!changed) state.posts = state.posts.filter(function(item){ return postKey(item) !== postId; });\n    renderAll();\n    return true;\n  }\n  function saveLocalPostStateOverride(postId, payload){\n    if (!postId || !payload) return;\n    state.localPostStateOverrides[postId] = Object.assign({}, state.localPostStateOverrides[postId] || {}, payload, { localOverrideAt: now() });\n    savePostStateOverrides(state.localPostStateOverrides);\n  }\n  function editablePostFromSnapshotOrLocal(postId, snap){\n    if (snap && snap.exists && snap.exists()) return Object.assign({ postId: postId }, snap.data() || {});\n    return localPostById(postId);\n  }\n  function editPost(postId, updates){\n    if (!requireActiveProfile('edit posts')) return Promise.resolve(null);\n    updates = updates || {};\n    var localPost = localPostById(postId);\n    return getDoc('posts/' + postId).catch(function(error){\n      if (canEditPost(localPost)) {\n        claim('post-edit:local-snapshot-fallback', { postId: postId, error: error && error.message || String(error) });\n        return null;\n      }\n      throw error;\n    }).then(function(snap){\n      var post = editablePostFromSnapshotOrLocal(postId, snap);\n      if (!canEditPost(post)) {\n        renderStatus('Only the post owner can edit this post.');\n        return null;\n      }\n      var body = String(updates.body == null ? post.body || '' : updates.body).trim().slice(0, MAX.body);\n      var caption = '';\n      if (!body && !(post.media && post.media.length)) {\n        renderStatus('Post edit requires text, image, video, or mixed media.');\n        return null;\n      }\n      var review = reviewStateForAuthor();\n      var payload = applyFounderModerationLock(post, {\n        body: body,\n        caption: '',\n        status: review.status,\n        moderation: Object.assign({}, review.moderation, { editRequiresReview: !isFounderRole(), lastActionAt: serverTimestamp() }),\n        editedAt: serverTimestamp(),\n        editedBy: uid()\n      });\n      patchLocalPost(postId, payload);\n      renderAll();\n      return setDoc('posts/' + postId, payload, true)\n        .then(function(){\n          notify(uid(), 'content', isFounderRole() ? 'Post edit published' : 'Post updated', isFounderRole() ? 'Your post edit is live.' : 'Your post was updated.', postPermalink(postId), { postId: postId, sourcePath: 'posts/' + postId, previewMedia: (post.media || []).slice(0, 2) });\n          renderStatus(isFounderRole() ? 'Post edit published.' : 'Post updated.');\n          renderAll();\n          return payload;\n        });\n    }).catch(function(error){ queueDraft('post-edit', { postId: postId, updates: updates }, error); return null; });\n  }\n  function deletePost(postId){\n    if (!requireActiveProfile('delete posts')) return Promise.resolve(null);\n    var localPost = localPostById(postId);\n    return getDoc('posts/' + postId).catch(function(error){\n      if (canEditPost(localPost) || canModerate()) {\n        claim('post-delete:local-snapshot-fallback', { postId: postId, error: error && error.message || String(error) });\n        return null;\n      }\n      throw error;\n    }).then(function(snap){\n      var post = editablePostFromSnapshotOrLocal(postId, snap);\n      if (!canEditPost(post) && !canModerate()) {\n        renderStatus('Only the post owner or a moderator can delete this post.');\n        return null;\n      }\n      var payload = {\n        status: 'deleted',\n        moderation: { state: 'deleted', gate: 'owner-action', deletedBy: uid(), lastActionAt: serverTimestamp() },\n        deletedAt: serverTimestamp(),\n        deletedBy: uid()\n      };\n      hideLocalPost(postId, payload);\n      state.savedItems = activeSavedItems(state.savedItems).filter(function(item){ return (item.targetId || item.postId || item.id) !== postId; });\n      state.viewedSavedItems = activeSavedItems(state.viewedSavedItems).filter(function(item){ return (item.targetId || item.postId || item.id) !== postId; });\n      state.localSavedStateOverrides[postId] = 'removed';\n      saveSavedStateOverrides(state.localSavedStateOverrides);\n      return setDoc('posts/' + postId, payload, true)\n        .then(function(){ return canModerate() ? setDoc('moderationQueue/' + postId, { state: 'deleted', deletedBy: uid(), deletedAt: serverTimestamp() }, true).catch(function(error){ queueDraft('moderation-queue-post-delete', { postId: postId }, error); return null; }) : null; })\n        .then(function(){ return setDoc('saves/' + uid() + '/items/' + postId, { state: 'removed', removedAt: serverTimestamp(), targetId: postId, targetType: 'post' }, true).catch(function(error){ queueDraft('saved-delete-cascade-self', { postId: postId }, error); return null; }); })\n        .then(function(){ return canModerate() ? recordFounderAudit({ action: 'post.deleted', actorUid: uid(), sourcePath: 'posts/' + postId }, 'post-delete') : null; })\n        .then(function(){\n          renderStatus('Post deleted.');\n          renderAll();\n          return payload;\n        });\n    }).catch(function(error){ queueDraft('post-delete', { postId: postId }, error); return null; });\n  }\n  function followProfile(targetUid, targetProfileKey){\n    targetProfileKey = clean(targetProfileKey || '', '');\n    if (!targetUid && targetProfileKey) targetUid = profileUidForKey(targetProfileKey);\n    var sourceUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('follow profiles') || !targetUid || targetUid === sourceUid) return Promise.resolve(null);\n    var targetProfile = profileByUid(targetUid, targetProfileKey || '') || (viewedProfileUid() === targetUid ? viewedProfile() : null) || {};\n    var requestOnly = profileVisibility(targetProfile) === 'private' && !state.followingByUid[targetUid] && !canModerate();\n    var relationshipState = requestOnly ? 'requested' : 'active';\n    var following = { uid: sourceUid, sourceUid: sourceUid, sourceProfileKey: profileKey(), targetUid: targetUid, targetProfileKey: targetProfileKey || '', state: relationshipState, entity: entityMeta('relationship', 'private', 'standard', { targetUid: targetUid, targetProfileKey: targetProfileKey || '' }), firestorePath: PATHS.following };\n    var follower = { uid: targetUid, sourceUid: sourceUid, sourceProfileKey: profileKey(), targetUid: targetUid, targetProfileKey: targetProfileKey || '', state: relationshipState, firestorePath: PATHS.followers };\n    return setDoc('relationships/' + sourceUid + '/following/' + targetUid, following, true)\n      .then(function(){ return setDoc('relationships/' + targetUid + '/followers/' + sourceUid, follower, true); })\n      .then(function(){\n        if (requestOnly) {\n          state.followRequestByUid[targetUid] = true;\n          renderStatus('Follow request sent.');\n        } else {\n          state.followingByUid[targetUid] = true;\n          state.followingRecords = mergeByKey(state.followingRecords, [following], ['targetUid', 'id']);\n          refreshPublicRelationshipCounts(targetUid, targetProfileKey || '', 1);\n          renderStatus('Profile followed.');\n        }\n        renderProfileIdentity();\n        renderDiscovery();\n        renderRelationships();\n        renderPosts('follow-profile');\n        notify(targetUid, 'relationships', requestOnly ? 'Follow request' : 'New follower', displayName() + (requestOnly ? ' requested to follow you.' : ' followed you.'), profileRouteHref(profileKey()), { targetUid: targetUid, targetProfileKey: targetProfileKey || '', profileKey: profileKey(), state: relationshipState });\n        return following;\n      })\n      .catch(function(error){ queueDraft('follow-profile', following, error); return null; });\n  }\n  function unfollowProfile(targetUid){\n    var sourceUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('unfollow profiles') || !targetUid || targetUid === sourceUid) return Promise.resolve(null);\n    var payload = { uid: sourceUid, sourceUid: sourceUid, targetUid: targetUid, state: 'unfollowed', unfollowedAt: serverTimestamp(), entity: entityMeta('relationship', 'private', 'standard', { targetUid: targetUid }), firestorePath: PATHS.following };\n    return setDoc('relationships/' + sourceUid + '/following/' + targetUid, payload, true)\n      .then(function(){ return setDoc('relationships/' + targetUid + '/followers/' + sourceUid, { state: 'unfollowed', unfollowedAt: serverTimestamp() }, true).catch(function(){ return null; }); })\n      .then(function(){\n        state.followingByUid[targetUid] = false;\n        state.followRequestByUid[targetUid] = false;\n        state.followingRecords = state.followingRecords.filter(function(item){ return item.targetUid !== targetUid; });\n        refreshPublicRelationshipCounts(targetUid, '', -1);\n        renderProfileIdentity();\n        renderDiscovery();\n        renderRelationships();\n        renderPosts('unfollow-profile');\n        renderStatus('Profile unfollowed.');\n        return payload;\n      })\n      .catch(function(error){ queueDraft('unfollow-profile', { targetUid: targetUid }, error); return null; });\n  }\n  function toggleFollowProfile(targetUid, targetProfileKey){\n    targetProfileKey = clean(targetProfileKey || '', '');\n    if (!targetUid && targetProfileKey) targetUid = profileUidForKey(targetProfileKey);\n    if (relationshipBlocked(targetUid)) { renderStatus('Blocked profiles cannot be followed.'); return Promise.resolve(null); }\n    return state.followingByUid[targetUid] || state.followRequestByUid[targetUid] ? unfollowProfile(targetUid) : followProfile(targetUid, targetProfileKey);\n  }\n  function relationshipBlocked(targetUid){\n    targetUid = String(targetUid || '').trim();\n    return !!(targetUid && (state.blockedByUid[targetUid] || state.blockedMeByUid[targetUid]));\n  }\n  function conversationBlocked(conversation){\n    var peer = conversationPeer(conversation || {});\n    if (peer && relationshipBlocked(peer.uid)) return true;\n    var ids = (conversation && (conversation.participantIds || conversation.participants || conversation.participant_ids) || []).filter(Boolean);\n    var sourceUid = actorRelationshipIdentity();\n    return ids.some(function(item){ return String(item || '') !== sourceUid && relationshipBlocked(item); });\n  }\n  function recordOwnerUid(record){\n    return record && (record.authorUid || record.ownerUid || record.uid || '') || '';\n  }\n  function postOwnerBlocked(postId, action){\n    var post = localPostById(postId) || {};\n    var ownerUid = recordOwnerUid(post);\n    if (ownerUid && ownerUid !== actorRelationshipIdentity() && relationshipBlocked(ownerUid)) {\n      renderStatus('Blocked profiles cannot be ' + (action || 'interacted with') + '.');\n      return true;\n    }\n    return false;\n  }\n  function blockProfile(targetUid, targetProfileKey){\n    targetProfileKey = clean(targetProfileKey || '', '');\n    if (!targetUid && targetProfileKey) targetUid = profileUidForKey(targetProfileKey);\n    targetUid = String(targetUid || '').trim();\n    var sourceUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('block profiles') || !targetUid || targetUid === sourceUid) return Promise.resolve(null);\n    var payload = { uid: sourceUid, sourceUid: sourceUid, sourceProfileKey: profileKey(), targetUid: targetUid, targetProfileKey: targetProfileKey || '', state: 'blocked', blockedAt: serverTimestamp(), entity: entityMeta('relationship', 'private', 'standard', { targetUid: targetUid, state: 'blocked' }), firestorePath: PATHS.following };\n    return setDoc('relationships/' + sourceUid + '/following/' + targetUid, payload, true)\n      .then(function(){ return setDoc('relationships/' + targetUid + '/followers/' + sourceUid, payload, true).catch(function(){ return null; }); })\n      .then(function(){\n        state.followingByUid[targetUid] = false;\n        state.followRequestByUid[targetUid] = false;\n        state.blockedByUid[targetUid] = true;\n        state.followingRecords = state.followingRecords.filter(function(item){ return item.targetUid !== targetUid; });\n        state.blockedRecords = mergeByKey(state.blockedRecords, [payload], ['targetUid', 'id']);\n        renderProfileIdentity();\n        renderDiscovery();\n        renderRelationships();\n        renderMessages();\n        renderStatus('Profile blocked.');\n        return payload;\n      })\n      .catch(function(error){ queueDraft('block-profile', { targetUid: targetUid, targetProfileKey: targetProfileKey }, error); return null; });\n  }\n  function unblockProfile(targetUid, targetProfileKey){\n    targetProfileKey = clean(targetProfileKey || '', '');\n    if (!targetUid && targetProfileKey) targetUid = profileUidForKey(targetProfileKey);\n    targetUid = String(targetUid || '').trim();\n    var sourceUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('unblock profiles') || !targetUid || targetUid === sourceUid) return Promise.resolve(null);\n    var payload = { uid: sourceUid, sourceUid: sourceUid, sourceProfileKey: profileKey(), targetUid: targetUid, targetProfileKey: targetProfileKey || '', state: 'unfollowed', unblockedAt: serverTimestamp(), entity: entityMeta('relationship', 'private', 'standard', { targetUid: targetUid, state: 'unfollowed' }), firestorePath: PATHS.following };\n    return setDoc('relationships/' + sourceUid + '/following/' + targetUid, payload, true)\n      .then(function(){ return setDoc('relationships/' + targetUid + '/followers/' + sourceUid, payload, true).catch(function(){ return null; }); })\n      .then(function(){\n        state.blockedByUid[targetUid] = false;\n        state.blockedRecords = state.blockedRecords.filter(function(item){ return item.targetUid !== targetUid; });\n        renderProfileIdentity();\n        renderDiscovery();\n        renderRelationships();\n        renderMessages();\n        renderStatus('Profile unblocked.');\n        return payload;\n      })\n      .catch(function(error){ queueDraft('unblock-profile', { targetUid: targetUid, targetProfileKey: targetProfileKey }, error); return null; });\n  }\n  function resolveFollowRequestViaProxy(sourceUid, decision){\n    return fetch('/apps/dsd-firebase-custom-token/supabase/relationship-decision', {\n      method: 'POST',\n      credentials: 'include',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ sourceUid: sourceUid, decision: decision === 'active' ? 'active' : 'declined' })\n    }).then(function(response){\n      return response.text().then(function(text){\n        var body = {};\n        try { body = text ? JSON.parse(text) : {}; } catch(e) { body = { raw: text }; }\n        if (!response.ok || body.ok === false) {\n          var error = new Error(body && (body.message || body.error) || ('relationship decision failed: ' + response.status));\n          error.status = response.status;\n          error.body = body;\n          throw error;\n        }\n        return body;\n      });\n    });\n  }\n  function resolveFollowRequest(sourceUid, sourceProfileKey, decision){\n    var targetUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('manage follow requests') || !sourceUid || sourceUid === targetUid) return Promise.resolve(null);\n    var accepted = decision === 'active';\n    var follower = { uid: targetUid, sourceUid: sourceUid, sourceProfileKey: sourceProfileKey || '', targetUid: targetUid, targetProfileKey: profileKey(), state: accepted ? 'active' : 'declined', firestorePath: PATHS.followers };\n    var following = { uid: sourceUid, sourceUid: sourceUid, sourceProfileKey: sourceProfileKey || '', targetUid: targetUid, targetProfileKey: profileKey(), state: accepted ? 'active' : 'declined', firestorePath: PATHS.following };\n    function applyResolved(){\n        state.incomingFollowRequests = state.incomingFollowRequests.filter(function(item){ return item.sourceUid !== sourceUid; });\n      if (accepted) {\n        state.followersRecords = mergeByKey(state.followersRecords, [follower], ['sourceUid', 'id']);\n        refreshPublicRelationshipCounts(targetUid, profileKey(), 1);\n        notify(sourceUid, 'relationships', 'Follow request approved', displayName() + ' approved your follow request.', profileRouteHref(profileKey()), { targetUid: targetUid, targetProfileKey: profileKey(), state: 'active' });\n      }\n      renderRelationships();\n      renderProfileIdentity();\n      renderStatus(accepted ? 'Follow request accepted.' : 'Follow request declined.');\n      return follower;\n    }\n    return resolveFollowRequestViaProxy(sourceUid, accepted ? 'active' : 'declined').then(applyResolved).catch(function(proxyError){\n      claim('follow-request-decision-proxy:blocked', { sourceUid: sourceUid, decision: accepted ? 'active' : 'declined', error: proxyError && proxyError.message || String(proxyError) });\n      return setDoc('relationships/' + targetUid + '/followers/' + sourceUid, follower, true)\n      .then(function(){ return setDoc('relationships/' + sourceUid + '/following/' + targetUid, following, true); })\n      .then(applyResolved)\n      .catch(function(error){ queueDraft('follow-request-' + decision, { sourceUid: sourceUid, proxyError: proxyError && proxyError.message || String(proxyError) }, error); return null; });\n    });\n  }\n  function saveItem(targetType, targetId){\n    if (!requireActiveProfile('save content') || !targetId) return Promise.resolve(null);\n    if ((targetType === 'post' || !targetType) && postOwnerBlocked(targetId, 'saved')) return Promise.resolve(null);\n    var payload = { ownerUid: uid(), targetType: targetType || 'post', targetId: targetId, state: 'saved', entity: entityMeta('save', 'private', 'standard', { targetType: targetType || 'post', targetId: targetId }), firestorePath: PATHS.saved };\n    var previous = state.savedItems.slice();\n    var previousOverrides = Object.assign({}, state.localSavedStateOverrides || {});\n    setLocalSavedState(targetId, 'saved');\n    state.savedItems = mergeByKey(state.savedItems, [payload], ['targetId', 'id']);\n    syncSaveButtons(targetId, true);\n    renderPosts();\n    renderRelationships();\n    return setDoc('saves/' + uid() + '/items/' + targetId, payload, true).then(function(){\n      state.savedItems = mergeByKey(state.savedItems, [payload], ['targetId', 'id']);\n      syncSaveButtons(targetId, true);\n      var savedPost = targetType === 'post' || !targetType ? localPostById(targetId) || {} : {};\n      notify(uid(), 'saved', 'Saved', 'Item saved to your profile.', (targetType === 'post' || !targetType) ? postPermalink(targetId) : profileRouteHref(profileKey()), { targetType: targetType || 'post', targetId: targetId, postId: targetId, sourcePath: (targetType === 'post' || !targetType) ? 'posts/' + targetId : '', previewMedia: (savedPost.media || []).slice(0, 2) });\n      renderPosts();\n      renderRelationships();\n      renderStatus('Post saved.');\n      return payload;\n    }).catch(function(error){ state.savedItems = previous; state.localSavedStateOverrides = previousOverrides; saveSavedStateOverrides(state.localSavedStateOverrides); syncSaveButtons(targetId, previous.some(function(item){ return item && item.state === 'saved' && item.targetId === targetId; })); renderPosts(); renderRelationships(); queueDraft('save-item', payload, error); return null; });\n  }\n  function unsaveItem(targetType, targetId){\n    if (!requireActiveProfile('unsave content') || !targetId) return Promise.resolve(null);\n    var previous = state.savedItems.slice();\n    var previousOverrides = Object.assign({}, state.localSavedStateOverrides || {});\n    var payload = { ownerUid: uid(), targetType: targetType || 'post', targetId: targetId, state: 'removed', removedAt: serverTimestamp(), entity: entityMeta('save', 'private', 'standard', { targetType: targetType || 'post', targetId: targetId }), firestorePath: PATHS.saved };\n    setLocalSavedState(targetId, 'removed');\n    state.savedItems = state.savedItems.filter(function(item){ return !(item && item.targetId === targetId); });\n    syncSaveButtons(targetId, false);\n    renderPosts();\n    renderRelationships();\n    return setDoc('saves/' + uid() + '/items/' + targetId, payload, true).then(function(){\n      state.savedItems = state.savedItems.filter(function(item){ return !(item && item.targetId === targetId); });\n      syncSaveButtons(targetId, false);\n      renderPosts();\n      renderRelationships();\n      renderStatus('Post removed from saved.');\n      return { targetType: targetType || 'post', targetId: targetId, state: 'removed' };\n    }).catch(function(error){ state.savedItems = previous; state.localSavedStateOverrides = previousOverrides; saveSavedStateOverrides(state.localSavedStateOverrides); syncSaveButtons(targetId, previous.some(function(item){ return item && item.state === 'saved' && item.targetId === targetId; })); renderPosts(); renderRelationships(); queueDraft('unsave-item', { targetType: targetType || 'post', targetId: targetId }, error); return null; });\n  }\n  function toggleSaveItem(targetType, targetId){\n    var savedOverride = state.localSavedStateOverrides && state.localSavedStateOverrides[targetId];\n    var saved = savedOverride ? savedOverride === 'saved' : state.savedItems.some(function(item){ return item && item.state === 'saved' && item.targetId === targetId; });\n    return saved ? unsaveItem(targetType || 'post', targetId) : saveItem(targetType || 'post', targetId);\n  }\n  function recordShare(postId, mode){\n    var id = String(postId || '').trim();\n    if (!id || !hasActiveProfile()) return Promise.resolve(null);\n    if (postOwnerBlocked(id, 'shared')) return Promise.resolve(null);\n    var payload = { postId: id, uid: uid(), ownerUid: uid(), ownerProfileKey: profileKey(), mode: mode || 'link', state: 'shared', sharedAt: serverTimestamp(), entity: entityMeta('share', 'post_scoped', 'standard', { sourcePostId: id, shareMode: mode || 'link' }), firestorePath: PATHS.postShare };\n    return setDoc('posts/' + id + '/shares/' + uid(), payload, true).then(function(){\n      var b = fb();\n      var bump = b && b.firestore.increment ? b.firestore.increment(1) : 1;\n      return setDoc('posts/' + id, { counts: { shares: bump } }, true).catch(function(){ return null; });\n    }).then(function(){\n      state.posts = state.posts.map(function(item){\n        if ((item.postId || item.id) !== id) return item;\n        var counts = Object.assign({}, item.counts || {}); counts.shares = Number(counts.shares || 0) + 1;\n        return Object.assign({}, item, { counts: counts });\n      });\n      renderPosts();\n      return payload;\n    }).catch(function(error){ queueDraft('post-share', payload, error); return null; });\n  }\n  function sharePost(postId){\n    var id = String(postId || '').trim();\n    if (postOwnerBlocked(id, 'shared')) return Promise.resolve(false);\n    var post = state.posts.filter(function(item){ return (item.postId || item.id) === id; })[0] || {};\n    var url = postPermalink(id);\n    var title = 'Detroit Sky Daddy post';\n    var text = String(post.body || '').slice(0, 180);\n    claim('share-sheet:post-link', { postId: id, url: url });\n    if (navigator.share) {\n      return navigator.share({ title: title, text: text, url: url }).then(function(){\n        renderStatus('Post shared.');\n        return recordShare(id, 'native').then(function(){ return true; });\n      }).catch(function(error){\n        if (error && error.name === 'AbortError') return false;\n        renderStatus('Share failed. Copy the post link instead.');\n        return false;\n      });\n    }\n    if (navigator.clipboard && navigator.clipboard.writeText) {\n      return navigator.clipboard.writeText(url).then(function(){\n        renderStatus('Post link copied.');\n        return recordShare(id, 'copy').then(function(){ return true; });\n      }).catch(function(){\n        window.prompt('Copy post link', url);\n        return false;\n      });\n    }\n    window.prompt('Copy post link', url);\n    return Promise.resolve(false);\n  }\n  function favoriteUser(targetUid, targetProfileKey){\n    targetProfileKey = clean(targetProfileKey || '', '');\n    if (!targetUid && targetProfileKey) targetUid = profileUidForKey(targetProfileKey);\n    var sourceUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('favorite profiles') || !targetUid || targetUid === sourceUid) return Promise.resolve(null);\n    if (relationshipBlocked(targetUid)) { renderStatus('Blocked profiles cannot be favorited.'); return Promise.resolve(null); }\n    var payload = { ownerUid: sourceUid, targetUid: targetUid, targetProfileKey: targetProfileKey || '', state: 'favorite', entity: entityMeta('favorite', 'private', 'standard', { targetUid: targetUid, targetProfileKey: targetProfileKey || '' }), firestorePath: PATHS.favorites };\n    return setDoc('favorites/' + sourceUid + '/items/' + targetUid, payload, true).then(function(){\n      state.favoritesByUid[targetUid] = true;\n      state.favoritesRecords = mergeByKey(state.favoritesRecords, [payload], ['targetUid', 'id']);\n      renderProfileIdentity();\n      renderDiscovery();\n      renderRelationships();\n      renderPosts();\n      return payload;\n    }).catch(function(error){ queueDraft('favorite-user', payload, error); return null; });\n  }\n  function unfavoriteUser(targetUid, targetProfileKey){\n    var sourceUid = actorRelationshipIdentity();\n    if (!requireActiveProfile('unfavorite profiles') || !targetUid || targetUid === sourceUid) return Promise.resolve(null);\n    var payload = { ownerUid: sourceUid, targetUid: targetUid, targetProfileKey: targetProfileKey || '', state: 'removed', removedAt: serverTimestamp(), entity: entityMeta('favorite', 'private', 'standard', { targetUid: targetUid, targetProfileKey: targetProfileKey || '' }), firestorePath: PATHS.favorites };\n    return setDoc('favorites/' + sourceUid + '/items/' + targetUid, payload, true).then(function(){\n      state.favoritesByUid[targetUid] = false;\n      state.favoritesRecords = state.favoritesRecords.filter(function(item){ return item && item.targetUid !== targetUid; });\n      renderProfileIdentity();\n      renderDiscovery();\n      renderRelationships();\n      renderPosts();\n      return payload;\n    }).catch(function(error){ queueDraft('unfavorite-user', payload, error); return null; });\n  }\n  function toggleFavoriteUser(targetUid, targetProfileKey){\n    targetProfileKey = clean(targetProfileKey || '', '');\n    if (!targetUid && targetProfileKey) targetUid = profileUidForKey(targetProfileKey);\n    if (!state.favoritesByUid[targetUid] && relationshipBlocked(targetUid)) { renderStatus('Blocked profiles cannot be favorited.'); return Promise.resolve(null); }\n    return state.favoritesByUid[targetUid] ? unfavoriteUser(targetUid, targetProfileKey) : favoriteUser(targetUid, targetProfileKey);\n  }\n  function notificationRecipientUid(value){\n    var recipient = String(value || uid() || '').trim();\n    if (!recipient || recipient.indexOf('/') !== -1 || recipient.indexOf('\\\\') !== -1) return '';\n    if (/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/i.test(recipient)) return '';\n    if (!/^[A-Za-z0-9_-]{6,128}$/.test(recipient)) return '';\n    return recipient;\n  }\n  function notify(recipientUid, type, title, body, href, meta){\n    if (!hasCustomer()) return Promise.resolve(null);\n    var safeRecipient = notificationRecipientUid(recipientUid);\n    if (!safeRecipient) {\n      claim('notification-recipient:blocked', { category: type || 'system', reason: 'invalid-recipient' });\n      return Promise.resolve(null);\n    }\n    if (!identityMatchesCurrent(safeRecipient, '') && relationshipBlocked(safeRecipient)) {\n      claim('notification-recipient:blocked', { category: type || 'system', reason: 'relationship-blocked', recipientUid: safeRecipient });\n      return Promise.resolve(null);\n    }\n    var actorProfile = state.profile || {};\n    var actorKey = profileKey();\n    var actorName = displayName();\n    meta = meta && typeof meta === 'object' ? meta : {};\n    var payload = {\n      recipientUid: safeRecipient,\n      category: type || 'system',\n      type: type || 'system',\n      title: title || 'Notification',\n      body: body || '',\n      href: href || '/pages/notifications',\n      read: false,\n      actorUid: actorRelationshipIdentity(),\n      actorProfileKey: actorKey,\n      actorDisplayName: actorName,\n      actorAvatarMediaId: actorProfile.avatarMediaId || '',\n      actorHeaderMediaId: actorProfile.bannerMediaId || actorProfile.headerMediaId || '',\n      thumbnailMediaId: actorProfile.avatarMediaId || '',\n      firestorePath: PATHS.notification\n    };\n    [\n      'targetUid', 'targetProfileKey', 'targetType', 'targetId', 'profileKey',\n      'postId', 'commentId', 'storyId', 'conversationId', 'sourcePath',\n      'contentMediaId', 'contentMediaKind', 'contentTitle',\n      'thumbnailMediaId', 'actorAvatarMediaId', 'actorHeaderMediaId'\n    ].forEach(function(key){\n      if (meta[key] !== undefined && meta[key] !== null) payload[key] = meta[key];\n    });\n    if (Array.isArray(meta.previewMedia)) payload.previewMedia = meta.previewMedia.slice(0, 3);\n    if (Array.isArray(meta.contentMedia)) payload.contentMedia = meta.contentMedia.slice(0, 3);\n    return addDoc('notifications/' + payload.recipientUid + '/items', payload).catch(function(error){ queueDraft('notification', payload, error); return null; });\n  }\n  function notificationCategory(item){\n    var raw = String((item && (item.category || item.type)) || 'system');\n    if (raw === 'profile') return 'relationships';\n    if (raw === 'saved') return 'content';\n    if (raw === 'safetyReport') return 'safety';\n    if (raw === 'moderation') return 'founder';\n    return raw;\n  }\n  function recipientIdentity(value, profileHint){\n    var raw = String(value || '').trim();\n    var keyHint = clean(profileHint || raw || '', '');\n    var byUid = publicProfileByUid(raw);\n    var byKey = publicProfileByKey(keyHint);\n    var profile = byUid || byKey || null;\n    return {\n      uid: (profile && profile.uid) || raw,\n      key: (profile && (profile.profileKey || profile.handle)) || keyHint || raw,\n      name: (profile && profile.displayName) || profileHint || raw || 'DSD member'\n    };\n  }\n  function canonicalConversationId(targetUid, profileHint){\n    var resolved = recipientIdentity(targetUid, profileHint);\n    var selfKey = profileKey();\n    var peerKey = clean(resolved.key || '', '');\n    var parts = selfKey && peerKey && selfKey !== peerKey ? [selfKey, peerKey] : [actorRelationshipIdentity(), resolved.uid];\n    parts = parts.filter(Boolean).sort();\n    return clean('conv-' + parts.join('-'), 'conversation');\n  }\n  function routeRequestedConversationId(){\n    var requested = queryParam('conversationId');\n    if (requested) return requested;\n    var groupRecipients = queryParam('groupRecipients') || queryParam('group') || '';\n    if (groupRecipients && hasActiveProfile()) {\n      var groupIdentities = uniqueIdentities(parseGroupRecipients(groupRecipients));\n      if (groupIdentities.length >= 2) return canonicalGroupConversationId(groupIdentities);\n    }\n    var recipient = queryParam('recipientUid') || queryParam('recipient') || '';\n    if (!recipient) return '';\n    return canonicalConversationId(recipient, queryParam('profile'));\n  }\n  function routeRecipientConversation(){\n    var recipient = queryParam('recipientUid') || queryParam('recipient') || '';\n    if (!recipient || !hasActiveProfile()) return null;\n    var profile = queryParam('profile');\n    var resolved = recipientIdentity(recipient, profile);\n    var targetUid = String(resolved.uid || recipient || '').trim();\n    var targetKey = resolved.key || profile || targetUid;\n    if (!targetUid || identityMatchesCurrent(targetUid, targetKey)) return null;\n    var cid = canonicalConversationId(targetUid, targetKey);\n    return {\n      conversationId: cid,\n      id: cid,\n      type: 'direct',\n      conversationType: 'direct',\n      state: 'active',\n      participantIds: mergeUniqueSorted([actorRelationshipIdentity(), targetUid]),\n      participantKeys: mergeUniqueSorted([profileKey(), targetKey]),\n      recipientUid: targetUid,\n      recipientProfileKey: targetKey,\n      displayName: resolved.name || targetKey || 'DSD member',\n      name: resolved.name || targetKey || 'DSD member',\n      lastMessagePreview: 'Start a new message.',\n      pendingRouteRecipient: true,\n      entity: entityMeta('message', 'private', 'standard', { conversationId: cid, recordKind: 'conversation', pendingRouteRecipient: true }),\n      firestorePath: PATHS.conversation\n    };\n  }\n  function routeGroupConversation(){\n    var groupRecipients = queryParam('groupRecipients') || queryParam('group') || '';\n    if (!groupRecipients || !hasActiveProfile()) return null;\n    var identities = uniqueIdentities(parseGroupRecipients(groupRecipients));\n    if (identities.length < 2) return null;\n    var cid = canonicalGroupConversationId(identities);\n    var participantIds = mergeUniqueSorted([actorRelationshipIdentity()], identities.map(function(identity){ return identity.uid || identity.key || ''; }));\n    var participantKeys = mergeUniqueSorted([profileKey()], identities.map(function(identity){ return identity.key || identity.uid || ''; }));\n    return {\n      conversationId: cid,\n      id: cid,\n      type: 'groups',\n      conversationType: 'groups',\n      state: 'active',\n      participantIds: participantIds,\n      participantKeys: participantKeys,\n      groupRecipients: identities.map(function(identity){ return identity.key || identity.uid || ''; }).filter(Boolean).join(','),\n      displayName: identities.map(function(identity){ return identity.name || identity.key || identity.uid || 'DSD member'; }).join(', '),\n      name: 'Group message',\n      lastMessagePreview: 'Start a group message.',\n      pendingRouteGroup: true,\n      entity: entityMeta('message', 'private', 'standard', { conversationId: cid, recordKind: 'conversation', conversationType: 'groups', pendingRouteGroup: true }),\n      firestorePath: PATHS.conversation\n    };\n  }\n  function parseGroupRecipients(value){\n    return String(value || '').split(/[\\n,;]+/).map(function(item){ return item.trim().replace(/^@+/, ''); }).filter(Boolean);\n  }\n  function uniqueIdentities(items){\n    var seen = {};\n    var out = [];\n    (items || []).forEach(function(item){\n      var identity = typeof item === 'string' ? recipientIdentity(item, item) : item;\n      var key = clean(identity && (identity.uid || identity.key || identity.name) || '', '');\n      if (!key || identityMatchesCurrent(identity && identity.uid || key, identity && identity.key || key) || seen[key]) return;\n      seen[key] = true;\n      out.push(identity);\n    });\n    return out;\n  }\n  function mergeUniqueSorted(){\n    var seen = {};\n    var out = [];\n    Array.prototype.slice.call(arguments).forEach(function(items){\n      (items || []).forEach(function(item){\n        var value = String(item || '').trim();\n        if (!value || seen[value]) return;\n        seen[value] = true;\n        out.push(value);\n      });\n    });\n    return out.sort();\n  }\n  function canonicalGroupConversationId(identities){\n    var selfKey = profileKey() || actorRelationshipIdentity();\n    var parts = mergeUniqueSorted([selfKey], (identities || []).map(function(identity){ return identity.key || identity.uid || ''; }));\n    return clean('group-' + parts.join('-'), 'conversation');\n  }\n  function sendGroupMessage(conversationId, body, recipients, mediaFiles){\n    if (!requireActiveProfile('group message')) return Promise.resolve(null);\n    var text = String(body || '').trim().slice(0, MAX.message);\n    mediaFiles = (mediaFiles || []).filter(Boolean);\n    if (!text && !mediaFiles.length) return Promise.resolve(null);\n    var identities = uniqueIdentities(recipients);\n    if (identities.length < 2) { renderStatus('Group message requires at least two recipients.'); return Promise.resolve(null); }\n    if (identities.some(function(identity){ return relationshipBlocked(identity.uid || profileUidForKey(identity.key || '')); })) {\n      renderStatus('Blocked profiles cannot be messaged.');\n      return Promise.resolve(null);\n    }\n    var cid = conversationId || canonicalGroupConversationId(identities);\n    var participantIds = [actorRelationshipIdentity()].concat(identities.map(function(identity){ return identity.uid || identity.key || ''; })).filter(Boolean).sort();\n    var participantKeys = [profileKey()].concat(identities.map(function(identity){ return identity.key || identity.uid || ''; })).filter(Boolean).sort();\n    return getDoc('conversations/' + cid).catch(function(){ return null; }).then(function(snap){\n      var exists = !!(snap && snap.exists && snap.exists());\n      var existing = exists && snap.data ? snap.data() || {} : {};\n      var existingIds = mergeUniqueSorted(existing.participantIds || existing.participants || existing.participant_ids || [], participantIds);\n      var existingKeys = mergeUniqueSorted(existing.participantKeys || existing.participant_profile_keys || [], participantKeys);\n      var preview = text || (mediaFiles.length ? 'Media message' : '');\n      var conversation = { conversationId: cid, type: 'groups', conversationType: 'groups', participantIds: existingIds, participantKeys: existingKeys, updatedAt: serverTimestamp(), lastMessagePreview: preview.slice(0, 140), entity: entityMeta('message', 'private', 'standard', { conversationId: cid, recordKind: 'conversation', conversationType: 'groups' }), firestorePath: PATHS.conversation };\n      return setDoc('conversations/' + cid, conversation, true).then(function(){ return conversation; });\n    })\n      .then(function(conversation){\n        var messageId = clean('message-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6), 'message');\n        var message = { id: messageId, messageId: messageId, conversationId: cid, senderUid: actorRelationshipIdentity(), senderProfileKey: profileKey(), recipientUid: '', recipientProfileKey: '', recipientUids: identities.map(function(identity){ return identity.uid || ''; }).filter(Boolean), recipientProfileKeys: identities.map(function(identity){ return identity.key || ''; }).filter(Boolean), body: text, media: [], status: 'sent', type: 'groups', entity: entityMeta('message', 'private', 'standard', { conversationId: cid, conversationType: 'groups' }), firestorePath: PATHS.message, createdAt: serverTimestamp(), updatedAt: serverTimestamp() };\n        return addDoc('conversations/' + cid + '/messages', message).then(function(docRef){\n          if (!mediaFiles.length) return { conversation: conversation, message: message, docRef: docRef };\n          return Promise.all(mediaFiles.map(function(file){ return createMediaManifest(file, 'message', messageId, '', 'private', 'standard'); })).then(function(media){\n            var uploadedMessageMedia = media.filter(function(manifest){ return manifest && manifest.status === 'uploaded'; });\n            message.media = uploadedMessageMedia;\n            if (uploadedMessageMedia.length !== mediaFiles.length) {\n              return setDoc('conversations/' + cid + '/messages/' + messageId, { status: 'hidden', updatedAt: serverTimestamp() }, true)\n                .then(function(){ renderStatus('Media upload did not complete. Message was not sent.'); return null; })\n                .catch(function(){ renderStatus('Media upload did not complete. Message was not sent.'); return null; });\n            }\n            return syncSupabaseMessageMediaRelationships(message, docRef).then(function(){ return { conversation: conversation, message: message, docRef: docRef }; });\n          });\n        });\n      })\n      .then(function(result){\n        if (!result) return null;\n        result.message.supabaseMessageId = result.docRef && result.docRef.id || '';\n        result.message.id = result.message.messageId || result.message.id;\n        return syncSupabaseMessageMediaRelationships(result.message, result.docRef).then(function(){\n          state.activeConversationId = cid;\n          state.messageScrollPinNext = cid;\n          state.messagesByConversation[cid] = (state.messagesByConversation[cid] || []).concat([result.message]).slice(-50);\n          state.conversations = mergeByKey(state.conversations, [result.conversation], ['conversationId', 'id']);\n          hydrateConversationMessages(cid);\n          renderMessages();\n          clearUploadStatus(qs('[data-dsd-inline-message-form]') || document);\n          renderStatus('Group message sent.');\n          identities.forEach(function(identity){\n            if (identity.uid && !identityMatchesCurrent(identity.uid, identity.key)) notify(identity.uid, 'messages', 'New group message', displayName() + ' sent a group message.', '/pages/messages?conversationId=' + encodeURIComponent(cid), { conversationId: cid });\n          });\n          return result.docRef;\n        });\n      })\n      .catch(function(error){ queueDraft('group-message', { conversationId: cid, body: text }, error); return null; });\n  }\n  function sendMessage(conversationId, body, recipientUid, recipientProfileHint, mediaFiles){\n    if (!requireActiveProfile('message')) return Promise.resolve(null);\n    var text = String(body || '').trim().slice(0, MAX.message);\n    mediaFiles = (mediaFiles || []).filter(Boolean);\n    if (!text && !mediaFiles.length) return Promise.resolve(null);\n    var targetIdentity = recipientIdentity(recipientUid, recipientProfileHint);\n    var targetUid = String(targetIdentity.uid || '').trim();\n    var cid = conversationId || (targetUid ? canonicalConversationId(targetUid, recipientProfileHint || targetIdentity.key || '') : '');\n    if (!cid) { renderStatus('Message requires an existing conversation ID or recipient UID.'); return Promise.resolve(null); }\n    if (targetUid && relationshipBlocked(targetUid)) { renderStatus('Blocked profiles cannot be messaged.'); return Promise.resolve(null); }\n    return getDoc('conversations/' + cid).catch(function(){ return null; }).then(function(snap){\n      var exists = !!(snap && snap.exists && snap.exists());\n      var existing = exists && snap.data ? snap.data() || {} : {};\n      if (!exists && !targetUid) throw new Error('New message requires recipient UID');\n      var existingPeer = conversationPeer(existing);\n      if (existingPeer && relationshipBlocked(existingPeer.uid)) throw new Error('Blocked profiles cannot be messaged');\n      var isSelfTarget = targetUid && identityMatchesCurrent(targetUid, targetIdentity.key || '');\n      var requiredIds = targetUid && !isSelfTarget ? [actorRelationshipIdentity(), targetUid] : [actorRelationshipIdentity()];\n      var requiredKeys = targetUid && !isSelfTarget ? [profileKey(), targetIdentity.key || targetUid] : [profileKey()];\n      var participantIds = mergeUniqueSorted(existing.participantIds || existing.participant_ids || [], requiredIds);\n      var participantKeys = mergeUniqueSorted(existing.participantKeys || existing.participant_profile_keys || [], requiredKeys);\n      var preview = text || (mediaFiles.length ? 'Media message' : '');\n      var conversation = { conversationId: cid, participantIds: participantIds, participantKeys: participantKeys, updatedAt: serverTimestamp(), lastMessagePreview: preview.slice(0, 140), entity: entityMeta('message', 'private', 'standard', { conversationId: cid, recordKind: 'conversation' }), firestorePath: PATHS.conversation };\n      return setDoc('conversations/' + cid, conversation, true).then(function(){ return conversation; });\n    })\n      .then(function(conversation){\n        var messageId = clean('message-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6), 'message');\n        var message = { id: messageId, messageId: messageId, conversationId: cid, senderUid: actorRelationshipIdentity(), senderProfileKey: profileKey(), recipientUid: targetUid || '', recipientProfileKey: targetIdentity.key || '', body: text, media: [], status: 'sent', entity: entityMeta('message', 'private', 'standard', { conversationId: cid }), firestorePath: PATHS.message, createdAt: serverTimestamp(), updatedAt: serverTimestamp() };\n        return addDoc('conversations/' + cid + '/messages', message).then(function(docRef){\n          if (!mediaFiles.length) return { conversation: conversation, message: message, docRef: docRef };\n          return Promise.all(mediaFiles.map(function(file){ return createMediaManifest(file, 'message', messageId, '', 'private', 'standard'); })).then(function(media){\n            var uploadedMessageMedia = media.filter(function(manifest){ return manifest && manifest.status === 'uploaded'; });\n            message.media = uploadedMessageMedia;\n            if (uploadedMessageMedia.length !== mediaFiles.length) {\n              return setDoc('conversations/' + cid + '/messages/' + messageId, { status: 'hidden', updatedAt: serverTimestamp() }, true)\n                .then(function(){ renderStatus('Media upload did not complete. Message was not sent.'); return null; })\n                .catch(function(){ renderStatus('Media upload did not complete. Message was not sent.'); return null; });\n            }\n            return syncSupabaseMessageMediaRelationships(message, docRef).then(function(){ return { conversation: conversation, message: message, docRef: docRef }; });\n          });\n        });\n      })\n      .then(function(result){\n        if (!result) return null;\n        result.message.supabaseMessageId = result.docRef && result.docRef.id || '';\n        result.message.id = result.message.messageId || result.message.id;\n        return syncSupabaseMessageMediaRelationships(result.message, result.docRef).then(function(){\n          state.activeConversationId = cid;\n          state.messageScrollPinNext = cid;\n          state.messagesByConversation[cid] = (state.messagesByConversation[cid] || []).concat([result.message]).slice(-50);\n          state.conversations = mergeByKey(state.conversations, [result.conversation], ['conversationId', 'id']);\n          hydrateConversationMessages(cid);\n          renderMessages();\n          clearUploadStatus(qs('[data-dsd-inline-message-form]') || document);\n          renderStatus('Message sent.');\n          if (targetUid && !identityMatchesCurrent(targetUid, targetIdentity.key)) notify(targetUid, 'messages', 'New message', displayName() + ' sent you a message.', '/pages/messages?conversationId=' + encodeURIComponent(cid), { conversationId: cid });\n          return result.docRef;\n        });\n      })\n      .catch(function(error){ queueDraft('message', { conversationId: cid, body: text }, error); return null; });\n  }\n  function createStory(input){\n    if (!requireActiveProfile('create stories')) return Promise.resolve(null);\n    var author = activeAuthorIdentity('create stories');\n    if (!author) return Promise.resolve(null);\n    input = input || {};\n    var body = String(input.body || '').trim().slice(0, MAX.story);\n    var selectedMedia = (input.media || []).filter(Boolean);\n    if (selectedMedia.length > 1) {\n      renderStatus('Stories support one photo or one video at a time.');\n      return Promise.resolve(null);\n    }\n    if (!body && !selectedMedia.length) { renderStatus('Story requires text, image, or video.'); return Promise.resolve(null); }\n    var storyId = clean('story-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6), 'story');\n    var policy = visibilityPolicyFromInput(input);\n    var visibility = policy.visibility;\n    var contentRating = policy.contentRating;\n    var accessGate = policy.accessGate;\n    var review = reviewStateForAuthor();\n    var story = { storyId: storyId, ownerUid: author.uid, authorUid: author.uid, ownerProfileKey: author.profileKey, authorProfileKey: author.profileKey, ownerDisplayName: author.displayName, authorDisplayName: author.displayName, ownerAvatarMediaId: author.avatarMediaId || '', authorAvatarMediaId: author.avatarMediaId || '', body: body, media: [], visibility: visibility, contentRating: contentRating, accessGate: accessGate, status: review.status, moderation: review.moderation, viewCount: 0, watchCount: 0, uniqueWatchCount: 0, expiresAt: futureTimestamp(86400000), entity: authoredEntityMeta('story', visibility, contentRating, author, { moderationStatus: review.status, accessGate: accessGate }), firestorePath: PATHS.story, ownerScopedPath: PATHS.userStory, createdAt: serverTimestamp() };\n    return setDoc('stories/' + storyId, story, true).then(function(savedStory){\n        if (savedStory && savedStory.supabaseStoryId) story.supabaseStoryId = savedStory.supabaseStoryId;\n        if (!selectedMedia.length) return skipLegacyUserStoryShadow(storyId)\n          .then(function(){ return { story: story, savedStory: savedStory }; });\n        return Promise.all(selectedMedia.map(function(file){ return createMediaManifest(file, 'story', storyId, '', visibility, contentRating); })).then(function(media){\n          var uploadedStoryMedia = media.filter(function(manifest){ return manifest && manifest.status === 'uploaded'; });\n          story.media = uploadedStoryMedia;\n          claim('story-media:row-first-owner', { storyId: storyId, mediaCount: uploadedStoryMedia.length, requestedMediaCount: selectedMedia.length, canonical: 'stories+story_media+media_objects', rowFirst: true });\n          if (uploadedStoryMedia.length !== selectedMedia.length) {\n            var hiddenPayload = { status: 'hidden', moderation: { state: 'hidden', gate: 'story-media-upload-failed', lastActionAt: serverTimestamp() }, hiddenAt: serverTimestamp() };\n            story.status = 'hidden';\n            story.moderation = hiddenPayload.moderation;\n            story.hiddenAt = hiddenPayload.hiddenAt;\n            return setDoc('stories/' + storyId, hiddenPayload, true)\n              .then(function(){ renderStatus('Media upload did not complete. Story was not published.'); return null; })\n              .catch(function(){ renderStatus('Media upload did not complete. Story was not published.'); return null; });\n          }\n          return syncSupabaseStoryMediaRelationships(story, savedStory)\n            .then(function(){\n              return skipLegacyUserStoryShadow(storyId);\n            })\n            .then(function(){ return { story: story, savedStory: savedStory }; });\n        });\n      }).then(function(result){\n        if (!result) return null;\n        return accessGate === 'dsd_plus' ? syncGatedStoryShell(storyId, story, review.status) : null;\n      }).then(function(result){\n        if (!story || story.status === 'hidden') return null;\n        return maybeQueueModeration(storyId, 'story', 'stories/' + storyId, body).catch(function(error){ queueDraft('moderation-queue-story', { storyId: storyId }, error); return null; });\n      }).then(function(){\n        if (!story || story.status === 'hidden') return null;\n        state.activeStoryId = storyId;\n        state.stories = mergeRecords(state.stories, [story]);\n        notify(author.uid, 'stories', 'Story published', 'Your story is live.', '/pages/stories?story=' + encodeURIComponent(storyId), { storyId: storyId, sourcePath: 'stories/' + storyId, previewMedia: story.media });\n        clearRecoveredUploadDraftStatus();\n        renderStatus(submissionStatusLabel('Story'));\n        renderStories();\n        return story;\n      }).catch(function(error){ queueDraft('story', input, error); return null; });\n  }\n  function createSafetyReport(action, targetId, details){\n    if (!requireActiveProfile('use safety controls')) return Promise.resolve(null);\n    var reportId = clean('safety-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6), 'safety');\n    var payload = {\n      reportId: reportId,\n      action: action || 'report',\n      targetId: targetId || '',\n      reporterUid: uid(),\n      reporterProfileKey: profileKey(),\n      state: 'pending',\n      details: details || '',\n      entity: entityMeta('safetyReport', 'moderator_scoped', 'standard', { action: action || 'report', targetId: targetId || '' }),\n      firestorePath: PATHS.safetyReport\n    };\n    var queuePayload = { queueItemId: reportId, surface: 'safetyReport', sourcePath: 'safetyReports/' + reportId, state: 'pending', action: action || 'report', targetId: targetId || '', reporterUid: uid(), reporterProfileKey: profileKey(), authorUid: uid(), details: details || '', preview: details || action || 'safety report', createdAt: now() };\n    return setDoc('safetyReports/' + reportId, payload, true)\n      .then(function(){\n        return submitModerationQueueViaProxy(queuePayload).catch(function(error){\n          return canModerate()\n            ? setDoc('moderationQueue/' + reportId, queuePayload, true).catch(function(inner){ queueDraft('moderation-queue-safety-report', { reportId: reportId }, inner); return null; })\n            : (queueDraft('moderation-queue-safety-report', { reportId: reportId }, error), null);\n        });\n      })\n      .then(function(){ notify(uid(), 'safety', 'Safety request submitted', 'Your safety request entered moderation review.', '/pages/notifications'); renderStatus('Safety request submitted.'); return payload; })\n      .catch(function(error){ queueDraft('safety-report', payload, error); return null; });\n  }\n  function reportContent(targetType, targetId, sourcePath, details){\n    var label = String(targetType || 'content').toLowerCase();\n    return createSafetyReport('report-' + label, targetId, details || ('Report ' + label + ' ' + targetId)).then(function(report){\n      if (!report) return report;\n      var queuePayload = {\n        queueItemId: report.reportId,\n        surface: label,\n        targetId: targetId || '',\n        sourcePath: sourcePath || '',\n        preview: details || ('Reported ' + label),\n        state: 'reported',\n        reporterUid: uid(),\n        reporterProfileKey: profileKey(),\n        createdAt: now()\n      };\n      return submitModerationQueueViaProxy(queuePayload).catch(function(error){\n        return canModerate()\n          ? setDoc('moderationQueue/' + report.reportId, queuePayload, true).catch(function(inner){ queueDraft('moderation-queue-content-report', { reportId: report.reportId, targetId: targetId || '' }, inner); return null; })\n          : (queueDraft('moderation-queue-content-report', { reportId: report.reportId, targetId: targetId || '' }, error), null);\n      }).then(function(){ renderStatus(label + ' reported for moderation.'); return report; }).catch(function(){ return report; });\n    });\n  }\n  function updateStoryState(storyId, stateValue){\n    if (!canModerate() || !storyId) return Promise.resolve(null);\n    var story = state.stories.filter(function(item){ return (item.storyId || item.id) === storyId; })[0] || {};\n    return getDoc('stories/' + storyId).catch(function(){ return null; }).then(function(snap){\n      if (snap && snap.exists && snap.exists()) story = Object.assign({}, story, snap.data() || {});\n      if (stateValue === 'approved' && storyExpired(story)) {\n        claim('story-expiry:restore-blocked', { storyId: storyId, reason: 'expired-story-must-not-be-reapproved-or-extended', build: BUILD });\n        stateValue = 'expired';\n      }\n      var policy = visibilityPolicyFromInput(story);\n      var payload = { status: stateValue, ownerUid: story.ownerUid || story.authorUid || '', authorProfileKey: story.authorProfileKey || story.ownerProfileKey || '', ownerDisplayName: story.ownerDisplayName || story.authorDisplayName || 'DSD member', visibility: policy.visibility, contentRating: policy.contentRating, accessGate: policy.accessGate, moderation: { state: stateValue, gate: 'founder-review', lastActionAt: serverTimestamp(), reviewedBy: uid() }, entity: Object.assign({}, story.entity || {}, { visibility: policy.visibility, contentRating: policy.contentRating, accessGate: policy.accessGate, moderationStatus: stateValue }) };\n      state.stories = state.stories.map(function(item){ return (item.storyId || item.id) === storyId ? Object.assign({}, item, payload, { moderation: Object.assign({}, item.moderation || {}, payload.moderation) }) : item; });\n      renderStories();\n      return setDoc('stories/' + storyId, payload, true)\n      .then(function(){ return skipLegacyUserStoryShadow(storyId); })\n      .then(function(){ return (policy.accessGate === 'dsd_plus' || policy.contentRating === 'gated') ? syncGatedStoryShell(storyId, Object.assign({}, story, payload), stateValue) : deleteDoc('gatedStoryShells/' + storyId).catch(function(){ return null; }); })\n      .then(function(){ return setDoc('moderationQueue/' + storyId, { state: stateValue, visibility: policy.visibility, contentRating: policy.contentRating, accessGate: policy.accessGate, reviewedBy: uid(), reviewedAt: serverTimestamp() }, true).catch(function(){ return null; }); })\n      .then(function(){ return addDoc('founderAudit', { action: 'story.' + stateValue, actorUid: uid(), sourcePath: 'stories/' + storyId, firestorePath: PATHS.founderAudit }).catch(function(){ return null; }); })\n      .then(function(){ renderStatus('Story ' + stateValue + '.'); renderStories(); return payload; })\n      .catch(function(error){ queueDraft('story-state', { storyId: storyId, state: stateValue }, error); return payload; });\n    });\n  }\n  function deleteStory(storyId){\n    if (!storyId || !hasActiveProfile()) return Promise.resolve(null);\n    var story = state.stories.filter(function(item){ return (item.storyId || item.id) === storyId; })[0] || {};\n    return getDoc('stories/' + storyId).catch(function(){ return null; }).then(function(snap){\n      if (snap && snap.exists && snap.exists()) story = Object.assign({}, story, snap.data() || {});\n      var ownerUid = story.ownerUid || story.authorUid || story.uid || '';\n      if (!canModerate() && !recordOwnedByCurrentProfile(story)) return Promise.resolve(null);\n      var payload = {\n        status: 'deleted',\n        deletedAt: serverTimestamp(),\n        deletedBy: uid(),\n        moderation: Object.assign({}, story.moderation || {}, { state: 'deleted', lastActionAt: serverTimestamp(), reviewedBy: uid() }),\n        entity: Object.assign({}, story.entity || {}, { moderationStatus: 'deleted' })\n      };\n      state.stories = state.stories.filter(function(item){ return (item.storyId || item.id) !== storyId; });\n      state.gatedStoryShells = (state.gatedStoryShells || []).filter(function(item){ return (item.storyId || item.id) !== storyId; });\n      var deletedActiveStory = state.activeStoryId === storyId;\n      if (deletedActiveStory) state.activeStoryId = '';\n      renderStories();\n      return setDoc('stories/' + storyId, payload, true)\n        .then(function(){ return skipLegacyUserStoryShadow(storyId); })\n        .then(function(){ return canModerate() ? addDoc('founderAudit', { action: 'story.deleted', actorUid: uid(), targetUid: ownerUid, sourcePath: 'stories/' + storyId, firestorePath: PATHS.founderAudit }).catch(function(){ return null; }) : null; })\n        .then(function(){\n          if (deletedActiveStory) closeImmersiveOverlay();\n          renderStatus('Story deleted.');\n          return payload;\n        });\n    }).catch(function(error){ queueDraft('story-delete', { storyId: storyId }, error); return null; });\n  }\n  function updateSourceRecordState(sourcePath, stateValue){\n    if (!sourcePath) return Promise.resolve(null);\n    if (!/^(posts|stories|profiles|publicProfiles)\\//.test(sourcePath)) return Promise.resolve(null);\n    return setDoc(sourcePath, {\n      status: stateValue,\n      moderation: { state: stateValue, gate: 'founder-review', lastActionAt: serverTimestamp(), reviewedBy: uid() },\n      entity: { moderationStatus: stateValue }\n    }, true).catch(function(error){ queueDraft('source-record-state', { sourcePath: sourcePath, state: stateValue }, error); return null; });\n  }\n  function scopedModerationSource(){ return null; }\n  function updatePostState(postId, stateValue){\n    if (!canModerate()) return Promise.resolve(null);\n    return getDoc('posts/' + postId).catch(function(){ return null; }).then(function(snap){\n      var post = snap && snap.exists && snap.exists() ? snap.data() || {} : {};\n      var selfReviewed = !!(stateValue === 'approved' && identityMatchesCurrent(post.authorUid || post.ownerUid || '', post.authorProfileKey || post.ownerProfileKey || ''));\n      var payload = { status: stateValue, authorUid: post.authorUid || post.ownerUid || '', authorProfileKey: post.authorProfileKey || post.ownerProfileKey || '', authorDisplayName: post.authorDisplayName || post.ownerDisplayName || 'DSD member', moderation: { state: stateValue, gate: 'founder-review', lastActionAt: serverTimestamp(), reviewedBy: uid(), selfReviewed: selfReviewed } };\n      if (stateValue === 'approved') {\n        var policy = visibilityPolicyFromInput(post);\n        payload.visibility = policy.visibility;\n        payload.contentRating = policy.contentRating;\n        payload.accessGate = policy.accessGate;\n        payload.entity = Object.assign({}, post.entity || {}, { visibility: payload.visibility, contentRating: payload.contentRating, accessGate: payload.accessGate, moderationStatus: 'approved' });\n      }\n      saveLocalPostStateOverride(postId, payload);\n      patchLocalPost(postId, payload);\n      state.queue = state.queue.map(function(item){ return (item.queueItemId || item.id) === postId ? Object.assign({}, item, { state: stateValue, reviewedBy: uid(), reviewedAt: serverTimestamp(), selfReviewed: selfReviewed }) : item; });\n      renderAll();\n      return setDoc('posts/' + postId, payload, true)\n        .then(function(){ return setDoc('moderationQueue/' + postId, { state: stateValue, reviewedBy: uid(), reviewedAt: serverTimestamp(), selfReviewed: selfReviewed }, true).catch(function(error){ queueDraft('moderation-queue-post-state', { postId: postId, state: stateValue }, error); return null; }); })\n        .then(function(){ return (payload.accessGate === 'dsd_plus' || payload.contentRating === 'gated' || post.accessGate === 'dsd_plus' || post.contentRating === 'gated') ? syncGatedPostShell(postId, Object.assign({}, post, payload), stateValue) : null; })\n        .then(function(){ return recordFounderAudit({ action: 'post.' + stateValue, actorUid: uid(), sourcePath: 'posts/' + postId, selfReviewed: selfReviewed }, 'post-state'); })\n        .then(function(){ renderStatus('Post ' + stateValue + '.'); renderAll(); return payload; })\n        .catch(function(error){ queueDraft('post-state', { postId: postId, state: stateValue }, error); renderAll(); return payload; });\n    });\n  }\n  function updateQueueItemState(queueItemId, stateValue){\n    if (!canModerate() || !queueItemId) return Promise.resolve(null);\n    var payload = { state: stateValue, reviewedBy: uid(), reviewedAt: serverTimestamp() };\n    var queueItem = state.queue.filter(function(item){ return (item.queueItemId || item.id) === queueItemId; })[0] || {};\n    var sourcePath = queueSourcePath(queueItem, queueItemId);\n    var scoped = scopedModerationSource(sourcePath);\n    var sourcePatch = {\n      status: stateValue,\n      moderation: { state: stateValue, gate: 'founder-review', lastActionAt: serverTimestamp(), reviewedBy: uid() },\n      entity: { moderationStatus: stateValue }\n    };\n    if (stateValue === 'approved') {\n      sourcePatch.approvedAt = serverTimestamp();\n      sourcePatch.approvedBy = uid();\n    }\n    return setDoc('moderationQueue/' + queueItemId, payload, true)\n      .then(function(){ return sourcePath ? setDoc(sourcePath, sourcePatch, true).catch(function(error){ queueDraft('source-record-state', { sourcePath: sourcePath, state: stateValue }, error); return null; }) : null; })\n      .then(function(){ return recordFounderAudit({ action: (scoped ? scoped.surface : 'queue') + '.' + stateValue, actorUid: uid(), sourcePath: sourcePath || ('moderationQueue/' + queueItemId) }, 'moderation-queue-state'); })\n      .then(function(){\n        state.queue = state.queue.map(function(item){ return (item.queueItemId || item.id) === queueItemId ? Object.assign({}, item, payload) : item; });\n        renderModeration();\n        renderAll();\n        return payload;\n      })\n      .catch(function(error){ queueDraft('moderation-queue-state', { queueItemId: queueItemId, state: stateValue }, error); return null; });\n  }\n  function queueItemById(queueItemId){\n    return state.queue.filter(function(item){ return (item.queueItemId || item.postId || item.id) === queueItemId; })[0] || state.posts.filter(function(item){ return (item.postId || item.id) === queueItemId; })[0] || {};\n  }\n  function queueSourcePath(item, queueItemId){\n    var source = item.sourcePath || item.firestorePath || '';\n    var action = String(item.action || '').toLowerCase();\n    if (item.targetId && action === 'report-post') return 'posts/' + item.targetId;\n    if (item.targetId && action === 'report-story') return 'stories/' + item.targetId;\n    if (source && source.indexOf('{') === -1) return source;\n    var surface = moderationSurface(item);\n    if (surface === 'post') return 'posts/' + queueItemId;\n    if (surface === 'story') return 'stories/' + queueItemId;\n    if (surface === 'profile') return 'profiles/' + (item.targetId || item.ownerUid || queueItemId);\n    return '';\n  }\n  function syncGatedPostShell(postId, post, status){\n    post = post || {};\n    var payload = {\n      postId: postId,\n      gatedShell: true,\n      status: status || post.status || 'pending',\n      authorUid: post.authorUid || '',\n      authorProfileKey: post.authorProfileKey || '',\n      ownerProfileKey: post.authorProfileKey || post.ownerProfileKey || '',\n      authorDisplayName: post.authorDisplayName || 'DSD member',\n      authorAvatarMediaId: post.authorAvatarMediaId || '',\n      counts: Object.assign({ views: 0, likes: 0, comments: 0, shares: 0 }, post.counts || {}),\n      visibility: 'public',\n      contentRating: 'gated',\n      accessGate: 'dsd_plus',\n      entity: authoredEntityMeta('gatedPostShell', 'public', 'gated', { uid: post.authorUid || '', profileKey: post.authorProfileKey || post.ownerProfileKey || '', displayName: post.authorDisplayName || 'DSD member' }, { sourcePostId: postId, accessGate: 'dsd_plus', moderationStatus: status || post.status || 'pending' }),\n      createdAt: post.createdAt || serverTimestamp(),\n      updatedAt: serverTimestamp()\n    };\n    return setDoc('gatedPostShells/' + postId, payload, true).then(function(){ return payload; });\n  }\n  function syncGatedStoryShell(storyId, story, status){\n    story = story || {};\n    var sourceExpiry = story.expiresAt || story.expires_at || story.expireAt || story.ttl || story.expires || '';\n    if (!sourceExpiry || storyExpired(story)) {\n      claim('gated-story-shell:expiry-fail-closed', { storyId: storyId, hasSourceExpiry: !!sourceExpiry, expired: storyExpired(story), build: BUILD });\n      return deleteDoc('gatedStoryShells/' + storyId).catch(function(){ return null; });\n    }\n    var payload = {\n      storyId: storyId,\n      gatedShell: true,\n      status: status || story.status || 'pending',\n      ownerUid: story.ownerUid || '',\n      authorProfileKey: story.authorProfileKey || '',\n      ownerProfileKey: story.authorProfileKey || story.ownerProfileKey || '',\n      authorDisplayName: story.authorDisplayName || 'DSD member',\n      authorAvatarMediaId: story.authorAvatarMediaId || '',\n      viewCount: Number(story.viewCount || 0),\n      watchCount: Number(story.watchCount || 0),\n      uniqueWatchCount: Number(story.uniqueWatchCount || 0),\n      visibility: 'public',\n      contentRating: 'gated',\n      accessGate: 'dsd_plus',\n      gatedStoryShell: true,\n      entity: authoredEntityMeta('gatedStoryShell', 'public', 'gated', { uid: story.ownerUid || story.authorUid || '', profileKey: story.authorProfileKey || story.ownerProfileKey || '', displayName: story.authorDisplayName || story.ownerDisplayName || 'DSD member' }, { sourceStoryId: storyId, accessGate: 'dsd_plus', moderationStatus: status || story.status || 'pending' }),\n      expiresAt: sourceExpiry,\n      createdAt: story.createdAt || serverTimestamp(),\n      updatedAt: serverTimestamp()\n    };\n    return setDoc('gatedStoryShells/' + storyId, payload, true).then(function(){ return payload; });\n  }\n  function updateQueueClassification(queueItemId, classification){\n    if (!canModerate() || !queueItemId) return Promise.resolve(null);\n    var item = queueItemById(queueItemId);\n    var sourcePath = queueSourcePath(item, queueItemId);\n    var rating = classification === 'mature' ? 'mature' : (classification === 'explicit' ? 'explicit' : (classification === 'gated' ? 'gated' : 'standard'));\n    var accessGate = classification === 'gated' ? 'dsd_plus' : '';\n    var patch = { authorUid: item.authorUid || item.ownerUid || '', ownerUid: item.ownerUid || item.authorUid || '', authorProfileKey: item.authorProfileKey || item.ownerProfileKey || item.profileKey || '', ownerProfileKey: item.ownerProfileKey || item.authorProfileKey || item.profileKey || '', authorDisplayName: item.authorDisplayName || item.ownerDisplayName || item.displayName || 'DSD member', ownerDisplayName: item.ownerDisplayName || item.authorDisplayName || item.displayName || 'DSD member', contentRating: rating, accessGate: accessGate, moderation: Object.assign({}, item.moderation || {}, { state: item.state || item.status || 'pending', classification: classification, lastActionAt: serverTimestamp(), reviewedBy: uid() }), entity: Object.assign({}, item.entity || {}, { contentRating: rating, accessGate: accessGate }) };\n    var writes = [];\n    if (sourcePath) writes.push(setDoc(sourcePath, patch, true));\n    writes.push(setDoc('moderationQueue/' + queueItemId, { classification: classification, contentRating: rating, accessGate: accessGate, reviewedBy: uid(), reviewedAt: serverTimestamp() }, true));\n    var postSource = String(sourcePath || '').match(/^posts\\/([^/]+)$/);\n    var storySource = String(sourcePath || '').match(/^stories\\/([^/]+)$/);\n    var scopedSource = scopedModerationSource(sourcePath);\n    var scopedPostSource = scopedSource && scopedSource.collection === 'posts';\n    var scopedStorySource = scopedSource && scopedSource.collection === 'stories';\n    var sourceId = postSource ? postSource[1] : (storySource ? storySource[1] : (scopedSource ? scopedSource.itemId : queueItemId));\n    var sourceRecord = postSource ? (localPostById(sourceId) || item) : (storySource ? (state.stories.filter(function(story){ return (story.storyId || story.id) === sourceId; })[0] || item) : item);\n    patch.authorUid = sourceRecord.authorUid || sourceRecord.ownerUid || patch.authorUid;\n    patch.ownerUid = sourceRecord.ownerUid || sourceRecord.authorUid || patch.ownerUid;\n    patch.authorProfileKey = sourceRecord.authorProfileKey || sourceRecord.ownerProfileKey || patch.authorProfileKey;\n    patch.ownerProfileKey = sourceRecord.ownerProfileKey || sourceRecord.authorProfileKey || patch.ownerProfileKey;\n    patch.authorDisplayName = sourceRecord.authorDisplayName || sourceRecord.ownerDisplayName || patch.authorDisplayName;\n    patch.ownerDisplayName = sourceRecord.ownerDisplayName || sourceRecord.authorDisplayName || patch.ownerDisplayName;\n    var shellStatus = sourceRecord.status || (sourceRecord.moderation && sourceRecord.moderation.state) || item.status || item.state || 'pending';\n    if (classification === 'gated' && (storySource || scopedStorySource)) {\n      writes.push(syncGatedStoryShell(sourceId, Object.assign({}, sourceRecord, patch), shellStatus));\n      if (sourceId !== queueItemId) writes.push(deleteDoc('gatedStoryShells/' + queueItemId).catch(function(){ return null; }));\n    } else if (classification === 'gated' && (postSource || scopedPostSource)) {\n      writes.push(syncGatedPostShell(sourceId, Object.assign({}, sourceRecord, patch), shellStatus));\n      if (sourceId !== queueItemId) writes.push(deleteDoc('gatedPostShells/' + queueItemId).catch(function(){ return null; }));\n    } else if (classification === 'gated') {\n      writes.push(syncGatedPostShell(queueItemId, Object.assign({}, item, patch), shellStatus));\n    } else {\n      writes.push(deleteDoc('gatedPostShells/' + sourceId).catch(function(){ return null; }));\n      writes.push(deleteDoc('gatedStoryShells/' + sourceId).catch(function(){ return null; }));\n      if (sourceId !== queueItemId) {\n        writes.push(deleteDoc('gatedPostShells/' + queueItemId).catch(function(){ return null; }));\n        writes.push(deleteDoc('gatedStoryShells/' + queueItemId).catch(function(){ return null; }));\n      }\n    }\n    return Promise.all(writes)\n      .then(function(){ return recordFounderAudit({ action: 'queue.classify.' + classification, actorUid: uid(), sourcePath: sourcePath || ('moderationQueue/' + queueItemId) }, 'moderation-queue-classify'); })\n      .then(function(){\n        state.queue = state.queue.map(function(record){ return (record.queueItemId || record.postId || record.id) === queueItemId ? Object.assign({}, record, patch, { classification: classification }) : record; });\n        renderModeration();\n        renderAll();\n        return patch;\n      })\n      .catch(function(error){ queueDraft('moderation-classification', { queueItemId: queueItemId, classification: classification, sourcePath: sourcePath }, error); return null; });\n  }\n  function hydratePostComments(posts){\n    if (!fb() && !supabaseCutoverReady()) return;\n    var wanted = {};\n    Object.keys(state.openCommentPostIds || {}).forEach(function(id){\n      if (id) wanted[id] = true;\n    });\n    if (!Object.keys(wanted).length && posts && posts.length === 1) {\n      var directId = posts[0] && (posts[0].postId || posts[0].id);\n      if (directId) wanted[directId] = true;\n    }\n    Object.keys(state.commentListeners || {}).forEach(function(id){\n      if (wanted[id]) return;\n      var off = state.commentListeners[id];\n      try { off(); } catch(e){}\n      state.listeners = state.listeners.filter(function(fn){ return fn !== off; });\n      delete state.commentListeners[id];\n    });\n    Object.keys(wanted).forEach(function(id){\n      if (state.commentListeners[id]) return;\n      state.commentListeners[id] = listen('posts/' + id + '/comments', function(items){\n        state.commentsByPost[id] = applyCommentOverrides(id, (items || []).map(function(item){ return Object.assign({ postId: id, commentId: item.commentId || item.id }, item); }));\n        if (state.postDrawer && state.postDrawer.open && state.postDrawer.postId === id) renderPostDrawer();\n        scheduleRenderPosts('comment-listener');\n      }, function(c, f){\n        if (!canModerate() && f.where) return f.query(c, f.where('status', '==', 'approved'), f.limit(8));\n        return f.query(c, f.orderBy('createdAt', 'asc'), f.limit(8));\n      });\n      loadPostCommentsOnce(id);\n    });\n    state.feedDiagnostics.commentListeners = Object.keys(state.commentListeners || {}).length;\n  }\n  function loadPostCommentsOnce(postId){\n    var id = String(postId || '').trim();\n    if (supabaseCutoverReady()) return;\n    claim('comment-getDocs:firebase-social-fallback-disabled', { postId: id, canonical: 'supabase-comments-only' });\n  }\n  function hydrateConversationMessages(conversationId){\n    var cid = String(conversationId || '').trim();\n    if ((!fb() && !supabaseCutoverReady()) || !cid || state.messageListeners[cid]) return;\n    state.messageListeners[cid] = listen('conversations/' + cid + '/messages', function(items){\n      state.messagesByConversation[cid] = (items || []).filter(messageDisplayable).map(function(item){\n        var media = normalizeMessageMedia(item);\n        return Object.assign({}, item, {\n          conversationId: cid,\n          canonicalConversationId: cid,\n          supabaseConversationId: item && (item.supabaseConversationId || item.conversationId) || '',\n          messageId: item && (item.messageId || item.id) || clean('message-' + Date.now(), 'message'),\n          media: media,\n          attachments: media\n        });\n      });\n      renderMessages();\n    }, function(c, f){ return f.query(c, f.orderBy('createdAt', 'asc'), f.limit(50)); }, { pollMs: 10000, maxPollMs: 45000, hiddenPollMs: 60000, ownerScoped: true });\n  }\n\n  function backfillCurrentAuthorAvatar(items){\n    var mediaId = state.profile && (state.profile.avatarMediaId || state.profile.thumbnailMediaId) || '';\n    var currentUid = uid();\n    if (!hasFirebaseAuth() || !mediaId || !currentUid) return;\n    (items || []).forEach(function(post){\n      var id = post && (post.postId || post.id);\n      if (!id || post.authorUid !== currentUid || post.authorAvatarMediaId === mediaId || state.authorAvatarBackfills[id]) return;\n      state.authorAvatarBackfills[id] = true;\n      setDoc('posts/' + id, { authorAvatarMediaId: mediaId, updatedAt: serverTimestamp() }, true).catch(function(){ delete state.authorAvatarBackfills[id]; });\n    });\n  }\n\n  function startListeners(){\n    if (!fb() && !supabaseCutoverConfigured()) return;\n    var routeSurface = activeRouteSurface();\n    var needsPublicProfiles = routeNeedsPublicProfiles(routeSurface);\n    var needsPublicFeed = routeNeedsPublicFeed(routeSurface);\n    var needsStories = routeNeedsStories(routeSurface);\n    var needsOwnerSocial = routeNeedsOwnerSocial(routeSurface);\n    var needsRelationshipState = routeNeedsRelationshipState(routeSurface);\n    var listenerSignature = [BUILD, routeSurface, hasCustomer() ? 'customer' : 'public', uid() || 'anon', profileKey() || '', routeProfileKey() || ''].join('|');\n    if (state.listenerSignature === listenerSignature && state.listeners && state.listeners.length) {\n      claim('supabase-listeners:deduped', { routeSurface: routeSurface, signature: listenerSignature, activeListeners: state.listeners.length });\n      return;\n    }\n    state.listeners.forEach(function(off){ try { off(); } catch(e){} }); state.listeners = [];\n    state.commentListeners = {};\n    state.messageListeners = {};\n    state.listenerSignature = listenerSignature;\n    if (dedicatedGovernanceRouteActive() && !canModerate()) {\n      renderGovernance();\n      renderNotifications();\n      renderMessages();\n      return;\n    }\n    if (needsPublicProfiles) listen('publicProfiles', function(items){\n      state.publicProfilesLoaded = true;\n      state.publicProfiles = (items || []).filter(publicProfileVisible);\n      publishPublicProfiles(state.publicProfiles);\n      renderDiscovery();\n      renderProfileIdentity();\n      renderPosts();\n      renderNotifications();\n      renderMessages();\n      renderSearchIndex();\n    }, function(c, f){ return f.query(c, f.where('searchable', '==', true), f.where('status', '==', 'active'), f.orderBy('updatedAt', 'desc'), f.limit(100)); }, { publicRead: true });\n    if (needsPublicFeed) listen('posts', function(items){\n      var publicItems = approvedPublicRecords(items);\n      var viewedKeyForPreserve = routeProfileKey();\n      state.posts = mergeRecords(state.posts.filter(function(p){\n        if (isRestrictedShellRecord(p) || isPersistedGatedShellRecord(p)) return true;\n        var alreadyAuthorizedClassified = classifiedRestrictionType(p) && isApprovedPublicRecord(p) && publicRecordVisible(p) && canViewClassified(p) && canViewPrivateRecord(p);\n        return alreadyAuthorizedClassified || recordOwnedByCurrentProfile(p) || (viewedKeyForPreserve && recordBelongsToProfile(p, '', viewedKeyForPreserve, 'authorUid'));\n      }), publicItems);\n      renderPosts(); renderDiscovery(); renderProfileIdentity(); renderModeration(); renderSearchIndex();\n    }, function(c, f){ return f.where ? f.query(c, f.where('visibility', '==', 'public'), f.orderBy('createdAt', 'desc'), f.limit(50)) : f.query(c, f.orderBy('createdAt', 'desc'), f.limit(50)); }, { publicRead: true, viewerAuthenticated: hasCustomer() });\n    if (hasCustomer() && profileKey() && needsOwnerSocial) listen('posts/author/' + encodeURIComponent(profileKey()), function(items){ state.posts = mergeRecords(state.posts, items || []); renderPosts(); renderModeration(); renderSearchIndex(); });\n    if (needsStories && routeSurface !== 'profile') listen('stories', function(items){\n      var viewedStoryKeyForPreserve = routeProfileKey();\n      state.stories = mergeRecords(activeStoryRecords(state.stories).filter(function(s){\n        if (isRestrictedShellRecord(s) || isPersistedGatedShellRecord(s)) return true;\n        var alreadyAuthorizedClassified = classifiedRestrictionType(s) && isApprovedPublicRecord(s) && publicRecordVisible(s) && canViewClassified(s) && canViewPrivateRecord(s);\n        return alreadyAuthorizedClassified || recordOwnedByCurrentProfile(s) || (viewedStoryKeyForPreserve && (recordBelongsToProfile(s, '', viewedStoryKeyForPreserve, 'ownerUid') || recordBelongsToProfile(s, '', viewedStoryKeyForPreserve, 'authorUid')));\n      }), approvedPublicRecords(items).filter(function(story){ return !storyExpired(story); }));\n      renderStories(); renderDiscovery(); renderProfileIdentity(); renderSearchIndex();\n    }, function(c, f){ return f.where ? f.query(c, f.where('visibility', '==', 'public'), f.orderBy('createdAt', 'desc'), f.limit(50)) : f.query(c, f.orderBy('createdAt', 'desc'), f.limit(50)); }, { publicRead: true, viewerAuthenticated: hasCustomer() });\n    var viewedAuthorKey = clean(routeProfileKey() || '', '');\n    if (routeSurface === 'profile' && viewedAuthorKey && viewedAuthorKey !== profileKey()) {\n      listen('posts/author/' + encodeURIComponent(viewedAuthorKey), function(items){ state.posts = mergeRecords(state.posts, items || []); renderPosts(); renderProfileIdentity(); renderSearchIndex(); }, null, { publicRead: !hasCustomer(), viewerAuthenticated: hasCustomer(), routeScopedProfile: true });\n      listen('stories/author/' + encodeURIComponent(viewedAuthorKey), function(items){ state.stories = mergeRecords(activeStoryRecords(state.stories), activeStoryRecords(items || [])); renderStories(); renderProfileIdentity(); renderSearchIndex(); }, null, { publicRead: !hasCustomer(), viewerAuthenticated: hasCustomer(), routeScopedProfile: true });\n    }\n    var ownerIdentity = actorRelationshipIdentity();\n    if (hasCustomer() && ownerIdentity) {\n      if (needsOwnerSocial) listen('posts', function(items){ autoPublishLaunchRecords('post', items); backfillCurrentAuthorAvatar(items); state.posts = mergeRecords(state.posts, items); renderPosts(); renderModeration(); }, function(c, f){ return f.where ? f.query(c, f.where('authorUid', '==', ownerIdentity), f.orderBy('createdAt', 'desc'), f.limit(50)) : f.query(c, f.orderBy('createdAt', 'desc'), f.limit(50)); }, { ownerScoped: true, ownerProfileKey: profileKey() });\n      if (needsStories) listen('stories', function(items){ var activeOwnerStories = activeStoryRecords(items); autoPublishLaunchRecords('story', activeOwnerStories); state.stories = mergeRecords(activeStoryRecords(state.stories), activeOwnerStories); renderStories(); }, function(c, f){ return f.where ? f.query(c, f.where('ownerUid', '==', ownerIdentity), f.orderBy('createdAt', 'desc'), f.limit(50)) : f.query(c, f.orderBy('createdAt', 'desc'), f.limit(50)); }, { ownerScoped: true, ownerProfileKey: profileKey() });\n      if (routeSurface === 'notifications' || routeSurface === 'messages') listen('notifications/' + ownerIdentity + '/items', function(items){ state.notifications = items; renderNotifications(); }, function(c, f){ return f.query(c, f.orderBy('createdAt', 'desc'), f.limit(50)); });\n      if (routeSurface === 'messages') listen('conversations', function(items){\n        state.conversations = activeConversationRecords(items);\n        var requested = routeRequestedConversationId();\n        if (requested) state.activeConversationId = requested;\n        if (!state.activeConversationId && state.conversations[0]) state.activeConversationId = state.conversations[0].conversationId || state.conversations[0].id || '';\n        state.conversations.slice(0, 8).forEach(function(c){ hydrateConversationMessages(c.conversationId || c.id || ''); });\n        renderMessages();\n      }, function(c, f){ return f.where ? f.query(c, f.where('participantIds', 'array-contains', ownerIdentity), f.orderBy('updatedAt', 'desc'), f.limit(50)) : f.query(c, f.orderBy('updatedAt', 'desc'), f.limit(50)); }, { pollMs: 12000, maxPollMs: 45000, hiddenPollMs: 60000, ownerScoped: true });\n      if (needsRelationshipState) listen('relationships/' + ownerIdentity + '/following', function(items){\n        state.followingByUid = {};\n        state.followRequestByUid = {};\n        state.blockedByUid = {};\n        state.followingRecords = (items || []).filter(function(item){ return item && item.state === 'active'; });\n        state.blockedRecords = (items || []).filter(function(item){ return item && item.state === 'blocked'; });\n        state.followingRecords.forEach(function(item){ if (item.targetUid) state.followingByUid[item.targetUid] = true; });\n        (items || []).filter(function(item){ return item && item.state === 'requested'; }).forEach(function(item){ if (item.targetUid) state.followRequestByUid[item.targetUid] = true; });\n        state.blockedRecords.forEach(function(item){ if (item.targetUid) state.blockedByUid[item.targetUid] = true; });\n        renderProfileIdentity();\n        renderDiscovery();\n        renderRelationships();\n        renderPosts();\n        renderMessages();\n      }, function(c, f){ return f.query(c, f.limit(500)); });\n      if (needsRelationshipState) listen('relationships/' + ownerIdentity + '/followers', function(items){\n        state.blockedMeByUid = {};\n        state.followersRecords = (items || []).filter(function(item){ return item && item.state === 'active'; });\n        state.incomingFollowRequests = (items || []).filter(function(item){ return item && item.state === 'requested'; });\n        (items || []).filter(function(item){ return item && item.state === 'blocked'; }).forEach(function(item){ if (item.sourceUid) state.blockedMeByUid[item.sourceUid] = true; });\n        renderRelationships();\n        renderMessages();\n      }, function(c, f){ return f.query(c, f.limit(500)); });\n      if (/^(feed|users|profile|favorites)$/.test(routeSurface)) listen('favorites/' + ownerIdentity + '/items', function(items){\n        state.favoritesByUid = {};\n        state.favoritesRecords = (items || []).filter(function(item){ return item && item.state === 'favorite'; });\n        state.favoritesRecords.forEach(function(item){ if (item.targetUid) state.favoritesByUid[item.targetUid] = true; });\n        renderProfileIdentity();\n        renderDiscovery();\n        renderRelationships();\n        renderPosts();\n      }, function(c, f){ return f.query(c, f.limit(500)); });\n      if (/^(feed|profile|saved)$/.test(routeSurface)) listen('saves/' + ownerIdentity + '/items', function(items){\n        var nextSavedItems = activeSavedItems(items);\n        Object.keys(state.localSavedStateOverrides || {}).forEach(function(targetId){\n          var stateValue = state.localSavedStateOverrides[targetId];\n          nextSavedItems = nextSavedItems.filter(function(item){ return item && item.targetId !== targetId && item.id !== targetId; });\n          if (stateValue === 'saved') nextSavedItems.push({ id: targetId, ownerUid: ownerIdentity, targetId: targetId, targetType: 'post', state: 'saved' });\n        });\n        state.savedItems = activeSavedItems(nextSavedItems);\n        renderPosts();\n        renderRelationships();\n      }, function(c, f){ return f.query(c, f.limit(500)); });\n    }\n    if (hasFirebaseAuth() && canModerate() && routeSurface === 'governance') listen('moderationQueue', function(items){ state.queue = (items || []).filter(function(item){ return !recordSourceRisk(item); }); renderModeration(); }, function(c, f){ return f.query(c, f.orderBy('createdAt', 'desc'), f.limit(500)); }, { founderOnly: true, supabaseQueueCanonical: true });\n  }\n\n  function ensureViewedAuthorContentListeners(){\n    claim('viewed-author-legacy-listeners:deconstructed', {\n      owner: 'startListeners',\n      reason: 'profile route content is now loaded once through route-scoped post/story listeners'\n    });\n  }\n\n  function renderStatus(message){\n    qsa('[data-dsd-activation-status]').forEach(function(n){ n.textContent = message || ''; });\n  }\n  function clearUploadStatus(root){\n    qsa('[data-dsd-upload-status]', root || document).forEach(function(status){\n      status.textContent = '';\n      status.removeAttribute('aria-busy');\n    });\n  }\n  function clearStaleConnectionStatus(){\n    var composerProfile = currentComposerProfile ? currentComposerProfile() : null;\n    var canClear = hasActiveProfile() ||\n      profileRecordHasUsableKey(state.profile) ||\n      profileRecordHasUsableKey(composerProfile) ||\n      !!customerProfileKeyValue() ||\n      privateBridgeCanonicalProfileResolved();\n    if (!canClear) return;\n    var stale = /connecting your account|profile connection is temporarily unavailable|account connection loading|account connection is still loading|profile display is available|profile identity is syncing|refresh or log in again/i;\n    qsa('[data-dsd-activation-status]').forEach(function(node){\n      if (stale.test(String(node.textContent || ''))) node.textContent = '';\n    });\n    if (hasActiveProfile()) syncRestrictedActionControls(document);\n    qsa('[data-dsd-inline-profile-setup]').forEach(function(panel){\n      if (hasActiveProfile()) panel.remove();\n    });\n  }\n  function composerBusy(form, message, promise){\n    if (!form) return Promise.resolve(promise);\n    var status = qs('[data-dsd-activation-status], [data-dsd-upload-status]', form);\n    if (!status) {\n      status = document.createElement('div');\n      status.setAttribute('data-dsd-upload-status', '');\n      status.className = 'dsd-upload-status';\n      form.insertBefore(status, form.firstChild);\n    }\n    form.setAttribute('aria-busy', 'true');\n    form.dataset.dsdComposerBusy = 'true';\n    status.textContent = message || 'Saving media and post...';\n    qsa('button[type=\"submit\"]', form).forEach(function(btn){ btn.disabled = true; btn.dataset.dsdBusyText = btn.textContent; btn.textContent = 'Saving...'; });\n    var timeoutMs = 20000;\n    var timer;\n    var guarded = Promise.race([\n      Promise.resolve(promise),\n      new Promise(function(_, reject){\n        timer = setTimeout(function(){ reject(new Error('Mutation timed out after ' + timeoutMs + 'ms')); }, timeoutMs);\n      })\n    ]);\n    return guarded.then(function(result){\n      clearTimeout(timer);\n      form.removeAttribute('aria-busy');\n      delete form.dataset.dsdComposerBusy;\n      qsa('button[type=\"submit\"]', form).forEach(function(btn){ btn.disabled = false; if (btn.dataset.dsdBusyText) btn.textContent = btn.dataset.dsdBusyText; delete btn.dataset.dsdBusyText; });\n      if (!result && status.textContent === (message || 'Saving media and post...')) status.textContent = 'Save could not complete. Try again.';\n      return result;\n    }, function(error){\n      clearTimeout(timer);\n      form.removeAttribute('aria-busy');\n      delete form.dataset.dsdComposerBusy;\n      qsa('button[type=\"submit\"]', form).forEach(function(btn){ btn.disabled = false; if (btn.dataset.dsdBusyText) btn.textContent = btn.dataset.dsdBusyText; delete btn.dataset.dsdBusyText; });\n      status.textContent = 'Save failed. Try again.';\n      queueDraft('composer-timeout', { message: message || 'Saving media and post...' }, error);\n      return null;\n    });\n  }\n  function renderFilePreviews(form){\n    if (!form) return;\n    var files = [];\n    qsa('input[type=\"file\"]', form).forEach(function(input){\n      Array.prototype.forEach.call(input.files || [], function(file){ files.push(file); });\n    });\n    var preview = qs('[data-dsd-attachment-preview]', form);\n    if (!files.length) {\n      if (preview) preview.remove();\n      return;\n    }\n    if (!preview) {\n      preview = document.createElement('div');\n      preview.className = 'dsd-attachment-preview-grid';\n      preview.setAttribute('data-dsd-attachment-preview', '');\n      var actions = qs('.dsd-composer-media-actions', form);\n      if (actions && actions.parentNode) actions.parentNode.insertBefore(preview, actions.nextSibling);\n      else form.appendChild(preview);\n    }\n    var tiles = files.slice(0, 6).map(function(file){\n      var url = '';\n      try { url = URL.createObjectURL(file); } catch(e) {}\n      var isVideo = file.type && file.type.indexOf('video/') === 0;\n      return '<figure><' + (isVideo ? 'video muted playsinline preload=\"metadata\"' : 'img') + ' src=\"' + html(url) + '\" alt=\"' + html(file.name || 'Attachment') + '\"></' + (isVideo ? 'video' : 'img') + '><figcaption>' + html(file.name || (isVideo ? 'Video' : 'Image')) + '</figcaption></figure>';\n    }).join('');\n    preview.innerHTML = '<div class=\"dsd-attachment-preview-actions\"><strong>' + files.length + ' attachment' + (files.length === 1 ? '' : 's') + '</strong><button type=\"button\" data-dsd-clear-attachments>Clear</button><button type=\"button\" data-dsd-cancel-composer>Cancel</button></div>' + tiles;\n  }\n  function removeFilePreviews(form){\n    var preview = qs('[data-dsd-attachment-preview]', form);\n    if (preview) preview.remove();\n  }\n  function clearFormAttachments(form, resetText){\n    if (!form) return;\n    qsa('input[type=\"file\"]', form).forEach(function(input){ try { input.value = ''; } catch(e){} });\n    removeFilePreviews(form);\n    if (resetText) {\n      qsa('textarea, input[type=\"text\"], input[type=\"url\"]', form).forEach(function(input){ input.value = ''; });\n    }\n  }\n  function renderPublicGuard(){\n    var root = qs('[data-dsd-user-profile]');\n    if (!root || hasCustomer() || routeProfileKey()) return;\n        root.innerHTML = '<div class=\"dsd-launch-auth-required\" data-dsd-owner=\"ProfileRenderer\"><h1>Log in to view your profile</h1><p>Log in to manage your profile, posts, comments, messages, and stories.</p><a class=\"dsd-launch-action\" href=\"' + loginReturnUrl() + '\">Log in</a></div>';\n  }\n  function privateGateHTML(title, body){\n    return '<section class=\"dsd-social-private-auth-gate\" data-dsd-owner=\"LaunchSocialActivation\"><h2>' + html(title) + '</h2><p>' + html(body) + '</p><a class=\"dsd-launch-action\" href=\"' + loginReturnUrl() + '\">Log in</a></section>';\n  }\n  function publicProfileByKey(key){\n    key = String(key || '').trim().replace(/^@+/, '').toLowerCase();\n    return state.publicProfiles.filter(function(profile){\n      return [\n        profile && profile.profileKey,\n        profile && profile.profile_key,\n        profile && profile.handle,\n        profile && profile.uid,\n        profile && profile.userId,\n        profile && profile.user_id\n      ].some(function(value){ return String(value || '').trim().replace(/^@+/, '').toLowerCase() === key; });\n    })[0] || null;\n  }\n  function resolveViewedProfileByKey(key){\n    key = clean(String(key || '').replace(/^@+/, ''), '');\n    if (!key || state.viewProfileLookupKey === key) return;\n    state.viewProfileLookupKey = key;\n    state.viewProfileMissingKey = '';\n    readSupabaseProfileByKey(key).then(function(profile){\n      if (state.viewProfileLookupKey !== key) return null;\n      if (profile && viewedProfileVisible(profile)) {\n        state.viewProfile = profile;\n        state.viewProfileMissingKey = '';\n        state.viewProfileResolvedKey = key;\n        state.publicProfiles = dedupePublicProfiles((state.publicProfiles || []).concat([publicProfilePayload(profile)]));\n        publishPublicProfiles(state.publicProfiles);\n        renderProfileIdentity();\n        renderPosts();\n        renderStories();\n        renderDiscovery();\n        return profile;\n      }\n      state.viewProfileMissingKey = key;\n      renderProfileIdentity();\n      return null;\n    }).catch(function(error){\n      claim('viewed-profile-key:lookup-failed', { key: key, error: error && error.message || String(error) });\n      if (state.viewProfileLookupKey === key) {\n        state.viewProfileMissingKey = key;\n        renderProfileIdentity();\n      }\n    });\n  }\n  function profileUidForKey(key){\n    var profile = publicProfileByKey(key);\n    return profile && (profile.uid || profile.userId || profile.user_id || profile.firebaseUid || profile.firebase_uid) || '';\n  }\n  function publicProfileByUid(targetUid){\n    targetUid = String(targetUid || '').trim();\n    return state.publicProfiles.filter(function(profile){ return String(profile.uid || profile.userId || profile.user_id || profile.firebaseUid || profile.firebase_uid || '').trim() === targetUid; })[0] || null;\n  }\n  function publicProfileByIdentity(value){\n    var raw = String(value || '').trim();\n    return publicProfileByUid(raw) || publicProfileByKey(raw);\n  }\n  function canonicalProfileKeyForIdentity(value){\n    var raw = String(value || '').trim();\n    if (!raw) return '';\n    var profile = publicProfileByIdentity(raw);\n    if (profile) return clean(profile.profileKey || profile.handle || '', '').toLowerCase();\n    if (identityMatchesCurrent(raw, '')) return clean(profileKey(), '').toLowerCase();\n    return '';\n  }\n  function hydrateRecordIdentity(record){\n    record = record || {};\n    var storedKey = nonPlaceholderProfileKey(record.authorProfileKey || record.ownerProfileKey || record.profileKey || '');\n    var storedUid = record.authorUid || record.ownerUid || record.uid || record.userId || '';\n    var keyedProfile = storedKey ? publicProfileByKey(storedKey) : null;\n    var uidProfile = storedUid ? publicProfileByUid(storedUid) : null;\n    var uidProfileKey = uidProfile && nonPlaceholderProfileKey(uidProfile.profileKey || uidProfile.handle || '');\n    var uidMatchesStoredKey = !storedKey || !uidProfileKey || normalizedProfileKeyValue(uidProfileKey) === normalizedProfileKeyValue(storedKey);\n    var profile = keyedProfile || (uidMatchesStoredKey ? uidProfile : null);\n    if (!profile) return record;\n    var key = storedKey || profile.profileKey || profile.handle || '';\n    var name = profile.displayName || record.authorDisplayName || record.ownerDisplayName || key || 'User';\n    return Object.assign({}, record, {\n      authorProfileKey: record.authorProfileKey || key,\n      ownerProfileKey: record.ownerProfileKey || key,\n      authorDisplayName: name,\n      ownerDisplayName: record.ownerDisplayName || name,\n      authorAvatarMediaId: profile.avatarMediaId || profile.thumbnailMediaId || record.authorAvatarMediaId || '',\n      ownerAvatarMediaId: profile.avatarMediaId || profile.thumbnailMediaId || record.ownerAvatarMediaId || ''\n    });\n  }\n  function bridgeGateHTML(title, body){\n    var href = hasCustomer() ? '/account' : loginReturnUrl();\n    var label = hasCustomer() ? 'Account' : 'Log in';\n    return '<section class=\"dsd-social-private-auth-gate\" data-dsd-owner=\"LaunchSocialActivation\"><h2>' + html(title) + '</h2><p data-dsd-activation-status>' + html(body) + '</p><a class=\"dsd-launch-action\" href=\"' + href + '\">' + label + '</a></section>';\n  }\n  function ensureImmersiveOverlayStyles(){\n    if (document.getElementById('dsd-immersive-overlay-style-p11dz684')) return;\n    var style = document.createElement('style');\n    style.id = 'dsd-immersive-overlay-style-p11dz684';\n    style.textContent = [\n      'html.dsd-immersive-overlay-open,html.dsd-immersive-overlay-open body{overflow:hidden!important;overscroll-behavior:none}',\n      'html.dsd-immersive-overlay-open .dsd-overlay-root{position:fixed!important;inset:0!important;z-index:2147483600!important;padding:0!important;margin:0!important;pointer-events:auto!important;isolation:isolate!important}',\n      'html.dsd-immersive-overlay-open .dsd-compact-dock,html.dsd-immersive-overlay-open nav.dsd-compact-dock,html.dsd-immersive-overlay-open .dsd-dock,html.dsd-immersive-overlay-open [class*=\"dsd\"][class*=\"dock\"],html.dsd-immersive-overlay-open .dsd-floating-menu-toggle,html.dsd-immersive-overlay-open .dsd-floating-menu-layer,html.dsd-immersive-overlay-open [data-dsd-owner=\"CompactCommerceNavigation\"],html.dsd-immersive-overlay-open [data-dsd-dock-icon],html.dsd-immersive-overlay-open [data-dsd-floating-menu-toggle],html.dsd-immersive-overlay-open [data-dsd-menu-toggle],html.dsd-immersive-overlay-open [data-dsd-menu-layer],html.dsd-immersive-overlay-open [data-dsd-floating-menu-root]{display:none!important;opacity:0!important;visibility:hidden!important;pointer-events:none!important;z-index:1!important}',\n      'html.dsd-video-playing #dsd-starfield-root-p11dz90 *,html.dsd-video-playing #star-background *,html.dsd-video-playing [data-dsd-starfield] *{animation-play-state:paused!important}',\n      '.dsd-immersive-overlay{position:fixed;inset:0;z-index:2147483647!important;display:grid;color:#fff;background:#000;box-sizing:border-box;overflow:hidden!important;touch-action:none}',\n      '.dsd-immersive-overlay *{box-sizing:border-box;min-width:0}',\n      '.dsd-immersive-overlay__stage,.dsd-immersive-overlay__panel,.dsd-immersive-overlay__story-frame,.dsd-immersive-overlay__story-canvas{position:fixed!important;inset:0!important;width:100vw!important;height:100vh!important;height:100dvh!important;max-width:none!important;max-height:none!important;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;filter:none!important;overflow:hidden!important}',\n      '.dsd-immersive-overlay__bottom,.dsd-immersive-overlay__top{position:fixed!important;left:0!important;right:0!important;top:auto!important;bottom:0!important;z-index:22!important;display:flex;align-items:flex-end;justify-content:flex-start;gap:10px;padding:10px max(14px,env(safe-area-inset-right)) calc(18px + env(safe-area-inset-bottom)) max(14px,env(safe-area-inset-left))!important;background:linear-gradient(0deg,rgba(0,0,0,.38),rgba(0,0,0,0))!important;pointer-events:none!important}',\n      '.dsd-immersive-overlay__context{display:flex;align-items:center;gap:10px;max-width:calc(100vw - 28px);min-width:0;pointer-events:auto!important}',\n      '.dsd-immersive-overlay__avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;overflow:hidden;flex:0 0 auto;background:linear-gradient(135deg,#f2c96f,#7045ff);color:#120817;font-weight:950;box-shadow:0 0 0 2px rgba(255,255,255,.72)}',\n      '.dsd-immersive-overlay__avatar img{width:100%;height:100%;object-fit:cover}',\n      '.dsd-immersive-overlay__context strong,.dsd-immersive-overlay__context span,.dsd-immersive-overlay__context small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-shadow:0 1px 5px rgba(0,0,0,.42)}',\n      '.dsd-immersive-overlay__context span{color:rgba(255,255,255,.72);font-size:12px;font-weight:800}',\n      '.dsd-immersive-overlay__context small{color:rgba(255,255,255,.76);font-size:11px;font-weight:850}',\n      '.dsd-immersive-overlay__context [data-dsd-story-expires]~[data-dsd-story-expires]{display:none!important}',\n      '.dsd-immersive-overlay button,.dsd-immersive-overlay__close,.dsd-immersive-overlay__nav{display:none!important}',\n      '.dsd-immersive-overlay [data-dsd-immersive-close]{display:none!important;position:fixed;right:max(16px,env(safe-area-inset-right));top:calc(16px + env(safe-area-inset-top));z-index:20;width:42px;height:42px;border:1px solid rgba(255,255,255,.22);border-radius:50%;background:rgba(0,0,0,.38);color:#fff;font-size:24px;line-height:1;place-items:center}',\n      '@media(min-width:900px){.dsd-immersive-overlay [data-dsd-immersive-close]{display:grid!important}}',\n      '.dsd-immersive-overlay__story-frame{display:block!important;user-select:none;-webkit-user-select:none;background:#000!important}',\n      '.dsd-immersive-overlay__story-progress{position:fixed;z-index:13;top:calc(6px + env(safe-area-inset-top));left:max(10px,env(safe-area-inset-left));right:max(10px,env(safe-area-inset-right));display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:4px}',\n      '.dsd-immersive-overlay__story-progress span{height:3px;border-radius:999px;background:rgba(255,255,255,.34)}',\n      '.dsd-immersive-overlay__story-progress span.is-active{background:#fff}',\n      '.dsd-immersive-overlay .dsd-story385__canvas,.dsd-immersive-overlay .dsd-story385__canvas-media,.dsd-immersive-overlay .dsd-story385__canvas-media .dsd-launch-media-chip,.dsd-immersive-overlay .dsd-media-frame--story-fullscreen{position:absolute!important;inset:0!important;width:100vw!important;height:100vh!important;height:100dvh!important;max-width:100vw!important;max-height:100dvh!important;margin:0!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;filter:none!important;outline:0!important;display:grid!important;place-items:center!important}',\n      '.dsd-immersive-overlay .dsd-launch-media-chip,.dsd-immersive-overlay .dsd-media-frame,.dsd-immersive-overlay figure,.dsd-immersive-overlay picture{margin:0!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;filter:none!important;outline:0!important;overflow:hidden!important}',\n      '.dsd-immersive-overlay .dsd-story385__canvas-media img,.dsd-immersive-overlay .dsd-story385__canvas-media video,.dsd-immersive-overlay .dsd-media-frame--story-fullscreen .dsd-media-element{width:100vw!important;height:100vh!important;height:100dvh!important;max-width:100vw!important;max-height:100dvh!important;object-fit:contain!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;filter:none!important}',\n      '.dsd-immersive-overlay,.dsd-immersive-overlay *{user-select:none!important;-webkit-user-select:none!important;-webkit-user-drag:none!important}',\n      '.dsd-immersive-overlay,.dsd-immersive-overlay__stage,.dsd-immersive-overlay__panel,.dsd-immersive-overlay__story-frame,.dsd-immersive-overlay .dsd-story385__canvas{z-index:2147483647!important;box-shadow:none!important;text-shadow:none;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}',\n      '.dsd-immersive-overlay .dsd-story385__caption{position:fixed!important;left:max(14px,env(safe-area-inset-left))!important;right:max(14px,env(safe-area-inset-right))!important;bottom:calc(94px + env(safe-area-inset-bottom))!important;z-index:21!important;margin:0 auto!important;max-width:min(680px,calc(100vw - 28px))!important;color:#fff!important;background:rgba(0,0,0,.52)!important;border-radius:14px!important;padding:9px 12px!important;box-shadow:0 14px 30px rgba(0,0,0,.24)!important;text-align:center;text-shadow:0 1px 8px rgba(0,0,0,.72)!important;font-weight:850}',\n      '.dsd-immersive-overlay .dsd-story385__canvas>small,.dsd-immersive-overlay .dsd-story385__canvas [data-dsd-story-expires],.dsd-immersive-overlay .dsd-story385__expires{display:none!important}',\n      '.dsd-immersive-overlay .dsd-story385__watch-sheet,.dsd-immersive-overlay__swipe-hint,[data-dsd-story-tap-zone]{display:none!important}',\n      '.dsd-immersive-overlay .dsd-story385__actions,[data-dsd-immersive-overlay] .dsd-story385__actions{position:fixed!important;right:calc(14px + env(safe-area-inset-right))!important;top:calc(14px + env(safe-area-inset-top))!important;z-index:2147483647!important;display:flex!important;gap:8px!important;align-items:center!important;justify-content:flex-end!important;max-width:min(360px,calc(100vw - 28px))!important;pointer-events:auto!important}',\n      '.dsd-immersive-overlay .dsd-story385__actions button,[data-dsd-immersive-overlay] .dsd-story385__actions button{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-height:36px!important;border-radius:999px!important;border:1px solid rgba(255,255,255,.22)!important;background:rgba(0,0,0,.48)!important;color:#fff!important;padding:8px 12px!important;font-size:12px!important;line-height:1!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;visibility:visible!important;pointer-events:auto!important}',\n      '.dsd-immersive-overlay__stage:before,.dsd-immersive-overlay__stage:after,.dsd-immersive-overlay__panel:before,.dsd-immersive-overlay__panel:after,.dsd-immersive-overlay__story-frame:before,.dsd-immersive-overlay__story-frame:after,.dsd-immersive-overlay .dsd-story385__canvas:before,.dsd-immersive-overlay .dsd-story385__canvas:after,.dsd-immersive-overlay .dsd-story385__canvas-media:before,.dsd-immersive-overlay .dsd-story385__canvas-media:after,.dsd-immersive-overlay .dsd-launch-media-chip:before,.dsd-immersive-overlay .dsd-launch-media-chip:after,.dsd-immersive-overlay .dsd-media-frame--story-fullscreen:before,.dsd-immersive-overlay .dsd-media-frame--story-fullscreen:after,.dsd-immersive-overlay .dsd-media-frame--story-fullscreen.is-loading:before,.dsd-immersive-overlay .dsd-media-frame--story-fullscreen.is-loading:after{content:none!important;display:none!important;background:none!important;box-shadow:none!important;filter:none!important}',\n      '.dsd-immersive-overlay[data-dsd-swipe-close-active=\"true\"] .dsd-immersive-overlay__stage{transition:transform .16s ease;transform:translate3d(0,var(--dsd-story-swipe-y,0px),0)}',\n      '.dsd-immersive-overlay .dsd-story385__link-preview{position:fixed;left:max(16px,env(safe-area-inset-left));right:max(16px,env(safe-area-inset-right));bottom:calc(124px + env(safe-area-inset-bottom));z-index:12;display:grid;gap:3px;max-width:540px;margin-inline:auto;padding:10px 12px;border:1px solid rgba(255,255,255,.18);border-radius:14px;background:rgba(0,0,0,.34);color:#fff;text-decoration:none;box-shadow:none!important}',\n      '.dsd-immersive-overlay .dsd-story385__link-preview span{font-size:12px;color:rgba(255,255,255,.72);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}',\n      '.dsd-immersive-overlay [data-dsd-story385-status]{display:grid;place-items:center;min-height:100vh;padding:24px;text-align:center}'\n    ].join('');\n    document.head.appendChild(style);\n  }\n  function immersiveReturnScroll(){\n    var existing = qs('[data-dsd-immersive-overlay]');\n    return Number(existing && existing.getAttribute('data-dsd-return-scroll') || window.scrollY || window.pageYOffset || 0);\n  }\n  var immersivePreviousFocus = null;\n  function focusImmersiveOverlay(overlay){\n    try {\n      var closeButton = overlay && qs('[data-dsd-immersive-close]', overlay);\n      (closeButton || overlay).focus({ preventScroll: true });\n    } catch(e) {}\n  }\n  function closeImmersiveOverlay(){\n    var y = immersiveReturnScroll();\n    var previousFocus = immersivePreviousFocus;\n    immersivePreviousFocus = null;\n    qsa('[data-dsd-immersive-overlay]').forEach(function(node){\n      if (node._dsdGestureAbort && typeof node._dsdGestureAbort.abort === 'function') {\n        try { node._dsdGestureAbort.abort(); } catch(e) {}\n      }\n      node.remove();\n    });\n    document.documentElement.classList.remove('dsd-immersive-overlay-open');\n    if (previousFocus && typeof previousFocus.focus === 'function') {\n      try { previousFocus.focus({ preventScroll: true }); } catch(e) {}\n    }\n    window.setTimeout(function(){ try { window.scrollTo(0, y); } catch(e){} }, 0);\n  }\n  function canonicalOverlayRoot(){\n    var root = qs('.dsd-overlay-root');\n    if (!root) {\n      root = document.createElement('div');\n      root.className = 'dsd-overlay-root';\n      root.setAttribute('data-dsd-owner', 'OverlayManager');\n      document.body.appendChild(root);\n    }\n    root.setAttribute('data-dsd-overlay-manager-bound', 'true');\n    root.setAttribute('data-dsd-immersive-overlay-root', 'true');\n    return root;\n  }\n  function ensureImmersiveOverlayRoot(mode, contextHTML){\n    ensureImmersiveOverlayStyles();\n    mode = 'story';\n    var root = canonicalOverlayRoot();\n    qsa('[data-dsd-immersive-overlay]', root).forEach(function(node){ node.remove(); });\n    var overlay = document.createElement('div');\n    overlay.className = 'dsd-immersive-overlay';\n    overlay.setAttribute('data-dsd-immersive-overlay', 'true');\n    overlay.setAttribute('data-dsd-owner', 'ImmersiveOverlayController');\n    overlay.setAttribute('data-dsd-immersive-mode', mode);\n    overlay.setAttribute('data-dsd-return-scroll', String(window.scrollY || window.pageYOffset || 0));\n    overlay.setAttribute('role', 'region');\n    overlay.setAttribute('aria-label', 'Fullscreen story viewer');\n    overlay.setAttribute('data-dsd-overlay-above-dock', 'true');\n    overlay.setAttribute('data-dsd-post-media-modal-deconstructed', 'true');\n    overlay.setAttribute('data-dsd-swipe-close-enabled', 'true');\n    overlay.setAttribute('data-dsd-swipe-owner', 'ImmersiveOverlayController');\n    overlay.setAttribute('tabindex', '-1');\n    overlay.innerHTML = '<button type=\"button\" data-dsd-immersive-close aria-label=\"Close story viewer\">&times;</button><footer class=\"dsd-immersive-overlay__bottom\" data-dsd-story-bottom-context><div class=\"dsd-immersive-overlay__context\">' + (contextHTML || '<span class=\"dsd-immersive-overlay__avatar\">DS</span><div><strong>Story</strong><span>Detroit Sky Daddy</span></div>') + '</div></footer><section class=\"dsd-immersive-overlay__stage\" data-dsd-immersive-stage></section>';\n    root.appendChild(overlay);\n    if (!immersivePreviousFocus || !document.body.contains(immersivePreviousFocus)) immersivePreviousFocus = document.activeElement;\n    document.documentElement.classList.add('dsd-immersive-overlay-open');\n    window.setTimeout(function(){ focusImmersiveOverlay(overlay); }, 0);\n    return overlay;\n  }\n  function storyContextHTML(story){\n    story = hydrateRecordIdentity(story || {});\n    var profile = publicProfileByUid(story.authorUid || story.ownerUid || '') || publicProfileByKey(story.authorProfileKey || story.ownerProfileKey || '') || {};\n    var label = publicDisplayName(profile.displayName || story.authorDisplayName || story.ownerDisplayName || story.authorProfileKey || 'Story', 'Story');\n    var handle = publicHandleText(profile.profileKey || profile.handle || story.authorProfileKey || story.ownerProfileKey || label, label, 'story');\n    var mediaId = canonicalProfileAvatarMediaId(profile) || story.authorAvatarMediaId || story.ownerAvatarMediaId || '';\n    var avatar = mediaId ? '<span class=\"dsd-immersive-overlay__avatar\" data-dsd-avatar-media-id=\"' + html(mediaId) + '\"></span>' : '<span class=\"dsd-immersive-overlay__avatar\">' + html(initials(label || 'DS')) + '</span>';\n    var expires = formatDateTime(story.expiresAt || story.expires_at || '');\n    return avatar + '<div><strong>' + html(label) + '</strong><span>@' + html(handle) + '</span>' + (expires ? '<small data-dsd-story-expires>Expires ' + html(expires) + '</small>' : '') + '</div>';\n  }\n  function ensureStoryOverlayViewer(){\n    var story = visibleStories().filter(function(item){ return (item.storyId || item.id || '') === state.activeStoryId; })[0] || {};\n    var overlay = ensureImmersiveOverlayRoot('story', storyContextHTML(story));\n    var stage = qs('[data-dsd-immersive-stage]', overlay);\n    stage.innerHTML = '<main class=\"dsd-immersive-overlay__story-frame\" aria-label=\"Story viewer\" data-dsd-owner=\"ImmersiveOverlayController\" data-dsd-story-overlay-viewer data-dsd-story-swipe-enabled=\"true\"><div class=\"dsd-immersive-overlay__story-progress\" data-dsd-story-progress aria-hidden=\"true\"></div><section class=\"dsd-story385__canvas dsd-immersive-overlay__story-canvas\" data-dsd-story-fullscreen-canvas><strong data-dsd-story385-status>No story selected</strong></section><span class=\"dsd-immersive-overlay__swipe-hint\" aria-hidden=\"true\">Swipe</span></main>';\n    bindStoryOverlayGestures(overlay);\n    hydrateAvatarMedia(overlay);\n    return qs('[data-dsd-story-overlay-viewer]', overlay);\n  }\n  function bindStoryOverlayGestures(overlay){\n    if (!overlay || overlay.dataset.dsdStorySwipeBound === 'true') return;\n    overlay.dataset.dsdStorySwipeBound = 'true';\n    var gestureAbort = window.AbortController ? new AbortController() : null;\n    if (gestureAbort) overlay._dsdGestureAbort = gestureAbort;\n    var documentGestureOptions = gestureAbort ? { capture: true, signal: gestureAbort.signal } : true;\n    var startX = 0;\n    var startY = 0;\n    var lastX = 0;\n    var lastY = 0;\n    var started = false;\n    var didSwipe = false;\n    function start(clientX, clientY){\n      startX = Number(clientX || 0);\n      startY = Number(clientY || 0);\n      lastX = startX;\n      lastY = startY;\n      started = true;\n    }\n    function move(clientX, clientY){\n      if (!started) return;\n      lastX = Number(clientX || lastX || 0);\n      lastY = Number(clientY || lastY || 0);\n    }\n    function recoverMouseDragStart(ev){\n      if (started || !ev || ev.buttons !== 1) return;\n      var movementX = Number(ev.movementX || 0);\n      var movementY = Number(ev.movementY || 0);\n      if (!movementX && !movementY) return;\n      start(Number(ev.clientX || 0) - movementX, Number(ev.clientY || 0) - movementY);\n    }\n    function finish(clientX, clientY){\n      if (!started) return;\n      started = false;\n      var endX = Number(clientX || lastX || 0);\n      var endY = Number(clientY || lastY || 0);\n      var dx = endX - startX;\n      var dy = endY - startY;\n      overlay.removeAttribute('data-dsd-swipe-close-active');\n      overlay.style.removeProperty('--dsd-story-swipe-y');\n      if (Math.abs(dy) >= 54 && Math.abs(dy) > Math.abs(dx) * 1.15) {\n        didSwipe = true;\n        closeStoryOverlay();\n        return;\n      }\n      if (Math.abs(dx) < 42 || Math.abs(dx) < Math.abs(dy) * 1.15) return;\n      didSwipe = true;\n      stepStory(dx < 0 ? 1 : -1);\n    }\n    function isOverlayGestureTarget(ev){\n      var target = ev && ev.target;\n      return !!(target && (target === overlay || (overlay.contains && overlay.contains(target))));\n    }\n    function preventNativeStoryDrag(ev){\n      if (!isOverlayGestureTarget(ev)) return;\n      if (ev && ev.cancelable) ev.preventDefault();\n    }\n    overlay.addEventListener('touchstart', function(ev){\n      var touch = ev.touches && ev.touches[0];\n      if (touch) start(touch.clientX, touch.clientY);\n    }, { passive: true, capture: true });\n    overlay.addEventListener('touchmove', function(ev){\n      var touch = ev.touches && ev.touches[0];\n      if (touch) move(touch.clientX, touch.clientY);\n      if (started && Math.abs(lastY - startY) > Math.abs(lastX - startX)) {\n        overlay.setAttribute('data-dsd-swipe-close-active', 'true');\n        overlay.style.setProperty('--dsd-story-swipe-y', Math.max(-90, Math.min(90, lastY - startY)) + 'px');\n      }\n    }, { passive: true, capture: true });\n    overlay.addEventListener('touchend', function(ev){\n      var touch = ev.changedTouches && ev.changedTouches[0];\n      finish(touch && touch.clientX, touch && touch.clientY);\n    }, { passive: true, capture: true });\n    overlay.addEventListener('touchcancel', function(){ started = false; overlay.removeAttribute('data-dsd-swipe-close-active'); overlay.style.removeProperty('--dsd-story-swipe-y'); }, { passive: true, capture: true });\n    overlay.addEventListener('pointerdown', function(ev){\n      if (ev.pointerType === 'mouse' && ev.button !== 0) return;\n      if (ev.cancelable) ev.preventDefault();\n      start(ev.clientX, ev.clientY);\n    }, true);\n    overlay.addEventListener('pointermove', function(ev){\n      if (started && ev.cancelable) ev.preventDefault();\n      move(ev.clientX, ev.clientY);\n      if (started && Math.abs(lastY - startY) > Math.abs(lastX - startX)) {\n        overlay.setAttribute('data-dsd-swipe-close-active', 'true');\n        overlay.style.setProperty('--dsd-story-swipe-y', Math.max(-90, Math.min(90, lastY - startY)) + 'px');\n      }\n    }, true);\n    overlay.addEventListener('pointerup', function(ev){\n      finish(ev.clientX, ev.clientY);\n    }, true);\n    overlay.addEventListener('pointercancel', function(){ started = false; overlay.removeAttribute('data-dsd-swipe-close-active'); overlay.style.removeProperty('--dsd-story-swipe-y'); }, true);\n    overlay.addEventListener('mousedown', function(ev){\n      if (ev.button !== 0) return;\n      if (ev.cancelable) ev.preventDefault();\n      start(ev.clientX, ev.clientY);\n    }, true);\n    overlay.addEventListener('mousemove', function(ev){\n      if (started && ev.cancelable) ev.preventDefault();\n      recoverMouseDragStart(ev);\n      move(ev.clientX, ev.clientY);\n      if (started && Math.abs(lastY - startY) > Math.abs(lastX - startX)) {\n        overlay.setAttribute('data-dsd-swipe-close-active', 'true');\n        overlay.style.setProperty('--dsd-story-swipe-y', Math.max(-90, Math.min(90, lastY - startY)) + 'px');\n      }\n    }, true);\n    overlay.addEventListener('mouseup', function(ev){\n      finish(ev.clientX, ev.clientY);\n    }, true);\n    function documentMouseMove(ev){\n      recoverMouseDragStart(ev);\n      if (!started || !document.body.contains(overlay)) return;\n      move(ev.clientX, ev.clientY);\n      if (Math.abs(lastY - startY) > Math.abs(lastX - startX)) {\n        overlay.setAttribute('data-dsd-swipe-close-active', 'true');\n        overlay.style.setProperty('--dsd-story-swipe-y', Math.max(-90, Math.min(90, lastY - startY)) + 'px');\n      }\n    }\n    function documentMouseUp(ev){\n      if (!started || !document.body.contains(overlay)) return;\n      finish(ev.clientX, ev.clientY);\n    }\n    function documentTouchMove(ev){\n      if (!started || !document.body.contains(overlay)) return;\n      var touch = ev.touches && ev.touches[0];\n      if (!touch) return;\n      move(touch.clientX, touch.clientY);\n      if (Math.abs(lastY - startY) > Math.abs(lastX - startX)) {\n        overlay.setAttribute('data-dsd-swipe-close-active', 'true');\n        overlay.style.setProperty('--dsd-story-swipe-y', Math.max(-90, Math.min(90, lastY - startY)) + 'px');\n      }\n    }\n    function documentTouchEnd(ev){\n      if (!started || !document.body.contains(overlay)) return;\n      var touch = ev.changedTouches && ev.changedTouches[0];\n      finish(touch && touch.clientX, touch && touch.clientY);\n    }\n    function documentPointerDown(ev){\n      if (!document.body.contains(overlay) || !isOverlayGestureTarget(ev)) return;\n      if (ev.pointerType === 'mouse' && ev.button !== 0) return;\n      if (ev.cancelable) ev.preventDefault();\n      start(ev.clientX, ev.clientY);\n    }\n    function documentMouseDown(ev){\n      if (!document.body.contains(overlay) || !isOverlayGestureTarget(ev) || ev.button !== 0) return;\n      if (ev.cancelable) ev.preventDefault();\n      start(ev.clientX, ev.clientY);\n    }\n    function documentTouchStart(ev){\n      if (!document.body.contains(overlay) || !isOverlayGestureTarget(ev)) return;\n      var touch = ev.touches && ev.touches[0];\n      if (touch) start(touch.clientX, touch.clientY);\n    }\n    overlay.addEventListener('dragstart', preventNativeStoryDrag, true);\n    document.addEventListener('dragstart', preventNativeStoryDrag, documentGestureOptions);\n    document.addEventListener('pointerdown', documentPointerDown, documentGestureOptions);\n    document.addEventListener('mousedown', documentMouseDown, documentGestureOptions);\n    document.addEventListener('touchstart', documentTouchStart, documentGestureOptions);\n    document.addEventListener('mousemove', documentMouseMove, documentGestureOptions);\n    document.addEventListener('mouseup', documentMouseUp, documentGestureOptions);\n    document.addEventListener('touchmove', documentTouchMove, documentGestureOptions);\n    document.addEventListener('touchend', documentTouchEnd, documentGestureOptions);\n    window.addEventListener('pointerdown', documentPointerDown, documentGestureOptions);\n    window.addEventListener('mousedown', documentMouseDown, documentGestureOptions);\n    window.addEventListener('touchstart', documentTouchStart, documentGestureOptions);\n    window.addEventListener('mousemove', documentMouseMove, documentGestureOptions);\n    window.addEventListener('mouseup', documentMouseUp, documentGestureOptions);\n    window.addEventListener('touchmove', documentTouchMove, documentGestureOptions);\n    window.addEventListener('touchend', documentTouchEnd, documentGestureOptions);\n    overlay.addEventListener('click', function(ev){\n      if (didSwipe) {\n        didSwipe = false;\n        ev.preventDefault();\n        ev.stopPropagation();\n        return;\n      }\n      if (ev.target.closest('[data-dsd-immersive-close], [data-dsd-story-profile-link], [data-dsd-story-actions-panel], [data-dsd-story-watch-sheet]')) return;\n      var width = overlay.getBoundingClientRect().width || window.innerWidth || 0;\n      if (!width) return;\n      if (ev.clientX < width * 0.32) { ev.preventDefault(); stepStory(-1); }\n      else if (ev.clientX > width * 0.68) { ev.preventDefault(); stepStory(1); }\n    }, true);\n  }\n  function closeStoryOverlay(){\n    closeImmersiveOverlay();\n  }\n  function ensureStoryViewerShell(){\n    var viewer = qs('[data-dsd-story-overlay-viewer]');\n    if (!viewer) return null;\n    if (!qs('.dsd-story385__canvas', viewer) || qs('.dsd-social-private-auth-gate', viewer)) {\n      viewer.innerHTML = '<div class=\"dsd-immersive-overlay__story-progress\" data-dsd-story-progress aria-hidden=\"true\"></div><section class=\"dsd-story385__canvas dsd-immersive-overlay__story-canvas\" data-dsd-story-fullscreen-canvas><strong data-dsd-story385-status>No story selected</strong></section><span class=\"dsd-immersive-overlay__swipe-hint\" aria-hidden=\"true\">Swipe</span>';\n      viewer.removeAttribute('data-dsd-public-locked');\n    }\n    return viewer;\n  }\n  function activeStoryViewer(){\n    return qs('[data-dsd-story-overlay-viewer]');\n  }\n  function renderRouteAccessGates(){\n    document.documentElement.classList.toggle('dsd-shopify-authenticated', hasCustomer());\n    document.documentElement.classList.toggle('dsd-shopify-public', !hasCustomer());\n    if (hasCustomer() && !state.bridgeChecked) return;\n    var needsGate = !hasCustomer() || !hasActiveProfile();\n    if (!needsGate) {\n      var activeMsg = qs('[data-dsd-msg384]');\n      if (activeMsg && qs('.dsd-social-private-auth-gate, [data-dsd-auth-gate]', activeMsg)) {\n        delete activeMsg.dataset.dsdPublicLocked;\n        try { renderMessages(); } catch(e){}\n      }\n      var activeNoti = qs('[data-dsd-noti321]');\n      if (activeNoti && activeNoti.dataset.dsdPublicLocked === 'true') {\n        delete activeNoti.dataset.dsdPublicLocked;\n        try { renderNotifications(); } catch(e){}\n      }\n      return;\n    }\n    var gateTitle = hasCustomer() ? 'Profile connection loading' : 'Log in required';\n    var gateBody = hasCustomer() ? 'Refresh or finish profile setup if this stays unavailable.' : '';\n    var noti = qs('[data-dsd-noti321]');\n    if (noti && !noti.dataset.dsdPublicLocked) {\n      noti.dataset.dsdPublicLocked = 'true';\n      var notiFeed = qs('.dsd-noti321__feed', noti);\n      if (notiFeed) notiFeed.innerHTML = hasCustomer() ? bridgeGateHTML(gateTitle, gateBody) : privateGateHTML('Log in to view notifications', 'Log in to see your notifications and account updates.');\n    }\n    var msg = qs('[data-dsd-msg384]');\n    if (msg && !msg.dataset.dsdPublicLocked) {\n      msg.dataset.dsdPublicLocked = 'true';\n      var msgMain = qs('.dsd-msg384__conversation', msg);\n      if (msgMain) msgMain.innerHTML = hasCustomer() ? bridgeGateHTML(gateTitle, gateBody) : privateGateHTML('Log in to use messages', 'Log in to read and send messages.');\n    }\n    ensureStoryViewerShell();\n  }\n  function ensureProfileShell(root, name, safeHandle, profile){\n    if (!root) return;\n    root.classList.add('dsd-up315', 'dsd-up353');\n    if (qs('.dsd-up315__identity-copy h1', root) && qs('[data-dsd-profile-story-slot]', root) && qs('.dsd-up315__cover', root)) return;\n    var label = publicDisplayName(name || 'DSD member', 'DSD member');\n    var handle = publicHandleText(safeHandle || label, label, 'member');\n    root.innerHTML = '<div class=\"dsd-up315__shell dsd-up353__shell\" data-dsd-profile-shell-recovered=\"canonical\"><article class=\"dsd-up315__card dsd-up353__card\" aria-label=\"User profile\" data-dsd-profile-surface=\"identity-content-experience\"><div class=\"dsd-up315__cover dsd-up353__cover\" style=\"--dsd-up315-cover:linear-gradient(135deg,rgba(20,24,42,.92),rgba(118,83,178,.38));\"><button type=\"button\" class=\"dsd-up315__cover-edit\" data-dsd-profile-modal-open=\"banner\" data-dsd-owner-control hidden disabled aria-hidden=\"true\" style=\"display:none!important\">Edit banner</button></div><div class=\"dsd-up315__body dsd-up353__body\"><section class=\"dsd-up315__hero dsd-up353__hero\" aria-label=\"Profile identity, about, and actions\" data-dsd-profile-block=\"identity-about\"><div class=\"dsd-up315__identity dsd-up353__identity\"><div class=\"dsd-up315__avatar-wrap dsd-up353__avatar-wrap\"><div class=\"dsd-up315__avatar dsd-up353__avatar\" aria-label=\"Profile avatar\">' + html(initials(label || handle || 'DS')) + '</div><button type=\"button\" class=\"dsd-up315__photo-edit\" data-dsd-profile-modal-open=\"avatar\" data-dsd-owner-control hidden disabled aria-hidden=\"true\" style=\"display:none!important\">Edit photo</button></div><div class=\"dsd-up315__identity-copy dsd-up353__identity-copy\"><h1 data-dsd-profile-name>' + html(label) + '</h1><p class=\"dsd-up315__handle dsd-up353__handle\" data-dsd-profile-handle>@' + html(handle) + '</p><p class=\"dsd-up315__bio dsd-up353__bio\" data-dsd-profile-about data-dsd-profile-bio>' + html(profileBioDisplayText(profile, false)) + '</p><p class=\"dsd-up315__location dsd-up353__location\" data-dsd-profile-location hidden></p></div></div><div class=\"dsd-up315__actions dsd-up353__actions\" aria-label=\"Profile actions\"><button type=\"button\" class=\"dsd-up315__action dsd-up315__action--gold\" data-dsd-profile-modal-open=\"edit\" data-dsd-owner-control hidden disabled aria-hidden=\"true\" style=\"display:none!important\">Edit Profile</button></div></section><section class=\"dsd-up353__relationship-strip\" aria-label=\"Profile relationship layer\" data-dsd-owner=\"ProfileRelationshipModal\" data-dsd-relationship-layer=\"modal-launchers\"><button type=\"button\" data-dsd-profile-modal-open=\"followers\" data-dsd-relationship-tab=\"followers\"><strong>0</strong><span>Followers</span></button><button type=\"button\" data-dsd-profile-modal-open=\"following\" data-dsd-relationship-tab=\"following\"><strong>0</strong><span>Following</span></button><button type=\"button\" data-dsd-profile-modal-open=\"favorites\" data-dsd-relationship-tab=\"favorites\"><strong>0</strong><span>Favorites</span></button><button type=\"button\" data-dsd-profile-modal-open=\"saved\" data-dsd-relationship-tab=\"saved\"><strong>0</strong><span>Saved</span></button></section><section class=\"dsd-story385__profile-slot\" aria-label=\"Profile stories\" data-dsd-profile-story-slot=\"p11dz385\" data-dsd-owner=\"StoryTray\" data-dsd-contract=\"profile-story-slot-owner-scoped-shell\"><div class=\"dsd-story385__profile-slot-head\"><div><strong>Stories</strong><span>Stories from this profile</span></div><button type=\"button\" data-dsd-story385-profile-action=\"create\">Create story</button></div><div class=\"dsd-story385__tray\" aria-label=\"Profile story tray\"><article class=\"dsd-story385__tray-card\" data-dsd-story385-profile-action=\"view-self\"><div class=\"dsd-story385__avatar\">' + html(initials(label || handle || 'DS').slice(0, 2)) + '</div><strong>Story</strong><span>No active story</span></article></div></section><section class=\"dsd-up356__content-shell\" aria-label=\"Profile content architecture\" data-dsd-profile-content-architecture data-dsd-owner=\"ProfileContentController\" data-dsd-contract=\"profile-content-launch-activated\"><section class=\"dsd-up315__feed dsd-profile-feed dsd-up353__feed dsd-up356__feed\" id=\"profile-feed\" data-dsd-contract=\"profile-feed\" data-dsd-owner=\"FeedRenderer\" aria-label=\"Profile content feed\"><div class=\"dsd-up315__feed-title\"><h2 data-dsd-profile-content-title>Posts</h2></div><div class=\"dsd-up356__content-panel is-active\" data-dsd-profile-content-panel=\"posts\"><div class=\"dsd-up315__feed-list\" data-dsd-profile-feed-list data-dsd-profile-post-list></div></div></section></section></div></article><div class=\"dsd-up315__modal-layer dsd-up353__modal-layer\" data-dsd-profile-modal-layer hidden></div></div>';\n    if (!qs('[data-dsd-profile-publisher]', root)) {\n      var contentShell = qs('[data-dsd-profile-content-architecture]', root);\n      if (contentShell) {\n        contentShell.insertAdjacentHTML('afterbegin', '<section class=\"dsd-up315__composer dsd-up353__composer\" data-dsd-profile-publisher data-dsd-contract=\"profile-v3-publisher-launch-activated\" data-dsd-owner=\"PostComposerController\" aria-label=\"Profile post composer\"><div class=\"dsd-up315__composer-head\">' + currentComposerAvatarHTML() + '<div><strong>' + html(composerDisplayName()) + '</strong><em>@' + html(composerProfileKey()) + '</em></div></div><button type=\"button\" class=\"dsd-up315__composer-box\" data-dsd-profile-composer-focus>What is happening?</button><div class=\"dsd-up315__composer-tools\" aria-label=\"Composer attachments\"><button type=\"button\" data-dsd-profile-composer-media=\"image\" aria-label=\"Attach image\" title=\"Attach image\">' + composerMediaIcon('image') + '</button><button type=\"button\" data-dsd-profile-composer-media=\"video\" aria-label=\"Attach video\" title=\"Attach video\">' + composerMediaIcon('video') + '</button></div><div class=\"dsd-up315__composer-foot\"><span>0 / 5000</span><button type=\"button\" data-dsd-profile-composer-focus>Post</button></div></section>');\n      }\n    }\n  }\n  function profileBioDisplayText(profile, isOwn){\n    var text = profile && (profile.bio || profile.about || profile.description || profile.profileBio || profile.summary || '');\n    if (text) return publicDisplayText(text, 'Profile ready for discovery.');\n    if (isOwn && state.profile && !state.profile.setupComplete) return 'Complete profile setup to publish your public profile.';\n    return 'Profile ready for discovery.';\n  }\n  function profileLocationText(profile){\n    profile = profile || {};\n    var location = String(profile.location || '').trim();\n    if (location) return publicDisplayText(location, '');\n    return [profile.locationCity || profile.city, profile.locationState || profile.state].filter(Boolean).join(', ');\n  }\n  function profileLocationParts(profile){\n    profile = profile || {};\n    var city = String(profile.locationCity || profile.city || '').trim().toLowerCase();\n    var region = String(profile.locationState || profile.state || '').trim().toLowerCase();\n    if ((!city || !region) && profile.location) {\n      var parts = String(profile.location || '').split(',').map(function(part){ return part.trim().toLowerCase(); }).filter(Boolean);\n      city = city || parts[0] || '';\n      region = region || parts[1] || '';\n    }\n    return { city: city, state: region, text: [city, region].filter(Boolean).join(', ') };\n  }\n  function nearbyDiscoveryMatch(profile){\n    var target = profileLocationParts(profile);\n    if (!target.text) return false;\n    var own = profileLocationParts(state.profile || {});\n    if (own.city && target.city && own.city === target.city) return true;\n    if (own.state && target.state && own.state === target.state) return true;\n    return !own.text;\n  }\n  function currentComposerProfile(){\n    var customerKey = customerProfileKeyValue();\n    var activeKey = activeProfileKeyValue();\n    var activeUid = actorUid();\n    var selfKey = profileKey();\n    var candidates = [\n      state.profile || null,\n      activeUid ? publicProfileByUid(activeUid) : null,\n      customerKey ? publicProfileByKey(customerKey) : null,\n      activeKey ? publicProfileByKey(activeKey) : null,\n      selfKey ? publicProfileByKey(selfKey) : null\n    ].filter(Boolean).map(function(profile){ return profileWithPublicMirror(profile) || profile; });\n    return candidates.filter(function(profile){ return !!canonicalProfileAvatarMediaId(profile); })[0] || candidates[0] || {};\n  }\n  function currentComposerAvatarHTML(){\n    var selfProfile = currentComposerProfile();\n    var avatarId = canonicalProfileAvatarMediaId(selfProfile);\n    var fallback = initials(composerDisplayName() || composerProfileKey() || 'DS').slice(0, 1);\n    if (avatarId) return '<span class=\"dsd-up315__mini-avatar\" data-dsd-profile-composer-avatar data-dsd-avatar-media-id=\"' + html(avatarId) + '\" data-dsd-current-user-avatar=\"true\"><img src=\"' + html(mediaReadProxyUrl(avatarId)) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\"></span>';\n    return '<span class=\"dsd-up315__mini-avatar\" data-dsd-profile-composer-avatar>' + html(fallback) + '</span>';\n  }\n  function composerDisplayName(){\n    var selfProfile = currentComposerProfile();\n    return publicDisplayName(selfProfile.displayName || selfProfile.name || activeDisplayNameValue() || 'DSD member', 'DSD member');\n  }\n  function composerProfileKey(){\n    var selfProfile = currentComposerProfile();\n    return publicHandleText(selfProfile.profileKey || selfProfile.handle || activeProfileKeyValue() || profileKey() || 'member', composerDisplayName(), 'member');\n  }\n  function syncProfilePublisherIdentity(root, name, safeHandle){\n    var publisher = qs('[data-dsd-profile-publisher]', root);\n    if (!publisher) return;\n    var head = qs('.dsd-up315__composer-head', publisher);\n    if (!head) return;\n    var mini = qs('.dsd-up315__mini-avatar', head);\n    var label = qs('strong', head);\n    var handle = qs('em', head);\n    var composerName = composerDisplayName() || name || safeHandle || 'DSD member';\n    var composerHandle = composerProfileKey() || safeHandle || name || 'member';\n    if (mini) {\n      var selfProfile = currentComposerProfile();\n      var avatarId = canonicalProfileAvatarMediaId(selfProfile);\n      mini.setAttribute('data-dsd-profile-composer-avatar', 'true');\n      if (avatarId) {\n        mini.setAttribute('data-dsd-avatar-media-id', avatarId);\n        if (!qs('img', mini)) mini.innerHTML = '<img src=\"' + html(mediaReadProxyUrl(avatarId)) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\">';\n        delete mini.dataset.dsdAvatarHydrated;\n        delete mini.dataset.dsdAvatarHydratedMediaId;\n        hydrateAvatarMedia(head);\n      } else {\n        mini.removeAttribute('data-dsd-avatar-media-id');\n        delete mini.dataset.dsdAvatarHydrated;\n        delete mini.dataset.dsdAvatarHydratedMediaId;\n        mini.textContent = initials(composerName || composerHandle || 'DS').slice(0, 1);\n      }\n    }\n    if (label) label.textContent = publicDisplayName(composerName, 'DSD member');\n    if (handle) handle.textContent = '@' + publicHandleText(composerHandle, composerName, 'member');\n  }\n  function syncComposerIdentity(host){\n    if (!host) return;\n    var head = qs('.dsd-up315__composer-head', host);\n    if (!head) return;\n    var mini = qs('.dsd-up315__mini-avatar', head);\n    var label = qs('strong', head);\n    var handle = qs('em', head);\n    var name = composerDisplayName();\n    var safeHandle = composerProfileKey();\n    var selfProfile = currentComposerProfile();\n    var avatarId = canonicalProfileAvatarMediaId(selfProfile);\n    if (mini) {\n      mini.setAttribute('data-dsd-profile-composer-avatar', 'true');\n      if (avatarId) {\n        if (mini.getAttribute('data-dsd-avatar-media-id') !== avatarId) {\n          mini.setAttribute('data-dsd-avatar-media-id', avatarId);\n          delete mini.dataset.dsdAvatarHydrated;\n          delete mini.dataset.dsdAvatarHydratedMediaId;\n        }\n        if (!qs('img', mini)) mini.innerHTML = '<img src=\"' + html(mediaReadProxyUrl(avatarId)) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\">';\n        hydrateAvatarMedia(head);\n      } else {\n        mini.removeAttribute('data-dsd-avatar-media-id');\n        delete mini.dataset.dsdAvatarHydrated;\n        delete mini.dataset.dsdAvatarHydratedMediaId;\n        mini.textContent = initials(name || safeHandle || 'DS').slice(0, 1);\n      }\n    }\n    if (label) label.textContent = publicDisplayName(name || safeHandle || 'DSD member', 'DSD member');\n    if (handle) handle.textContent = '@' + publicHandleText(safeHandle || name || 'member', name || safeHandle, 'member');\n  }\n  function deconstructPublicProfileOwnerControls(root){\n    if (!root) return;\n    root.setAttribute('data-dsd-public-owner-controls-deconstructed', BUILD);\n    qsa('[data-dsd-profile-modal-open=\"banner\"], [data-dsd-profile-modal-open=\"avatar\"], [data-dsd-profile-modal-open=\"edit\"]', root).forEach(function(control){\n      setProfileOwnerControlState(control, false);\n    });\n    qsa('[data-dsd-profile-publisher]', root).forEach(function(publisher){\n      publisher.innerHTML = '';\n      publisher.hidden = true;\n      publisher.setAttribute('aria-hidden', 'true');\n      publisher.setAttribute('data-dsd-public-view-publisher-deconstructed', BUILD);\n      publisher.style.display = 'none';\n      delete publisher.dataset.dsdFirebaseComposer;\n      delete publisher.dataset.dsdCanonicalComposerMounted;\n    });\n    qsa('[data-dsd-story385-profile-action=\"create\"], [data-dsd-profile-composer-focus], [data-dsd-profile-composer-media]', root).forEach(function(control){\n      control.hidden = true;\n      control.disabled = true;\n      control.setAttribute('aria-hidden', 'true');\n      control.style.setProperty('display', 'none', 'important');\n    });\n    var actions = qs('.dsd-up315__actions', root);\n    if (actions) actions.innerHTML = '<a class=\"dsd-up315__action dsd-up315__action--gold\" href=\"' + loginReturnUrl() + '\">Log in</a><a class=\"dsd-up315__action\" href=\"' + registerReturnUrl() + '\">Create account</a>';\n  }\n  function setProfileOwnerControlState(control, visible){\n    if (!control) return;\n    control.setAttribute('data-dsd-owner-control', 'true');\n    control.hidden = !visible;\n    control.disabled = !visible;\n    control.setAttribute('aria-hidden', visible ? 'false' : 'true');\n    if (visible) control.style.removeProperty('display');\n    else control.style.setProperty('display', 'none', 'important');\n  }\n  function renderProfileIdentity(){\n    var root = qs('[data-dsd-user-profile]');\n    if (!root) return;\n    root.classList.add('dsd-up315', 'dsd-up353');\n    var profile = viewedProfile();\n    var targetProfileKey = routeProfileKey();\n    var rawProfileParam = String(queryParam('profile') || '').trim().replace(/^@+/, '');\n    if (rawProfileParam && placeholderProfileKey(rawProfileParam)) {\n      root.hidden = false;\n      root.setAttribute('data-dsd-profile-view-mode', 'public-view');\n      root.setAttribute('data-dsd-placeholder-profile-query-blocked', BUILD);\n      root.innerHTML = '<section class=\"dsd-launch-auth-required\" data-dsd-owner=\"ProfileRenderer\" data-dsd-placeholder-profile-query=\"true\"><h1>Discover profiles</h1><p>This profile link is no longer active.</p><a class=\"dsd-launch-action\" href=\"/pages/users?route_rev=' + encodeURIComponent(BUILD) + '\">Discover users</a></section>';\n      return;\n    }\n    var ownTargetProfile = hasCustomer() && targetProfileKey && targetProfileKey === profileKey();\n    if (!profile && targetProfileKey) {\n      var listedProfile = state.publicProfiles.filter(function(item){\n        return item && (item.profileKey === targetProfileKey || item.handle === targetProfileKey || item.id === targetProfileKey);\n      })[0] || null;\n      if (listedProfile && viewedProfileVisible(listedProfile)) {\n        profile = listedProfile;\n        state.viewProfile = listedProfile;\n      }\n    }\n    if (!profile && targetProfileKey && !ownTargetProfile) {\n      resolveViewedProfileByKey(targetProfileKey);\n      if (state.publicProfilesLoaded && state.viewProfileResolvedKey !== targetProfileKey) state.viewProfileResolvedKey = targetProfileKey;\n      if (state.viewProfileResolvedKey !== targetProfileKey || state.viewProfileMissingKey !== targetProfileKey) {\n        root.hidden = false;\n        root.setAttribute('data-dsd-profile-view-mode', 'public-view');\n        root.setAttribute('data-dsd-profile-loading', 'supabase-canonical');\n        ensureProfileShell(root, targetProfileKey, targetProfileKey, { profileKey: targetProfileKey, handle: targetProfileKey, bio: '' });\n        var pendingBio = qs('[data-dsd-profile-about]', root);\n        if (pendingBio) pendingBio.textContent = '';\n        deconstructPublicProfileOwnerControls(root);\n        return;\n      }\n      root.innerHTML = '<section class=\"dsd-launch-auth-required\" data-dsd-owner=\"ProfileRenderer\" data-dsd-profile-unavailable=\"true\"><h1>Discover profiles</h1><p>This public profile is not active or cannot be displayed.</p><a class=\"dsd-launch-action\" href=\"/pages/users?route_rev=' + encodeURIComponent(BUILD) + '\">Discover users</a></section>';\n      return;\n    }\n    if (profile) profile = profileWithPublicMirror(profile) || profile;\n    if (!profile && ownTargetProfile) {\n      root.hidden = false;\n      return;\n    }\n    if (!profile && !hasCustomer()) {\n      root.hidden = false;\n      root.setAttribute('data-dsd-profile-view-mode', 'public-view');\n      deconstructPublicProfileOwnerControls(root);\n      return;\n    }\n    if (hasCustomer() && !hasFirebaseAuth() && !routeProfileKey() && !state.profile) {\n      if (!state.bridgeChecked) {\n        root.hidden = true;\n        return;\n      }\n      root.hidden = false;\n      root.innerHTML = '<section class=\"dsd-launch-auth-required\" data-dsd-owner=\"ProfileRenderer\"><h1>Account connection loading</h1><p data-dsd-activation-status>Refresh or log in again if your profile stays unavailable.</p><a class=\"dsd-launch-action\" href=\"/account\">Account</a></section>';\n      return;\n    }\n    root.hidden = false;\n    var isOwn = isOwnProfileRoute();\n    var identityPending = !!(profile && profile.identityRebindingRequired === true) || ownIdentityRebindingRequired();\n    if (identityPending && !profile) profile = state.profile || identityRebindingRequiredProfile();\n    root.setAttribute('data-dsd-profile-view-mode', isOwn ? 'owner' : 'public-view');\n    root.setAttribute('data-dsd-identity-rebinding-required', identityPending ? 'true' : 'false');\n    root.removeAttribute('data-dsd-profile-loading');\n    root.classList.toggle('dsd-up315--viewed-profile', !isOwn);\n    root.classList.toggle('dsd-up315--owner-profile', isOwn);\n    var placeholderSelfProfile = isOwn && !routeProfileKey() && !profileRecordHasUsableKey(profile);\n    var name = identityPending ? 'Profile identity syncing' : (placeholderSelfProfile ? 'Complete profile setup' : publicDisplayName((profile && profile.displayName) || displayName(), 'DSD member'));\n    var key = nonPlaceholderProfileKey((profile && (profile.profileKey || profile.handle)) || profileKey());\n    var safeHandle = identityPending ? 'syncing' : (placeholderSelfProfile ? 'set-handle' : publicHandleText(key, name, 'member'));\n    ensureProfileShell(root, name, safeHandle, profile);\n    var h = qs('[data-dsd-profile-name], .dsd-up315__identity-copy h1', root); if (h) h.textContent = name;\n    var handle = qs('.dsd-up315__handle', root); if (handle) handle.textContent = '@' + safeHandle;\n    if (isOwn && !identityPending) syncProfilePublisherIdentity(root, name, safeHandle);\n    var profileContentVisible = canViewProfileContent(profile);\n    var profileRestriction = profileRestrictionType(profile);\n    var profileRestrictionCopy = restrictedShellText({ restrictedKind: profileRestriction }, 'profile');\n    var bio = qs('[data-dsd-profile-about]', root);\n    if (bio) bio.textContent = identityPending ? 'Your account is logged in, but the private new-store identity bridge has not rebound it to the canonical Supabase profile. Posting, stories, messages, and profile media stay locked to avoid duplicate records.' : (placeholderSelfProfile ? 'Choose a handle and save your profile to activate posting, stories, messages, and profile media.' : (!isOwn && !profileContentVisible ? profileRestrictionCopy.body : profileBioDisplayText(profile, isOwn)));\n    if (identityPending) {\n      qsa('[data-dsd-profile-modal-open], [data-dsd-profile-composer-focus], [data-dsd-profile-composer-media], [data-dsd-story385-profile-action=\"create\"]', root).forEach(function(control){\n        control.setAttribute('aria-disabled', 'true');\n        if (control.tagName === 'BUTTON') control.disabled = true;\n      });\n      qsa('[data-dsd-profile-publisher]', root).forEach(function(publisher){\n        publisher.hidden = true;\n        publisher.setAttribute('data-dsd-identity-locked', 'true');\n      });\n    }\n    qsa('[data-dsd-profile-location]', root).forEach(function(node){\n      var locationText = profileLocationText(profile);\n      node.textContent = locationText;\n      node.hidden = !locationText;\n    });\n    var profileAvatarMediaId = canonicalProfileAvatarMediaId(profile);\n    var profileBannerMediaId = canonicalProfileBannerMediaId(profile);\n    if (!profileBannerMediaId && !identityPending && profile && (profile.profileKey || profile.handle)) {\n      recoverPublicProfileBannerFromMediaObjects(profile, 'profile-identity-render-banner-recovery');\n    }\n    var avatar = qs('.dsd-up315__avatar', root);\n    if (profileAvatarMediaId) {\n      if (avatar) {\n        avatar.setAttribute('data-dsd-avatar-media-id', profileAvatarMediaId);\n        if (!qs('img', avatar)) avatar.innerHTML = '<img src=\"' + html(mediaReadProxyUrl(profileAvatarMediaId)) + '\" alt=\"' + html(name) + ' profile avatar\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\">';\n        hydrateAvatarMedia(avatar);\n      }\n    } else {\n      var fallbackAvatar = avatar || qs('.dsd-up315__avatar', root);\n      if (fallbackAvatar) fallbackAvatar.innerHTML = html(initials(name || safeHandle || 'DS'));\n    }\n    if (profileBannerMediaId) {\n      var cachedBanner = state.mediaReadCache[profileBannerMediaId] && state.mediaReadCache[profileBannerMediaId].objectUrl || '';\n      var immediateBanner = cachedBanner || mediaReadProxyUrl(profileBannerMediaId);\n      var immediateCover = qs('.dsd-up315__cover', root);\n      if (immediateCover) {\n        immediateCover.style.setProperty('--dsd-up315-cover', 'url(\"' + String(immediateBanner).replace(/\"/g, '%22') + '\")');\n        immediateCover.style.setProperty('background-image', 'url(\"' + String(immediateBanner).replace(/\"/g, '%22') + '\")', 'important');\n        immediateCover.style.setProperty('background-position', bannerBackgroundPosition(profile.bannerPosition), 'important');\n        immediateCover.style.setProperty('background-size', bannerBackgroundSize(profile.bannerPosition), 'important');\n        immediateCover.setAttribute('data-dsd-profile-cover-media-id', profileBannerMediaId);\n        immediateCover.setAttribute('data-dsd-cover-media-id', profileBannerMediaId);\n        immediateCover.setAttribute('data-dsd-media-proxy-placeholder', cachedBanner ? 'false' : 'true');\n      }\n      resolveMediaDisplayUrl(profileBannerMediaId).then(function(url){\n        var cover = qs('.dsd-up315__cover', root);\n        if (url && cover) {\n          cover.style.setProperty('--dsd-up315-cover', 'url(\"' + String(url).replace(/\"/g, '%22') + '\")');\n          cover.style.setProperty('background-image', 'url(\"' + String(url).replace(/\"/g, '%22') + '\")', 'important');\n          cover.style.setProperty('background-position', bannerBackgroundPosition(profile.bannerPosition), 'important');\n          cover.style.setProperty('background-size', bannerBackgroundSize(profile.bannerPosition), 'important');\n          cover.setAttribute('data-dsd-profile-cover-media-id', profileBannerMediaId);\n          cover.setAttribute('data-dsd-cover-media-id', profileBannerMediaId);\n          cover.setAttribute('data-dsd-media-proxy-placeholder', 'false');\n        }\n      });\n    } else {\n      var fallbackCover = qs('.dsd-up315__cover', root);\n      if (fallbackCover) {\n        fallbackCover.style.setProperty('--dsd-up315-cover', 'linear-gradient(135deg,rgba(20,24,42,.92),rgba(118,83,178,.38))');\n        fallbackCover.style.setProperty('background-image', 'linear-gradient(135deg,rgba(20,24,42,.92),rgba(118,83,178,.38))', 'important');\n        fallbackCover.style.removeProperty('background-position');\n        fallbackCover.style.removeProperty('background-size');\n        fallbackCover.removeAttribute('data-dsd-profile-cover-media-id');\n        fallbackCover.removeAttribute('data-dsd-cover-media-id');\n      }\n    }\n    var profileCover = qs('.dsd-up315__cover', root);\n    if (profileCover) {\n      profileCover.hidden = false;\n      profileCover.style.removeProperty('display');\n      profileCover.setAttribute('data-dsd-profile-cover-active', 'true');\n    }\n    qsa('[data-dsd-profile-modal-open=\"banner\"], [data-dsd-profile-modal-open=\"avatar\"], [data-dsd-profile-modal-open=\"edit\"]', root).forEach(function(n){ setProfileOwnerControlState(n, isOwn); });\n    qsa('[data-dsd-profile-publisher], [data-dsd-story385-profile-action=\"create\"]', root).forEach(function(n){ n.hidden = !isOwn || placeholderSelfProfile; n.disabled = !isOwn || placeholderSelfProfile; n.setAttribute('aria-hidden', (isOwn && !placeholderSelfProfile) ? 'false' : 'true'); n.style.display = (isOwn && !placeholderSelfProfile) ? '' : 'none'; });\n    if (!isOwn) {\n      deconstructPublicProfileOwnerControls(root);\n    }\n    var actions = qs('.dsd-up315__actions', root);\n    if (actions && isOwn) {\n      if (!qs('[data-dsd-profile-modal-open=\"edit\"]', actions)) {\n        actions.innerHTML = '<button type=\"button\" class=\"dsd-up315__action dsd-up315__action--gold\" data-dsd-profile-modal-open=\"edit\" data-dsd-owner-control>Edit Profile</button>';\n      }\n      qsa('[data-dsd-profile-modal-open=\"edit\"]', actions).forEach(function(control){ setProfileOwnerControlState(control, !placeholderSelfProfile); });\n    }\n    if (actions && !isOwn && profile && profile.uid) {\n      if (!hasActiveProfile()) {\n        actions.innerHTML = '<a class=\"dsd-up315__action dsd-up315__action--gold\" href=\"' + loginReturnUrl() + '\">Log in</a><a class=\"dsd-up315__action\" href=\"' + registerReturnUrl() + '\">Create account</a>';\n      } else {\n        var isFollowing = !!state.followingByUid[profile.uid];\n        var isRequested = !!state.followRequestByUid[profile.uid];\n        var isFavorite = !!state.favoritesByUid[profile.uid];\n        var isBlocked = relationshipBlocked(profile.uid);\n        var messageHref = '/pages/messages?profile=' + encodeURIComponent(key);\n        actions.innerHTML = isBlocked\n          ? '<button type=\"button\" class=\"dsd-up315__action dsd-up315__action--gold\" data-dsd-unblock-profile=\"' + html(profile.uid) + '\" data-profile-key=\"' + html(key) + '\">Unblock</button>'\n          : '<button type=\"button\" class=\"dsd-up315__action dsd-up315__action--gold\" data-dsd-toggle-follow-profile=\"' + html(profile.uid) + '\" data-profile-key=\"' + html(key) + '\" aria-pressed=\"' + (isFollowing || isRequested) + '\">' + (isFollowing ? 'Following' : (isRequested ? 'Requested' : (profileVisibility(profile) === 'private' ? 'Request follow' : 'Follow'))) + '</button><a class=\"dsd-up315__action\" href=\"' + messageHref + '\">Message</a><button type=\"button\" class=\"dsd-up315__action\" data-dsd-favorite-user=\"' + html(profile.uid) + '\" data-profile-key=\"' + html(key) + '\" aria-pressed=\"' + isFavorite + '\">' + (isFavorite ? 'Favorited' : 'Favorite') + '</button>';\n      }\n    }\n    var setupRequested = (window.location.search || '').indexOf('setup=1') !== -1;\n    var savedSelfProfile = profileWithPublicMirror(state.profile || publicProfileByUid(actorUid()) || publicProfileByKey(customerProfileKeyValue() || activeProfileKeyValue() || profileKey() || '') || {});\n    var profileHasSavedIdentity = profileRecordHasUsableKey(profile) || profileRecordHasUsableKey(state.profile) || profileRecordHasUsableKey(savedSelfProfile);\n    var setupHydrationResolved = !!(state.bridgeChecked || state.profileExists || state.profile && state.profile.setupComplete === false);\n    var setupRequestedAndResolved = setupRequested && state.bridgeChecked === true && state.profileExists === false && !customerProfileKeyValue() && placeholderSelfProfile && !profileHasSavedIdentity;\n    var transientBridgeProfile = hasCustomer() && state.profile && /bridge_pending|identity_rebinding_required/.test(String(state.profile.status || state.profile.authBridge || ''));\n    var showInlineSetup = isOwn && !identityPending && setupHydrationResolved && !profileHasSavedIdentity && !transientBridgeProfile && setupRequestedAndResolved;\n    qsa('[data-dsd-inline-profile-setup]', root).forEach(function(panel){\n      if (!showInlineSetup) panel.remove();\n    });\n    if (showInlineSetup && !qs('[data-dsd-inline-profile-setup]', root)) {\n      var panel = document.createElement('section');\n      panel.className = 'dsd-launch-profile-setup';\n      panel.setAttribute('data-dsd-inline-profile-setup', 'true');\n      panel.innerHTML = '<h2>Complete profile setup</h2><form data-dsd-profile-setup-form><label>Display name<input name=\"displayName\" required></label><label>Handle<input name=\"profileKey\" required></label><label>City<input name=\"locationCity\" autocomplete=\"address-level2\" maxlength=\"80\"></label><label>State<input name=\"locationState\" autocomplete=\"address-level1\" maxlength=\"40\"></label><label>Birthdate<input name=\"birthdate\" type=\"date\" autocomplete=\"bday\"></label><label>Age<input name=\"age\" type=\"number\" min=\"13\" max=\"120\" inputmode=\"numeric\"></label><label>Bio<textarea name=\"bio\" rows=\"4\"></textarea></label>' + publicationOptions('Profile') + '<label class=\"dsd-adult-content-setting\" data-dsd-adult-content-row><input name=\"adultContentEnabled\" type=\"checkbox\"> Adult Content Enabled <small>Requires a saved or entered age of 18+.</small></label><button type=\"submit\">Save profile</button></form>';\n      var body = qs('.dsd-up315__body', root) || root;\n      body.insertBefore(panel, body.firstChild);\n    }\n    if (isOwn) syncProfileSetupForms(root);\n    root.dataset.dsdProfileHydrated = 'true';\n  }\n  function postActionIcon(name){\n    var paths = {\n      like: 'M12 21s-7-4.4-9.2-8.2C1 9.8 2.5 6 6 6c2 0 3.2 1.1 4 2.2C10.8 7.1 12 6 14 6c3.5 0 5 3.8 3.2 6.8C19 16.6 12 21 12 21Z',\n      comment: 'M4 5h16v10H8l-4 4V5Zm4 4v2h8V9H8Z',\n      share: 'M14 5l5 5-5 5v-3H9a5 5 0 0 0-5 5v-1a7 7 0 0 1 7-7h3V5Z',\n      save: 'M6 3h12v18l-6-3-6 3V3Z'\n    };\n    return '<svg class=\"dsd-launch-action-svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"' + (paths[name] || paths.like) + '\"></path></svg>';\n  }\n  function postAuthorAvatar(post, authorKey){\n    var profile = publicProfileByKey(authorKey);\n    var mediaId = (profile && canonicalProfileAvatarMediaId(profile)) || post.authorAvatarMediaId || post.ownerAvatarMediaId || '';\n    var label = publicDisplayName(post.authorDisplayName || authorKey || 'DSD member', 'DSD member');\n    if (mediaId) return '<a class=\"dsd-post-card__avatar\" href=\"' + html(profileRouteHref(authorKey)) + '\" data-dsd-avatar-media-id=\"' + html(mediaId) + '\" aria-label=\"' + html(label) + '\"></a>';\n    return '<a class=\"dsd-post-card__avatar dsd-post-card__avatar--fallback\" href=\"' + html(profileRouteHref(authorKey)) + '\" aria-label=\"' + html(label) + '\">' + html(initials(label || authorKey || 'DS')) + '</a>';\n  }\n  function postTimestamp(post){\n    return formatDateTime(post.createdAt || post.updatedAt || post.submittedAt) || 'Just now';\n  }\n  function mediaLayoutType(items){\n    items = (items || []).filter(Boolean);\n    var count = items.length;\n    var videos = items.filter(function(item){ return String(item.kind || '').toLowerCase() === 'video'; }).length;\n    var images = count - videos;\n    if (!count) return 'none';\n    if (count === 1 && videos === 1) return 'single-video';\n    if (count === 1) return 'single-image';\n    if (count === 2 && videos === 1 && images === 1) return 'mixed-2';\n    if (count === 2) return videos ? 'video-2' : 'image-2';\n    if (count === 3) return videos ? 'mixed-3' : 'image-3';\n    return videos ? 'mixed-grid' : 'image-grid';\n  }\n  function recordMillis(record){\n    var value = record && (record.createdAt || record.publishedAt || record.updatedAt || record.submittedAt || record.expiresAt);\n    return valueMillis(value);\n  }\n  function sortByCreatedAtDesc(items){\n    return (items || []).slice().sort(function(a, b){\n      var pinDelta = (b && b.pinned ? 1 : 0) - (a && a.pinned ? 1 : 0);\n      if (pinDelta) return pinDelta;\n      return recordMillis(b) - recordMillis(a);\n    });\n  }\n  function renderSignature(items){\n    return (items || []).map(function(item){\n      var counts = item.counts || {};\n      var isStoryRecord = !!(item.storyId || item.ownerUid && !item.postId && String(item.entity && item.entity.type || '').toLowerCase() === 'story');\n      var counterSignature = isStoryRecord\n        ? [item.viewCount || 0, item.watchCount || 0, item.uniqueWatchCount || 0].join(',')\n        : [stableViewCounter(item, counts), counts.likes || 0, counts.comments || 0, counts.shares || 0].join(',');\n      return [\n        item.postId || item.storyId || item.id || item.queueItemId || '',\n        item.status || (item.moderation && item.moderation.state) || '',\n        item.visibility || (item.entity && item.entity.visibility) || '',\n        item.contentRating || (item.entity && item.entity.contentRating) || '',\n        item.authorDisplayName || item.ownerDisplayName || '',\n        item.authorAvatarMediaId || item.ownerAvatarMediaId || '',\n        String(item.body || item.caption || '').slice(0, 180),\n        counterSignature,\n        recordMillis(item),\n        (item.media || []).map(function(m){ return mediaSignatureId(m); }).join(',')\n      ].join(':');\n    }).join('|');\n  }\n  function commentRenderSignature(posts){\n    return (posts || []).map(function(post){\n      var id = post && (post.postId || post.id) || '';\n      var comments = state.commentsByPost[id] || [];\n      return id + '[' + comments.map(function(comment){\n        return [commentKey(comment), comment.status || (comment.moderation && comment.moderation.state) || '', String(comment.body || '').slice(0, 80)].join(':');\n      }).join(',') + ']';\n    }).join('|');\n  }\n  function replaceHtmlIfChanged(root, signature, htmlText){\n    if (!root) return false;\n    if (root.dataset.dsdRenderSignature === signature) return false;\n    root.dataset.dsdRenderSignature = signature;\n    root.innerHTML = htmlText;\n    return true;\n  }\n  function applyProfileMediaFallbackFromRenderedAuthors(){\n    return;\n  }\n  function mediaStateAllowed(media){\n    var status = String(media && (media.status || media.state || media.moderationStatus || (media.moderation && media.moderation.state) || 'uploaded') || 'uploaded').toLowerCase();\n    var visibility = String(media && (media.visibility || media.mediaVisibility || 'public') || 'public').toLowerCase();\n    var mediaId = String(readableMediaId(media) || durableMediaId(media) || '').toLowerCase();\n    if (mediaReadQuarantineReason(mediaId)) return false;\n    if (['deleted', 'hidden', 'rejected', 'archived', 'blocked', 'removed', 'expired'].indexOf(status) !== -1) return false;\n    return visibility !== 'hidden';\n  }\n  function recordAllowsPublicMedia(record){\n    if (!record || isRestrictedShellRecord(record)) return false;\n    if (!publicRecordVisible(record) || !isApprovedPublicRecord(record)) return false;\n    var visibility = String(record.visibility || (record.entity && record.entity.visibility) || 'public').toLowerCase();\n    var rating = String(record.contentRating || record.content_rating || (record.entity && record.entity.contentRating) || 'standard').toLowerCase();\n    var gate = String(record.accessGate || record.access_gate || (record.entity && record.entity.accessGate) || '').toLowerCase();\n    if (visibility !== 'public' || gate === 'dsd_plus' || gate === 'gated') return false;\n    if (rating !== 'standard' && rating !== '') return false;\n    return !classifiedRestrictionType(record);\n  }\n  function canRenderMediaForRecord(record, media){\n    if (!media || !(readableMediaId(media) || durableMediaId(media))) return false;\n    if (!mediaStateAllowed(media)) return false;\n    if (media.wasabiReadQuarantined === true) return false;\n    if (canModerate() || recordOwnedByCurrentProfile(record)) return true;\n    var mediaPolicy = Object.assign({}, record || {}, {\n      visibility: media.visibility || media.mediaVisibility || record && record.visibility,\n      contentRating: media.contentRating || media.content_rating || record && (record.contentRating || record.content_rating),\n      accessGate: media.accessGate || media.access_gate || record && (record.accessGate || record.access_gate)\n    });\n    return !isRestrictedShellRecord(record) && publicRecordVisible(record) && isApprovedPublicRecord(record) && canViewClassified(mediaPolicy) && canViewPrivateRecord(record);\n  }\n  function safeMediaItemsForRecord(record){\n    return (record && record.media || []).filter(function(item){ return canRenderMediaForRecord(record, item); });\n  }\n  function canRenderComment(comment, parentPost){\n    var status = String(comment && (comment.status || comment.state || comment.moderationStatus || (comment.moderation && comment.moderation.state) || 'pending') || 'pending').toLowerCase();\n    if (status === 'deleted') return false;\n    if (canModerate() || canEditComment(comment)) return true;\n    if (status !== 'approved') return false;\n    return !!publicRenderablePost(parentPost || {});\n  }\n  function safeCommentMediaItems(comment, parentPost){\n    if (!canRenderComment(comment, parentPost)) return [];\n    if (!recordAllowsPublicMedia(parentPost) && !(canModerate() || canEditComment(comment))) return [];\n    return (comment && comment.media || []).filter(function(item){ return canRenderMediaForRecord(parentPost, item); });\n  }\n  function renderCommentCard(comment, parentPost){\n    comment = hydrateRecordIdentity(comment || {});\n    var id = postKey(parentPost || {});\n    var cid = commentKey(comment);\n    var status = String(comment.status || (comment.moderation && comment.moderation.state) || 'pending').toLowerCase();\n    var removed = status === 'deleted';\n    var actions = '';\n    if (cid && !removed && canEditComment(comment)) actions += '<button type=\"button\" data-dsd-edit-comment=\"' + html(cid) + '\" data-post-id=\"' + html(id) + '\">Edit</button><button type=\"button\" data-dsd-delete-comment=\"' + html(cid) + '\" data-post-id=\"' + html(id) + '\">Delete</button>';\n    if (cid && canModerate() && !removed) actions += '<button type=\"button\" data-dsd-approve-comment=\"' + html(cid) + '\" data-post-id=\"' + html(id) + '\">Approve</button><button type=\"button\" data-dsd-hide-comment=\"' + html(cid) + '\" data-post-id=\"' + html(id) + '\">Hide</button><button type=\"button\" data-dsd-reject-comment=\"' + html(cid) + '\" data-post-id=\"' + html(id) + '\">Reject</button><button type=\"button\" data-dsd-restore-comment=\"' + html(cid) + '\" data-post-id=\"' + html(id) + '\">Restore</button>';\n    var media = safeCommentMediaItems(comment, parentPost).map(function(m){\n      var kind = m.kind || 'image';\n      return '<figure class=\"dsd-launch-media-chip dsd-launch-comment-media\" data-dsd-inline-media=\"true\"' + mediaReadAttrs(m) + ' data-dsd-media-kind=\"' + html(kind) + '\" data-dsd-media-status=\"' + html(m.status || 'uploaded') + '\"></figure>';\n    }).join('');\n    var blockedMedia = (comment.media || []).length && !media ? '<div class=\"dsd-comment-media-unavailable\">Comment media unavailable for this viewer.</div>' : '';\n    var commentBody = removed ? 'Comment removed.' : publicDisplayText(comment.body || '', '');\n    return '<div class=\"dsd-launch-comment\" id=\"' + html(routeAnchorId('dsd-comment', cid)) + '\" data-dsd-comment-id=\"' + html(cid) + '\" data-dsd-comment-status=\"' + html(status) + '\"><strong>' + html(publicDisplayName(comment.authorDisplayName || 'User', 'User')) + '</strong>' + (commentBody ? '<span>' + linkify(commentBody) + '</span>' : '') + (media ? '<div class=\"dsd-launch-comment-media-grid\">' + media + '</div>' : blockedMedia) + (actions ? '<span class=\"dsd-launch-comment-actions\">' + actions + '</span>' : '') + '</div>';\n  }\n  function visibleCommentsForPost(post){\n    var id = postKey(post || {});\n    return uniqueComments(state.commentsByPost[id] || []).filter(function(comment){ return canRenderComment(comment, post); }).slice(-20);\n  }\n  function ensurePostDrawerRoot(){\n    var root = qs('[data-dsd-post-drawer-root]');\n    if (root) return root;\n    root = document.createElement('div');\n    root.setAttribute('data-dsd-post-drawer-root', '');\n    root.setAttribute('data-dsd-owner', 'LaunchSocialActivation.PostDrawer');\n    root.hidden = true;\n    document.body.appendChild(root);\n    return root;\n  }\n  function closePostDrawer(){\n    var root = qs('[data-dsd-post-drawer-root]');\n    state.postDrawer = { open: false, mode: '', postId: '', returnFocus: state.postDrawer && state.postDrawer.returnFocus || null };\n    document.documentElement.classList.remove('dsd-post-drawer-open');\n    if (root) { root.hidden = true; root.innerHTML = ''; }\n    var restore = state.postDrawer.returnFocus;\n    state.postDrawer.returnFocus = null;\n    if (restore && typeof restore.focus === 'function') window.setTimeout(function(){ try { restore.focus(); } catch(e){} }, 0);\n  }\n  function openPostDrawer(mode, postId, trigger){\n    mode = 'comments';\n    postId = String(postId || '').trim();\n    state.postDrawer = { open: true, mode: mode, postId: postId, returnFocus: trigger || document.activeElement || null };\n    if (postId) {\n      state.openCommentPostIds[postId] = true;\n      hydratePostComments([localPostById(postId) || { postId: postId }]);\n    }\n    document.documentElement.classList.add('dsd-post-drawer-open');\n    renderPostDrawer();\n    var root = ensurePostDrawerRoot();\n    var focusTarget = qs('textarea, input, button, [href]', root);\n    if (focusTarget) window.setTimeout(function(){ try { focusTarget.focus(); } catch(e){} }, 0);\n  }\n  function postDrawerCommentsHTML(post){\n    if (!post) return '<div class=\"dsd-post-drawer__empty\"><strong>Post unavailable</strong><p>This post is not available in the current view.</p></div>';\n    var comments = visibleCommentsForPost(post);\n    var body = String(post.body || '').trim();\n    var cards = comments.length ? comments.map(function(comment){ return renderCommentCard(comment, post); }).join('') : '<div class=\"dsd-post-drawer__empty\"><strong>No comments yet</strong><p>Comments appear here when they are available.</p></div>';\n    var form = hasActiveProfile()\n      ? '<form data-dsd-comment-form data-post-id=\"' + html(postKey(post)) + '\"><textarea name=\"body\" maxlength=\"' + html(MAX.comment) + '\" aria-label=\"Write a comment\" placeholder=\"Write a comment\"></textarea><div class=\"dsd-composer-media-actions dsd-launch-comment-media-actions\" aria-label=\"Attach comment media\">' + composerMediaButton('image', true, 'Attach comment pictures') + composerMediaButton('video', true, 'Attach comment videos') + '</div><div class=\"dsd-post-drawer__form-actions\">' + composerCountHTML(MAX.comment) + '<button type=\"button\" data-dsd-close-post-drawer>Cancel</button><button type=\"submit\">Reply</button></div></form>'\n      : '<div class=\"dsd-post-drawer__login\"><p>Log in to add a comment.</p><a class=\"dsd-launch-action\" href=\"' + loginReturnUrl() + '\">Log in</a></div>';\n    return '<div class=\"dsd-post-drawer__post-summary\">' + postAuthorAvatar(post, post.authorProfileKey || '') + '<div><strong>' + html(publicDisplayName(post.authorDisplayName || 'User', 'User')) + '</strong>' + (body ? '<p>' + linkify(publicDisplayText(body, '')) + '</p>' : '') + '</div></div><div class=\"dsd-post-drawer__comments\">' + cards + '</div>' + form;\n  }\n  function renderPostDrawer(){\n    var root = ensurePostDrawerRoot();\n    if (!state.postDrawer || !state.postDrawer.open) {\n      root.hidden = true;\n      root.innerHTML = '';\n      document.documentElement.classList.remove('dsd-post-drawer-open');\n      return;\n    }\n    var mode = 'comments';\n    var post = state.postDrawer.postId ? localPostById(state.postDrawer.postId) : null;\n    var title = 'Comments';\n    root.hidden = false;\n    root.innerHTML = '<div class=\"dsd-post-drawer\" data-dsd-post-drawer data-mode=\"' + html(mode) + '\"><button type=\"button\" class=\"dsd-post-drawer__backdrop\" data-dsd-close-post-drawer aria-label=\"Close post drawer\"></button><aside class=\"dsd-post-drawer__panel\" role=\"region\" aria-label=\"' + html(title) + '\" tabindex=\"-1\"><header><strong>' + html(title) + '</strong><button type=\"button\" data-dsd-close-post-drawer aria-label=\"Close\">&times;</button></header><div class=\"dsd-post-drawer__body\">' + postDrawerCommentsHTML(post) + '</div></aside></div>';\n    hydrateAvatarMedia(root);\n    hydrateMediaReads(root);\n    updateComposerCounters(root);\n    bindPostDrawerCommentActions(root);\n    var panel = qs('.dsd-post-drawer__panel', root);\n    if (panel) panel.focus();\n  }\n  function bindPostDrawerCommentActions(root){\n    root = root || ensurePostDrawerRoot();\n    qsa('[data-dsd-delete-comment], [data-dsd-hide-comment], [data-dsd-approve-comment], [data-dsd-reject-comment], [data-dsd-restore-comment]', root).forEach(function(button){\n      if (button.dataset.dsdCommentActionBound === BUILD) return;\n      button.dataset.dsdCommentActionBound = BUILD;\n      button.addEventListener('click', function(ev){\n        ev.preventDefault();\n        ev.stopPropagation();\n        var postId = button.getAttribute('data-post-id') || '';\n        var commentId = button.getAttribute('data-dsd-delete-comment') || button.getAttribute('data-dsd-hide-comment') || button.getAttribute('data-dsd-approve-comment') || button.getAttribute('data-dsd-reject-comment') || button.getAttribute('data-dsd-restore-comment') || '';\n        if (!postId || !commentId || button.disabled) return;\n        function finish(){\n          button.disabled = false;\n          button.removeAttribute('aria-busy');\n          renderPostDrawer();\n        }\n        button.disabled = true;\n        button.setAttribute('aria-busy', 'true');\n        if (button.hasAttribute('data-dsd-delete-comment')) {\n          deleteComment(postId, commentId).then(finish, finish);\n          return;\n        }\n        var stateValue = button.hasAttribute('data-dsd-hide-comment') ? 'hidden' : button.hasAttribute('data-dsd-reject-comment') ? 'rejected' : 'approved';\n        updateCommentState(postId, commentId, stateValue).then(finish, finish);\n      });\n    });\n  }\n  function postViewCounterHTML(post, counts){\n    counts = counts || post && post.counts || {};\n    var viewCounterValue = stableViewCounter(post, counts);\n    return '<span class=\"dsd-post-view-counter\" data-dsd-counter-surface=\"post\" data-dsd-counter-source=\"' + (supabaseCutoverConfigured() ? 'supabase-view-counter' : 'owner-fallback') + '\" data-dsd-counter-dedupe=\"' + (supabaseCutoverConfigured() ? 'viewer-key-server-dedupe' : 'owner-session-fallback') + '\" data-dsd-counter-value=\"' + html(viewCounterValue) + '\" aria-label=\"' + viewCounterValue + ' post views\">' + viewCounterValue + ' views</span>';\n  }\n  function postCard(post){\n    post = hydrateRecordIdentity(post);\n    if (post && isRestrictedShellRecord(post) && !canModerate()) {\n      var gatedId = post.postId || post.id || '';\n      var gatedAuthorKey = post.authorProfileKey || '';\n      var gatedAuthorName = publicDisplayName(post.authorDisplayName || 'DSD member', 'DSD member');\n      var gatedHeader = '<div class=\"dsd-post-card__head\">' + postAuthorAvatar(post, gatedAuthorKey) + '<div class=\"dsd-post-card__identity\"><strong><a href=\"' + html(profileRouteHref(gatedAuthorKey)) + '\">' + html(gatedAuthorName) + '</a></strong><span class=\"dsd-post-card__handle\">@' + html(publicHandleText(gatedAuthorKey, gatedAuthorName, 'member')) + '</span></div><time class=\"dsd-post-card__time\">' + html(postTimestamp(post)) + '</time></div>';\n      var restrictedCopy = restrictedShellText(post, 'post');\n      return '<article class=\"dsd-post-card dsd-post-card--gated\" data-post-id=\"' + html(gatedId) + '\" data-dsd-gated-shell=\"' + (post.gatedShell === true) + '\" data-dsd-restricted-shell=\"true\" data-dsd-restricted-kind=\"' + html(post.restrictedKind || classifiedRestrictionType(post) || 'gated') + '\">' + gatedHeader + '<div class=\"dsd-gated-post-shell\">' + postViewCounterHTML(post, post.counts || {}) + '<strong>' + html(restrictedCopy.title) + '</strong><p>' + html(restrictedCopy.body) + '</p><a class=\"dsd-launch-action\" href=\"' + html(restrictedCopy.href) + '\">' + html(restrictedCopy.cta) + '</a></div></article>';\n    }\n    var counts = post.counts || {};\n    var postMediaItems = safeMediaItemsForRecord(post);\n    var layoutType = mediaLayoutType(postMediaItems);\n    var media = postMediaItems.map(function(m, mediaIndex){\n      var kind = m.kind || 'image';\n      var ownerUploadError = (canEditPost(post) || canModerate()) && m.uploadError ? ' data-dsd-upload-error=\"' + html(String(m.uploadError).slice(0, 180)) + '\"' : '';\n      return '<figure class=\"dsd-launch-media-chip dsd-launch-media-chip--' + html(kind) + '\" data-dsd-media-index=\"' + html(mediaIndex) + '\" data-dsd-inline-media=\"true\" data-dsd-post-media-inline-only=\"true\"' + mediaReadAttrs(m) + ' data-dsd-media-kind=\"' + html(kind) + '\" data-dsd-media-status=\"' + html(m.status || 'pending_upload') + '\"' + ownerUploadError + '></figure>';\n    }).join('');\n    var id = post.postId || post.id;\n    var authorKey = post.authorProfileKey || '';\n    var reacted = !!state.reactionsByPost[id];\n    var savedOverride = state.localSavedStateOverrides && state.localSavedStateOverrides[id];\n    var saved = savedOverride ? savedOverride === 'saved' : state.savedItems.some(function(item){ return item && item.state === 'saved' && item.targetId === id; });\n    var visibleCommentCount = visibleCommentsForPost(post).length;\n    var ownerActions = canEditPost(post) ? '<button type=\"button\" data-dsd-edit-post=\"' + html(id) + '\">Edit</button><button type=\"button\" data-dsd-delete-post=\"' + html(id) + '\">Delete</button>' : '';\n    var postStatus = post.status || (post.moderation && post.moderation.state) || 'pending';\n    var modActions = '';\n    if (canModerate()) {\n      if (postStatus !== 'approved') modActions += '<button type=\"button\" data-dsd-approve-post=\"' + html(id) + '\">Approve</button>';\n      if (postStatus !== 'hidden') modActions += '<button type=\"button\" data-dsd-hide-post=\"' + html(id) + '\">Hide</button>';\n      if (postStatus !== 'rejected') modActions += '<button type=\"button\" data-dsd-reject-post=\"' + html(id) + '\">Reject</button>';\n    }\n    var reportAction = hasActiveProfile() ? '<button type=\"button\" data-dsd-report-post=\"' + html(id) + '\">Report</button>' : '';\n    var menuActions = ownerActions || modActions || reportAction ? '<details class=\"dsd-post-more-menu\"><summary aria-label=\"Post options\" title=\"Post options\"><span aria-hidden=\"true\">...</span></summary><div class=\"dsd-post-more-menu__panel\">' + ownerActions + reportAction + modActions + '</div></details>' : '';\n    var viewCounter = postViewCounterHTML(post, counts);\n    var commentButton = '<button type=\"button\" data-dsd-action=\"comment\" data-post-id=\"' + html(id) + '\" aria-label=\"Open comments\" title=\"Comments\"><span class=\"dsd-launch-action-icon\" aria-hidden=\"true\">' + postActionIcon('comment') + '</span><span class=\"dsd-launch-action-text\">Comments</span><span class=\"dsd-launch-action-count\">' + Math.max(Number(counts.comments || 0), visibleCommentCount) + '</span></button>';\n    var authorUid = post.authorUid || post.ownerUid || profileUidForKey(authorKey) || '';\n    var authorIsSelf = identityMatchesCurrent(authorUid, authorKey);\n    var authorProfile = profileByUid(authorUid, authorKey) || {};\n    var authorFollowed = !!state.followingByUid[authorUid];\n    var authorRequested = !!state.followRequestByUid[authorUid];\n    var authorFollowLabel = authorFollowed ? 'Following' : (authorRequested ? 'Requested' : (profileVisibility(authorProfile) === 'private' ? 'Request follow' : 'Follow'));\n    var showAuthorFollow = hasActiveProfile() && authorUid && !authorIsSelf && !relationshipBlocked(authorUid);\n    var followAuthorAction = showAuthorFollow ? '<button type=\"button\" data-dsd-toggle-follow-profile=\"' + html(authorUid) + '\" data-profile-key=\"' + html(authorKey) + '\" aria-label=\"' + html(authorFollowLabel + ' ' + publicDisplayName(post.authorDisplayName || authorKey || 'member', 'member')) + '\" title=\"' + html(authorFollowLabel) + '\" aria-pressed=\"' + (authorFollowed || authorRequested) + '\"><span class=\"dsd-launch-action-text\">' + html(authorFollowLabel) + '</span></button>' : '';\n    var actionRow = hasActiveProfile()\n      ? '<footer class=\"dsd-launch-actions\">' + followAuthorAction + '<button type=\"button\" data-dsd-action=\"like\" data-post-id=\"' + html(id) + '\" aria-label=\"' + (reacted ? 'Unlike post' : 'Like post') + '\" title=\"' + (reacted ? 'Unlike' : 'Like') + '\" aria-pressed=\"' + reacted + '\"><span class=\"dsd-launch-action-icon\" aria-hidden=\"true\">' + postActionIcon('like') + '</span><span class=\"dsd-launch-action-text\">' + (reacted ? 'Liked' : 'Like') + '</span><span class=\"dsd-launch-action-count\">' + (counts.likes || 0) + '</span></button>' + commentButton + '<button type=\"button\" class=\"dsd-share-button\" data-dsd-action=\"share\" data-dsd-owner=\"ShareSheet\" data-post-id=\"' + html(id) + '\" aria-label=\"Share post\" title=\"Share\"><span class=\"dsd-launch-action-icon\" aria-hidden=\"true\">' + postActionIcon('share') + '</span><span class=\"dsd-launch-action-text\">Share</span><span class=\"dsd-launch-action-count\">' + (counts.shares || 0) + '</span></button><button type=\"button\" data-dsd-action=\"save\" data-post-id=\"' + html(id) + '\" data-dsd-save-post=\"' + html(id) + '\" aria-label=\"' + (saved ? 'Unsave post' : 'Save post') + '\" title=\"' + (saved ? 'Saved' : 'Save') + '\" aria-pressed=\"' + saved + '\"><span class=\"dsd-launch-action-icon\" aria-hidden=\"true\">' + postActionIcon('save') + '</span><span class=\"dsd-launch-action-text\">' + (saved ? 'Saved' : 'Save') + '</span></button>' + menuActions + '</footer>'\n      : '<footer class=\"dsd-launch-actions\">' + commentButton + '<a class=\"dsd-launch-action\" href=\"' + loginReturnUrl() + '\">Log in to interact</a></footer>';\n    var body = String(post.body || '').trim();\n    var scopeBadges = (post.pinned ? '<span>Pinned</span>' : '') + (post.announcement ? '<span>Announcement</span>' : '') + (post.postType === 'poll' ? '<span>Poll</span>' : '');\n    var poll = post.poll && (post.poll.options || []).length ? '<div class=\"dsd-post-poll\"><strong>' + html(publicDisplayText(post.poll.question || body || 'Poll', 'Poll')) + '</strong>' + post.poll.options.map(function(option){ return '<button type=\"button\" disabled>' + html(publicDisplayText(option, 'Option')) + '</button>'; }).join('') + '</div>' : '';\n    var authorName = publicDisplayName(post.authorDisplayName || 'User', 'User');\n    var authorHeader = '<div class=\"dsd-post-card__head\">' + postAuthorAvatar(post, authorKey) + '<div class=\"dsd-post-card__identity\"><strong><a href=\"' + html(profileRouteHref(authorKey)) + '\">' + html(authorName) + '</a></strong><span class=\"dsd-post-card__handle\">@' + html(publicHandleText(authorKey, authorName, 'member')) + '</span></div><time class=\"dsd-post-card__time\">' + html(postTimestamp(post)) + '</time></div>';\n    var commentsOpen = !!state.openCommentPostIds[id];\n    return '<article class=\"dsd-post-card' + (commentsOpen ? ' dsd402-comments-open' : '') + '\" style=\"background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important\" id=\"' + html(routeAnchorId('dsd-post', id)) + '\" data-post-id=\"' + html(id) + '\" data-dsd-post-status=\"' + html(post.status || (post.moderation && post.moderation.state) || 'pending') + '\" data-dsd-media-layout=\"' + html(layoutType) + '\"' + (commentsOpen ? ' data-dsd402-comments-open=\"true\"' : '') + '>' + authorHeader + (scopeBadges ? '<div class=\"dsd-post-card__badges\">' + scopeBadges + '</div>' : '') + viewCounter + (body ? '<p class=\"dsd-post-card__body\">' + linkify(publicDisplayText(body, '')) + '</p>' : '') + postLinkPreviewHTML(body) + poll + '<div class=\"dsd-launch-media-grid dsd-launch-media-grid--' + html(layoutType) + '\" data-dsd-media-count=\"' + html(postMediaItems.length) + '\" data-dsd-media-layout=\"' + html(layoutType) + '\">' + media + '</div>' + actionRow + '</article>';\n  }\n  function bindPostMoreMenuActions(root){\n    function requestPostDelete(button, deleteId){\n      if (!button || !deleteId) return;\n      if (button.getAttribute('data-dsd-confirm-delete') === 'true') {\n        button.removeAttribute('data-dsd-confirm-delete');\n        button.textContent = 'Delete';\n        deletePost(deleteId);\n        return;\n      }\n      button.setAttribute('data-dsd-confirm-delete', 'true');\n      button.textContent = 'Confirm delete';\n      renderStatus('Select Confirm delete to remove this post.');\n      window.setTimeout(function(){\n        if (button.getAttribute('data-dsd-confirm-delete') !== 'true') return;\n        button.removeAttribute('data-dsd-confirm-delete');\n        button.textContent = 'Delete';\n      }, 5000);\n    }\n    qsa('[data-dsd-edit-post], [data-dsd-delete-post], [data-dsd-report-post]', root || document).forEach(function(button){\n      if (button.dataset.dsdPostMenuActionBound === BUILD) return;\n      button.dataset.dsdPostMenuActionBound = BUILD;\n      button.addEventListener('click', function(ev){\n        ev.preventDefault();\n        ev.stopPropagation();\n        var editId = button.getAttribute('data-dsd-edit-post') || '';\n        var deleteId = button.getAttribute('data-dsd-delete-post') || '';\n        var reportId = button.getAttribute('data-dsd-report-post') || '';\n        if (editId) {\n          var existing = state.posts.filter(function(item){ return (item.postId || item.id) === editId; })[0] || {};\n          var body = window.prompt('Edit post text', existing.body || '');\n          if (body != null) editPost(editId, { body: body, caption: '' });\n          return;\n        }\n        if (deleteId) {\n          requestPostDelete(button, deleteId);\n          return;\n        }\n        if (reportId) reportContent('post', reportId, 'posts/' + reportId, 'User reported post');\n      });\n    });\n  }\n  function scheduleRenderPosts(reason){\n    renderPostsQueued = true;\n    if (renderPostsTimer) return;\n    state.feedDiagnostics.scheduled += 1;\n    renderPostsTimer = window.setTimeout(function(){\n      renderPostsTimer = null;\n      renderPosts(reason || 'scheduled');\n    }, 60);\n  }\n  function renderPosts(reason){\n    if (renderPostsBusy) {\n      scheduleRenderPosts(reason || 'busy');\n      return;\n    }\n    renderPostsBusy = true;\n    renderPostsQueued = false;\n    state.feedDiagnostics.renders += 1;\n    try {\n    var feed = qs('#dsd-feed-container');\n    var approved = function(p){ return p.status === 'approved' || (p.moderation && p.moderation.state === 'approved'); };\n    var classifiedVisible = function(p){ return canViewClassified(p) && canViewPrivateRecord(p); };\n    var commentHydrationPosts = [];\n    if (feed) {\n      var surface = feed.getAttribute('data-dsd-feed-surface') || '';\n      var feedList = qs('[data-dsd-following-feed-list]', feed) || feed;\n      var publicPosts = state.posts.map(publicRenderablePost).filter(Boolean);\n      if (surface === 'following') {\n        var routeRoot = qs('[data-dsd-build=\"p11dz358\"]');\n        var filter = state.followingFilter || (routeRoot && routeRoot.dataset.dsdFollowingFilterActive) || 'following';\n        publicPosts = publicPosts.filter(function(p){\n          var authorUid = p.authorUid || '';\n          if (filter === 'favorites') return !!state.favoritesByUid[authorUid];\n          if (filter === 'recent' || filter === 'nearby') return !!state.followingByUid[authorUid] || !!state.favoritesByUid[authorUid];\n          return !!state.followingByUid[authorUid];\n        });\n        var empty = qs('[data-dsd-following-empty-state]', feed);\n        if (empty) empty.hidden = publicPosts.length > 0;\n      } else {\n        var mainFilter = state.feedFilter || 'all';\n        qsa('[data-dsd-feed-filter]').forEach(function(btn){\n          var active = (btn.getAttribute('data-dsd-feed-filter') || 'all') === mainFilter;\n          btn.classList.toggle('is-active', active);\n          btn.setAttribute('aria-pressed', active ? 'true' : 'false');\n        });\n        if (mainFilter === 'media') {\n          publicPosts = publicPosts.filter(function(p){ return (p.media || []).length > 0; });\n        } else if (mainFilter === 'following') {\n          publicPosts = publicPosts.filter(function(p){\n            var authorUid = p.authorUid || p.ownerUid || '';\n            return !!state.followingByUid[authorUid] || !!state.favoritesByUid[authorUid];\n          });\n        }\n      }\n      publicPosts = sortByCreatedAtDesc(publicPosts);\n      var feedHtml = publicPosts.length ? publicPosts.map(postCard).join('') : (surface === 'following' ? '' : '<article class=\"dsd-feed368__empty\"><strong>No approved posts yet</strong><span>Approved public posts appear here when available.</span></article>');\n      replaceHtmlIfChanged(feedList, 'feed:' + surface + ':' + renderSignature(publicPosts) + ':comments:' + commentRenderSignature(publicPosts), feedHtml);\n      hydrateAvatarMedia(feedList);\n      hydrateMediaReads(feedList);\n      commentHydrationPosts = commentHydrationPosts.concat(publicPosts);\n    }\n    var profileList = qs('[data-dsd-profile-feed-list]');\n    if (profileList) {\n      var targetUid = viewedProfileUid();\n      var targetProfile = viewedProfile() || {};\n      var targetKey = routeProfileKey() || clean(targetProfile.profileKey || targetProfile.handle || '', '');\n      var privateBlocked = !canViewProfileContent(targetProfile);\n      var mine = privateBlocked ? [] : state.posts.map(function(p){\n        if (isOwnProfileRoute()) return isNormalContentRecord(p) && publicRecordVisible(p) && recordBelongsToProfile(p, targetUid, targetKey, 'authorUid') && classifiedVisible(p) ? p : null;\n        var rendered = publicRenderablePost(p);\n        return rendered && recordBelongsToProfile(rendered, targetUid, targetKey, 'authorUid') ? rendered : null;\n      }).filter(Boolean);\n      mine = sortByCreatedAtDesc(mine);\n      var accessCopy = restrictedShellText({ restrictedKind: profileRestrictionType(targetProfile) }, 'profile');\n      var privateShell = '<article class=\"dsd-up315__post dsd-up315__post--restricted\" data-dsd-profile-access-shell=\"true\"><strong>' + html(accessCopy.title) + '</strong><p>' + html(accessCopy.body) + '</p></article>';\n      replaceHtmlIfChanged(profileList, 'profile:' + targetUid + ':' + (privateBlocked ? profileRestrictionType(targetProfile) || 'restricted' : renderSignature(mine)) + ':comments:' + commentRenderSignature(mine), privateBlocked ? privateShell : (mine.length ? mine.map(postCard).join('') : '<article class=\"dsd-up315__post\"><strong>No profile posts yet</strong><p>This profile has no visible posts.</p></article>'));\n      hydrateAvatarMedia(profileList);\n      hydrateMediaReads(profileList);\n      commentHydrationPosts = commentHydrationPosts.concat(mine);\n    }\n    recordPostViews(commentHydrationPosts);\n    hydratePostComments(commentHydrationPosts);\n    bindPostMoreMenuActions(document);\n    qsa('[data-dsd-profile-content-tab=\"posts\"] strong').forEach(function(n){\n      var targetUid = viewedProfileUid();\n      var targetProfile = viewedProfile() || {};\n      var targetKey = routeProfileKey() || clean(targetProfile.profileKey || targetProfile.handle || '', '');\n      var visibleCountPosts = !canViewProfileContent(targetProfile) ? [] : state.posts.map(function(p){\n        if (isOwnProfileRoute()) return isNormalContentRecord(p) && publicRecordVisible(p) && recordBelongsToProfile(p, targetUid, targetKey, 'authorUid') && classifiedVisible(p) ? p : null;\n        var rendered = publicRenderablePost(p);\n        return rendered && recordBelongsToProfile(rendered, targetUid, targetKey, 'authorUid') ? rendered : null;\n      }).filter(Boolean);\n      n.textContent = String(visibleCountPosts.length);\n    });\n    renderRelationships();\n    applyProfileMediaFallbackFromRenderedAuthors();\n    focusRequestedPost();\n    focusRequestedComment();\n    } finally {\n      renderPostsBusy = false;\n      if (renderPostsQueued) scheduleRenderPosts('queued-after-render');\n      try {\n        document.documentElement.setAttribute('data-dsd-feed-render-count', String(state.feedDiagnostics.renders));\n        document.documentElement.setAttribute('data-dsd-feed-comment-listeners', String(state.feedDiagnostics.commentListeners || 0));\n        document.documentElement.setAttribute('data-dsd-feed-comment-loads', String(state.feedDiagnostics.commentLoads || 0));\n        document.documentElement.setAttribute('data-dsd-feed-comment-load-results', String(state.feedDiagnostics.commentLoadResults || 0));\n        document.documentElement.setAttribute('data-dsd-feed-comment-load-errors', String(state.feedDiagnostics.commentLoadErrors || 0));\n        document.documentElement.setAttribute('data-dsd-feed-last-comment-load', String(state.feedDiagnostics.lastCommentLoad || ''));\n        document.documentElement.setAttribute('data-dsd-feed-media-hydrations', String(state.feedDiagnostics.mediaHydrationRequests || 0));\n      } catch(e){}\n    }\n  }\n  function notificationTargetHref(n, cat){\n    n = n || {};\n    var postId = String(n.postId || n.targetPostId || n.sourcePostId || '').trim();\n    var commentId = String(n.commentId || n.targetCommentId || n.sourceCommentId || '').trim();\n    var storyId = String(n.storyId || n.targetStoryId || n.sourceStoryId || '').trim();\n    var conversationId = String(n.conversationId || n.targetConversationId || '').trim();\n    var profileKey = nonPlaceholderProfileKey(n.targetProfileKey || n.actorProfileKey || n.authorProfileKey || n.sourceProfileKey || n.ownerProfileKey || n.profileKey || '');\n    var targetUidValue = String(n.targetUid || n.actorUid || n.authorUid || n.sourceUid || n.ownerUid || '').trim();\n    var sourcePath = String(n.sourcePath || n.path || n.firestorePath || '').trim();\n    var sourceMatch;\n    if (!postId && sourcePath) {\n      sourceMatch = sourcePath.match(/(?:^|\\/)posts\\/([^\\/?#]+)/i);\n      if (sourceMatch) postId = sourceMatch[1] || '';\n    }\n    if (!commentId && sourcePath) {\n      sourceMatch = sourcePath.match(/(?:^|\\/)comments\\/([^\\/?#]+)/i);\n      if (sourceMatch) commentId = sourceMatch[1] || '';\n    }\n    if (!storyId && sourcePath) {\n      sourceMatch = sourcePath.match(/(?:^|\\/)stories\\/([^\\/?#]+)/i);\n      if (sourceMatch) storyId = sourceMatch[1] || '';\n    }\n    if (!profileKey && sourcePath) {\n      sourceMatch = sourcePath.match(/(?:^|\\/)(?:publicProfiles|profiles)\\/([^\\/?#]+)/i);\n      if (sourceMatch) profileKey = nonPlaceholderProfileKey(sourceMatch[1] || '');\n    }\n    if (!profileKey) {\n      var actorUidValue = String(n.actorUid || n.authorUid || n.sourceUid || n.ownerUid || '').trim();\n      var actorProfile = profileByUid(actorUidValue, n.actorProfileKey || n.authorProfileKey || n.sourceProfileKey || n.ownerProfileKey || '');\n      profileKey = nonPlaceholderProfileKey(actorProfile && (actorProfile.profileKey || actorProfile.handle) || '');\n    }\n    if (!profileKey) {\n      var profileText = String(n.actorHandle || n.authorHandle || n.sourceHandle || n.ownerHandle || n.targetHandle || n.handle || n.username || n.profile || '').replace(/^@+/, '');\n      profileKey = nonPlaceholderProfileKey(profileText);\n    }\n    var routedProfile = profileByUid(targetUidValue, profileKey || '') || publicProfileByIdentity(targetUidValue || profileKey || '') || publicProfileByKey(profileKey || '');\n    profileKey = nonPlaceholderProfileKey(routedProfile && (routedProfile.profileKey || routedProfile.handle) || profileKey);\n    if (postId && commentId) return postCommentPermalink(postId, commentId);\n    if (postId) return postPermalink(postId);\n    if (storyId) return '/pages/stories?story=' + encodeURIComponent(storyId);\n    if (conversationId || cat === 'messages') return '/pages/messages' + (conversationId ? '?conversationId=' + encodeURIComponent(conversationId) : '');\n    if (profileKey && (routedProfile || publicProfileByKey(profileKey))) return profileRouteHref(profileKey);\n    var href = String(n.href || '').trim();\n    if (href && !/\\/pages\\/notifications(?:$|[?#])/.test(href)) {\n      try {\n      var hrefUrl = new URL(href, window.location.origin);\n      if (/\\/pages\\/user-profile(?:$|[/?#])/.test(hrefUrl.pathname + hrefUrl.search)) {\n        var hrefProfile = nonPlaceholderProfileKey(hrefUrl.searchParams.get('profile') || '');\n          return hrefProfile && publicProfileByKey(hrefProfile) ? profileRouteHref(hrefProfile) : '/pages/users?route_rev=' + encodeURIComponent(BUILD);\n      }\n      } catch(e) {}\n      return href;\n    }\n    return '/pages/notifications';\n  }\n  function renderNotifications(){\n    var feed = qs('.dsd-noti321__feed');\n    if (!feed) return;\n    if (!hasCustomer() || !hasFirebaseAuth()) {\n      var gateTitle = hasCustomer() ? 'Account connection required' : 'Log in to view notifications';\n      var gateBody = hasCustomer()\n        ? 'Reconnect your account to load notifications.'\n        : 'Log in to see your notifications and account updates.';\n      feed.innerHTML = hasCustomer() ? bridgeGateHTML(gateTitle, gateBody) : privateGateHTML(gateTitle, gateBody);\n      state.notificationCounts = { total: 0, unread: 0, founder: 0 };\n      qsa('[data-dsd-notification-total]').forEach(function(n){ n.textContent = '0'; });\n      qsa('[data-dsd-notification-unread]').forEach(function(n){ n.textContent = '0'; });\n      qsa('[data-dsd-notification-founder]').forEach(function(n){ n.textContent = '0'; });\n      qsa('[data-dsd-notification-unread-count]').forEach(function(n){ n.textContent = '0'; n.hidden = true; });\n      qsa('.dsd-noti321__panel--founder').forEach(function(n){ n.hidden = true; });\n      qsa('.dsd-noti321__panel input').forEach(function(input){ input.disabled = true; });\n      return;\n    }\n    var visible = state.notifications.filter(function(n){ return publicRecordVisible(n) && (canModerate() || n.category !== 'founder'); });\n    state.notificationCounts = {\n      total: visible.length,\n      unread: visible.filter(function(n){ return !n.read; }).length,\n      founder: state.notifications.filter(function(n){ return n.category === 'founder' || n.type === 'founder'; }).length\n    };\n    function notificationProfile(n){\n      n = n || {};\n      var targetUid = n.actorUid || n.authorUid || n.sourceUid || n.ownerUid || '';\n      var targetKey = n.actorProfileKey || n.authorProfileKey || n.sourceProfileKey || n.ownerProfileKey || n.profileKey || '';\n      var profile = profileByUid(targetUid, targetKey) || publicProfileByIdentity(targetUid || targetKey);\n      if (!profile) {\n        var hrefProfile = '';\n        try {\n          var hrefUrl = new URL(String(n.href || ''), window.location.origin);\n          hrefProfile = hrefUrl.searchParams.get('profile') || '';\n        } catch(e){}\n        if (hrefProfile) profile = publicProfileByKey(hrefProfile);\n      }\n      if (!profile) {\n        var text = String([n.actorDisplayName, n.authorDisplayName, n.title, n.body].filter(Boolean).join(' ')).toLowerCase();\n        profile = (state.publicProfiles || []).filter(function(item){\n          var key = clean(item && (item.profileKey || item.handle || item.profile_key || '') || '', '').toLowerCase();\n          var name = clean(item && item.displayName || '', '').toLowerCase();\n          return (key && text.indexOf(key) !== -1) || (name && text.indexOf(name) !== -1);\n        })[0] || null;\n      }\n      if (!profile && ((targetUid && identityMatchesCurrent(targetUid, targetKey)) || (!targetUid && !targetKey && /^your\\b/i.test(String(n.body || n.title || ''))))) {\n        profile = state.profile || {};\n      }\n      return profile;\n    }\n    function notificationMediaItem(item, fallbackKind){\n      if (!item) return null;\n      if (typeof item === 'string') return { mediaId: item, kind: fallbackKind || 'image' };\n      var mediaId = readableMediaId(item) || item.contentMediaId || '';\n      if (!mediaId) return null;\n      return { mediaId: mediaId, kind: item.kind || item.mediaKind || item.contentMediaKind || fallbackKind || 'image', status: item.status || '' };\n    }\n    function notificationPreviewMedia(n){\n      var raw = [];\n      if (Array.isArray(n.previewMedia)) raw = raw.concat(n.previewMedia);\n      if (Array.isArray(n.contentMedia)) raw = raw.concat(n.contentMedia);\n      if (Array.isArray(n.media)) raw = raw.concat(n.media);\n      if (n.contentMediaId) raw.push({ mediaId: n.contentMediaId, kind: n.contentMediaKind || 'image' });\n      if (n.mediaId && n.mediaId !== n.thumbnailMediaId) raw.push({ mediaId: n.mediaId, kind: n.mediaKind || 'image' });\n      return raw.map(function(item){ return notificationMediaItem(item, 'image'); }).filter(Boolean).slice(0, 2);\n    }\n    feed.innerHTML = visible.length ? visible.map(function(n){\n      var nid = n.notificationId || n.id || '';\n      var cat = notificationCategory(n);\n      var unread = !n.read;\n      var href = notificationTargetHref(n, cat);\n      var actorProfile = notificationProfile(n) || (!n.actorUid && !n.actorProfileKey ? state.profile || {} : {});\n      var systemAlert = cat === 'founder' || cat === 'moderation' || String(n.type || '').toLowerCase() === 'moderation';\n      var thumbId = systemAlert ? '' : (canonicalProfileAvatarMediaId(actorProfile) || n.actorAvatarMediaId || n.profileMediaId || n.thumbnailMediaId || n.mediaId || '');\n      var initials = String(n.actorDisplayName || n.authorDisplayName || actorProfile.displayName || actorProfile.profileKey || n.profileKey || cat || 'DS').slice(0, 2).toUpperCase();\n      var storeLogo = String(window.DSDStoreLogoAsset || '').trim();\n      var thumb = thumbId ? '<span class=\"dsd-noti321__thumb\" data-dsd-avatar-media-id=\"' + html(thumbId) + '\" aria-label=\"Profile avatar\">' + html(initials) + '</span>' : (systemAlert ? '<span class=\"dsd-noti321__thumb dsd-noti321__thumb--store-logo\" aria-label=\"Store logo\">' + (storeLogo ? '<img src=\"' + html(storeLogo) + '\" alt=\"Detroit Sky Daddy logo\" loading=\"lazy\" decoding=\"async\">' : 'DS') + '</span>' : '<span class=\"dsd-noti321__thumb dsd-noti321__thumb--fallback\">' + html(initials) + '</span>');\n      var actorLine = publicDisplayName(n.actorDisplayName || actorProfile.displayName || actorProfile.profileKey || n.actorProfileKey || '', 'DSD member');\n      var previewMedia = notificationPreviewMedia(n);\n      var preview = previewMedia.length ? '<div class=\"dsd-noti321__preview\" aria-label=\"Notification media preview\">' + previewMedia.map(function(media){ return '<span class=\"dsd-noti321__preview-media\"' + mediaReadAttrs(media) + ' data-dsd-media-kind=\"' + html(media.kind || 'image') + '\" data-dsd-inline-media=\"true\"></span>'; }).join('') + '</div>' : '';\n      return '<article class=\"dsd-noti321__card dsd-launch-notification-card ' + (unread ? 'is-unread ' : '') + (cat === 'founder' ? 'is-founder' : '') + '\" data-notification-card data-notification-id=\"' + html(nid) + '\" data-category=\"' + html(cat) + '\" data-unread=\"' + unread + '\" data-dsd-target-href=\"' + html(href || '') + '\" tabindex=\"0\">' + thumb + '<div><strong>' + html(publicDisplayText(n.title || 'Notification', 'Notification')) + '</strong>' + (actorLine ? '<span class=\"dsd-noti321__actor\">' + html(actorLine) + '</span>' : '') + '<p>' + html(publicDisplayText(n.body || '', 'Account update')) + '</p>' + preview + '<small>' + html(formatDateTime(n.createdAt || n.updatedAt)) + '</small><span class=\"dsd-noti321__badge\">' + html(publicDisplayText(cat, 'update')) + '</span></div><div class=\"dsd-noti321__actions\">' + (href ? '<a href=\"' + html(href) + '\">Open</a>' : '') + '<button type=\"button\" data-dsd-mark-notification-read=\"' + html(nid) + '\"' + (!unread ? ' disabled' : '') + '>' + (unread ? 'Mark read' : 'Read') + '</button></div></article>';\n    }).join('') : '<article class=\"dsd-launch-notification-card\"><h3>No notifications yet</h3><p>New relationship, content, message, story, and safety updates appear here.</p></article>';\n    hydrateAvatarMedia(feed);\n    hydrateMediaReads(feed);\n    qsa('[data-dsd-notification-total]').forEach(function(n){ n.textContent = String(state.notificationCounts.total); });\n    qsa('[data-dsd-notification-unread]').forEach(function(n){ n.textContent = String(state.notificationCounts.unread); });\n    qsa('[data-dsd-notification-founder]').forEach(function(n){ n.textContent = String(canModerate() ? state.notificationCounts.founder : 0); });\n    qsa('[data-dsd-notification-unread-count]').forEach(function(n){ n.textContent = String(state.notificationCounts.unread); n.hidden = state.notificationCounts.unread === 0; });\n    emit('notifications', Object.assign({}, state.notificationCounts, { items: visible.slice(0, 50), notificationPreferences: state.profile && state.profile.notificationPreferences || {}, canModerate: canModerate() }));\n    qsa('.dsd-noti321__panel--founder').forEach(function(n){ n.hidden = !canModerate(); });\n    qsa('.dsd-noti321__panel input').forEach(function(input, index){\n      input.disabled = !hasCustomer();\n      var prefKey = input.getAttribute('data-dsd-notification-preference') || input.name || ('preference_' + index);\n      var prefs = state.profile && state.profile.notificationPreferences || {};\n      if (Object.prototype.hasOwnProperty.call(prefs, prefKey)) input.checked = !!prefs[prefKey];\n      if (input.dataset.dsdPrefBound === 'true') return;\n      input.dataset.dsdPrefBound = 'true';\n      input.addEventListener('change', function(){\n        var key = input.getAttribute('data-dsd-notification-preference') || input.name || input.getAttribute('aria-label') || ('preference_' + index);\n        var payload = {}; payload['notificationPreferences.' + clean(key, 'preference')] = !!input.checked;\n        setDoc(currentProfilePath(), payload, true).catch(function(error){ queueDraft('notification-preference', payload, error); });\n      });\n    });\n  }\n  function profileIdentity(targetUid, fallbackKey, fallbackName){\n    var profile = publicProfileByUid(targetUid || '') || publicProfileByKey(fallbackKey || '');\n    var key = (profile && (profile.profileKey || profile.handle)) || fallbackKey || targetUid || 'member';\n    var name = (profile && profile.displayName) || fallbackName || key || 'DSD member';\n    return {\n      uid: targetUid || (profile && profile.uid) || '',\n      key: key,\n      handle: '@' + publicHandleText(key, name, 'member'),\n      name: publicDisplayName(name, 'DSD member'),\n      avatarMediaId: profile && canonicalProfileAvatarMediaId(profile) || ''\n    };\n  }\n  function conversationPeer(conversation){\n    conversation = conversation || {};\n    var ids = (conversation.participantIds || conversation.participants || []).filter(Boolean);\n    var keys = (conversation.participantKeys || []).filter(Boolean);\n    var explicit = String(conversation.type || conversation.conversationType || conversation.kind || '').toLowerCase();\n    var isGroup = explicit === 'group' || explicit === 'groups' || ids.length > 2;\n    if (isGroup) {\n      var groupKeys = keys.filter(function(item){ return clean(item, '') !== profileKey(); }).sort();\n      var groupIds = ids.filter(function(item){ return !identityMatchesCurrent(item, ''); }).sort();\n      var groupProfiles = groupKeys.map(function(key){ return publicProfileByKey(key); }).filter(Boolean);\n      var groupNames = groupProfiles.length ? groupProfiles.map(function(profile){ return publicDisplayName(profile.displayName || profile.profileKey || profile.handle, 'DSD member'); }) : groupKeys;\n      var label = groupNames.length ? groupNames.slice(0, 2).join(', ') + (groupNames.length > 2 ? ' +' + String(groupNames.length - 2) : '') : 'Group conversation';\n      var firstProfile = groupProfiles[0] || null;\n      return {\n        uid: groupIds[0] || '',\n        key: firstProfile && (firstProfile.profileKey || firstProfile.handle) || groupKeys[0] || '',\n        handle: 'group',\n        name: 'Group: ' + label,\n        avatarMediaId: firstProfile && (firstProfile.avatarMediaId || firstProfile.thumbnailMediaId) || ''\n      };\n    }\n    var canonicalKeys = directConversationIdentityKeys(conversation);\n    var canonicalPeerKey = canonicalKeys.filter(function(item){ return clean(item, '') !== profileKey(); })[0] || '';\n    if (canonicalPeerKey) {\n      var canonicalProfile = publicProfileByKey(canonicalPeerKey);\n      return profileIdentity(canonicalProfile && canonicalProfile.uid || canonicalPeerKey, canonicalPeerKey, canonicalProfile && canonicalProfile.displayName || canonicalPeerKey);\n    }\n    var peerUid = ids.filter(function(item){ return !identityMatchesCurrent(item, ''); })[0] || ids[0] || conversation.recipientUid || '';\n    var peerKey = keys.filter(function(item){ return clean(item, '') !== profileKey(); })[0] || keys[0] || conversation.recipientProfileKey || conversation.profileKey || peerUid;\n    return profileIdentity(peerUid, peerKey, conversation.displayName || conversation.name || peerKey || conversation.conversationId || conversation.id || 'Conversation');\n  }\n  function messageSenderIdentity(message, mine){\n    if (mine) return profileIdentity(actorRelationshipIdentity(), profileKey(), displayName());\n    return profileIdentity(message.senderUid || message.authorUid || '', message.senderProfileKey || message.authorProfileKey || '', message.senderDisplayName || message.authorDisplayName || 'DSD member');\n  }\n  function messageAvatar(identity, extraClass, actionMode){\n    var cls = 'dsd-msg384__avatar' + (extraClass ? ' ' + extraClass : '');\n    var media = identity && identity.avatarMediaId ? ' data-dsd-avatar-media-id=\"' + html(identity.avatarMediaId) + '\"' : '';\n    var key = identity && identity.key || '';\n    var inner = '<span class=\"' + cls + '\"' + media + '>' + html(initials(identity && identity.name || key || 'DS')) + '</span>';\n    if (actionMode === 'plain-avatar') return inner;\n    if (actionMode === 'button-profile' && key) return '<span class=\"dsd-msg384__profile-avatar-link\" data-dsd-message-profile-link=\"' + html(key) + '\" role=\"link\" tabindex=\"0\" aria-label=\"View profile ' + html(identity && identity.name || key) + '\">' + inner + '</span>';\n    return extraClass && key ? '<a class=\"dsd-msg384__profile-avatar-link\" href=\"' + html(profileRouteHref(key)) + '\" data-dsd-message-profile-link=\"' + html(key) + '\" aria-label=\"View profile ' + html(identity && identity.name || key) + '\">' + inner + '</a>' : inner;\n  }\n  function directConversationIdentityKeys(conversation){\n    conversation = conversation || {};\n    var byKey = {};\n    function addKey(value){\n      var key = clean(value || '', '');\n      if (key) byKey[key] = true;\n    }\n    function addIdentity(value){\n      var raw = String(value || '').trim();\n      if (!raw) return;\n      var canonicalKey = canonicalProfileKeyForIdentity(raw);\n      if (canonicalKey) addKey(canonicalKey);\n    if (identityMatchesCurrent(raw, '')) addKey(profileKey());\n      var profile = publicProfileByIdentity(raw);\n      if (profile) addKey(profile.profileKey || profile.handle || raw);\n    }\n    (conversation.participantKeys || conversation.participantProfileKeys || conversation.participant_profile_keys || []).forEach(addKey);\n    (conversation.participantIds || conversation.participants || conversation.participant_ids || []).forEach(addIdentity);\n    var legacy = String(conversation.conversationId || conversation.id || conversation.legacy_conversation_id || '').toLowerCase();\n    if (legacy) {\n      state.publicProfiles.forEach(function(profile){\n        var identityValues = [profile.uid, profile.profileKey, profile.handle].filter(Boolean);\n        if (identityValues.some(function(value){ return value && legacy.indexOf(String(value).toLowerCase()) !== -1; })) addKey(profile.profileKey || profile.handle);\n      });\n      currentIdentityValues().forEach(function(value){\n        if (legacy.indexOf(String(value).toLowerCase()) !== -1) addKey(profileKey());\n      });\n    }\n    return Object.keys(byKey).filter(Boolean).sort();\n  }\n  function conversationDedupeKey(conversation, type){\n    if (type === 'groups') {\n      var groupKeys = directConversationIdentityKeys(conversation);\n      if (groupKeys.length >= 2) return 'groups:' + groupKeys.join('|');\n    }\n    if (type === 'direct') {\n      var keys = directConversationIdentityKeys(conversation);\n      if (keys.length >= 2) return 'direct:' + keys.join('|');\n      if (keys.length === 1) {\n        var peer = conversationPeer(conversation);\n        return 'direct:' + [keys[0], clean(peer && (peer.key || peer.uid) || '', 'member')].sort().join('|');\n      }\n    }\n    var ids = (conversation.participantIds || conversation.participants || []).filter(Boolean).sort();\n    var peerIdentity = conversationPeer(conversation);\n    return type + ':' + (ids.length ? ids.join('|') : (peerIdentity.uid || peerIdentity.key || conversation.conversationId || conversation.id || ''));\n  }\n  function conversationDedupeScore(conversation){\n    var score = recordMillis(conversation);\n    if (conversation && String(conversation.lastMessagePreview || '').trim()) score += 10000000000000;\n    return score;\n  }\n  function conversationType(conversation){\n    var explicit = String(conversation && (conversation.type || conversation.conversationType || conversation.kind || '') || '').toLowerCase();\n    if (explicit === 'group' || explicit === 'groups') return 'groups';\n    if (explicit === 'request' || explicit === 'requests' || String(conversation && conversation.state || '').toLowerCase() === 'request') return 'requests';\n    if (explicit === 'safety' || conversation && (conversation.reported || conversation.blocked || conversation.muted)) return 'safety';\n    var cid = String(conversation && (conversation.conversationId || conversation.id || '') || '').toLowerCase();\n    if (cid.indexOf('group-') === 0) return 'groups';\n    var ids = (conversation && (conversation.participantIds || conversation.participants) || []).filter(Boolean);\n    return ids.length > 2 ? 'groups' : 'direct';\n  }\n  function conversationById(conversationId){\n    var cid = String(conversationId || '').trim();\n    if (!cid) return null;\n    var match = (state.conversations || []).filter(function(conversation){\n      return String(conversation.conversationId || conversation.id || '') === cid;\n    })[0] || null;\n    if (match) return match;\n    var routeDraft = routeRecipientConversation();\n    if (routeDraft && String(routeDraft.conversationId || routeDraft.id || '') === cid) return routeDraft;\n    var routeGroupDraft = routeGroupConversation();\n    return routeGroupDraft && String(routeGroupDraft.conversationId || routeGroupDraft.id || '') === cid ? routeGroupDraft : null;\n  }\n  function normalizeMessageMedia(message){\n    message = message || {};\n    var media = [];\n    function add(item){\n      if (!item) return;\n      if (typeof item === 'string') item = { mediaId: item };\n      var id = readableMediaId(item) || item.media_id || item.mediaObjectId || item.media_object_id || item.supabaseMediaId || item.supabase_media_id || item.legacyMediaId || item.legacy_media_id || item.id || '';\n      if (!id) return;\n      var kind = String(item.kind || item.mediaKind || item.media_kind || item.contentType || item.content_type || '').toLowerCase().indexOf('video') !== -1 ? 'video' : 'image';\n      media.push(Object.assign({}, item, {\n        mediaId: item.mediaId || id,\n        id: item.id || id,\n        kind: kind,\n        status: item.status || item.uploadState || item.upload_state || 'uploaded'\n      }));\n    }\n    [\n      message.media,\n      message.attachments,\n      message.messageMedia,\n      message.message_media,\n      message.messageAttachments,\n      message.message_attachments,\n      message.mediaObjects,\n      message.media_objects,\n      message.mediaManifests,\n      message.media_manifests\n    ].forEach(function(list){\n      if (Array.isArray(list)) list.forEach(add);\n      else if (list && typeof list === 'object') add(list);\n    });\n    [\n      message.mediaId,\n      message.media_id,\n      message.mediaObjectId,\n      message.media_object_id,\n      message.attachmentMediaId,\n      message.attachment_media_id\n    ].forEach(function(id){ if (id) add({ mediaId: id, kind: message.mediaKind || message.media_kind || message.kind || 'image' }); });\n    var seen = {};\n    return media.filter(function(item){\n      var id = readableMediaId(item) || item.mediaId || item.id || '';\n      if (!id || seen[id]) return false;\n      seen[id] = true;\n      return true;\n    });\n  }\n  function messageMediaHTML(message){\n    var media = normalizeMessageMedia(message);\n    if (!media.length) return '';\n    return '<div class=\"dsd-msg384__message-media\" aria-label=\"Message media\">' + media.map(function(item){\n      var kind = String(item.kind || item.mediaKind || item.contentType || '').toLowerCase().indexOf('video') !== -1 ? 'video' : 'image';\n      var mediaId = readableMediaId(item);\n      return '<figure class=\"dsd-launch-media-chip dsd-launch-media-chip--' + html(kind) + ' dsd-msg384__media-chip\" data-dsd-inline-media=\"true\"' + mediaReadAttrs(item) + ' data-dsd-media-kind=\"' + html(kind) + '\" data-dsd-media-status=\"' + html(item.status || 'uploaded') + '\"></figure>';\n    }).join('') + '</div>';\n  }\n  function messageListHTML(conversationId, conversation){\n    if (conversation && conversationBlocked(conversation)) return '<article class=\"dsd-msg384__bubble is-system\"><p>Conversation blocked.</p><small>Unblock this participant to resume messaging.</small></article>';\n    var messages = (state.messagesByConversation[conversationId] || []).filter(messageDisplayable);\n    if (!messages.length) return '<article class=\"dsd-msg384__bubble is-system\"><p>Ready to send a message.</p><small>Messages appear here after delivery.</small></article>';\n    return messages.map(function(message){\n      var mine = identityMatchesCurrent(message.senderUid, message.senderProfileKey);\n      var sender = messageSenderIdentity(message, mine);\n      var stamp = formatDateTime(message.createdAt || message.sentAt || message.updatedAt);\n      var body = String(message.body || '').trim();\n      return '<article class=\"dsd-msg384__bubble ' + (mine ? 'is-me' : '') + '\" data-message-id=\"' + html(message.messageId || message.id || '') + '\">' + messageAvatar(sender, 'dsd-msg384__bubble-avatar') + '<div><strong>' + html(sender.name) + '</strong><em>' + html(sender.handle) + '</em>' + (body ? '<p>' + linkify(publicDisplayText(body, '')) + '</p>' : '') + messageMediaHTML(message) + '<small>' + html(stamp || 'Just now') + '</small></div></article>';\n    }).join('');\n  }\n  function messageListSignature(conversationId){\n    return (state.messagesByConversation[conversationId] || []).filter(messageDisplayable).map(function(message){\n      var media = normalizeMessageMedia(message);\n      return [\n        message && (message.messageId || message.id) || '',\n        valueMillis(message && (message.updatedAt || message.createdAt || message.sentAt)),\n        media.map(function(item){ return mediaSignatureId(item); }).join(',')\n      ].join(':');\n    }).join('|');\n  }\n  function messageDisplayable(message){\n    return !!(message && isNormalContentRecord(message) && !message.deletedAt && !message.deleted_at && !message.hiddenAt && !message.hidden_at && !message.archivedAt && !message.archived_at);\n  }\n  function conversationParticipantIdentities(conversation){\n    conversation = conversation || {};\n    var out = [];\n    var keys = (conversation.participantKeys || conversation.participantProfileKeys || conversation.participant_profile_keys || []).filter(Boolean);\n    var ids = (conversation.participantIds || conversation.participants || conversation.participant_ids || []).filter(Boolean);\n    var max = Math.max(keys.length, ids.length, 1);\n    for (var i = 0; i < max; i++) {\n      var key = keys[i] || '';\n      var id = ids[i] || '';\n      if (!key && identityMatchesCurrent(id, '')) key = profileKey();\n      var identity = profileIdentity(id, key, key || id || 'Participant');\n      if (!out.some(function(item){ return (item.uid && item.uid === identity.uid) || (item.key && item.key === identity.key); })) out.push(identity);\n    }\n    if (!out.length) out.push(conversationPeer(conversation));\n    return out;\n  }\n  function participantLinksHTML(conversation){\n    return conversationParticipantIdentities(conversation).map(function(person){\n      var href = person.key ? profileRouteHref(person.key) : '/pages/user-profile';\n      return '<a href=\"' + html(href) + '\" data-dsd-message-participant-profile=\"' + html(person.key || person.uid || '') + '\">' + messageAvatar(person, 'dsd-msg384__avatar', 'plain-avatar') + '<strong>' + html(person.name || person.handle || 'Participant') + '</strong></a>';\n    }).join('');\n  }\n  function refreshInlineMessageThread(conversationId){\n    var cid = String(conversationId || '').trim();\n    var conversation = conversationById(cid) || {};\n    var peer = conversationPeer(conversation);\n    var type = conversationType(conversation);\n    var recipientUid = type === 'groups' ? '' : (peer.uid || '');\n    var groupRecipients = type === 'groups' ? (conversation.groupRecipients || (conversation.participantKeys || conversation.participantProfileKeys || []).filter(function(key){ return key && key !== profileKey(); }).join(',')) : '';\n    var messages = qs('[data-dsd-msg384-inline-thread]');\n    if (messages) {\n      if (!messages.getAttribute('data-dsd-scroll-owner-bound')) {\n        messages.setAttribute('data-dsd-scroll-owner-bound', 'true');\n        messages.addEventListener('scroll', function(){\n          var distance = messages.scrollHeight - messages.scrollTop - messages.clientHeight;\n          messages.setAttribute('data-dsd-user-scroll-lock', distance > 48 ? 'true' : 'false');\n          messages.setAttribute('data-dsd-last-user-scroll-at', String(Date.now()));\n        }, { passive: true });\n        ['wheel', 'touchstart', 'touchmove', 'pointerdown', 'pointermove'].forEach(function(type){\n          messages.addEventListener(type, function(){\n            if (messages.scrollHeight > messages.clientHeight + 8) messages.setAttribute('data-dsd-user-scroll-lock', 'true');\n            messages.setAttribute('data-dsd-last-user-scroll-at', String(Date.now()));\n          }, { passive: true });\n        });\n      }\n      var previousCid = messages.getAttribute('data-dsd-rendered-conversation-id') || '';\n      var previousSignature = messages.getAttribute('data-dsd-message-signature') || '';\n      var nextSignature = messageListSignature(cid);\n      var distanceFromBottom = messages.scrollHeight - messages.scrollTop - messages.clientHeight;\n      var userScrollLocked = messages.getAttribute('data-dsd-user-scroll-lock') === 'true';\n      var recentManualScroll = (Date.now() - Number(messages.getAttribute('data-dsd-last-user-scroll-at') || 0)) < 45000;\n      var contentChanged = previousCid !== cid || previousSignature !== nextSignature;\n      var sameConversation = previousCid === cid;\n      var forcePinRequested = !!(cid && state.messageScrollPinNext === cid);\n      if (forcePinRequested && sameConversation && recentManualScroll) {\n        state.messageScrollPinNext = '';\n        forcePinRequested = false;\n        messages.setAttribute('data-dsd-user-scroll-lock', 'true');\n      }\n      var forcePinToBottom = forcePinRequested;\n      var preserveScroll = !forcePinToBottom && sameConversation && !!previousCid && (userScrollLocked || recentManualScroll || distanceFromBottom > 8);\n      var shouldPinToBottom = forcePinToBottom || (!preserveScroll && !recentManualScroll && !userScrollLocked && (!previousCid || !sameConversation || (contentChanged && distanceFromBottom < 4)));\n      if (contentChanged) {\n        var previousScrollTop = messages.scrollTop;\n        messages.innerHTML = cid ? messageListHTML(cid, conversation) : '<article class=\"dsd-msg384__bubble is-system\"><p>Select a conversation.</p><small>Messages and replies stay inline on this page.</small></article>';\n        messages.setAttribute('data-dsd-rendered-conversation-id', cid);\n        messages.setAttribute('data-dsd-message-signature', nextSignature);\n        if (preserveScroll) window.setTimeout(function(){ try { messages.scrollTop = Math.min(previousScrollTop, Math.max(0, messages.scrollHeight - messages.clientHeight)); messages.setAttribute('data-dsd-user-scroll-lock', 'true'); } catch(e){} }, 0);\n        else if (shouldPinToBottom) window.setTimeout(function(){ try { messages.scrollTop = messages.scrollHeight; messages.setAttribute('data-dsd-user-scroll-lock', 'false'); } catch(e){} }, 0);\n        else messages.setAttribute('data-dsd-user-scroll-lock', 'true');\n        if (forcePinToBottom) state.messageScrollPinNext = '';\n      }\n    }\n    var form = qs('[data-dsd-inline-message-form]');\n    if (form) {\n      if (qs('[name=\"recipientUid\"]', form)) qs('[name=\"recipientUid\"]', form).value = recipientUid;\n      if (qs('[name=\"conversationId\"]', form)) qs('[name=\"conversationId\"]', form).value = cid;\n      if (qs('[name=\"groupRecipients\"]', form)) qs('[name=\"groupRecipients\"]', form).value = groupRecipients;\n    }\n    var participants = qs('[data-dsd-msg384-participants]');\n    if (participants) participants.innerHTML = cid ? participantLinksHTML(conversation) : '<a href=\"/pages/user-profile\"><span class=\"dsd-msg384__avatar\">DS</span><strong>Select a thread</strong></a>';\n    hydrateAvatarMedia(document);\n    hydrateMediaReads(document);\n  }\n  function refreshMessageActionControls(conversation){\n    var peer = conversation ? conversationPeer(conversation) : null;\n    var peerUid = peer && peer.uid || '';\n    var blocked = !!(peerUid && relationshipBlocked(peerUid));\n    var actionable = !!(conversation && peerUid && !identityMatchesCurrent(peerUid, peer && peer.key) && conversationType(conversation) !== 'groups');\n    qsa('[data-dsd-message-action=\"block\"], [data-dsd-message-action=\"unblock\"]').forEach(function(button){\n      var action = button.getAttribute('data-dsd-message-action') || '';\n      var show = actionable && (action === 'unblock' ? blocked : !blocked);\n      button.hidden = !show;\n      button.disabled = !show;\n      button.setAttribute('aria-hidden', show ? 'false' : 'true');\n    });\n  }\n  function renderMessageStarter(root){\n    root = root || qs('[data-dsd-msg384]') || document;\n    var input = qs('[data-dsd-msg384-start-search]', root);\n    var results = qs('[data-dsd-msg384-start-results]', root);\n    if (!input || !results) return;\n    var query = String(input.value || '').trim().toLowerCase();\n    if (!query) {\n      results.innerHTML = '';\n      results.hidden = true;\n      return;\n    }\n    var matches = state.publicProfiles.filter(function(profile){\n      var key = profile.profileKey || profile.handle || '';\n      if (!profile.uid || identityMatchesCurrent(profile.uid, profile.profileKey || profile.handle || '')) return false;\n      var text = [profile.displayName, key, profile.bio].join(' ').toLowerCase();\n      return publicProfileVisible(profile) && text.indexOf(query) !== -1;\n    }).slice(0, 6);\n    results.hidden = matches.length === 0;\n    results.innerHTML = matches.length ? matches.map(function(profile){\n      var key = profile.profileKey || profile.handle || profile.uid || '';\n      var name = publicDisplayName(profile.displayName || key || 'DSD member', 'DSD member');\n      var media = canonicalProfileAvatarMediaId(profile);\n      var avatar = '<span class=\"dsd-msg384__avatar\"' + (media ? ' data-dsd-avatar-media-id=\"' + html(media) + '\"' : '') + '>' + html(initials(name || key)) + '</span>';\n      return '<button type=\"button\" data-dsd-start-message-profile=\"' + html(key) + '\" data-recipient-uid=\"' + html(profile.uid || '') + '\">' + avatar + '<span><strong>' + html(name) + '</strong><em>@' + html(publicHandleText(key, name, 'member')) + '</em></span></button>';\n    }).join('') : '<span class=\"dsd-msg384__start-empty\">No profile matches</span>';\n    hydrateAvatarMedia(results);\n  }\n  function renderMessages(){\n    var root = qs('[data-dsd-msg384]');\n    if (!root) return;\n    if (!hasCustomer()) {\n      root.removeAttribute('data-dsd-message-profile-pending');\n      root.setAttribute('data-dsd-message-public-fail-closed', BUILD);\n      root.innerHTML = '<section class=\"dsd-msg384__layout dsd-msg384__layout--public dsd-social-private-auth-gate\" data-dsd-auth-gate data-dsd-owner=\"MessagesRouteController\" aria-label=\"Messages access gate\"><article class=\"dsd-launch-auth-required\"><h1>Log in to use messages</h1><p>Messages are available only to active logged-in profiles.</p><a class=\"dsd-launch-action\" href=\"' + html(loginReturnUrl()) + '\">Log in</a></article></section>';\n      return;\n    }\n    if (!hasCanonicalPrivateSocialSession()) {\n      root.removeAttribute('data-dsd-message-public-fail-closed');\n      root.setAttribute('data-dsd-message-profile-pending', BUILD);\n      claim('messages-session:pending-canonical-shell-preserved', { bridgeChecked: !!state.bridgeChecked, firebaseAuthenticated: hasFirebaseAuth(), supabaseCutoverReady: supabaseCutoverReady(), canonical: 'supabase-messages-session' });\n      return;\n    }\n    root.removeAttribute('data-dsd-message-profile-pending');\n    if (!hasActiveProfile()) {\n      root.removeAttribute('data-dsd-message-public-fail-closed');\n      root.setAttribute('data-dsd-message-active-profile-pending', BUILD);\n      claim('messages-session:active-profile-pending-canonical-shell-preserved', { bridgeChecked: !!state.bridgeChecked, canonical: 'supabase-messages-session' });\n      return;\n    }\n    root.removeAttribute('data-dsd-message-active-profile-pending');\n    var requested = routeRequestedConversationId();\n    if (requested) state.activeConversationId = requested;\n    function conversationDisplayable(c){\n      return isNormalContentRecord(c) && !c.archived_at && !c.deleted_at && String(c.moderation_state || '').toLowerCase() !== 'archived';\n    }\n    function conversationReachableForUnblock(c){\n      var id = String(c && (c.conversationId || c.id) || '');\n      return !!(id && id === state.activeConversationId && conversationBlocked(c));\n    }\n    var routeDraft = routeRecipientConversation();\n    var routeGroupDraft = routeGroupConversation();\n    var conversationRecords = state.conversations.filter(function(c){\n      return conversationDisplayable(c) && conversationParticipantMatch(c) && (!conversationBlocked(c) || conversationReachableForUnblock(c));\n    });\n    function hasConversationDedupeMatch(candidate){\n      if (!candidate) return false;\n      var candidateType = conversationType(candidate);\n      var candidateKey = conversationDedupeKey(candidate, candidateType);\n      return conversationRecords.some(function(c){\n        return String(c.conversationId || c.id || '') === String(candidate.conversationId || candidate.id || '') ||\n          conversationDedupeKey(c, conversationType(c)) === candidateKey;\n      });\n    }\n    if (routeDraft && (!conversationBlocked(routeDraft) || conversationReachableForUnblock(routeDraft)) && !hasConversationDedupeMatch(routeDraft)) conversationRecords = conversationRecords.concat([routeDraft]);\n    if (routeGroupDraft && !conversationBlocked(routeGroupDraft) && !hasConversationDedupeMatch(routeGroupDraft)) conversationRecords = conversationRecords.concat([routeGroupDraft]);\n    if (!state.activeConversationId && conversationRecords[0]) state.activeConversationId = conversationRecords[0].conversationId || conversationRecords[0].id || '';\n    var activeConversation = conversationRecords.filter(function(c){ return (c.conversationId || c.id) === state.activeConversationId; })[0] || null;\n    if (state.activeConversationId && !activeConversation && conversationRecords[0] && !requested) {\n      state.activeConversationId = conversationRecords[0].conversationId || conversationRecords[0].id || '';\n      activeConversation = conversationRecords.filter(function(c){ return (c.conversationId || c.id) === state.activeConversationId; })[0] || null;\n    }\n    if (state.activeConversationId && !activeConversation && !conversationRecords.length && !requested) state.activeConversationId = '';\n    var activeTabButton = qs('[data-dsd-msg384-tab].is-active', root || document);\n    var activeTab = activeTabButton && activeTabButton.getAttribute('data-dsd-msg384-tab') || root && root.getAttribute('data-default-tab') || 'all';\n    qsa('[data-dsd-msg384-tab]', root || document).forEach(function(button){\n      button.classList.toggle('is-active', (button.getAttribute('data-dsd-msg384-tab') || 'all') === activeTab);\n    });\n    var searchValue = String((qs('[data-dsd-msg384-search]', root || document) || {}).value || '').trim().toLowerCase();\n    renderMessageStarter(root || document);\n    var conversationsByKey = {};\n    conversationRecords.forEach(function(c){\n      var type = conversationType(c);\n      var key = conversationDedupeKey(c, type);\n      var current = conversationsByKey[key];\n      if (!current || conversationDedupeScore(c) >= conversationDedupeScore(current)) conversationsByKey[key] = c;\n    });\n    var displayConversations = Object.keys(conversationsByKey).map(function(key){ return conversationsByKey[key]; }).sort(function(a, b){ return recordMillis(b) - recordMillis(a); });\n    if (state.activeConversationId) {\n      var activeRawConversation = conversationRecords.filter(function(c){ return String(c.conversationId || c.id || '') === String(state.activeConversationId || ''); })[0] || null;\n      if (activeRawConversation) {\n        var activeDedupeKey = conversationDedupeKey(activeRawConversation, conversationType(activeRawConversation));\n        var canonicalActiveConversation = conversationsByKey[activeDedupeKey] || activeRawConversation;\n        state.activeConversationId = canonicalActiveConversation.conversationId || canonicalActiveConversation.id || state.activeConversationId;\n      }\n    }\n    var filteredConversations = displayConversations.filter(function(c){\n      var peer = conversationPeer(c);\n      var type = conversationType(c);\n      var tabOk = activeTab === 'all' || activeTab === type;\n      var haystack = [peer.name, peer.handle, c.lastMessagePreview, c.conversationId || c.id, type].join(' ').toLowerCase();\n      return tabOk && (!searchValue || haystack.indexOf(searchValue) !== -1);\n    });\n    if (state.activeConversationId) hydrateConversationMessages(state.activeConversationId);\n    var rail = qs('.dsd-msg384__rail');\n    if (rail) {\n      qsa('[data-dsd-launch-thread]', rail).forEach(function(n){ n.remove(); });\n      if (filteredConversations.length) {\n        var search = qs('.dsd-msg384__search', rail);\n        var htmlThreads = filteredConversations.map(function(c){\n          var id = c.conversationId || c.id || '';\n          var peer = conversationPeer(c);\n          var stamp = formatDateTime(c.lastMessageAt || c.updatedAt || c.createdAt);\n          var unread = Number(c.unreadCount || c.unread || 0);\n          var type = conversationType(c);\n          return '<button type=\"button\" class=\"dsd-msg384__thread ' + (id === state.activeConversationId ? 'is-active' : '') + (unread ? ' is-unread' : '') + '\" data-dsd-launch-thread data-dsd-msg384-thread data-conversation-id=\"' + html(id) + '\" data-type=\"' + html(type) + '\" data-state=\"' + html(c.state || 'active') + '\" data-name=\"' + html(peer.name) + '\" data-handle=\"' + html(peer.handle) + '\" data-preview=\"' + html(publicDisplayText(c.lastMessagePreview || '', 'Message')) + '\">' + messageAvatar(peer, '', 'button-profile') + '<div><strong>' + html(peer.name) + '</strong><span>' + html(peer.handle) + '</span><p>' + html(publicDisplayText(c.lastMessagePreview || '', 'Message')) + '</p></div><small>' + html(stamp || '') + '</small></button>';\n        }).join('');\n        if (search) search.insertAdjacentHTML('afterend', htmlThreads);\n        else rail.insertAdjacentHTML('afterbegin', htmlThreads);\n      }\n      qsa('[data-dsd-msg384-empty]', rail).forEach(function(empty, index){\n        empty.hidden = index === 0 ? displayConversations.length > 0 : !(displayConversations.length > 0 && !filteredConversations.length);\n      });\n    }\n    qsa('[data-dsd-msg384-count=\"all\"]').forEach(function(n){ n.textContent = String(displayConversations.length); });\n    qsa('[data-dsd-msg384-count=\"direct\"]').forEach(function(n){ n.textContent = String(displayConversations.filter(function(c){ return conversationType(c) === 'direct'; }).length); });\n    qsa('[data-dsd-msg384-count=\"groups\"]').forEach(function(n){ n.textContent = String(displayConversations.filter(function(c){ return conversationType(c) === 'groups'; }).length); });\n    qsa('[data-dsd-msg384-count=\"requests\"]').forEach(function(n){ n.textContent = String(displayConversations.filter(function(c){ return conversationType(c) === 'requests'; }).length); });\n    qsa('[data-dsd-msg384-count=\"safety\"]').forEach(function(n){ n.textContent = String(displayConversations.filter(function(c){ return conversationType(c) === 'safety'; }).length); });\n    var unreadMessages = displayConversations.reduce(function(total, c){ return total + Number(c.unreadCount || c.unread || 0); }, 0);\n    qsa('[data-dsd-message-unread-count]').forEach(function(n){ n.textContent = String(unreadMessages); n.hidden = unreadMessages === 0; });\n    if (activeConversation) {\n      var activePeer = conversationPeer(activeConversation);\n      var activeName = qs('[data-dsd-msg384-active-name]');\n      var activeHandle = qs('[data-dsd-msg384-active-handle]');\n      var activeAvatar = qs('[data-dsd-msg384-active-avatar]');\n      if (activeName) activeName.textContent = activePeer.name;\n      if (activeHandle) activeHandle.textContent = activePeer.handle;\n      if (activeAvatar) {\n        activeAvatar.textContent = initials(activePeer.name || activePeer.key || 'DS');\n        activeAvatar.setAttribute('data-dsd-message-profile-link', activePeer.key || '');\n        activeAvatar.setAttribute('role', 'button');\n        activeAvatar.setAttribute('tabindex', activePeer.key ? '0' : '-1');\n        if (activePeer.avatarMediaId) {\n          activeAvatar.setAttribute('data-dsd-avatar-media-id', activePeer.avatarMediaId);\n          delete activeAvatar.dataset.dsdAvatarHydrated;\n          delete activeAvatar.dataset.dsdAvatarHydratedMediaId;\n        } else {\n          activeAvatar.removeAttribute('data-dsd-avatar-media-id');\n          delete activeAvatar.dataset.dsdAvatarHydrated;\n          delete activeAvatar.dataset.dsdAvatarHydratedMediaId;\n        }\n      }\n      qsa('[data-dsd-msg384-profile-link]').forEach(function(link){\n        if (activePeer.key) link.setAttribute('href', profileRouteHref(activePeer.key));\n      });\n    }\n    refreshMessageActionControls(activeConversation);\n    hydrateAvatarMedia(document);\n    prefillMessageComposer();\n    refreshInlineMessageThread(state.activeConversationId);\n  }\n  function visibleStories(){\n    var currentTime = Date.now();\n    var baseStories = (state.stories || []).map(function(story){\n      if (!story) return null;\n      if (storyExpired(story)) return null;\n      if (recordOwnedByCurrentProfile(story) || canModerate()) return story;\n      return publicRenderableStory(story);\n    }).filter(Boolean);\n    return sortByCreatedAtDesc(baseStories.filter(function(s){\n      var visibility = normalizeVisibility(s.visibility || (s.entity && s.entity.visibility) || 'public');\n      var expiresAt = valueMillis(s.expiresAt || s.expires_at || s.expireAt || s.ttl || s.expires);\n      if (!expiresAt) {\n        var createdAt = valueMillis(s.createdAt || s.created_at || s.publishedAt || s.published_at || s.submittedAt || s.submitted_at || s.updatedAt || s.updated_at);\n        if (createdAt) expiresAt = createdAt + 86400000;\n      }\n      var active = !expiresAt || expiresAt > currentTime;\n      var shell = isRestrictedShellRecord(s);\n      var approved = isApprovedPublicRecord(s);\n      var ownerVisible = recordOwnedByCurrentProfile(s);\n      var routeVisible = approved && (visibility === 'public' || visibility === 'gated' || visibility === 'private' || canonicalFounderProfileRecord(s));\n      return active && isNormalContentRecord(s) && publicRecordVisible(s) && (shell || (canViewClassified(s) && canViewPrivateRecord(s))) && (ownerVisible || canModerate() || routeVisible);\n    }));\n  }\n  function surfaceStories(){\n    var stories = visibleStories();\n    var onProfileRoute = /\\/pages\\/user-profile(?:$|[/?#])/.test(window.location.pathname + window.location.search);\n    var onStoriesRoute = /\\/pages\\/stories(?:$|[/?#])/.test(window.location.pathname + window.location.search);\n    var scope = onProfileRoute ? 'profile' : (state.storyScope || 'discovery');\n    if (onStoriesRoute && scope === 'profile' && !state.storyScopeUserSelected) scope = 'discovery';\n    if (onProfileRoute) {\n      var targetUid = viewedProfileUid();\n      var targetKey = routeProfileKey() || (viewedProfile() && (viewedProfile().profileKey || viewedProfile().handle)) || '';\n      if (targetUid || targetKey) stories = stories.filter(function(story){\n        return recordBelongsToProfile(story, targetUid, targetKey, 'ownerUid') || recordBelongsToProfile(story, targetUid, targetKey, 'authorUid');\n      });\n    } else if (onStoriesRoute) {\n      if (scope === 'profile') {\n        stories = hasFirebaseAuth() ? stories.filter(function(story){ return recordOwnedByCurrentProfile(story); }) : [];\n      } else if (scope === 'following') {\n        stories = stories.filter(function(story){\n          var ownerUid = story.ownerUid || '';\n          return !!state.followingByUid[ownerUid] || !!state.favoritesByUid[ownerUid];\n        });\n      } else if (scope === 'discovery') {\n        stories = stories.filter(function(story){ return !(story.universeId || story.galaxyId); });\n      }\n    }\n    return stories;\n  }\n  function storyById(id){\n    var stories = visibleStories();\n    return stories.filter(function(s){ return (s.storyId || s.id || '') === id; })[0] || null;\n  }\n  function storyWatchHTML(story){\n    if (!story) return '';\n    var canSeeWatchers = canModerate() || recordOwnedByCurrentProfile(story);\n    if (!canSeeWatchers) return '';\n    var rawWatchers = story.watchers || story.viewers || story.viewerIdentities || story.viewerList || [];\n    if (!Array.isArray(rawWatchers) && rawWatchers && typeof rawWatchers === 'object') {\n      rawWatchers = Object.keys(rawWatchers).map(function(key){ return Object.assign({ uid: key }, rawWatchers[key] || {}); });\n    }\n    var unique = Number(story.uniqueWatchCount || story.watchCount || story.viewCount || rawWatchers.length || 0);\n    var rows = (rawWatchers || []).slice(0, 30).map(function(viewer){\n      var label = viewer.displayName || viewer.profileKey || viewer.handle || viewer.uid || 'Viewer';\n      var when = formatDateTime(viewer.viewedAt || viewer.lastViewedAt || viewer.createdAt) || '';\n      return '<li><span>' + html(label) + '</span>' + (when ? '<time>' + html(when) + '</time>' : '') + '</li>';\n    }).join('');\n    return '<details class=\"dsd-story385__watch-sheet\" data-dsd-story-watch-sheet><summary>' + unique + ' watched</summary><div><strong>Viewer identities</strong><ul>' + (rows || '<li><span>No viewer identities recorded yet.</span></li>') + '</ul></div></details>';\n  }\n  function mergeStoryPatch(storyId, patch){\n    state.stories = (state.stories || []).map(function(story){\n      return (story.storyId || story.id || '') === storyId ? Object.assign({}, story, patch || {}) : story;\n    });\n  }\n  function recordStoryWatch(story){\n    if (!story) return;\n    var storyId = story.storyId || story.id || '';\n    if (!storyId || isRestrictedShellRecord(story) || state.storyWatchClaims[storyId]) return;\n    if (!shopifyAuthenticated()) return;\n    if (supabaseCutoverConfigured() && publicRecordVisible(story) && isApprovedPublicRecord(story)) {\n      state.storyWatchClaims[storyId] = now();\n      recordSupabaseViewCounter('story', { targetId: story.supabaseStoryId || storyId, legacyId: story.storyId || story.legacyStoryId || storyId }).then(function(result){\n        if (!result) return null;\n        mergeStoryPatch(storyId, {\n          viewCount: counterValue(result, ['viewCount', 'view_count', 'views', 'count'], story.viewCount || 0),\n          watchCount: counterValue(result, ['watchCount', 'watch_count', 'views', 'count'], story.watchCount || story.viewCount || 0),\n          uniqueWatchCount: counterValue(result, ['uniqueWatchCount', 'unique_watch_count', 'uniqueViews', 'unique_views'], story.uniqueWatchCount || 0)\n        });\n        if (state.activeStoryId === storyId) renderStories();\n        return result;\n      });\n      return;\n    }\n    if (!hasFirebaseAuth()) return;\n    if (story.ownerUid && !recordOwnedByCurrentProfile(story) && !canModerate()) return;\n    state.storyWatchClaims[storyId] = now();\n    var viewerId = actorRelationshipIdentity();\n    var watcherPath = 'stories/' + storyId + '/watchers/' + viewerId;\n    getDoc(watcherPath).then(function(existing){\n      if (existing && typeof existing.exists === 'function' && existing.exists()) return null;\n      var watcher = {\n        storyId: storyId,\n        viewerId: viewerId,\n        viewerUid: viewerId,\n        profileKey: profileKey(),\n        displayName: displayName(),\n        viewedAt: serverTimestamp(),\n        ownerUid: story.ownerUid || '',\n        source: 'LaunchSocialActivation'\n      };\n      var b = fb();\n      var bump = b && b.firestore && b.firestore.increment ? b.firestore.increment(1) : 1;\n      return setDoc(watcherPath, watcher, false).then(function(){\n        mergeStoryPatch(storyId, {\n          watchers: ((story.watchers || []).concat([Object.assign({}, watcher, { viewedAt: now() })])),\n          viewCount: Number(story.viewCount || 0) + 1,\n          watchCount: Number(story.watchCount || 0) + 1,\n          uniqueWatchCount: Number(story.uniqueWatchCount || 0) + 1\n        });\n        return setDoc('stories/' + storyId, { viewCount: bump, watchCount: bump, uniqueWatchCount: bump }, true).catch(function(error){\n          queueDraft('story-watch-counter', { storyId: storyId }, error);\n          return null;\n        });\n      });\n    }).catch(function(error){\n      queueDraft('story-watch', { storyId: storyId }, error);\n      delete state.storyWatchClaims[storyId];\n    });\n  }\n  function hydrateStoryWatchers(story){\n    if (!story || !(canModerate() || recordOwnedByCurrentProfile(story))) return;\n    var storyId = story.storyId || story.id || '';\n    if (!storyId || state.storyWatcherListeners[storyId]) return;\n    var off = listen('stories/' + storyId + '/watchers', function(items){\n      mergeStoryPatch(storyId, { watchers: items || [] });\n      if (state.activeStoryId === storyId) renderStories();\n    });\n    state.storyWatcherListeners[storyId] = off || true;\n  }\n  function storyActionsHTML(story){\n    var id = story && (story.storyId || story.id || '');\n    if (!id || !hasActiveProfile()) return '';\n    var actions = '<button type=\"button\" data-dsd-report-story=\"' + html(id) + '\">Report</button>';\n    var status = story.status || (story.moderation && story.moderation.state) || 'pending';\n    if (canModerate()) {\n      if (status !== 'approved') actions += '<button type=\"button\" data-dsd-approve-story=\"' + html(id) + '\">Approve</button>';\n      if (status !== 'hidden') actions += '<button type=\"button\" data-dsd-hide-story=\"' + html(id) + '\">Hide</button>';\n      if (status !== 'rejected') actions += '<button type=\"button\" data-dsd-reject-story=\"' + html(id) + '\">Reject</button>';\n      if (status !== 'approved') actions += '<button type=\"button\" data-dsd-restore-story=\"' + html(id) + '\">Restore</button>';\n    }\n    if (canModerate() || recordOwnedByCurrentProfile(story)) actions += '<button type=\"button\" data-dsd-delete-story=\"' + html(id) + '\">Delete</button>';\n    return '<div class=\"dsd-story385__actions\" data-dsd-story-actions-panel>' + actions + '</div>';\n  }\n  function renderStories(){\n    var trays = qsa('.dsd-story385__tray').filter(function(tray){ return !tray.closest('[data-dsd-mv395]'); });\n    if (!trays.length) return;\n    ensureStoryViewerShell();\n    var scopeLabels = { profile: 'Profile', feed: 'Feed', following: 'Following', discovery: 'Discovery' };\n    var onProfileRoute = /\\/pages\\/user-profile(?:$|[/?#])/.test(window.location.pathname + window.location.search);\n    var onStoriesRoute = /\\/pages\\/stories(?:$|[/?#])/.test(window.location.pathname + window.location.search);\n    var scope = onProfileRoute ? 'profile' : (state.storyScope || 'discovery');\n    if (onStoriesRoute && scope === 'profile' && !state.storyScopeUserSelected) scope = 'discovery';\n    if (!scopeLabels[scope]) scope = 'profile';\n    qsa('[data-dsd-story385-scope]').forEach(function(button){\n      button.classList.toggle('is-active', (button.getAttribute('data-dsd-story385-scope') || '') === scope);\n    });\n    var visible = surfaceStories();\n    var requestedStoryId = queryParam('story');\n    if (requestedStoryId && (state.lastRequestedStoryId !== requestedStoryId || state.activeStoryId !== requestedStoryId)) {\n      state.activeStoryId = requestedStoryId;\n      state.lastRequestedStoryId = requestedStoryId;\n      state.storySelectionExplicit = true;\n    }\n    if (state.activeStoryId && !visible.some(function(story){ return (story.storyId || story.id || '') === state.activeStoryId; }) && !requestedStoryId) {\n      state.activeStoryId = '';\n      state.storySelectionExplicit = false;\n    }\n    if (!state.activeStoryId && visible[0]) state.activeStoryId = visible[0].storyId || visible[0].id || '';\n    var selectedStory = visible.filter(function(s){ return (s.storyId || s.id || '') === state.activeStoryId; })[0] || null;\n    var waitingForRequestedStory = requestedStoryId && state.storySelectionExplicit && state.activeStoryId === requestedStoryId && !selectedStory;\n    if (!waitingForRequestedStory && (!selectedStory || (!state.storySelectionExplicit && isRestrictedShellRecord(selectedStory))) && visible.length) {\n      var firstOpenStory = visible.filter(function(s){ return !isRestrictedShellRecord(s); })[0] || visible[0];\n      state.activeStoryId = firstOpenStory.storyId || firstOpenStory.id || '';\n    }\n    var storyCards = visible.length ? visible.map(function(s){\n      s = hydrateRecordIdentity(s);\n      var id = s.storyId || s.id || '';\n      var media = safeMediaItemsForRecord(s)[0] || {};\n      var isShell = isRestrictedShellRecord(s);\n      var shellCopy = isShell ? restrictedShellText(s, 'story') : null;\n      var storyKey = s.authorProfileKey || s.ownerProfileKey || '';\n      var storyProfile = publicProfileByUid(s.authorUid || s.ownerUid || '') || publicProfileByKey(storyKey) || {};\n      var avatarId = canonicalProfileAvatarMediaId(storyProfile) || s.authorAvatarMediaId || s.ownerAvatarMediaId || '';\n      var storyAuthor = publicDisplayName(storyProfile.displayName || s.authorDisplayName || storyKey || 'Story', 'Story');\n      storyKey = storyProfile.profileKey || storyProfile.handle || storyKey;\n    var storyCaption = publicDisplayText(s.body || '', '');\n      var storyMediaId = readableMediaId(media);\n      var mediaChip = storyMediaId ? '<figure class=\"dsd-story385__media\"' + mediaReadAttrs(media) + ' data-dsd-media-kind=\"' + html(media.kind || 'image') + '\"></figure>' : '<span class=\"dsd-story385__media dsd-story385__media--fallback\">' + html(initials(storyAuthor || 'DS')) + '</span>';\n      var avatar = avatarId ? '<a class=\"dsd-story385__poster\" data-dsd-story-profile-link href=\"' + html(profileRouteHref(storyKey)) + '\" data-dsd-avatar-media-id=\"' + html(avatarId) + '\" aria-label=\"' + html(storyAuthor) + '\"></a>' : '<a class=\"dsd-story385__poster dsd-story385__poster--fallback\" data-dsd-story-profile-link href=\"' + html(profileRouteHref(storyKey)) + '\">' + html(initials(storyAuthor || 'DS')) + '</a>';\n      return '<article role=\"button\" tabindex=\"0\" class=\"dsd-story385__story dsd-story385__tray-card ' + (id === state.activeStoryId ? 'is-active' : '') + (isShell ? ' dsd-story385__tray-card--gated' : '') + '\" data-dsd-view-story=\"' + html(id) + '\">' + mediaChip + avatar + '<strong>' + html(storyAuthor) + '</strong>' + (isShell ? '<span>' + html(shellCopy.short) + '</span>' : (storyCaption ? '<em>' + html(String(storyCaption).slice(0, 96)) + '</em>' : '')) + '</article>';\n    }).join('') : '<div class=\"dsd-story385__empty\" data-dsd-story385-empty-state><strong>No ' + html(scopeLabels[scope]) + ' stories yet</strong><span>Stories for this view appear here when they are available.</span></div>';\n    trays.forEach(function(tray){\n      tray.innerHTML = storyCards;\n      hydrateAvatarMedia(tray);\n      hydrateMediaReads(tray);\n    });\n    var active = visible.filter(function(s){ return (s.storyId || s.id) === state.activeStoryId; })[0] || (waitingForRequestedStory ? null : visible[0]) || null;\n    var viewer = activeStoryViewer();\n    var overlayStoryViewer = viewer && viewer.hasAttribute && viewer.hasAttribute('data-dsd-story-overlay-viewer');\n    if (overlayStoryViewer) {\n      var overlay = viewer.closest('[data-dsd-immersive-overlay]');\n      var progress = qs('[data-dsd-story-progress]', viewer);\n      if (progress) {\n        progress.innerHTML = visible.map(function(story){\n          var sid = story.storyId || story.id || '';\n          return '<span class=\"' + (sid === state.activeStoryId ? 'is-active' : '') + '\"></span>';\n        }).join('');\n      }\n      if (overlay && active) {\n        var context = qs('.dsd-immersive-overlay__context', overlay);\n        if (context) {\n          context.innerHTML = storyContextHTML(active);\n          hydrateAvatarMedia(context);\n        }\n      }\n    }\n    var title = qs('[data-dsd-story385-title]', viewer || document);\n    var handle = qs('[data-dsd-story385-handle]', viewer || document);\n    var avatar = qs('[data-dsd-story385-avatar]', viewer || document);\n    var status = qs('[data-dsd-story385-status]', viewer || document);\n    var canvas = qs('.dsd-story385__canvas', viewer || document);\n    if (!active) {\n      var waitingLabel = waitingForRequestedStory ? 'Loading story' : 'No story selected';\n      if (title) title.textContent = waitingLabel;\n      if (handle) handle.textContent = waitingForRequestedStory ? '@stories' : 'Stories';\n      if (avatar) avatar.textContent = waitingForRequestedStory ? 'DS' : '--';\n      if (status) status.textContent = waitingLabel;\n      if (canvas) {\n        canvas.innerHTML = waitingForRequestedStory\n          ? '<div class=\"dsd-story385__loading\" data-dsd-story-loading>Loading story...</div>'\n          : '<div class=\"dsd-story385__empty\">Select a story to view it here.</div>';\n        setupStoryAdvance(null, canvas);\n      }\n      return;\n    }\n    var activeIsShell = isRestrictedShellRecord(active);\n    var activeShellCopy = activeIsShell ? restrictedShellText(active, 'story') : null;\n    if (title) title.textContent = activeIsShell ? activeShellCopy.title : publicDisplayText(active.body || 'Story', 'Story');\n    if (handle) handle.textContent = '@' + publicHandleText(active.authorProfileKey || active.ownerUid || 'story', active.authorDisplayName || 'Story', 'story');\n    if (avatar) {\n      var activeStoryKey = active.authorProfileKey || active.ownerProfileKey || '';\n      var activeStoryProfile = publicProfileByUid(active.authorUid || active.ownerUid || '') || publicProfileByKey(activeStoryKey) || {};\n      var activeStoryAvatarId = canonicalProfileAvatarMediaId(activeStoryProfile) || active.authorAvatarMediaId || active.ownerAvatarMediaId || '';\n      avatar.textContent = initials(publicDisplayName(activeStoryProfile.displayName || active.authorDisplayName || activeStoryKey || 'DS', 'DS'));\n      if (activeStoryAvatarId) {\n        avatar.setAttribute('data-dsd-avatar-media-id', activeStoryAvatarId);\n        delete avatar.dataset.dsdAvatarHydrated;\n        delete avatar.dataset.dsdAvatarHydratedMediaId;\n      } else {\n        avatar.removeAttribute('data-dsd-avatar-media-id');\n        delete avatar.dataset.dsdAvatarHydrated;\n        delete avatar.dataset.dsdAvatarHydratedMediaId;\n      }\n    }\n    if (canvas) {\n      if (activeIsShell) {\n        canvas.innerHTML = '<div class=\"dsd-gated-post-shell dsd-gated-story-shell\" data-dsd-restricted-shell=\"true\" data-dsd-restricted-kind=\"' + html(active.restrictedKind || classifiedRestrictionType(active) || 'gated') + '\"><strong>' + html(activeShellCopy.title) + '</strong><p>' + html(activeShellCopy.body) + '</p><a class=\"dsd-launch-action\" href=\"' + html(activeShellCopy.href) + '\">' + html(activeShellCopy.cta) + '</a></div>';\n        if (status) status.textContent = '';\n        setupStoryAdvance(null, canvas);\n        return;\n      }\n      recordStoryWatch(active);\n      hydrateStoryWatchers(active);\n      var media = safeMediaItemsForRecord(active).map(function(m){\n        var kind = m.kind || 'image';\n        return '<figure class=\"dsd-launch-media-chip\"' + mediaReadAttrs(m) + ' data-dsd-media-kind=\"' + html(kind) + '\" data-dsd-media-status=\"' + html(m.status || 'pending_upload') + '\"></figure>';\n      }).join('');\n      canvas.innerHTML = '<div class=\"dsd-story385__canvas-media\">' + media + '</div>' + (active.body ? '<p class=\"dsd-story385__caption\">' + linkify(publicDisplayText(active.body || '', '')) + '</p>' : '') + storyLinkPreviewHTML(active.body || '') + storyWatchHTML(active) + storyActionsHTML(active);\n      hydrateMediaReads(canvas);\n      setupStoryAdvance(active, canvas);\n    } else if (status) status.textContent = active.status || 'pending';\n  }\n  function setupStoryAdvance(story, canvas){\n    if (storyAdvanceTimer) {\n      window.clearTimeout(storyAdvanceTimer);\n      storyAdvanceTimer = null;\n    }\n    if (!story || !canvas) return;\n    var video = qs('video', canvas);\n    var expectedVideo = safeMediaItemsForRecord(story).some(function(item){\n      return String(item && (item.kind || item.mediaKind || item.contentType || item.content_type || '') || '').toLowerCase().indexOf('video') !== -1;\n    }) || !!qs('[data-dsd-media-kind=\"video\"]', canvas);\n    if (!video && expectedVideo) {\n      var pendingStoryId = story.storyId || story.id || '';\n      storyAdvanceTimer = window.setTimeout(function(){\n        if (!pendingStoryId || state.activeStoryId === pendingStoryId) setupStoryAdvance(story, canvas);\n      }, 1200);\n      return;\n    }\n    if (video) {\n      var storyMediaFrame = video.closest('[data-dsd-media-id]');\n      var storyMediaId = storyMediaFrame && storyMediaFrame.getAttribute('data-dsd-media-id') || '';\n      var manuallyPaused = !!(storyMediaId && state.videoManualPausedByMediaId[storyMediaId]);\n      video.autoplay = !manuallyPaused;\n      video.muted = state.videoMutedPreference !== false;\n      video.playsInline = true;\n      if (video.muted) video.setAttribute('muted', '');\n      else video.removeAttribute('muted');\n      if (manuallyPaused) video.removeAttribute('autoplay');\n      video.setAttribute('playsinline', '');\n      video.setAttribute('data-dsd-media-owner', 'LaunchStoryViewer');\n      video.setAttribute('data-dsd-media-surface', 'story-viewer');\n      var storyVideoStartedAt = 0;\n      var storyVideoEnded = false;\n      var activeStoryToken = story.storyId || story.id || '';\n      var fallbackDurationMs = 45000;\n      function sameActiveStory(){\n        return !!(!activeStoryToken || state.activeStoryId === activeStoryToken) && !!(video && document.body.contains(video));\n      }\n      function computedVideoFallbackMs(){\n        var duration = Number(video.duration || 0);\n        return duration && isFinite(duration) ? Math.min(240000, Math.max(12000, Math.ceil(duration * 1000) + 2200)) : fallbackDurationMs;\n      }\n      function scheduleStoryVideoFallback(delayMs){\n        if (storyAdvanceTimer) window.clearTimeout(storyAdvanceTimer);\n        storyAdvanceTimer = window.setTimeout(function(){\n          if (storyVideoEnded || !sameActiveStory()) return;\n          if (video.readyState < 2) return scheduleStoryVideoFallback(1400);\n          var duration = Number(video.duration || 0);\n          if (duration && video.currentTime < Math.max(0.75, duration - 0.35)) return scheduleStoryVideoFallback(Math.min(12000, Math.max(1200, Math.ceil((duration - video.currentTime) * 1000) + 800)));\n          if (video.paused && !video.ended && state.videoManualPausedByMediaId[storyMediaId]) return scheduleStoryVideoFallback(2500);\n          if (video.ended || (duration && video.currentTime >= Math.max(0.75, duration - 0.35))) stepStory(1);\n          else scheduleStoryVideoFallback(2500);\n        }, Math.max(900, Number(delayMs || computedVideoFallbackMs()) || fallbackDurationMs));\n      }\n      video.addEventListener('loadedmetadata', function(){\n        fallbackDurationMs = computedVideoFallbackMs();\n        scheduleStoryVideoFallback(fallbackDurationMs);\n      }, { once: true });\n      video.addEventListener('playing', function(){ storyVideoStartedAt = Date.now(); }, { once: true });\n      video.addEventListener('ended', function(){\n        storyVideoEnded = true;\n        if (!sameActiveStory()) return;\n        var duration = Number(video.duration || 0);\n        var playedLongEnough = duration ? video.currentTime >= Math.max(0.75, duration - 0.35) : (Date.now() - storyVideoStartedAt) > 1200;\n        if (playedLongEnough) stepStory(1);\n      }, { once: true });\n      if (window.DSDGMOR && typeof window.DSDGMOR.register === 'function') window.DSDGMOR.register(video, { owner: 'LaunchStoryViewer', surface: 'story-viewer' });\n      if (window.DSDGMOR && typeof window.DSDGMOR.setActive === 'function') {\n        window.DSDGMOR.setActive(video, { owner: 'LaunchStoryViewer', surface: 'story-viewer' }).then(function(){\n          if (video.autoplay && video.paused && typeof window.DSDGMOR.toggle === 'function') window.DSDGMOR.toggle(video, { owner: 'LaunchStoryViewer', surface: 'story-viewer' });\n        });\n      } else if (video.autoplay) {\n        var attempt = video.play();\n        if (attempt && typeof attempt.catch === 'function') attempt.catch(function(){});\n      }\n      scheduleStoryVideoFallback(video.readyState >= 1 ? computedVideoFallbackMs() : 45000);\n      return;\n    }\n    storyAdvanceTimer = window.setTimeout(function(){ stepStory(1); }, 5000);\n  }\n  function syncStoryRouteParam(storyId){\n    try {\n      if (!storyId || !/\\/pages\\/stories(?:$|[/?#])/.test(window.location.pathname + window.location.search) || !window.history || !window.history.replaceState) return;\n      var url = new URL(window.location.href);\n      url.searchParams.set('story', storyId);\n      window.history.replaceState({}, '', url.pathname + url.search + url.hash);\n      state.lastRequestedStoryId = storyId;\n    } catch(e){}\n  }\n  function stepStory(delta){\n    var visible = surfaceStories();\n    if (!visible.length) visible = visibleStories();\n    if (!visible.length) return;\n    var current = visible.map(function(s){ return s.storyId || s.id || ''; }).indexOf(state.activeStoryId);\n    if (current < 0) current = 0;\n    var next = (current + delta + visible.length) % visible.length;\n    state.storySelectionExplicit = true;\n    state.activeStoryId = visible[next].storyId || visible[next].id || '';\n    syncStoryRouteParam(state.activeStoryId);\n    renderStories();\n  }\n  function ensureStoryComposerModal(){\n    var root = canonicalOverlayRoot();\n    var layer = qs('[data-dsd-story-composer-layer]', root);\n    if (!layer) {\n      layer = document.createElement('div');\n      layer.className = 'dsd-up315__modal-layer dsd-story-composer-layer';\n      layer.setAttribute('data-dsd-story-composer-layer', 'true');\n      layer.setAttribute('data-dsd-owner', 'LaunchSocialActivation.StoryComposer');\n      layer.hidden = true;\n      layer.innerHTML = '<div class=\"dsd-up315__modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Create story\" tabindex=\"-1\"><header><strong>Create story</strong><button type=\"button\" data-dsd-story-composer-close aria-label=\"Close story composer\">&times;</button></header><section class=\"dsd-up315__modal-panel is-active\"><div class=\"dsd-up315__modal-card\"><form data-dsd-story-form data-dsd-global-story-composer><label>Story<textarea name=\"body\" rows=\"3\" maxlength=\"' + html(MAX.story) + '\" placeholder=\"Share a story\"></textarea></label><div class=\"dsd-composer-media-actions\" aria-label=\"Attach story media\">' + composerMediaButton('image', false, 'Attach story image') + composerMediaButton('video', false, 'Attach story video') + composerPolicyTools('Story') + '</div><div class=\"dsd-up315__composer-foot\">' + composerCountHTML(MAX.story) + '<button type=\"submit\">Create story</button></div></form></div></section></div>';\n      layer.addEventListener('click', function(ev){\n        if (ev.target === layer || ev.target.closest('[data-dsd-story-composer-close]')) closeStoryComposer();\n      });\n      root.appendChild(layer);\n    }\n    refreshPublicationControls(layer);\n    syncRestrictedActionControls(layer);\n    return layer;\n  }\n  function closeStoryComposer(){\n    var layer = qs('[data-dsd-story-composer-layer]');\n    if (layer) layer.hidden = true;\n    document.documentElement.classList.remove('dsd-story-composer-open');\n  }\n  function ensureGlobalPostComposerModal(){\n    var root = canonicalOverlayRoot();\n    var layer = qs('[data-dsd-global-post-composer-layer]', root);\n    if (!layer) {\n      layer = document.createElement('div');\n      layer.className = 'dsd-up315__modal-layer dsd-global-post-composer-layer';\n      layer.setAttribute('data-dsd-global-post-composer-layer', 'true');\n      layer.setAttribute('data-dsd-owner', 'LaunchSocialActivation.GlobalPostComposer');\n      layer.hidden = true;\n      layer.innerHTML = '<div class=\"dsd-up315__modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Create post\" tabindex=\"-1\"><header><strong>Create post</strong><button type=\"button\" data-dsd-global-post-composer-close aria-label=\"Close post composer\">&times;</button></header><section class=\"dsd-up315__modal-panel is-active\"><div class=\"dsd-up315__modal-card\"><form class=\"dsd-post-composer dsd-canonical-composer dsd-global-post-composer\" data-dsd-global-post-composer data-dsd-canonical-composer data-dsd-canonical-compact-composer><div class=\"dsd-up315__composer-head\">' + currentComposerAvatarHTML() + '<div><strong>' + html(composerDisplayName()) + '</strong><em>@' + html(composerProfileKey()) + '</em></div></div><div data-dsd-activation-status></div><textarea name=\"body\" rows=\"3\" maxlength=\"' + html(MAX.body) + '\" aria-label=\"Post text\" placeholder=\"What is happening?\"></textarea><div class=\"dsd-up315__composer-tools dsd-composer-media-actions\" aria-label=\"Attach media\">' + composerMediaButton('image', true, 'Attach post images') + composerMediaButton('video', false, 'Attach post video') + composerPolicyTools('Post') + '</div><div class=\"dsd-up315__composer-foot\">' + composerCountHTML(MAX.body) + '<button type=\"submit\">Post</button></div></form></div></section></div>';\n      layer.addEventListener('click', function(ev){\n        if (ev.target === layer || ev.target.closest('[data-dsd-global-post-composer-close]')) closeGlobalPostComposer();\n      });\n      root.appendChild(layer);\n    }\n    syncComposerIdentity(layer);\n    hydrateAvatarMedia(layer);\n    refreshPublicationControls(layer);\n    updateComposerCounters(layer);\n    return layer;\n  }\n  function closeGlobalPostComposer(){\n    var layer = qs('[data-dsd-global-post-composer-layer]');\n    if (layer) layer.hidden = true;\n    document.documentElement.classList.remove('dsd-global-post-composer-open');\n  }\n  function openGlobalPostComposer(){\n    if (!requireActiveProfile('create posts')) return;\n    var layer = ensureGlobalPostComposerModal();\n    layer.hidden = false;\n    document.documentElement.classList.add('dsd-global-post-composer-open');\n    var field = qs('textarea[name=\"body\"]', layer);\n    window.setTimeout(function(){ if (field) field.focus(); }, 0);\n  }\n  function markConversationRead(conversationId){\n    var readerId = actorRelationshipIdentity();\n    if (!conversationId || !readerId) return Promise.resolve(null);\n    var patch = { lastReadAt: serverTimestamp(), readBy: {} };\n    patch.readBy[readerId] = serverTimestamp();\n    return setDoc('conversations/' + conversationId, patch, true).catch(function(error){ queueDraft('message-read', { conversationId: conversationId }, error); return null; });\n  }\n  function openStoryOverlay(id){\n    var storyId = String(id || state.activeStoryId || '').trim();\n    if (!storyId) {\n      var candidates = visibleStories();\n      var firstStory = candidates.filter(function(item){ return !isRestrictedShellRecord(item); })[0] || candidates[0] || {};\n      storyId = String(firstStory.storyId || firstStory.id || '').trim();\n    }\n    if (storyId) {\n      state.activeStoryId = storyId;\n      state.storySelectionExplicit = true;\n      syncStoryRouteParam(storyId);\n    }\n    renderStories();\n    var viewer = ensureStoryOverlayViewer();\n    renderStories();\n    try {\n      if (storyId && /\\/pages\\/stories(?:$|[/?#])/.test(window.location.pathname + window.location.search) && window.history && window.history.replaceState) {\n        var url = new URL(window.location.href);\n        url.searchParams.set('story', storyId);\n        window.history.replaceState({}, '', url.pathname + url.search + url.hash);\n      }\n    } catch(e){}\n  }\n  function openStoryComposer(forceLayer){\n    var layer = ensureStoryComposerModal();\n    layer.hidden = false;\n    document.documentElement.classList.add('dsd-story-composer-open');\n    var field = qs('textarea, input, select', layer);\n    window.setTimeout(function(){ if (field) field.focus(); }, 0);\n  }\n  function moderationQueue(){\n    var queue = (state.queue || []).slice();\n    if (canModerate()) {\n      var derived = [];\n      state.posts.forEach(function(post){\n        var postState = post && (post.status || post.state || (post.moderation && post.moderation.state)) || '';\n        if (['reported', 'hidden', 'rejected', 'removed'].indexOf(postState) !== -1) {\n          derived.push(Object.assign({}, post, {\n            queueItemId: post.postId || post.id,\n            surface: 'post',\n            sourcePath: 'posts/' + (post.postId || post.id),\n            state: postState,\n            preview: post.body || post.caption || ''\n          }));\n        }\n      });\n      state.stories.forEach(function(story){\n        var storyState = story && (story.status || story.state || (story.moderation && story.moderation.state)) || '';\n        if (['reported', 'hidden', 'rejected', 'removed'].indexOf(storyState) !== -1) {\n          derived.push(Object.assign({}, story, {\n            queueItemId: story.storyId || story.id,\n            surface: 'story',\n            sourcePath: 'stories/' + (story.storyId || story.id),\n            state: storyState,\n            preview: story.body || story.caption || ''\n          }));\n        }\n      });\n      Object.keys(state.commentsByPost || {}).forEach(function(postId){\n        (state.commentsByPost[postId] || []).forEach(function(comment){\n          var commentState = comment && (comment.status || comment.state || (comment.moderation && comment.moderation.state)) || '';\n          if (['reported', 'hidden', 'rejected', 'removed'].indexOf(commentState) !== -1) {\n            var commentId = commentKey(comment);\n            derived.push(Object.assign({}, comment, {\n              queueItemId: postId + ':' + commentId,\n              surface: 'comment',\n              parentPostId: postId,\n              sourcePath: 'posts/' + postId + '/comments/' + commentId,\n              state: commentState,\n              preview: comment.body || comment.text || ''\n            }));\n          }\n        });\n      });\n      queue = mergeByKey(queue, derived, ['queueItemId', 'postId', 'storyId', 'id']);\n    }\n    return queue.map(function(item){\n      var id = item.postId || item.queueItemId || item.id || '';\n      var override = id && state.localPostStateOverrides[id];\n      return override ? Object.assign({}, item, override, { state: override.status || override.state || item.state, moderation: Object.assign({}, item.moderation || {}, override.moderation || {}) }) : item;\n    }).filter(function(item){\n      var itemState = item.state || item.status || (item.moderation && item.moderation.state) || 'pending';\n      return ['reported', 'hidden', 'rejected', 'removed'].indexOf(itemState) !== -1;\n    });\n  }\n  function moderationQueueActions(item, id){\n    var surface = item.surface || '';\n    var primary = '';\n    var source = item.sourcePath || item.firestorePath || '';\n    var commentMatch = String(source || '').match(/^posts\\/([^/]+)\\/comments\\/([^/]+)$/);\n    var commentPostId = item.parentPostId || (commentMatch ? commentMatch[1] : '');\n    var commentTargetId = commentMatch ? commentMatch[2] : id;\n    var directPost = (item.postId && item.postId === id) || source === ('posts/' + id);\n    var directStory = (item.storyId && item.storyId === id) || source === ('stories/' + id);\n    if (surface === 'comment' && commentPostId && commentTargetId) primary = '<button type=\"button\" data-dsd-approve-comment=\"' + html(commentTargetId) + '\" data-post-id=\"' + html(commentPostId) + '\">Approve</button><button type=\"button\" data-dsd-hide-comment=\"' + html(commentTargetId) + '\" data-post-id=\"' + html(commentPostId) + '\">Hide</button><button type=\"button\" data-dsd-reject-comment=\"' + html(commentTargetId) + '\" data-post-id=\"' + html(commentPostId) + '\">Reject</button><button type=\"button\" data-dsd-restore-comment=\"' + html(commentTargetId) + '\" data-post-id=\"' + html(commentPostId) + '\">Restore</button>';\n    else if (surface === 'safetyReport') return '<button type=\"button\" data-dsd-archive-safety-report=\"' + html(id) + '\">Resolve report</button><button type=\"button\" data-dsd-hide-queue=\"' + html(id) + '\">Hide</button><button type=\"button\" data-dsd-reject-queue=\"' + html(id) + '\">Reject</button>';\n    else if (directStory) primary = '<button type=\"button\" data-dsd-approve-story=\"' + html(id) + '\">Approve</button><button type=\"button\" data-dsd-hide-story=\"' + html(id) + '\">Hide</button><button type=\"button\" data-dsd-reject-story=\"' + html(id) + '\">Reject</button><button type=\"button\" data-dsd-restore-story=\"' + html(id) + '\">Restore</button>';\n    else if (directPost || item.postId) primary = '<button type=\"button\" data-dsd-approve-post=\"' + html(id) + '\">Approve</button><button type=\"button\" data-dsd-hide-post=\"' + html(id) + '\">Hide</button><button type=\"button\" data-dsd-reject-post=\"' + html(id) + '\">Reject</button>';\n    else primary = '<button type=\"button\" data-dsd-resolve-queue=\"' + html(id) + '\">Approve</button><button type=\"button\" data-dsd-hide-queue=\"' + html(id) + '\">Hide</button><button type=\"button\" data-dsd-reject-queue=\"' + html(id) + '\">Reject</button>';\n    return primary + '<button type=\"button\" data-dsd-restore-queue=\"' + html(id) + '\">Restore</button><button type=\"button\" data-dsd-classify-queue=\"mature\" data-queue-id=\"' + html(id) + '\">Mature</button><button type=\"button\" data-dsd-classify-queue=\"explicit\" data-queue-id=\"' + html(id) + '\">Explicit</button><button type=\"button\" data-dsd-classify-queue=\"gated\" data-queue-id=\"' + html(id) + '\">Gated</button>';\n  }\n  function moderationSurface(item){\n    var surface = item.surface || (item.postId ? 'post' : '');\n    var path = item.sourcePath || item.firestorePath || '';\n    var action = String(item.action || '').toLowerCase();\n    if (item.targetId && action === 'report-post') surface = 'post';\n    if (item.targetId && action === 'report-story') surface = 'story';\n    if (!surface && /^posts\\/[^/]+\\/comments\\//.test(path)) surface = 'comment';\n    if (!surface && /^posts\\//.test(path)) surface = 'post';\n    if (!surface && /^(profiles|publicProfiles)\\//.test(path)) surface = 'profile';\n    if (!surface && /^safetyReports\\//.test(path)) surface = 'safetyReport';\n    return surface || 'queue';\n  }\n  function moderationSourceRecord(item, queueItemId){\n    var source = queueSourcePath(item || {}, queueItemId || (item && (item.queueItemId || item.postId || item.id)) || '');\n    var match;\n    if ((match = String(source || '').match(/^posts\\/([^/]+)$/))) return localPostById(match[1]) || {};\n    if ((match = String(source || '').match(/^stories\\/([^/]+)$/))) return state.stories.filter(function(story){ return (story.storyId || story.id) === match[1]; })[0] || {};\n    if ((match = String(source || '').match(/^posts\\/([^/]+)\\/comments\\/([^/]+)$/))) {\n      return (state.commentsByPost[match[1]] || []).filter(function(comment){ return commentKey(comment) === match[2]; })[0] || {};\n    }\n    if (scopedModerationSource(source)) return item || {};\n    return {};\n  }\n  function moderationContext(item){\n    item = item || {};\n    var id = item.postId || item.storyId || item.queueItemId || item.id || '';\n    var target = moderationSourceRecord(item, id) || {};\n    var source = queueSourcePath(item, id);\n    var surface = moderationSurface(item);\n    var merged = Object.assign({}, item, target);\n    var preview = target.body || target.caption || target.title || target.name || item.preview || item.body || item.sourcePath || id;\n    var mediaCount = (target.media || item.media || []).length;\n    var author = merged.authorDisplayName || merged.authorProfileKey || merged.ownerProfileKey || merged.reporterProfileKey || merged.authorUid || merged.ownerUid || '';\n    var currentState = merged.status || item.state || (merged.moderation && merged.moderation.state) || 'pending';\n    var context = [];\n    if (author) context.push('Author: ' + author);\n    context.push('Path: ' + (source || id));\n    context.push('State: ' + currentState);\n    if (merged.visibility || (merged.entity && merged.entity.visibility)) context.push('Visibility: ' + (merged.visibility || merged.entity.visibility));\n    if (merged.contentRating || (merged.entity && merged.entity.contentRating)) context.push('Rating: ' + (merged.contentRating || merged.entity.contentRating));\n    if (merged.accessGate || (merged.entity && merged.entity.accessGate)) context.push('Gate: ' + (merged.accessGate || merged.entity.accessGate));\n    if (mediaCount) context.push('Media: ' + mediaCount);\n    return { surface: surface, sourcePath: source, preview: preview, context: context, mediaCount: mediaCount, target: target, merged: merged };\n  }\n  function moderationCanonicalPreview(context){\n    context = context || {};\n    var target = context.target || {};\n    var merged = context.merged || target || {};\n    var mediaCount = context.mediaCount || ((merged.media || []).length);\n    var title = merged.title || merged.name || context.surface || 'Queue item';\n    var text = publicDisplayText(context.preview || merged.body || merged.caption || merged.description || '', 'Review item');\n    var author = publicDisplayName(merged.authorDisplayName || merged.authorProfileKey || merged.ownerProfileKey || merged.ownerUid || '', 'Member');\n    var badges = [context.surface || 'queue', merged.visibility || (merged.entity && merged.entity.visibility), merged.contentRating || (merged.entity && merged.entity.contentRating), merged.accessGate || (merged.entity && merged.entity.accessGate)].filter(Boolean);\n    return '<div class=\"dsd-launch-queue-preview\"><div><strong>' + html(title) + '</strong><span>' + html(author) + '</span></div><p>' + html(String(text || '').slice(0, 180)) + '</p><small>' + badges.map(html).join(' | ') + (mediaCount ? ' | media ' + html(mediaCount) : '') + '</small></div>';\n  }\n  function moderationQueueCard(item){\n    var id = item.postId || item.queueItemId || item.id || '';\n    var surface = moderationSurface(item);\n    var itemState = item.state || item.status || (item.moderation && item.moderation.state) || 'pending';\n    var context = moderationContext(item);\n    var keywords = [surface, itemState, context.preview || '', item.preview || '', item.body || '', item.sourcePath || ''].join(' ');\n    var details = context.context && context.context.length ? '<dl class=\"dsd-mod386__context\">' + context.context.map(function(line){ var parts = line.split(': '); return '<div><dt>' + html(parts.shift() || 'Context') + '</dt><dd>' + html(parts.join(': ')) + '</dd></div>'; }).join('') + '</dl>' : '';\n    return '<article class=\"dsd-mod386__card dsd-launch-queue-card\" data-dsd-mod386-item data-dsd-founder390-item data-state=\"' + html(itemState) + '\" data-surface=\"' + html(surface) + '\" data-queue-id=\"' + html(id) + '\" data-keywords=\"' + html(keywords) + '\"><div class=\"dsd-mod386__card-top\"><span class=\"dsd-mod386__pill\">' + html(surface) + '</span><span class=\"dsd-mod386__pill dsd-mod386__pill--warn\">' + html(itemState) + '</span></div><h3>' + html(surface) + '</h3>' + moderationCanonicalPreview(context) + details + '<small>' + html(context.sourcePath || item.sourcePath || id) + '</small><div class=\"dsd-launch-actions\">' + moderationQueueActions(item, id) + '</div></article>';\n  }\n  function founderSearchAlias(value){\n    var raw = String(value || '').replace(/^@+/, '').trim();\n    var emailish = raw.replace(/^([a-z0-9._%+-]+)-([a-z0-9._%+-]+\\.(?:com|net|org|co|io))$/i, '$1@$2');\n    return emailish !== raw ? emailish : '';\n  }\n  function founderGovernanceCard(profile){\n    var key = profile.profileKey || profile.handle || '';\n    var targetUid = profile.uid || '';\n    var stateValue = profile.accountState || (profile.founderGovernance && profile.founderGovernance.state) || profile.status || 'active';\n    if (profile.isTestAccount || profile.testAccount || (profile.founderGovernance && profile.founderGovernance.testAccount)) stateValue = 'test';\n    if (profile.profileHidden) stateValue = 'hidden';\n    if (profile.searchable === false || profile.removeFromDiscovery === true) stateValue = 'removed';\n    var keywords = [\n      profile.displayName || '', key || '', targetUid || '', stateValue || '', profile.status || '', profile.accountState || '',\n      profile.handle, profile.username, profile.publicProfileKey,\n      founderSearchAlias(key), founderSearchAlias(profile.handle), founderSearchAlias(profile.username)\n    ].filter(Boolean).join(' ');\n    var avatar = profile.avatarMediaId ? '<span class=\"dsd-up315__mini-avatar\" data-dsd-avatar-media-id=\"' + html(profile.avatarMediaId) + '\">' + html(initials(profile.displayName || key)) + '</span>' : '<span class=\"dsd-up315__mini-avatar\">' + html(initials(profile.displayName || key)) + '</span>';\n    var controls = targetUid && !isFounderGovernanceTarget(targetUid, key)\n      ? '<button type=\"button\" data-dsd-govern-profile=\"suspend\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Suspend</button><button type=\"button\" data-dsd-govern-profile=\"disable\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Disable</button><button type=\"button\" data-dsd-govern-profile=\"hideProfile\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Hide profile</button><button type=\"button\" data-dsd-govern-profile=\"removeDiscovery\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Remove discovery</button><button type=\"button\" data-dsd-govern-profile=\"markTest\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Mark test</button><button type=\"button\" data-dsd-govern-profile=\"restoreProfile\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Restore profile</button><button type=\"button\" data-dsd-govern-profile=\"restore\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Restore account</button><button type=\"button\" data-dsd-govern-profile=\"enable\" data-target-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Re-enable</button>'\n      : '<span class=\"dsd-launch-muted\">Founder self-governance disabled here</span>';\n    return '<article class=\"dsd-founder390__user-card\" data-dsd-founder-user-card data-dsd-founder390-item data-state=\"' + html(stateValue) + '\" data-keywords=\"' + html(keywords) + '\" data-uid=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\"><div class=\"dsd-founder390__user-head\">' + avatar + '<div><h3>' + html(profile.displayName || key || 'Profile') + '</h3><p>@' + html(key || targetUid || 'profile') + '</p></div><span class=\"dsd-founder390__pill\">' + html(stateValue) + '</span></div><dl class=\"dsd-mod386__context\"><div><dt>UID</dt><dd>' + html(targetUid || 'unknown') + '</dd></div><div><dt>Status</dt><dd>' + html(profile.status || 'active') + '</dd></div><div><dt>Searchable</dt><dd>' + html(profile.searchable === false ? 'No' : 'Yes') + '</dd></div></dl><div class=\"dsd-launch-actions\">' + controls + '</div></article>';\n  }\n  function renderFounderUserManagement(){\n    var root = qs('[data-dsd-founder390-panel=\"users\"]');\n    if (!root) return;\n    var status = qs('[data-dsd-founder390-status]', root);\n    if (!canModerate()) {\n      if (status) status.textContent = 'Founder governance access required.';\n      return;\n    }\n    var cardsRoot = qs('.dsd-founder390__cards', root);\n    var profiles = mergeByKey((state.publicProfiles || []).slice(), [state.profile, state.viewProfile].filter(Boolean), ['uid', 'profileKey', 'handle', 'id']).sort(function(a, b){ return String(a.displayName || a.profileKey || '').localeCompare(String(b.displayName || b.profileKey || '')); });\n    if (status) status.textContent = profiles.length ? ('Loaded ' + profiles.length + ' profile governance records.') : 'No profile records loaded yet.';\n    if (cardsRoot) {\n      cardsRoot.innerHTML = profiles.length ? profiles.map(founderGovernanceCard).join('') : '<article><span class=\"dsd-founder390__pill\">Empty</span><h3>No user action records yet</h3><p>User profiles appear after profile records load.</p></article>';\n      hydrateAvatarMedia(cardsRoot);\n    }\n  }\n  function updateProfileGovernance(targetUid, key, action){\n    if (!canModerate() || !targetUid || isFounderGovernanceTarget(targetUid, key)) return Promise.resolve(null);\n    key = clean(key || '', '');\n    var accountState = '';\n    var profileStatus = '';\n    var searchable = true;\n    var removeFromDiscovery = false;\n    var discoveryEligible = true;\n    var profileHidden = false;\n    var isTestAccount = false;\n    if (action === 'suspend') { accountState = 'suspended'; profileStatus = 'active'; searchable = true; }\n    else if (action === 'disable') { accountState = 'disabled'; profileStatus = 'disabled'; searchable = false; }\n    else if (action === 'restore' || action === 'enable') { accountState = 'active'; profileStatus = 'active'; searchable = true; }\n    else if (action === 'hideProfile') { accountState = 'hidden'; profileStatus = 'hidden'; searchable = false; profileHidden = true; }\n    else if (action === 'removeDiscovery') { accountState = 'removed'; profileStatus = 'active'; searchable = false; removeFromDiscovery = true; discoveryEligible = false; }\n    else if (action === 'markTest') { accountState = 'test'; profileStatus = 'active'; searchable = false; removeFromDiscovery = true; discoveryEligible = false; isTestAccount = true; }\n    else if (action === 'restoreProfile') { accountState = 'active'; profileStatus = 'active'; searchable = true; }\n    else return Promise.resolve(null);\n    var governance = { state: accountState, action: action, reviewedBy: uid(), reviewedAt: serverTimestamp() };\n    var profilePatch = { accountState: accountState, status: profileStatus, searchable: searchable, removeFromDiscovery: removeFromDiscovery, discoveryEligible: discoveryEligible, profileHidden: profileHidden, isTestAccount: isTestAccount, testAccount: isTestAccount, founderGovernance: governance, moderation: { state: profileStatus === 'hidden' ? 'hidden' : 'approved', gate: 'founder-governance', lastActionAt: serverTimestamp(), reviewedBy: uid() }, entity: { moderationStatus: profileStatus === 'hidden' ? 'hidden' : 'approved' } };\n    var userPatch = { accountState: accountState, status: profileStatus, searchable: searchable, removeFromDiscovery: removeFromDiscovery, discoveryEligible: discoveryEligible, profileHidden: profileHidden, isTestAccount: isTestAccount, testAccount: isTestAccount, founderGovernance: governance };\n    var publicPatch = { accountState: accountState, status: profileStatus, searchable: searchable, removeFromDiscovery: removeFromDiscovery, discoveryEligible: discoveryEligible, profileHidden: profileHidden, isTestAccount: isTestAccount, testAccount: isTestAccount, founderGovernance: governance, entity: { moderationStatus: profileStatus === 'hidden' ? 'hidden' : 'approved' } };\n    var writes = [setDoc('profiles/' + targetUid, profilePatch, true), setDoc('users/' + targetUid, userPatch, true)];\n    if (key) writes.push(setDoc('publicProfiles/' + key, publicPatch, true));\n    return Promise.all(writes)\n      .then(function(){ return addDoc('founderAudit', { action: 'profileGovernance.' + action, actorUid: uid(), targetUid: targetUid, targetProfileKey: key, sourcePath: key ? ('publicProfiles/' + key) : ('profiles/' + targetUid), firestorePath: PATHS.founderAudit }).catch(function(){ return null; }); })\n      .then(function(){\n        state.publicProfiles = state.publicProfiles.map(function(profile){ return profile.uid === targetUid || (key && (profile.profileKey || profile.handle) === key) ? Object.assign({}, profile, publicPatch) : profile; });\n        renderFounderUserManagement();\n        renderDiscovery();\n        renderStatus('Profile governance updated: ' + action + '.');\n        return publicPatch;\n      })\n      .catch(function(error){ queueDraft('profile-governance', { targetUid: targetUid, key: key, action: action }, error); return null; });\n  }\n  function dedicatedGovernanceRouteActive(){\n    return !!(\n      qs('[data-dsd-governance-canonical=\"p11dz684\"], [data-dsd-governance-canonical=\"p11dz674\"]') ||\n      qs('[data-dsd-owner=\"ModerationOperationsCenter\"][data-dsd-governance-route-owner=\"canonical\"]') ||\n      qs('[data-dsd-owner=\"FounderOperationsCenter\"][data-dsd-governance-route-owner=\"canonical\"]') ||\n      qs('[data-dsd-owner=\"SafetyCenter\"][data-dsd-governance-route-owner=\"canonical\"]')\n    );\n  }\n  function renderModeration(){\n    var dedicatedGovernance = dedicatedGovernanceRouteActive();\n    var viewer = resolveViewerState();\n    try {\n      document.documentElement.setAttribute('data-dsd-viewer-authenticated', viewer.authenticated ? 'true' : 'false');\n      document.documentElement.setAttribute('data-dsd-viewer-roles', (viewer.roles || []).join(' '));\n      document.documentElement.setAttribute('data-dsd-viewer-founder-access', viewer.permissions.canAccessFounderOperations ? 'true' : 'false');\n      document.documentElement.setAttribute('data-dsd-viewer-moderation-access', viewer.permissions.canAccessModeration ? 'true' : 'false');\n      document.documentElement.setAttribute('data-dsd-viewer-bridge-checked', state.bridgeChecked ? 'true' : 'false');\n    } catch(e){}\n    qsa('[data-dsd-surface=\"founder-operations\"]').forEach(function(root){ root.hidden = !viewer.permissions.canAccessFounderOperations; });\n    qsa('[data-dsd-surface=\"moderation-center\"]').forEach(function(root){ root.hidden = !viewer.permissions.canAccessModeration; });\n    qsa('[data-dsd-surface=\"safety-center\"]').forEach(function(root){ root.hidden = !viewer.permissions.canAccessSafetyCenter; });\n    qsa('[data-dsd-runtime-founder-required]').forEach(function(root){ root.hidden = !viewer.permissions.canAccessAIC; });\n    qsa('[data-dsd-runtime-auth-required]').forEach(function(root){ root.hidden = !viewer.authenticated; });\n    qsa('[data-dsd-governance-denied=\"true\"]').forEach(function(root){\n      var allow = false;\n      if (root.classList.contains('dsd-safety389')) allow = viewer.permissions.canAccessSafetyCenter;\n      else if (root.classList.contains('dsd-mod386')) allow = viewer.permissions.canAccessModeration;\n      else if (root.classList.contains('dsd-founder390')) allow = viewer.permissions.canAccessFounderOperations;\n      else if (root.classList.contains('aic-unauthorized')) allow = viewer.permissions.canAccessAIC;\n      var pendingRole = viewer.authenticated && !allow && (state.bridgeAttempting || !state.bridgeChecked);\n      root.hidden = !!allow;\n      root.setAttribute('data-dsd-governance-gate-state', allow ? 'allowed' : (pendingRole ? 'verifying' : 'denied'));\n      if (!allow) {\n        var eyebrow = qs('.dsd-founder390__eyebrow, .dsd-mod386__eyebrow, .dsd-safety389__eyebrow', root);\n        var heading = qs('h1', root);\n        var body = qs('p:not(.dsd-safety389__eyebrow)', root);\n        if (pendingRole) {\n          if (eyebrow) eyebrow.textContent = 'Verifying';\n          if (heading) heading.textContent = 'Verifying account access';\n          if (body) body.textContent = 'Canonical role-state is still resolving this signed-in account.';\n        } else {\n          if (eyebrow) eyebrow.textContent = 'Restricted';\n          if (heading) heading.textContent = 'Account owner access required';\n          if (body) body.textContent = 'This protected page is available only to authorized account owners.';\n        }\n      }\n    });\n    document.documentElement.classList.toggle('dsd-founder-authorized', viewer.permissions.canAccessModeration);\n    var queue = moderationQueue();\n    var cards = viewer.permissions.canAccessModeration\n      ? (queue.length ? queue.map(moderationQueueCard).join('') : '<article class=\"dsd-launch-queue-card\"><h3>No moderation items</h3><p>Reports, hidden items, rejected items, and safety review records will appear here.</p></article>')\n      : '<article class=\"dsd-launch-queue-card\"><h3>Founder access required</h3><p>Moderation queues are available only after founder authorization is verified.</p></article>';\n    var queueRoot = qs('[data-dsd-mod386-panel-root]');\n    if (queueRoot) {\n      queueRoot.innerHTML = cards;\n      if (window.DSDModerationOperationsCenter && typeof window.DSDModerationOperationsCenter.apply === 'function') {\n        window.DSDModerationOperationsCenter.apply(window.DSDModerationOperationsCenter.snapshot ? window.DSDModerationOperationsCenter.snapshot().activeTab : 'pending');\n      }\n    }\n    var founderReview = qs('[data-dsd-founder390-panel=\"review\"] .dsd-founder390__cards');\n    if (founderReview && !dedicatedGovernance) founderReview.innerHTML = cards;\n    var pendingMetric = qs('[data-dsd-founder390-panel=\"overview\"] .dsd-founder390__metric-grid div:first-child strong');\n    if (pendingMetric && !dedicatedGovernance) pendingMetric.textContent = String(queue.filter(function(item){ return (item.state || item.status || 'pending') === 'pending'; }).length);\n    if (!dedicatedGovernance || !window.DSDFounderOperationsCenter390) renderFounderUserManagement();\n  }\n  function discoveryCard(profile){\n    var key = profile.profileKey || profile.handle || '';\n    var normalizedProfileKey = clean(key, '').toLowerCase();\n    var targetUid = profile.uid || '';\n    var following = !!(targetUid && state.followingByUid[targetUid]);\n    var requested = !!(targetUid && state.followRequestByUid[targetUid]);\n    var favorite = !!(targetUid && state.favoritesByUid[targetUid]);\n    var blocked = relationshipBlocked(targetUid);\n    var href = profileRouteHref(key);\n    var messageHref = '/pages/messages?profile=' + encodeURIComponent(key);\n    var actorId = actorUid();\n    var own = (targetUid && actorId && targetUid === actorId) || (normalizedProfileKey && normalizedProfileKey === clean(profileKey(), '').toLowerCase());\n    function viewedRelationshipCount(kind){\n      var viewed = viewedProfile() || {};\n      var viewedUid = String(viewed.uid || viewed.userId || viewed.user_id || '').trim();\n      var viewedKey = normalizedProfileKeyValue(viewed.profileKey || viewed.profile_key || viewed.handle || '');\n      if (!((targetUid && viewedUid && targetUid === viewedUid) || (normalizedProfileKey && viewedKey && normalizedProfileKey === viewedKey))) return 0;\n      return kind === 'followers' ? state.viewedFollowersRecords.length : state.viewedFollowingRecords.length;\n    }\n    var followerCount = Math.max(own ? state.followersRecords.length : viewedRelationshipCount('followers'), Number(profile.followerCount || profile.followersCount || profile.followers || 0));\n    var followingCount = Math.max(own ? state.followingRecords.length : viewedRelationshipCount('following'), Number(profile.followingCount || profile.followsCount || profile.following || 0));\n    function postBelongsToProfile(post){\n      var authorKey = clean(post && (post.authorProfileKey || post.profileKey || ''), '').toLowerCase();\n      var authorUid = String(post && (post.authorUid || post.ownerUid || post.uid || post.userId || '') || '').trim();\n      if (duplicateProfileArtifactKey(authorKey)) return false;\n      if (authorKey && normalizedProfileKey) return authorKey === normalizedProfileKey;\n      if (normalizedProfileKey && authorUid) {\n        var profileUid = profileUidForKey(normalizedProfileKey);\n        if (profileUid) return authorUid === profileUid;\n      }\n      if (targetUid && authorUid) return authorUid === String(targetUid || '').trim();\n      return !!(targetUid && post && post.authorUid === targetUid);\n    }\n    function storyBelongsToProfile(story){\n      var ownerKey = clean(story && (story.authorProfileKey || story.ownerProfileKey || story.profileKey || ''), '').toLowerCase();\n      var ownerUid = String(story && (story.ownerUid || story.authorUid || story.uid || story.userId || '') || '').trim();\n      if (duplicateProfileArtifactKey(ownerKey)) return false;\n      if (ownerKey && normalizedProfileKey) return ownerKey === normalizedProfileKey;\n      if (normalizedProfileKey && ownerUid) {\n        var storyProfileUid = profileUidForKey(normalizedProfileKey);\n        if (storyProfileUid) return ownerUid === storyProfileUid;\n      }\n      if (targetUid && ownerUid) return ownerUid === String(targetUid || '').trim();\n      return !!(targetUid && story && story.ownerUid === targetUid);\n    }\n    var profilePostRecords = state.posts.filter(function(post){ return isNormalContentRecord(post) && postBelongsToProfile(post) && post.status === 'approved'; });\n    var derivedPostCount = profilePostRecords.length;\n    var derivedStoryCount = visibleStories().filter(function(story){ return storyBelongsToProfile(story) && story.status === 'approved'; }).length;\n    var postCount = Math.max(derivedPostCount, Number(profile.postCount || profile.postsCount || 0));\n    var storyCount = Math.max(derivedStoryCount, Number(profile.storyCount || profile.storiesCount || 0));\n    var derivedMediaCount = profilePostRecords.reduce(function(total, post){ return total + (post.media || []).length; }, 0);\n    var mediaCount = Math.max(derivedMediaCount, Number(profile.mediaCount || 0));\n    var coverId = canonicalProfileBannerMediaId(profile);\n    var avatarId = canonicalProfileAvatarMediaId(profile);\n    var coverMedia = coverId ? ' data-dsd-profile-cover-media-id=\"' + html(coverId) + '\" style=\"background-image:url(&quot;' + html(mediaReadProxyUrl(coverId)) + '&quot;)\" data-dsd-media-proxy-placeholder=\"true\"' : '';\n    var avatarMedia = avatarId ? ' data-dsd-avatar-media-id=\"' + html(avatarId) + '\"' : '';\n    var actions = hasCustomer()\n      ? '<a href=\"' + href + '\">View profile</a>' + (!own && targetUid ? (blocked ? '<button type=\"button\" data-dsd-unblock-profile=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\">Unblock</button>' : '<a href=\"' + messageHref + '\">Message</a><button type=\"button\" data-dsd-toggle-follow-profile=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\" aria-pressed=\"' + (following || requested) + '\">' + (following ? 'Following' : (requested ? 'Requested' : (profileVisibility(profile) === 'private' ? 'Request follow' : 'Follow'))) + '</button><button type=\"button\" data-dsd-favorite-user=\"' + html(targetUid) + '\" data-profile-key=\"' + html(key) + '\" aria-pressed=\"' + favorite + '\">' + (favorite ? 'Favorited' : 'Favorite') + '</button>') : '')\n      : '<a href=\"' + href + '\">View profile</a><a href=\"' + loginReturnUrl() + '\">Log in</a>';\n    var safeName = publicDisplayName(profile.displayName || key || 'DSD member', 'DSD member');\n    var safeBio = publicDisplayText(profile.bio || '', 'Profile ready for discovery.');\n    var safeLocation = profileLocationText(profile);\n    var visibleHandle = publicHandleText(key, safeName, 'member');\n    return '<article class=\"dsd-users311__card\" data-user-card data-profile-key=\"' + html(key) + '\"><a class=\"dsd-users311__card-link\" href=\"' + href + '\" aria-label=\"View profile ' + html(safeName) + '\"></a><div class=\"dsd-users311__cover\"' + coverMedia + '></div><div class=\"dsd-users311__avatar\"' + avatarMedia + '>' + (avatarId ? '<img src=\"' + html(mediaReadProxyUrl(avatarId)) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\">' : html(initials(safeName || key))) + '</div><div class=\"dsd-users311__info\"><div class=\"dsd-users311__badges\"><span>' + html(profile.verified ? 'verified' : 'active') + '</span></div><h2>' + html(safeName) + '</h2><p>@' + html(visibleHandle) + '</p>' + (safeLocation ? '<p class=\"dsd-users311__location\">' + html(safeLocation) + '</p>' : '') + '<em>' + html(safeBio) + '</em><div class=\"dsd-users311__stats\"><span><strong>' + followerCount + '</strong> Followers</span><span><strong>' + followingCount + '</strong> Following</span><span><strong>' + postCount + '</strong> Posts</span><span><strong>' + mediaCount + '</strong> Media</span><span><strong>' + storyCount + '</strong> Stories</span></div></div><div class=\"dsd-users311__actions\">' + actions + '</div></article>';\n  }\n  function mergeDiscoveryStats(profileKey, stats){\n    var key = normalizedProfileKeyValue(profileKey);\n    if (!key || !stats) return false;\n    var changed = false;\n    state.publicProfiles = (state.publicProfiles || []).map(function(profile){\n      var itemKey = normalizedProfileKeyValue(profile && (profile.profileKey || profile.profile_key || profile.handle || ''));\n      if (itemKey !== key) return profile;\n      var next = Object.assign({}, profile);\n      [['followerCount','followersCount','followers_count', stats.followerCount], ['followingCount','followsCount','following_count', stats.followingCount], ['postCount','postsCount','posts_count', stats.postCount], ['mediaCount','media_count','mediaCount', stats.mediaCount], ['storyCount','storiesCount','stories_count', stats.storyCount]].forEach(function(tuple){\n        var camel = tuple[0];\n        var alt = tuple[1];\n        var snake = tuple[2];\n        var value = Number(tuple[3] || 0);\n        if (Number(next[camel] || 0) < value) { next[camel] = value; changed = true; }\n        if (Number(next[alt] || 0) < value) { next[alt] = value; changed = true; }\n        if (Number(next[snake] || 0) < value) { next[snake] = value; changed = true; }\n      });\n      return next;\n    });\n    return changed;\n  }\n  function hydrateDiscoveryStatsForProfile(profile){\n    var key = normalizedProfileKeyValue(profile && (profile.profileKey || profile.profile_key || profile.handle || ''));\n    if (!key || duplicateProfileArtifactKey(key)) return Promise.resolve(false);\n    var nowMs = Date.now();\n    var cached = state.discoveryStatsByKey[key];\n    if (cached && nowMs - cached.fetchedAt < 120000) return Promise.resolve(mergeDiscoveryStats(key, cached));\n    if (state.discoveryStatsPendingByKey[key]) return state.discoveryStatsPendingByKey[key];\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function') return Promise.resolve(false);\n    var options = { publicRead: !hasCustomer(), viewerAuthenticated: hasCustomer(), surface: 'discovery-profile-stats' };\n    var profileUid = String(profile && (profile.uid || profile.userId || profile.user_id || '') || '').trim() || profileUidForKey(key) || '';\n    function safeRead(table, query){\n      if (!query) return Promise.resolve([]);\n      return adapter.read(table, query, options).catch(function(error){\n        claim('discovery-stats:read-fail-closed', { table: table, profileKey: key, error: error && error.message || String(error) });\n        return [];\n      });\n    }\n    var pending = Promise.all([\n      safeRead('posts', { select: 'id,legacy_post_id,author_profile_key,visibility,content_rating,access_gate,status,moderation_state,deleted_at,hidden_at,archived_at,created_at', author_profile_key: 'eq.' + key, deleted_at: 'is.null', hidden_at: 'is.null', archived_at: 'is.null', order: 'created_at.desc', limit: 120 }),\n      safeRead('stories', { select: 'id,legacy_story_id,owner_profile_key,visibility,content_rating,access_gate,status,moderation_state,expires_at,deleted_at,hidden_at,archived_at,created_at', owner_profile_key: 'eq.' + key, deleted_at: 'is.null', hidden_at: 'is.null', archived_at: 'is.null', order: 'created_at.desc', limit: 120 }),\n      safeRead('media_objects', { select: 'id,owner_profile_key,surface,surface_id,visibility,status,moderation_state,deleted_at,hidden_at,archived_at,created_at', owner_profile_key: 'eq.' + key, surface: 'in.(post,story,profile)', status: 'in.(uploaded,approved)', visibility: 'eq.public', order: 'created_at.desc', limit: 200 }),\n      safeRead('follows', profileUid ? { select: 'source_user_id,target_user_id,state,created_at,updated_at', target_user_id: 'eq.' + profileUid, state: 'eq.active', limit: 200 } : null),\n      safeRead('follows', profileUid ? { select: 'source_user_id,target_user_id,state,created_at,updated_at', source_user_id: 'eq.' + profileUid, state: 'eq.active', limit: 200 } : null)\n    ]).then(function(results){\n      var posts = (results[0] || []).filter(function(post){ return isNormalContentRecord(post) && publicRecordVisible(post) && isApprovedPublicRecord(post); });\n      var stories = (results[1] || []).filter(function(story){ return isNormalContentRecord(story) && publicRecordVisible(story) && isApprovedPublicRecord(story) && !storyExpired(story); });\n      var media = (results[2] || []).filter(function(row){ return row && !row.deleted_at && !row.hidden_at && !row.archived_at; });\n      var followers = (results[3] || []).filter(function(row){ return row && row.state === 'active'; });\n      var following = (results[4] || []).filter(function(row){ return row && row.state === 'active'; });\n      var stats = { followerCount: followers.length, followingCount: following.length, postCount: posts.length, storyCount: stories.length, mediaCount: media.length, fetchedAt: Date.now() };\n      state.discoveryStatsByKey[key] = stats;\n      return mergeDiscoveryStats(key, stats);\n    }).finally(function(){\n      delete state.discoveryStatsPendingByKey[key];\n    });\n    state.discoveryStatsPendingByKey[key] = pending;\n    return pending;\n  }\n  function hydrateDiscoveryStatsBatch(visibleProfiles){\n    var profiles = (visibleProfiles || []).slice(0, 24).filter(Boolean);\n    if (!profiles.length) return Promise.resolve(false);\n    var adapter = supabaseAdapter();\n    if (!adapter || typeof adapter.read !== 'function') return Promise.resolve(false);\n    var nowMs = Date.now();\n    var keys = [];\n    var uids = [];\n    var profileByKeyMap = {};\n    profiles.forEach(function(profile){\n      var key = normalizedProfileKeyValue(profile && (profile.profileKey || profile.profile_key || profile.handle || ''));\n      if (!key || duplicateProfileArtifactKey(key)) return;\n      if (state.discoveryStatsByKey[key] && nowMs - state.discoveryStatsByKey[key].fetchedAt < 120000) {\n        mergeDiscoveryStats(key, state.discoveryStatsByKey[key]);\n        return;\n      }\n      if (keys.indexOf(key) === -1) keys.push(key);\n      profileByKeyMap[key] = profile;\n      var uidValue = String(profile && (profile.uid || profile.userId || profile.user_id || '') || '').trim() || profileUidForKey(key) || '';\n      if (uidValue && uids.indexOf(uidValue) === -1) uids.push(uidValue);\n    });\n    if (!keys.length) return Promise.resolve(false);\n    var options = { publicRead: !hasCustomer(), viewerAuthenticated: hasCustomer(), surface: 'discovery-profile-stats-batch' };\n    var keyFilter = 'in.(' + keys.join(',') + ')';\n    var uidFilter = uids.length ? 'in.(' + uids.join(',') + ')' : '';\n    function safeRead(table, query){\n      if (!query) return Promise.resolve([]);\n      return adapter.read(table, query, options).catch(function(error){\n        claim('discovery-stats-batch:read-fail-closed', { table: table, profileCount: keys.length, error: error && error.message || String(error) });\n        return [];\n      });\n    }\n    function bump(bucket, key, field, amount){\n      key = normalizedProfileKeyValue(key || '');\n      if (!key) return;\n      bucket[key] = bucket[key] || { followerCount: 0, followingCount: 0, postCount: 0, storyCount: 0, mediaCount: 0 };\n      bucket[key][field] += Number(amount || 1);\n    }\n    return Promise.all([\n      safeRead('posts', { select: 'id,legacy_post_id,author_profile_key,visibility,content_rating,access_gate,status,moderation_state,deleted_at,hidden_at,archived_at,created_at', author_profile_key: keyFilter, deleted_at: 'is.null', hidden_at: 'is.null', archived_at: 'is.null', order: 'created_at.desc', limit: 500 }),\n      safeRead('stories', { select: 'id,legacy_story_id,owner_profile_key,visibility,content_rating,access_gate,status,moderation_state,expires_at,deleted_at,hidden_at,archived_at,created_at', owner_profile_key: keyFilter, deleted_at: 'is.null', hidden_at: 'is.null', archived_at: 'is.null', order: 'created_at.desc', limit: 500 }),\n      safeRead('media_objects', { select: 'id,owner_profile_key,surface,surface_id,visibility,status,moderation_state,deleted_at,hidden_at,archived_at,created_at', owner_profile_key: keyFilter, surface: 'in.(post,story,profile)', status: 'in.(uploaded,approved)', visibility: 'eq.public', order: 'created_at.desc', limit: 500 }),\n      safeRead('follows', uidFilter ? { select: 'source_user_id,target_user_id,state,created_at,updated_at', target_user_id: uidFilter, state: 'eq.active', limit: 500 } : null),\n      safeRead('follows', uidFilter ? { select: 'source_user_id,target_user_id,state,created_at,updated_at', source_user_id: uidFilter, state: 'eq.active', limit: 500 } : null)\n    ]).then(function(results){\n      var statsByKey = {};\n      var uidToKey = {};\n      keys.forEach(function(key){\n        var profile = profileByKeyMap[key] || {};\n        var uidValue = String(profile.uid || profile.userId || profile.user_id || '') || profileUidForKey(key) || '';\n        if (uidValue) uidToKey[uidValue] = key;\n      });\n      (results[0] || []).filter(function(post){ return isNormalContentRecord(post) && publicRecordVisible(post) && isApprovedPublicRecord(post); }).forEach(function(post){ bump(statsByKey, post.authorProfileKey || post.author_profile_key, 'postCount', 1); });\n      (results[1] || []).filter(function(story){ return isNormalContentRecord(story) && publicRecordVisible(story) && isApprovedPublicRecord(story) && !storyExpired(story); }).forEach(function(story){ bump(statsByKey, story.authorProfileKey || story.ownerProfileKey || story.owner_profile_key, 'storyCount', 1); });\n      (results[2] || []).filter(function(row){ return row && !row.deleted_at && !row.hidden_at && !row.archived_at; }).forEach(function(row){ bump(statsByKey, row.ownerProfileKey || row.owner_profile_key, 'mediaCount', 1); });\n      (results[3] || []).filter(function(row){ return row && row.state === 'active'; }).forEach(function(row){ bump(statsByKey, uidToKey[String(row.targetUid || row.target_user_id || '')], 'followerCount', 1); });\n      (results[4] || []).filter(function(row){ return row && row.state === 'active'; }).forEach(function(row){ bump(statsByKey, uidToKey[String(row.sourceUid || row.source_user_id || '')], 'followingCount', 1); });\n      var changed = false;\n      keys.forEach(function(key){\n        var stats = Object.assign({ followerCount: 0, followingCount: 0, postCount: 0, storyCount: 0, mediaCount: 0 }, statsByKey[key] || {}, { fetchedAt: Date.now() });\n        state.discoveryStatsByKey[key] = stats;\n        changed = mergeDiscoveryStats(key, stats) || changed;\n      });\n      return changed;\n    });\n  }\n  function hydrateDiscoveryStats(visibleProfiles){\n    visibleProfiles = (visibleProfiles || []).slice(0, 24);\n    if (!visibleProfiles.length) return;\n    hydrateDiscoveryStatsBatch(visibleProfiles).then(function(changed){\n      if (changed) renderDiscovery();\n    }).catch(function(error){\n      claim('discovery-stats:hydrate-blocked', { error: error && error.message || String(error), canonical: 'supabase-public-metadata' });\n    });\n  }\n  function renderDiscovery(){\n    publishPublicProfiles();\n    qsa('[data-dsd-users311-grid]').forEach(function(grid){\n      var root = grid.closest('[data-dsd-users311]') || document;\n      var search = qs('[data-dsd-users311-search]', root);\n      var activeFilter = qs('[data-dsd-users311-filter].is-active', root);\n      var query = String(search && search.value || '').trim().toLowerCase();\n      var filter = activeFilter && activeFilter.getAttribute('data-dsd-users311-filter') || 'all';\n      var visibleProfiles = state.publicProfiles.filter(function(profile){\n        var text = [profile.displayName, profile.profileKey, profile.handle, profile.bio, profile.location, profile.locationCity, profile.locationState].join(' ').toLowerCase();\n        var filterOk = filter === 'all' || (filter === 'verified' && profile.verified) || (filter === 'dsdplus' && profile.dsdPlus) || (filter === 'nearby' && nearbyDiscoveryMatch(profile));\n        return publicProfileVisible(profile) && publicRecordVisible(profile) && (!query || text.indexOf(query) !== -1) && filterOk;\n      });\n      if (visibleProfiles.length) {\n        grid.innerHTML = visibleProfiles.slice(0, 100).map(discoveryCard).join('');\n        hydrateProfileCardMedia(grid);\n        hydrateMediaReads(grid);\n        hydrateDiscoveryStats(visibleProfiles);\n      } else {\n        var emptyTitle = query || filter !== 'all' ? 'No profiles match this view' : 'No public profiles yet';\n        var emptyText = query || filter !== 'all'\n          ? 'Try another search or filter. Private or hidden profiles stay out of public discovery.'\n          : 'Public profiles appear here after members finish profile setup.';\n        grid.innerHTML = '<div class=\"dsd-users311__empty is-visible\" data-dsd-users311-empty data-dsd-users311-empty-state data-dsd-users311-empty-filter=\"' + html(filter) + '\"><strong>' + html(emptyTitle) + '</strong><span>' + html(emptyText) + '</span><a href=\"' + (hasCustomer() ? '/pages/user-profile?setup=1' : loginReturnUrl()) + '\">' + (hasCustomer() ? 'Complete profile' : 'Log in to create profile') + '</a></div>';\n      }\n      grid.setAttribute('aria-busy', 'false');\n      grid.setAttribute('data-dsd-discovery-hydrated', 'true');\n    });\n  }\n  function profileByUid(targetUid, fallbackKey){\n    var uidValue = String(targetUid || '').trim();\n    var keyValue = clean(fallbackKey || '', '').replace(/^@+/, '').toLowerCase();\n    var publicProfile = (state.publicProfiles || []).filter(function(profile){\n      var profileUid = String(profile && (profile.uid || profile.userId || profile.user_id || '') || '').trim();\n      var profileKey = clean(profile && (profile.profileKey || profile.handle || profile.profile_key || '') || '', '').replace(/^@+/, '').toLowerCase();\n      return (uidValue && profileUid === uidValue) || (keyValue && profileKey === keyValue);\n    })[0] || null;\n    if (publicProfile) return publicProfile;\n    var ownProfile = state.profile || {};\n    var ownUid = String(ownProfile.uid || uid() || '').trim();\n    var ownKey = clean(ownProfile.profileKey || ownProfile.handle || profileKey() || '', '').replace(/^@+/, '').toLowerCase();\n    if ((uidValue && ownUid && uidValue === ownUid) || (keyValue && ownKey && keyValue === ownKey)) return ownProfile;\n    return null;\n  }\n  function relationshipCard(record, kind){\n    var targetUid = kind === 'followers'\n      ? (record.sourceUid || record.followerUid || record.ownerUid || record.targetUid || '')\n      : (record.targetUid || record.followingUid || record.ownerUid || record.sourceUid || '');\n    var key = kind === 'followers'\n      ? (record.sourceProfileKey || record.followerProfileKey || record.ownerProfileKey || targetUid)\n      : (record.targetProfileKey || record.followingProfileKey || record.ownerProfileKey || targetUid);\n    var profile = profileByUid(targetUid, key);\n    if (!profile) return '';\n    var handle = profile.profileKey || profile.handle || key || targetUid;\n    var href = handle ? profileRouteHref(handle) : '/pages/users';\n    var avatarMedia = canonicalProfileAvatarMediaId(profile);\n    var safeName = publicDisplayName(profile.displayName || handle || 'DSD member', 'DSD member');\n    var mutualCount = record.mutualCount != null ? Number(record.mutualCount || 0) : Number(profile.mutualCount || 0);\n    var mutualLabel = mutualCount > 0 ? mutualCount + ' mutual' : '0 mutual';\n    var ownTarget = identityMatchesCurrent(targetUid, handle);\n    var relationFollowing = !!state.followingByUid[targetUid];\n    var relationRequested = !!state.followRequestByUid[targetUid];\n    var relationLabel = relationFollowing ? 'Unfollow' : (relationRequested ? 'Requested' : (profileVisibility(profile) === 'private' ? 'Request follow' : 'Follow'));\n    var relationButton = hasActiveProfile() && targetUid && !ownTarget\n      ? '<button type=\"button\" class=\"dsd-launch-action\" data-dsd-toggle-follow-profile=\"' + html(targetUid) + '\" data-profile-key=\"' + html(handle) + '\" aria-pressed=\"' + (relationFollowing || relationRequested) + '\">' + html(relationLabel) + '</button>'\n      : '<a class=\"dsd-launch-action\" href=\"' + href + '\">View</a>';\n    return '<div data-dsd-relationship-record=\"' + html(kind) + '\" data-keywords=\"' + html([kind, handle, safeName, targetUid].join(' ')) + '\"><span class=\"dsd-up315__mini-avatar\"' + (avatarMedia ? ' data-dsd-avatar-media-id=\"' + html(avatarMedia) + '\"' : '') + '>' + (avatarMedia ? '<img src=\"' + html(mediaReadProxyUrl(avatarMedia)) + '\" alt=\"\" loading=\"lazy\" decoding=\"async\" data-dsd-media-proxy-placeholder=\"true\">' : html(initials(safeName || handle))) + '</span><div><strong>' + html(safeName) + '</strong><em>@' + html(handle || 'member') + '</em><small>' + html(mutualLabel) + '</small></div>' + relationButton + '</div>';\n  }\n  function relationshipCards(records, kind){\n    return (records || []).map(function(record){ return relationshipCard(record, kind); }).filter(Boolean);\n  }\n  function followRequestCards(records){\n    return (records || []).map(function(record){\n      var sourceUid = record.sourceUid || '';\n      var key = record.sourceProfileKey || sourceUid;\n      var profile = profileByUid(sourceUid, key) || {};\n      var safeName = publicDisplayName(profile.displayName || key || 'DSD member', 'DSD member');\n      var handle = profile.profileKey || profile.handle || key || 'member';\n      var avatarMedia = profile.avatarMediaId || profile.thumbnailMediaId || '';\n      return '<div data-dsd-relationship-record=\"follow-request\" data-keywords=\"' + html(['request', handle, safeName, sourceUid].join(' ')) + '\"><span class=\"dsd-up315__mini-avatar\"' + (avatarMedia ? ' data-dsd-avatar-media-id=\"' + html(avatarMedia) + '\"' : '') + '>' + html(initials(safeName || handle)) + '</span><div><strong>' + html(safeName) + '</strong><em>@' + html(handle) + '</em><small>Follow request</small></div><button type=\"button\" class=\"dsd-launch-action\" data-dsd-accept-follow-request=\"' + html(sourceUid) + '\" data-profile-key=\"' + html(key) + '\">Accept</button><button type=\"button\" class=\"dsd-launch-action\" data-dsd-decline-follow-request=\"' + html(sourceUid) + '\" data-profile-key=\"' + html(key) + '\">Decline</button></div>';\n    }).filter(Boolean);\n  }\n  function savedCard(item){\n    var targetId = item.targetId || item.id || '';\n    if (!targetId || shouldApplyLocalPostTombstone(targetId, localPostById(targetId))) return '';\n    var post = state.posts.filter(function(p){ return (p.postId || p.id) === targetId; })[0] || {};\n    if (post && (post.postId || post.id) && !isNormalContentRecord(post)) {\n      return '';\n    }\n    var firstMedia = (post.media || item.previewMedia || [])[0] || {};\n    var savedMediaId = readableMediaId(firstMedia);\n    var savedKind = String(firstMedia.kind || 'image').toLowerCase();\n    var preview = savedMediaId && savedKind !== 'video' ? '<figure class=\"dsd-saved-tile__preview dsd-launch-media-chip\"' + mediaReadAttrs(firstMedia) + ' data-dsd-media-kind=\"' + html(savedKind) + '\"></figure>' : '<span class=\"dsd-saved-tile__preview dsd-saved-tile__preview--fallback\" data-dsd-saved-video-paused=\"' + (savedKind === 'video') + '\">' + (savedKind === 'video' ? 'Video' : 'S') + '</span>';\n    var safePreview = publicDisplayText(post.body || item.targetType || 'Saved item', 'Saved item');\n    var safeSavedHandle = publicHandleText(post.authorProfileKey || '', post.authorDisplayName || '', 'member');\n    return '<article class=\"dsd-saved-tile\" data-dsd-relationship-record=\"saved\" data-keywords=\"' + html([targetId, safePreview, item.targetType || ''].join(' ')) + '\">' + preview + '<div><strong>' + html(safePreview) + '</strong><em>' + html(post.authorProfileKey ? ('@' + safeSavedHandle) : 'saved item') + '</em><small>' + html(postTimestamp(post)) + '</small></div><a class=\"dsd-launch-action\" href=\"' + html(postPermalink(targetId)) + '\">Open</a></article>';\n  }\n  function setRelationshipPanel(key, htmlContent, emptyText){\n    var panel = qs('[data-dsd-profile-modal-panel=\"' + key + '\"]');\n    if (!panel) return;\n    var list = qs('.dsd-up315__modal-list', panel);\n    if (!list) {\n      var card = qs('.dsd-up315__modal-card', panel) || panel;\n      card.innerHTML = '<strong>' + html(key.charAt(0).toUpperCase() + key.slice(1)) + '</strong><div class=\"dsd-up315__modal-list\"></div>';\n      list = qs('.dsd-up315__modal-list', panel);\n    }\n    list.innerHTML = htmlContent || '<div><span class=\"dsd-up315__mini-avatar\">--</span><div><strong>No records yet</strong><em>' + html(emptyText || 'Records appear here.') + '</em></div></div>';\n    hydrateAvatarMedia(list);\n    if (key === 'saved') hydrateMediaReads(list);\n  }\n  function renderRelationships(){\n    var root = qs('[data-dsd-user-profile]');\n    if (!root) return;\n    var own = isOwnProfileRoute();\n    var profile = viewedProfile() || {};\n    var targetKey = clean(profile.profileKey || profile.handle || routeProfileKey() || '', '').toLowerCase();\n    var postsForProfile = state.posts.filter(function(p){ return isNormalContentRecord(p) && recordBelongsToProfile(p, viewedProfileUid(), targetKey, 'authorUid'); });\n    var mediaCount = postsForProfile.filter(function(p){ return p.media && p.media.length; }).length;\n    var pendingFollowerCards = own ? followRequestCards(state.incomingFollowRequests) : [];\n    var followerCards = relationshipCards(own ? state.followersRecords : state.viewedFollowersRecords, 'followers');\n    var followingCards = relationshipCards(own ? state.followingRecords : state.viewedFollowingRecords, 'following');\n    var favoriteCards = relationshipCards(own ? state.favoritesRecords : state.viewedFavoritesRecords, 'favorites');\n    var savedCards = activeSavedItems(own ? state.savedItems : state.viewedSavedItems).map(savedCard).filter(Boolean);\n    if (!own && profile && profile.uid && state.followingByUid[profile.uid]) {\n      var viewerFollower = { sourceUid: actorRelationshipIdentity(), sourceProfileKey: profileKey(), targetUid: profile.uid, targetProfileKey: targetKey, state: 'active' };\n      var viewerFollowerHtml = relationshipCard(viewerFollower, 'followers');\n      if (viewerFollowerHtml && followerCards.join('').indexOf('data-keywords=\"followers') === -1) followerCards = [viewerFollowerHtml].concat(followerCards);\n    }\n    if (!own && profile && profile.uid && state.favoritesByUid[profile.uid]) {\n      var viewerFavorite = { sourceUid: actorRelationshipIdentity(), sourceProfileKey: profileKey(), targetUid: profile.uid, targetProfileKey: targetKey, state: 'favorite' };\n      var viewerFavoriteHtml = relationshipCard(viewerFavorite, 'favorites');\n      if (viewerFavoriteHtml && favoriteCards.join('').indexOf('data-keywords=\"favorites') === -1) favoriteCards = [viewerFavoriteHtml].concat(favoriteCards);\n    }\n    var counts = {\n      followers: Math.max(followerCards.length, Number(profile.followerCount || profile.followersCount || profile.followers || 0)),\n      following: Math.max(followingCards.length, Number(profile.followingCount || profile.followsCount || profile.following || 0)),\n      favorites: Math.max(favoriteCards.length, Number(profile.favoriteCount || profile.favoritesCount || profile.favorites || 0)),\n      saved: Math.max(savedCards.length, Number(profile.savedCount || profile.savesCount || profile.saved || 0)),\n      posts: postsForProfile.length,\n      media: mediaCount\n    };\n    qsa('[data-dsd-relationship-tab]', root).forEach(function(btn){\n      var key = btn.getAttribute('data-dsd-relationship-tab');\n      var strong = qs('strong', btn);\n      if (strong && counts[key] != null) strong.textContent = String(counts[key]);\n    });\n    qsa('[data-dsd-profile-content-tab=\"media\"] strong', root).forEach(function(n){ n.textContent = String(mediaCount); });\n    setRelationshipPanel('followers', pendingFollowerCards.concat(followerCards).join(''), counts.followers || pendingFollowerCards.length ? 'Public follower details are unavailable.' : 'Followers appear here.');\n    setRelationshipPanel('following', followingCards.join(''), counts.following ? 'Public following details are unavailable.' : 'Following appears here.');\n    setRelationshipPanel('favorites', favoriteCards.join(''), counts.favorites ? 'Public favorite details are unavailable.' : 'Public-safe favorite profiles appear here.');\n    setRelationshipPanel('saved', savedCards.join(''), counts.saved ? 'Public saved item details are unavailable.' : 'Public-safe saved posts and media appear here.');\n  }\n  function searchResultCard(type, title, body, href, chips, iconText){\n    var safeTitle = publicDisplayText(title || type, type);\n    var safeBody = publicDisplayText(body || '', 'Community result');\n    var safeChips = (chips || []).map(function(chip){ return publicDisplayText(chip, ''); }).filter(Boolean);\n    return '<article class=\"dsd-search388__card\" data-dsd-search388-item data-type=\"' + html(type) + '\" data-keywords=\"' + html([safeTitle, safeBody].concat(safeChips).join(' ')) + '\"><div class=\"dsd-search388__icon\">' + html(iconText || type.charAt(0).toUpperCase()) + '</div><div class=\"dsd-search388__body\"><span class=\"dsd-search388__type\">' + html(type) + '</span><h2>' + html(safeTitle) + '</h2><p>' + html(safeBody) + '</p><div class=\"dsd-search388__chips\">' + safeChips.slice(0, 4).map(function(chip){ return '<span>' + html(chip) + '</span>'; }).join('') + '</div></div><a href=\"' + html(href) + '\">Open</a></article>';\n  }\n  function renderSearchIndex(){\n    var results = qs('[data-dsd-search388-results]');\n    if (!results) return;\n    publishPublicProfiles();\n    qsa('[data-dsd-search388-item], [data-dsd-search388-empty-state]', results).forEach(function(n){ n.remove(); });\n    var cards = [];\n    state.publicProfiles.slice(0, 24).forEach(function(profile){\n      var key = profile.profileKey || profile.handle || '';\n      cards.push(searchResultCard('users', profile.displayName || key || 'DSD member', profile.bio || ('@' + publicHandleText(key, profile.displayName || '', 'member')), profileRouteHref(key), ['profile', publicHandleText(key, profile.displayName || '', 'member')], initials(profile.displayName || key)));\n    });\n    state.posts.map(publicRenderablePost).filter(function(post){ return post && !isRestrictedShellRecord(post); }).slice(0, 24).forEach(function(post){\n      var postId = post.postId || post.id || '';\n      cards.push(searchResultCard('posts', post.body || 'Post', post.body || '', postId ? postPermalink(postId) : '/pages/feed', ['post', post.authorProfileKey || '', post.contentRating || 'standard'], 'P'));\n    });\n    visibleStories().filter(function(s){ return publicRecordVisible(s) && canViewClassified(s) && (s.status === 'approved' || recordOwnedByCurrentProfile(s) || canModerate()); }).slice(0, 24).forEach(function(story){\n      var storyId = story.storyId || story.id || '';\n      cards.push(searchResultCard('stories', story.body || 'Story', story.authorProfileKey || story.ownerUid || '', storyId ? ('/pages/stories?story=' + encodeURIComponent(storyId)) : '/pages/stories', ['story', story.visibility || 'public'], 'S'));\n    });\n    if (cards.length) results.insertAdjacentHTML('beforeend', cards.join(''));\n    else results.innerHTML = '<article class=\"dsd-search388__card\" data-dsd-search388-empty-state><div class=\"dsd-search388__icon\">0</div><div class=\"dsd-search388__body\"><span class=\"dsd-search388__type\">Search</span><h2>No results yet</h2><p>Profiles, posts, and stories appear here as DSD grows.</p><div class=\"dsd-search388__chips\"><span>profiles</span><span>posts</span><span>stories</span></div></div><a href=\"/pages/users\">Users</a></article>';\n    try { window.dispatchEvent(new CustomEvent('dsd:search-index:updated', { detail: { version: VERSION, items: cards.length } })); } catch(e){}\n  }\n  function prefillMessageComposer(){\n    var form = qs('[data-dsd-message-form]');\n    if (!form) return;\n    var recipient = queryParam('recipientUid');\n    var profile = queryParam('profile');\n    var resolved = recipientIdentity(recipient, profile);\n    if (recipient) {\n      var routeCid = canonicalConversationId(resolved.uid || recipient, profile || resolved.key || '');\n      state.activeConversationId = routeCid;\n      if (qs('[name=\"recipientUid\"]', form)) qs('[name=\"recipientUid\"]', form).value = resolved.uid || recipient;\n      if (qs('[name=\"conversationId\"]', form)) qs('[name=\"conversationId\"]', form).value = routeCid;\n      var routeName = qs('[data-dsd-msg384-active-name]');\n      var routeHandle = qs('[data-dsd-msg384-active-handle]');\n      if (routeName) routeName.textContent = resolved.name || (profile ? ('@' + profile) : 'Direct message');\n      if (routeHandle) routeHandle.textContent = '@' + publicHandleText(resolved.key || profile || recipient, resolved.name || profile, 'member');\n      hydrateConversationMessages(routeCid);\n      return;\n    }\n    var activeCid = queryParam('conversationId') || (recipient ? '' : state.activeConversationId || '');\n    var activeConversation = activeCid ? state.conversations.filter(function(c){ return (c.conversationId || c.id) === activeCid; })[0] : null;\n    if (!recipient && activeConversation) {\n      var peer = conversationPeer(activeConversation);\n      recipient = peer.uid || '';\n      profile = peer.key || profile;\n      resolved = peer;\n    }\n    if (recipient && qs('[name=\"recipientUid\"]', form)) qs('[name=\"recipientUid\"]', form).value = resolved.uid || recipient;\n    if (qs('[name=\"conversationId\"]', form)) qs('[name=\"conversationId\"]', form).value = activeConversation ? (activeConversation.conversationId || activeConversation.id || activeCid) : (recipient ? canonicalConversationId(resolved.uid || recipient, profile || resolved.key || '') : '');\n    var name = qs('[data-dsd-msg384-active-name]');\n    var handle = qs('[data-dsd-msg384-active-handle]');\n    if (recipient && name) name.textContent = resolved.name || (profile ? ('@' + profile) : 'Direct message');\n    if (recipient && handle) handle.textContent = '@' + publicHandleText(resolved.key || profile || recipient, resolved.name || profile, 'member');\n  }\n  function renderComposer(){\n    qsa('[data-dsd-profile-publisher], #dsd-composer-container').forEach(function(host){\n      if (!host) return;\n      var isProfilePublisher = host.hasAttribute('data-dsd-profile-publisher');\n      var shell = host.closest('.dsd-feed368__composer');\n      if (isProfilePublisher && !isOwnProfileRoute()) {\n        if (shell) shell.hidden = true;\n        host.hidden = true;\n        host.innerHTML = '';\n        host.setAttribute('aria-hidden', 'true');\n        host.setAttribute('data-dsd-public-view-publisher-deconstructed', BUILD);\n        host.style.display = 'none';\n        delete host.dataset.dsdFirebaseComposer;\n        delete host.dataset.dsdCanonicalComposerMounted;\n        return;\n      }\n      if (!hasCustomer()) {\n        if (shell) shell.hidden = true;\n        host.hidden = true;\n        if (!isProfilePublisher) host.innerHTML = '';\n        delete host.dataset.dsdFirebaseComposer;\n        delete host.dataset.dsdCanonicalComposerMounted;\n        return;\n      }\n      if (!hasFirebaseAuth() && !hasActiveProfile()) {\n        if (shell) shell.hidden = !state.bridgeChecked;\n        host.hidden = !state.bridgeChecked;\n        if (state.bridgeChecked && !isProfilePublisher) host.innerHTML = '<section class=\"dsd-social-private-auth-gate\" data-dsd-owner=\"LaunchSocialActivation\"><h2>Account connection loading</h2><p data-dsd-activation-status>Refresh or log in again if posting stays unavailable.</p></section>';\n        delete host.dataset.dsdFirebaseComposer;\n        delete host.dataset.dsdCanonicalComposerMounted;\n        return;\n      }\n      clearStaleConnectionStatus();\n      if (host.dataset.dsdCanonicalComposerMounted === 'true') {\n        qsa('input, textarea, select, button', host).forEach(function(el){ el.disabled = !hasActiveProfile(); });\n        if (isProfilePublisher) syncProfilePublisherIdentity(host.closest('[data-dsd-user-profile]') || document, displayName(), profileKey());\n        syncComposerIdentity(host);\n        refreshPublicationControls(host);\n        updateComposerCounters(host);\n        hydrateAvatarMedia(host);\n        if (shell) shell.hidden = !hasActiveProfile();\n        host.hidden = !hasActiveProfile();\n        focusComposerFromRoute();\n        return;\n      }\n      delete host.dataset.dsdFirebaseComposer;\n      host.dataset.dsdCanonicalComposerMounted = 'true';\n      host.innerHTML = isProfilePublisher\n        ? '<form class=\"dsd-post-composer dsd-canonical-composer dsd-profile-inline-composer\" data-dsd-canonical-composer data-dsd-canonical-compact-composer data-dsd-profile-inline-post-composer><div class=\"dsd-up315__composer-head\">' + currentComposerAvatarHTML() + '<div><strong>' + html(composerDisplayName()) + '</strong><em>@' + html(composerProfileKey()) + '</em></div></div><div data-dsd-activation-status></div><textarea name=\"body\" rows=\"2\" maxlength=\"' + html(MAX.body) + '\" aria-label=\"Post text\" placeholder=\"What is happening?\"></textarea><div class=\"dsd-up315__composer-tools dsd-composer-media-actions\" aria-label=\"Attach media\">' + composerMediaButton('image', true, 'Attach post images') + composerMediaButton('video', false, 'Attach post video') + composerPolicyTools('Post') + '</div><div class=\"dsd-up315__composer-foot\">' + composerCountHTML(MAX.body) + '<button type=\"submit\">Post</button></div></form>'\n        : '<form class=\"dsd-post-composer dsd-canonical-composer dsd-feed-inline-composer\" data-dsd-canonical-composer data-dsd-canonical-compact-composer data-dsd-feed-inline-post-composer><div class=\"dsd-up315__composer-head\">' + currentComposerAvatarHTML() + '<div><strong>' + html(composerDisplayName()) + '</strong><em>@' + html(composerProfileKey()) + '</em></div></div><div data-dsd-activation-status></div><textarea name=\"body\" rows=\"2\" maxlength=\"' + html(MAX.body) + '\" aria-label=\"Post text\" placeholder=\"What is happening?\"></textarea><div class=\"dsd-up315__composer-tools dsd-composer-media-actions\" aria-label=\"Attach media\">' + composerMediaButton('image', true, 'Attach post images') + composerMediaButton('video', false, 'Attach post video') + composerPolicyTools('Post') + '</div><div class=\"dsd-up315__composer-foot\">' + composerCountHTML(MAX.body) + '<button type=\"submit\">Post</button></div></form>';\n      var form = qs('form', host);\n      syncComposerIdentity(host);\n      hydrateAvatarMedia(host);\n      refreshPublicationControls(host);\n      updateComposerCounters(host);\n      if (shell) shell.hidden = !hasActiveProfile();\n      host.hidden = !hasActiveProfile();\n      qsa('input, textarea, select, button', form).forEach(function(el){ if (!hasActiveProfile()) el.disabled = true; });\n      focusComposerFromRoute();\n      form.addEventListener('submit', function(ev){\n        ev.preventDefault();\n        var media = [];\n        qsa('input[type=\"file\"]', form).forEach(function(input){ Array.prototype.forEach.call(input.files || [], function(file){ media.push(file); }); });\n        var policy = policyFromSelectValue((qs('[name=\"visibility\"]', form) || {}).value || 'public');\n        composerBusy(form, media.length ? 'Saving media and post...' : 'Saving post...', createPost({\n          body: (qs('[name=\"body\"]', form) || {}).value || '',\n          caption: '',\n          visibility: policy.visibility,\n          contentRating: policy.contentRating,\n          accessGate: policy.accessGate,\n          media: media\n        })).then(function(result){ if (result) { form.reset(); removeFilePreviews(form); if (shell) shell.hidden = false; host.hidden = false; syncComposerIdentity(host); } });\n      });\n    });\n  }\n  function profilePatchFromSetupForm(setupForm){\n    var agePolicy = profileAgePolicy(setupForm);\n    var setupDisplayName = formControl(setupForm, 'displayName');\n    var setupProfileKey = formControl(setupForm, 'profileKey');\n    var setupBio = formControl(setupForm, 'bio');\n    var setupCity = formControl(setupForm, 'locationCity');\n    var setupState = formControl(setupForm, 'locationState');\n    var setupVisibility = formControl(setupForm, 'visibility');\n    var setupAdultContent = formControl(setupForm, 'adultContentEnabled');\n    var selectedPolicy = policyFromSelectValue(setupVisibility && setupVisibility.value || 'public');\n    var profilePatch = {\n      displayName: setupDisplayName && setupDisplayName.value || displayName(),\n      profileKey: setupProfileKey && setupProfileKey.value || profileKey(),\n      bio: setupBio && setupBio.value || '',\n      locationCity: setupCity && setupCity.value || '',\n      locationState: setupState && setupState.value || '',\n      birthdate: agePolicy.birthdate,\n      age: agePolicy.age,\n      ageVerified: agePolicy.over18,\n      visibility: selectedPolicy.visibility,\n      contentRating: selectedPolicy.contentRating,\n      accessGate: selectedPolicy.accessGate,\n      adultContentEnabled: !!(agePolicy.over18 && setupAdultContent && setupAdultContent.checked)\n    };\n    return profilePatch;\n  }\n  function handleProfileSetupSubmit(form, root){\n    if (!form) return Promise.resolve(null);\n    var profileRoot = form.closest('[data-dsd-user-profile]') || root || document;\n    return composerBusy(form, 'Saving profile...', createOrUpdateProfile(profilePatchFromSetupForm(form))).then(function(saved){\n      if (saved) qsa('input, textarea, select', form).forEach(function(field){ delete field.dataset.dsdUserEdited; });\n      if (saved && profileRoot && profileRoot.querySelector && profileRoot.querySelector('[data-dsd-profile-modal-layer]')) closeProfileModal(profileRoot);\n      return saved;\n    });\n  }\n  function syncProfileSetupForms(root){\n    function syncTextControl(field, value){\n      if (!field) return;\n      if (field === document.activeElement || field.dataset.dsdUserEdited === 'true') return;\n      field.value = value || '';\n    }\n    function syncCheckboxControl(field, checked){\n      if (!field) return;\n      if (field === document.activeElement || field.dataset.dsdUserEdited === 'true') return;\n      field.checked = !!checked;\n    }\n    function bindDirtyControl(field){\n      if (!field || field.dataset.dsdDirtyBound === 'true') return;\n      field.dataset.dsdDirtyBound = 'true';\n      field.addEventListener('input', function(){ field.dataset.dsdUserEdited = 'true'; });\n      field.addEventListener('change', function(){ field.dataset.dsdUserEdited = 'true'; });\n    }\n    function syncAdultPreference(form){\n      var adultContentField = formControl(form, 'adultContentEnabled');\n      if (!form || !adultContentField) return;\n      var policy = profileAgePolicy(form);\n      adultContentField.disabled = !policy.over18;\n      if (!policy.over18) adultContentField.checked = false;\n      var row = adultContentField.closest('[data-dsd-adult-content-row]');\n      if (row) row.setAttribute('data-dsd-adult-eligible', policy.over18 ? 'true' : 'false');\n      refreshPublicationControls(form.closest('[data-dsd-user-profile]') || document);\n    }\n    qsa('[data-dsd-profile-setup-form]', root || document).forEach(function(form){\n      if (!form) return;\n      var displayNameField = formControl(form, 'displayName');\n      var profileKeyField = formControl(form, 'profileKey');\n      var bioField = formControl(form, 'bio');\n      var locationCityField = formControl(form, 'locationCity');\n      var locationStateField = formControl(form, 'locationState');\n      var birthdateField = formControl(form, 'birthdate');\n      var ageField = formControl(form, 'age');\n      var visibilityField = formControl(form, 'visibility');\n      var adultContentField = formControl(form, 'adultContentEnabled');\n      [displayNameField, profileKeyField, bioField, locationCityField, locationStateField, birthdateField, ageField, visibilityField, adultContentField].forEach(bindDirtyControl);\n      syncTextControl(displayNameField, displayName());\n      syncTextControl(profileKeyField, profileKey());\n      syncTextControl(bioField, state.profile && state.profile.bio || '');\n      syncTextControl(locationCityField, state.profile && (state.profile.locationCity || state.profile.city) || '');\n      syncTextControl(locationStateField, state.profile && (state.profile.locationState || state.profile.state) || '');\n      syncTextControl(birthdateField, state.profile && state.profile.birthdate || '');\n      syncTextControl(ageField, state.profile && state.profile.age || '');\n      syncTextControl(visibilityField, state.profile && state.profile.visibility === 'private' ? 'private' : 'public');\n      syncCheckboxControl(adultContentField, !!(isOver18() && (!state.profile || state.profile.adultContentEnabled !== false)));\n      syncAdultPreference(form);\n      if (!form.dataset.dsdAgePreferenceBound) {\n        form.dataset.dsdAgePreferenceBound = 'true';\n        ['birthdate', 'age'].forEach(function(name){\n          var field = formControl(form, name);\n          if (field) field.addEventListener('input', function(){ syncAdultPreference(form); });\n          if (field) field.addEventListener('change', function(){ syncAdultPreference(form); });\n        });\n        if (adultContentField) adultContentField.addEventListener('change', function(){ refreshPublicationControls(form.closest('[data-dsd-user-profile]') || document); });\n      }\n    });\n    qsa('[data-dsd-banner-form]', root || document).forEach(function(form){\n      var bannerPositionField = formControl(form, 'bannerPosition');\n      if (bannerPositionField && bannerPositionField.dataset.dsdUserEdited !== 'true' && form.dataset.dsdBannerFocusUserEdited !== 'true') bannerPositionField.value = state.profile && state.profile.bannerPosition || 'center';\n    });\n  }\n  function closeProfileModal(root){\n    var layer = qs('[data-dsd-profile-modal-layer]', root || document);\n    if (layer) layer.hidden = true;\n  }\n  function profilePanelTitle(key){\n    return {\n      banner: 'Edit Banner',\n      avatar: 'Edit Photo',\n      edit: 'Edit Profile',\n      followers: 'Followers',\n      following: 'Following',\n      favorites: 'Favorites',\n      saved: 'Saved',\n      likes: 'Likes',\n      media: 'Media',\n      tagged: 'Tagged',\n      story: 'Create Story'\n    }[key] || 'Profile';\n  }\n  function openProfilePanel(key, root){\n    root = root || qs('[data-dsd-user-profile]');\n    if (!root) return false;\n    var layer = qs('[data-dsd-profile-modal-layer]', root);\n    if (!layer) return false;\n    var requestedPanel = qs('[data-dsd-profile-modal-panel=\"' + key + '\"]', root);\n    if (!requestedPanel) return false;\n    if (key === 'edit' || key === 'banner' || key === 'avatar') syncProfileSetupForms(root);\n    if (key === 'banner') {\n      var bannerForm = qs('[data-dsd-banner-form]', root);\n      if (bannerForm) {\n        syncBannerFocusForm(bannerForm, state.profile && state.profile.bannerPosition || 'center');\n        syncBannerEditPreview(bannerForm);\n      }\n    }\n    qsa('[data-dsd-profile-modal-panel]', root).forEach(function(panel){\n      panel.classList.toggle('is-active', panel.getAttribute('data-dsd-profile-modal-panel') === key);\n    });\n    qsa('[data-dsd-relationship-tab]', root).forEach(function(btn){\n      btn.classList.toggle('is-active', btn.getAttribute('data-dsd-relationship-tab') === key);\n    });\n    var title = qs('[data-dsd-profile-modal-title]', root);\n    if (title) title.textContent = profilePanelTitle(key);\n    layer.hidden = false;\n    var dialog = qs('[role=\"dialog\"]', layer);\n    if (dialog) dialog.focus();\n    claim('profile-panel:p11dz684-open', { panel: key, owner: 'LaunchSocialActivation.ProfileRenderer' });\n    return true;\n  }\n  function activateProfileContentTab(key, root){\n    root = root || qs('[data-dsd-user-profile]');\n    if (!root) return false;\n    var titles = { posts: 'Posts', media: 'Media', tagged: 'Tagged' };\n    if (!titles[key]) key = 'posts';\n    qsa('[data-dsd-profile-content-tab]', root).forEach(function(btn){\n      btn.classList.toggle('is-active', btn.getAttribute('data-dsd-profile-content-tab') === key);\n    });\n    qsa('[data-dsd-profile-content-panel]', root).forEach(function(panel){\n      panel.classList.toggle('is-active', panel.getAttribute('data-dsd-profile-content-panel') === key);\n    });\n    var heading = qs('[data-dsd-profile-content-title]', root);\n    if (heading) heading.textContent = titles[key];\n    claim('profile-content-controller:p11dz684-tab-change', { tab: key, owner: 'LaunchSocialActivation.ProfileRenderer' });\n    return true;\n  }\n  function renderProfileModals(){\n    var root = qs('[data-dsd-user-profile]');\n    if (!isOwnProfileRoute()) return;\n    if (!root || root.dataset.dsdFirebaseModals === 'true') return;\n    root.dataset.dsdFirebaseModals = 'true';\n    var banner = qs('[data-dsd-profile-modal-panel=\"banner\"] .dsd-up315__modal-card', root);\n    if (banner) banner.innerHTML = '<strong>Edit Banner</strong><form data-dsd-banner-form><label>Replace image<input name=\"banner\" type=\"file\" accept=\"image/*\"></label>' + bannerPreviewHTML() + bannerFocusAdvancedHTML() + bannerFocusPresetButtonsHTML() + '<small class=\"dsd-content-rating-help\">Move the focus point and zoom to keep the subject visible across mobile and desktop crops.</small><button type=\"submit\">Save banner</button></form>';\n    var edit = qs('[data-dsd-profile-modal-panel=\"edit\"] .dsd-up315__modal-card', root);\n    var adultPreference = '<label class=\"dsd-adult-content-setting\" data-dsd-adult-content-row><input name=\"adultContentEnabled\" type=\"checkbox\"> Adult Content Enabled <small>Requires a saved or entered age of 18+.</small></label>';\n    if (edit) edit.innerHTML = '<strong>Edit Profile</strong><form data-dsd-profile-setup-form><label>Display name<input name=\"displayName\" required></label><label>Handle<input name=\"profileKey\" required></label><label>City<input name=\"locationCity\" autocomplete=\"address-level2\" maxlength=\"80\"></label><label>State<input name=\"locationState\" autocomplete=\"address-level1\" maxlength=\"40\"></label><label>Birthdate<input name=\"birthdate\" type=\"date\" autocomplete=\"bday\"></label><label>Age<input name=\"age\" type=\"number\" min=\"13\" max=\"120\" inputmode=\"numeric\"></label><label>Bio<textarea name=\"bio\" rows=\"4\"></textarea></label>' + publicationOptions('Profile') + adultPreference + '<button type=\"submit\">Save profile</button></form>';\n    var avatar = qs('[data-dsd-profile-modal-panel=\"avatar\"] .dsd-up315__modal-card', root);\n    if (avatar) avatar.innerHTML = '<strong>Edit Photo</strong><form data-dsd-avatar-form><input name=\"avatar\" type=\"file\" accept=\"image/*\" required><button type=\"submit\">Save photo</button></form>';\n    refreshPublicationControls(root);\n    var setupForm = qs('[data-dsd-profile-setup-form]', root);\n    if (setupForm) {\n      syncProfileSetupForms(root);\n    }\n    var bannerForm = qs('[data-dsd-banner-form]', root);\n    if (bannerForm) bannerForm.addEventListener('submit', function(ev){\n      ev.preventDefault();\n      var bannerFileField = formControl(bannerForm, 'banner');\n      var bannerPositionField = formControl(bannerForm, 'bannerPosition');\n      var file = bannerFileField && bannerFileField.files && bannerFileField.files[0];\n      var position = bannerPositionField && bannerPositionField.value || 'center';\n      if (!file) { composerBusy(bannerForm, 'Saving banner focus...', saveProfileMediaPatch({ bannerPosition: position })).then(function(saved){ if (saved) closeProfileModal(root); }); return; }\n      composerBusy(bannerForm, 'Saving banner media...', createMediaManifest(file, 'profile', actorRelationshipIdentity() || actorUid() || uid(), 'banner').then(function(manifest){\n        var mediaId = profileManifestMediaId(manifest);\n        if (!manifest || manifest.status !== 'uploaded' || !mediaId) {\n          renderStatus('Banner upload did not complete. Existing banner was kept.');\n          return null;\n        }\n        return saveProfileMediaPatch({ bannerMediaId: mediaId, banner_media_id: mediaId, headerMediaId: mediaId, header_media_id: mediaId, coverMediaId: mediaId, cover_media_id: mediaId, backgroundMediaId: mediaId, background_media_id: mediaId, bannerPosition: position });\n      })).then(function(saved){ if (saved) closeProfileModal(root); });\n    });\n    if (bannerForm && formControl(bannerForm, 'bannerPosition')) {\n      syncProfileSetupForms(root);\n      syncBannerFocusForm(bannerForm, state.profile && state.profile.bannerPosition || 'center');\n      syncBannerEditPreview(bannerForm);\n      var bannerFileInput = formControl(bannerForm, 'banner');\n      if (bannerFileInput && !bannerFileInput.dataset.dsdBannerPreviewBound) {\n        bannerFileInput.dataset.dsdBannerPreviewBound = 'true';\n        bannerFileInput.addEventListener('change', function(){ syncBannerEditPreview(bannerForm); });\n      }\n    }\n    var avatarForm = qs('[data-dsd-avatar-form]', root);\n    if (avatarForm) avatarForm.addEventListener('submit', function(ev){\n      ev.preventDefault();\n      var avatarFileField = formControl(avatarForm, 'avatar');\n      var file = avatarFileField && avatarFileField.files && avatarFileField.files[0];\n      composerBusy(avatarForm, 'Saving profile photo...', createMediaManifest(file, 'profile', actorRelationshipIdentity() || actorUid() || uid(), 'avatar').then(function(manifest){\n        var mediaId = profileManifestMediaId(manifest);\n        if (!manifest || manifest.status !== 'uploaded' || !mediaId) {\n          renderStatus('Profile photo upload did not complete. Existing profile photo was kept.');\n          return null;\n        }\n        return saveProfileMediaPatch({ avatarMediaId: mediaId, avatar_media_id: mediaId, profileImageMediaId: mediaId, profile_image_media_id: mediaId, photoMediaId: mediaId, photo_media_id: mediaId });\n      })).then(function(saved){ if (saved) closeProfileModal(root); });\n    });\n  }\n  function activateComposerMediaControl(target, ev){\n    var control = target && target.closest && target.closest('[data-dsd-composer-media-button]');\n    if (!control || target.matches('input[type=\"file\"]')) return false;\n    var input = qs('input[type=\"file\"]', control);\n    if (!input || input.disabled) return false;\n    if (ev) {\n      ev.preventDefault();\n      ev.stopPropagation();\n    }\n    input.click();\n    return true;\n  }\n  function bindActions(){\n    if (document.documentElement.dataset.dsdFirebaseActivationBound === BUILD) return;\n    document.documentElement.dataset.dsdFirebaseActivationBound = BUILD;\n    document.addEventListener('click', function(ev){\n      var del = ev.target && ev.target.closest && ev.target.closest('[data-dsd-delete-post]');\n      if (!del) return;\n      var deletePostId = del.getAttribute('data-dsd-delete-post') || '';\n      if (!deletePostId) return;\n      ev.preventDefault();\n      ev.stopPropagation();\n      if (typeof ev.stopImmediatePropagation === 'function') ev.stopImmediatePropagation();\n      if (del.getAttribute('data-dsd-confirm-delete') === 'true') {\n        del.removeAttribute('data-dsd-confirm-delete');\n        del.textContent = 'Delete';\n        deletePost(deletePostId);\n        return;\n      }\n      del.setAttribute('data-dsd-confirm-delete', 'true');\n      del.textContent = 'Confirm delete';\n      renderStatus('Select Confirm delete to remove this post.');\n      window.setTimeout(function(){\n        if (del.getAttribute('data-dsd-confirm-delete') !== 'true') return;\n        del.removeAttribute('data-dsd-confirm-delete');\n        del.textContent = 'Delete';\n      }, 5000);\n    }, true);\n    document.addEventListener('click', function(ev){\n      var globalCreate = ev.target.closest('[data-dsd-create-post-modal], [data-dsd-dock-icon=\"create\"]');\n      if (globalCreate && globalCreate.getAttribute('data-dsd-create-post-modal') === 'true') {\n        ev.preventDefault();\n        openGlobalPostComposer();\n        return;\n      }\n      if (ev.target.closest('[data-dsd-global-post-composer-close]')) {\n        ev.preventDefault();\n        closeGlobalPostComposer();\n        return;\n      }\n      var bannerFocusPreset = ev.target.closest('[data-dsd-banner-focus-preset]');\n      if (bannerFocusPreset) {\n        ev.preventDefault();\n        var bannerForm = bannerFocusPreset.closest('[data-dsd-banner-form]');\n        if (bannerForm) bannerForm.dataset.dsdBannerFocusUserEdited = 'true';\n        syncBannerFocusForm(bannerForm, bannerFocusPreset.getAttribute('data-dsd-banner-focus-preset') || 'center');\n        syncBannerEditPreview(bannerForm);\n        return;\n      }\n      var profileContentTab = ev.target.closest('[data-dsd-profile-content-tab]');\n      if (profileContentTab) {\n        ev.preventDefault();\n        activateProfileContentTab(profileContentTab.getAttribute('data-dsd-profile-content-tab'), profileContentTab.closest('[data-dsd-user-profile]'));\n        return;\n      }\n      var profilePanelOpener = ev.target.closest('[data-dsd-profile-modal-open]');\n      if (profilePanelOpener) {\n        ev.preventDefault();\n        var profilePanelKey = profilePanelOpener.getAttribute('data-dsd-profile-modal-open');\n        if (profilePanelKey === 'story') {\n          ev.stopPropagation();\n          openStoryComposer(true);\n          return;\n        }\n        openProfilePanel(profilePanelKey, profilePanelOpener.closest('[data-dsd-user-profile]'));\n        return;\n      }\n      var profilePanelCloser = ev.target.closest('[data-dsd-profile-modal-close]');\n      if (profilePanelCloser) {\n        ev.preventDefault();\n        closeProfileModal(profilePanelCloser.closest('[data-dsd-user-profile]'));\n        return;\n      }\n      var storyScope = ev.target.closest('[data-dsd-story385-scope]');\n      if (storyScope) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        state.storyScope = storyScope.getAttribute('data-dsd-story385-scope') || 'profile';\n        state.storyScopeUserSelected = true;\n        state.activeStoryId = '';\n        state.storySelectionExplicit = false;\n        renderStories();\n        return;\n      }\n      var trayStory = ev.target.closest('[data-dsd-view-story]');\n      var storyProfileLink = ev.target.closest('[data-dsd-story-profile-link]');\n      if (storyProfileLink && !trayStory) return;\n      if (trayStory) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        state.storySelectionExplicit = true;\n        state.activeStoryId = trayStory.getAttribute('data-dsd-view-story') || '';\n        renderStories();\n        openStoryOverlay(state.activeStoryId);\n        return;\n      }\n      var storyMedia = ev.target.closest('.dsd-story385__media, .dsd-story385__canvas .dsd-launch-media-chip');\n      if (storyMedia) {\n        var mediaStory = storyMedia.closest('[data-dsd-view-story]');\n        if (mediaStory) state.activeStoryId = mediaStory.getAttribute('data-dsd-view-story') || state.activeStoryId;\n        state.storySelectionExplicit = true;\n        ev.preventDefault();\n        ev.stopPropagation();\n        openStoryOverlay(state.activeStoryId);\n        return;\n      }\n      var story = ev.target.closest('[data-dsd-view-story]');\n      if (story && story.closest('[data-dsd-story385]')) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        state.storySelectionExplicit = true;\n        state.activeStoryId = story.getAttribute('data-dsd-view-story') || '';\n        openStoryOverlay(state.activeStoryId);\n        return;\n      }\n      if (!story) return;\n      ev.preventDefault();\n      ev.stopPropagation();\n      state.storySelectionExplicit = true;\n      state.activeStoryId = story.getAttribute('data-dsd-view-story') || '';\n      renderStories();\n      openStoryOverlay(state.activeStoryId);\n    }, true);\n    document.addEventListener('click', function(ev){\n      var inlinePostMedia = ev.target && ev.target.closest && ev.target.closest('.dsd-post-card [data-dsd-post-media-inline-only=\"true\"], .dsd-post-card .dsd-launch-media-chip[data-dsd-inline-media=\"true\"]');\n      if (!inlinePostMedia || inlinePostMedia.closest('[data-dsd-story-overlay-viewer], [data-dsd-story-fullscreen-canvas]')) return;\n      inlinePostMedia.setAttribute('data-dsd-post-media-modal-deconstructed', BUILD);\n      if (ev.target && ev.target.closest && ev.target.closest('video, audio, button, a, input, textarea, select, label')) return;\n      ev.preventDefault();\n      ev.stopImmediatePropagation();\n    }, true);\n    document.addEventListener('click', function(ev){\n      if (activateComposerMediaControl(ev.target, ev)) return;\n      var profileAnchor = ev.target.closest && ev.target.closest('a[href*=\"/pages/user-profile?profile=\"]');\n      if (profileAnchor && !ev.defaultPrevented && !ev.metaKey && !ev.ctrlKey && !ev.shiftKey && !ev.altKey && profileAnchor.target !== '_blank') {\n        var bridgedProfileHref = profileNavigationBridgeHref(profileAnchor.getAttribute('href') || '');\n        if (bridgedProfileHref) {\n          ev.preventDefault();\n          navigateProfileHref(profileAnchor.getAttribute('href') || bridgedProfileHref);\n          return;\n        }\n      }\n      var closePostDrawerButton = ev.target.closest('[data-dsd-close-post-drawer]');\n      if (closePostDrawerButton) {\n        ev.preventDefault();\n        var closeForm = closePostDrawerButton.closest('form');\n        if (closeForm) { closeForm.reset(); clearFormAttachments(closeForm, true); }\n        closePostDrawer();\n        return;\n      }\n      var discoveryFilter = ev.target.closest('[data-dsd-users311-filter]');\n      if (discoveryFilter) {\n        ev.preventDefault();\n        var discoveryRoot = discoveryFilter.closest('[data-dsd-users311]');\n        if (discoveryRoot) qsa('[data-dsd-users311-filter]', discoveryRoot).forEach(function(button){ button.classList.toggle('is-active', button === discoveryFilter); });\n        renderDiscovery();\n        return;\n      }\n      var discoveryCard = ev.target.closest && ev.target.closest('.dsd-users311__card[data-profile-key]');\n      if (discoveryCard && !ev.target.closest('a,button,input,textarea,select,label')) {\n        var profileLink = qs('a.dsd-users311__card-link[href], .dsd-users311__actions a[href*=\"/pages/user-profile\"]', discoveryCard);\n        var profileHref = profileLink && profileLink.getAttribute('href');\n        if (profileHref) {\n          ev.preventDefault();\n          navigateProfileHref(profileHref);\n          return;\n        }\n      }\n      var saveAction = ev.target.closest('[data-dsd-action=\"save\"]');\n      if (saveAction) {\n        ev.preventDefault();\n        var actionSavePostId = saveAction.getAttribute('data-post-id') || saveAction.getAttribute('data-dsd-save-post');\n        if (actionSavePostId) toggleSaveItem('post', actionSavePostId);\n        return;\n      }\n      var like = ev.target.closest('[data-dsd-action=\"like\"]');\n      if (like) { ev.preventDefault(); toggleReaction(like.getAttribute('data-post-id')); return; }\n      var clearAttachments = ev.target.closest('[data-dsd-clear-attachments]');\n      if (clearAttachments) { ev.preventDefault(); clearFormAttachments(clearAttachments.closest('form'), false); return; }\n      var profileComposerFocus = ev.target.closest('[data-dsd-profile-composer-focus]');\n      if (profileComposerFocus) {\n        ev.preventDefault();\n        var profilePublisher = profileComposerFocus.closest('[data-dsd-profile-publisher]') || qs('[data-dsd-profile-publisher]');\n        var profileField = profilePublisher && qs('textarea[name=\"body\"]', profilePublisher);\n        if (profileField) profileField.focus();\n        return;\n      }\n      var profileComposerMedia = ev.target.closest('[data-dsd-profile-composer-media]');\n      if (profileComposerMedia) {\n        ev.preventDefault();\n        var mediaKind = profileComposerMedia.getAttribute('data-dsd-profile-composer-media') || '';\n        var mediaPublisher = profileComposerMedia.closest('[data-dsd-profile-publisher]') || qs('[data-dsd-profile-publisher]');\n        var mediaInput = mediaPublisher && qs('input[name=\"' + (mediaKind === 'video' ? 'video' : 'image') + '\"]', mediaPublisher);\n        if (mediaInput && !mediaInput.disabled) mediaInput.click();\n        return;\n      }\n      var cancelComposer = ev.target.closest('[data-dsd-cancel-composer]');\n      if (cancelComposer) {\n        ev.preventDefault();\n        var cancelForm = cancelComposer.closest('form');\n        if (cancelForm) { cancelForm.reset(); clearFormAttachments(cancelForm, true); }\n        if (cancelForm && cancelForm.closest('[data-dsd-story-form]')) closeStoryComposer();\n        return;\n      }\n      var comment = ev.target.closest('[data-dsd-action=\"comment\"]');\n      if (comment) {\n        ev.preventDefault();\n        var commentPostId = comment.getAttribute('data-post-id') || '';\n        if (commentPostId) {\n          state.openCommentPostIds[commentPostId] = true;\n          delete state.commentOneShotLoads[commentPostId];\n          hydratePostComments([localPostById(commentPostId) || { postId: commentPostId }]);\n          openPostDrawer('comments', commentPostId, comment);\n        }\n        return;\n      }\n      var share = ev.target.closest('[data-dsd-action=\"share\"]');\n      if (share) { ev.preventDefault(); sharePost(share.getAttribute('data-post-id')); return; }\n      var save = ev.target.closest('[data-dsd-save-post]');\n      if (save) {\n        ev.preventDefault();\n        var savePostId = save.getAttribute('data-dsd-save-post');\n        toggleSaveItem('post', savePostId);\n        return;\n      }\n      var reportPost = ev.target.closest('[data-dsd-report-post]');\n      if (reportPost) { ev.preventDefault(); reportContent('post', reportPost.getAttribute('data-dsd-report-post') || '', 'posts/' + (reportPost.getAttribute('data-dsd-report-post') || ''), 'User reported post'); return; }\n      var commentEdit = ev.target.closest('[data-dsd-edit-comment]');\n      if (commentEdit) {\n        ev.preventDefault();\n        var editPostId = commentEdit.getAttribute('data-post-id') || '';\n        var editCommentId = commentEdit.getAttribute('data-dsd-edit-comment') || '';\n        var existingComment = (state.commentsByPost[editPostId] || []).filter(function(item){ return commentKey(item) === editCommentId; })[0] || {};\n        var commentBody = window.prompt('Edit comment', existingComment.body || '');\n        if (commentBody != null) editComment(editPostId, editCommentId, { body: commentBody });\n        return;\n      }\n      var commentDelete = ev.target.closest('[data-dsd-delete-comment]');\n      if (commentDelete) {\n        ev.preventDefault();\n        if (commentDelete.getAttribute('data-dsd-confirm-delete') !== 'true') {\n          commentDelete.setAttribute('data-dsd-confirm-delete', 'true');\n          commentDelete.textContent = 'Confirm delete';\n          window.setTimeout(function(){\n            if (commentDelete && commentDelete.isConnected && commentDelete.getAttribute('data-dsd-confirm-delete') === 'true') {\n              commentDelete.removeAttribute('data-dsd-confirm-delete');\n              commentDelete.textContent = 'Delete';\n            }\n          }, 5000);\n          return;\n        }\n        deleteComment(commentDelete.getAttribute('data-post-id') || '', commentDelete.getAttribute('data-dsd-delete-comment') || '').then(function(){ renderPostDrawer(); }, function(){ renderPostDrawer(); });\n        return;\n      }\n      var commentApprove = ev.target.closest('[data-dsd-approve-comment]');\n      if (commentApprove) { ev.preventDefault(); updateCommentState(commentApprove.getAttribute('data-post-id') || '', commentApprove.getAttribute('data-dsd-approve-comment') || '', 'approved').then(function(){ renderPostDrawer(); }, function(){ renderPostDrawer(); }); return; }\n      var commentHide = ev.target.closest('[data-dsd-hide-comment]');\n      if (commentHide) { ev.preventDefault(); updateCommentState(commentHide.getAttribute('data-post-id') || '', commentHide.getAttribute('data-dsd-hide-comment') || '', 'hidden').then(function(){ renderPostDrawer(); }, function(){ renderPostDrawer(); }); return; }\n      var commentReject = ev.target.closest('[data-dsd-reject-comment]');\n      if (commentReject) { ev.preventDefault(); updateCommentState(commentReject.getAttribute('data-post-id') || '', commentReject.getAttribute('data-dsd-reject-comment') || '', 'rejected').then(function(){ renderPostDrawer(); }, function(){ renderPostDrawer(); }); return; }\n      var commentRestore = ev.target.closest('[data-dsd-restore-comment]');\n      if (commentRestore) { ev.preventDefault(); updateCommentState(commentRestore.getAttribute('data-post-id') || '', commentRestore.getAttribute('data-dsd-restore-comment') || '', 'approved').then(function(){ renderPostDrawer(); }, function(){ renderPostDrawer(); }); return; }\n      var edit = ev.target.closest('[data-dsd-edit-post]');\n      if (edit) {\n        ev.preventDefault();\n        var postId = edit.getAttribute('data-dsd-edit-post');\n        var existing = state.posts.filter(function(item){ return (item.postId || item.id) === postId; })[0] || {};\n        var body = window.prompt('Edit post text', existing.body || '');\n        if (body != null) editPost(postId, { body: body, caption: '' });\n        return;\n      }\n      var del = ev.target.closest('[data-dsd-delete-post]');\n      if (del) {\n        ev.preventDefault();\n        var deletePostId = del.getAttribute('data-dsd-delete-post') || '';\n        if (del.getAttribute('data-dsd-confirm-delete') === 'true') {\n          del.removeAttribute('data-dsd-confirm-delete');\n          del.textContent = 'Delete';\n          deletePost(deletePostId);\n          return;\n        }\n        del.setAttribute('data-dsd-confirm-delete', 'true');\n        del.textContent = 'Confirm delete';\n        renderStatus('Select Confirm delete to remove this post.');\n        window.setTimeout(function(){\n          if (del.getAttribute('data-dsd-confirm-delete') !== 'true') return;\n          del.removeAttribute('data-dsd-confirm-delete');\n          del.textContent = 'Delete';\n        }, 5000);\n        return;\n      }\n      var follow = ev.target.closest('[data-dsd-follow-profile]');\n      if (follow) { ev.preventDefault(); followProfile(follow.getAttribute('data-dsd-follow-profile'), follow.getAttribute('data-profile-key') || ''); return; }\n      var toggleFollow = ev.target.closest('[data-dsd-toggle-follow-profile]');\n      if (toggleFollow) { ev.preventDefault(); toggleFollowProfile(toggleFollow.getAttribute('data-dsd-toggle-follow-profile'), toggleFollow.getAttribute('data-profile-key') || ''); return; }\n      var unfollow = ev.target.closest('[data-dsd-unfollow-profile]');\n      if (unfollow) { ev.preventDefault(); unfollowProfile(unfollow.getAttribute('data-dsd-unfollow-profile')); return; }\n      var unblock = ev.target.closest('[data-dsd-unblock-profile]');\n      if (unblock) { ev.preventDefault(); unblockProfile(unblock.getAttribute('data-dsd-unblock-profile'), unblock.getAttribute('data-profile-key') || ''); return; }\n      var acceptFollow = ev.target.closest('[data-dsd-accept-follow-request]');\n      if (acceptFollow) { ev.preventDefault(); resolveFollowRequest(acceptFollow.getAttribute('data-dsd-accept-follow-request'), acceptFollow.getAttribute('data-profile-key') || '', 'active'); return; }\n      var declineFollow = ev.target.closest('[data-dsd-decline-follow-request]');\n      if (declineFollow) { ev.preventDefault(); resolveFollowRequest(declineFollow.getAttribute('data-dsd-decline-follow-request'), declineFollow.getAttribute('data-profile-key') || '', 'declined'); return; }\n      var favorite = ev.target.closest('[data-dsd-favorite-user]');\n      if (favorite) { ev.preventDefault(); toggleFavoriteUser(favorite.getAttribute('data-dsd-favorite-user'), favorite.getAttribute('data-profile-key') || ''); return; }\n      var feedFilter = ev.target.closest('[data-dsd-feed-filter]');\n      if (feedFilter) {\n        ev.preventDefault();\n        state.feedFilter = feedFilter.getAttribute('data-dsd-feed-filter') || 'all';\n        renderPosts('feed-filter');\n        return;\n      }\n      var messageTab = ev.target.closest('[data-dsd-msg384-tab]');\n      if (messageTab) {\n        ev.preventDefault();\n        qsa('[data-dsd-msg384-tab]', messageTab.closest('[data-dsd-msg384]') || document).forEach(function(button){ button.classList.toggle('is-active', button === messageTab); });\n        renderMessages();\n        return;\n      }\n      var messageProfileLink = ev.target.closest('[data-dsd-message-profile-link]');\n      if (messageProfileLink && !messageProfileLink.matches('a[href]')) {\n        var messageProfileKey = messageProfileLink.getAttribute('data-dsd-message-profile-link') || '';\n        if (messageProfileKey) {\n          ev.preventDefault();\n          window.location.assign(profileRouteHref(messageProfileKey));\n          return;\n        }\n      }\n      var relationshipSearch = ev.target.closest('[data-dsd-profile-relationship-search]');\n      if (relationshipSearch) return;\n      var storyClose = ev.target.closest('[data-dsd-story-composer-close]');\n      if (storyClose) { ev.preventDefault(); closeStoryComposer(); return; }\n      var immersiveClose = ev.target.closest('[data-dsd-immersive-close]');\n      if (immersiveClose) { ev.preventDefault(); closeImmersiveOverlay(); return; }\n      var storyActions = ev.target.closest('[data-dsd-story-actions]');\n      if (storyActions) { ev.preventDefault(); openStoryOverlay(state.activeStoryId); return; }\n      var storyProfileAction = ev.target.closest('[data-dsd-story385-profile-action]');\n      if (storyProfileAction) {\n        var storyAction = storyProfileAction.getAttribute('data-dsd-story385-profile-action') || '';\n        if (storyAction === 'create') {\n          ev.preventDefault();\n          ev.stopPropagation();\n          openStoryComposer(true);\n          return;\n        }\n        if (storyAction.indexOf('view') === 0) { ev.preventDefault(); ev.stopPropagation(); openStoryOverlay(state.activeStoryId); return; }\n      }\n      var thread = ev.target.closest('[data-dsd-launch-thread]');\n      if (thread) {\n        ev.preventDefault();\n        state.activeConversationId = thread.getAttribute('data-conversation-id') || thread.getAttribute('data-handle') || '';\n        hydrateConversationMessages(state.activeConversationId);\n        renderMessages();\n        markConversationRead(state.activeConversationId);\n        return;\n      }\n      var startMessageProfile = ev.target.closest('[data-dsd-start-message-profile]');\n      if (startMessageProfile) {\n        ev.preventDefault();\n        var startUid = startMessageProfile.getAttribute('data-recipient-uid') || '';\n        var startKey = startMessageProfile.getAttribute('data-dsd-start-message-profile') || '';\n        var startCid = canonicalConversationId(startUid || startKey, startKey);\n        state.activeConversationId = startCid;\n        var startForm = qs('[data-dsd-inline-message-form]');\n        if (startForm) {\n          if (qs('[name=\"recipientUid\"]', startForm)) qs('[name=\"recipientUid\"]', startForm).value = startUid || startKey;\n          if (qs('[name=\"conversationId\"]', startForm)) qs('[name=\"conversationId\"]', startForm).value = startCid;\n        }\n        renderMessages();\n        var startBody = qs('[data-dsd-inline-message-form] textarea[name=\"body\"]');\n        if (startBody) window.setTimeout(function(){ startBody.focus(); }, 0);\n        return;\n      }\n      var messageAction = ev.target.closest('[data-dsd-message-action]');\n      if (messageAction) {\n        ev.preventDefault();\n        var messageActionName = messageAction.getAttribute('data-dsd-message-action') || '';\n        var messageCid = state.activeConversationId || (qs('[name=\"conversationId\"]') || {}).value || '';\n        if (!messageCid) { renderStatus('Select a conversation first.'); return; }\n        if (messageActionName === 'report') { createSafetyReport('report-message', messageCid, 'Messaging safety thread'); return; }\n        if (messageActionName === 'block' || messageActionName === 'unblock') {\n          var actionConversation = conversationById(messageCid) || {};\n          var actionPeer = conversationPeer(actionConversation);\n          if (!actionPeer || !actionPeer.uid || identityMatchesCurrent(actionPeer.uid, actionPeer.key || '')) { renderStatus('Select a direct conversation participant first.'); return; }\n          (messageActionName === 'block' ? blockProfile(actionPeer.uid, actionPeer.key || '') : unblockProfile(actionPeer.uid, actionPeer.key || ''));\n          return;\n        }\n        var actionPatch = {};\n        if (messageActionName === 'accept') actionPatch.state = 'active';\n        if (messageActionName === 'decline') actionPatch.state = 'declined';\n        if (messageActionName === 'mute') actionPatch.muted = true;\n        if (!Object.keys(actionPatch).length) return;\n        setDoc('conversations/' + messageCid, actionPatch, true).catch(function(error){ queueDraft('message-action', { conversationId: messageCid, action: messageActionName }, error); return null; }).then(function(){\n          state.conversations = state.conversations.map(function(item){ return (item.conversationId || item.id) === messageCid ? Object.assign({}, item, actionPatch) : item; });\n          renderMessages();\n        });\n        return;\n      }\n      var messageSendButton = ev.target.closest('button[type=\"submit\"]');\n      if (messageSendButton) {\n        var messageSendForm = messageSendButton.closest('[data-dsd-message-form]');\n        if (messageSendForm) {\n          ev.preventDefault();\n          handleMessageComposerSubmit(messageSendForm);\n          return;\n        }\n      }\n      var story = ev.target.closest('[data-dsd-view-story]');\n      if (ev.target.closest('[data-dsd-story-profile-link]')) return;\n      if (story) {\n        ev.preventDefault();\n        ev.stopPropagation();\n        state.storySelectionExplicit = true;\n        state.activeStoryId = story.getAttribute('data-dsd-view-story') || '';\n        openStoryOverlay(state.activeStoryId);\n        return;\n      }\n      var reportStory = ev.target.closest('[data-dsd-report-story]');\n      if (reportStory) { ev.preventDefault(); reportContent('story', reportStory.getAttribute('data-dsd-report-story') || '', 'stories/' + (reportStory.getAttribute('data-dsd-report-story') || ''), 'User reported story'); return; }\n      var approveStory = ev.target.closest('[data-dsd-approve-story]');\n      if (approveStory) { ev.preventDefault(); updateStoryState(approveStory.getAttribute('data-dsd-approve-story'), 'approved'); return; }\n      var hideStory = ev.target.closest('[data-dsd-hide-story]');\n      if (hideStory) { ev.preventDefault(); updateStoryState(hideStory.getAttribute('data-dsd-hide-story'), 'hidden'); return; }\n      var rejectStory = ev.target.closest('[data-dsd-reject-story]');\n      if (rejectStory) { ev.preventDefault(); updateStoryState(rejectStory.getAttribute('data-dsd-reject-story'), 'rejected'); return; }\n      var restoreStory = ev.target.closest('[data-dsd-restore-story]');\n      if (restoreStory) { ev.preventDefault(); updateStoryState(restoreStory.getAttribute('data-dsd-restore-story'), 'approved'); return; }\n      var deleteStoryButton = ev.target.closest('[data-dsd-delete-story]');\n      if (deleteStoryButton) { ev.preventDefault(); deleteStory(deleteStoryButton.getAttribute('data-dsd-delete-story') || ''); return; }\n      var archiveSafety = ev.target.closest('[data-dsd-archive-safety-report]');\n      if (archiveSafety) { ev.preventDefault(); archiveSafetyReport(archiveSafety.getAttribute('data-dsd-archive-safety-report') || ''); return; }\n      var notificationCard = ev.target.closest('[data-notification-card]');\n      if (notificationCard && !ev.target.closest('a, button, input, textarea, select, label, summary')) {\n        var notificationHref = notificationCard.getAttribute('data-dsd-target-href') || '';\n        if (notificationHref) {\n          ev.preventDefault();\n          window.location.assign(notificationHref);\n          return;\n        }\n      }\n      var mark = ev.target.closest('[data-dsd-mark-notification-read]');\n      if (mark) {\n        ev.preventDefault();\n        var notificationId = mark.getAttribute('data-dsd-mark-notification-read');\n        setDoc('notifications/' + uid() + '/items/' + notificationId, { read: true }, true).then(function(){\n          state.notifications = state.notifications.map(function(item){ return (item.id === notificationId || item.notificationId === notificationId) ? Object.assign({}, item, { read: true }) : item; });\n          renderNotifications();\n        });\n        return;\n      }\n      var markAll = ev.target.closest('[data-dsd-mark-all-notifications-read]');\n      if (markAll) {\n        ev.preventDefault();\n        var unreadNotifications = state.notifications.filter(function(item){ return !item.read && (item.id || item.notificationId); });\n        Promise.all(unreadNotifications.map(function(item){\n          return setDoc('notifications/' + uid() + '/items/' + (item.id || item.notificationId), { read: true }, true);\n        })).then(function(){\n          state.notifications = state.notifications.map(function(item){ return Object.assign({}, item, { read: true }); });\n          renderNotifications();\n        }).catch(function(error){ queueDraft('notification-mark-all-read', { count: unreadNotifications.length }, error); });\n        return;\n      }\n      var approve = ev.target.closest('[data-dsd-approve-post]');\n      if (approve) { ev.preventDefault(); updatePostState(approve.getAttribute('data-dsd-approve-post'), 'approved'); return; }\n      var hide = ev.target.closest('[data-dsd-hide-post]');\n      if (hide) { ev.preventDefault(); updatePostState(hide.getAttribute('data-dsd-hide-post'), 'hidden'); return; }\n      var reject = ev.target.closest('[data-dsd-reject-post]');\n      if (reject) { ev.preventDefault(); updatePostState(reject.getAttribute('data-dsd-reject-post'), 'rejected'); return; }\n      var resolveQueue = ev.target.closest('[data-dsd-resolve-queue]');\n      if (resolveQueue) { ev.preventDefault(); updateQueueItemState(resolveQueue.getAttribute('data-dsd-resolve-queue'), 'approved'); return; }\n      var hideQueue = ev.target.closest('[data-dsd-hide-queue]');\n      if (hideQueue) { ev.preventDefault(); updateQueueItemState(hideQueue.getAttribute('data-dsd-hide-queue'), 'hidden'); return; }\n      var rejectQueue = ev.target.closest('[data-dsd-reject-queue]');\n      if (rejectQueue) { ev.preventDefault(); updateQueueItemState(rejectQueue.getAttribute('data-dsd-reject-queue'), 'rejected'); return; }\n      var restoreQueue = ev.target.closest('[data-dsd-restore-queue]');\n      if (restoreQueue) { ev.preventDefault(); updateQueueItemState(restoreQueue.getAttribute('data-dsd-restore-queue'), 'approved'); return; }\n      var classifyQueue = ev.target.closest('[data-dsd-classify-queue]');\n      if (classifyQueue) {\n        ev.preventDefault();\n        updateQueueClassification(classifyQueue.getAttribute('data-queue-id'), classifyQueue.getAttribute('data-dsd-classify-queue'));\n        return;\n      }\n      var governProfile = ev.target.closest('[data-dsd-govern-profile]');\n      if (governProfile) {\n        ev.preventDefault();\n        updateProfileGovernance(governProfile.getAttribute('data-target-uid') || '', governProfile.getAttribute('data-profile-key') || '', governProfile.getAttribute('data-dsd-govern-profile') || '');\n        return;\n      }\n      var safety = ev.target.closest('[data-dsd-safety-action]');\n      if (safety) { ev.preventDefault(); createSafetyReport(safety.getAttribute('data-dsd-safety-action'), (qs('[name=\"conversationId\"]') || {}).value || '', 'Messaging safety thread'); return; }\n    });\n    document.addEventListener('input', function(ev){\n      if (ev.target && ev.target.matches && ev.target.matches('[data-dsd-users311-search]')) renderDiscovery();\n      if (ev.target && ev.target.matches && ev.target.matches('[data-dsd-msg384-search]')) renderMessages();\n      if (ev.target && ev.target.matches && ev.target.matches('[data-dsd-msg384-start-search]')) renderMessageStarter(qs('[data-dsd-msg384]') || document);\n      var bannerFocusControl = ev.target && ev.target.closest && ev.target.closest('[data-dsd-banner-focus-x], [data-dsd-banner-focus-y], [data-dsd-banner-zoom]');\n      if (bannerFocusControl) {\n        var bannerForm = bannerFocusControl.closest('[data-dsd-banner-form]');\n        if (bannerForm) bannerForm.dataset.dsdBannerFocusUserEdited = 'true';\n        var x = qs('[data-dsd-banner-focus-x]', bannerForm);\n        var y = qs('[data-dsd-banner-focus-y]', bannerForm);\n        var zoom = qs('[data-dsd-banner-zoom]', bannerForm);\n        syncBannerFocusForm(bannerForm, 'x' + Math.round(Number(x && x.value || 50)) + '-y' + Math.round(Number(y && y.value || 50)) + '-z' + Math.round(Number(zoom && zoom.value || 100)));\n        syncBannerEditPreview(bannerForm);\n      }\n    });\n    function handleMessageComposerSubmit(messageForm){\n      if (!messageForm) return;\n      if (!requireActiveProfile('message')) return;\n      var recipientInput = qs('[name=\"recipientUid\"]', messageForm);\n      var conversationInput = qs('[name=\"conversationId\"]', messageForm);\n      var groupInput = qs('[name=\"groupRecipients\"]', messageForm);\n      var inlineContext = messageForm.closest('[data-dsd-msg384-conversation], [data-dsd-msg384-summary]');\n      var recipientValue = recipientInput && recipientInput.value || '';\n      var conversationValue = conversationInput && conversationInput.value || inlineContext && inlineContext.getAttribute('data-conversation-id') || '';\n      var groupValue = groupInput && groupInput.value || '';\n      var bodyInput = qs('[name=\"body\"]', messageForm);\n      var media = collectFormFiles(messageForm);\n      var sendPromise = String(groupValue || '').trim() ? sendGroupMessage(conversationValue, bodyInput && bodyInput.value || '', parseGroupRecipients(groupValue), media) : sendMessage(conversationValue, bodyInput && bodyInput.value || '', recipientValue, queryParam('profile'), media);\n      composerBusy(messageForm, media.length ? 'Saving media and message...' : 'Sending message...', sendPromise).then(function(result){\n        if (result) { messageForm.reset(); removeFilePreviews(messageForm); }\n        if (recipientInput) recipientInput.value = recipientValue;\n        if (groupInput) groupInput.value = groupValue;\n        if (conversationInput) conversationInput.value = conversationValue || (String(groupValue || '').trim() ? canonicalGroupConversationId(uniqueIdentities(parseGroupRecipients(groupValue))) : (recipientValue ? canonicalConversationId(recipientValue, queryParam('profile')) : ''));\n      });\n    }\n    document.addEventListener('submit', function(ev){\n      var profileSetupForm = ev.target.closest('[data-dsd-profile-setup-form]');\n      if (profileSetupForm) {\n        ev.preventDefault();\n        handleProfileSetupSubmit(profileSetupForm, qs('[data-dsd-user-profile]') || document);\n        return;\n      }\n      var globalPostForm = ev.target.closest('[data-dsd-global-post-composer]');\n      if (globalPostForm) {\n        ev.preventDefault();\n        if (!requireActiveProfile('create posts')) return;\n        var postMedia = collectFormFiles(globalPostForm);\n        var postPolicy = policyFromSelectValue((qs('[name=\"visibility\"]', globalPostForm) || {}).value || 'public');\n        composerBusy(globalPostForm, postMedia.length ? 'Saving media and post...' : 'Saving post...', createPost({\n          body: (qs('[name=\"body\"]', globalPostForm) || {}).value || '',\n          caption: '',\n          visibility: postPolicy.visibility,\n          contentRating: postPolicy.contentRating,\n          accessGate: postPolicy.accessGate,\n          media: postMedia\n        })).then(function(result){\n          if (result) {\n            globalPostForm.reset();\n            removeFilePreviews(globalPostForm);\n            updateComposerCounters(globalPostForm);\n            closeGlobalPostComposer();\n          }\n        });\n        return;\n      }\n      var commentForm = ev.target.closest('[data-dsd-comment-form]');\n      if (commentForm) {\n        ev.preventDefault();\n        if (!requireActiveProfile('comment')) return;\n        var commentInput = qs('[name=\"body\"]', commentForm);\n        var commentBody = commentInput && commentInput.value || '';\n        var commentMedia = [];\n        qsa('input[type=\"file\"]', commentForm).forEach(function(input){ Array.prototype.forEach.call(input.files || [], function(file){ commentMedia.push(file); }); });\n        composerBusy(commentForm, commentMedia.length ? 'Saving media and comment...' : 'Saving comment...', addComment(commentForm.getAttribute('data-post-id'), { body: commentBody, media: commentMedia })).then(function(result){ if (result) { commentForm.reset(); removeFilePreviews(commentForm); renderPostDrawer(); } });\n        return;\n      }\n      var messageForm = ev.target.closest('[data-dsd-message-form]');\n      if (messageForm) {\n        ev.preventDefault();\n        handleMessageComposerSubmit(messageForm);\n        return;\n      }\n      var storyForm = ev.target.closest('[data-dsd-story-form]');\n      if (storyForm) {\n        ev.preventDefault();\n        if (!requireActiveProfile('create stories')) return;\n        var media = collectFormFiles(storyForm);\n        if (!validateStoryMediaFiles(media, storyForm)) return;\n        var policy = policyFromSelectValue((qs('[name=\"visibility\"]', storyForm) || {}).value || 'public');\n        composerBusy(storyForm, media.length ? 'Saving media and story...' : 'Saving story...', createStory({ body: (qs('[name=\"body\"]', storyForm) || {}).value || '', visibility: policy.visibility, contentRating: policy.contentRating, accessGate: policy.accessGate, media: media })).then(function(result){ if (result) { storyForm.reset(); removeFilePreviews(storyForm); var storyProfileRoot = storyForm.closest('[data-dsd-user-profile]'); if (storyProfileRoot) closeProfileModal(storyProfileRoot); if (storyForm.closest('[data-dsd-story-composer-layer]')) closeStoryComposer(); } });\n      }\n    });\n    document.addEventListener('keydown', function(ev){\n      var overlay = qs('[data-dsd-immersive-overlay]');\n      if (overlay) {\n        if (ev.key === 'Escape') { ev.preventDefault(); closeImmersiveOverlay(); return; }\n        if (ev.key === 'ArrowLeft') {\n          ev.preventDefault();\n          if (overlay.getAttribute('data-dsd-immersive-mode') === 'story') stepStory(-1);\n          return;\n        }\n        if (ev.key === 'ArrowRight') {\n          ev.preventDefault();\n          if (overlay.getAttribute('data-dsd-immersive-mode') === 'story') stepStory(1);\n          return;\n        }\n      }\n      var focusedNotification = ev.target && ev.target.closest && ev.target.closest('[data-notification-card]');\n      if (focusedNotification && (ev.key === 'Enter' || ev.key === ' ')) {\n        var focusedHref = focusedNotification.getAttribute('data-dsd-target-href') || '';\n        if (focusedHref && !ev.target.closest('a, button, input, textarea, select, label, summary')) {\n          ev.preventDefault();\n          window.location.assign(focusedHref);\n          return;\n        }\n      }\n      if (ev.key === 'Escape') {\n        if (state.postDrawer && state.postDrawer.open) {\n          ev.preventDefault();\n          closePostDrawer();\n          return;\n        }\n        var globalPostLayer = qs('[data-dsd-global-post-composer-layer]:not([hidden])');\n        if (globalPostLayer) {\n          ev.preventDefault();\n          closeGlobalPostComposer();\n          return;\n        }\n        var profileLayer = qs('[data-dsd-profile-modal-layer]:not([hidden])');\n        if (profileLayer) {\n          ev.preventDefault();\n          closeProfileModal(profileLayer.closest('[data-dsd-user-profile]'));\n          return;\n        }\n      }\n      if ((ev.key === 'Enter' || ev.key === ' ') && ev.target && ev.target.closest && ev.target.closest('[data-dsd-composer-media-button]')) activateComposerMediaControl(ev.target, ev);\n    });\n    document.addEventListener('change', function(ev){\n      var fileInput = ev.target.closest('input[type=\"file\"]');\n      if (!fileInput) return;\n      var form = fileInput.closest('form');\n      if (form && form.matches('[data-dsd-story-form]') && !validateStoryMediaFiles(collectFormFiles(form), form)) return;\n      if (form) renderFilePreviews(form);\n    });\n    document.addEventListener('input', function(ev){\n      if (ev.target && ev.target.matches && ev.target.matches('textarea[name=\"body\"]')) updateComposerCounters(ev.target.closest('form') || document);\n      var search = ev.target.closest('[data-dsd-profile-relationship-search]');\n      if (!search) return;\n      var panel = search.closest('[data-dsd-profile-modal-panel]');\n      var q = String(search.value || '').toLowerCase();\n      qsa('[data-dsd-relationship-record]', panel).forEach(function(row){\n        var text = String(row.getAttribute('data-keywords') || row.textContent || '').toLowerCase();\n        row.hidden = !!q && text.indexOf(q) === -1;\n      });\n    });\n  }\n  function renderAll(){\n    renderRouteAccessGates();\n    renderPublicGuard();\n    renderProfileIdentity();\n    renderComposer();\n    renderProfileModals();\n    refreshPublicationControls(document);\n    renderPosts();\n    renderPostDrawer();\n    renderNotifications();\n    renderMessages();\n    renderStories();\n    renderModeration();\n    renderDiscovery();\n    renderRelationships();\n    renderSearchIndex();\n    syncRestrictedActionControls();\n    claim('launch-social:metadata-cutover-render', { authenticated: hasCustomer(), firebaseUser: !!state.firebaseUser, supabaseCutoverReady: supabaseCutoverReady(), profileExists: state.profileExists, paths: PATHS, draftQueueLength: draftQueue().length });\n  }\n  function installModalContainmentStyles(){\n    if (document.getElementById('dsd-modal-containment-p11dz643')) return;\n    var style = document.createElement('style');\n    style.id = 'dsd-modal-containment-p11dz643';\n    style.textContent = '.dsd-modal,.dsd-up315__modal-layer,.dsd-immersive-overlay,[data-dsd-profile-modal-layer]{box-sizing:border-box;max-width:100vw;overflow-x:hidden}.dsd-modal *, .dsd-up315__modal-layer *, .dsd-immersive-overlay *, [data-dsd-profile-modal-layer] *{box-sizing:border-box;min-width:0}.dsd-modal__inner,.dsd-modal__content,.dsd-up315__modal-card,.dsd-post-more-menu__panel,.dsd-founder390__modal,.dsd-safety-modal{width:min(100% - 24px,720px);max-width:calc(100vw - 24px);overflow-x:hidden}.dsd-up315__modal-panel,.dsd-up315__modal-card form,.dsd-modal form,.dsd-launch-comments form,.dsd-msg384__composer,.dsd-composer-media-actions,.dsd-launch-actions,.dsd-story385__actions{max-width:100%;overflow-wrap:anywhere}.dsd-modal input,.dsd-modal textarea,.dsd-modal select,.dsd-up315__modal-card input,.dsd-up315__modal-card textarea,.dsd-up315__modal-card select{width:100%;max-width:100%}.dsd-modal img,.dsd-modal video,.dsd-up315__modal-card img,.dsd-up315__modal-card video{max-width:100%;height:auto}.dsd-post-drawer__backdrop{background:rgba(0,0,0,.42)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.dsd-post-drawer__panel{background:rgba(0,0,0,.42)!important;box-shadow:-18px 0 44px rgba(0,0,0,.28)!important}.dsd-post-drawer__body,.dsd-post-drawer__comments,.dsd-post-drawer .dsd-launch-comment,.dsd-launch-comment-card{background:transparent!important;box-shadow:none!important}.dsd-post-drawer .dsd-launch-comment{border:0!important;border-bottom:1px solid rgba(255,255,255,.08)!important;border-radius:0!important;padding-left:0!important;padding-right:0!important}.dsd-launch-actions,.dsd-story385__actions,.dsd-post-more-menu__panel,.dsd-users311__actions{display:flex;flex-wrap:wrap;gap:8px}.dsd-launch-actions>* , .dsd-story385__actions>* , .dsd-post-more-menu__panel>* , .dsd-users311__actions>*{max-width:100%;white-space:normal}.dsd-post-card,.dsd-up315__post,.dsd-feed368__list,.dsd-feed368__stories,.dsd-feed368__composer{background:rgba(255,255,255,.012)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.dsd-post-card:before,.dsd-post-card:after,.dsd-up315__post:before,.dsd-up315__post:after{filter:none!important;box-shadow:none!important}.dsd-msg384,.dsd-msg384__shell,.dsd-msg384__layout,.dsd-msg384__conversation,.dsd-msg384__rail,.dsd-msg384__participants,.dsd-msg384__composer,.dsd-msg384__actions,.dsd-msg384__panel{box-sizing:border-box;max-width:100%;min-width:0}.dsd-msg384__messages{max-width:100%;min-width:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scroll-behavior:auto}.dsd-msg384__bubble{max-width:100%;min-width:0;overflow-wrap:anywhere}.dsd-msg384__bubble>div,.dsd-msg384__bubble p,.dsd-msg384__bubble strong,.dsd-msg384__bubble em{max-width:100%;min-width:0;overflow-wrap:anywhere}.dsd-msg384__message-media,.dsd-msg384__media-chip{max-width:100%;min-width:0}.dsd-msg384__composer{margin-bottom:0!important;padding-bottom:8px!important}.dsd-msg384__actions--inline,.dsd-msg384__panel--safety{margin-bottom:0!important;padding-bottom:0!important}.dsd-noti321__card[data-dsd-target-href]{cursor:pointer}.dsd-saved-tile video,.dsd-saved-tile [data-dsd-media-kind=\"video\"] video{display:none!important}@media(max-width:430px){.dsd-modal__inner,.dsd-modal__content,.dsd-up315__modal-card,.dsd-post-more-menu__panel,.dsd-founder390__modal,.dsd-safety-modal{width:calc(100vw - 20px);max-width:calc(100vw - 20px)}.dsd-launch-actions>button,.dsd-launch-actions>a,.dsd-story385__actions>button,.dsd-users311__actions>a,.dsd-users311__actions>button{flex:1 1 140px}.dsd-msg384{padding-inline:8px!important}.dsd-msg384__layout{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:10px!important}.dsd-msg384__rail,.dsd-msg384__conversation,.dsd-msg384__participants{width:100%!important;max-width:100%!important}.dsd-msg384__messages{max-height:58vh!important}.dsd-msg384__composer{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:8px!important}.dsd-msg384__composer textarea{width:100%!important;max-width:100%!important}.dsd-msg384__bubble{width:100%!important}.dsd-msg384__bubble.is-me{margin-left:0!important}}';\n    style.textContent += '.dsd-post-card,.dsd-up315__post,.dsd-feed368__list,.dsd-feed368__stories,.dsd-feed368__composer,.dsd-launch-feed,.dsd-feed368__shell{background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}html body .dsd-post-card,html body .dsd-up315__post,html body .dsd-feed368 .dsd-feed368__list,html body .dsd-feed368 .dsd-feed368__stories,html body .dsd-feed368 .dsd-feed368__composer,html body [data-dsd-feed-root] .dsd-post-card,html body [data-dsd-profile-feed-list] .dsd-post-card{background:transparent!important;background-color:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.dsd-post-card:before,.dsd-post-card:after,.dsd-up315__post:before,.dsd-up315__post:after,.dsd-feed368__list:before,.dsd-feed368__list:after{content:none!important;display:none!important;background:transparent!important;box-shadow:none!important;filter:none!important}';\n    style.textContent += '.dsd-up315__cover{display:block!important;min-height:clamp(168px,32vw,330px)!important;background-image:var(--dsd-up315-cover)!important;background-size:cover!important;background-position:center!important;background-color:rgba(255,255,255,.07)!important;position:relative!important;z-index:1!important}.dsd-up315__hero{position:relative!important;z-index:2!important;display:grid!important;gap:12px!important}.dsd-up315__actions{position:relative!important;z-index:5!important;display:flex!important;flex-wrap:wrap!important;gap:8px!important;margin-top:8px!important;clear:both!important}.dsd-up315__bio{position:relative!important;z-index:1!important;margin-bottom:8px!important}.dsd-composer-media-actions{display:flex!important;align-items:center!important;flex-wrap:wrap!important;gap:8px!important}.dsd-composer-policy-tools{display:inline-flex!important;align-items:center!important;gap:6px!important}.dsd-publication-control{display:inline-flex!important;align-items:center!important;gap:6px!important}.dsd-content-rating-help{display:none!important}.dsd-noti321__card{display:grid!important;grid-template-columns:auto minmax(0,1fr) auto!important;gap:10px!important;align-items:start!important}.dsd-noti321__thumb{display:grid!important;place-items:center!important;width:42px!important;height:42px!important;min-width:42px!important;border-radius:50%!important;overflow:hidden!important;background:rgba(255,255,255,.10)!important}.dsd-noti321__thumb img,.dsd-noti321__thumb .dsd-media-element{width:100%!important;height:100%!important;object-fit:cover!important}.dsd-up315__modal-list [data-dsd-relationship-record]{display:grid!important;grid-template-columns:auto minmax(0,1fr) auto!important;align-items:center!important;gap:10px!important}.dsd-global-post-composer-layer:not([hidden]){position:fixed!important;inset:0!important;z-index:2147483340!important;display:grid!important;place-items:center!important;background:rgba(0,0,0,.42)!important;padding:16px!important}@media(max-width:520px){.dsd-noti321__card{grid-template-columns:auto minmax(0,1fr)!important}.dsd-noti321__actions{grid-column:1/-1!important}.dsd-up315__actions{width:100%!important}.dsd-up315__actions>*{flex:1 1 130px!important}}';\n    style.textContent += 'html.dsd-post-drawer-open .dsd-post-drawer__backdrop,html body.dsd-social-page .dsd-post-drawer__backdrop,html body .dsd-post-drawer__backdrop{background:rgba(0,0,0,.42)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}html.dsd-post-drawer-open .dsd-post-drawer__panel,html body.dsd-social-page .dsd-post-drawer__panel,html body .dsd-post-drawer__panel{background:rgba(0,0,0,.42)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.dsd-post-drawer__panel,.dsd-post-drawer__body,.dsd-post-drawer__comments{border-radius:0!important}.dsd-post-drawer .dsd-launch-comment-card,.dsd-post-drawer .dsd-launch-comment{background:transparent!important;border-left:0!important;border-right:0!important;box-shadow:none!important}.dsd-up315__identity{display:grid!important;grid-template-columns:auto minmax(0,1fr)!important;align-items:end!important;gap:12px!important}.dsd-up315__identity-copy{min-width:0!important;display:grid!important;gap:5px!important}.dsd-up315__bio{max-width:100%!important;overflow-wrap:anywhere!important}.dsd-up315__actions{grid-column:1/-1!important;align-self:start!important}.dsd-up315__cover{overflow:visible!important}.dsd-noti321__thumb{grid-row:1/span 2!important}.dsd-noti321__preview{display:flex!important;flex-wrap:wrap!important;gap:6px!important}.dsd-noti321__preview-media{display:block!important;width:54px!important;height:54px!important;border-radius:10px!important;overflow:hidden!important;background:rgba(255,255,255,.08)!important}.dsd-noti321__preview-media .dsd-media-element{width:100%!important;height:100%!important;object-fit:cover!important}.dsd-msg384__layout{align-items:start!important}.dsd-msg384__conversation{overflow:hidden!important}.dsd-msg384__messages{contain:layout paint!important}.dsd-msg384__composer,.dsd-msg384__actions,.dsd-msg384__panel{margin-block-end:0!important}.dsd-msg384__shell:after,.dsd-msg384__layout:after,.dsd-msg384__conversation:after{content:none!important;display:none!important}@media(max-width:520px){.dsd-up315__identity{grid-template-columns:1fr!important}.dsd-up315__avatar-wrap{justify-self:start!important}.dsd-up315__actions{position:relative!important;z-index:8!important;margin-top:10px!important}.dsd-msg384__messages{max-height:52dvh!important}.dsd-msg384__thread{grid-template-columns:auto minmax(0,1fr)!important}.dsd-msg384__thread small{grid-column:2!important}.dsd-msg384__participants{margin-bottom:0!important}.dsd-noti321__thumb{width:46px!important;height:46px!important;min-width:46px!important}}';\n    style.textContent += '.dsd-publication-control[data-dsd-composer-policy-inline=\"true\"] .dsd-publication-help~.dsd-publication-help{display:none!important}.dsd-canonical-composer .dsd-composer-media-actions,.dsd-story-composer-layer .dsd-composer-media-actions,.dsd-post-drawer .dsd-composer-media-actions{display:flex!important;align-items:center!important;gap:8px!important;flex-wrap:wrap!important}.dsd-canonical-composer textarea,.dsd-story-composer-layer textarea,.dsd-post-drawer textarea{min-height:54px!important;resize:vertical}.dsd-up315__cover,.dsd-up353__cover{display:block!important;visibility:visible!important;opacity:1!important;min-height:clamp(190px,34vw,350px)!important;background-repeat:no-repeat!important;background-size:cover!important}.dsd-banner-edit-preview{width:100%!important;aspect-ratio:16/7!important;border-radius:8px!important;background:linear-gradient(135deg,rgba(20,24,42,.92),rgba(118,83,178,.38))!important;background-repeat:no-repeat!important;background-size:cover!important;background-position:center!important;border:1px solid rgba(255,255,255,.18)!important;display:grid!important;place-items:end start!important;overflow:hidden!important}.dsd-banner-edit-preview span{padding:8px 10px!important;background:rgba(0,0,0,.42)!important;color:#fff!important;border-top-right-radius:8px!important;font-size:12px!important}.dsd-up315__body{position:relative!important;z-index:3!important}.dsd-up315__actions,.dsd-up353__actions{position:relative!important;z-index:12!important;margin-block:10px 0!important}.dsd-up315__actions .dsd-up315__action,.dsd-up353__actions .dsd-up315__action,.dsd-up315__actions button,.dsd-up353__actions button{position:relative!important;z-index:13!important}.dsd-up315__bio,.dsd-up353__bio{position:relative!important;z-index:2!important;margin-block-end:10px!important}.dsd-noti321__card .dsd-noti321__thumb{display:grid!important;visibility:visible!important;opacity:1!important}.dsd-msg384__messages{padding-block-end:8px!important}.dsd-msg384__bubble{display:grid!important;grid-template-columns:auto minmax(0,1fr)!important;gap:8px!important;align-items:start!important}.dsd-msg384__bubble p{white-space:pre-wrap!important}.dsd-msg384__message-media{display:grid!important;gap:8px!important;grid-template-columns:repeat(auto-fit,minmax(120px,1fr))!important}.dsd-msg384__media-chip{min-height:120px!important}.dsd-post-card__body a,.dsd-story385__caption a,.dsd-launch-comment a,.dsd-msg384__bubble a{color:#ffe09a!important;text-decoration:underline!important;text-underline-offset:2px}.dsd-immersive-overlay .dsd-story385__actions,[data-dsd-immersive-overlay] .dsd-story385__actions{position:fixed!important;right:calc(14px + env(safe-area-inset-right))!important;top:calc(14px + env(safe-area-inset-top))!important;z-index:2147483647!important;display:flex!important;gap:8px!important;align-items:center!important;justify-content:flex-end!important;max-width:min(360px,calc(100vw - 28px))!important;visibility:visible!important;pointer-events:auto!important}.dsd-immersive-overlay .dsd-story385__actions button,[data-dsd-immersive-overlay] .dsd-story385__actions button{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-height:36px!important;border-radius:999px!important;border:1px solid rgba(255,255,255,.22)!important;background:rgba(0,0,0,.48)!important;color:#fff!important;padding:8px 12px!important;font-size:12px!important;line-height:1!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;visibility:visible!important;pointer-events:auto!important}@media(max-width:520px){.dsd-up315__cover,.dsd-up353__cover{min-height:clamp(176px,48vw,240px)!important}.dsd-msg384__message-media{grid-template-columns:minmax(0,1fr)!important}.dsd-msg384__media-chip{min-height:150px!important}.dsd-canonical-composer .dsd-composer-media-actions,.dsd-story-composer-layer .dsd-composer-media-actions{gap:6px!important}.dsd-publication-control select{max-width:118px!important}.dsd-immersive-overlay .dsd-story385__actions,[data-dsd-immersive-overlay] .dsd-story385__actions{right:calc(10px + env(safe-area-inset-right))!important;top:calc(10px + env(safe-area-inset-top))!important;max-width:calc(100vw - 20px)!important}.dsd-immersive-overlay .dsd-story385__actions button,[data-dsd-immersive-overlay] .dsd-story385__actions button{min-height:34px!important;padding:7px 10px!important;font-size:11px!important}}';\n    style.textContent += '.dsd-global-post-composer-layer .dsd-up315__modal,.dsd-story-composer-layer .dsd-up315__modal{width:min(520px,calc(100vw - 24px))!important;max-width:calc(100vw - 24px)!important;box-sizing:border-box!important;overflow-x:hidden!important}.dsd-global-post-composer-layer .dsd-up315__modal *,.dsd-story-composer-layer .dsd-up315__modal *,.dsd-global-post-composer-layer .dsd-canonical-composer *,.dsd-story-composer-layer [data-dsd-story-form] *{box-sizing:border-box!important;min-width:0!important}.dsd-global-post-composer-layer .dsd-canonical-composer,.dsd-story-composer-layer [data-dsd-story-form],.dsd-global-post-composer-layer .dsd-composer-media-actions,.dsd-story-composer-layer .dsd-composer-media-actions{width:100%!important;max-width:100%!important;overflow-x:hidden!important}.dsd-global-post-composer-layer input,.dsd-global-post-composer-layer textarea,.dsd-global-post-composer-layer select,.dsd-story-composer-layer input,.dsd-story-composer-layer textarea,.dsd-story-composer-layer select{width:100%!important;max-width:100%!important}.dsd-users311__stats{display:flex!important;flex-wrap:wrap!important;gap:6px!important;max-width:100%!important;overflow:visible!important}.dsd-users311__stats span{display:inline-flex!important;align-items:center!important;gap:3px!important;min-width:0!important}@media(max-width:520px){.dsd-global-post-composer-layer .dsd-up315__modal,.dsd-story-composer-layer .dsd-up315__modal{width:calc(100vw - 16px)!important;max-width:calc(100vw - 16px)!important;padding-inline:10px!important}}';\n    style.textContent += '.dsd-global-post-composer-layer:not([hidden]),.dsd-story-composer-layer:not([hidden]){position:fixed!important;inset:0!important;z-index:2147483340!important;display:grid!important;place-items:center!important;padding:12px!important;overflow-y:auto!important;overflow-x:hidden!important}.dsd-global-post-composer-layer .dsd-up315__modal-panel,.dsd-story-composer-layer .dsd-up315__modal-panel,.dsd-global-post-composer-layer .dsd-up315__modal-card,.dsd-story-composer-layer .dsd-up315__modal-card{width:100%!important;max-width:100%!important;margin-inline:auto!important;overflow-x:hidden!important}.dsd-global-post-composer-layer .dsd-up315__composer-tools,.dsd-story-composer-layer .dsd-composer-media-actions{display:flex!important;flex-wrap:wrap!important;align-items:center!important;gap:6px!important}.dsd-global-post-composer-layer .dsd-publication-control,.dsd-story-composer-layer .dsd-publication-control{flex:1 1 118px!important;min-width:0!important}.dsd-global-post-composer-layer .dsd-publication-control select,.dsd-story-composer-layer .dsd-publication-control select{min-width:0!important;width:100%!important}@media(max-width:430px){.dsd-global-post-composer-layer:not([hidden]),.dsd-story-composer-layer:not([hidden]){padding:8px!important;place-items:start center!important}.dsd-global-post-composer-layer .dsd-up315__modal,.dsd-story-composer-layer .dsd-up315__modal{width:100%!important;max-width:100%!important}.dsd-global-post-composer-layer .dsd-up315__composer-foot,.dsd-story-composer-layer .dsd-up315__composer-foot{display:grid!important;grid-template-columns:1fr!important;gap:8px!important}}';\n    style.textContent += '.dsd-global-post-composer-layer .dsd-up315__modal header,.dsd-story-composer-layer .dsd-up315__modal header{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:10px!important;min-width:0!important}.dsd-global-post-composer-layer .dsd-up315__modal header strong,.dsd-story-composer-layer .dsd-up315__modal header strong{min-width:0!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.dsd-global-post-composer-layer .dsd-canonical-composer,.dsd-story-composer-layer [data-dsd-story-form]{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:10px!important;padding:0!important}.dsd-global-post-composer-layer .dsd-up315__composer-head,.dsd-story-composer-layer label{max-width:100%!important;min-width:0!important;overflow-wrap:anywhere!important}.dsd-global-post-composer-layer .dsd-composer-media-button,.dsd-story-composer-layer .dsd-composer-media-button{flex:0 0 auto!important;width:40px!important;height:40px!important;min-width:40px!important;max-width:40px!important;padding:0!important;display:inline-grid!important;place-items:center!important;overflow:hidden!important}.dsd-global-post-composer-layer .dsd-composer-media-button svg,.dsd-story-composer-layer .dsd-composer-media-button svg{width:20px!important;height:20px!important;display:block!important}.dsd-global-post-composer-layer .dsd-composer-policy-tools,.dsd-story-composer-layer .dsd-composer-policy-tools{display:flex!important;flex:1 1 168px!important;min-width:0!important;max-width:100%!important;align-items:center!important;gap:6px!important;flex-wrap:wrap!important}.dsd-global-post-composer-layer .dsd-up315__composer-foot,.dsd-story-composer-layer .dsd-up315__composer-foot{display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;align-items:center!important;gap:10px!important;max-width:100%!important;min-width:0!important}.dsd-global-post-composer-layer .dsd-up315__composer-foot button,.dsd-story-composer-layer .dsd-up315__composer-foot button{max-width:100%!important;white-space:nowrap!important}@media(max-width:430px){.dsd-global-post-composer-layer .dsd-composer-policy-tools,.dsd-story-composer-layer .dsd-composer-policy-tools{flex:1 1 100%!important}.dsd-global-post-composer-layer .dsd-publication-control,.dsd-story-composer-layer .dsd-publication-control{flex:1 1 100%!important}.dsd-global-post-composer-layer .dsd-up315__composer-foot button,.dsd-story-composer-layer .dsd-up315__composer-foot button{width:100%!important}}';\n    document.head.appendChild(style);\n  }\n  function installMessageLayoutSprintStyles(){\n    if (document.getElementById('dsd-message-layout-sprint-p11dz686')) return;\n    var style = document.createElement('style');\n    style.id = 'dsd-message-layout-sprint-p11dz686';\n    style.textContent = '.dsd-msg384{--dsd-msg384-dock-safe:calc(104px + env(safe-area-inset-bottom));--dsd-msg384-composer-space:142px;padding-bottom:calc(var(--dsd-msg384-dock-safe) + var(--dsd-msg384-composer-space))!important}.dsd-msg384,.dsd-msg384 *{box-sizing:border-box}.dsd-msg384__shell,.dsd-msg384__layout,.dsd-msg384__rail,.dsd-msg384__conversation,.dsd-msg384__participants,.dsd-msg384__composer{max-width:100%!important;min-width:0!important}.dsd-msg384__shell{padding-bottom:calc(var(--dsd-msg384-dock-safe) + var(--dsd-msg384-composer-space))!important}.dsd-msg384__layout{display:grid!important;grid-template-columns:minmax(220px,.85fr) minmax(0,1.35fr) minmax(180px,.75fr)!important;gap:10px!important;align-items:start!important;overflow:visible!important;padding-bottom:calc(var(--dsd-msg384-dock-safe) + var(--dsd-msg384-composer-space))!important}.dsd-msg384__conversation{display:grid!important;grid-template-rows:auto minmax(90px,min(18dvh,170px)) auto auto!important;gap:6px!important;overflow:visible!important;margin-bottom:calc(var(--dsd-msg384-dock-safe) + var(--dsd-msg384-composer-space))!important;scroll-margin-bottom:calc(var(--dsd-msg384-dock-safe) + var(--dsd-msg384-composer-space))!important}.dsd-msg384__messages[data-dsd-msg384-inline-thread],.dsd-msg384__messages[data-dsd-message-thread-scroll]{width:100%!important;max-width:100%!important;min-height:90px!important;max-height:min(18dvh,170px)!important;overflow-y:auto!important;overflow-x:hidden!important;overscroll-behavior-y:contain!important;scroll-behavior:auto!important;touch-action:pan-y!important;overflow-anchor:none!important;padding:4px 2px 8px!important}.dsd-msg384__composer{display:grid!important;grid-template-columns:minmax(0,1fr)!important;gap:7px!important;width:auto!important;position:fixed!important;left:max(408px,30vw)!important;right:max(342px,25vw)!important;bottom:calc(78px + env(safe-area-inset-bottom))!important;z-index:2147483300!important;margin:0!important;padding:8px!important;background:rgba(10,6,22,.86)!important;border:1px solid rgba(255,255,255,.16)!important;border-radius:12px!important;box-shadow:0 14px 36px rgba(0,0,0,.34)!important;backdrop-filter:blur(12px)!important;-webkit-backdrop-filter:blur(12px)!important}.dsd-msg384__composer textarea,.dsd-msg384__composer button,.dsd-msg384__media-actions,.dsd-msg384__media-actions .dsd-composer-media-button{max-width:100%!important;min-width:0!important}.dsd-msg384__composer textarea{width:100%!important;min-height:44px!important}.dsd-msg384__media-actions,.dsd-msg384__actions--inline{display:flex!important;flex-wrap:wrap!important;gap:6px!important}.dsd-msg384__actions--inline{margin:2px 0 0!important;padding:0!important}.dsd-msg384__actions--inline button{flex:1 1 calc(50% - 6px)!important;min-width:0!important}.dsd-msg384__bubble:not(.is-system),.dsd-msg384__bubble.is-me{display:grid!important;grid-template-columns:30px minmax(0,1fr)!important;width:auto!important;min-width:0!important;max-width:min(88%,720px)!important}.dsd-msg384__bubble.is-me{margin-left:auto!important}.dsd-msg384__bubble>div,.dsd-msg384__bubble p,.dsd-msg384__message-media,.dsd-msg384__media-chip{min-width:0!important;max-width:100%!important}.dsd-msg384__bubble p{display:block!important;max-height:none!important;overflow:visible!important;overflow-wrap:anywhere!important;white-space:pre-wrap!important}.dsd-msg384__panel--safety{padding-bottom:8px!important}@media(max-width:760px){.dsd-msg384{--dsd-msg384-dock-safe:calc(120px + env(safe-area-inset-bottom));--dsd-msg384-composer-space:178px;padding-inline:8px!important}.dsd-msg384__shell{width:100%!important;max-width:100vw!important;padding-inline:8px!important;overflow-x:hidden!important}.dsd-msg384__layout{grid-template-columns:minmax(0,1fr)!important;width:100%!important;max-width:100%!important;gap:8px!important;overflow-x:hidden!important}.dsd-msg384__conversation{order:1!important;width:100%!important;max-width:calc(100vw - 16px)!important;margin-inline:auto!important;padding:10px!important;grid-template-rows:auto minmax(96px,min(22dvh,180px)) auto auto!important}.dsd-msg384__rail{order:2!important;width:100%!important;max-width:calc(100vw - 16px)!important;min-width:0!important;margin-inline:auto!important;padding:10px!important}.dsd-msg384__participants{order:3!important;width:100%!important;max-width:calc(100vw - 16px)!important;min-width:0!important;margin-inline:auto!important;padding:10px 10px 8px!important}.dsd-msg384__messages[data-dsd-msg384-inline-thread],.dsd-msg384__messages[data-dsd-message-thread-scroll]{min-height:96px!important;max-height:min(22dvh,180px)!important}.dsd-msg384__bubble:not(.is-system),.dsd-msg384__bubble.is-me{max-width:100%!important}.dsd-msg384__composer{left:10px!important;right:10px!important;bottom:calc(88px + env(safe-area-inset-bottom))!important;gap:7px!important}.dsd-msg384__composer textarea,.dsd-msg384__composer button,.dsd-msg384__media-actions,.dsd-msg384__media-actions .dsd-composer-media-button{width:100%!important}.dsd-msg384__actions--inline button{flex:1 1 calc(50% - 6px)!important}.dsd-msg384__thread{grid-template-columns:auto minmax(0,1fr)!important}.dsd-msg384__thread small{grid-column:2!important}}';\n    document.head.appendChild(style);\n  }\n  function installRelativeTimeTicker(){\n    if (state.relativeTimeTicker) return;\n    state.relativeTimeTicker = window.setInterval(function(){\n      renderPosts();\n      renderStories();\n      renderMessages();\n      renderNotifications();\n    }, 60000);\n  }\n  function boot(){\n    var globalBoot = window.__DSDLaunchSocialRuntimeBoot686 || null;\n    if (globalBoot && globalBoot.build === BUILD && globalBoot.started === true) {\n      claim('launch-social:duplicate-boot-deconstructed', { build: BUILD, existingStartedAt: globalBoot.startedAt || 0, owner: OWNER });\n      return;\n    }\n    window.__DSDLaunchSocialRuntimeBoot686 = { build: BUILD, started: true, startedAt: Date.now(), owner: OWNER };\n    purgeRetiredPublicSocialCaches();\n    installModalContainmentStyles();\n    installMessageLayoutSprintStyles();\n    installRelativeTimeTicker();\n    rememberLastVisitedPage();\n    state.localDeletedPostIds = deletedPostTombstones();\n    state.localPostStateOverrides = postStateOverrides();\n    pruneExpiredLocalPostOverrides();\n    state.localCommentStateOverrides = commentStateOverrides();\n    state.localSavedStateOverrides = savedStateOverrides();\n    clearRecoveredUploadDraftStatus();\n    bindActions();\n    renderAll();\n    scheduleLateProfileHydrationReconcile();\n    function startHydratedRuntime(){\n      if (state.hydratedRuntimePromise) return state.hydratedRuntimePromise;\n      state.hydratedRuntimePromise = primeSupabaseEntitlementSession().then(bridgeShopifyToFirebaseForStartup).then(function(){ return ensureProfile(); }).then(primeSupabaseEntitlementSession).then(function(){ startListeners(); return repairOwnedOrphanMediaParents().then(loadViewedPublicProfile).then(function(){ ensureViewedAuthorContentListeners(); }); }).then(function(){ maybeRouteProfile(); renderAll(); scheduleLateProfileHydrationReconcile(); state.ready = true; emit('ready', snapshot()); return true; }).catch(function(error){\n        state.hydratedRuntimePromise = null;\n        throw error;\n      });\n      return state.hydratedRuntimePromise;\n    }\n    var initialBridgeWait = supabaseCutoverReady() || hasCustomer() ? 900 : 2600;\n    waitForBridgeReady(initialBridgeWait).then(startHydratedRuntime);\n    window.addEventListener('dsd:firebase-module-bridge:ready', function(){ waitForBridgeReady(1800).then(startHydratedRuntime); });\n    window.addEventListener('dsd:following-feed:filter', function(event){\n      state.followingFilter = event && event.detail && event.detail.filter || 'following';\n      renderPosts();\n    });\n  }\n  function duplicateProfileCount(){\n    var seen = {};\n    var duplicates = 0;\n    (state.publicProfiles || []).forEach(function(profile){\n      var key = clean(profile && (profile.profileKey || profile.handle || ''), '').toLowerCase();\n      if (!key) return;\n      if (seen[key]) duplicates += 1;\n      seen[key] = true;\n    });\n    return duplicates;\n  }\n  function publicProfileOwnerMismatchCount(){\n    return (state.publicProfiles || []).filter(canonicalLaunchProfileOwnerMismatch).length;\n  }\n  function canonicalGuardrails(){\n    return {\n      currentSocialSource: 'Supabase',\n      currentMediaSource: 'Wasabi',\n      firebaseRuntimeMode: 'backend-only-bridge-rollback-signing-counter-forensic',\n      activeProfileRenderer: 'LaunchSocialActivation.ProfileRenderer',\n      activeDiscoveryRenderer: 'LaunchSocialActivation.DiscoveryRenderer',\n      activeProfileShellContract: 'one-profile-shell-role-based-controls',\n      activeMessageThreadKey: 'canonicalConversationId',\n      activeVisibilityResolver: 'LaunchSocialActivation.profileVisibility',\n      activeProfileMediaResolver: 'Supabase profiles/public_profiles media_objects to Wasabi signer',\n      activeConversationHydrationOwner: 'LaunchSocialActivation.listenPathPolling',\n      moderationLockActive: true,\n      privateFollowRequests: 'follows.state=requested',\n      governanceSource: 'Supabase moderation_queue safety_reports founder_audit',\n      gatedShellRenderer: 'LaunchSocialActivation.publicGatedShellRecord',\n      duplicateProfileCount: duplicateProfileCount(),\n      publicProfileOwnerMismatchCount: publicProfileOwnerMismatchCount(),\n      noFirebasePublicContentHydration: firebasePublicContentHydration() === false,\n      noSupabaseStorageProductionMedia: true,\n      wasabiMediaCanonical: true\n    };\n  }\n  function snapshot(){ var activeGovernanceShells = qsa('[data-dsd-governance-canonical=\"p11dz684\"], [data-dsd-governance-canonical=\"p11dz674\"]').filter(function(node){ return !node.hidden; }); return { version: VERSION, build: BUILD, owner: OWNER, authenticated: hasFirebaseAuth(), shopifyAuthenticated: hasCustomer(), bridgeChecked: state.bridgeChecked, firebaseUid: uid(), profile: state.profile, viewedProfile: viewedProfile(), membership: deriveMembership(), paths: PATHS, notificationCounts: state.notificationCounts, publicProfiles: state.publicProfiles.length, posts: state.posts.length, stories: state.stories.length, following: Object.keys(state.followingByUid).filter(function(key){ return state.followingByUid[key]; }).length, favorites: Object.keys(state.favoritesByUid).filter(function(key){ return state.favoritesByUid[key]; }).length, feedFilter: state.feedFilter, followingFilter: state.followingFilter, storyScope: state.storyScope, draftQueue: draftQueue(), firestoreCanonical: false, supabaseMetadataCanonical: supabaseCutoverReady(), supabaseSocialCanonical: supabaseCutoverReady(), firebasePublicContentHydration: firebasePublicContentHydration(), firebaseDiscoveryHydration: false, firebaseProfileFallback: false, firebaseAuthorFallback: false, firebaseRendererFallback: false, supabaseDiscoveryCanonical: true, supabaseProfileCanonical: true, publicGatedShellsForLoggedOut: true, firebaseRollbackMode: true, firebaseSignerCompatibility: true, wasabiMediaCanonical: true, localStorageCanonical: false, retiredSocialCachePurge: GHOST_PURGE_VERSION, canonicalGuardrails: canonicalGuardrails(), currentSocialSource: 'Supabase', currentMediaSource: 'Wasabi', firebaseRuntimeMode: 'backend-only-bridge-rollback-signing-counter-forensic', activeProfileRenderer: 'LaunchSocialActivation.ProfileRenderer', activeMessageThreadKey: 'canonicalConversationId', governanceSource: 'Supabase moderation_queue safety_reports founder_audit', activeGovernanceRenderer: dedicatedGovernanceRouteActive() ? 'DedicatedGovernanceRouteController' : 'LaunchSocialActivation.LegacyEmbeddedGovernance', activeGovernanceShellCount: activeGovernanceShells.length, activeGovernanceQueueCount: moderationQueue().length, activeGovernanceFilter: 'route-scoped', duplicateGovernanceShellDetected: activeGovernanceShells.length > 1, duplicateGovernanceListenerCount: 0, staleGovernanceHydrationDetected: false, firebaseGovernanceMode: 'backend-only-rollback-signing-counter-forensic', duplicateProfileCount: duplicateProfileCount(), publicProfileOwnerMismatchCount: publicProfileOwnerMismatchCount(), over18: isOver18(), adultContentEnabled: adultContentEnabled(), dsdPlus: hasDsdPlus(), adultAllowed: isAdultAllowed(), canModerate: canModerate(), feedDiagnostics: Object.assign({}, state.feedDiagnostics, { activeListeners: state.listeners.length, commentListeners: Object.keys(state.commentListeners || {}).length, mediaCacheSize: Object.keys(state.mediaReadCache || {}).length }) }; }\n\n  var api = {\n    version: VERSION,\n    build: BUILD,\n    owner: OWNER,\n    firestorePaths: PATHS,\n    snapshot: snapshot,\n    currentUser: function(){ return { uid: uid(), profileKey: profileKey(), displayName: displayName(), roles: roles(), authenticated: hasFirebaseAuth(), shopifyAuthenticated: hasCustomer(), bridgeChecked: state.bridgeChecked, membership: deriveMembership(), over18: isOver18(), adultContentEnabled: adultContentEnabled(), dsdPlus: hasDsdPlus(), adultAllowed: isAdultAllowed(), avatarMediaId: canonicalProfileAvatarMediaId(currentComposerProfile()), accountRestriction: accountRestrictionState(), canModerate: canModerate() }; },\n    resolveViewerState: resolveViewerState,\n    canViewContent: canViewContent,\n    canViewMedia: canViewMedia,\n    canCreatePost: canCreatePost,\n    canCreateStory: canCreateStory,\n    canSendMessage: canSendMessage,\n    canAccessAIC: canAccessAIC,\n    createOrUpdateProfile: createOrUpdateProfile,\n    createPost: createPost,\n    renderPostCard: postCard,\n    openPostDrawer: openPostDrawer,\n    closePostDrawer: closePostDrawer,\n    isNormalContentRecord: isNormalContentRecord,\n    visibleStories: visibleStories,\n    addComment: addComment,\n    editComment: editComment,\n    deleteComment: deleteComment,\n    setCommentState: updateCommentState,\n    toggleReaction: toggleReaction,\n    followProfile: followProfile,\n    unfollowProfile: unfollowProfile,\n    toggleFollowProfile: toggleFollowProfile,\n    saveItem: saveItem,\n    unsaveItem: unsaveItem,\n    toggleSaveItem: toggleSaveItem,\n    recordShare: recordShare,\n    sharePost: sharePost,\n    editPost: editPost,\n    deletePost: deletePost,\n    favoriteUser: favoriteUser,\n    unfavoriteUser: unfavoriteUser,\n    toggleFavoriteUser: toggleFavoriteUser,\n    notify: notify,\n    sendMessage: sendMessage,\n    createStory: createStory,\n    openStory: openStoryOverlay,\n    closeImmersiveOverlay: closeImmersiveOverlay,\n    createSafetyReport: createSafetyReport,\n    moderationContext: moderationContext,\n    createMediaManifest: createMediaManifest,\n    hydrateMediaReads: hydrateMediaReads,\n    signReadMedia: signReadMedia,\n    resolveMediaDisplayUrl: resolveMediaDisplayUrl,\n    canModerate: canModerate,\n    isAdultAllowed: isAdultAllowed,\n    isOver18: isOver18,\n    adultContentEnabled: adultContentEnabled,\n    membership: deriveMembership,\n    hasDsdPlus: hasDsdPlus,\n    canViewClassified: canViewClassified,\n    setPostState: updatePostState,\n    setQueueItemState: updateQueueItemState,\n    setQueueClassification: updateQueueClassification,\n    render: renderAll\n  };\n  window.DSDViewerPolicy = {\n    version: VERSION,\n    source: BUILD,\n    resolveViewerState: resolveViewerState,\n    canViewContent: canViewContent,\n    canViewMedia: canViewMedia,\n    canCreatePost: canCreatePost,\n    canCreateStory: canCreateStory,\n    canSendMessage: canSendMessage,\n    canModerate: canModerate,\n    canAccessAIC: canAccessAIC\n  };\n  window.DSDImmersiveOverlayController = {\n    version: VERSION,\n    source: BUILD,\n    owner: 'ImmersiveOverlayController',\n    modes: ['story'],\n    rootSelector: '[data-dsd-immersive-overlay-root]',\n    openStory: openStoryOverlay,\n    close: closeImmersiveOverlay,\n    snapshot: function(){\n      return {\n        version: VERSION,\n        owner: 'ImmersiveOverlayController',\n        roots: qsa('[data-dsd-immersive-overlay-root]').length,\n        overlays: qsa('[data-dsd-immersive-overlay]').length,\n        mode: (qs('[data-dsd-immersive-overlay]') || {}).getAttribute && qs('[data-dsd-immersive-overlay]').getAttribute('data-dsd-immersive-mode') || '',\n        scrollLocked: document.documentElement.classList.contains('dsd-immersive-overlay-open')\n      };\n    }\n  };\n  try {\n    Object.defineProperty(window, 'DSDLaunchSocial', {\n      value: api,\n      writable: false,\n      configurable: true\n    });\n  } catch(e) {\n    try { window.DSDLaunchSocial = api; } catch(assignError) {}\n  }\n  try {\n    var ownershipChecks = 0;\n    var ownershipTimer = window.setInterval(function(){\n      ownershipChecks += 1;\n      if (!window.DSDLaunchSocial || window.DSDLaunchSocial.build !== BUILD) {\n        try { delete window.DSDLaunchSocial; } catch(e){}\n        try {\n          Object.defineProperty(window, 'DSDLaunchSocial', { value: api, writable: false, configurable: true });\n        } catch(e) {\n          try { window.DSDLaunchSocial = api; } catch(assignError) {}\n        }\n      }\n      if (ownershipChecks >= 30) window.clearInterval(ownershipTimer);\n    }, 500);\n  } catch(e){}\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot, { once: true });\n  else boot();\n})();\n\r\n\r\n\r\n\r\n\r\n"],
  "mappings": "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",
  "names": ["displayName", "details", "bridge", "actorUid", "comment", "location", "panel", "classifiedVisible", "targetUid", "targetProfile", "targetKey", "profileKey", "initials", "type", "media", "avatar", "discoveryCard"]
}
