PageSourceSearch

https://adloura.com/chunk-7U7C3PN5.js

js adloura.com collected 2026-10-02 09:55:36 UTC 146,819 bytes, 239 lines download raw bytes

1import{a as Xe}from"./chunk-4GJJGQOE.js";import{a as Ze}from"./chunk-IWB3LFVN.js";import{a as q}from"./chunk-JHUIZPEO.js";import{a as Ke}from"./chunk-2UUM4CZG.js";import{A as Re,B as Ne,C as Ye,D as je,F as He,H as qe,I as $e,J as Ge,L as Qe,M as Je,a as he,b as xe,c as fe,d as be,e as ve,f as ye,g as Pe,h as Ce,i as we,j as Se,k as Te,l as Me,m as Ae,n as Ee,o as ke,p as Ve,q as Ie,r as De,s as Oe,t as Le,u as ze,v as Ue,w as Fe,x as We,y as Be}from"./chunk-BVYE6SD7.js";import{b as ue}from"./chunk-LWGBGNSS.js";import{b as _e,d as ge}from"./chunk-AGBIQOXM.js";import{$a as ee,Aa as h,Ba as b,Ca as E,Da as W,G as m,Ga as C,H as _,Ha as w,Ia as S,Ka as B,Na as I,Oa as R,Pa as z,Q as G,S as o,Ua as J,V as L,Va as K,Wa as X,X as Q,_a as Z,aa as f,ab as te,bb as ie,da as c,db as ne,ea as n,ec as le,fa as a,g as N,ga as x,gb as ae,ha as Y,hc as de,ia as j,kb as oe,ma as v,mb as re,na as g,oa as d,pb as se,qc as ce,sc as pe,tc as me,xa as k,ya as F,za as s}from"./chunk-LWDTIRCY.js";import"./chunk-YRDAQHOH.js";import"./chunk-M74NKZE7.js";import{a as H}from"./chunk-KI3OGBFQ.js";import"./chunk-NPIB2GR2.js";import"./chunk-QUJFQN2Y.js";import"./chunk-MRPSBUSM.js";import"./chunk-3X6G3RZB.js";import"./chunk-RXTQUOQ3.js";import"./chunk-66HF336T.js";import"./chunk-JNSODYJ3.js";import"./chunk-ELADHFWA.js";import"./chunk-7FY2OE2O.js";import"./chunk-AJKMVFFX.js";import"./chunk-WLYAAB7T.js";import"./chunk-DVXF2QER.js";import"./chunk-MTHZ7MWU.js";import"./chunk-WI5MSH4N.js";import"./chunk-BLWVX4KK.js";import"./chunk-CKP3SGE2.js";import"./chunk-ZSIIJSG4.js";import"./chunk-CDZFCBFW.js";import"./chunk-E2CLONXR.js";import"./chunk-KRDHHS7Z.js";import"./chunk-JVTPOORY.js";import"./chunk-CLDSZD2A.js";import"./chunk-M2X7KQLB.js";import"./chunk-LRFGNCHE.js";import"./chunk-OZYWYLNK.js";import"./chunk-42C7ZIID.js";import{e as O}from"./chunk-JHI3MBHO.js";var tt=()=>[1,2,3,4,5,6],it=()=>[7,30,90],et=()=>[];function nt(r,p){if(r&1&&(n(0,"span",25),s(1),a()),r&2){let e=d();o(),h(e.stats.openSupportQueries)}}function at(r,p){r&1&&x(0,"div",31)}function ot(r,p){r&1&&(n(0,"div",29),f(1,at,1,0,"div",30),a()),r&2&&(o(),c("ngForOf",B(1,tt)))}function rt(r,p){if(r&1){let e=v();n(0,"div",81),g("click",function(){m(e);let t=d(3);return t.activeTab="support",_(t.onTabChange())}),x(1,"ion-icon",82),n(2,"span"),s(3),a()()}if(r&2){let e=d(3);o(3),E("",e.stats.openSupportQueries," open support ",e.stats.openSupportQueries===1?"query":"queries"," \u2014 Tap to view")}}function st(r,p){if(r&1&&(n(0,"div",83),s(1),a()),r&2){let e=d(3);o(),b("+",e.stats.robotUsers," Play test devices not counted")}}function lt(r,p){if(r&1&&(n(0,"span"),s(1),a()),r&2){let e=d(4);o(),b(" + ",e.stats.billing.otherCurrency.join(", "))}}function dt(r,p){if(r&1&&(n(0,"div",84),s(1),f(2,lt,2,1,"span",28),s(3),a()),r&2){let e=d(3);o(),b(" MRR $",e.stats.billing.mrrUsd),o(),c("ngIf",e.stats.billing.otherCurrency==null?null:e.stats.billing.otherCurrency.length),o(),W(" \xB7 ",e.stats.billing.test," test \xB7 ",e.stats.billing.grant," granted \xB7 ",e.stats.billing.lapsed," lapsed ")}}function ct(r,p){if(r&1&&(n(0,"tr")(1,"td"),s(2),I(3,"date"),a(),n(4,"td",85),s(5),a(),n(6,"td",85),s(7),a()()),r&2){let e=p.$implicit;o(2),h(z(3,3,e.day,"MMM d")),o(3),h(e.signups),o(2),h(e.videos)}}function pt(r,p){if(r&1&&(n(0,"div",54)(1,"div",55),s(2,"Last 7 Days Growth"),a(),n(3,"div",70)(4,"table",71)(5,"thead")(6,"tr")(7,"th"),s(8,"Date"),a(),n(9,"th"),s(10,"New Users"),a(),n(11,"th"),s(12,"Videos"),a()()(),n(13,"tbody"),f(14,ct,8,6,"tr",72),a()()()()),r&2){let e=d(3);o(14),c("ngForOf",e.mergedDailyStats)}}function mt(r,p){if(r&1){let e=v();n(0,"button",86),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.loadChannels(t))}),s(1),a()}if(r&2){let e=p.$implicit,i=d(3);k("on",i.channelDays===e),o(),b("",e,"d")}}function _t(r,p){if(r&1&&(n(0,"tr")(1,"td"),s(2),a(),n(3,"td",85),s(4),a(),n(5,"td",85),s(6),a(),n(7,"td",85),s(8),a()()),r&2){let e=p.$implicit,i=d(3);o(2),h(i.channelLabel(e.channel)),o(2),h(e.visitors),o(2),h(e.signups),o(2),h(e.paid)}}function gt(r,p){if(r&1&&(n(0,"tr",87)(1,"td"),s(2,"Total"),a(),n(3,"td",85),s(4),a(),n(5,"td",85),s(6),a(),n(7,"td",85),s(8),a()()),r&2){let e=d(3);o(4),h(e.channelTotal("visitors")),o(2),h(e.channelTotal("signups")),o(2),h(e.channelTotal("paid"))}}function ut(r,p){if(r&1&&(n(0,"tr")(1,"td",88),s(2),a()()),r&2){let e=d(3);o(2),h(e.channelsLoading?"Loading\u2026":"No new visitors recorded in this window yet.")}}function ht(r,p){if(r&1&&(n(0,"div",92)(1,"span",93),s(2),a(),n(3,"span",94),s(4),a()()),r&2){let e=p.$implicit;o(2),h(e.platform),o(2),h(e.count)}}function xt(r,p){if(r&1&&(n(0,"div",89)(1,"div",55),s(2,"Platform"),a(),n(3,"div",90),f(4,ht,5,2,"div",91),a()()),r&2){let e=d(3);o(4),c("ngForOf",e.stats.platformBreakdown)}}function ft(r,p){if(r&1&&(n(0,"div",92)(1,"span",93),s(2),a(),n(3,"span",94),s(4),a()()),r&2){let e=p.$implicit;o(2),h(e.tier),o(2),h(e.count)}}function bt(r,p){if(r&1&&(n(0,"div",89)(1,"div",55),s(2,"Subscription Tiers"),a(),n(3,"div",90),f(4,ft,5,2,"div",91),a()()),r&2){let e=d(3);o(4),c("ngForOf",e.stats.tierBreakdown)}}function vt(r,p){r&1&&(n(0,"div",89)(1,"div",55),s(2,"Subscriptions"),a(),n(3,"div",95),s(4,"No active paid subscribers yet"),a()())}function yt(r,p){if(r&1){let e=v();Y(0),f(1,rt,4,2,"div",32),n(2,"div",33)(3,"div",34),g("click",function(){m(e);let t=d(2);return t.activeTab="users",_(t.onTabChange())}),n(4,"div",35),x(5,"ion-icon",10),a(),n(6,"div",36),s(7),a(),n(8,"div",37),s(9,"Total Users"),a(),f(10,st,2,1,"div",38),a(),n(11,"div",39),g("click",function(){m(e);let t=d(2);return t.activeTab="paid",_(t.onTabChange())}),n(12,"div",35),x(13,"ion-icon",11),a(),n(14,"div",36),s(15),a(),n(16,"div",37),s(17),a(),f(18,dt,4,5,"div",40),a()(),n(19,"div",41)(20,"div",42)(21,"div",43),x(22,"ion-icon",44),a(),n(23,"div",45),s(24),a(),n(25,"div",46),s(26,"Free Users"),a()(),n(27,"div",47)(28,"div",43),x(29,"ion-icon",13),a(),n(30,"div",45),s(31),a(),n(32,"div",46),s(33,"Total Videos"),a()(),n(34,"div",48)(35,"div",43),x(36,"ion-icon",49),a(),n(37,"div",45),s(38),a(),n(39,"div",46),s(4
10,"Today's Videos"),a()(),n(41,"div",50)(42,"div",43),x(43,"ion-icon",51),a(),n(44,"div",45),s(45),a(),n(46,"div",46),s(47,"Open Queries"),a()(),n(48,"div",52)(49,"div",43),x(50,"ion-icon",53),a(),n(51,"div",45),s(52),I(53,"number"),a(),n(54,"div",46),s(55,"Conversion Rate"),a()()(),n(56,"div",54)(57,"div",55),s(58,"Today vs Yesterday"),a(),n(59,"div",56)(60,"div",57)(61,"div",58),x(62,"ion-icon",59),a(),n(63,"div",60)(64,"span",61),s(65),a(),n(66,"span",62),s(67,"/"),a(),n(68,"span",63),s(69),a()(),n(70,"div",64),s(71,"New Users (today/yesterday)"),a()(),n(72,"div",57)(73,"div",58),x(74,"ion-icon",13),a(),n(75,"div",60)(76,"span",61),s(77),a(),n(78,"span",62),s(79,"/"),a(),n(80,"span",63),s(81),a()(),n(82,"div",64),s(83,"Videos (today/yesterday)"),a()(),n(84,"div",57)(85,"div",58),x(86,"ion-icon",65),a(),n(87,"div",60)(88,"span",61),s(89),a()(),n(90,"div",64),s(91,"Users with Videos"),a()()()(),f(92,pt,15,1,"div",66),n(93,"div",54)(94,"div",67)(95,"span"),s(96,"Where signups come from"),a(),n(97,"span",68),f(98,mt,2,3,"button",69),a()(),n(99,"div",70)(100,"table",71)(101,"thead")(102,"tr")(103,"th"),s(104,"First came from"),a(),n(105,"th"),s(106,"Visitors"),a(),n(107,"th"),s(108,"Signups"),a(),n(109,"th"),s(110,"Paid"),a()()(),n(111,"tbody"),f(112,_t,9,4,"tr",72)(113,gt,9,3,"tr",73)(114,ut,3,1,"tr",28),a()()(),n(115,"div",74),s(116,"Recorded since Sep 29, 2026. Visitors = browsers seen for the first time; signups = accounts created after that first visit; paid = those signups who have paid on any rail."),a()(),n(117,"div",75),f(118,xt,5,1,"div",76)(119,bt,5,1,"div",76)(120,vt,5,0,"div",76),a(),n(121,"div",77),s(122,"Quick Actions"),a(),n(123,"div",78)(124,"button",79),g("click",function(){m(e);let t=d(2);return t.activeTab="users",_(t.onTabChange())}),x(125,"ion-icon",10),n(126,"span"),s(127,"Users"),a()(),n(128,"button",79),g("click",function(){m(e);let t=d(2);return t.activeTab="payments",_(t.onTabChange())}),x(129,"ion-icon",14),n(130,"span"),s(131,"Payments"),a()(),n(132,"button",79),g("click",function(){m(e);let t=d(2);return t.activeTab="support",_(t.onTabChange())}),x(133,"ion-icon",15),n(134,"span"),s(135,"Support"),a()(),n(136,"button",79),g("click",function(){m(e);let t=d(2);return t.activeTab="email",_(t.onTabChange())}),x(137,"ion-icon",17),n(138,"span"),s(139,"Email"),a()(),n(140,"button",79),g("click",function(){m(e);let t=d(2);return t.activeTab="config",_(t.onTabChange())}),x(141,"ion-icon",20),n(142,"span"),s(143,"Config"),a()(),n(144,"button",79),g("click",function(){m(e);let t=d(2);return _(t.loadStats())}),x(145,"ion-icon",80),n(146,"span"),s(147,"Refresh"),a()()(),j()}if(r&2){let e=d(2);o(),c("ngIf",(e.stats.openSupportQueries||0)>0),o(6),h(e.stats.totalUsers||0),o(3),c("ngIf",e.stats.robotUsers),o(5),h(e.stats.paidUsers||0),o(2),h(e.stats.billing?"Paying customers":"Paid Users"),o(),c("ngIf",e.stats.billing),o(6),h(e.stats.freeUsers||0),o(7),h(e.stats.totalVideos||0),o(7),h(e.stats.todayVideos||0),o(3),c("ngClass",(e.stats.openSupportQueries||0)>0?"orange":"slate"),o(4),h(e.stats.openSupportQueries||0),o(7),b("",z(53,25,(e.stats.paidUsers||0)/(e.stats.totalUsers||1)*100,"1.1-1"),"%"),o(13),h(e.stats.todaySignups||0),o(4),h(e.stats.yesterdaySignups||0),o(8),h(e.stats.todayVideos||0),o(4),h(e.stats.yesterdayVideos||0),o(8),h(e.stats.activeUsers||0),o(3),c("ngIf",(e.stats.dailySignups==null?null:e.stats.dailySignups.length)||(e.stats.dailyVideos==null?null:e.stats.dailyVideos.length)),o(6),c("ngForOf",B(28,it)),o(14),c("ngForOf",e.channels),o(),c("ngIf",e.channels.length),o(),c("ngIf",!e.channels.length),o(4),c("ngIf",e.stats.platformBreakdown==null?null:e.stats.platformBreakdown.length),o(),c("ngIf",e.stats.tierBreakdown==null?null:e.stats.tierBreakdown.length),o(),c("ngIf",!(e.stats.tierBreakdown!=null&&e.stats.tierBreakdown.length))}}function Pt(r,p){if(r&1&&(n(0,"div",26),f(1,ot,2,2,"div",27)(2,yt,148,29,"ng-container",28),a()),r&2){let e=d();o(),c("ngIf",!e.stats),o(),c("ngIf",e.stats)}}function Ct(r,p){if(r&1&&(n(0,"div",100),s(1),a()),r&2){let e=d(2);o(),h(e.isLoadingAllUsers?"Searching across all users\u2026":"Loading\u2026")}}function wt(r,p){if(r&1&&(n(0,"span",110),s(1),a()),r&2){let e=d(2).$implicit;o(),b(" \xA0\xB7 ",e.ads_ready," ready ")}}function St(r,p){if(r&1&&(n(0,"span",111),s(1),a()),r&2){let e=d(2).$implicit;o(),b("\xA0\xB7 last ",e.last_ad_at)}}function Tt(r,p){if(r&1&&(n(0,"p",107)(1,"span"),s(2),a(),f(3,wt,2,1,"span",108)(4,St,2,1,"span",109),a()),r&2){let e=d().$implicit;o(),k("has-ads",e.ads_count>0)("no-ads",!e.ads_count),o(),E(" ",e.ads_count||0," ad",e.ads_count===1?"":"s"," "),o(),c("ngIf",e.ads_count>0&&e.ads_ready!==e.ads_count),o(),c("ngIf",e.last_ad_at)}}function Mt(r,p){if(r&1){let e=v();n(0,"ion-item",104),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.openUserPage(t))}
1),n(1,"ion-label")(2,"h3"),s(3),a(),n(4,"p"),s(5),n(6,"span"),s(7),a(),s(8),n(9,"strong"),s(10),a()(),f(11,Tt,5,8,"p",105),n(12,"small"),s(13),a()(),x(14,"ion-icon",106),a()}if(r&2){let e=p.$implicit;o(3),E("",e.id," \u2014 ",e.email),o(2),b(" ",e.name," \u2022 "),o(),F("tier-"+(e.subscription_tier||e.tier||"free")),o(),b(" ",e.subscription_tier||e.tier||"free"," "),o(),b(" \u2022 ",e.role||"-"," \u2022 "),o(2),h(e.signup_platform==="app"?"App":"Web"),o(),c("ngIf",e.ads_count!==null&&e.ads_count!==void 0),o(2),h(e.created_at)}}function At(r,p){if(r&1){let e=v();n(0,"ion-list")(1,"ion-item",101)(2,"ion-searchbar",102),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.searchTerm,t)||(l.searchTerm=t),_(t)}),g("ionChange",function(){m(e);let t=d(2);return _(t.onSearch())})("ionClear",function(){m(e);let t=d(2);return _(t.onSearch())})("ionCancel",function(){m(e);let t=d(2);return _(t.onSearch())}),a()(),f(3,Mt,15,10,"ion-item",103),a()}if(r&2){let e=d(2);o(2),C("ngModel",e.searchTerm),o(),c("ngForOf",e.filteredUsers)}}function Et(r,p){r&1&&(n(0,"div",112),s(1,"No users returned from API"),a())}function kt(r,p){if(r&1){let e=v();n(0,"div",26),f(1,Ct,2,1,"div",96)(2,At,4,2,"ion-list",28)(3,Et,2,0,"div",97),n(4,"div",98)(5,"ion-button",99),g("click",function(){m(e);let t=d();return _(t.prev())}),s(6,"Prev"),a(),n(7,"span"),s(8),a(),n(9,"ion-button",99),g("click",function(){m(e);let t=d();return _(t.next())}),s(10,"Next"),a()()()}if(r&2){let e=d();o(),c("ngIf",e.loading||e.isLoadingAllUsers),o(),c("ngIf",!e.loading),o(),c("ngIf",!e.loading&&e.users.length===0),o(2),c("disabled",e.page<=1),o(3),E("Page ",e.page," / ",e.maxPage),o(),c("disabled",e.page*e.pageSize>=e.currentTotal)}}function Vt(r,p){r&1&&(n(0,"div",100),s(1,"Loading paid users\u2026"),a())}function It(r,p){if(r&1&&(n(0,"span"),s(1),a()),r&2){let e=d(4);o(),b(" + ",e.paidSummary.otherCurrency.join(", "))}}function Dt(r,p){if(r&1&&(n(0,"ion-item",116)(1,"ion-label")(2,"h3")(3,"strong"),s(4),a(),s(5),f(6,It,2,1,"span",28),a(),n(7,"p"),s(8),a()()()),r&2){let e=d(3);o(4),b("",e.paidSummary.paying," paying"),o(),b(" \xB7 MRR $",e.paidSummary.mrrUsd),o(),c("ngIf",e.paidSummary.otherCurrency==null?null:e.paidSummary.otherCurrency.length),o(2),W("",e.paidSummary.test," test charge \xB7 ",e.paidSummary.grant," admin grant \xB7 ",e.paidSummary.lapsed," lapsed")}}function Ot(r,p){r&1&&(n(0,"div",112),s(1,"No paid users found"),a())}function Lt(r,p){if(r&1&&(n(0,"span"),s(1," \xB7 "),n(2,"strong"),s(3),a()()),r&2){let e=d(2).$implicit;o(3),W("",e.currency," ",e.amount,"/",e.interval==="year"?"yr":"mo")}}function zt(r,p){if(r&1&&(n(0,"p")(1,"ion-badge",117),s(2),a(),s(3),f(4,Lt,4,3,"span",28),s(5," \xB7 "),n(6,"span"),s(7),a()()),r&2){let e=d().$implicit,i=d(3);o(),c("color",i.billingColor(e.state)),o(),h(e.state==="paying"?"PAYING":e.state==="test"?"TEST":e.state==="grant"?"GRANT":e.state==="lapsed"?"LAPSED":e.state),o(),b(" ",i.paymentMethodLabel(e.source)," "),o(),c("ngIf",e.amount!==null&&e.amount!==void 0),o(2),F("tier-"+(e.subscription_tier||"pro")),o(),h(e.subscription_tier)}}function Ut(r,p){if(r&1&&(n(0,"span"),s(1),I(2,"date"),a()),r&2){let e=d(2).$implicit;o(),b(" \xB7 since ",z(2,1,e.since,"dd MMM yyyy"))}}function Ft(r,p){if(r&1&&(n(0,"span"),s(1),I(2,"date"),a()),r&2){let e=d(2).$implicit;o(),b(" \xB7 ends ",z(2,1,e.subscription_end,"dd MMM yyyy"))}}function Wt(r,p){if(r&1&&(n(0,"p"),s(1),f(2,Ut,3,4,"span",28)(3,Ft,3,4,"span",28),a()),r&2){let e=d().$implicit;o(),h(e.detail),o(),c("ngIf",e.since),o(),c("ngIf",e.subscription_end)}}function Bt(r,p){if(r&1&&(n(0,"p"),s(1),n(2,"span"),s(3),a(),s(4," \u2022 "),n(5,"span",118),s(6),a()()),r&2){let e=d().$implicit;o(),b(" ",e.name," \u2022 "),o(),F("tier-"+(e.subscription_tier||"pro")),o(),h(e.subscription_tier||"pro"),o(3),h(e.subscription_plan||e.subscription_status||"active")}}function Rt(r,p){if(r&1){let e=v();n(0,"ion-item",104),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.openUserPage(t))}),n(1,"ion-label")(2,"h3"),s(3),a(),f(4,zt,8,7,"p",28)(5,Wt,4,3,"p",28)(6,Bt,7,5,"p",28),n(7,"small"),s(8),a()(),x(9,"ion-icon",106),a()}if(r&2){let e=p.$implicit;o(3),E("",e.id||e.user_id," \u2014 ",e.email),o(),c("ngIf",e.state),o(),c("ngIf",e.detail),o(),c("ngIf",!e.state),o(2),E("",e.name," \xB7 Joined: ",e.created_at)}}function Nt(r,p){if(r&1){let e=v();n(0,"ion-list")(1,"ion-item",101)(2,"ion-searchbar",114),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.paidSearchTerm,t)||(l.paidSearchTerm=t),_(t)}),g("ionChange",function(){m(e);let t=d(2);return _(t.filterPaidUsers())})("ionClear",function(){m(e);let t=d(2);return _(t.filterPaidUsers())}),a()(),f(3,Dt,9,6,"ion-item",115)(4,Ot,2,0,"div",97)(5,Rt,10,7,"ion-item",103),a()}if(r&2){let e=d(2);o(2),C("ngModel",e.paidSearchTerm),o(),c("ngIf",e.paidSummary),o(),c("ngIf",e.filteredPaidUsers.length===0),o(),c("ngForOf",e.paginatedPaidUsers)}}function Yt(r,p){if(r&1){let e=v();n(0,"div",98)(1,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.prevPaid())}),s(2,"Prev"),a(),n(3,"span"),s(4),a(),n(5,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.nextPaid())}),s(6,"Next"),a()()}if(r&2){let e=d(2);o(),c("disabled",e.paidPage<=1),o(3),E("Page ",e.paidPage," / ",e.paidMaxPage),o(),c("disabled",e.paidPage>=e.paidMaxPage)}}
1function jt(r,p){if(r&1&&(n(0,"div",26),f(1,Vt,2,0,"div",96)(2,Nt,6,4,"ion-list",28)(3,Yt,7,4,"div",113),a()),r&2){let e=d();o(),c("ngIf",e.paidLoading),o(),c("ngIf",!e.paidLoading),o(),c("ngIf",!e.paidLoading&&e.filteredPaidUsers.length>e.paidPageSize)}}function Ht(r,p){r&1&&(n(0,"div",100),s(1,"Loading active subscriptions\u2026"),a())}function qt(r,p){r&1&&(n(0,"div",112),s(1,"No active subscriptions found"),a())}function $t(r,p){if(r&1){let e=v();n(0,"ion-item",104),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.openUserPage(t))}),n(1,"ion-label")(2,"h3"),s(3),a(),n(4,"p")(5,"span",118),s(6),a(),s(7," \u2022 "),n(8,"span"),s(9),a(),s(10),a(),n(11,"small"),s(12),a()(),x(13,"ion-icon",106),a()}if(r&2){let e=p.$implicit;o(3),E("",e.user_id," \u2014 ",e.email),o(3),h(e.subscription_plan||"paid"),o(2),F("tier-"+(e.subscription_tier||"active")),o(),h(e.subscription_tier||"active"),o(),b(" \u2022 ",e.subscription_status||"active"," "),o(2),E(" Renewal: ",e.subscription_end||"N/A"," \u2022 Started: ",e.subscription_start||"N/A"," ")}}function Gt(r,p){if(r&1){let e=v();n(0,"ion-list")(1,"ion-item",101)(2,"ion-searchbar",119),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.activeSubsSearch,t)||(l.activeSubsSearch=t),_(t)}),g("ionChange",function(){m(e);let t=d(2);return _(t.filterActiveSubscriptions())})("ionClear",function(){m(e);let t=d(2);return _(t.filterActiveSubscriptions())}),a()(),f(3,qt,2,0,"div",97)(4,$t,14,9,"ion-item",103),a()}if(r&2){let e=d(2);o(2),C("ngModel",e.activeSubsSearch),o(),c("ngIf",e.filteredActiveSubscriptions.length===0),o(),c("ngForOf",e.paginatedActiveSubscriptions)}}function Qt(r,p){if(r&1){let e=v();n(0,"div",98)(1,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.prevActiveSubs())}),s(2,"Prev"),a(),n(3,"span"),s(4),a(),n(5,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.nextActiveSubs())}),s(6,"Next"),a()()}if(r&2){let e=d(2);o(),c("disabled",e.activeSubsPage<=1),o(3),E("Page ",e.activeSubsPage," / ",e.activeSubsMaxPage),o(),c("disabled",e.activeSubsPage>=e.activeSubsMaxPage)}}function Jt(r,p){if(r&1&&(n(0,"div",26),f(1,Ht,2,0,"div",96)(2,Gt,5,3,"ion-list",28)(3,Qt,7,4,"div",113),a()),r&2){let e=d();o(),c("ngIf",e.activeSubsLoading),o(),c("ngIf",!e.activeSubsLoading),o(),c("ngIf",!e.activeSubsLoading&&e.filteredActiveSubscriptions.length>e.activeSubsPageSize)}}function Kt(r,p){r&1&&(n(0,"div",100),s(1,"Loading configuration\u2026"),a())}function Xt(r,p){if(r&1){let e=v();n(0,"ion-list")(1,"ion-item")(2,"ion-label",121),s(3,"Free \u2014 Videos per Day"),a(),n(4,"ion-input",122),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.free_videos_per_day,t)||(l.configValues.free_videos_per_day=t),_(t)}),a()(),n(5,"ion-item")(6,"ion-label",121),s(7,"Free \u2014 AI Videos per Day"),a(),n(8,"ion-input",122),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.free_ai_per_day,t)||(l.configValues.free_ai_per_day=t),_(t)}),a()(),n(9,"ion-item")(10,"ion-label",121),s(11,"Pro \u2014 Videos per Day"),a(),n(12,"ion-input",123),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.pro_videos_per_day,t)||(l.configValues.pro_videos_per_day=t),_(t)}),a()(),n(13,"ion-item")(14,"ion-label",121),s(15,"Pro \u2014 AI Videos per Day"),a(),n(16,"ion-input",123),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.pro_ai_per_day,t)||(l.configValues.pro_ai_per_day=t),_(t)}),a()(),n(17,"ion-item")(18,"ion-label",121),s(19,"Premium \u2014 AI Videos per Day"),a(),n(20,"ion-input",123),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.premium_ai_per_day,t)||(l.configValues.premium_ai_per_day=t),_(t)}),a()(),n(21,"ion-item")(22,"ion-label",121),s(23,"Guest \u2014 Total Videos"),a(),n(24,"ion-input",122),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.guest_videos_total,t)||(l.configValues.guest_videos_total=t),_(t)}),a()()()}if(r&2){let e=d(2);o(4),C("ngModel",e.configValues.free_videos_per_day),o(4),C("ngModel",e.configValues.free_ai_per_day),o(4),C("ngModel",e.configValues.pro_videos_per_day),o(4),C("ngModel",e.configValues.pro_ai_per_day),o(4),C("ngModel",e.configValues.premium_ai_per_day),o(4),C("ngModel",e.configValues.guest_videos_total)}}function Zt(r,p){if(r&1){let e=v();n(0,"ion-list")(1,"ion-item")(2,"ion-label",121),s(3,"Announcement (shown to all users)"),a(),n(4,"ion-input",124),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.configValues.announcement,t)||(l.configValues.announcement=t),_(t)}),a()()()}if(r&2){let e=d(2);o(4),C("ngModel",e.configValues.announcement)}}function ei(r,p){if(r&1){let e=v();n(0,"div",26)(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),s(4,"Video Generation Limits"),a(),n(5,"ion-card-subtitle"),s(6,"Dynamic configuration \u2014 no code changes needed"),a()(),n(7,"ion-card-content"),f(8,Kt,2,0,"div",96)(9,Xt,25,6,"ion-list",28),a()(),n(10,"ion-card")(11,"ion-card-header")(12,"ion-card-title"),s(13,"General Settings"),a()(),n(14,"ion-card-content"),f(15,Zt,5,1,"ion-list",28),a()(),n(16,"ion-button",120),g("
1click",function(){m(e);let t=d();return _(t.saveConfig())}),s(17),a()()}if(r&2){let e=d();o(8),c("ngIf",e.configLoading),o(),c("ngIf",!e.configLoading),o(6),c("ngIf",!e.configLoading),o(),c("disabled",e.configSaving),o(),b(" ",e.configSaving?"Saving\u2026":"Save Configuration"," ")}}function ti(r,p){r&1&&(n(0,"div",100),s(1,"Loading queries\u2026"),a())}function ii(r,p){r&1&&(n(0,"div",112),s(1,"No support queries"),a())}function ni(r,p){if(r&1&&(n(0,"div",138)(1,"strong"),s(2,"Admin Reply:"),a(),n(3,"p"),s(4),a()()),r&2){let e=d().$implicit;o(4),h(e.admin_reply)}}function ai(r,p){if(r&1){let e=v();n(0,"div",139)(1,"ion-textarea",140),S("ngModelChange",function(t){m(e);let l=d().$implicit,u=d(2);return w(u.replyTexts[l.id],t)||(u.replyTexts[l.id]=t),_(t)}),a(),n(2,"ion-button",141),g("click",function(){m(e);let t=d().$implicit,l=d(2);return _(l.replySupportQuery(t))}),s(3," Send Reply & Resolve "),a()()}if(r&2){let e=d().$implicit,i=d(2);o(),C("ngModel",i.replyTexts[e.id]),o(),c("disabled",!(i.replyTexts[e.id]!=null&&i.replyTexts[e.id].trim()))}}function oi(r,p){if(r&1&&(n(0,"ion-card",131)(1,"ion-card-header")(2,"ion-card-subtitle")(3,"span",132),s(4),a(),s(5," \u2022 "),n(6,"span",133),s(7),a(),s(8," \u2022 "),n(9,"span"),s(10),a()(),n(11,"ion-card-title"),s(12),a()(),n(13,"ion-card-content")(14,"p",134),s(15),a(),n(16,"small",135),s(17),a(),f(18,ni,5,1,"div",136)(19,ai,4,2,"div",137),a()()),r&2){let e=p.$implicit;k("resolved",e.status==="resolved"),o(4),h(e.query_type),o(3),h(e.user_email),o(2),F("status-"+e.status),o(),h(e.status),o(2),h(e.subject),o(3),h(e.message),o(2),h(e.created_at),o(),c("ngIf",e.admin_reply),o(),c("ngIf",e.status==="open")}}function ri(r,p){if(r&1){let e=v();n(0,"div",26)(1,"div",125)(2,"ion-segment",126),S("ngModelChange",function(t){m(e);let l=d();return w(l.supportFilter,t)||(l.supportFilter=t),_(t)}),g("ionChange",function(){m(e);let t=d();return _(t.loadSupportQueries())}),n(3,"ion-segment-button",127)(4,"ion-label"),s(5,"All"),a()(),n(6,"ion-segment-button",128)(7,"ion-label"),s(8,"Open"),a()(),n(9,"ion-segment-button",129)(10,"ion-label"),s(11,"Resolved"),a()()()(),f(12,ti,2,0,"div",96)(13,ii,2,0,"div",97)(14,oi,20,12,"ion-card",130),a()}if(r&2){let e=d();o(2),C("ngModel",e.supportFilter),o(10),c("ngIf",e.supportLoading),o(),c("ngIf",!e.supportLoading&&e.supportQueries.length===0),o(),c("ngForOf",e.supportQueries)}}function si(r,p){r&1&&(n(0,"div",100),s(1,"Loading reported videos\u2026"),a())}function li(r,p){r&1&&(n(0,"div",112),s(1,"No reported videos"),a())}function di(r,p){if(r&1&&(n(0,"p")(1,"strong"),s(2,"Details:"),a(),s(3),a()),r&2){let e=d().$implicit;o(3),b(" ",e.details)}}function ci(r,p){if(r&1){let e=v();n(0,"ion-card",143)(1,"ion-card-header")(2,"ion-card-title")(3,"ion-badge",144),s(4),a(),n(5,"small",145),s(6),a()(),n(7,"ion-card-subtitle"),s(8),a()(),n(9,"ion-card-content")(10,"p")(11,"strong"),s(12,"Reason:"),a(),s(13),a(),f(14,di,4,1,"p",28),n(15,"div",146)(16,"ion-button",147),g("click",function(){let t=m(e).$implicit,l=d(2);return _(l.viewReportedVideo(t.video_id))}),x(17,"ion-icon",148),s(18," View Video "),a(),n(19,"ion-button",149),g("click",function(){let t=m(e).$implicit,l=d(2);return _(l.deleteReportedVideo(t.video_id,t.id))}),x(20,"ion-icon",150),s(21," Delete "),a(),n(22,"ion-button",151),g("click",function(){let t=m(e).$implicit,l=d(2);return _(l.dismissReport(t.id))}),x(23,"ion-icon",152),s(24," Dismiss "),a()()()()}if(r&2){let e=p.$implicit;o(4),h(e.reason),o(2),b("by user #",e.user_id),o(2),E("Video ID: ",e.video_id," \u2022 ",e.created_at),o(5),b(" ",e.reason),o(),c("ngIf",e.details)}}function pi(r,p){if(r&1){let e=v();n(0,"div",98)(1,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.prevReported())}),s(2,"Prev"),a(),n(3,"span"),s(4),a(),n(5,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.nextReported())}),s(6,"Next"),a()()}if(r&2){let e=d(2);o(),c("disabled",e.reportedPage<=1),o(3),E("Page ",e.reportedPage," / ",e.reportedMaxPage),o(),c("disabled",e.reportedPage>=e.reportedMaxPage)}}function mi(r,p){if(r&1&&(n(0,"div",26),f(1,si,2,0,"div",96)(2,li,2,0,"div",97)(3,ci,25,6,"ion-card",142)(4,pi,7,4,"div",113),a()),r&2){let e=d();o(),c("ngIf",e.reportedLoading),o(),c("ngIf",!e.reportedLoading&&e.reportedVideos.length===0),o(),c("ngForOf",e.reportedVideos),o(),c("ngIf",!e.reportedLoading&&e.reportedVideos.length>0)}}function _i(r,p){r&1&&(n(0,"div",100),s(1,"Loading videos\u2026"),a())}function gi(r,p){r&1&&(n(0,"div",112),s(1,"No videos found"),a())}function ui(r,p){if(r&1&&(n(0,"p",171),s(1),I(2,"uppercase"),a()),r&2){let e=d().$implicit;k("published",e.youtube_status==="published"),o(),b(" YouTube: ",R(2,3,e.youtube_status)," ")}}function hi(r,p){if(r&1){let e=v();n(0,"ion-card",159)(1,"ion-card-header")(2,"ion-card-title")(3,"strong"),s(4),a()(),n(5,"ion-card-subtitle",160)(6,"span",161),s(7),a(),n(8,"ion-badge",162),s(9),a(),n(10,"ion-badge",162),s(11),a(),n(12,"span",163),s(13),a()()(),n(14,"ion-card-content")(15,"p",164),s(16),I(17,"date"),a(),n(18,"p",165),s(19),a(),f(20,ui,3,5,"p",166),n(21,"div",167)(22,"ion-button",168),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.toggleFeatured(t))}),s(23),a(),n(24,"ion-button",147),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.openUserVideo(t))}),x(25,"ion-icon",169),s(26," View "),a(),n(27,"ion-button",147),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.viewSEOMetadata(t))}),x(28,"ion-icon",170),s(29," SEO "),a(),n(30,"ion-button",149),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.deleteUserVideo(t.id))}),x(31,"ion-icon",150),s(32," Delete "),a()()()()}if(r&2){let e=p.$implicit,i=d(3);o(4),h(e.title||(e.script_preview==null?null:e.script_preview.substring(0,50))||"Untitled"),o(3),h(e.user_name||e.created_by),o(),c("color",e.subscription_tier==="premium"?"warning":e.subscription_tier==="pro"?"primary":"medium"),o(),b(" ",e.subscription_tier||"free"," "),o(),c("color",e.signup_platform==="app"?"tertiary":"medium"),o(),b(" ",e.signup_platform==="app"?"App":"Web"," "),o(2),E("",e.video_type," \xB7 ",e.duration,"s"),o(3),h(z(1
17,19,e.created_at,"short")),o(2),k("public",e.is_public)("private",!e.is_public),o(),b(" ",e.is_public?"\u{1F310} PUBLIC":"\u{1F512} PRIVATE"," "),o(),c("ngIf",e.youtube_status),o(2),c("fill",i.isFeatured(e)?"solid":"outline")("color",i.isFeatured(e)?"warning":"medium")("disabled",i.featuringUrl===e.video_url),o(),b(" ",i.isFeatured(e)?"\u2605 Featured":"\u2606 Feature"," ")}}function xi(r,p){if(r&1&&(n(0,"div",156)(1,"div",157),s(2),a(),f(3,hi,33,22,"ion-card",158),a()),r&2){let e=d(2);o(2),W(" ",e.allAdminVideosTotal," total videos \u2014 page ",e.allAdminVideosPage," / ",e.allAdminVideosMaxPage," "),o(),c("ngForOf",e.allAdminVideos)}}function fi(r,p){if(r&1){let e=v();n(0,"div",98)(1,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.prevAllVideos())}),s(2,"Prev"),a(),n(3,"span"),s(4),a(),n(5,"ion-button",99),g("click",function(){m(e);let t=d(2);return _(t.nextAllVideos())}),s(6,"Next"),a()()}if(r&2){let e=d(2);o(),c("disabled",e.allAdminVideosPage<=1),o(3),E("Page ",e.allAdminVideosPage," / ",e.allAdminVideosMaxPage),o(),c("disabled",e.allAdminVideosPage>=e.allAdminVideosMaxPage)}}function bi(r,p){if(r&1){let e=v();n(0,"div",26)(1,"div",153)(2,"ion-searchbar",154),S("ngModelChange",function(t){m(e);let l=d();return w(l.userVideoSearchTerm,t)||(l.userVideoSearchTerm=t),_(t)}),g("ionChange",function(){m(e);let t=d();return _(t.onAllVideosSearch())})("ionClear",function(){m(e);let t=d();return _(t.onAllVideosSearch())}),a()(),f(3,_i,2,0,"div",96)(4,gi,2,0,"div",97)(5,xi,4,4,"div",155)(6,fi,7,4,"div",113),a()}if(r&2){let e=d();o(2),C("ngModel",e.userVideoSearchTerm),o(),c("ngIf",e.allAdminVideosLoading),o(),c("ngIf",!e.allAdminVideosLoading&&e.allAdminVideos.length===0),o(),c("ngIf",!e.allAdminVideosLoading&&e.allAdminVideos.length>0),o(),c("ngIf",!e.allAdminVideosLoading&&e.allAdminVideosMaxPage>1)}}function vi(r,p){if(r&1){let e=v();n(0,"div",181)(1,"ion-searchbar",182),S("ngModelChange",function(t){m(e);let l=d(3);return w(l.successSearch,t)||(l.successSearch=t),_(t)}),g("ngModelChange",function(){m(e);let t=d(3);return _(t.successPage=1)}),a(),n(2,"div",183)(3,"ion-select",184),S("ngModelChange",function(t){m(e);let l=d(3);return w(l.successMethodFilter,t)||(l.successMethodFilter=t),_(t)}),g("ngModelChange",function(){m(e);let t=d(3);return _(t.successPage=1)}),n(4,"ion-select-option",127),s(5,"All Methods"),a(),n(6,"ion-select-option",185),s(7,"Razorpay"),a(),n(8,"ion-select-option",186),s(9,"Razorpay Subscription"),a(),n(10,"ion-select-option",187),s(11,"Google Play (App)"),a(),n(12,"ion-select-option",188),s(13,"Dodo"),a(),n(14,"ion-select-option",189),s(15,"Shopify"),a()(),n(16,"ion-note",190),s(17),a()()()}if(r&2){let e=d(3);o(),C("ngModel",e.successSearch),o(2),C("ngModel",e.successMethodFilter),o(14),b("",e.filteredTransactions.length," result(s)")}}function yi(r,p){r&1&&(n(0,"div",100),s(1,"Loading transactions\u2026"),a())}function Pi(r,p){r&1&&(n(0,"div",112),s(1," No transactions recorded yet "),a())}function Ci(r,p){if(r&1&&(n(0,"span",194),s(1),a()),r&2){let e=d().$implicit;o(),h(e.billing_label)}}function wi(r,p){if(r&1&&(n(0,"p",197),s(1),a()),r&2){let e=d().$implicit;o(),b("ID: ",e.user_id)}}function Si(r,p){if(r&1&&(n(0,"ion-item")(1,"ion-label")(2,"p",195),s(3,"\u{1F511} Payment / Transaction ID"),a(),n(4,"p",197),s(5),a()()()),r&2){let e=d().$implicit;o(5),h(e.razorpay_payment_id)}}function Ti(r,p){if(r&1&&(n(0,"ion-card",191)(1,"ion-card-header")(2,"ion-card-subtitle",192)(3,"ion-badge",117),s(4),a(),n(5,"ion-badge",117),s(6),a(),f(7,Ci,2,1,"span",193),n(8,"span",194),s(9),I(10,"date"),a()(),n(11,"ion-card-title"),s(12),a()(),n(13,"ion-card-content")(14,"ion-list",116)(15,"ion-item")(16,"ion-label")(17,"p",195),s(18,"\u{1F464} User"),a(),n(19,"h4"),s(20),a(),f(21,wi,2,1,"p",196),a(),n(22,"ion-label",4)(23,"h3")(24,"strong"),s(25),a()()()(),f(26,Si,6,1,"ion-item",28),a()()()),r&2){let e=p.$implicit,i=d(3);o(3),c("color",e.status==="test"?"warning":"success"),o(),h(e.status==="test"?"TEST CHARGE":"SUCCESS"),o(),c("color",e.payment_method==="google_play"?"tertiary":e.payment_method==="razorpay_subscription"?"secondary":"primary"),o(),b(" ",i.paymentMethodLabel(e.payment_method)," "),o(),c("ngIf",e.billing_label),o(2),h(z(10,12,e.created_at,"dd MMM yyyy, HH:mm")),o(3),h(e.plan_id||"Unknown Plan"),o(8),h(e.email||"ID: "+e.user_id),o(),c("ngIf",e.user_id),o(4),E("",e.currency," ",e.amount),o(),c("ngIf",e.razorpay_payment_id)}}function Mi(r,p){if(r&1){let e=v();n(0,"div",198)(1,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.successPage=1)}),x(2,"ion-icon",200),a(),n(3,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.successPage=t.successPage-1)}),x(4,"ion-icon",201),a(),n(5,"span",202),s(6),a(),n(7,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.successPage=t.successPage+1)}
1),x(8,"ion-icon",203),a(),n(9,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.successPage=t.successMaxPage)}),x(10,"ion-icon",204),a()()}if(r&2){let e=d(3);o(),c("disabled",e.successPage<=1),o(2),c("disabled",e.successPage<=1),o(3),E("",e.successPage," / ",e.successMaxPage),o(),c("disabled",e.successPage>=e.successMaxPage),o(2),c("disabled",e.successPage>=e.successMaxPage)}}function Ai(r,p){if(r&1&&(n(0,"div",205)(1,"ion-note"),s(2),a()()),r&2){let e=d(3);o(2),E("",e.filteredTransactions.length," transaction(s) total \u2014 showing ",e.pagedTransactions.length," on this page")}}function Ei(r,p){if(r&1){let e=v();n(0,"div")(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),s(4,"\u2705 Successful Transactions"),a(),n(5,"ion-card-subtitle"),s(6,"Payments recorded here (Razorpay, Dodo, App) + Shopify subscriptions (billed by Shopify every 30 days)"),a()(),n(7,"ion-card-content")(8,"ion-button",175),g("click",function(){m(e);let t=d(2);return _(t.loadPaymentTransactions())}),x(9,"ion-icon",176),s(10),a()()(),f(11,vi,18,3,"div",177)(12,yi,2,0,"div",96)(13,Pi,2,0,"div",97)(14,Ti,27,15,"ion-card",178)(15,Mi,11,6,"div",179)(16,Ai,3,2,"div",180),a()}if(r&2){let e=d(2);o(8),c("disabled",e.paymentTransactionsLoading),o(2),b(" ",e.paymentTransactionsLoading?"Loading\u2026":"Refresh Transactions"," "),o(),c("ngIf",!e.paymentTransactionsLoading&&e.paymentTransactions.length>0),o(),c("ngIf",e.paymentTransactionsLoading),o(),c("ngIf",!e.paymentTransactionsLoading&&e.paymentTransactionsLoaded&&e.paymentTransactions.length===0),o(),c("ngForOf",e.pagedTransactions),o(),c("ngIf",e.filteredTransactions.length>e.successPageSize),o(),c("ngIf",!e.paymentTransactionsLoading&&e.paymentTransactions.length>0)}}function ki(r,p){if(r&1){let e=v();n(0,"div",181)(1,"ion-searchbar",206),S("ngModelChange",function(t){m(e);let l=d(3);return w(l.failedSearch,t)||(l.failedSearch=t),_(t)}),g("ngModelChange",function(){m(e);let t=d(3);return _(t.failedPage=1)}),a(),n(2,"div",183)(3,"ion-select",207),S("ngModelChange",function(t){m(e);let l=d(3);return w(l.failedPlatformFilter,t)||(l.failedPlatformFilter=t),_(t)}),g("ngModelChange",function(){m(e);let t=d(3);return _(t.failedPage=1)}),n(4,"ion-select-option",127),s(5,"All Platforms"),a(),n(6,"ion-select-option",208),s(7,"App"),a(),n(8,"ion-select-option",209),s(9,"Web"),a()(),n(10,"ion-note",190),s(11),a()()()}if(r&2){let e=d(3);o(),C("ngModel",e.failedSearch),o(2),C("ngModel",e.failedPlatformFilter),o(8),b("",e.filteredFailed.length," result(s)")}}function Vi(r,p){r&1&&(n(0,"div",100),s(1,"Loading payment logs\u2026"),a())}function Ii(r,p){r&1&&(n(0,"div",112),x(1,"ion-icon",210),s(2," No payment failures recorded "),a())}function Di(r,p){if(r&1&&(n(0,"ion-badge",217),s(1),a()),r&2){let e=d().$implicit;o(),h(e.country)}}function Oi(r,p){r&1&&(n(0,"ion-badge",218),s(1,"WEB OK"),a())}function Li(r,p){r&1&&(n(0,"ion-badge",144),s(1,"NO WEB"),a())}function zi(r,p){if(r&1&&(n(0,"ion-badge",117),s(1),I(2,"uppercase"),a()),r&2){let e=d().$implicit;c("color",e.currentTier==="premium"?"warning":e.currentTier==="pro"?"success":"medium"),o(),b(" NOW: ",R(2,2,e.currentTier)," ")}}function Ui(r,p){if(r&1&&(n(0,"p",197),s(1),a()),r&2){let e=d().$implicit;o(),b("ID: ",e.userId)}}function Fi(r,p){if(r&1){let e=v();n(0,"ion-item")(1,"ion-label")(2,"p",195),s(3,"\u{1F527} Manual Activation"),a(),n(4,"p",197),s(5,"Payment may have gone through but subscription not activated"),a()(),n(6,"ion-button",219),g("click",function(){m(e);let t=d().$implicit,l=d(3);return _(l.adminActivateSubscription(t))}),s(7),a()()}if(r&2){let e=d().$implicit;o(6),c("disabled",e.activating),o(),b(" ",e.activating?"Activating\u2026":"\u26A1 Activate"," ")}}function Wi(r,p){if(r&1&&(n(0,"ion-item")(1,"ion-label")(2,"p",195),s(3,"\u2139 What happened"),a(),n(4,"p",197),s(5),a()()()),r&2){let e=d().$implicit;o(5),h(e.explain||(e.kind==="cancelled"?"The buyer closed the Google Play sheet. No charge.":e.kind==="unavailable"?"Google Play on this phone did not offer this plan, so no sheet opened. No charge.":"Google Play opened but the app never reported an outcome (closed or backgrounded). The server grants only what RevenueCat confirms."))}}function Bi(r,p){if(r&1&&(n(0,"ion-item")(1,"ion-label")(2,"p",195),s(3,"\u{1F48E} Plan Attempted"),a(),n(4,"h4"),s(5),a()()()),r&2){let e=d().$implicit;o(5),h(e.planName||e.planId)}}function Ri(r,p){if(r&1&&(n(0,"ion-item")(1,"ion-label")(2,"p",195),s(3,"\u26A0 Error"),a(),n(4,"h4",220),s(5),a()()()),r&2){let e=d().$implicit;o(5),h(e.error)}}function Ni(r,p){if(r&1){let e=v();n(0,"ion-card",191)(1,"ion-card-header")(2,"ion-card-subtitle",192)(3,"ion-badge",117),s(4),a(),f(5,Di,2,1,"ion-badge",211)(6,Oi,2,0,"ion-badge",212)(7,Li,2,0,"ion-badge",213),n(8,"ion-badge",117),s(9),a(),f(10,zi,3,4,"ion-badge",214),n(11,"span",194),s(12),I(13,"date"),a()(),n(14,"ion-card-title"),s(1
15),a()(),n(16,"ion-card-content")(17,"ion-list",116)(18,"ion-item")(19,"ion-label")(20,"p",195),s(21,"\u{1F464} User"),a(),n(22,"h4"),s(23),a(),f(24,Ui,2,1,"p",196),a(),n(25,"ion-button",215),g("click",function(){let t=m(e).$implicit,l=d(3);return _(l.applyPaymentRetryEmail(t))}),s(26),a()(),f(27,Fi,8,2,"ion-item",28)(28,Wi,6,1,"ion-item",28)(29,Bi,6,1,"ion-item",28)(30,Ri,6,1,"ion-item",28),a(),n(31,"details",216)(32,"summary"),s(33,"Raw data"),a(),n(34,"pre"),s(35),I(36,"json"),a()()()()}if(r&2){let e=p.$implicit,i=d(3);o(3),c("color",e.kind==="failed"?"danger":e.kind==="unavailable"?"warning":"medium"),o(),b(" ",e.kind==="cancelled"?"CANCELLED":e.kind==="unavailable"?"PLAY UNAVAILABLE":e.kind==="no_outcome"?"NO OUTCOME":"FAILED"," "),o(),c("ngIf",e.country),o(),c("ngIf",e.webCheckout===!0),o(),c("ngIf",e.webCheckout===!1),o(),c("color",e.platform==="App"?"tertiary":"medium"),o(),h(e.platform||"?"),o(),c("ngIf",e.currentTier),o(2),h(z(13,22,e.timestamp,"dd MMM, HH:mm")),o(3),b(" ",e.planName||e.planId||e.event||"Payment Error"," "),o(7),k("pf-unknown",!e.email),o(),h(e.email||"Email not available"),o(),c("ngIf",e.userId),o(),c("color",e.retrySent?"success":i.isPaidTier(e.currentTier)?"medium":"primary")("disabled",!e.email||e.sendingRetry),o(),b(" ",e.sendingRetry?"Sending\u2026":e.retrySent?"\u2713 Sent":i.isPaidTier(e.currentTier)?"\u2713 Paid":"\u2709 Send Retry"," "),o(),c("ngIf",e.userId&&e.planId&&e.currentTier==="free"&&e.kind==="failed"),o(),c("ngIf",e.kind==="cancelled"||e.kind==="no_outcome"||e.kind==="unavailable"),o(),c("ngIf",e.planId),o(),c("ngIf",e.error),o(5),h(R(36,25,e.data))}}function Yi(r,p){if(r&1){let e=v();n(0,"div",198)(1,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.failedPage=1)}),x(2,"ion-icon",200),a(),n(3,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.failedPage=t.failedPage-1)}),x(4,"ion-icon",201),a(),n(5,"span",202),s(6),a(),n(7,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.failedPage=t.failedPage+1)}),x(8,"ion-icon",203),a(),n(9,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.failedPage=t.failedMaxPage)}),x(10,"ion-icon",204),a()()}if(r&2){let e=d(3);o(),c("disabled",e.failedPage<=1),o(2),c("disabled",e.failedPage<=1),o(3),E("",e.failedPage," / ",e.failedMaxPage),o(),c("disabled",e.failedPage>=e.failedMaxPage),o(2),c("disabled",e.failedPage>=e.failedMaxPage)}}function ji(r,p){if(r&1&&(n(0,"div",205)(1,"ion-note"),s(2),a()()),r&2){let e=d(3);o(2),E("",e.filteredFailed.length," failure(s) total \u2014 showing ",e.pagedFailed.length," on this page")}}function Hi(r,p){if(r&1){let e=v();n(0,"div")(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),s(4,"\u{1F4B3} Payment Failure Logs"),a(),n(5,"ion-card-subtitle"),s(6,"Recent client-side payment errors logged from the app"),a()(),n(7,"ion-card-content")(8,"ion-button",175),g("click",function(){m(e);let t=d(2);return _(t.loadFailedPayments())}),x(9,"ion-icon",176),s(10),a()()(),f(11,ki,12,3,"div",177)(12,Vi,2,0,"div",96)(13,Ii,3,0,"div",97)(14,Ni,37,27,"ion-card",178)(15,Yi,11,6,"div",179)(16,ji,3,2,"div",180),a()}if(r&2){let e=d(2);o(8),c("disabled",e.failedPaymentsLoading),o(2),b(" ",e.failedPaymentsLoading?"Loading\u2026":"Refresh Logs"," "),o(),c("ngIf",!e.failedPaymentsLoading&&e.failedPayments.length>0),o(),c("ngIf",e.failedPaymentsLoading),o(),c("ngIf",!e.failedPaymentsLoading&&e.failedPaymentsLoaded&&e.failedPayments.length===0),o(),c("ngForOf",e.pagedFailed),o(),c("ngIf",e.filteredFailed.length>e.failedPageSize),o(),c("ngIf",!e.failedPaymentsLoading&&e.failedPayments.length>0)}}function qi(r,p){if(r&1){let e=v();n(0,"div",181)(1,"ion-searchbar",206),S("ngModelChange",function(t){m(e);let l=d(3);return w(l.cancelledSearch,t)||(l.cancelledSearch=t),_(t)}),g("ngModelChange",function(){m(e);let t=d(3);return _(t.cancelledPage=1)}),a(),n(2,"div",183)(3,"ion-select",221),S("ngModelChange",function(t){m(e);let l=d(3);return w(l.cancelledStatusFilter,t)||(l.cancelledStatusFilter=t),_(t)}),g("ngModelChange",function(){m(e);let t=d(3);return _(t.cancelledPage=1)}),n(4,"ion-select-option",127),s(5,"All Statuses"),a(),n(6,"ion-select-option",222),s(7,"Cancelled"),a(),n(8,"ion-select-option",223),s(9,"Expired"),a()(),n(10,"ion-note",190),s(11),a()()()}if(r&2){let e=d(3);o(),C("ngModel",e.cancelledSearch),o(2),C("ngModel",e.cancelledStatusFilter),o(8),b("",e.filteredCancelled.length," result(s)")}}
1function $i(r,p){r&1&&(n(0,"div",100),s(1,"Loading cancelled subscriptions\u2026"),a())}function Gi(r,p){r&1&&(n(0,"div",112),s(1," No cancelled or expired subscriptions found "),a())}function Qi(r,p){if(r&1&&(n(0,"p",197),s(1),a()),r&2){let e=d().$implicit;o(),b("ID: ",e.user_id)}}function Ji(r,p){if(r&1&&(n(0,"h4"),s(1),a()),r&2){let e=d(2).$implicit;o(),E("",e.currency||""," ",e.last_amount)}}function Ki(r,p){if(r&1&&(n(0,"p",197),s(1),I(2,"date"),a()),r&2){let e=d(2).$implicit;o(),h(z(2,1,e.last_payment_date,"dd MMM yyyy, HH:mm"))}}function Xi(r,p){if(r&1&&(n(0,"ion-item")(1,"ion-label")(2,"p",195),s(3,"\u{1F9FE} Last Payment"),a(),f(4,Ji,2,2,"h4",28)(5,Ki,3,4,"p",196),a()()),r&2){let e=d().$implicit;o(4),c("ngIf",e.last_amount),o(),c("ngIf",e.last_payment_date)}}function Zi(r,p){if(r&1&&(n(0,"ion-card",191)(1,"ion-card-header")(2,"ion-card-subtitle",192)(3,"ion-badge",117),s(4),I(5,"uppercase"),a(),n(6,"ion-badge",217),s(7),a(),n(8,"span",194),s(9),I(10,"date"),a()(),n(11,"ion-card-title"),s(12),a()(),n(13,"ion-card-content")(14,"ion-list",116)(15,"ion-item")(16,"ion-label")(17,"p",195),s(18,"\u{1F464} User"),a(),n(19,"h4"),s(20),a(),f(21,Qi,2,1,"p",196),a()(),n(22,"ion-item")(23,"ion-label")(24,"p",195),s(25,"\u{1F48E} Subscription"),a(),n(26,"h4"),s(27),a(),n(28,"p",197),s(29),a()()(),f(30,Xi,6,2,"ion-item",28),a()()()),r&2){let e=p.$implicit;o(3),c("color",e.subscription_status==="expired"?"danger":"warning"),o(),b(" ",R(5,10,e.subscription_status||"unknown")," "),o(3),h(e.payment_method||"payment"),o(2),b(" Ends: ",e.subscription_end?z(10,12,e.subscription_end,"dd MMM yyyy, HH:mm"):"Unknown"," "),o(3),h(e.subscription_plan||e.subscription_tier||"Paid Plan"),o(8),h(e.email||"ID: "+e.user_id),o(),c("ngIf",e.user_id),o(6),h(e.subscription_plan||"Unknown Plan"),o(2),b("Tier: ",e.subscription_tier||"unknown"),o(),c("ngIf",e.last_payment_date||e.last_amount)}}function en(r,p){if(r&1){let e=v();n(0,"div",198)(1,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.cancelledPage=1)}),x(2,"ion-icon",200),a(),n(3,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.cancelledPage=t.cancelledPage-1)}),x(4,"ion-icon",201),a(),n(5,"span",202),s(6),a(),n(7,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.cancelledPage=t.cancelledPage+1)}),x(8,"ion-icon",203),a(),n(9,"ion-button",199),g("click",function(){m(e);let t=d(3);return _(t.cancelledPage=t.cancelledMaxPage)}),x(10,"ion-icon",204),a()()}if(r&2){let e=d(3);o(),c("disabled",e.cancelledPage<=1),o(2),c("disabled",e.cancelledPage<=1),o(3),E("",e.cancelledPage," / ",e.cancelledMaxPage),o(),c("disabled",e.cancelledPage>=e.cancelledMaxPage),o(2),c("disabled",e.cancelledPage>=e.cancelledMaxPage)}}function tn(r,p){if(r&1&&(n(0,"div",205)(1,"ion-note"),s(2),a()()),r&2){let e=d(3);o(2),E("",e.filteredCancelled.length," subscription(s) total \u2014 showing ",e.pagedCancelled.length," on this page")}}function nn(r,p){if(r&1){let e=v();n(0,"div")(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),s(4,"\u23F8 Cancelled / Expired Subscriptions"),a(),n(5,"ion-card-subtitle"),s(6,"Users who cancelled renewal or whose paid subscription expired"),a()(),n(7,"ion-card-content")(8,"ion-button",175),g("click",function(){m(e);let t=d(2);return _(t.loadCancelledSubscriptions())}),x(9,"ion-icon",176),s(10),a()()(),f(11,qi,12,3,"div",177)(12,$i,2,0,"div",96)(13,Gi,2,0,"div",97)(14,Zi,31,15,"ion-card",178)(15,en,11,6,"div",179)(16,tn,3,2,"div",180),a()}if(r&2){let e=d(2);o(8),c("disabled",e.cancelledSubsLoading),o(2),b(" ",e.cancelledSubsLoading?"Loading\u2026":"Refresh List"," "),o(),c("ngIf",!e.cancelledSubsLoading&&e.cancelledSubs.length>0),o(),c("ngIf",e.cancelledSubsLoading),o(),c("ngIf",!e.cancelledSubsLoading&&e.cancelledSubsLoaded&&e.cancelledSubs.length===0),o(),c("ngForOf",e.pagedCancelled),o(),c("ngIf",e.filteredCancelled.length>e.cancelledPageSize),o(),c("ngIf",!e.cancelledSubsLoading&&e.cancelledSubs.length>0)}}function an(r,p){if(r&1){let e=v();n(0,"div",26)(1,"div",172)(2,"button",173),g("click",function(){m(e);let t=d();return _(t.paymentsSubTab="success")}),s(3," \u2705 Payment Success "),n(4,"span",174),s(5),a()(),n(6,"button",173),g("click",function(){m(e);let t=d();return _(t.paymentsSubTab="failure")}),s(7," \u274C Payment Failure "),n(8,"span",174),s(9),a()(),n(10,"button",173),g("click",function(){m(e);let t=d();return _(t.paymentsSubTab="cancelled")}),s(11," \u23F8 Cancelled / Expired "),n(12,"span",174),s(13),a()()(),f(14,Ei,17,8,"div",28)(15,Hi,17,8,"div",28)(16,nn,17,8,"div",28),a()}if(r&2){let e=d();o(2),k("active",e.paymentsSubTab==="success"),o(3),b("(",e.paymentTransactions.length,")"),o(),k("active",e.paymentsSubTab==="failure"),o(3),b("(",e.failedPayments.length,")"),o(),k("active",e.paymentsSubTab==="cancelled"),o(3),b("(",e.cancelledSubs.length,")"),o(),c("ngIf",e.paymentsSubTab==="success"),o(),c("ngIf",e.paymentsSubTab==="failure"),o(),c("ngIf",e.paymentsSubTab==="cancelled")}}function on(r,p){if(r&1){let e=v();n(0,"ion-item")(1,"ion-label",121),s(2,"Recipient Email"),a(),n(3,"ion-input",242),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.emailAddress,t)||(l.emailAddress=t),_(t)}),a()()}if(r&2){let e=d(2);o(3),C("ngModel",e.emailAddress)}}function rn(r,p){r&1&&(n(0,"ion-item",116)(1,"ion-note",243),s(2," \u26A0\uFE0F This will send to ALL users. Use with caution. "),a()())}function sn(r,p){if(r&1){let e=v();
1Y(0),n(1,"ion-item")(2,"ion-label",121),s(3,"Headline "),n(4,"span",244),s(5,"(optional bold title)"),a()(),n(6,"ion-input",245),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.visualHeadline,t)||(l.visualHeadline=t),_(t)}),g("ionInput",function(){m(e);let t=d(2);return _(t.syncVisualToHtml())}),a()(),n(7,"ion-item")(8,"ion-label",121),s(9,"Body "),n(10,"span",244),s(11,"(one paragraph per line)"),a()(),n(12,"ion-textarea",246),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.visualBody,t)||(l.visualBody=t),_(t)}),g("ionInput",function(){m(e);let t=d(2);return _(t.syncVisualToHtml())}),a()(),n(13,"ion-item")(14,"ion-label",121),s(15,"Button Text "),n(16,"span",244),s(17,"(leave blank to hide)"),a()(),n(18,"ion-input",247),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.visualCta,t)||(l.visualCta=t),_(t)}),g("ionInput",function(){m(e);let t=d(2);return _(t.syncVisualToHtml())}),a()(),n(19,"ion-item")(20,"ion-label",121),s(21,"Button URL"),a(),n(22,"ion-input",248),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.visualCtaUrl,t)||(l.visualCtaUrl=t),_(t)}),g("ionInput",function(){m(e);let t=d(2);return _(t.syncVisualToHtml())}),a()(),n(23,"ion-item")(24,"ion-label",121),s(25,"Footer Note "),n(26,"span",244),s(27,"(small text below button)"),a()(),n(28,"ion-input",249),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.visualFooter,t)||(l.visualFooter=t),_(t)}),g("ionInput",function(){m(e);let t=d(2);return _(t.syncVisualToHtml())}),a()(),j()}if(r&2){let e=d(2);o(6),C("ngModel",e.visualHeadline),o(6),C("ngModel",e.visualBody),o(6),C("ngModel",e.visualCta),o(4),C("ngModel",e.visualCtaUrl),o(6),C("ngModel",e.visualFooter)}}function ln(r,p){if(r&1){let e=v();n(0,"ion-item")(1,"ion-textarea",250),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.emailMessage,t)||(l.emailMessage=t),_(t)}),a()()}if(r&2){let e=d(2);o(),C("ngModel",e.emailMessage)}}function dn(r,p){if(r&1&&x(0,"div",251),r&2){let e=d(2);c("innerHTML",e.safeEmailHtml,G)}}function cn(r,p){if(r&1){let e=v();n(0,"ion-item",252)(1,"ion-label")(2,"strong"),s(3,"Gift bonus video credits"),a(),n(4,"p",253),s(5,"Recipients get extra AI video credits added instantly"),a()(),n(6,"ion-toggle",254),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.emailGiftCredits,t)||(l.emailGiftCredits=t),_(t)}),a()()}if(r&2){let e=d(2);o(6),C("ngModel",e.emailGiftCredits)}}function pn(r,p){if(r&1){let e=v();n(0,"ion-item",116)(1,"ion-label",121),s(2,"Credits to gift per user"),a(),n(3,"ion-input",255),S("ngModelChange",function(t){m(e);let l=d(2);return w(l.emailGiftAmount,t)||(l.emailGiftAmount=t),_(t)}),a(),n(4,"ion-note",256),s(5,"Max 10"),a()()}if(r&2){let e=d(2);o(3),C("ngModel",e.emailGiftAmount)}}function mn(r,p){if(r&1&&(n(0,"span"),s(1),a()),r&2){let e=d(4);o(),b(" \xB7 \u26A0\uFE0F ",e.emailResult.failed," failed")}}function _n(r,p){if(r&1&&(n(0,"ion-card",218)(1,"ion-card-content"),s(2," \u2705 Sent to "),n(3,"strong"),s(4),a(),s(5," recipient(s) "),f(6,mn,2,1,"span",28),a()()),r&2){let e=d(3);o(4),h(e.emailResult.sent),o(2),c("ngIf",(e.emailResult.failed||0)>0)}}function gn(r,p){if(r&1&&(n(0,"ion-card",144)(1,"ion-card-content"),s(2),a()()),r&2){let e=d(3);o(2),b("\u274C ",e.emailResult.error)}}function un(r,p){if(r&1&&(n(0,"div",257),f(1,_n,7,2,"ion-card",212)(2,gn,3,1,"ion-card",213),a()),r&2){let e=d(2);o(),c("ngIf",!e.emailResult.error),o(),c("ngIf",e.emailResult.error)}}function hn(r,p){if(r&1){let e=v();n(0,"div",26)(1,"ion-card")(2,"ion-card-header")(3,"ion-card-title"),s(4,"\u{1F4E7} Send Email to Users"),a(),n(5,"ion-card-subtitle"),s(6,"Send targeted emails or broadcast to user segments"),a()(),n(7,"ion-card-content")(8,"ion-list")(9,"ion-item")(10,"ion-label",121),s(11,"Send To"),a(),n(12,"ion-select",224),S("ngModelChange",function(t){m(e);let l=d();return w(l.emailTarget,t)||(l.emailTarget=t),_(t)}),n(13,"ion-select-option",225),s(14,"Specific Email Address"),a(),n(15,"ion-select-option",226),s(16,"All Paid Users (Pro + Premium)"),a(),n(17,"ion-select-option",227),s(18,"All Free Users"),a(),n(19,"ion-select-option",127),s(20,"All Users (Broadcast)"),a()()(),f(21,on,4,1,"ion-item",28)(22,rn,3,0,"ion-item",115),n(23,"ion-item")(24,"ion-label",121),s(25,"Subject"),a(),n(26,"ion-input",228),S("ngModelChange",function(t){m(e);let l=d();return w(l.emailSubject,t)||(l.emailSubject=t),_(t)}),a()(),n(27,"ion-item",229)(28,"ion-label",121),s(29,"Message"),a(),n(30,"div",230)(31,"ion-button",231),g("
1click",function(){m(e);let t=d();return t.showEmailPreview=!t.showEmailPreview,_(t.showEmailPreview&&t.emailEditorMode==="visual"&&t.syncVisualToHtml())}),x(32,"ion-icon",232),s(33),a(),n(34,"div",233)(35,"button",234),g("click",function(){m(e);let t=d();return _(t.emailEditorMode="visual")}),s(36,"Visual"),a(),n(37,"button",234),g("click",function(){m(e);let t=d();return _(t.emailEditorMode="html")}),s(38,"HTML"),a()()()(),f(39,sn,29,5,"ng-container",28)(40,ln,2,1,"ion-item",28)(41,dn,1,1,"div",235),a(),f(42,cn,7,1,"ion-item",236)(43,pn,6,1,"ion-item",115),n(44,"ion-button",120),g("click",function(){m(e);let t=d();return _(t.sendAdminEmail())}),x(45,"ion-icon",237),s(46),a(),f(47,un,3,2,"div",238),a()(),n(48,"ion-card")(49,"ion-card-header")(50,"ion-card-title"),s(51,"Quick Templates"),a()(),n(52,"ion-card-content")(53,"ion-button",239),g("click",function(){m(e);let t=d();return _(t.applyEmailTemplate("feature"))}),s(54," \u{1F389} New Feature Announcement "),a(),n(55,"ion-button",239),g("click",function(){m(e);let t=d();return _(t.applyEmailTemplate("upgrade"))}),s(56," \u{1F48E} Upgrade Offer "),a(),n(57,"ion-button",239),g("click",function(){m(e);let t=d();return _(t.applyEmailTemplate("payment"))}),s(58," \u{1F4B3} Payment Failed Follow-up "),a(),n(59,"ion-button",240),g("click",function(){m(e);let t=d();return _(t.applyEmailTemplate("monthly"))}),s(60," \u{1F195} Monthly Plan Launch (free users) "),a(),n(61,"ion-button",241),g("click",function(){m(e);let t=d();return _(t.applyEmailTemplate("newfeatures"))}),s(62," \u{1F680} New Features Pitch (Auto-Pilot, Faceless & more) "),a()()()()}if(r&2){let e=d();o(12),C("ngModel",e.emailTarget),o(9),c("ngIf",e.emailTarget==="specific"),o(),c("ngIf",e.emailTarget==="all"),o(4),C("ngModel",e.emailSubject),o(6),c("name",e.showEmailPreview?"create-outline":"eye-outline"),o(),b(" ",e.showEmailPreview?"Edit":"Preview"," "),o(2),k("active",e.emailEditorMode==="visual"),o(2),k("active",e.emailEditorMode==="html"),o(2),c("ngIf",!e.showEmailPreview&&e.emailEditorMode==="visual"),o(),c("ngIf",!e.showEmailPreview&&e.emailEditorMode==="html"),o(),c("ngIf",e.showEmailPreview),o(),c("ngIf",e.emailTarget!=="specific"),o(),c("ngIf",e.emailTarget!=="specific"&&e.emailGiftCredits),o(),c("disabled",e.emailSending||!e.emailSubject.trim()||!e.emailMessage.trim()||e.emailTarget==="specific"&&!e.emailAddress.trim()),o(2),b(" ",e.emailSending?"Sending\u2026":e.emailGiftCredits&&e.emailTarget!=="specific"?"Send Email + Gift Credits":"Send Email"," "),o(),c("ngIf",e.emailResult)}}function xn(r,p){if(r&1){let e=v();n(0,"div",258),g("click",function(){m(e);let t=d();return _(t.clearSelection())}),a()}}
1function fn(r,p){r&1&&(n(0,"ion-item",116)(1,"ion-label"),s(2,"Loading videos\u2026"),a()())}function bn(r,p){if(r&1){let e=v();n(0,"ion-item",269),g("click",function(t){let l=m(e).$implicit,u=d(2);return t.stopPropagation(),_(u.openVideoInTab(l))}),n(1,"ion-label")(2,"h4"),s(3),a(),n(4,"p"),s(5),a(),n(6,"small"),s(7),a()(),n(8,"ion-button",270),g("click",function(t){let l=m(e).$implicit,u=d(2);return t.stopPropagation(),_(u.shareVideo(l))}),x(9,"ion-icon",271),a(),n(10,"ion-button",272),g("click",function(t){let l=m(e).$implicit,u=d(2);return t.stopPropagation(),_(u.copyCaption(l))}),x(11,"ion-icon",273),a(),n(12,"ion-button",274),g("click",function(t){let l=m(e).$implicit,u=d(2);return t.stopPropagation(),_(u.downloadVideo(l))}),x(13,"ion-icon",275),a()()}if(r&2){let e=p.$implicit;o(3),E("",e.video_type||e.template_id||"video"," \u2014 ",e.duration?e.duration+"s":""),o(2),h(e.script_preview||(e.video_url||"").substring(0,80)),o(2),h(e.created_at)}}function vn(r,p){r&1&&(n(0,"div",276),s(1,"No videos for this user"),a())}function yn(r,p){if(r&1){let e=v();n(0,"ion-card",259)(1,"ion-button",260),g("click",function(){m(e);let t=d();return _(t.clearSelection())}),x(2,"ion-icon",261),n(3,"span",262),s(4,"Close"),a()(),n(5,"ion-card-header")(6,"ion-button",263),g("click",function(){m(e);let t=d();return _(t.clearSelection())}),x(7,"ion-icon",201),a(),x(8,"div",264),n(9,"ion-card-title"),s(10),a(),n(11,"ion-button",265),g("click",function(){m(e);let t=d();return _(t.clearSelection())}),x(12,"ion-icon",266),a()(),n(13,"ion-card-content")(14,"ion-list"),f(15,fn,3,0,"ion-item",115)(16,bn,14,4,"ion-item",267)(17,vn,2,0,"div",268),a()()()}if(r&2){let e=d();o(10),b("User: ",e.selectedUser==null?null:e.selectedUser.email," \u2014 Videos"),o(5),c("ngIf",e.videosLoadingForUser[e.expandedUserId]),o(),c("ngForOf",e.userVideosCache[e.expandedUserId]||B(4,et)),o(),c("ngIf",!e.videosLoadingForUser[e.expandedUserId]&&(e.userVideosCache[e.expandedUserId]||B(5,et)).length===0)}}var Rn=(()=>{let p=class p{get activeTabRow1(){return this.row1Tabs.includes(this.activeTab)?this.activeTab:""}get activeTabRow2(){return this.row2Tabs.includes(this.activeTab)?this.activeTab:""}onRow1Change(i){let t=i?.detail?.value;t&&this.row1Tabs.includes(t)&&(this.activeTab=t,this.onTabChange())}onRow2Change(i){let t=i?.detail?.value;t&&this.row2Tabs.includes(t)&&(this.activeTab=t,this.onTabChange())}get filteredTransactions(){let i=this.paymentTransactions;if(this.successSearch){let t=this.successSearch.toLowerCase();i=i.filter(l=>(l.email||"").toLowerCase().includes(t)||(l.plan_id||"").toLowerCase().includes(t)||(l.razorpay_payment_id||"").toLowerCase().includes(t))}return this.successMethodFilter!=="all"&&(i=i.filter(t=>(t.payment_method||"")===this.successMethodFilter)),i}get successMaxPage(){return Math.max(1,Math.ceil(this.filteredTransactions.length/this.successPageSize))}get pagedTransactions(){let i=(this.successPage-1)*this.successPageSize;return this.filteredTransactions.slice(i,i+this.successPageSize)}get filteredFailed(){let i=this.failedPayments;if(this.failedSearch){let t=this.failedSearch.toLowerCase();i=i.filter(l=>(l.email||"").toLowerCase().includes(t)||(l.planId||l.planName||"").toLowerCase().includes(t))}return this.failedPlatformFilter!=="all"&&(i=i.filter(t=>(t.platform||"")===this.failedPlatformFilter)),i}get failedMaxPage(){return Math.max(1,Math.ceil(this.filteredFailed.length/this.failedPageSize))}get pagedFailed(){let i=(this.failedPage-1)*this.failedPageSize;return this.filteredFailed.slice(i,i+this.failedPageSize)}get filteredCancelled(){let i=this.cancelledSubs;if(this.cancelledSearch){let t=this.cancelledSearch.toLowerCase();i=i.filter(l=>(l.email||"").toLowerCase().includes(t)||(l.subscription_plan||"").toLowerCase().includes(t))}return this.cancelledStatusFilter!=="all"&&(i=i.filter(t=>(t.subscription_status||"")===this.cancelledStatusFilter)),i}get cancelledMaxPage(){return Math.max(1,Math.ceil(this.filteredCancelled.length/this.cancelledPageSize))}get pagedCancelled(){let i=(this.cancelledPage-1)*this.cancelledPageSize;return this.filteredCancelled.slice(i,i+this.cancelledPageSize)}buildEmailFromVisual(){let i=y=>`<!DOCTYPE html>
2<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
3<body style="margin:0;padding:0;background:#f3f4f6;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
4<table width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;padding:30px 0;">
5<tr><td align="center"><table width="560" cellpadding="0" cellspacing="0" style="background:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
6  <tr><td style="background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);padding:32px 40px 24px;text-align:center;">
7    <h1 style="color:#ffffff;margin:0;font-size:24px;font-weight:800;letter-spacing:-0.5px;">Adloura</h1>
8    <p style="color:rgba(255,255,255,0.85);margin:6px 0 0;font-size:13px;">AI video ads for your products</p>
9  </td></tr>
10  ${y}
11  <tr><td style="background:#f9fafb;padding:18px 40px;text-align:center;border-top:1px solid #e5e7eb;">
12    <p style="color:#9ca3af;margin:0;font-size:12px;">Adloura &nbsp;\xB7&nbsp; <a href="https://adloura.com" style="color:#E9AE55;text-decoration:none;">adloura.com</a></p>
13  </td></tr>
14</table></td></tr></table></body></html>`,t=(this.visualBody||"").split(`
15`).filter(y=>y.trim()).map(y=>`<p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 14px;">${y.trim()}</p>`).join(`
16    `),l=(this.visualCta||"").trim()?`<table width="100%" cellpadding="0" cellspacing="0" style="margin:20px 0 24px;"><tr><td align="center">
17      <a href="${this.visualCtaUrl||"https://adloura.com"}" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;box-shadow:0 4px 14px rgba(79,70,229,0.3);">${this.visualCta}</a>
18    </td></tr></table>`:"",u=(this.visualFooter||"").trim()?`<p style="color:#6b7280;font-size:13px;line-height:1.6;margin:0;">${this.visualFooter.trim()}</p>`:"",P=(this.visualHeadline||"").trim()?`<h2 style="color:#1f2937;margin:0 0 16px;font-size:20px;font-weight:800;">${this.visualHeadline.trim()}</h2>`:"";return i(`<tr><td style="padding:36px 40px 28px;">
19    ${P}
20    ${t}
21    ${l}
22    ${u}
23  </td></tr>`)}syncVisualToHtml(){this.emailMessage=this.buildEmailFromVisual()}get safeEmailHtml(){return this.sanitizer.bypassSecurityTrustHtml(this.emailMessage||"")}constructor(i,t,l,u,P,y,D,A,T,M,V,U){this.http=i,this.auth=t,this.router=l,this.route=u,this.backend=P,this.platform=y,this.toastController=D,this.alertController=A,this.translate=T,this.shareService=M,this.viralCaption=V,this.sanitizer=U,this.activeTab="stats",this.row1Tabs=["stats","users","paid","active-subscriptions","config"],this.row2Tabs=["support","user-videos","payments","email"],this.users=[],this.page=1,this.pageSize=20,this.total=0,this.loading=!1,this.isSharing=!1,this.allUsers=[],this.allUsersLoaded=!1,this.isLoadingAllUsers=!1,this.allUsersMax=2e3,this.searchFilteredUsers=[],this.searchTerm="",this.selectedUser=null,this.expandedUserId=null,this.userVideosCache={},this.videosLoadingForUser={},this.stats=null,this.paidUsers=[],this.filteredPaidUsers=[],this.paidSearchTerm="",this.paidLoading=!1,this.paidPage=1,this.paidPageSize=20,this.activeSubscriptions=[],this.filteredActiveSubscriptions=[],this.activeSubsSearch="",this.activeSubsLoading=!1,this.activeSubsLoaded=!1,this.activeSubsPage=1,this.activeSubsPageSize=20,this.configValues={},this.configLoading=!1,this.configSaving=!1,this.supportQueries=[],this.supportLoading=!1,this.supportFilter="all",this.replyTexts={},this.reportedVideos=[],this.reportedLoading=!1,this.reportedPage=1,this.reportedPageSize=20,this.reportedMaxPage=1,this.userVideoSearchTerm="",this.userVideoResults=[],this.userVideoLoading=!1,this.publishingVideoId=null,this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null,this.allAdminVideos=[],this.allAdminVideosLoading=!1,this.allAdminVideosPage=1,this.allAdminVideosPageSize=20,this.allAdminVideosMaxPage=1,this.allAdminVideosTotal=0,this.featuredUrls=new Set,this.featuringUrl="",this.failedPayments=[],this.failedPaymentsLoading=!1,this.failedPaymentsLoaded=!1,this.paymentTransactions=[],this.paymentTransactionsLoading=!1,this.paymentTransactionsLoaded=!1,this.paymentsSubTab="success",this.successSearch="",this.successMethodFilter="all",this.successPage=1,this.successPageSize=20,this.failedSearch="",this.failedPlatformFilter="all",this.failedPage=1,this.failedPageSize=20,this.cancelledSubs=[],this.cancelledSubsLoading=!1,this.cancelledSubsLoaded=!1,this.cancelledSearch="",this.cancelledStatusFilter="all",this.cancelledPage=1,this.cancelledPageSize=20,this.emailTarget="specific",this.emailAddress="",this.emailSubject="",this.emailMessage="",this.emailSending=!1,this.emailResult=null,this.showEmailPreview=!1,this.emailGiftCredits=!1,this.emailGiftAmount=1,this.emailEditorMode="visual",this.visualHeadline="",this.visualBody="",this.visualCta="Open Adloura",this.visualCtaUrl="https://adloura.com",this.visualFooter="",this._adminEscHandler=$=>{($.key==="Escape"||$.key==="Esc")&&this.clearSelection()},this.channelDays=7,this.channels=[],this.channelsLoading=!1,this.paidSummary=null}shareVideo(i){return O(this,null,function*(){if(!i||!i.video_url||this.isSharing)return;this.isSharing=!0;let t=this.backend.resolveVideoUrl(i.video_url),l=this.shareService.buildCaption(i);try{try{let u=this.backend.getShareDownloadUrl(t),y=yield(yield fetch(u)).blob(),D=`adloura-video-${i.id}.mp4`,A=new File([y],D,{type:y.type||"video/mp4"});if(navigator.canShare&&navigator.canShare({files:[A]})){yield navigator.share({title:"Adloura Video",text:l,files:[A]}),this.isSharing=!1;return}}catch(u){console.warn("Web file-share attempt failed, falling back to platform share",u)}if(this.platform.is("capacitor"))try{let u=`share-adloura-${i.id}.mp4`,P=yield this.backend.cacheVideoForNativeShare(t,u,!0);if(!P)throw new Error("cache failed");let{Share:y}=yield import("./chunk-HN3KS4LI.js");yield y.share({title:"Adloura - My Video",text:l,url:P.uri,dialogTitle:"Share your video"}),yield P.cleanup(),this.isSharing=!1;return}catch(u){console.warn("Native file-share failed, falling back to link share",u)}if(navigator.share)yield navigator.share({title:"Adloura Video",text:l,url:t});else try{yield navigator.clipboard.writeText(t)}
23catch{}}catch(u){console.error("Share error:",u);try{yield navigator.clipboard.writeText(t)}catch{}}finally{this.isSharing=!1}})}copyCaption(i){return O(this,null,function*(){if(!i)return;let t=this.shareService.buildCaption(i);try{if(navigator.clipboard&&navigator.clipboard.writeText){yield navigator.clipboard.writeText(t),yield this.showToast(this.translate.instant("COPY_CAPTION_SUCCESS"),"success");return}let l=document.createElement("textarea");l.value=t,l.style.position="fixed",l.style.left="-9999px",document.body.appendChild(l),l.select();let u=document.execCommand("copy");if(document.body.removeChild(l),u)yield this.showToast(this.translate.instant("COPY_CAPTION_SUCCESS"),"success");else throw new Error("execCommand copy failed")}catch(l){console.warn("Copy caption failed",l),yield this.showToast(this.translate.instant("UNABLE_TO_COPY"),"warning")}})}downloadVideo(i){if(!i||!i.video_url)return;let t=`adloura-video-${i.id}.mp4`,l=this.backend.resolveVideoUrl(i.r2_url||i.video_url),u=this.backend.getShareDownloadUrl(l,!1);this.backend.downloadVideo(u,t)}showToast(i,t="primary"){return O(this,null,function*(){yield(yield this.toastController.create({message:i,duration:2e3,color:t,position:"bottom"})).present()})}ngOnInit(){this.loadStats();try{this.route.queryParams.subscribe(i=>{if(i.youtube==="connected"){let t=i.channel||"YouTube";this.showToast(`\u2705 YouTube connected: ${t}`,"success"),this.router.navigate([],{queryParams:{},replaceUrl:!0});let l=localStorage.getItem("admin_yt_pending_video_id");if(l){localStorage.removeItem("admin_yt_pending_video_id");let u=parseInt(l,10);this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null;let P=y=>{let D=this.allAdminVideos.find(A=>A.id===u);D?setTimeout(()=>this.publishVideoToYoutube(D),100):y>0&&setTimeout(()=>P(y-1),600)};setTimeout(()=>P(8),500)}}else i.youtube==="denied"?(this.showToast("YouTube connection was cancelled","warning"),this.router.navigate([],{queryParams:{},replaceUrl:!0})):i.youtube==="error"&&(this.showToast("YouTube connection failed. Please try again.","danger"),this.router.navigate([],{queryParams:{},replaceUrl:!0}));i.youtube&&(this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null)})}catch{}try{window.addEventListener("keydown",this._adminEscHandler)}catch{}}ngOnDestroy(){try{window.removeEventListener("keydown",this._adminEscHandler)}catch{}}loadUsers(){this.loading=!0,this.backend.getAdminUsers(this.page,this.pageSize,!0).subscribe({next:i=>{if(this.loading=!1,console.log("admin/users response",i),i&&i.success){this.users=i.users||[],this.total=i.total||0;for(let t of this.users)t&&t.id&&Array.isArray(t.videos)&&(this.userVideosCache[t.id]=t.videos)}else this.users=[],this.total=0},error:i=>{this.loading=!1,i&&(i.status===401||i.status===403)&&this.router.navigate(["/ad-studio"])}})}get filteredUsers(){let i=(this.searchTerm||"").trim();if(!i)return this.users;if(this.allUsersLoaded){let l=(this.page-1)*this.pageSize;return this.searchFilteredUsers.slice(l,l+this.pageSize)}let t=i.toLowerCase();return this.users.filter(l=>((l.email||"")+" "+(l.name||"")).toLowerCase().includes(t))}clearSelection(){this.expandedUserId=null,this.selectedUser=null}prev(){this.page>1&&(this.page--,(!(this.searchTerm||"").trim()||!this.allUsersLoaded)&&this.loadUsers())}get maxPage(){let i=this.searchTerm&&this.searchTerm.trim()?this.allUsersLoaded?this.searchFilteredUsers.length:this.total:this.total;return Math.max(1,Math.ceil(i/this.pageSize))}get currentTotal(){return this.searchTerm&&this.searchTerm.trim()?this.allUsersLoaded?this.searchFilteredUsers.length:this.total:this.total}next(){this.page<this.maxPage&&(this.page++,(!(this.searchTerm||"").trim()||!this.allUsersLoaded)&&this.loadUsers())}onSearch(){return O(this,null,function*(){if(this.page=1,!(this.searchTerm||"").trim()){this.searchFilteredUsers=[],this.allUsersLoaded=!1,this.loadUsers();return}if(this.allUsersLoaded){this.applyLocalSearch();return}this.isLoadingAllUsers=!0;try{yield this.loadAllUsers(),this.applyLocalSearch()}catch(t){console.warn("loadAllUsers failed",t),this.applyLocalSearch()}finally{this.isLoadingAllUsers=!1}})}loadAllUsers(){return O(this,null,function*(){this.allUsers=[];let i=1,t=100,l=1/0;for(;this.allUsers.length<this.allUsersMax;)try{let u=yield N(this.backend.getAdminUsers(i,t,!1));if(!u||!u.success||!Array.isArray(u.users)||u.users.length===0||(this.allUsers.push(...u.users),u.total!==void 0&&(l=u.total),this.allUsers.length>=l)||u.users.length<t)break;
23i++}catch(u){console.warn("loadAllUsers page",i,"failed",u);break}this.allUsers.length>=this.allUsersMax&&console.warn("loadAllUsers reached safety cap: "+this.allUsersMax),this.allUsersLoaded=!0})}applyLocalSearch(){let i=(this.searchTerm||"").trim().toLowerCase();if(!i){this.searchFilteredUsers=[];return}this.searchFilteredUsers=this.allUsers.filter(t=>((t.email||"")+" "+(t.name||"")).toLowerCase().includes(i)),this.page=1}openUserPage(i){if(!i)return;let t=i.id||i.user_id;t&&this.router.navigate(["/admin/user",t],{state:{user:i}})}onTabChange(){this.activeTab==="stats"?this.stats||this.loadStats():this.activeTab==="users"?this.users.length===0&&this.loadUsers():this.activeTab==="paid"?this.paidUsers.length===0&&this.loadPaidUsers():this.activeTab==="active-subscriptions"?this.activeSubscriptions.length===0&&this.loadActiveSubscriptions():this.activeTab==="config"?this.configValues.free_videos_per_day||this.loadConfig():this.activeTab==="support"?this.supportQueries.length===0&&this.loadSupportQueries():this.activeTab==="reported"?this.reportedVideos.length===0&&this.loadReportedVideos():this.activeTab==="user-videos"?this.allAdminVideos.length===0&&this.loadAllAdminVideos():this.activeTab==="payments"&&(this.failedPaymentsLoaded||this.loadFailedPayments(),this.paymentTransactionsLoaded||this.loadPaymentTransactions(),this.cancelledSubsLoaded||this.loadCancelledSubscriptions())}refreshCurrentTab(){this.activeTab==="stats"?(this.stats=null,this.loadStats()):this.activeTab==="users"?(this.users=[],this.page=1,this.loadUsers()):this.activeTab==="paid"?(this.paidUsers=[],this.allUsersLoaded=!1,this.loadPaidUsers()):this.activeTab==="config"?this.loadConfig():this.activeTab==="support"?this.loadSupportQueries():this.activeTab==="reported"?(this.reportedVideos=[],this.loadReportedVideos()):this.activeTab==="user-videos"?(this.allAdminVideos=[],this.allAdminVideosPage=1,this.loadAllAdminVideos()):this.activeTab==="payments"&&(this.failedPaymentsLoaded=!1,this.paymentTransactionsLoaded=!1,this.cancelledSubsLoaded=!1,this.loadFailedPayments(),this.loadPaymentTransactions(),this.loadCancelledSubscriptions())}loadStats(){this.backend.getAdminStats().subscribe({next:i=>{i&&i.success&&(this.stats=i.stats)},error:i=>console.warn("Failed to load stats",i)}),this.loadChannels(this.channelDays)}loadChannels(i){this.channelDays=i,this.channelsLoading=!0,this.backend.getAdminFunnel(i).subscribe({next:t=>{this.channels=Array.isArray(t?.firstTouch)?t.firstTouch:[],this.channelsLoading=!1},error:()=>{this.channels=[],this.channelsLoading=!1}})}channelTotal(i){return this.channels.reduce((t,l)=>t+(Number(l[i])||0),0)}channelLabel(i){let t=String(i||""),[l,u=""]=t.includes(":")?[t.slice(0,t.indexOf(":")),t.slice(t.indexOf(":")+1)]:[t,""],P=u.split("/")[0],y={"chatgpt.com":"ChatGPT","chat.openai.com":"ChatGPT","perplexity.ai":"Perplexity","www.perplexity.ai":"Perplexity","gemini.google.com":"Gemini","copilot.microsoft.com":"Copilot","claude.ai":"Claude","google.com":"Google search","bing.com":"Bing search","facebook.com":"Facebook","m.facebook.com":"Facebook","l.facebook.com":"Facebook","instagram.com":"Instagram","l.instagram.com":"Instagram","youtube.com":"YouTube","t.co":"X / Twitter","x.com":"X / Twitter","linkedin.com":"LinkedIn","reddit.com":"Reddit","duckduckgo.com":"DuckDuckGo","yandex.ru":"Yandex","play.google.com":"Google Play","apps.shopify.com":"Shopify App Store"};return l==="direct"?"Direct / no referrer":l==="app"?"Android app":l==="click"?u==="google"?"Google Ads click":u==="facebook"?"Facebook / Instagram ad click":u==="tiktok"?"TikTok ad click":t:l==="utm"?(y[P]||P)+(u.includes("/")?" \xB7 "+u.split("/")[1]:"")+" (tagged link)":l==="ref"?y[P]||P:l==="tag"?"Link tag: "+u:t}loadActiveSubscriptions(){return O(this,null,function*(){this.activeSubsLoading=!0;try{let i=yield N(this.backend.getAdminActiveSubscriptions(500));i&&i.success?this.activeSubscriptions=Array.isArray(i.subscriptions)?i.subscriptions:[]:this.activeSubscriptions=[],this.filteredActiveSubscriptions=[...this.activeSubscriptions],this.activeSubsPage=1,this.activeSubsLoaded=!0}catch(i){console.warn("loadActiveSubscriptions failed",i),this.activeSubscriptions=[],this.filteredActiveSubscriptions=[]}finally{this.activeSubsLoading=!1}})}filterActiveSubscriptions(){let i=(this.activeSubsSearch||"").trim().toLowerCase();i?this.filteredActiveSubscriptions=this.activeSubscriptions.filter(t=>((t.email||"")+" "+(t.user_id||"")+" "+(t.subscription_plan||"")+" "+(t.subscription_tier||"")).toLowerCase().includes(i)):this.filteredActiveSubscriptions=[...this.activeSubscriptions],this.activeSubsPage=1}get paginatedActiveSubscriptions(){let i=(this.activeSubsPage-1)*this.activeSubsPageSize;return this.filteredActiveSubscriptions.slice(i,i+this.activeSubsPageSize)}get activeSubsMaxPage(){return Math.max(1,Math.ceil(this.filteredActiveSubscriptions.length/this.activeSubsPageSize))}isPaidTier(i){let t=(i||"").toLowerCase();return t.startsWith("lite")||t.startsWith("pro")||t.startsWith("premium")}loadPaidUsers(){return O(this,null,function*(){this.paidLoading=!0;try{let i=yield N(this.backend.getAdminPaidRoster());i&&i.success&&Array.isArray(i.roster)?(this.paidUsers=i.roster,this.paidSummary=i.summary||null):(this.allUsersLoaded||(yield this.loadAllUsers()),this.paidUsers=this.allUsers.filter(t=>this.isPaidTier((t.subscription_tier||t.tier||"free").toString())),this.paidSummary=null),this.filteredPaidUsers=[...this.paidUsers],this.paidPage=1}catch(i){console.warn("loadPaidUsers failed",i)}finally{this.paidLoading=!1}})}billingColor(i){return i==="paying"?"success":i==="test"?"warning":i==="lapsed"?"danger":"medium"}paymentMethodLabel(i){let t=(i||"").toLowerCase();return t==="google_play"?"\u{1F4F1} Google Play":t==="razorpay_subscription"?"Rzp Sub":t==="razorpay"?"\u{1F4B3} Razorpay":t==="dodo"?"\u{1F30D} Dodo":t==="shopify"?"\u{1F6CD}\uFE0F Shopify":t==="paypal"?"PayPal":i||"unknown"}filterPaidUsers(){let i=(this.paidSearchTerm||"").trim().toLowerCase();i?this.filteredPaidUsers=this.paidUsers.filter(t=>((t.email||"")+" "+(t.name||"")).toLowerCase().includes(i)):this.filteredPaidUsers=[...this.paidUsers],this.paidPage=1}get paginatedPaidUsers(){let i=(this.paidPage-1)*this.paidPageSize;return this.filteredPaidUsers.slice(i,i+this.paidPageSize)}get paidMaxPage(){return Math.max(1,Math.ceil(this.filteredPaidUsers.length/this.paidPageSize))}prevPaid(){this.paidPage>1&&this.paidPage--}nextPaid(){this.paidPage<this.paidMaxPage&&this.paidPage++}prevActiveSubs(){this.activeSubsPage>1&&this.activeSubsPage--}nextActiveSubs(){this.activeSubsPage<this.activeSubsMaxPage&&this.activeSubsPage++}get mergedDailyStats(){if(!this.stats)return[];let i={},t={};for(let u of this.stats.dailySignups||[])i[u.day]=u.count;for(let u of this.stats.dailyVideos||[])t[u.day]=u.count;let l=new Set([...Object.keys(i),...Object.keys(t)]);return Array.from(l).sort().map(u=>({day:u,signups:i[u]||0,videos:t[u]||0}))}loadConfig(){this.configLoading=!0,this.backend.getAdminConfig().subscribe({next:i=>{this.configLoading=!1,i&&i.success&&(this.configValues=i.config)},error:()=>{this.configLoading=!1,this.showToast("Failed to load config","warning")}})}saveConfig(){this.configSaving=!0,this.backend.updateAdminConfig(this.configValues).subscribe({next:i=>{this.configSaving=!1,i&&i.success?this.showToast("Configuration saved!","success"):this.showToast("Failed to save config","warning")},error:()=>{this.configSaving=!1,this.showToast("Failed to save config","danger")}})}loadSupportQueries(){this.supportLoading=!0,this.backend.getAdminSupportQueries(1,this.supportFilter).subscribe({next:i=>{this.supportLoading=!1,i&&i.success&&(this.supportQueries=i.queries||[])},error:()=>{this.supportLoading=!1,this.showToast("Failed to load queries","warning")}})}replySupportQuery(i){let t=(this.replyTexts[i.id]||"").trim();t&&this.backend.adminReplySupportQuery(i.id,t).subscribe({next:l=>{l&&l.success&&(i.admin_reply=t,i.status="resolved",this.replyTexts[i.id]="",this.showToast("Reply sent!","success"))},error:()=>this.showToast("Failed to send reply","danger")})}toggleUserVideos(i){if(!(!i||!i.id)){if(this.expandedUserId===i.id){this.clearSelection();return}if(this.expandedUserId=i.id,this.selectedUser=i,Array.isArray(i.videos)){this.userVideosCache[i.id]=i.videos;return}setTimeout(()=>{let t=document.querySelector('.selected-panel ion-button[slot="end"]');t&&t.setAttribute("aria-label","Close panel")},60),this.userVideosCache[i.id]||(this.videosLoadingForUser[i.id]=!0,this.backend.getAdminUserVideos(i.id).subscribe({next:t=>{this.videosLoadingForUser[i.id]=!1,t&&t.success?this.userVideosCache[i.id]=t.videos||[]:this.userVideosCache[i.id]=[]},error:t=>{this.videosLoadingForUser[i.id]=!1,console.warn("Failed to fetch videos for user",i.id,t)}}))}}openVideoInTab(i){if(!i)return;if(!i.video_url){console.warn("openVideoInTab: video has no url",i),alert("No video URL available for this item");return}let t=this.backend.resolveVideoUrl(i.video_url);
23try{let l=document.createElement("a");l.href=t,l.target="_blank",l.rel="noopener noreferrer",l.style.display="none",document.body.appendChild(l),l.click(),document.body.removeChild(l)}catch(l){console.error("Failed to open new tab for video",l)}}loadReportedVideos(){this.reportedLoading||(this.reportedLoading=!0,this.backend.getReportedVideos(this.reportedPage,this.reportedPageSize).subscribe({next:i=>{this.reportedLoading=!1,i&&i.success&&(this.reportedVideos=i.videos||[],this.reportedMaxPage=Math.ceil((i.total||0)/this.reportedPageSize))},error:i=>{this.reportedLoading=!1,console.error("Failed to load reported videos",i),this.showToast("Failed to load reported videos","danger")}}))}prevReported(){this.reportedPage>1&&(this.reportedPage--,this.loadReportedVideos())}nextReported(){this.reportedPage<this.reportedMaxPage&&(this.reportedPage++,this.loadReportedVideos())}viewReportedVideo(i){window.open(`/video-detail/${i}`,"_blank")}deleteReportedVideo(i,t){confirm("Delete this reported video? This cannot be undone.")&&this.backend.deleteVideo(i).subscribe({next:()=>{this.showToast("Video deleted","success"),this.dismissReport(t),this.loadReportedVideos()},error:l=>{console.error("Failed to delete video",l),this.showToast("Failed to delete video","danger")}})}dismissReport(i){this.backend.dismissReport(i).subscribe({next:()=>{this.showToast("Report dismissed","success"),this.loadReportedVideos()},error:t=>{console.error("Failed to dismiss report",t),this.showToast("Failed to dismiss report","danger")}})}searchUserVideos(){if(!this.userVideoSearchTerm.trim()){this.userVideoResults=[];return}this.userVideoLoading||(this.userVideoLoading=!0,this.backend.searchUserVideos(this.userVideoSearchTerm).subscribe({next:i=>{this.userVideoLoading=!1,i&&i.success?this.userVideoResults=i.videos||[]:this.userVideoResults=[]},error:i=>{this.userVideoLoading=!1,console.error("Failed to search user videos",i),this.showToast("Failed to search videos","danger")}}))}openUserVideo(i){i&&i.video_url&&window.open(this.backend.resolveVideoUrl(i.video_url),"_blank")}publishVideoToYoutube(i){return O(this,null,function*(){this.isUploadingYoutube||!i?.id||(this.isUploadingYoutube=!0,this.uploadingYoutubeVideoId=i.id,this.backend.getYoutubeStatus().subscribe({next:t=>O(this,null,function*(){if(!t.connected){let A=H.isNativePlatform();localStorage.setItem("admin_yt_pending_video_id",String(i.id)),this.backend.getYoutubeAuthUrl(A,"admin").subscribe({next:T=>{T.success&&T.auth_url?A?q.open({url:T.auth_url,presentationStyle:"popover"}):window.location.href=T.auth_url:this.showToast("YouTube not configured","danger"),this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null},error:()=>{this.showToast("YouTube not available","danger"),this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null}});return}let l=t.channel_name||"YouTube",u=i.script_preview?.substring(0,80)||i.video_type||"Adloura Video",P=i.script_preview||"",y=["shorts","adloura","ai",i.video_type||"",i.category||""].filter(Boolean);try{let A=yield this.viralCaption.generateAIGeneratedSEO(i.id,i.full_script||i.script_preview||"").toPromise();if(A?.success&&A?.seo){let T=A.seo;T.youtube_title&&(u=T.youtube_title),T.youtube_description&&(P=T.youtube_description),T.youtube_tags&&(y=T.youtube_tags.split(",").map(M=>M.trim()).filter(Boolean))}}catch(A){console.warn("Admin SEO generation failed, using defaults",A)}yield(yield this.alertController.create({header:"\u{1F3AC} Publish to YouTube",subHeader:`Channel: ${l}`,cssClass:"youtube-publish-alert",inputs:[{name:"title",type:"text",placeholder:"Video Title",value:u},{name:"description",type:"textarea",placeholder:"Description (optional)",value:P}],buttons:[{text:"Switch Channel",cssClass:"switch-channel-btn",handler:()=>{this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null;let A=H.isNativePlatform();return this.backend.getYoutubeAuthUrl(A,"admin").subscribe({next:T=>{T.success&&T.auth_url&&(A?(localStorage.setItem("admin_yt_pending_video_id",String(i.id)),q.open({url:T.auth_url,presentationStyle:"popover"})):(window.open(T.auth_url,"_blank"),this.showToast("Connect a different YouTube channel","warning")))}}),!1}},{text:"Cancel",role:"cancel",handler:()=>{this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null}},{text:"\u{1F680} Upload",handler:A=>{this.showToast("Uploading to YouTube...","primary"),this.backend.adminUploadToYoutube(i.id,A.title||"Adloura Video",A.description||"",y,"public").subscribe({next:T=>{if(T.success){this.showToast("\u2705 Published to YouTube!","success");let M=this.allAdminVideos.find(V=>V.id===i.id);M&&(M.youtube_status="uploaded",M.youtube_url=T.youtube_url),T.youtube_url&&window.open(T.youtube_url,"_blank"),this.loadAllAdminVideos(this.allAdminVideosPage)}else this.showToast(T.error||"Upload failed","danger");this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null},error:T=>{let M=T?.error?.error||"Upload failed";this.showToast(M,"danger"),this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null}})}}]})).present()}),error:()=>{this.showToast("YouTube not available","danger"),this.isUploadingYoutube=!1,this.uploadingYoutubeVideoId=null}}))})}viewSEOMetadata(i){let t=i.youtube_seo_title||i.title||i.script_preview?.substring(0,60)||"N/A",l=i.youtube_seo_de
23scription||i.script_preview?.substring(0,120)||"N/A",u=i.youtube_seo_tags||"N/A";this.alertController.create({header:"\u{1F4CA} SEO Metadata",message:`Title: ${t}
24
25Description: ${l}
26
27Tags: ${u}
28
29Category: ${i.category||"N/A"}
30
31YouTube URL: ${i.youtube_url||"Not published yet"}`,buttons:["OK"]}).then(y=>y.present())}deleteUserVideo(i){return O(this,null,function*(){yield(yield this.alertController.create({header:"Delete Video",message:"Permanently delete this video? It will also be removed from cloud storage and cannot be undone.",buttons:[{text:"Cancel",role:"cancel"},{text:"Delete",role:"destructive",handler:()=>{this.backend.deleteVideo(i).subscribe({next:()=>{this.showToast("Video deleted from DB and storage","success"),this.allAdminVideos=this.allAdminVideos.filter(l=>l.id!==i),this.userVideoResults=this.userVideoResults.filter(l=>l.id!==i)},error:l=>{console.error("Failed to delete video",l),this.showToast("Failed to delete video","danger")}})}}]})).present()})}loadFailedPayments(){this.failedPaymentsLoading=!0,this.failedPaymentsLoaded=!1,this.backend.getAdminFailedPayments().subscribe({next:i=>{this.failedPaymentsLoading=!1,this.failedPaymentsLoaded=!0,i&&i.success?this.failedPayments=i.entries||[]:this.failedPayments=[]},error:i=>{this.failedPaymentsLoading=!1,this.failedPaymentsLoaded=!0,console.warn("Failed to load payment errors",i),this.showToast("Failed to load payment logs","warning")}})}loadPaymentTransactions(){this.paymentTransactionsLoading=!0,this.paymentTransactionsLoaded=!1,this.backend.getAdminPaymentTransactions().subscribe({next:i=>{this.paymentTransactionsLoading=!1,this.paymentTransactionsLoaded=!0,this.paymentTransactions=i?.transactions||[]},error:i=>{this.paymentTransactionsLoading=!1,this.paymentTransactionsLoaded=!0,console.warn("Failed to load payment transactions",i)}})}loadCancelledSubscriptions(){this.cancelledSubsLoading=!0,this.cancelledSubsLoaded=!1,this.backend.getAdminCancelledSubscriptions().subscribe({next:i=>{this.cancelledSubsLoading=!1,this.cancelledSubsLoaded=!0,this.cancelledSubs=i?.subscriptions||[]},error:i=>{this.cancelledSubsLoading=!1,this.cancelledSubsLoaded=!0,console.warn("Failed to load cancelled subscriptions",i)}})}adminActivateSubscription(i){return O(this,null,function*(){let t=i.planId||i.planName||"premium_monthly";yield(yield this.alertController.create({header:"\u26A1 Manually Activate Subscription",message:`Activate <strong>${t}</strong> for user ${i.email||i.userId}?<br><br>Use this when Google Play charged the user but the subscription was not activated automatically.`,inputs:[{name:"plan",label:"Plan",type:"text",value:t,placeholder:"premium_monthly / pro_monthly / premium_yearly / pro_yearly"}],buttons:[{text:"Cancel",role:"cancel"},{text:"Activate",handler:u=>{let P=(u.plan||t).trim().toLowerCase();i.activating=!0,this.backend.adminActivateSubscription(i.userId,P,"google_play","Manual activation from admin panel \u2014 payment confirmed in Google Play").subscribe({next:y=>{i.activating=!1,y&&y.success?(i.currentTier=y.user?.subscription_tier||P.includes("premium")?"premium":"pro",this.showToast(`\u2705 Subscription activated: ${P} until ${y.endDate||"?"}`,"success")):this.showToast("Activation failed: "+(y?.error||"Unknown error"),"danger")},error:y=>{i.activating=!1,this.showToast("Activation error: "+(y?.error?.error||y.message||"Network error"),"danger")}})}}]})).present()})}applyPaymentRetryEmail(i){if(!i.email)return;i.sendingRetry=!0;let t=V=>String(V||"").replace(/[&<>"']/g,U=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[U]),l=i.webCheckout!==!1,u=i.kind==="cancelled"||i.kind==="unavailable",P='<a href="https://adloura.com/subscription" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;">\u{1F310} Subscribe on adloura.com</a>',y=V=>`<a href="https://play.google.com/store/apps/details?id=com.adloura.app" style="display:inline-block;${V?"background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;":"background:#ffffff;color:#4f46e5;border:2px solid #4f46e5;"}text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;">\u{1F4F1} Open the Adloura app</a>`,D=l?`Your recent Adloura upgrade in the app did not go through on Google Play${u?", and you have not been charged":""}. You can finish it on our website instead: sign in there with the same account (<strong>${t(i.email)}</strong>) and it takes about a minute.`:`Your recent Adloura upgrade did not go through${u?", and you have not been charged":""}. Card payments on our website are not available in your country yet, but Google Play is: open the Adloura app, sign in with the same account (<strong>${t(i.email)}</strong>), and choose the plan again.`,A=l?`<tr><td align="center" style="padding-bottom:12px;">${P}</td></tr><tr><td align="center" style="padding-bottom:28px;">${y(!1)}</td></tr>`:`<tr><td align="center" style="padding-bottom:28px;">${y(!0)}</td></tr>`,T="Finish your Adloura upgrade",M=`<!DOCTYPE html>
32<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
33<body style="margin:0;padding:0;background:#f3f4f6;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
34<table width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;padding:30px 0;">
35<tr><td align="center">
36<table width="560" cellpadding="0" cellspacing="0" style="background:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
37  <tr><td style="background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);padding:32px 40px 24px;text-align:center;">
38    <h1 style="color:#ffffff;margin:0;font-size:24px;font-weight:800;letter-spacing:-0.5px;">Adloura</h1>
39    <p style="color:rgba(255,255,255,0.85);margin:6px 0 0;font-size:13px;">AI video ads for your products</p>
40  </td></tr>
41  <tr><td style="padding:36px 40px 12px;">
42    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 16px;">Hi there,</p>
43    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 24px;">${D}</p>
44    <table width="100%" cellpadding="0" cellspacing="0">${A}</table>
45    <div style="background:#f0f9ff;border-radius:10px;padding:16px 20px;border-left:4px solid #4f46e5;margin-bottom:8px;">
46      <p style="color:#374151;font-size:14px;line-height:1.6;margin:0;">\u{1F501} <strong>One account everywhere:</strong> what you get on the website works in the Adloura Android app too, and the other way round. Still stuck? Just reply to this email and a human will help.</p>
47    </div>
48  </td></tr>
49  <tr><td style="background:#f9fafb;padding:20px 40px;text-align:center;border-top:1px solid #e5e7eb;">
50    <p style="color:#9ca3af;margin:0;font-size:12px;">Adloura &nbsp;\xB7&nbsp; <a href="https://adloura.com" style="color:#E9AE55;text-decoration:none;">adloura.com</a></p>
51    <p style="color:#d1d5db;margin:6px 0 0;font-size:11px;">You received this email because a payment attempt was unsuccessful on your account.</p>
52  </td></tr>
53</table>
54</td></tr>
55</table>
56</body></html>`;this.backend.adminSendEmail("specific",T,M,i.email).subscribe({next:V=>{i.sendingRetry=!1,V?.success?(i.retrySent=!0,this.showToast("Retry email sent to "+i.email,"success")):this.showToast(V?.error||"Send failed","danger")},error:()=>{i.sendingRetry=!1,this.showToast("Failed to send email","danger")}})}applyEmailTemplate(i){let t=P=>`<!DOCTYPE html>
57<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
58<body style="margin:0;padding:0;background:#f3f4f6;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
59<table width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;padding:30px 0;">
60<tr><td align="center"><table width="560" cellpadding="0" cellspacing="0" style="background:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
61  <tr><td style="background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);padding:32px 40px 24px;text-align:center;">
62    <h1 style="color:#ffffff;margin:0;font-size:24px;font-weight:800;letter-spacing:-0.5px;">Adloura</h1>
63    <p style="color:rgba(255,255,255,0.85);margin:6px 0 0;font-size:13px;">AI video ads for your products</p>
64  </td></tr>
65  ${P}
66  <tr><td style="background:#f9fafb;padding:18px 40px;text-align:center;border-top:1px solid #e5e7eb;">
67    <p style="color:#9ca3af;margin:0;font-size:12px;">Adloura &nbsp;\xB7&nbsp; <a href="https://adloura.com" style="color:#E9AE55;text-decoration:none;">adloura.com</a></p>
68  </td></tr>
69</table></td></tr></table></body></html>`,u={feature:{subject:"\u{1F3AC} Something new just dropped on Adloura",message:t(`<tr><td style="padding:36px 40px 28px;">
70    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 16px;">Hi there,</p>
71    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 24px;">We've just shipped exciting new features on Adloura \u2014 new video templates, improved AI quality, and more.</p>
72    <table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px;"><tr><td align="center">
73      <a href="https://adloura.com" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;box-shadow:0 4px 14px rgba(79,70,229,0.3);">\u{1F680} Explore New Features</a>
74    </td></tr></table>
75    <p style="color:#6b7280;font-size:14px;line-height:1.6;margin:0;">Happy creating!<br>The Adloura Team</p>
76  </td></tr>`)},upgrade:{subject:"Unlock unlimited AI videos on Adloura",message:t(`<tr><td style="padding:36px 40px 28px;">
77    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 16px;">Hi there,</p>
78    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 20px;">Upgrade to Adloura Pro or Premium and take your content to the next level:</p>
79    <table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px;">
80      <tr><td style="padding:8px 0;
80border-bottom:1px solid #f0f0f0;"><span style="color:#4f46e5;font-size:16px;">\u2705</span>&nbsp;<span style="color:#374151;font-size:14px;">4\u20138 AI videos per day</span></td></tr>
81      <tr><td style="padding:8px 0;border-bottom:1px solid #f0f0f0;"><span style="color:#4f46e5;font-size:16px;">\u2705</span>&nbsp;<span style="color:#374151;font-size:14px;">HD 1080p quality, no watermark</span></td></tr>
82      <tr><td style="padding:8px 0;border-bottom:1px solid #f0f0f0;"><span style="color:#4f46e5;font-size:16px;">\u2705</span>&nbsp;<span style="color:#374151;font-size:14px;">One-click YouTube &amp; Instagram publishing</span></td></tr>
83      <tr><td style="padding:8px 0;"><span style="color:#4f46e5;font-size:16px;">\u2705</span>&nbsp;<span style="color:#374151;font-size:14px;">Priority support</span></td></tr>
84    </table>
85    <table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:16px;"><tr><td align="center">
86      <a href="https://adloura.com/subscription" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;box-shadow:0 4px 14px rgba(79,70,229,0.3);">\u{1F48E} View Plans &amp; Pricing</a>
87    </td></tr></table>
88  </td></tr>`)},payment:{subject:"We noticed an issue with your Adloura payment",message:t(`<tr><td style="padding:36px 40px 28px;">
89    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 16px;">Hi there,</p>
90    <p style="color:#374151;font-size:15px;line-height:1.6;margin:0 0 24px;">We noticed your recent Adloura payment didn't complete. This is usually a temporary issue \u2014 <strong>no charges were made</strong> to your account.</p>
91    <p style="color:#374151;font-size:15px;font-weight:600;margin:0 0 16px;">You can retry using either option below:</p>
92    <table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:12px;"><tr><td align="center">
93      <a href="https://play.google.com/store/apps/details?id=com.adloura.app" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;box-shadow:0 4px 14px rgba(79,70,229,0.3);">\u{1F4F1} Open Adloura App</a>
94    </td></tr></table>
95    <table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:24px;"><tr><td align="center">
96      <a href="https://adloura.com/subscription" style="display:inline-block;background:#ffffff;color:#4f46e5;text-decoration:none;padding:14px 40px;border-radius:50px;font-size:15px;font-weight:700;border:2px solid #4f46e5;">\u{1F310} Subscribe on Website</a>
97    </td></tr></table>
98    <div style="background:#f0f9ff;border-radius:10px;padding:16px 20px;border-left:4px solid #4f46e5;">
99      <p style="color:#374151;font-size:14px;line-height:1.6;margin:0;">\u{1F4AC} <strong>Still having trouble?</strong> Reply to this email and we'll send you a direct payment link.</p>
100    </div>
101  </td></tr>`)},monthly:{subject:"\u{1F389} Big Update: Your free Adloura plan just got better!",message:`<!DOCTYPE html>
102<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
103<body style="margin:0;padding:0;background:#f3f4f6;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
104<table width="100%" cellpadding="0" cellspacing="0" style="background:#f3f4f6;padding:30px 0;">
105<tr><td align="center">
106<table width="560" cellpadding="0" cellspacing="0" style="background:#ffffff;border-radius:16px;overflow:hidden;box-shadow:0 4px 24px rgba(0,0,0,0.08);">
107  <tr><td style="background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);padding:36px 40px 28px;text-align:center;">
108    <h1 style="color:#ffffff;margin:0;font-size:26px;font-weight:800;">Adloura</h1>
109    <p style="color:rgba(255,255,255,0.8);margin:6px 0 0;font-size:14px;">AI video ads for your products</p>
110  </td></tr>
111  <tr><td style="padding:36px 40px 0;">
112    <div style="text-align:center;margin-bottom:32px;">
113      <span style="font-size:48px;">\u{1F389}</span>
114      <h2 style="color:#1f2937;margin:16px 0 8px;font-size:24px;font-weight:800;">Your free plan just got bigger!</h2>
115      <p style="color:#6b7280;margin:0;font-size:15px;line-height:1.6;">We've upgraded the Adloura free plan. Come back and create more!</p>
116    </div>
117    <div style="background:linear-gradient(135deg,#eef2ff 0%,#faf5ff 100%);border-radius:14px;padding:24px;margin-bottom:28px;border:1px solid #e0e7ff;">
118      <h3 style="color:#4f46e5;margin:0 0 18px;font-size:16px;font-weight:700;text-transform:uppercase;letter-spacing:0.8px;">What's new on the Free plan</h3>
119      <table width="100%" cellpadding="0" cellspacing="0">
120        <tr>
121          <td style="padding:8px 0;border-bottom:1px solid #e0e7ff;">
122            <span style="font-size:20px;">\u{1F916}</span>
123            <span style="color:#1f2937;font-size:15px;font-weight:600;margin-left:10px;">1 AI video every month</span>
124            <span style="color:#6b7280;font-size:13px;margin-left:6px;">(lifetime)</span>
125          </td>
126        </tr>
127        <tr>
128          <td style="padding:8px 0;border-bottom:1px solid #e0e7ff;">
129            <span style="font-size:20px;">\u{1F3AC}</span>
130            <span style="color:#1f2937;font-size:15px;font-weight:600;margin-left:10px;">4 stock videos every month</span>
131            <span style="color:#6b7280;font-size:13px;margin-left:6px;">(resets each month)</span>
132          </td>
133        </tr>
134        <tr>
135          <td style="padding:8px 0;border-bottom:1px solid #e0e7ff;">
136            <span style="font-size:20px;">\u{1F4F1}</span>
137            <span style="color:#1f2937;font-size:15px;font-weight:600;margin-left:10px;">One-click Instagram Reel publishing</span>
138          </td>
139        </tr>
140        <tr>
141          <td style="padding:8px 0;">
142            <span style="font-size:20px;">\u25B6\uFE0F</span>
143            <span style="color:#1f2937;font-size:15px;font-weight:600;margin-left:10px;">Direct YouTube publishing</span>
144          </td>
145        </tr>
146      </table>
147    </div>
148    <p style="color:#374151;font-size:15px;line-height:1.6;text-align:center;margin:0 0 8px;">Your credits refresh on the 1st of every month.</p>
149  </td></tr>
150  <tr><td style="padding:24px 40px 36px;text-align:center;">
151    <a href="https://adloura.com" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:16px 44px;border-radius:50px;font-size:16px;font-weight:700;box-shadow:0 4px 16px rgba(79,70,229,0.35);">\u{1F680} Start Creating Now</a>
152    <p style="color:#9ca3af;margin:16px 0 0;font-size:13px;">Want unlimited videos? <a href="https://adloura.com/premium" style="color:#E9AE55;text-decoration:none;font-weight:600;">Upgrade to Pro \u2192</a></p>
153  </td></tr>
154  <tr><td style="background:#f9fafb;padding:20px 40px;text-align:center;border-top:1px solid #e5e7eb;">
155    <p style="color:#9ca3af;margin:0;font-size:12px;">Adloura \xB7 <a href="https://adloura.com" style="color:#E9AE55;text-decoration:none;">adloura.com</a></p>
156  </td></tr>
157</table>
158</td></tr>
159</table>
160</body></html>`},newfeatures:{subject:"\u{1F680} Adloura just got 5 powerful new features \u2014 try them free",message:t(`<tr><td style="padding:36px 40px 32px;">
161
162  <!-- Hero -->
163  <div style="text-align:center;margin-bottom:28px;">
164    <div style="font-size:44px;margin-bottom:12px;">\u{1F3AC}</div>
165    <h2 style="color:#1f2937;margin:0 0 10px;font-size:22px;font-weight:800;line-height:1.3;">We've been building non-stop.<br>Here's what's new.</h2>
166    <p style="color:#6b7280;margin:0;font-size:15px;line-height:1.6;">Features your competitors don't have yet \u2014 and you can try them all free.</p>
167  </div>
168
169  <!-- Feature 1: Auto-Pilot -->
170  <div style="background:linear-gradient(135deg,#eef2ff 0%,#faf5ff 100%);border-radius:14px;padding:20px 24px;margin-bottom:14px;border-left:4px solid #4f46e5;">
171    <div style="display:flex;align-items:flex-start;">
172      <span style="font-size:26px;margin-right:14px;flex-shrink:0;">\u{1F916}</span>
173      <div>
174        <h3 style="color:#4f46e5;margin:0 0 5px;font-size:15px;font-weight:800;">Auto-Pilot \u2014 Earn money while you sleep</h3>
175        <p style="color:#374151;font-size:13px;line-height:1.6;margin:0;">Adloura <strong>automatically generates and publishes a video to YouTube every day</strong> \u2014 no effort needed. Wake up to views, subscribers, and ad revenue. Set it once. Run forever.</p>
176      </div>
177    </div>
178  </div>
179
180  <!-- Feature 2: Faceless Pass -->
181  <div style="background:#f0fdf4;border-radius:14px;padding:20px 24px;margin-bottom:14px;border-left:4px solid #16a34a;">
182    <div style="display:flex;align-items:flex-start;">
183      <span style="font-size:26px;margin-right:14px;flex-shrink:0;">\u{1F3AD}</span>
184      <div>
185        <h3 style="color:#16a34a;margin:0 0 5px;font-size:15px;font-weight:800;">Faceless Channel \u2014 No face, no camera needed</h3>
186        <p style="color:#374151;font-size:13px;line-height:1.6;margin:0;">Build a full YouTube channel with zero screen time. AI-generated cinematic visuals matched to your script. <strong>Faceless creators earn \u20B950,000+/month</strong> \u2014 Adloura is your shortcut.</p>
187      </div>
188    </div>
189  </div>
190
191  <!-- Feature 3: News Reporter -->
192  <div style="background:#fff7ed;border-radius:14px;padding:20px 24px;margin-bottom:14px;border-left:4px solid #ea580c;">
193    <div style="display:flex;align-items:flex-start;">
194      <span style="font-size:26px;margin-right:14px;flex-shrink:0;">\u{1F4FA}</span>
195      <div>
196        <h3 style="color:#ea580c;margin:0 0 5px;font-size:15px;font-weight:800;">AI News Reporter \u2014 Your own broadcast channel</h3>
197        <p style="color:#374151;font-size:13px;line-height:1.6;margin:0;">BREAKING NEWS banners, broadcast tickers, channel branding \u2014 all auto-generated. <strong>Post trending Shorts before anyone else</strong> and ride the algorithm. Looks pro. Takes 60 seconds.</p>
198      </div>
199    </div>
200  </div>
201
202  <!-- Feature 4: Study / Custom Script -->
203  <div style="background:#f0f9ff;border-radius:14px;padding:20px 24px;margin-bottom:14px;border-left:4px solid #0284c7;">
204    <div style="display:flex;align-items:flex-start;">
205      <span style="font-size:26px;margin-right:14px;flex-shrink:0;">\u{1F4DA}</span>
206      <div>
207        <h3 style="color:#0284c7;margin:0 0 5px;font-size:15px;font-weight:800;">Study &amp; Custom Script \u2014 Your words, our visuals</h3>
208        <p style="color:#374151;font-size:13px;line-height:1.6;margin:0;">Paste your own script \u2014 Adloura adds AI visuals, voiceover, and captions. Perfect for <strong>study channels, explainers, ed-tech</strong> \u2014 the fastest-growing niche on YouTube Shorts.</p>
209      </div>
210    </div>
211  </div>
212
213  <!-- Feature 5: WhatsApp Status + AI Thumbnail -->
214  <div style="background:#fdf4ff;border-radius:14px;padding:20px 24px;margin-bottom:28px;border-left:4px solid #9333ea;">
215    <div style="display:flex;align-items:flex-start;">
216      <span style="font-size:26px;margin-right:14px;flex-shrink:0;">\u2728</span>
217      <div>
218        <h3 style="color:#9333ea;margin:0 0 5px;font-size:15px;font-weight:800;">WhatsApp Status + AI Thumbnail Generator</h3>
219        <p style="color:#374151;font-size:13px;line-height:1.6;margin:0;">One-tap export built for WhatsApp Status. Plus generate <strong>click-worthy YouTube thumbnails with AI</strong> \u2014 the #1 factor for video CTR. Both Adloura exclusives.</p>
220      </div>
221    </div>
222  </div>
223
224  <!-- 3-Day Trial Offer Block -->
225  <div style="border:2px dashed #4f46e5;border-radius:16px;padding:24px;margin-bottom:24px;text-align:center;background:#fafafe;">
226    <p style="color:#4f46e5;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.2px;margin:0 0 8px;">Special offer \u2014 limited time</p>
227    <div style="font-size:36px;margin-bottom:8px;">\u{1F381}</div>
228    <h3 style="color:#1f2937;margin:0 0 8px;font-size:20px;font-weight:800;">Try Pro for just \u20B91</h3>
229    <p style="color:#374151;font-size:14px;line-height:1.7;margin:0 0 6px;"><strong>3 full days of Pro</strong> \u2014 Auto-Pilot, Faceless mode, 1080p export, AI thumbnails, no watermark.</p>
230    <p style="color:#6b7280;font-size:13px;margin:0 0 20px;">Day 4 onwards: \u20B9999/month. Cancel anytime before that \u2014 you pay nothing more.</p>
231    <a href="https://play.google.com/store/apps/details?id=com.adloura.app" style="display:inline-block;background:linear-gradient(135deg,#4f46e5 0%,#CC8530 100%);color:#ffffff;text-decoration:none;padding:14px 44px;border-radius:50px;font-size:15px;font-weight:800;box-shadow:0 4px 16px rgba(79,70,229,0.35);">Start for \u20B91 \u2192</a>
232    <p style="color:#9ca3af;font-size:11px;margin:16px 0 0;">No hidden charges. Cancel before day 4 = pay nothing extra.</p>
233  </div>
234
235  <p style="color:#6b7280;font-size:13px;line-height:1.6;text-align:center;margin:0;">Questions? Just reply \u2014 we read every email.<br><strong style="color:#374151;">The Adloura Team</strong></p>
236
237</td></tr>`)}}[i];u&&(this.emailSubject=u.subject,this.emailMessage=u.message,this.emailEditorMode="html",this.showEmailPreview=!1)}sendAdminEmail(){return O(this,null,function*(){let i=this.emailTarget,t=(this.emailSubject||"").trim();this.emailEditorMode==="visual"&&this.syncVisualToHtml();let l=(this.emailMessage||"").trim(),u=(this.emailAddress||"").trim();if(!t){this.showToast("Subject is required","warning");return}if(!l){this.showToast("Message is required","warning");return}if(i==="specific"&&!u){this.showToast("Email address is required","warning");return}let P=i==="specific"?u:i==="paid"?"all paid users":i==="free"?"all free users":"ALL users",y=this.emailGiftCredits&&i!=="specific",D=Math.max(1,Math.min(10,this.emailGiftAmount||1)),A=y?`
238
239Also gifting +${D} video credit(s) to ${P}.`:"";yield(yield this.alertController.create({header:"Send Email?",message:`Send "${t}" to ${P}?${A}`,buttons:[{text:"Cancel",role:"cancel"},{text:y?"Send + Gift":"Send",handler:()=>{this.emailSending=!0,this.emailResult=null,this.backend.adminSendEmail(i,t,l,i==="specific"?u:void 0).subscribe({next:M=>{if(this.emailSending=!1,M&&M.success){if(M.queued?(this.emailResult={sent:M.total,failed:0,total:M.total},this.showToast(`\u{1F4E7} Queued ${M.total} emails \u2014 sending in background`,"success")):(this.emailResult={sent:M.sent,failed:M.failed,total:M.total},this.showToast(`Email sent to ${M.sent} recipient(s)`,"success")),this.emailSubject="",this.emailMessage="",i==="specific"&&(this.emailAddress=""),y){let V=i==="paid"?"paid":i==="free"?"free":"all";this.backend.adminBulkGiftCredits(V,D).subscribe({next:U=>{U?.success&&this.showToast(`\u{1F381} Gifted +${D} credit(s) to ${U.updated} users`,"success")},error:()=>this.showToast("Email sent but credit gift failed","warning")})}}else this.emailResult={error:M?.error||"Send failed"},this.showToast(M?.error||"Send failed","danger")},error:M=>{this.emailSending=!1;let V=M?.error?.error||"Failed to send email";this.emailResult={error:V},this.showToast(V,"danger")}})}}]})).present()})}loadAllAdminVideos(i){i&&(this.allAdminVideosPage=i),!this.allAdminVideosLoading&&(this.allAdminVideosLoading=!0,this.backend.getAllAdminVideos(this.allAdminVideosPage,this.allAdminVideosPageSize,this.userVideoSearchTerm).subscribe({next:t=>{this.allAdminVideosLoading=!1,t&&t.success&&(this.allAdminVideos=t.videos||[],this.allAdminVideosTotal=t.total||0,this.allAdminVideosMaxPage=Math.max(1,Math.ceil(this.allAdminVideosTotal/this.allAdminVideosPageSize)))},error:t=>{this.allAdminVideosLoading=!1,console.error("Failed to load all videos",t),this.showToast("Failed to load videos","danger")}}),this.loadFeatured())}loadFeatured(){this.backend.getShowcase().subscribe({next:i=>{this.featuredUrls=new Set((i?.ads||[]).map(t=>t.videoUrl))},error:()=>{}})}isFeatured(i){return!!i?.video_url&&this.featuredUrls.has(i.video_url)}toggleFeatured(i){let t=i?.video_url;if(!t){this.showToast("This item has no video to feature","warning");return}let l=!this.isFeatured(i);this.featuringUrl=t,this.backend.featureAd(t,l).subscribe({next:()=>{this.featuringUrl="",l?this.featuredUrls.add(t):this.featuredUrls.delete(t),this.showToast(l?"Added to showcase \u2605":"Removed from showcase","success")},error:u=>{this.featuringUrl="",this.showToast(u?.error?.error||"Failed to update showcase","danger")}})}prevAllVideos(){this.allAdminVideosPage>1&&this.loadAllAdminVideos(this.allAdminVideosPage-1)}nextAllVideos(){this.allAdminVideosPage<this.allAdminVideosMaxPage&&this.loadAllAdminVideos(this.allAdminVideosPage+1)}onAllVideosSearch(){this.allAdminVideosPage=1,this.loadAllAdminVideos()}};p.\u0275fac=function(t){return new(t||p)(L(ae),L(ue),L(se),L(re),L(Ke),L(me),L(Qe),L(Ge),L(_e),L(Xe),L(Ze),L(oe))},p.\u0275cmp=Q({type:p,selectors:[["app-admin-dashboard"]],decls:66,vars:31,consts:[["color","dark"],["slot","start"],["routerLink","/","title","Home"],["slot","icon-only","name","home-outline"],["slot","end"],["title","Refresh",3,"click"],["slot","icon-only","name","refresh-outline"],[1,"admin-nav-grid"],[1,"nav-item",3,"click"],["name","stats-chart-outline"],["name","people-outline"],["name","diamond-outline"],["name","sync-circle-outline"],["name","film-outline"],["name","card-outline"],["name","chatbubbles-outline"],["class","nav-badge",4,"ngIf"],["name","mail-outline"],["routerLink","/admin/ad-inspector",1,"nav-item"],["name","search-outline"],["name","settings-outline"],[1,"admin-content-area","ion-padding"],["class","tab-content",4,"ngIf"],["class","panel-backdrop",3,"click",4,"ngIf"],["class","selected-panel",4,"ngIf"],[1,"nav-badge"],[1,"tab-content"],["class","stats-loading",4,"ngIf"],[4,"ngIf"],[1,"stats-loading"],["class","skeleton-tile",4,"ngFor","ngForOf"],[1,"skeleton-tile"],["class","alert-banner",3,"click",4,"ngIf"],[1,"hero-row"],[1,"hero-tile","blue",3,"click"],[1,"hero-icon"],[1,"hero-value"],[1,"hero-label"],["class","hero-label","style","opacity:.7;font-size:11px",4,"ngIf"],[1,"hero-tile","green",3,"click"],["class","hero-label","style","font-size:11px;opacity:.85",4,"ngIf"],[1,"tile-grid"],[1,"stat-tile","gray"],[1,"tile-icon-wrap"],["name","person-outline"],[1,"tile-value"],[1,"tile-label"],[1,"stat-tile","purple"],[1,"stat-tile","
239indigo"],["name","today-outline"],[1,"stat-tile",3,"ngClass"],["name","chatbubble-ellipses-outline"],[1,"stat-tile","teal","wide"],["name","trending-up-outline"],[1,"analytics-section"],[1,"analytics-label"],[1,"compare-row"],[1,"compare-tile"],[1,"compare-icon"],["name","person-add-outline"],[1,"compare-values"],[1,"compare-today"],[1,"compare-sep"],[1,"compare-yest"],[1,"compare-label"],["name","phone-portrait-outline"],["class","analytics-section",4,"ngIf"],[1,"analytics-label","channels-head"],[1,"channels-days"],["type","button",3,"on","click",4,"ngFor","ngForOf"],[1,"growth-table-wrap"],[1,"growth-table"],[4,"ngFor","ngForOf"],["class","channels-total",4,"ngIf"],[1,"channels-note"],[1,"breakdown-row"],["class","analytics-section half",4,"ngIf"],[1,"quick-actions-label"],[1,"quick-actions-grid"],[1,"qa-btn",3,"click"],["name","refresh-outline"],[1,"alert-banner",3,"click"],["name","warning-outline"],[1,"hero-label",2,"opacity",".7","font-size","11px"],[1,"hero-label",2,"font-size","11px","opacity",".85"],[1,"num-cell"],["type","button",3,"click"],[1,"channels-total"],["colspan","4",1,"channels-empty"],[1,"analytics-section","half"],[1,"breakdown-list"],["class","breakdown-item",4,"ngFor","ngForOf"],[1,"breakdown-item"],[1,"bd-name"],[1,"bd-count"],[1,"empty-analytics"],["class","loading",4,"ngIf"],["class","empty-msg",4,"ngIf"],[1,"pagination"],[3,"click","disabled"],[1,"loading"],[1,"search-item"],["placeholder","Search name or email","debounce","250",3,"ngModelChange","ionChange","ionClear","ionCancel","ngModel"],["button","",3,"click",4,"ngFor","ngForOf"],["button","",3,"click"],["class","ad-activity",4,"ngIf"],["name","chevron-forward-outline","slot","end"],[1,"ad-activity"],["class","warn",4,"ngIf"],["class","muted",4,"ngIf"],[1,"warn"],[1,"muted"],[1,"empty-msg"],["class","pagination",4,"ngIf"],["placeholder","Search paid users","debounce","250",3,"ngModelChange","ionChange","ionClear","ngModel"],["lines","none",4,"ngIf"],["lines","none"],[3,"color"],[1,"plan-badge"],["placeholder","Search active subscriptions","debounce","250",3,"ngModelChange","ionChange","ionClear","ngModel"],["expand","block","color","primary",1,"ion-margin-top",3,"click","disabled"],["position","stacked"],["type","number","min","0","max","100",3,"ngModelChange","ngModel"],["type","number","min","0","max","500",3,"ngModelChange","ngModel"],["type","text","placeholder","Leave empty for none",3,"ngModelChange","ngModel"],[1,"support-filter"],[3,"ngModelChange","ionChange","ngModel"],["value","all"],["value","open"],["value","resolved"],["class","support-card",3,"resolved",4,"ngFor","ngForOf"],[1,"support-card"],[1,"query-type"],[1,"query-email"],[1,"query-message"],[1,"query-date"],["class","admin-reply",4,"ngIf"],["class","reply-form",4,"ngIf"],[1,"admin-reply"],[1,"reply-form"],["placeholder","Type your reply\u2026","rows","3",1,"reply-textarea",3,"ngModelChange","ngModel"],["size","small",3,"click","disabled"],["class","reported-card",4,"ngFor","ngForOf"],[1,"reported-card"],["color","danger"],[1,"report-user"],[1,"report-actions"],["size","small","fill","outline",3,"click"],["slot","start","name","eye-outline"],["size","small","color","danger",3,"click"],["slot","start","name","trash-outline"],["size","small","fill","outline","color","medium",3,"click"],["slot","start","name","checkmark-outline"],[1,"search-container"],["placeholder","Filter by username, email or user ID","debounce","400",3,"ngModelChange","ionChange","ionClear","ngModel"],["class","user-videos-list",4,"ngIf"],[1,"user-videos-list"],[1,"list-meta",2,"padding","4px 8px","font-size","12px","color","var(--ion-color-medium)"],["class","user-video-card",4,"ngFor","ngForOf"],[1,"user-video-card"],[1,"vid-meta-row"],[1,"vid-user"],[1,"tier-pill",3,"color"],[1,"vid-type"],[1,"video-date"],[1,"video-status"],["class","video-youtube",3,"published",4,"ngIf"],[1,"video-actions-row"],["size","small",3,"click","fill","color","disabled"],["slot","start","name","play-circle-outline"],["slot","start","name","search-outline"],[1,"video-youtube"],[1,"payments-subtabs"],[1,"subtab-btn",3,"click"],[1,"subtab-count"],["expand","block","fill","outline",3,"click","disabled"],["slot","start","name","refresh-outline"],["class","payments-filters",4,"ngIf"],["class","payment-error-card",4,"ngFor","ngForOf"],["class","pagination-bar",4,"ngIf"],["class","payments-summary",4,"ngIf"],[1,"payments-filters"],["placeholder","Search email / plan / payment ID","debounce","300",1,"payments-search",3,"ngModelChange","ngModel"],[1,"filter-row"],["interface","popover","placeholder","All Methods",1,"method-filter",3,"ngModelChange","ngModel"],["value","razorpay"],["value","razorpay_subscription"],["value","google_play"],["value","dodo"],["value","shopify"],[1,"filter-count"],[1,"payment-error-card"],[1,"payment-card-meta"],["class","payment-time",4,"ngIf"],[1,"payment-time"],[1,"pf-label"],["class","pf-sub",4,"ngIf"],[1,"pf-sub"],[1,"pagination-bar"],["fill","clear","size","small",3,"click","disabled"],["name","play-skip-back-outline"],["name","chevron-back-outline"],[1,"page-label"],["name","chevron-forward-outline"],["name","play-skip-forward-outline"],[1,"payments-summary"],["placeholder","Search email / plan","debounce","300",1,"payments-search",3,"ngModelChange","ngModel"],["interface","popover","placeholder","All Platforms",1,"method-filter",3,"ngModelChange","ngModel"],["value","App"],["value","Web"],["name","checkmark-circle-outline","color","success"],["color","medium",4,"ngIf"],["color","success",4,"ngIf"],["color","danger",4,"ngIf"],[3,"color",4,"ngIf"],["slot","end","fill","solid","size","small",3,"click","color","disabled"],[1,"raw-data"],["color","medium"],["color","success"],["slot","end","fill","solid","size","small","color","warning",3,"click","disabled"],[1,"error-text"],["interface","popover","placeholder","All Statuses",1,"method-filter",3,"ngModelChange","ngModel"],["value","cancelled"],["value","expired"],["interface","action-sheet","placeholder","Select target audience",3,"ngModelChange","ngModel"],["value","specific"],["value","paid"],["value","free"],["type","text","placeholder","Email subject line","maxlength","200",3,"ngModelChange","ngModel"],["lines","none",2,"margin-top","4px"],["slot","end",2,"display","flex","gap","4px","align-items","center"],["fill","clear","size","small",3,"click"],["slot","start",3,"name"],[1,"editor-mode-toggle"],[3,"click"],["class","email-preview-pane",3,"innerHTML",4,"ngIf"],["lines","none","style","margin-top:12px;",4,"ngIf"],["slot","start","name","send-outline"],["class","email-result",4,"ngIf"],["expand","block","fill","outline",1,"ion-margin-bottom",3,"click"],["expand","block","fill","solid","color","tertiary",3,"click"],["expand","block","fill","solid","color","success",1,"ion-margin-top",3,"click"],["type","email","placeholder","[email protected]","autocomplete","off",3,"ngModelChange","ngModel"],["color","warning"],[2,"color","#9ca3af","font-weight","400"],["placeholder","e.g. Big news from Adloura!",3,"ngModelChange","ionInput","ngModel"],["placeholder","Write your message here. Eac
239h line becomes a paragraph.","rows","6","autoGrow","true",3,"ngModelChange","ionInput","ngModel"],["placeholder","e.g. \u{1F680} Explore Now",3,"ngModelChange","ionInput","ngModel"],["placeholder","https://adloura.com",3,"ngModelChange","ionInput","ngModel"],["placeholder","e.g. Happy creating! \u2014 The Adloura Team",3,"ngModelChange","ionInput","ngModel"],["placeholder","Paste full HTML email here\u2026","rows","12","autoGrow","true",3,"ngModelChange","ngModel"],[1,"email-preview-pane",3,"innerHTML"],["lines","none",2,"margin-top","12px"],[2,"font-size","13px","color","#6b7280","margin","2px 0 0"],["slot","end","color","success",3,"ngModelChange","ngModel"],["type","number","min","1","max","10","placeholder","1",2,"max-width","80px",3,"ngModelChange","ngModel"],["slot","end",2,"align-self","center","font-size","12px","color","#6b7280"],[1,"email-result"],[1,"panel-backdrop",3,"click"],[1,"selected-panel"],["fill","clear","aria-label","Close",1,"mobile-close",3,"click"],["name","close-circle"],[1,"mobile-close-text"],["fill","clear","slot","start","aria-label","Back",3,"click"],["aria-hidden","true",1,"drag-handle"],["fill","clear","slot","end",3,"click"],["name","close-outline"],["lines","none","button","",3,"click",4,"ngFor","ngForOf"],["class","no-videos",4,"ngIf"],["lines","none","button","",3,"click"],["slot","end","fill","clear","title","Share","aria-label","Share video",3,"click"],["name","share-social","slot","icon-only"],["slot","end","fill","clear","title","Copy","aria-label","Copy caption",3,"click"],["name","copy-outline","slot","icon-only"],["slot","end","fill","clear","title","Download","aria-label","Download video",3,"click"],["name","download-outline","slot","icon-only"],[1,"no-videos"]],template:function(t,l){t&1&&(n(0,"ion-header")(1,"ion-toolbar",0)(2,"ion-buttons",1)(3,"ion-button",2),x(4,"ion-icon",3),a()(),n(5,"ion-title"),s(6,"Admin Panel"),a(),n(7,"ion-buttons",4)(8,"ion-button",5),g("click",function(){return l.refreshCurrentTab()}),x(9,"ion-icon",6),a()()()(),n(10,"ion-content")(11,"div",7)(12,"button",8),g("click",function(){return l.activeTab="stats",l.onTabChange()}),x(13,"ion-icon",9),n(14,"span"),s(15,"Stats"),a()(),n(16,"button",8),g("click",function(){return l.activeTab="users",l.onTabChange()}),x(17,"ion-icon",10),n(18,"span"),s(19,"Users"),a()(),n(20,"button",8),g("click",function(){return l.activeTab="paid",l.onTabChange()}),x(21,"ion-icon",11),n(22,"span"),s(23,"Paid"),a()(),n(24,"button",8),g("click",function(){return l.activeTab="active-subscriptions",l.onTabChange()}),x(25,"ion-icon",12),n(26,"span"),s(27,"Active Subs"),a()(),n(28,"button",8),g("click",function(){return l.activeTab="user-videos",l.onTabChange()}),x(29,"ion-icon",13),n(30,"span"),s(31,"Videos"),a()(),n(32,"button",8),g("click",function(){return l.activeTab="payments",l.onTabChange()}),x(33,"ion-icon",14),n(34,"span"),s(35,"Payments"),a()(),n(36,"button",8),g("click",function(){return l.activeTab="support",l.onTabChange()}),x(37,"ion-icon",15),n(38,"span"),s(39,"Support"),a(),f(40,nt,2,1,"span",16),a(),n(41,"button",8),g("click",function(){return l.activeTab="email",l.onTabChange()}),x(42,"ion-icon",17),n(43,"span"),s(44,"Email"),a()(),n(45,"button",18),x(46,"ion-icon",19),n(47,"span"),s(48,"Ad Inspector"),a()(),n(49,"button",8),g("click",function(){return l.activeTab="config",l.onTabChange()}),x(50,"ion-icon",20),n(51,"span"),s(52,"Config"),a()()(),n(53,"div",21),f(54,Pt,3,2,"div",22)(55,kt,11,7,"div",22)(56,jt,4,3,"div",22)(57,Jt,4,3,"div",22)(58,ei,18,5,"div",22)(59,ri,15,4,"div",22)(60,mi,5,4,"div",22)(61,bi,7,5,"div",22)(62,an,17,12,"div",22)(63,hn,63,18,"div",22)(64,xn,1,0,"div",23)(65,yn,18,6,"ion-card",24),a()()),t&2&&(o(12),k("active",l.activeTab==="stats"),o(4),k("active",l.activeTab==="users"),o(4),k("active",l.activeTab==="paid"),o(4),k("active",l.activeTab==="active-subscriptions"),o(4),k("active",l.activeTab==="user-videos"),o(4),k("active",l.activeTab==="payments"),o(4),k("active",l.activeTab==="support"),o(4),c("ngIf",l.stats&&(l.stats.openSupportQueries||0)>0),o(),k("active",l.activeTab==="email"),o(8),k("active",l.activeTab==="config"),o(5),c("ngIf",l.activeTab==="stats"),o(),c("ngIf",l.activeTab==="users"),o(),c("ngIf",l.activeTab==="paid"),o(),c("ngIf",l.activeTab==="active-subscriptions"),o(),c("ngIf",l.activeTab==="config"),o(),c("ngIf",l.activeTab==="support"),o(),c("ngIf",l.activeTab==="reported"),o(),c("ngIf",l.activeTab==="user-videos"),o(),c("ngIf",l.activeTab==="payments"),o(),c("ngIf",l.activeTab==="email"),o(),c("ngIf",l.expandedUserId!==null),o(),c("ngIf",l.expandedUserId!==null))},dependencies:[ne,J,K,X,Je,ve,ye,Pe,Ce,we,Se,Te,Me,Ae,Ee,ke,Ve,Ie,De,Oe,Le,ze,Ue,Fe,We,Be,Re,Ne,Ye,je,he,xe,fe,be,He,$e,qe,pe,le,ce,de,ge,Z,te,ie,ee],styles:['@charset "UTF-8";ion-content[_ngcontent-%COMP%]{--background: #0f1117}.loading[_ngcontent-%COMP%]{text-align:center;margin:20px 0;color:var(--ion-color-medium)}.empty-msg[_ngcontent-%COMP%]{text-align:center;color:var(--ion-color-medium);margin:16px 0}.admin-nav-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(5,1fr);gap:0;background:#1a1d27;border-bottom:1px solid #2a2d3a;position:sticky;top:0;z-index:10}.nav-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:10px 4px;border:none;background:transparent;color:#7a7f8e;font-size:.68rem;font-weight:500;cursor:pointer;position:relative;transition:all .15s;gap:3px;border-bottom:2px solid transparent}.nav-item[_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:1.2rem}.nav-item.active[_ngcontent-%COMP%]{color:#e9ae55;border-bottom-color:#e9ae55;background:#6366f114}.nav-item[_ngcontent-%COMP%]:not(.active):hover{color:#e1e4eb;background:#ffffff08}
239.nav-badge[_ngcontent-%COMP%]{position:absolute;top:4px;right:calc(50% - 18px);min-width:16px;height:16px;background:#dc2626;color:#fff;border-radius:8px;font-size:.6rem;font-weight:700;display:flex;align-items:center;justify-content:center;padding:0 4px}@media (max-width: 480px){.admin-nav-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(5,1fr)}.nav-item[_ngcontent-%COMP%]{padding:8px 2px;font-size:.6rem}.nav-item[_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:1rem}}.admin-content-area[_ngcontent-%COMP%]{max-width:800px;margin:0 auto}.analytics-section[_ngcontent-%COMP%]{margin-bottom:16px}.analytics-section.half[_ngcontent-%COMP%]{flex:1;min-width:0}.analytics-label[_ngcontent-%COMP%]{font-size:.78rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ion-color-medium);font-weight:600;margin-bottom:8px}.compare-row[_ngcontent-%COMP%]{display:flex;gap:8px}.compare-tile[_ngcontent-%COMP%]{flex:1;background:var(--ion-card-background, #1e1e1e);border-radius:12px;padding:10px 8px;text-align:center}.compare-tile[_ngcontent-%COMP%]   .compare-icon[_ngcontent-%COMP%]{font-size:1.2rem;color:var(--ion-color-primary);margin-bottom:4px}.compare-tile[_ngcontent-%COMP%]   .compare-values[_ngcontent-%COMP%]{font-size:1.1rem;font-weight:700;line-height:1.2}.compare-tile[_ngcontent-%COMP%]   .compare-today[_ngcontent-%COMP%]{color:var(--ion-color-primary)}.compare-tile[_ngcontent-%COMP%]   .compare-sep[_ngcontent-%COMP%]{color:var(--ion-color-medium);margin:0 2px;font-weight:400;font-size:.9rem}.compare-tile[_ngcontent-%COMP%]   .compare-yest[_ngcontent-%COMP%]{color:var(--ion-color-medium)}.compare-tile[_ngcontent-%COMP%]   .compare-label[_ngcontent-%COMP%]{font-size:.62rem;color:var(--ion-color-medium);margin-top:4px;text-transform:uppercase;letter-spacing:.3px}.growth-table-wrap[_ngcontent-%COMP%]{overflow-x:auto;border-radius:10px;background:var(--ion-card-background, #1e1e1e)}.growth-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:.82rem}.growth-table[_ngcontent-%COMP%]   thead[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]{background:rgba(var(--ion-color-primary-rgb, 56, 128, 255),.15)}.growth-table[_ngcontent-%COMP%]   th[_ngcontent-%COMP%]{padding:8px 12px;text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.5px;color:var(--ion-color-medium);font-weight:600}.growth-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{padding:8px 12px;border-top:1px solid rgba(255,255,255,.05)}.growth-table[_ngcontent-%COMP%]   .num-cell[_ngcontent-%COMP%]{text-align:right;font-weight:600;color:var(--ion-color-primary)}.growth-table[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]:last-child   td[_ngcontent-%COMP%]{border-bottom:none}.channels-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:8px}.channels-days[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]{background:transparent;border:1px solid rgba(255,255,255,.15);color:var(--ion-color-medium);border-radius:999px;padding:2px 9px;margin-left:4px;font-size:.7rem;cursor:pointer}.channels-days[_ngcontent-%COMP%]   button.on[_ngcontent-%COMP%]{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.channels-total[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{font-weight:700}.channels-empty[_ngcontent-%COMP%]{color:var(--ion-color-medium);text-align:center}.channels-note[_ngcontent-%COMP%]{font-size:.68rem;color:var(--ion-color-medium);margin-top:6px;line-height:1.4}.breakdown-row[_ngcontent-%COMP%]{display:flex;gap:10px;margin-bottom:16px}.breakdown-list[_ngcontent-%COMP%]{background:var(--ion-card-background, #1e1e1e);border-radius:10px;overflow:hidden}.breakdown-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-top:1px solid rgba(255,255,255,.05);font-size:.82rem}.breakdown-item[_ngcontent-%COMP%]:first-child{border-top:none}.breakdown-item[_ngcontent-%COMP%]   .bd-name[_ngcontent-%COMP%]{color:var(--ion-text-color);text-transform:capitalize}.breakdown-item[_ngcontent-%COMP%]   .bd-count[_ngcontent-%COMP%]{font-weight:700;color:var(--ion-color-primary)}.empty-analytics[_ngcontent-%COMP%]{font-size:.8rem;color:var(--ion-color-medium);padding:10px 12px;background:var(--ion-card-background, #1e1e1e);border-radius:10px;text-align:center}ion-segment[_ngcontent-%COMP%]{margin-bottom:12px}.tab-content[_ngcontent-%COMP%]{padding:0 2px}.stats-loading[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:8px}.skeleton-tile[_ngcontent-%COMP%]{height:100px;border-radius:14px;background:linear-gradient(90deg,var(--ion-color-light) 25%,var(--ion-color-light-shade) 50%,var(--ion-color-light) 75%);background-size:200% 100%;animation:_ngcontent-%COMP%_shimmer 1.5s infinite}@keyframes _ngcontent-%COMP%_shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.alert-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;background:var(--ion-color-danger);color:#fff;padding:10px 14px;border-radius:10px;margin-bottom:10px;cursor:pointer;font-size:.9rem;font-weight:600}.alert-banner[_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:1.2rem}.hero-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}.hero-tile[_ngcontent-%COMP%]{border-radius:16px;padding:18px 14px;display:flex;flex-direction:column;align-items:center;cursor:pointer;transition:transform .15s}.hero-tile[_ngcontent-%COMP%]:active{transform:scale(.97)}.hero-tile[_ngcontent-%COMP%]   .hero-icon[_ngcontent-%COMP%]{font-size:1.8rem;margin-bottom:4px;color:#ffffffe6}.hero-tile[_ngcontent-%COMP%]   .hero-value[_ngcontent-%COMP%]{font-size:2.2rem;font-weight:800;color:#fff;line-height:1}.hero-tile[_ngcontent-%COMP%]   .hero-label[_ngcontent-%COMP%]{font-size:.72rem;color:#fffc;text-transform:uppercase;letter-spacing:.6px;margin-top:4px}.hero-tile.blue[_ngcontent-%COMP%]{background:linear-gradient(135deg,#3880ff,#5a9eff)}.hero-tile.green[_ngcontent-%COMP%]{background:linear-gradient(135deg,#2dd36f,#42e07e)}.tile-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:16px}.stat-tile[_ngcontent-%COMP%]{border-radius:14px;padding:14px 12px;display:flex;flex-direction:column;align-items:center;text-align:center}.stat-tile.wide[_ngcontent-%COMP%]{grid-column:span 2;flex-direction:row;gap:14px;justify-content:center}.stat-tile.wide[_ngcontent-%COMP%]   .tile-label[_ngcontent-%COMP%]{margin-top:0;align-self:center}.stat-tile.gray[_ngcontent-%COMP%]{background:linear-gradient(135deg,#7c8ca0,#9aa3ae)}.stat-tile.purple[_ngcontent-%COMP%]{background:linear-gradient(135deg,#cc8530,#9b5cf6
239)}.stat-tile.indigo[_ngcontent-%COMP%]{background:linear-gradient(135deg,#4f46e5,#e9ae55)}.stat-tile.orange[_ngcontent-%COMP%]{background:linear-gradient(135deg,#e55757,#ff7070)}.stat-tile.slate[_ngcontent-%COMP%]{background:linear-gradient(135deg,#64748b,#94a3b8)}.stat-tile.teal[_ngcontent-%COMP%]{background:linear-gradient(135deg,#0d9488,#14b8a6)}.stat-tile[_ngcontent-%COMP%]   .tile-icon-wrap[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:50%;background:#ffffff40;display:flex;align-items:center;justify-content:center;font-size:1.1rem;color:#fff;margin-bottom:8px;flex-shrink:0}.stat-tile[_ngcontent-%COMP%]   .tile-value[_ngcontent-%COMP%]{font-size:1.6rem;font-weight:800;color:#fff;line-height:1}.stat-tile[_ngcontent-%COMP%]   .tile-label[_ngcontent-%COMP%]{font-size:.7rem;color:#fffc;text-transform:uppercase;letter-spacing:.5px;margin-top:4px}.quick-actions-label[_ngcontent-%COMP%]{font-size:.78rem;text-transform:uppercase;letter-spacing:.8px;color:var(--ion-color-medium);margin-bottom:8px;font-weight:600}.quick-actions-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}.qa-btn[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:5px;background:var(--ion-card-background, #fff);border:1px solid var(--ion-color-light-shade, #e0e0e0);border-radius:12px;padding:12px 8px;cursor:pointer;font-size:.78rem;color:var(--ion-text-color);transition:background .15s}.qa-btn[_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:1.4rem;color:var(--ion-color-primary)}.qa-btn[_ngcontent-%COMP%]:active{background:var(--ion-color-light)}.tier-free[_ngcontent-%COMP%]{color:var(--ion-color-medium)}.tier-pro[_ngcontent-%COMP%]{color:var(--ion-color-primary);font-weight:600}.tier-premium[_ngcontent-%COMP%]{color:var(--ion-color-warning);font-weight:600}.plan-badge[_ngcontent-%COMP%]{background:rgba(var(--ion-color-primary-rgb),.1);padding:2px 6px;border-radius:4px;font-size:.75rem}.reported-card[_ngcontent-%COMP%]{margin:8px 0;border-left:4px solid var(--ion-color-danger)}.reported-card[_ngcontent-%COMP%]   ion-badge[_ngcontent-%COMP%]{margin-right:8px}.reported-card[_ngcontent-%COMP%]   .report-user[_ngcontent-%COMP%]{margin-left:12px;opacity:.7}.reported-card[_ngcontent-%COMP%]   .report-actions[_ngcontent-%COMP%]{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.reported-card[_ngcontent-%COMP%]   .report-actions[_ngcontent-%COMP%]   ion-button[_ngcontent-%COMP%]{margin:0;--padding-start: 8px;--padding-end: 8px}.user-videos-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.user-video-card[_ngcontent-%COMP%]{margin-bottom:0}.user-video-card[_ngcontent-%COMP%]   .vid-meta-row[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;gap:5px;margin-top:2px}.user-video-card[_ngcontent-%COMP%]   .vid-user[_ngcontent-%COMP%]{font-weight:600;font-size:.85rem;color:var(--ion-color-dark);margin-right:2px}.user-video-card[_ngcontent-%COMP%]   .vid-type[_ngcontent-%COMP%]{font-size:.78rem;color:var(--ion-color-medium)}.user-video-card[_ngcontent-%COMP%]   .tier-pill[_ngcontent-%COMP%]{font-size:.65rem;padding:2px 5px;border-radius:4px;text-transform:uppercase;letter-spacing:.3px}.user-video-card[_ngcontent-%COMP%]   .video-date[_ngcontent-%COMP%]{font-size:.85rem;opacity:.7;margin:4px 0}.user-video-card[_ngcontent-%COMP%]   .video-status[_ngcontent-%COMP%]{font-weight:600;margin:4px 0;font-size:.9rem}.user-video-card[_ngcontent-%COMP%]   .video-status.public[_ngcontent-%COMP%]{color:var(--ion-color-success)}.user-video-card[_ngcontent-%COMP%]   .video-status.private[_ngcontent-%COMP%]{color:var(--ion-color-warning)}.user-video-card[_ngcontent-%COMP%]   .video-youtube[_ngcontent-%COMP%]{font-size:.85rem;margin:4px 0}.user-video-card[_ngcontent-%COMP%]   .video-youtube.published[_ngcontent-%COMP%]{color:var(--ion-color-danger);font-weight:600}.user-video-card[_ngcontent-%COMP%]   .video-actions-row[_ngcontent-%COMP%]{display:flex;gap:6px;margin-top:12px;flex-wrap:wrap}.user-video-card[_ngcontent-%COMP%]   .video-actions-row[_ngcontent-%COMP%]   ion-button[_ngcontent-%COMP%]{margin:0;font-size:.75rem;--padding-start: 6px;--padding-end: 6px}.search-container[_ngcontent-%COMP%]{margin-bottom:16px}.support-card[_ngcontent-%COMP%]{margin:8px 0}.support-card.resolved[_ngcontent-%COMP%]{opacity:.7}.query-type[_ngcontent-%COMP%]{text-transform:capitalize;font-weight:600}.query-email[_ngcontent-%COMP%]{color:var(--ion-color-medium)}.status-open[_ngcontent-%COMP%]{color:var(--ion-color-warning);font-weight:600}.status-resolved[_ngcontent-%COMP%]{color:var(--ion-color-success)}.query-message[_ngcontent-%COMP%]{margin:8px 0;white-space:pre-wrap}.query-date[_ngcontent-%COMP%]{color:var(--ion-color-medium)}.admin-reply[_ngcontent-%COMP%]{margin-top:12px;padding:10px;background:rgba(var(--ion-color-primary-rgb),.06);border-radius:8px;border-left:3px solid var(--ion-color-primary)}.reply-form[_ngcontent-%COMP%]{margin-top:12px}.reply-textarea[_ngcontent-%COMP%]{border:1px solid rgba(var(--ion-color-medium-rgb),.3);border-radius:8px;padding:8px;margin-bottom:8px}.support-filter[_ngcontent-%COMP%]{margin-bottom:12px}.pagination[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;gap:12px;margin-top:20px;padding:16px}.pagination[_ngcontent-%COMP%]   ion-button[_ngcontent-%COMP%]{margin:0}.pagination[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{min-width:120px;text-align:center;font-weight:500}ion-item.search-item[_ngcontent-%COMP%]{position:sticky;top:0;z-index:30;background:var(--ion-background-color);padding:8px 0;box-shadow:0 1px #0000000a}.pagination[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:12px;align-items:center;margin-top:16px}.selected-panel[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:9999;display:flex;flex-direction:column;height:100vh;margin:0;box-shadow:0 6px 30px #00000047;border-radius:0;background:var(--ion-background-color);overflow:hidden}.selected-panel[_ngcontent-%COMP%]   ion-card-header[_ngcontent-%COMP%]{flex:0 0 auto;padding:12px 16px;border-bottom:1px solid rgba(0,0,0,.06)}.selected-panel[_ngcontent-%COMP%]   ion-card-content[_ngcontent-%COMP%]{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0}.selected-panel[_ngcontent-%COMP%]   ion-list[_ngcontent-%COMP%]{padding:8px 0}.selected-panel[_ngcontent-%COMP%]   .no-videos[_ngcontent-%COMP%]{padding:12px 16px;color:var(--ion-color-medium)}@media (min-width: 800px){.selected-panel[_ngcontent-%COMP%]{inset:40px 80px;border-radius:10px;height:auto}}.panel-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:#0000005c;z-index:9998}.selected-panel[_ngcontent-%COMP%]   ion-button[slot=end][_ngcontent-%COMP%]{color:var(--ion-color-light);display:inline-flex;align-items:center;justify-content:center;min-width:44px;height:44px;padding:6px;border-radius:8px;background:#ffffff08}.selected-panel[_ngcontent-%COMP%]   ion-button[slot=end][_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:20px;opacity:1!important;display:inline-block!important;visibility:visible!important}.selected-panel[_ngcontent-%COMP%]   ion-button[slot=end][_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]   svg[_ngcontent-%COMP%]{fill:currentColor!important;stroke:currentColor!important;opacity:1!important}.selected-panel[_ngcontent-%COMP%]   ion-item[button][_ngcontent-%COMP%]{padding:12px 16px}.selected-panel[_ngcontent-%COMP%]   ion-item[button][_ngcontent-%COMP%]   ion-label[_ngcontent-%COMP%]   h4[_ng
239content-%COMP%]{font-size:15px}.selected-panel[_ngcontent-%COMP%]   ion-item[button][_ngcontent-%COMP%]   ion-label[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{font-size:13px;color:var(--ion-color-medium)}@media (max-width: 480px){.pagination[_ngcontent-%COMP%]{flex-direction:column;gap:8px;padding:8px 0}.pagination[_ngcontent-%COMP%]   ion-button[_ngcontent-%COMP%]{width:100%}.pagination[_ngcontent-%COMP%]{position:sticky;bottom:0;left:0;right:0;background:var(--ion-background-color);padding:10px;box-shadow:0 -6px 18px #0000000f;border-top:1px solid rgba(0,0,0,.04);z-index:40}.selected-panel[_ngcontent-%COMP%]{left:6px;right:6px;top:12vh;bottom:8px;height:calc(88vh - 16px);border-radius:12px;padding-top:env(safe-area-inset-top,8px);padding-bottom:env(safe-area-inset-bottom,8px);box-shadow:0 8px 28px #00000047}.selected-panel[_ngcontent-%COMP%]   ion-button[slot=end][_ngcontent-%COMP%]{--padding-start: 10px;--padding-end: 10px}.selected-panel[_ngcontent-%COMP%]   ion-button[slot=end][_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:22px}.selected-panel[_ngcontent-%COMP%]   ion-card-header[_ngcontent-%COMP%]{padding-top:8px;padding-bottom:8px;position:sticky;top:0;z-index:10005;background:var(--ion-background-color)}.selected-panel[_ngcontent-%COMP%]   .drag-handle[_ngcontent-%COMP%]{width:40px;height:4px;background:#0000001f;border-radius:3px;margin:6px auto}.selected-panel[_ngcontent-%COMP%]   ion-card-content[_ngcontent-%COMP%]{-webkit-overflow-scrolling:touch}.selected-panel[_ngcontent-%COMP%]   .mobile-close[_ngcontent-%COMP%]{position:absolute;top:calc(env(safe-area-inset-top,8px) + 8px);right:14px;z-index:10010;padding:6px 12px;border-radius:20px;height:44px;display:flex;align-items:center;gap:8px;background:#0000000f;box-shadow:0 2px 8px #0000001f}.selected-panel[_ngcontent-%COMP%]   .mobile-close[_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:20px;color:var(--ion-color-medium)}.selected-panel[_ngcontent-%COMP%]   .mobile-close[_ngcontent-%COMP%]   .mobile-close-text[_ngcontent-%COMP%]{display:inline-block;font-size:14px;color:var(--ion-color-medium);font-weight:600}.selected-panel[_ngcontent-%COMP%]   ion-card-header[_ngcontent-%COMP%]   ion-button[slot=start][_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;--padding-top:6px;--padding-bottom:6px;--padding-start:8px;--padding-end:8px}.selected-panel[_ngcontent-%COMP%]   ion-card-header[_ngcontent-%COMP%]   ion-button[slot=start][_ngcontent-%COMP%]   ion-icon[_ngcontent-%COMP%]{font-size:22px;color:var(--ion-color-primary)}.selected-panel[_ngcontent-%COMP%]   ion-button[_ngcontent-%COMP%]   .btn-text[_ngcontent-%COMP%]{display:inline-block;margin-left:8px;font-size:.95rem;color:var(--ion-color-light);font-weight:600}.selected-panel[_ngcontent-%COMP%]   .mobile-close[_ngcontent-%COMP%], .panel-backdrop[_ngcontent-%COMP%]{pointer-events:auto}}@media (max-width: 480px) and (max-width: 480px){.selected-panel[_ngcontent-%COMP%]   ion-button[_ngcontent-%COMP%]   .btn-text[_ngcontent-%COMP%]{display:none}}.payment-error-card[_ngcontent-%COMP%]{margin:8px 0;border-left:4px solid var(--ion-color-danger)}.payment-error-card[_ngcontent-%COMP%]   .payment-card-meta[_ngcontent-%COMP%]{display:flex;align-items:center;flex-wrap:wrap;gap:4px}.payment-error-card[_ngcontent-%COMP%]   .payment-time[_ngcontent-%COMP%]{margin-left:6px;color:var(--ion-color-medium);font-size:.78rem}.payment-error-card[_ngcontent-%COMP%]   .pf-label[_ngcontent-%COMP%]{font-size:.72rem;text-transform:uppercase;letter-spacing:.4px;color:var(--ion-color-medium);margin-bottom:2px}.payment-error-card[_ngcontent-%COMP%]   .pf-sub[_ngcontent-%COMP%]{font-size:.75rem;color:var(--ion-color-medium);margin-top:2px}.payment-error-card[_ngcontent-%COMP%]   .pf-unknown[_ngcontent-%COMP%]{color:var(--ion-color-medium);font-style:italic}.payment-error-card[_ngcontent-%COMP%]   .error-text[_ngcontent-%COMP%]{color:var(--ion-color-danger);word-break:break-word}.payment-error-card[_ngcontent-%COMP%]   .raw-data[_ngcontent-%COMP%]{margin-top:8px;font-size:.78rem}.payment-error-card[_ngcontent-%COMP%]   .raw-data[_ngcontent-%COMP%]   summary[_ngcontent-%COMP%]{cursor:pointer;color:var(--ion-color-medium);-webkit-user-select:none;user-select:none}.payment-error-card[_ngcontent-%COMP%]   .raw-data[_ngcontent-%COMP%]   pre[_ngcontent-%COMP%]{margin:6px 0 0;white-space:pre-wrap;word-break:break-all;background:#0000000a;padding:8px;border-radius:6px;font-size:.75rem;max-height:200px;overflow-y:auto}.payments-summary[_ngcontent-%COMP%]{text-align:center;margin:12px 0}.payments-summary[_ngcontent-%COMP%]   ion-note[_ngcontent-%COMP%]{font-size:.85rem}.payments-subtabs[_ngcontent-%COMP%]{display:flex;gap:0;margin:12px 0 16px;border-radius:10px;overflow:hidden;border:1.5px solid var(--ion-color-medium-shade)}.payments-subtabs[_ngcontent-%COMP%]   .subtab-btn[_ngcontent-%COMP%]{flex:1;padding:10px 8px;font-size:.88rem;font-weight:500;background:transparent;border:none;cursor:pointer;color:var(--ion-color-medium);transition:background .15s,color .15s}.payments-subtabs[_ngcontent-%COMP%]   .subtab-btn[_ngcontent-%COMP%]   .subtab-count[_ngcontent-%COMP%]{font-size:.75rem;opacity:.8}.payments-subtabs[_ngcontent-%COMP%]   .subtab-btn.active[_ngcontent-%COMP%]{background:var(--ion-color-primary);color:#fff}.payments-filters[_ngcontent-%COMP%]{margin-bottom:8px}.payments-filters[_ngcontent-%COMP%]   .payments-search[_ngcontent-%COMP%]{--padding-start: 0;--padding-end: 0;margin-bottom:6px}.payments-filters[_ngcontent-%COMP%]   .filter-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:0 4px}.payments-filters[_ngcontent-%COMP%]   .filter-row[_ngcontent-%COMP%]   .method-filter[_ngcontent-%COMP%]{max-width:220px;--padding-start: 8px;border:1px solid var(--ion-color-light-shade);border-radius:8px}.payments-filters[_ngcontent-%COMP%]   .filter-row[_ngcontent-%COMP%]   .filter-count[_ngcontent-%COMP%]{font-size:.82rem;color:var(--ion-color-medium)}
239.pagination-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:4px;margin:8px 0}.pagination-bar[_ngcontent-%COMP%]   .page-label[_ngcontent-%COMP%]{font-size:.88rem;color:var(--ion-color-medium);min-width:56px;text-align:center}.email-result[_ngcontent-%COMP%]{margin-top:12px}.email-result[_ngcontent-%COMP%]   ion-card[_ngcontent-%COMP%]{margin:0}.email-result[_ngcontent-%COMP%]   ion-card[_ngcontent-%COMP%]   ion-card-content[_ngcontent-%COMP%]{font-size:.95rem}.editor-mode-toggle[_ngcontent-%COMP%]{display:flex;border:1px solid var(--ion-color-medium-tint, #d1d5db);border-radius:8px;overflow:hidden}.editor-mode-toggle[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]{padding:4px 14px;font-size:12px;font-weight:600;background:transparent;color:var(--ion-color-medium, #6b7280);border:none;cursor:pointer;transition:background .15s,color .15s}.editor-mode-toggle[_ngcontent-%COMP%]   button.active[_ngcontent-%COMP%]{background:var(--ion-color-primary, #4f46e5);color:#fff}.email-preview-pane[_ngcontent-%COMP%]{width:100%;max-height:480px;overflow-y:auto;border:1px solid var(--ion-color-medium-tint, #ccc);border-radius:8px;background:#fff;padding:0;margin:8px 0}.email-preview-pane[_ngcontent-%COMP%]   table[_ngcontent-%COMP%]{max-width:100%!important}.ad-activity[_ngcontent-%COMP%]{font-size:.78rem;margin-top:2px}.ad-activity[_ngcontent-%COMP%]   .has-ads[_ngcontent-%COMP%]{color:#4fc58f;font-weight:700}.ad-activity[_ngcontent-%COMP%]   .no-ads[_ngcontent-%COMP%]{color:#8b8b9a}.ad-activity[_ngcontent-%COMP%]   .warn[_ngcontent-%COMP%]{color:#e9ae55}.ad-activity[_ngcontent-%COMP%]   .muted[_ngcontent-%COMP%]{color:#6f6f7e}']});let r=p;return r})();export{Rn as AdminDashboardPage};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.