PageSourceSearch

https://wavvywallet.com/729.a76e5d05a4f8773f.js

js wavvywallet.com collected 2026-09-24 14:20:34 UTC 84,055 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkwavvy_landing=self.webpackChunkwavvy_landing||[]).push([[729],{6526:(F,C,m)=>{m.d(C,{c:()=>P});var n=m(8274),e=m(1294);const b=function(){return["/"]};let P=(()=>{class x{constructor(){this.layout="default",this.watchDemo=new n.vpe}get currentYear(){return(new Date).getFullYear()}onWatchDemo(){this.watchDemo.emit()}}return x.\u0275fac=function(v){return new(v||x)},x.\u0275cmp=n.Xpm({type:x,selectors:[["app-footer"]],inputs:{layout:"layout"},outputs:{watchDemo:"watchDemo"},decls:92,vars:7,consts:[[1,"footer-section"],[1,"container","footer__container"],[1,"footer__top"],[1,"footer__brand"],["routerLink","/","aria-label","Wavvy Wallet home",1,"footer__brand-link"],["src","assets/wavvy-wallet-trans.png","alt","","width","40","height","40",1,"footer__logo"],[1,"footer__brand-name"],[1,"footer__tagline"],["aria-label","Download the app",1,"footer__stores"],["href","https://play.google.com/store/apps/details?id=com.sisitech.wavvy_wallet","target","_blank","rel","noopener noreferrer",1,"footer__store-link"],["src","assets/google-play-store-logo.png","alt","Get it on Google Play",1,"footer__store-img"],["href","https://apps.apple.com/ke/app/wavvy-wallet/id6670490631","target","_blank","rel","noopener noreferrer",1,"footer__store-link"],["src","assets/download-app-store.png","alt","Download on the App Store",1,"footer__store-img"],[1,"footer__follow"],["aria-label","Social links",1,"footer__social"],["href","https://www.instagram.com/wavvywallet?igsh=cnhnanc4anNvZ2R0","target","_blank","rel","noopener noreferrer","aria-label","Instagram",1,"footer__social-btn"],["aria-hidden","true",1,"fab","fa-instagram"],["href","https://www.linkedin.com/company/wavvy-p
1ay-ltd","target","_blank","rel","noopener noreferrer","aria-label","LinkedIn",1,"footer__social-btn"],["aria-hidden","true",1,"fab","fa-linkedin-in"],["href","https://www.youtube.com/@WavvyWalletApp","target","_blank","rel","noopener noreferrer","aria-label","YouTube",1,"footer__social-btn"],["aria-hidden","true",1,"fab","fa-youtube"],["aria-label","Footer",1,"footer__nav"],[1,"footer__col"],[1,"footer__heading"],["fragment","how-it-works",1,"footer__link",3,"routerLink"],["fragment","pricing",1,"footer__link",3,"routerLink"],["routerLink","/our-story",1,"footer__link"],["routerLink","/tutorials",1,"footer__link"],["routerLink","/insights",1,"footer__link"],["type","button",1,"footer__link","footer__link--btn",3,"click"],["routerLink","/","fragment","faq",1,"footer__link"],["href","mailto:[email protected]?subject=Support",1,"footer__link"],["href","mailto:[email protected]",1,"footer__link"],["href","https://privacy.wavvywallet.com/privacy","target","_blank","rel","noopener noreferrer",1,"footer__link"],["routerLink","/terms-of-service",1,"footer__link"],["role","region","aria-label","Trust and compliance",1,"footer__trust"],[1,"footer__trust-cell"],["src","assets/odpc-kenya-seal.png","alt","Office of the Data Protection Commissioner Kenya seal","width","72","height","72",1,"footer__trust-seal"],[1,"footer__trust-text"],[1,"footer__trust-lead"],[1,"footer__trust-sub"],["aria-hidden","true",1,"footer__trust-icon"],[1,"fas","fa-arrows-rotate"],["role","img","aria-label","Kenya flag",1,"footer__trust-icon","footer__trust-icon--flag"],[1,"footer__bottom"],[1,"footer__copyright"],[1,"footer__powered"],["href","https://sisitech.com/","target","_blank","rel","noopener noreferrer"]],template:function(v,y){1&v&&(n.TgZ(0,"footer",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"a",4),n._UZ(5,"img",5),n.TgZ(6,"span",6),n._uU(7,"Wavvy Wallet"),n.qZA()(),n.TgZ(8,"p",7),n._uU(9," Smarter expense tracking for Kenya. "),n._UZ(10,"br"),n._uU(11,"Budget better. Live freer. "),n.qZA(),n.TgZ(12,"div",8)(13,"a",9),n._UZ(14,"img",10),n.qZA(),n.TgZ(15,"a",11),n._UZ(16,"img",12),n.qZA()(),n.TgZ(17,"p",13),n._uU(18,"Follow Us"),n.qZA(),n.TgZ(19,"div",14)(20,"a",15),n._UZ(21,"i",16),n.qZA(),n.TgZ(22,"a",17),n._UZ(23,"i",18),n.qZA(),n.TgZ(24,"a",19),n._UZ(25,"i",20),n.qZA()()(),n.TgZ(26,"nav",21)(27,"div",22)(28,"h3",23),n._uU(29,"Product"),n.qZA(),n.TgZ(30,"a",24),n._uU(31,"Features"),n.qZA(),n.TgZ(32,"a",25),n._uU(33,"Pricing"),n.qZA(),n.TgZ(34,"a",26),n._uU(35,"Our Story"),n.qZA(),n.TgZ(36,"a",27),n._uU(37,"Tutorials"),n.qZA(),n.TgZ(38,"a",28),n._uU(39,"Blog"),n.qZA(),n.TgZ(40,"button",29),n.NdJ("click",function(){return y.onWatchDemo()}),n._uU(41,"Watch Demo"),n.qZA()(),n.TgZ(42,"div",22)(43,"h3",23),n._uU(44,"Resources"),n.qZA(),n.TgZ(45,"a",30),n._uU(46,"FAQs"),n.qZA(),n.TgZ(47,"a",31),n._uU(48,"Support"),n.qZA(),n.TgZ(49,"a",32),n._uU(50,"Contact Us"),n.qZA()(),n.TgZ(51,"div",22)(52,"h3",23),n._uU(53,"Legal"),n.qZA(),n.TgZ(54,"a",33),n._uU(55,"Privacy Policy"),n.qZA(),n.TgZ(56,"a",34),n._uU(57,"Terms of Service"),n.qZA()()()(),n.TgZ(58,"div",35)(59,"div",36),n._UZ(60,"img",37),n.TgZ(61,"div",38)(62,"p",39)(63,"strong"),n._uU(64,"Regulated by Office of the Data Protection Commissioner."),n.qZA()(),n.TgZ(65,"p",40),n._uU(66," Your data is protected in accordance with the Data Protection Act, 2019. "),n.qZA()()(),n.TgZ(67,"div",36)(68,"div",41),n._UZ(69,"i",42),n.qZA(),n.TgZ(70,"div",38)(71,"p",39)(72,"strong"),n._uU(73,"Cancel Anytime."),n.qZA()(),n.TgZ(74,"p",40),n._uU(75,"No long-term commitments."),n.qZA()()(),n.TgZ(76,"div",36)(77,"div",43),n._uU(78,"\u{1f1f0}\u{1f1ea}"),n.qZA(),n.TgZ(79,"div",38)(80,"p",39)(81,"strong"),n._uU(82,"Built for Kenya."),n.qZA()(),n.TgZ(83,"p",40),n._uU(84,"Proudly designed for Kenyans."),n.qZA()()()(),n.TgZ(85,"div",44)(86,"p",45),n._uU(87),n.qZA(),n.TgZ(88,"p",46),n._uU(89," Powered by "),n.TgZ(90,"a",47),n._uU(91,"Sisitech Limited"),n.qZA()()()()()),2&v&&(n.ekj("footer-section--next","next"===y.layout),n.xp6(30),n.Q6J("routerLink",n.DdM(5,b)),n.xp6(2),n.Q6J("routerLink",n.DdM(6,b)),n.xp6(55),n.hij("\xa9 ",y.currentYear," Wavvy Wallet. All rights reserved."))},dependencies:[e.yS],styles:[".footer-section[_ngcontent-%COMP%]{position:relative;background:#fff;
1color:#1a1f1c;padding:2.75rem 0 1.5rem;border-top:1px solid rgba(17,17,17,.08)}.footer__container[_ngcontent-%COMP%]{max-width:1120px}.footer-section--next[_ngcontent-%COMP%]   .footer__container[_ngcontent-%COMP%]{max-width:var(--ln-shell-max, 1320px);padding-left:var(--ln-shell-pad-x, clamp(.8rem, 2.6vw, 1.6rem));padding-right:var(--ln-shell-pad-x, clamp(.8rem, 2.6vw, 1.6rem))}.footer__top[_ngcontent-%COMP%]{display:grid;gap:2.5rem;padding-bottom:2rem;justify-items:center;text-align:center}@media (min-width: 992px){.footer__top[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1.1fr) minmax(0,1.4fr);align-items:start;gap:3rem;justify-items:start;text-align:left}}.footer__brand[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;max-width:28rem}@media (min-width: 992px){.footer__brand[_ngcontent-%COMP%]{align-items:flex-start;max-width:none}}.footer__brand-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;gap:.65rem;text-decoration:none;color:inherit;margin-bottom:.65rem}@media (min-width: 992px){.footer__brand-link[_ngcontent-%COMP%]{justify-content:flex-start}}.footer__brand-link[_ngcontent-%COMP%]:hover   .footer__brand-name[_ngcontent-%COMP%]{color:#376c50}.footer__logo[_ngcontent-%COMP%]{display:block;width:40px;height:40px;object-fit:contain;border-radius:8px}.footer__brand-name[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:800;letter-spacing:-.02em;transition:color .2s ease}.footer__tagline[_ngcontent-%COMP%]{margin:0 auto 1.1rem;max-width:22rem;font-size:.92rem;line-height:1.55;color:#5c6670}@media (min-width: 992px){.footer__tagline[_ngcontent-%COMP%]{margin-left:0;margin-right:0}}.footer__stores[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:center;gap:.65rem;margin-bottom:1.25rem}@media (min-width: 992px){.footer__stores[_ngcontent-%COMP%]{justify-content:flex-start}}.footer__store-link[_ngcontent-%COMP%]{display:block;line-height:0;border-radius:6px;transition:opacity .2s ease,transform .2s ease}.footer__store-link[_ngcontent-%COMP%]:hover{opacity:.88;transform:translateY(-1px)}.footer__store-img[_ngcontent-%COMP%]{height:40px;width:auto;display:block}.footer__follow[_ngcontent-%COMP%]{margin:0 0 .5rem;font-size:.8rem;font-weight:700;color:#5c6670;letter-spacing:.02em}.footer__social[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;justify-content:center;gap:.55rem}@media (min-width: 992px){.footer__social[_ngcontent-%COMP%]{justify-content:flex-start}}.footer__social-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;background:rgba(55,108,80,.12);color:#376c50;text-decoration:none;transition:background .2s ease,color .2s ease,transform .2s ease}.footer__social-btn[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{font-size:1rem}.footer__social-btn[_ngcontent-%COMP%]:hover{background:#376c50;color:#fff;transform:translateY(-2px)}.footer__nav[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr;gap:1.75rem;justify-items:center;width:100%;max-width:42rem}@media (min-width: 576px){.footer__nav[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem 2rem}}@media (min-width: 992px){.footer__nav[_ngcontent-%COMP%]{justify-items:start;max-width:none}}.footer__col[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;width:100%}@media (min-width: 992px){.footer__col[_ngcontent-%COMP%]{align-items:flex-start}}.footer__heading[_ngcontent-%COMP%]{margin:0 0 .65rem;font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#376c50;text-align:center}@media (min-width: 992px){.footer__heading[_ngcontent-%COMP%]{text-align:left}}.footer__link[_ngcontent-%COMP%]{display:block;margin:0;padding:0;border:0;background:none;font:inherit;text-align:center;color:#1a1f1c;text-decoration:none;font-size:.9rem;line-height:1.5;cursor:pointer;margin-bottom:.42rem;transition:color .2s ease}@media (min-width: 992px){.footer__link[_ngcontent-%COMP%]{text-align:left}}.footer__link[_ngcontent-%COMP%]:last-child{margin-bottom:0}.footer__link[_ngcontent-%COMP%]:hover{color:#376c50}.footer__link--btn[_ngcontent-%COMP%]{width:auto;max-width:100%}.footer__trust[_ngcontent-%COMP%]{display:grid;gap:1.5rem;padding:1.75rem 0;border-top:1px solid rgba(17,17,17,.08);justify-items:center;width:100%}@media (min-width: 768px){.footer__trust[_ngcontent-%COMP%]{grid-template-columns:repeat(3,minmax(0,1fr));gap:0;align-items:start;justify-items:start}}.footer__trust-cell[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem;
1align-items:center;justify-content:center;max-width:22rem}@media (min-width: 768px){.footer__trust-cell[_ngcontent-%COMP%]{flex-direction:row;max-width:none;padding:0 1.25rem;justify-content:flex-start}.footer__trust-cell[_ngcontent-%COMP%]:first-child{padding-left:0}.footer__trust-cell[_ngcontent-%COMP%]:not(:first-child){border-left:1px solid rgba(17,17,17,.08)}}.footer__trust-seal[_ngcontent-%COMP%]{flex-shrink:0;width:72px;height:auto;object-fit:contain}.footer__trust-icon[_ngcontent-%COMP%]{flex-shrink:0;width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(55,108,80,.12);color:#376c50;font-size:1.15rem}.footer__trust-icon--flag[_ngcontent-%COMP%]{font-size:1.5rem;line-height:1;background:rgba(17,17,17,.06)}.footer__trust-text[_ngcontent-%COMP%]{min-width:0;text-align:center}@media (min-width: 768px){.footer__trust-text[_ngcontent-%COMP%]{text-align:left}}.footer__trust-lead[_ngcontent-%COMP%]{margin:0 0 .35rem;font-size:.88rem;line-height:1.45;color:#1a1f1c}.footer__trust-lead[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{font-weight:800}.footer__trust-sub[_ngcontent-%COMP%]{margin:0;font-size:.82rem;line-height:1.5;color:#5c6670}.footer__bottom[_ngcontent-%COMP%]{text-align:center;padding-top:1.35rem;border-top:1px solid rgba(17,17,17,.08)}.footer__copyright[_ngcontent-%COMP%], .footer__powered[_ngcontent-%COMP%]{margin:0;font-size:.82rem;color:#5c6670}.footer__powered[_ngcontent-%COMP%]{margin-top:.35rem}.footer__powered[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:#376c50;font-weight:700;text-decoration:none}.footer__powered[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:hover{text-decoration:underline}"]}),x})()},3195:(F,C,m)=>{m.d(C,{I:()=>B});var n=m(8274),e=m(6895);function b(c,u){1&c&&(n.TgZ(0,"div",13),n._UZ(1,"i",14),n._uU(2," Recommended "),n.qZA())}function P(c,u){if(1&c&&(n.TgZ(0,"div",15),n._uU(1),n.ALo(2,"number"),n.qZA()),2&c){const d=n.oxw();n.xp6(1),n.hij(" Save KES ",n.xi3(2,1,d.savingsAmount,"1.0-0")," ")}}function x(c,u){if(1&c&&(n.ynx(0),n.TgZ(1,"div",16)(2,"span",17),n._uU(3),n.ALo(4,"currency"),n.qZA(),n.TgZ(5,"span",18),n._uU(6),n.ALo(7,"currency"),n.qZA()(),n.BQk()),2&c){const d=n.oxw();n.xp6(3),n.AsE("",n.gM2(4,4,d.basePrice,"KES ","symbol","1.0-0"),"",d.billingText,""),n.xp6(3),n.AsE("",n.gM2(7,9,d.discountedPrice,"KES ","symbol","1.0-0"),"",d.billingText,"")}}function k(c,u){if(1&c&&(n.TgZ(0,"span"),n._uU(1),n.qZA()),2&c){const d=n.oxw(3);n.xp6(1),n.hij(" / ",d.billingPeriod,"")}}function v(c,u){if(1&c&&(n.TgZ(0,"p",18),n._uU(1," KES 0"),n.YNc(2,k,2,1,"span",20),n.qZA()),2&c){const d=n.oxw(2);n.xp6(2),n.Q6J("ngIf","lifetime"!==d.billingPeriod)}}function y(c,u){if(1&c&&(n.TgZ(0,"p",18),n._uU(1),n.ALo(2,"currency"),n.qZA()),2&c){const d=n.oxw(2);n.xp6(1),n.AsE(" ",n.gM2(2,2,d.finalDisplayPrice,"KES ","symbol","1.0-0"),"",d.billingText," ")}}function M(c,u){if(1&c&&(n.YNc(0,v,3,1,"p",19),n.YNc(1,y,3,7,"p",19)),2&c){const d=n.oxw();n.Q6J("ngIf","Free"===d.plan.name),n.xp6(1),n.Q6J("ngIf","Free"!==d.plan.name&&void 0!==d.finalDisplayPrice)}}function O(c,u){1&c&&(n.TgZ(0,"p",21),n._uU(1,"Forever free"),n.qZA())}function S(c,u){1&c&&(n.TgZ(0,"p",21),n._uU(1,"Everything in Pro, plus more"),n.qZA())}function Z(c,u){1&c&&(n.TgZ(0,"span",26),n._UZ(1,"i",27),n.qZA())}function A(c,u){if(1&c&&(n.TgZ(0,"li",22)(1,"span",23),n._UZ(2,"i"),n.qZA(),n.TgZ(3,"span",24),n._uU(4),n.qZA(),n.YNc(5,Z,2,0,"span",25),n.qZA()),2&c){const d=u.$implicit,p=n.oxw();n.xp6(2),n.Tol(p.iconFaClass(p.features[d].icon)),n.xp6(2),n.Oqu(p.features[d].label),n.xp6(1),n.Q6J("ngIf","Free"!==p.plan.name)}}function E(c,u){if(1&c){const d=n.EpF();n.TgZ(0,"button",28),n.NdJ("click",function(){n.CHM(d);const w=n.oxw();return n.KtG("Free"===w.plan.name?w.openAppStore():w.onUpgrade())}),n._uU(1),n.qZA()}if(2&c){const d=n.oxw();n.ekj("plan-card__cta--primary",d.plan.recommended)("plan-card__cta--ghost",!d.plan.recommended)("plan-card__cta--muted",d.plan.decoy),n.xp6(1),n.hij(" ",d.ctaLabel," ")}}let B=(()=>{class c{constructor(){this.billingPeriod="month",this.hideButtons=!1,this.upgrade=new n.vpe}ngOnInit(){}get basePrice(){if("number"==typeof this.plan.price)return this.plan.price}get priceAfterSavings(){if(this.basePrice)return void 0!==this.plan.savingsAmount&&this.plan.savingsAmount>0?Math.max(0,this.basePrice-this.plan.savingsAmount):this.basePrice}get discountedPrice(){if(this.priceAfterSavings)return void 0!==this.plan.discountPercentage&&this.plan.discountPercentage>0?Math.round(Math.max(0,this.priceAfterSavings*(1-this.plan.discountPercentage))):this.priceAfterSavings}get finalDisplayPrice(){return this.discountedPrice??this.priceAfterSavings??this.basePrice}get savingsAmount(){if(!this.basePrice||!this.finalDisplayPrice)return;const d=this.basePrice-this.finalDisplayPrice;return d>0?Math.round(d):void 0}get shouldShowSlashing(){return void 0!==this.plan.discountPercentage&&this.plan.discountPercentage>0&&void 0!==this.basePrice&&void 0!==this.discountedPrice&&this.discountedPrice<this.basePrice}get billingText(){return"Free"===this.plan.name||"lifetime"===this.billingPeriod?"":` / ${this.billingPeriod}`}iconFaClass(d){return{tag:"fas fa-tag",table:"fas fa-table",sparkles:"fas fa-wand-magic-sparkles",calendar:"fas fa-calendar",shuffle:"fas fa-chart-line",target:"fas fa-bullseye"}[d]??"fas fa-circle"}get ctaLabel(){return this.plan.decoy?"Upgrade":"Free"===this.plan.name?"Get Started Free":"Pro"===this.plan.name?"Get Pro Plan":"Pro Plus"===this.plan.name?"Get Pro Plus":"Upgrade"}onUpgrade(){console.log("onUpgrade called for plan:",this.plan),this.upgrade.emit(this.plan)}openAppStore(){window.open("https://play.google.com/store/apps/details?id=com.sisitech.wavvy_wallet","_blank")}}return c.\u0275fac=function(d){return new(d||c)},c.\u0275cmp=n.Xpm({type:c,selectors:[["app-subscription-plan"]],inputs:{plan:"plan",features:"features",index:"index",totalPlans:"totalPlans",billingPeriod:"billingPeriod",hideButtons:"hideButtons"},outputs:{upgrade:"upgrade"},decls:17,vars:16,consts:[[1,"plan-card"],["class","plan-card__badge",4,"ngIf"],[1,"plan-card__header"],[1,"plan-card__title"],[1,"plan-card__subtitle"],["class","plan-card__savings",4,"ngIf"],[1,"plan-card__price-block"],[4,"ngIf","ngIfElse"],["normalPrice",""],["class","plan-card__price-note",4,"ngIf"],[1,"plan-card__features"],["class","plan-card__feature",4,"ngFor","ngForOf"],["type","button","class","plan-card__cta",3,"plan-card__cta--primary","plan-card__cta--ghost","plan-card__cta--muted","click",4,"ngIf"],[1,"plan-card__badge"],["aria-hidden","true",1,"fas","fa-star"],[1,"plan-card__savings"],[1,"plan-card__price-row"],[1,"plan-card__price","plan-card__price--slash"],[1,"plan-card__price","plan-card__price--emphasis"],["class","plan-card__price plan-card__price--emphasis",4,"ngIf"],[4,"ngIf"],[1,"plan-card__price-note"],[1,"plan-card__feature"],["aria-hidden","true",1,"plan-card__feature-icon"],[1,"plan-card__feature-label"],["class","plan-card__feature-check","aria-hidden","true",4,"ngIf"],["aria-hidden","true",1,"plan-card__feature-check"],[1,"fas","fa-check"],["type","button",1,"plan-card__cta",3,"click"]],template:function(d,p){
1if(1&d&&(n.TgZ(0,"div",0),n.YNc(1,b,3,0,"div",1),n.TgZ(2,"div",2)(3,"h3",3),n._uU(4),n.qZA(),n.TgZ(5,"p",4),n._uU(6),n.qZA(),n.YNc(7,P,3,4,"div",5),n.qZA(),n.TgZ(8,"div",6),n.YNc(9,x,8,14,"ng-container",7),n.YNc(10,M,2,2,"ng-template",null,8,n.W1O),n.YNc(12,O,2,0,"p",9),n.YNc(13,S,2,0,"p",9),n.qZA(),n.TgZ(14,"ul",10),n.YNc(15,A,6,4,"li",11),n.qZA(),n.YNc(16,E,2,7,"button",12),n.qZA()),2&d){const w=n.MAs(11);n.ekj("plan-card--recommended",p.plan.recommended)("ms-md-3",0===p.index)("me-md-3",p.index===p.totalPlans-1),n.xp6(1),n.Q6J("ngIf",p.plan.recommended),n.xp6(3),n.hij("",p.plan.name," Plan"),n.xp6(2),n.Oqu(p.plan.description),n.xp6(1),n.Q6J("ngIf",p.savingsAmount&&p.savingsAmount>0),n.xp6(2),n.Q6J("ngIf",p.shouldShowSlashing)("ngIfElse",w),n.xp6(3),n.Q6J("ngIf","Free"===p.plan.name),n.xp6(1),n.Q6J("ngIf","Pro Plus"===p.plan.name),n.xp6(2),n.Q6J("ngForOf",p.plan.features),n.xp6(1),n.Q6J("ngIf",!p.hideButtons)}},dependencies:[e.sg,e.O5,e.JJ,e.H9],styles:["[_nghost-%COMP%]{display:block;height:100%}.plan-card[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;height:100%;margin-bottom:0;padding:1.35rem 1.2rem 1.25rem;border-radius:16px;border:1px solid rgba(17,17,17,.08);background:#fff;box-shadow:0 10px 32px #1111110f;color:#1a1f1c;transition:box-shadow .2s ease,transform .2s ease,border-color .2s ease}.plan-card[_ngcontent-%COMP%]:hover{box-shadow:0 14px 40px #11111114}.plan-card--recommended[_ngcontent-%COMP%]{border:2px solid #376c50;box-shadow:0 14px 42px #376c502e;padding-top:2.65rem}.plan-card--recommended[_ngcontent-%COMP%]   .plan-card__header[_ngcontent-%COMP%]{margin-top:.35rem}.plan-card__badge[_ngcontent-%COMP%]{position:absolute;top:.65rem;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:.35rem;padding:.28rem .75rem;border-radius:999px;font-size:.68rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:#fff;background:#376c50;white-space:nowrap}.plan-card__badge[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{font-size:.62rem}.plan-card__header[_ngcontent-%COMP%]{text-align:center;margin-bottom:.65rem}.plan-card__title[_ngcontent-%COMP%]{margin:0 0 .35rem;font-size:1.12rem;font-weight:800;letter-spacing:-.02em;color:#141a17}.plan-card__subtitle[_ngcontent-%COMP%]{margin:0;font-size:.88rem;line-height:1.45;color:#5c6670}.plan-card__savings[_ngcontent-%COMP%]{margin-top:.45rem;font-size:.78rem;font-weight:700;color:#0d6efd}.plan-card__price-block[_ngcontent-%COMP%]{text-align:center;margin-bottom:1rem}.plan-card__price-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;gap:.35rem .5rem}.plan-card__price[_ngcontent-%COMP%]{margin:0;font-size:clamp(1.25rem,2.6vw,1.65rem);font-weight:800;letter-spacing:-.02em;color:#376c50}.plan-card__price--slash[_ngcontent-%COMP%]{font-size:1rem;font-weight:600;color:#9aa3a8;text-decoration:line-through}.plan-card__price--emphasis[_ngcontent-%COMP%]{color:#376c50}.plan-card__price-note[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.8rem;font-weight:600;color:#5c6670}.plan-card__features[_ngcontent-%COMP%]{list-style:none;margin:0 0 1.15rem;padding:0;display:flex;flex-direction:column;gap:.45rem;flex:1 1 auto}.plan-card__feature[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.55rem;padding:.55rem .65rem;border-radius:10px;background:#f1f4f3;border:1px solid rgba(17,17,17,.05);font-size:.84rem;font-weight:600;color:#243029;text-align:left}.plan-card__feature-icon[_ngcontent-%COMP%]{flex:0 0 auto;display:grid;place-items:center;width:1.85rem;height:1.85rem;color:#376c50;font-size:.88rem}.plan-card__feature-label[_ngcontent-%COMP%]{flex:1 1 auto;min-width:0;line-height:1.35}.plan-card__feature-check[_ngcontent-%COMP%]{flex:0 0 auto;display:grid;place-items:center;width:1.35rem;height:1.35rem;border-radius:50%;background:rgba(55,108,80,.12);color:#376c50;font-size:.62rem}.plan-card__cta[_ngcontent-%COMP%]{margin-top:auto;width:100%;padding:.68rem 1rem;border-radius:999px;font-size:.92rem;font-weight:700;font-family:inherit;cursor:pointer;border:none;transition:background .2s ease,color .2s ease,border-color .2s ease,box-shadow .2s ease}.plan-card__cta--primary[_ngcontent-%COMP%]{background:#376c50;color:#fff;border:1px solid rgba(17,17,17,.08);box-shadow:0 6px 18px #376c5047}.plan-card__cta--primary[_ngcontent-%COMP%]:hover{background:#2d5a44;color:#fff}.plan-card__cta--ghost[_ngcontent-%COMP%]{background:#fff;color:#376c50;border:2px solid #376c50}.plan-card__cta--ghost[_ngcontent-%COMP%]:hover{background:rgba(55,108,80,.06)}.plan-card__cta--muted[_ngcontent-%COMP%]{opacity:.75}.plan-card__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid #376c50;outline-offset:3px}@media (max-width: 767.98px){.plan-card[_ngcontent-%COMP%]{width:100%;max-width:26rem;margin-left:auto;margin-right:auto}}"]}),c})()},2780:(F,C,m)=>{m.d(C,{DK:()=>G,xc:()=>Y});var n=m(5861),e=m(8274),b=m(6895);const P=["videoElement"];function x(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",35),e.NdJ("click",function(){e.CHM(t);const o=e.oxw();return e.KtG(o.togglePlayWithButton())}),e.TgZ(1,"div",36),e._UZ(2,"i",9),e.qZA()()}if(2&r){const t=e.oxw();e.ekj("show",!0)("playing",t.isPlaying)("mobile-persistent",t.isMobile),e.xp6(2),e.ekj("fa-play",!t.isPlaying)("fa-pause",t.isPlaying)}}function k(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",37)(1,"button",38),e.NdJ("click",function(){e.CHM(t);const o=e.oxw();return e.KtG(o.toggleMute())}),e._UZ(2,"i",9),e.qZA(),e.TgZ(3,"button",39),e.NdJ("click",function(o){return e.CHM(t),e.oxw().toggleSettingsMenu(),e.KtG(o.stopPropagation())}),e._UZ(4,"i",23),e.qZA()()}if(2&r){const t=e.oxw();
1e.ekj("hide-controls",!t.controlsVisible),e.xp6(2),e.ekj("fa-volume-up",!t.isMuted)("fa-volume-mute",t.isMuted)}}function v(r,l){if(1&r&&(e.TgZ(0,"div",40),e._UZ(1,"div",41),e.qZA()),2&r){const t=e.oxw();e.xp6(1),e.Udp("width",t.bufferHealth,"%")("background-color",t.getBufferHealthColor(t.bufferHealth))}}function y(r,l){if(1&r&&e._UZ(0,"div",42),2&r){const t=e.oxw();e.Udp("left",t.duration?t.currentTime/t.duration*100:0,"%")}}function M(r,l){if(1&r&&(e.TgZ(0,"div",40),e._UZ(1,"div",41),e.qZA()),2&r){const t=e.oxw();e.xp6(1),e.Udp("width",t.bufferHealth,"%")("background-color",t.getBufferHealthColor(t.bufferHealth))}}function O(r,l){if(1&r&&(e.TgZ(0,"span",43),e._uU(1),e.qZA()),2&r){const t=e.oxw();e.xp6(1),e.hij(" Buffer: ",t.bufferHealth,"% ")}}function S(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",44),e.NdJ("click",function(){e.CHM(t);const o=e.oxw();return e.KtG(o.closeSettingsMenu())}),e.qZA()}}function Z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",48),e.NdJ("click",function(o){return e.CHM(t),e.oxw(3).openQualityMenu(),e.KtG(o.stopPropagation())}),e.TgZ(1,"span"),e._uU(2,"Quality"),e.qZA(),e.TgZ(3,"span",49),e._uU(4),e.TgZ(5,"span",50),e._uU(6,"\u203a"),e.qZA()()()}if(2&r){const t=e.oxw(3);e.xp6(4),e.hij("",t.getQualityLabel()," ")}}function A(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",47)(1,"div",48),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).openSpeedMenu(),e.KtG(o.stopPropagation())}),e.TgZ(2,"span"),e._uU(3,"Playback speed"),e.qZA(),e.TgZ(4,"span",49),e._uU(5),e.TgZ(6,"span",50),e._uU(7,"\u203a"),e.qZA()()(),e.YNc(8,Z,7,1,"div",51),e.qZA()}if(2&r){const t=e.oxw(2);e.xp6(5),e.hij("",t.playbackRate,"x "),e.xp6(3),e.Q6J("ngIf",t.qualityLevels.length>1)}}function E(r,l){1&r&&(e.TgZ(0,"span",56),e._uU(1,"\u2713"),e.qZA())}function B(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",48),e.NdJ("click",function(o){const s=e.CHM(t).$implicit;return e.oxw(3).selectSpeed(s),e.KtG(o.stopPropagation())}),e.TgZ(1,"span"),e._uU(2),e.qZA(),e.YNc(3,E,2,0,"span",55),e.qZA()}if(2&r){const t=l.$implicit,i=e.oxw(3);e.ekj("active",i.playbackRate===t),e.xp6(2),e.hij("",t,"x"),e.xp6(1),e.Q6J("ngIf",i.playbackRate===t)}}function c(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",47)(1,"div",52),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).backToMainMenu(),e.KtG(o.stopPropagation())}),e.TgZ(2,"span",53),e._uU(3,"\u2039"),e.qZA(),e._uU(4," Playback speed "),e.qZA(),e.YNc(5,B,4,4,"div",54),e.qZA()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngForOf",t.speedOptions)}}function u(r,l){1&r&&(e.TgZ(0,"span",56),e._uU(1,"\u2713"),e.qZA())}function d(r,l){1&r&&(e.TgZ(0,"span",56),e._uU(1,"\u2713"),e.qZA())}function p(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",48),e.NdJ("click",function(o){const s=e.CHM(t).$implicit;return e.oxw(3).selectQuality(s.id),e.KtG(o.stopPropagation())}),e.TgZ(1,"span"),e._uU(2),e.qZA(),e.YNc(3,d,2,0,"span",55),e.qZA()}if(2&r){const t=l.$implicit,i=e.oxw(3);e.ekj("active",i.selectedQuality===t.id),e.xp6(2),e.Oqu(t.label),e.xp6(1),e.Q6J("ngIf",i.selectedQuality===t.id)}}function w(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",47)(1,"div",52),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).backToMainMenu(),e.KtG(o.stopPropagation())}),e.TgZ(2,"span",53),e._uU(3,"\u2039"),e.qZA(),e._uU(4," Quality "),e.qZA(),e.TgZ(5,"div",48),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).selectQuality("auto"),e.KtG(o.stopPropagation())}),e.TgZ(6,"span"),e._uU(7,"Auto"),e.qZA(),e.YNc(8,u,2,0,"span",55),e.qZA(),e.YNc(9,p,4,4,"div",54),e.qZA()}if(2&r){const t=e.oxw(2);e.xp6(5),e.ekj("active","auto"===t.selectedQuality),e.xp6(3),e.Q6J("ngIf","auto"===t.selectedQuality),e.xp6(1),e.Q6J("ngForOf",t.qualityLevels)}}function q(r,l){if(1&r&&(e.TgZ(0,"div",45),e.YNc(1,A,9,2,"div",46),e.YNc(2,c,6,1,"div",46),e.YNc(3,w,10,4,"div",46),e.qZA()),2&r){const t=e.oxw();e.uIk("data-menu",t.settingsMenuType),e.xp6(1),e.Q6J("ngIf","main"===t.settingsMenuType),e.xp6(1),e.Q6J("ngIf","speed"===t.settingsMenuType),e.xp6(1),e.Q6J("ngIf","quality"===t.settingsMenuType)}}function I(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",48),e.NdJ("click",function(o){return e.CHM(t),e.oxw(3).openQualityMenu(),e.KtG(o.stopPropagation())}),e.TgZ(1,"span"),e._uU(2,"Quality"),e.qZA(),e.TgZ(3,"span",49),e._uU(4),e.TgZ(5,"span",50),e._uU(6,"\u203a"),e.qZA()()()}if(2&r){const t=e.oxw(3);e.xp6(4),e.hij("",t.getQualityLabel()," ")}}function L(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",47)(1,"div",48),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).openSpeedMenu(),e.KtG(o.stopPropagation())}),e.TgZ(2,"span"),e._uU(3,"Playback speed"),e.qZA(),e.TgZ(4,"span",49),e._uU(5),e.TgZ(6,"span",50),e._uU(7,"\u203a"),e.qZA()()(),e.YNc(8,I,7,1,"div",51),e.qZA()}if(2&r){const t=e.oxw(2);e.xp6(5),e.hij("",t.playbackRate,"x "),e.xp6(3),e.Q6J("ngIf",t.qualityLevels.length>1)}}function H(r,l){1&r&&(e.TgZ(0,"span",56),e._uU(1,"\u2713"),e.qZA())}function D(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",48),e.NdJ("click",function(o){const s=e.CHM(t).$implicit;return e.oxw(3).selectSpeed(s),e.KtG(o.stopPropagation())}),e.TgZ(1,"span"),e._uU(2),e.qZA(),e.YNc(3,H,2,0,"span",55),e.qZA()}if(2&r){const t=l.$implicit,i=e.oxw(3);e.ekj("active",i.playbackRate===t),e.xp6(2),e.hij("",t,"x"),e.xp6(1),e.Q6J("ngIf",i.playbackRate===t)}}function z(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",47)(1,"div",52),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).backToMainMenu(),e.KtG(o.stopPropagation())}),e.TgZ(2,"span",53),e._uU(3,"\u2039"),e.qZA(),e._uU(4," Playback speed "),e.qZA(),e.YNc(5,D,4,4,"div",54),e.qZA()}if(2&r){const t=e.oxw(2);e.xp6(5),e.Q6J("ngForOf",t.speedOptions)}}function Q(r,l){1&r&&(e.TgZ(0,"span",56),e._uU(1,"\u2713"),e.qZA())}function N(r,l){1&r&&(e.TgZ(0,"span",56),e._uU(1,"\u2713"),e.qZA())}function R(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",48),e.NdJ("click",function(o){const s=e.CHM(t).$implicit;return e.oxw(3).selectQuality(s.id),e.KtG(o.stopPropagation())}),e.TgZ(1,"span"),e._uU(2),e.qZA(),e.YNc(3,N,2,0,"span",55),e.qZA()}if(2&r){const t=l.$implicit,i=e.oxw(3);e.ekj("active",i.selectedQuality===t.id),e.xp6(2),e.Oqu(t.label),e.xp6(1),e.Q6J("ngIf",i.selectedQuality===t.id)}}function J(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",47)(1,"div",52),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).backToMainMenu(),e.KtG(o.stopPropagation())}),e.TgZ(2,"span",53),e._uU(3,"\u2039"),e.qZA(),e._uU(4," Quality "),e.qZA(),e.TgZ(5,"div",48),e.NdJ("click",function(o){return e.CHM(t),e.oxw(2).selectQuality("auto"),e.KtG(o.stopPropagation())}),e.TgZ(6,"span"),e._uU(7,"Auto"),e.qZA(),e.YNc(8,Q,2,0,"span",55),e.qZA(),e.YNc(9,R,4,4,"div",54),e.qZA()}if(2&r){const t=e.oxw(2);e.xp6(5),e.ekj("active","auto"===t.selectedQuality),e.xp6(3),e.Q6J("ngIf","auto"===t.selectedQuality),e.xp6(1),e.Q6J("ngForOf",t.qualityLevels)}}function $(r,l){if(1&r&&(e.TgZ(0,"div",57),e._UZ(1,"div",58),e.YNc(2,L,9,2,"div",46),e.YNc(3,z,6,1,"div",46),e.YNc(4,J,10,4,"div",46),e.qZA()),2&r){const t=e.oxw();e.ekj("show",t.showSettingsMenu),e.xp6(2),e.Q6J("ngIf","main"===t.settingsMenuType),e.xp6(1),e.Q6J("ngIf","speed"===t.settingsMenuType),e.xp6(1),e.Q6J("ngIf","quality"===t.settingsMenuType)}}function j(r,l){if(1&r&&(e.TgZ(0,"div",59)(1,"div",60),e.O4$(),e.TgZ(2,"svg",61),e._UZ(3,"circle",62)(4,"circle",63)(5,"circle",64),e.qZA(),e.kcU(),e.TgZ(6,"div",65)(7,"div",66),e._uU(8),e.qZA()()()()),2&r){const t=e.oxw();
1e.xp6(3),e.uIk("fill",t.loadingBackgroundColor),e.xp6(2),e.Udp("stroke-dasharray",201)("stroke-dashoffset",201-201*("initial"===t.loadingState?t.loadingProgress:t.bufferingProgress)/100)("transition","stroke-dashoffset 0.3s ease, stroke 0.3s ease"),e.uIk("stroke","initial"===t.loadingState?t.loadingColor:t.bufferingColor),e.xp6(1),e.Udp("color",t.loadingTextColor),e.xp6(2),e.hij("","initial"===t.loadingState?t.loadingProgress:t.bufferingProgress,"%")}}function V(r,l){if(1&r){const t=e.EpF();e.TgZ(0,"div",67)(1,"p"),e._uU(2),e.qZA(),e.TgZ(3,"button",68),e.NdJ("click",function(){e.CHM(t);const o=e.oxw();return e.KtG(o.retry())}),e._uU(4,"Retry"),e.qZA()()}if(2&r){const t=e.oxw();e.xp6(2),e.Oqu(t.errorMessage)}}let U=(()=>{class r{constructor(){this.currentBufferStrategy=null,this.loadShaka()}loadShaka(){return(0,n.Z)(function*(){if(!r.shakaLoaded)try{if(!window.shaka)throw new Error("Shaka Player not found. Make sure it is included in angular.json scripts.");if(window.shaka.polyfill&&window.shaka.polyfill.installAll(),!window.shaka.Player||!window.shaka.Player.isBrowserSupported())throw new Error("Browser not supported by Shaka Player");r.shakaLoaded=!0}catch(t){throw console.error("Failed to load Shaka Player:",t),t}})()}getDynamicBufferConfig(t,i,o){const g=i&&i>0&&(void 0===o||t>o);let f,h;return t<=120?(f="short",h={streaming:{bufferingGoal:Math.min(5,.1*t),rebufferingGoal:Math.min(2,.05*t),bufferBehind:Math.min(10,.2*t),segmentPrefetchLimit:0,updateIntervalSeconds:.5,retryParameters:{timeout:1e4,maxAttempts:2,baseDelay:500,backoffFactor:1.5}},abr:{switchInterval:2,bandwidthUpgradeTarget:.6,bandwidthDowngradeTarget:.7,restrictions:{minHeight:g?i:void 0,maxHeight:1/0,minBandwidth:0,maxBandwidth:1/0}},bufferStrategy:f}):t<=600?(f="medium",h={streaming:{bufferingGoal:15,rebufferingGoal:10,bufferBehind:30,segmentPrefetchLimit:0,updateIntervalSeconds:.5,retryParameters:{timeout:3e4,maxAttempts:4,baseDelay:1e3,backoffFactor:2}},abr:{switchInterval:3,bandwidthUpgradeTarget:.65,bandwidthDowngradeTarget:.75,restrictions:{minHeight:g?i:void 0,maxHeight:1/0,minBandwidth:0,maxBandwidth:1/0}},bufferStrategy:f}):(f="long",h={streaming:{bufferingGoal:30,rebufferingGoal:15,bufferBehind:60,segmentPrefetchLimit:0,updateIntervalSeconds:1,retryParameters:{timeout:45e3,maxAttempts:5,baseDelay:1e3,backoffFactor:2}},abr:{switchInterval:4,bandwidthUpgradeTarget:.7,bandwidthDowngradeTarget:.8,restrictions:{minHeight:g?i:void 0,maxHeight:1/0,minBandwidth:0,maxBandwidth:1/0}},bufferStrategy:f}),this.currentBufferStrategy=f,h}getBufferStrategy(){return this.currentBufferStrategy}createPlayer(t,i){var o=this;return(0,n.Z)(function*(){if(yield o.loadShaka(),!r.shakaLoaded)throw new Error("Shaka Player not loaded");const a=new window.shaka.Player(t),g={streaming:{bufferingGoal:10,rebufferingGoal:5,bufferBehind:30,retryParameters:{timeout:45e3,maxAttempts:5,baseDelay:1e3,backoffFactor:2},ignoreTextStreamFailures:!0,alwaysStreamText:!1,startAtSegmentBoundary:!0,allowMediaSourceRecoveries:!0,minTimeBetweenRecoveries:5,segmentPrefetchLimit:0,forceTransmuxTS:!1},manifest:{retryParameters:{timeout:3e4,maxAttempts:3,baseDelay:1e3,backoffFactor:2}},abr:{enabled:!0,useNetworkInformation:!0,defaultBandwidthEstimate:2e7,bandwidthUpgradeTarget:.7,bandwidthDowngradeTarget:.8},...i},f=!1!==i?.dynamicBuffering;return a.configure(g),f&&console.log("\u{1f3af} Dynamic buffering enabled - will adjust on video load"),a.addEventListener("error",h=>{const _=h.detail,T=t.currentTime,K=t.duration;if(console.error("Shaka Player Error at",T.toFixed(2)+"s:",{code:_.code,message:_.message,category:_.category,severity:_.severity,currentTime:T,duration:K,timestamp:(new Date).toISOString()}),o.isRecoverableError(_))return console.warn("\u{1f504} Recoverable error - player will continue:",_.message),void((3016===_.code||3017===_.code)&&setTimeout(()=>{t.paused&&!t.ended&&(console.log("\u{1f680} Attempting playback recovery after segment error"),t.play().catch(W=>console.warn("Recovery play failed:",W)))},1e3));console.error("\u274c Critical error that may affect playback:",_)}),a})()}loadVideo(t,i){return(0,n.Z)(function*(){if(!t)throw new Error("Player not initialized");try{yield t.load(i)}catch(o){throw console.error("Failed to load video:",o),o}})()}applyDynamicBufferConfig(t,i,o,a){if(!t||!i||i<=0)return;const s=this.getDynamicBufferConfig(i,o,a),g=t.getConfiguration(),f={streaming:{...g.streaming,...s.streaming},abr:{...g.abr,...s.abr}};t.configure(f),console.log("\u2705 Applied dynamic buffer configuration for",i.toFixed(0),"second video")}
1destroyPlayer(t){t&&"function"==typeof t.destroy&&t.destroy()}isBrowserSupported(){return window.shaka&&window.shaka.Player&&window.shaka.Player.isBrowserSupported()}getPlayerVersion(){return window.shaka?.Player?.version||"Unknown"}isRecoverableError(t){return!(!t||!t.code||![1001,1002,1003,1004,1005,1006,1007,2001,2002,2003,3001,3002,3003,3004,3005,3007,3014,3016,3017,3018,3019,4e3,4001,4003,8001,8002,8003,8004,9001,9002,9003].includes(t.code)&&(1===t.severity?(console.warn(`\u{1f7e1} Unknown recoverable error code ${t.code} (severity ${t.severity}) - using fallback logic`),0):!(3===t.category&&t.severity<3?(console.warn(`\u{1f7e1} Unknown media error code ${t.code} (category ${t.category}, severity ${t.severity}) - using fallback logic`),!0):1===t.category&&t.severity<3&&(console.warn(`\u{1f7e1} Unknown network error code ${t.code} (category ${t.category}, severity ${t.severity}) - using fallback logic`),!0))))}}return r.shakaLoaded=!1,r.\u0275fac=function(t){return new(t||r)},r.\u0275prov=e.Yz7({token:r,factory:r.\u0275fac,providedIn:"root"}),r})(),Y=(()=>{class r{constructor(t,i){this.shakaService=t,this.document=i,this.src="https://api.expensetracker.media.onekana.ke/media/hls/22/mast.m3u8",this.autoplay=!1,this.muted=!1,this.hideControls=!0,this.loadingColor="#007bff",this.bufferingColor="#ffc107",this.bufferHealthColors={healthy:"#28a745",warning:"#ffc107",critical:"#dc3545"},this.loadingTextColor="#ffffff",this.loadingBackgroundColor="rgba(0,0,0,0.8)",this.showBufferHealth=!0,this.bufferHealthPosition="below-progress",this.enableBandwidthStats=!1,this.qualityFloor=0,this.playerReady=new e.vpe,this.error=new e.vpe,this.play=new e.vpe,this.pause=new e.vpe,this.isReady=!1,this.isLoading=!0,this.isPlaying=!1,this.isMuted=!1,this.isFullscreen=!1,this.controlsVisible=!0,this.errorMessage="",this.showCenterButton=!1,this.bufferStrategy=null,this.loadingProgress=0,this.bufferingProgress=0,this.loadingState="initial",this.bufferHealth=0,this.isBuffering=!1,this.currentTime=0,this.duration=0,this.volume=1,this.playbackRate=1,this.videoAspectRatio="16/9",this.isPortraitVideo=!1,this.bufferedEnd=0,this.bufferedProgress=0,this.qualityLevels=[],this.selectedQuality="auto",this.showSettingsMenu=!1,this.settingsMenuType="main",this.speedOptions=[.25,.5,.75,1,1.25,1.5,1.75,2],this.isMobile=!1,this.currentBandwidth=0,this.networkStability=1,this.bandwidthHistory=[],this.networkStatus="stable",this.originalOrientation=null,this.isMuted=this.muted}ngOnInit(){this.checkMobileDevice()}ngAfterViewInit(){this.initializePlayer(),this.setupControlsAutoHide()}ngOnDestroy(){this.cleanup()}onFullscreenChange(){this.checkFullscreenState()}onOrientationChange(){setTimeout(()=>{this.updateVideoAspectRatio(),this.checkMobileDevice()},100)}onDocumentClick(t){const i=t.target,o=i.closest(".settings-menu"),a=i.closest(".settings-btn");!o&&!a&&this.showSettingsMenu&&(this.showSettingsMenu=!1)}checkFullscreenState(){const i=this.isFullscreen;this.isFullscreen=!!(this.document.fullscreenElement||this.document.webkitFullscreenElement||this.document.mozFullScreenElement||this.document.msFullscreenElement),this.isFullscreen||(this.document.body.style.overflow=""),i!==this.isFullscreen&&(clearTimeout(this.controlsTimeout),this.isFullscreen?this.startFullscreenTimer():this.controlsVisible=!this.isMobile)}initializePlayer(){var t=this;return(0,n.Z)(function*(){try{t.player=yield t.shakaService.createPlayer(t.videoElement.nativeElement),t.setupPlayerEventListeners(),yield t.loadVideo(),t.startNetworkMonitoring(),t.isReady=!0,t.playerReady.emit(t.player)}catch(i){t.handleError(i)}})()}loadVideo(){var t=this;return(0,n.Z)(function*(){if(t.player&&t.src)try{t.isReady=!1,t.isLoading=!0,t.loadingState="initial",t.loadingProgress=0,t.errorMessage="",t.simulateLoadingProgress(),yield t.player.load(t.src),t.updateQualityLevels(),t.loadingProgress=100,setTimeout(()=>{t.isLoading=!1,t.loadingState="ready",t.startBufferHealthMonitoring()},300)}catch(i){t.handleError(i)}})()}setupPlayerEventListeners(){const t=this.videoElement.nativeElement;t.muted=this.muted,this.isMuted=this.muted,t.addEventListener("loadedmetadata",()=>{this.duration=t.duration,this.updateVideoAspectRatio(),this.player&&this.duration>0&&(this.shakaService.applyDynamicBufferConfig(this.player,this.duration,this.qual
1ityFloor,this.qualityFloorVideoLength),this.bufferStrategy=this.shakaService.getBufferStrategy(),console.log(`\u{1f3ac} Video duration: ${this.duration.toFixed(0)}s, Buffer strategy: ${this.bufferStrategy}`),this.debugABRConfiguration())}),t.addEventListener("resize",()=>{this.updateVideoAspectRatio()}),t.addEventListener("timeupdate",()=>{this.currentTime=t.currentTime}),t.addEventListener("play",()=>{this.isPlaying=!0,this.isBuffering=!1,this.play.emit(),this.isMobile&&this.startMobileAutoHideTimer(),this.isFullscreen&&this.startFullscreenTimer()}),t.addEventListener("pause",()=>{this.isPlaying=!1,this.pause.emit(),clearTimeout(this.controlsTimeout),this.controlsVisible=!0,this.isFullscreen&&this.startFullscreenTimer()}),t.addEventListener("volumechange",()=>{this.volume=t.volume,this.isMuted=t.muted}),t.addEventListener("ratechange",()=>{this.playbackRate=t.playbackRate}),t.addEventListener("waiting",()=>{this.isBuffering=!0,this.loadingState="buffering",this.updateBufferingProgress()}),t.addEventListener("canplay",()=>{this.isBuffering=!1,this.loadingState="ready"}),t.addEventListener("canplaythrough",()=>{this.isBuffering=!1,this.loadingState="ready"}),t.addEventListener("seeking",()=>{clearTimeout(this.seekingTimeout),this.seekingTimeout=setTimeout(()=>{this.isBuffering=!0,this.loadingState="buffering"},150)}),t.addEventListener("seeked",()=>{clearTimeout(this.seekingTimeout),this.isBuffering=!1,this.loadingState="ready"}),this.setupABRDebugListeners(),this.isIOS()&&(t.addEventListener("webkitbeginfullscreen",()=>{this.isFullscreen=!0,console.log("\u{1f4f1} iOS video entered fullscreen"),this.isPortraitVideo||this.lockToLandscape()}),t.addEventListener("webkitendfullscreen",()=>{this.isFullscreen=!1,console.log("\u{1f4f1} iOS video exited fullscreen"),null!==this.originalOrientation&&this.unlockOrientation()}))}setupABRDebugListeners(){!this.player||(this.player.addEventListener("adaptation",t=>{this.debugABRDecision("adaptation",t)}),this.player.addEventListener("variantchanged",t=>{this.debugVariantChange(t)}),this.player.addEventListener("buffering",t=>{this.debugBufferingEvent(t)}))}debugABRDecision(t,i){if(this.player)try{const o=this.player.getStats(),a=this.player.getVariantTracks().find(g=>g.active),s=this.player.getBufferFullness();console.log(`\u{1f50d} ABR ${t} Event:`,{timestamp:(new Date).toISOString(),currentQuality:a?`${a.height}p (${Math.round(a.bandwidth/1e3)}k)`:"unknown",estimatedBandwidth:o.estimatedBandwidth?`${Math.round(o.estimatedBandwidth/1e3)}k`:"unknown",bufferHealth:`${(100*s).toFixed(1)}%`,bufferLength:`${this.getBufferLength().toFixed(1)}s`,networkStatus:this.networkStatus,bufferStrategy:this.bufferStrategy,event:i})}catch(o){console.warn("ABR debug logging failed:",o)}}debugVariantChange(t){if(this.player)try{const i=this.player.getStats(),o=t.newTrack,a=t.oldTrack,s=this.getBufferLength(),g=!(!a||!o)&&o.bandwidth<a.bandwidth,f=a&&o?`${a.height}p \u2192 ${o.height}p`:`Quality changed to ${o?.height}p`,h=this.shouldBufferPreventDowngrade(s,g);console.log(`\u{1f504} Quality Switch: ${f}`,{timestamp:(new Date).toISOString(),oldQuality:a?{resolution:`${a.width}x${a.height}`,bitrate:`${Math.round(a.bandwidth/1e3)}k`,id:a.id}:null,newQuality:o?{resolution:`${o.width}x${o.height}`,bitrate:`${Math.round(o.bandwidth/1e3)}k`,id:o.id}:null,bandwidth:i.estimatedBandwidth?`${Math.round(i.estimatedBandwidth/1e3)}k`:"unknown",bufferLength:`${s.toFixed(1)}s`,isUpgrade:!(!a||!o)&&o.bandwidth>a.bandwidth,isDowngrade:g,bufferProtectionActive:h,bufferStrategy:this.bufferStrategy,shouldPreventDowngrade:g&&h?"\u26a0\ufe0f YES - healthy buffer":"no"})}catch(i){console.warn("Variant change debug logging failed:",i)}}shouldBufferPreventDowngrade(t,i){return!!i&&t>.5*(this.player?.getConfiguration()?.streaming?.bufferingGoal||10)}debugBufferingEvent(t){console.log("\u23f3 Buffering Event:",{timestamp:(new Date).toISOString(),buffering:t.buffering,currentTime:this.currentTime,bufferLength:`${this.getBufferLength().toFixed(1)}s`,loadingState:this.loadingState})}getBufferLength(){const t=this.videoElement?.nativeElement;if(!t||!t.buffered||0===t.buffered.length)return 0;try{const i=t.currentTime;for(let o=0;o<t.buffered.length;o++){const a=t.buffered.start(o),s=t.buffered.end(o);if(i>=a&&i<=s)return s-i}return 0}catch{return 0}}debugABRConfiguration(){if(this.player)try{this.player.getConfiguration(),this.player.getVariantTracks()}catch(t){console.warn("ABR configuration debug logging failed:",t)}}setupControlsAutoHide(){this.isMobile?this.setupMobileControls():this.setupDesktopControl
1s()}setupDesktopControls(){const t=this.videoElement.nativeElement.parentElement;!t||(t.addEventListener("mouseenter",()=>{this.controlsVisible=!0,clearTimeout(this.controlsTimeout)}),t.addEventListener("mouseleave",()=>{this.isFullscreen?this.startFullscreenTimer():this.controlsVisible=!1}),t.addEventListener("mousemove",()=>{this.isFullscreen&&(this.controlsVisible=!0,this.startFullscreenTimer())}))}setupMobileControls(){const t=this.videoElement.nativeElement.parentElement,i=this.videoElement.nativeElement;if(!t||!i)return;const o=a=>{const s=a.target;if(!(s.closest(".mobile-control-btn")||s.closest(".control-btn")||s.closest(".center-play-button")||s.closest(".settings-backdrop")||s.closest(".settings-bottom-sheet")||s.closest(".settings-menu"))){if(a.preventDefault(),a.stopPropagation(),this.isFullscreen)return this.togglePlay(),void this.showCenterButtonTemporarily();this.controlsVisible?this.hideMobileControls():this.showMobileControls()}};this.onVideoClick&&i.removeEventListener("click",this.onVideoClick),t.addEventListener("click",o,!0),t.addEventListener("touchend",o,!0)}showMobileControls(){this.controlsVisible=!0,clearTimeout(this.controlsTimeout),this.isFullscreen?this.startFullscreenTimer():this.isPlaying&&(this.controlsTimeout=setTimeout(()=>{this.controlsVisible=!1},3e3))}startMobileAutoHideTimer(){!this.isMobile||(clearTimeout(this.controlsTimeout),this.controlsVisible=!0,this.isPlaying&&(this.controlsTimeout=setTimeout(()=>{this.controlsVisible=!1},3e3)))}startFullscreenTimer(){clearTimeout(this.controlsTimeout),this.isFullscreen&&this.isPlaying&&(this.controlsTimeout=setTimeout(()=>{this.controlsVisible=!1},3e3))}hideMobileControls(){this.controlsVisible=!1,clearTimeout(this.controlsTimeout)}updateQualityLevels(){if(!this.player)return;const t=this.player.getVariantTracks();this.qualityLevels=t.map(i=>({id:i.id.toString(),bandwidth:i.bandwidth,width:i.width,height:i.height,label:i.height?`${i.height}p`:`${Math.round(i.bandwidth/1e3)}k`}))}updateVideoAspectRatio(){if(this.aspectRatio)return this.videoAspectRatio=this.aspectRatio,void(this.isPortraitVideo=parseFloat(this.aspectRatio)<1);const t=this.videoElement.nativeElement;if(t.videoWidth&&t.videoHeight){const i=t.videoWidth/t.videoHeight;this.videoAspectRatio=i.toFixed(4),this.isPortraitVideo=i<1,console.log(`Video dimensions: ${t.videoWidth}x${t.videoHeight}, aspect ratio: ${this.videoAspectRatio}`),console.log("Video orientation: "+(this.isPortraitVideo?"portrait":"landscape")),this.isPortraitVideo&&window.innerWidth<=768&&console.log("Portrait video detected on mobile device")}}togglePlay(){const t=this.videoElement.nativeElement;this.isPlaying?t.pause():t.play()}onVideoClick(t){t.preventDefault(),t.stopPropagation(),this.togglePlay(),this.showCenterButtonTemporarily()}showCenterButtonTemporarily(){this.centerButtonTimeout&&clearTimeout(this.centerButtonTimeout),this.showCenterButton=!0,this.centerButtonTimeout=setTimeout(()=>{this.showCenterButton=!1},1e3)}togglePlayWithButton(){this.togglePlay(),this.showCenterButtonTemporarily()}seek(t){const i=this.videoElement.nativeElement,o=parseFloat(t.target.value);if(!(isNaN(o)||o<0||o>this.duration)){this.currentTime=o;try{i.readyState>=2?i.currentTime=o:setTimeout(()=>{i.readyState>=2&&(i.currentTime=o)},100)}catch(a){console.warn("Seek operation failed:",a),setTimeout(()=>{try{i.currentTime=o}catch(s){console.error("Seek retry failed:",s)}},200)}}}toggleMute(){const t=this.videoElement.nativeElement;t.muted=!t.muted}setVolume(t){this.videoElement.nativeElement.volume=parseFloat(t.target.value)/100}setPlaybackRate(t){this.videoElement.nativeElement.playbackRate=parseFloat(t.target.value)}setQuality(t){const i=t.target.value;if(this.selectedQuality=i,"auto"===i)this.player?.configure({abr:{enabled:!0}});else{this.player?.configure({abr:{enabled:!1}});const o=this.player?.getVariantTracks().find(a=>a.id.toString()===i);o&&this.player?.selectVariantTrack(o)}}toggleSettingsMenu(){this.showSettingsMenu=!this.showSettingsMenu,this.showSettingsMenu&&(this.settingsMenuType="main")}closeSettingsMenu(){this.showSettingsMenu=!1}openSpeedMenu(){this.settingsMenuType="speed"}openQualityMenu(){this.settingsMenuType="quality"}backToMainMenu(){this.settingsMenuType="main"}selectSpeed(t){this.videoElement.nativeElement.playbackRate=t,this.playbackRate=t,this.showSettingsMenu=!1}selectQuality(t){this.selectedQuality=t;
1try{const i=this.duration<=120,o=i||"auto"!==t;if("auto"===t)this.player?.configure({abr:{enabled:!0}});else{this.player?.configure({abr:{enabled:!1}});const a=this.player?.getVariantTracks().find(s=>s.id.toString()===t);a&&(this.player?.selectVariantTrack(a,o),console.log(o?`\u{1f680} Fast quality switch to ${t} (clearing buffer for ${i?"short":"manual"} selection)`:`\u{1f504} Smooth quality switch to ${t} (preserving buffer)`))}}catch(i){console.error("Quality selection failed:",i);const o=i instanceof Error?i.message:String(i);(o.includes("appendBuffer")||o.includes("SourceBuffer")||o.includes("memory"))&&(console.warn("Browser memory limit reached, falling back to auto quality"),this.selectedQuality="auto",this.player?.configure({abr:{enabled:!0}})),this.isBuffering=!1,this.loadingState="ready"}this.showSettingsMenu=!1}getQualityLabel(){if("auto"===this.selectedQuality)return"Auto";const t=this.qualityLevels.find(i=>i.id===this.selectedQuality);return t?t.label:"Auto"}checkMobileDevice(){this.isMobile=window.innerWidth<=768}toggleFullscreen(){this.isFullscreen?this.exitFullscreen():this.enterFullscreen(),setTimeout(()=>{this.isFullscreen?this.startFullscreenTimer():(clearTimeout(this.controlsTimeout),this.isMobile||(this.controlsVisible=!0))},100)}enterFullscreen(){var t=this;return(0,n.Z)(function*(){try{if(t.isIOS()){const o=t.videoElement.nativeElement;return o.webkitEnterFullscreen?void o.webkitEnterFullscreen():void console.warn("webkitEnterFullscreen not supported on this iOS device")}const i=t.videoElement.nativeElement.parentElement;if(!i)return;if(!t.isFullscreenSupported())return void console.warn("Fullscreen not supported in this browser");i.requestFullscreen?yield i.requestFullscreen():i.webkitRequestFullscreen?yield i.webkitRequestFullscreen():i.mozRequestFullScreen?yield i.mozRequestFullScreen():i.msRequestFullscreen&&(yield i.msRequestFullscreen()),t.document.body.style.overflow="hidden",t.isMobile&&!t.isPortraitVideo&&!t.isIOS()&&(yield t.lockToLandscape())}catch(i){console.error("Failed to enter fullscreen:",i)}})()}exitFullscreen(){var t=this;return(0,n.Z)(function*(){try{if(t.isIOS()){const i=t.videoElement.nativeElement;return i.webkitExitFullscreen?void i.webkitExitFullscreen():void console.warn("webkitExitFullscreen not supported on this iOS device")}t.isMobile&&null!==t.originalOrientation&&(yield t.unlockOrientation()),t.document.exitFullscreen?yield t.document.exitFullscreen():t.document.webkitExitFullscreen?yield t.document.webkitExitFullscreen():t.document.mozCancelFullScreen?yield t.document.mozCancelFullScreen():t.document.msExitFullscreen&&(yield t.document.msExitFullscreen())}catch(i){console.error("Failed to exit fullscreen:",i)}})()}isFullscreenSupported(){const t=this.document;return!!(t.fullscreenEnabled||t.webkitFullscreenEnabled||t.mozFullScreenEnabled||t.msFullscreenEnabled)}isIOS(){return/iPad|iPhone|iPod/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1}isOrientationLockSupported(){return!(!screen.orientation||!screen.orientation.lock)}lockToLandscape(){var t=this;return(0,n.Z)(function*(){if(t.isOrientationLockSupported()&&t.isMobile)try{screen.orientation&&screen.orientation.type&&(t.originalOrientation=screen.orientation.type),yield screen.orientation.lock("landscape-primary"),console.log("\u{1f504} Screen orientation locked to landscape for fullscreen video")}catch(i){console.warn("\u26a0\ufe0f Failed to lock screen orientation:",i)}})()}unlockOrientation(){var t=this;return(0,n.Z)(function*(){if(t.isOrientationLockSupported()&&t.isMobile)try{screen.orientation&&screen.orientation.unlock&&(screen.orientation.unlock(),console.log("\u{1f504} Screen orientation unlocked, restored to natural rotation")),t.originalOrientation=null}catch(i){console.warn("\u26a0\ufe0f Failed to unlock screen orientation:",i)}})()}retry(){this.loadVideo()}formatTime(t){if(!t||isNaN(t))return"0:00";const i=Math.floor(t/3600),o=Math.floor(t%3600/60),a=Math.floor(t%60);return i>0?`${i}:${o.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}`:`${o}:${a.toString().padStart(2,"0")}`}handleError(t){const i=this.videoElement.nativeElement,a=i.duration;if(console.error("\u{1f6a8} Component Error Handler:",{code:t.code,message:t.message,currentTime:i.currentTime.toFixed(2)+"s",duration:a?a.toFixed(2)+"s":"unknown",isPlaying:this.isPlaying,isLoading:this.isLoading,timestamp:(new Date).toISOString()}),this.isRecoverableError(t))return console.warn("\u{1f504} Recoverable error - attempting to continue playback:",t.message),void this.attemptErrorRecovery(t);console.error("\u274c Critical error - stopping playback:",t.message),this.isLoading=!1,this.errorMessage=t.message||"An error occurred while loading the video",this.error.emit({code:t.code||0,message:this.errorMessage,data:t})}isRecoverableError(t){return!(!t||!t.code||![1001,1002,1003,1004,1005,1006,1007,2001,2002,2003,3001,3002,3003,3004,3005,3007,3014,3016,3017,3018,3019,4e3,4001,4003,8001,8002,8003,8004,9001,9002,9003].includes(t.code)&&(1===t.severity?(console.warn(`\u{1f7e1}
1 Unknown recoverable error code ${t.code} (severity ${t.severity}) - using fallback logic`),0):!(3===t.category&&t.severity<3?(console.warn(`\u{1f7e1} Unknown media error code ${t.code} (category ${t.category}, severity ${t.severity}) - using fallback logic`),!0):1===t.category&&t.severity<3&&(console.warn(`\u{1f7e1} Unknown network error code ${t.code} (category ${t.category}, severity ${t.severity}) - using fallback logic`),!0))))}attemptErrorRecovery(t){const i=this.videoElement.nativeElement;switch(console.log("\u{1f527} Attempting error recovery for code:",t.code),t.code){case 3016:case 3017:setTimeout(()=>{i.paused&&!i.ended&&this.currentTime<this.duration&&(console.log("\u{1f680} Attempting playback resume after segment error"),i.play().catch(o=>{console.warn("Recovery play failed:",o),this.currentTime+.5<this.duration&&(i.currentTime=this.currentTime+.5,i.play().catch(a=>console.warn("Seek recovery failed:",a)))}))},1e3);break;case 1001:case 1002:case 1003:setTimeout(()=>{i.readyState<3&&!i.ended&&(console.log("\u{1f310} Network error recovery - attempting reload"),this.loadVideo())},2e3);break;case 3001:case 3002:setTimeout(()=>{i.paused&&!i.ended&&(console.log("\u{1f4fa} Media source error recovery"),i.play().catch(o=>console.warn("MSE recovery failed:",o)))},1500);break;default:setTimeout(()=>{i.paused&&!i.ended&&this.currentTime<this.duration&&(console.log("\u{1f504} Generic error recovery - resuming playback"),i.play().catch(o=>console.warn("Generic recovery failed:",o)))},1e3)}}getBufferHealthColor(t){return t>=80?this.bufferHealthColors.healthy:t>=40?this.bufferHealthColors.warning:this.bufferHealthColors.critical}simulateLoadingProgress(){this.loadingProgress=0;const t=setInterval(()=>{if("initial"!==this.loadingState||this.loadingProgress>=95)return void clearInterval(t);const i=Math.floor(15*Math.random())+5;this.loadingProgress=Math.min(this.loadingProgress+i,95),this.loadingProgress>=95&&clearInterval(t)},200)}updateBufferingProgress(){if(!this.isBuffering)return;let t=0;const i=setInterval(()=>{this.isBuffering?(t+=10*Math.random(),this.bufferingProgress=Math.round(Math.min(t,95)),t>=95&&clearInterval(i)):clearInterval(i)},300)}startBufferHealthMonitoring(){this.bufferHealthInterval=setInterval(()=>{this.showBufferHealth&&this.player&&"function"==typeof this.player.getBufferFullness&&(this.bufferHealth=Math.round(100*this.player.getBufferFullness())),this.updateBufferedProgress()},500)}updateBufferedProgress(){const t=this.videoElement.nativeElement;if(!t||!t.buffered||0===t.buffered.length||!this.duration)return this.bufferedEnd=0,void(this.bufferedProgress=0);const i=t.currentTime;let o=0;for(let a=0;a<t.buffered.length;a++){const s=t.buffered.start(a),g=t.buffered.end(a);(i>=s&&i<=g||s>=i)&&(o=Math.max(o,g))}if(0===o)for(let a=0;a<t.buffered.length;a++)o=Math.max(o,t.buffered.end(a));this.bufferedEnd=o,this.bufferedProgress=Math.min(o/this.duration*100,100)}startNetworkMonitoring(){this.bandwidthMonitorInterval&&clearInterval(this.bandwidthMonitorInterval),this.bandwidthMonitorInterval=setInterval(()=>{this.updateBandwidthStats()},3e3)}updateBandwidthStats(){if(this.player)try{const t=this.player.getStats();t&&t.estimatedBandwidth&&(this.currentBandwidth=t.estimatedBandwidth,this.updateBandwidthHistory(t.estimatedBandwidth),this.calculateNetworkStability(),this.enableBandwidthStats&&this.bandwidthHistory.length%3==0&&this.debugBandwidthMeasurement(t))}catch(t){console.warn("Failed to get bandwidth stats:",t)}}debugBandwidthMeasurement(t){if(this.player)try{const i=this.player.getVariantTracks().find(a=>a.active),o=this.player.getVariantTracks();console.log("\u{1f4ca} Bandwidth Stats:",{timestamp:(new Date).toISOString(),estimatedBandwidth:`${Math.round(t.estimatedBandwidth/1e3)}k`,currentQuality:i?`${i.height}p (${Math.round(i.bandwidth/1e3)}k required)`:"unknown",bandwidthUtilization:i?`${(i.bandwidth/t.estimatedBandwidth*100).toFixed(1)}%`:"unknown",networkStability:this.networkStability.toFixed(2),networkStatus:this.networkStatus,bufferLength:`${this.getBufferLength().toFixed(1)}s`,availableQualities:o.map(a=>`${a.height}p(${Math.round(a.bandwidth/1e3)}k)`).join(", "),canUpgradeToNext:this.canUpgradeToNextQuality(t.estimatedBandwidth,o,i)})}catch(i){console.warn("Bandwidth debug logging failed:",i)}}canUpgradeToNextQuality(t,i,o){if(!o)return"unknown";const a=i.filter(_=>_.bandwidth>o.bandwidth).sort((_,T)=>_.bandwidth-T.bandwidth);if(0===a.length)return"at max quality";const s=a[0],f=this.player.getConfiguration().abr?.bandwidthUpgradeTarget||.85,h=s.bandwidth/f;return t>=h?`\u2705 Yes to ${s.height}p (need ${Math.round(h/1e3)}k, have ${Math.round(t/1e3)}k)`:`\u274c No to ${s.height}p (need ${Math.round(h/1e3)}k, have ${Math.round(t/1e3)}k)`}updateBandwidthHistory(t){this.bandwidthHistory.push(t),this.bandwidthHistory.length>20&&this.bandwidthHistory.shift()}calculateNetworkStability(){if(this.bandwidthHistory.length<3)return this.networkStability=1,void(this.networkStatus="stable");const t=this.bandwidthHistory.reduce((s,g)=>s+g,0)/this.bandwidthHistory.length,i=this.bandwidthHistory.reduce((s,g)=>s+Math.pow(g-t,2),0)/this.bandwidthHistory.length,a=Math.sqrt(i)/t;this.networkStability=Math.max(0,1-a),this.networkStatus=this.networkStability>.8?"stable":this.networkStability>.5?"moderate":"unstable",this.adaptAbrToNetworkStability()}adaptAbrToNetworkStability(){if(!this.player)return;const t={};"stable"===this.networkStatus?(t.bandwidthUpgradeTarget=.7,t.bandwidthDowngradeTarget=.9):"moderate"===this.networkStatus?(t.bandwidthUpgradeTarget=.75,t.bandwidthDowngradeTarget=.85):(t.bandwidthUpgradeTarget=.85,t.bandwidthDowngradeTarget=.75);try{this.player.configure({abr:t})}catch(i){console.warn("Failed to adapt ABR configuration:",i)}}cleanup(){this.controlsTimeout&&clearTimeout(this.controlsTimeout),this.centerButtonTimeout&&clearTimeout(this.centerButtonTimeout),this.bufferHealthInterval&&clearInterval(this.bufferHealthInterval),this.bandwidthMonitorInterval&&clearInterval(this.bandwidthMonitorInterval),this.player&&this.player.destroy(),this.exitFullscreen()}}return r.\u0275fac=function(t){return new(t||r)(e.Y36(U),e.Y36(b.K0))},r.\u0275cmp=e.Xpm({type:r,selectors:[["lib-shaka-player"]],viewQuery:function(t,i){if(1&t&&e.Gf(P,7),2&t){let o;e.iGM(o=e.CRH())&&(i.videoElement=o.first)}},hostBindings:function(t,i){1&t&&e.NdJ("fullscreenchange",function(a){return i.onFullscreenChange(a)},!1,e.evT)("webkitfullscreenchange",function(a){return i.onFullscreenChange(a)},!1,e.evT)("mozfullscreenchange",function(a){return i.onFullscreenChange(a)},!1,e.evT)("MSFullscreenChange",function(a){return i.onFullscreenChange(a)},!1,e.evT)("orientationchange",function(a){return i.onOrientationChange(a)},!1,e.Jf7)("resize",function(a){return i.onOrientationChange(a)},!1,e.Jf7)("click",function(a){return i.onDocumentClick(a)},!1,e.evT)},inputs:{src:"src",autoplay:"autoplay",muted:"muted",poster:"poster",hideControls:"hideControls",aspectRatio:"aspectRatio",loadingColor:"loadingColor",bufferingColor:"bufferingColor",bufferHealthColors:"bufferHealthColors",loadingTextColor:"loadingTextColor",loadingBackgroun
1dColor:"loadingBackgroundColor",showBufferHealth:"showBufferHealth",bufferHealthPosition:"bufferHealthPosition",enableBandwidthStats:"enableBandwidthStats",qualityFloor:"qualityFloor",qualityFloorVideoLength:"qualityFloorVideoLength"},outputs:{playerReady:"playerReady",error:"error",play:"play",pause:"pause"},decls:38,vars:44,consts:[[1,"shaka-player-container"],[1,"video-wrapper"],["playsinline","",1,"shaka-video",3,"poster","muted","autoplay","click"],["videoElement",""],["class","center-play-button",3,"show","playing","mobile-persistent","click",4,"ngIf"],["class","mobile-top-controls",3,"hide-controls",4,"ngIf"],[1,"shaka-controls"],[1,"control-bar"],[1,"control-btn","play-pause",3,"click"],[1,"fas"],[1,"progress-container"],["class","buffer-health-bar",4,"ngIf"],[1,"progress-track"],[1,"progress-background"],[1,"progress-buffered"],[1,"progress-current"],["type","range","step","1",1,"progress-input",3,"value","max","input"],["class","progress-thumb",3,"left",4,"ngIf"],[1,"time-display"],["class","buffer-health-text",4,"ngIf"],[1,"volume-control"],[1,"control-btn","volume-btn",3,"click"],[1,"control-btn","settings-btn",3,"click"],[1,"fas","fa-cog"],[1,"control-btn","fullscreen-btn",3,"click"],[1,"fullscreen-icon"],[1,"corner","top-left"],[1,"corner","top-right"],[1,"corner","bottom-left"],[1,"corner","bottom-right"],["class","settings-backdrop",3,"click",4,"ngIf"],["class","settings-menu",4,"ngIf"],["class","settings-bottom-sheet",3,"show",4,"ngIf"],["class","loading-indicator",4,"ngIf"],["class","error-display",4,"ngIf"],[1,"center-play-button",3,"click"],[1,"center-button-icon"],[1,"mobile-top-controls"],[1,"mobile-control-btn","volume-btn",3,"click"],[1,"mobile-control-btn","settings-btn",3,"click"],[1,"buffer-health-bar"],[1,"buffer-health-fill"],[1,"progress-thumb"],[1,"buffer-health-text"],[1,"settings-backdrop",3,"click"],[1,"settings-menu"],["class","settings-panel",4,"ngIf"],[1,"settings-panel"],[1,"settings-item",3,"click"],[1,"settings-value"],[1,"arrow"],["class","settings-item",3,"click",4,"ngIf"],[1,"settings-header",3,"click"],[1,"back-arrow"],["class","settings-item",3,"active","click",4,"ngFor","ngForOf"],["class","check",4,"ngIf"],[1,"check"],[1,"settings-bottom-sheet"],[1,"bottom-sheet-handle"],[1,"loading-indicator"],[1,"progress-circle"],["width","88","height","88","viewBox","0 0 88 88",1,"progress-ring"],["cx","44","cy","44","r","34",1,"progress-background-circle"],["cx","44","cy","44","r","32","fill","transparent","stroke","rgba(255,255,255,0.2)","stroke-width","4",1,"progress-ring-background"],["cx","44","cy","44","r","32","fill","transparent","stroke-width","4","stroke-linecap","round",1,"progress-ring-progress"],[1,"progress-text"],[1,"progress-percentage"],[1,"error-display"],[3,"click"]],template:function(t,i){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"video",2,3),e.NdJ("click",function(a){return i.onVideoClick(a)}),e.qZA(),e.YNc(4,x,3,10,"div",4),e.YNc(5,k,5,6,"div",5),e.TgZ(6,"div",6)(7,"div",7)(8,"button",8),e.NdJ("click",function(){return i.togglePlayWithButton()}),e._UZ(9,"i",9),e.qZA(),e.TgZ(10,"div",10),e.YNc(11,v,2,4,"div",11),e.TgZ(12,"div",12),e._UZ(13,"div",13)(14,"div",14)(15,"div",15),e.TgZ(16,"input",16),e.NdJ("input",function(a){return i.seek(a)}),e.qZA(),e.YNc(17,y,1,2,"div",17),e.qZA(),e.YNc(18,M,2,4,"div",11),e.TgZ(19,"div",18),e._uU(20),e.YNc(21,O,2,1,"span",19),e.qZA()(),e.TgZ(22,"div",20)(23,"button",21),e.NdJ("click",function(){return i.toggleMute()}),e._UZ(24,"i",9),e.qZA()(),e.TgZ(25,"button",22),e.NdJ("click",function(a){return i.toggleSettingsMenu(),a.stopPropagation()}),e._UZ(26,"i",23),e.qZA(),e.TgZ(27,"button",24),e.NdJ("click",function(){return i.toggleFullscreen()}),e.TgZ(28,"div",25),e._UZ(29,"div",26)(30,"div",27)(31,"div",28)(32,"div",29),e.qZA()()()(),e.YNc(33,S,1,0,"div",30),e.YNc(34,q,4,4,"div",31),e.YNc(35,$,5,5,"div",32),e.YNc(36,j,9,11,"div",33),e.YNc(37,V,5,1,"div",34),e.qZA()()),2&t&&(e.Udp("--video-aspect-ratio",i.videoAspectRatio),e.ekj("portrait-video",i.isPortraitVideo),e.xp6(2),e.Q6J("poster",i.poster,e.LSH)("muted",i.muted)("autoplay",i.autoplay),e.xp6(2),e.Q6J("ngIf",i.isMobile?!i.isLoading&&!i.isBuffering&&i.controlsVisible:!i.isLoading&&!i.isBuffering&&i.showCenterButton),e.xp6(1),e.Q6J("ngIf",i.isMobile),e.xp6(1),e.ekj("hide-control
1s",!i.controlsVisible),e.xp6(2),e.ekj("desktop-only",i.isMobile),e.xp6(1),e.ekj("fa-play",!i.isPlaying)("fa-pause",i.isPlaying),e.xp6(2),e.Q6J("ngIf",i.showBufferHealth&&"above-progress"===i.bufferHealthPosition&&!i.isLoading&&!i.isBuffering),e.xp6(3),e.Udp("width",i.bufferedProgress,"%"),e.xp6(1),e.Udp("width",i.duration?i.currentTime/i.duration*100:0,"%"),e.xp6(1),e.Q6J("value",i.currentTime)("max",i.duration),e.xp6(1),e.Q6J("ngIf",i.isMobile),e.xp6(1),e.Q6J("ngIf",i.showBufferHealth&&"below-progress"===i.bufferHealthPosition&&!i.isLoading&&!i.isBuffering),e.xp6(2),e.AsE(" ",i.formatTime(i.currentTime)," / ",i.formatTime(i.duration)," "),e.xp6(1),e.Q6J("ngIf",i.showBufferHealth&&!i.isLoading&&!i.isBuffering),e.xp6(1),e.ekj("desktop-only",i.isMobile),e.xp6(2),e.ekj("fa-volume-up",!i.isMuted)("fa-volume-mute",i.isMuted),e.xp6(1),e.ekj("desktop-only",i.isMobile),e.xp6(3),e.ekj("exit-fullscreen",i.isFullscreen),e.xp6(5),e.Q6J("ngIf",i.showSettingsMenu&&i.isMobile),e.xp6(1),e.Q6J("ngIf",i.showSettingsMenu&&!i.isMobile),e.xp6(1),e.Q6J("ngIf",i.showSettingsMenu&&i.isMobile),e.xp6(1),e.Q6J("ngIf",i.isLoading||i.isBuffering),e.xp6(1),e.Q6J("ngIf",i.errorMessage))},dependencies:[b.O5,b.sg],styles:["[_nghost-%COMP%]{--loading-color: var(--shaka-loading-color, #007bff);--buffering-color: var(--shaka-buffering-color, #ffc107);--buffer-healthy-color: var(--shaka-buffer-healthy, #28a745);--buffer-warning-color: var(--shaka-buffer-warning, #ffc107);--buffer-critical-color: var(--shaka-buffer-critical, #dc3545);--loading-text-color: var(--shaka-loading-text, #ffffff);--loading-bg-color: var(--shaka-loading-bg, rgba(0,0,0,.8))}.shaka-player-container[_ngcontent-%COMP%]{position:relative;width:90%;max-width:1000px;background:#000;border-radius:8px;overflow:hidden;display:flex;justify-content:center;margin-inline:auto}.video-wrapper[_ngcontent-%COMP%]{position:relative;width:100%}.shaka-player-container[_ngcontent-%COMP%]:fullscreen{width:100vw;height:100vh;border-radius:0;background:#000}.shaka-player-container[_ngcontent-%COMP%]:-webkit-full-screen{width:100vw;height:100vh;border-radius:0;background:#000}.shaka-player-container[_ngcontent-%COMP%]:-moz-full-screen{width:100vw;height:100vh;border-radius:0;background:#000}.shaka-player-container[_ngcontent-%COMP%]:-ms-fullscreen{width:100vw;height:100vh;border-radius:0;background:#000}.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:100%;margin:0 auto}.shaka-player-container[_ngcontent-%COMP%]:fullscreen   .video-wrapper[_ngcontent-%COMP%], .shaka-player-container[_ngcontent-%COMP%]:-webkit-full-screen   .video-wrapper[_ngcontent-%COMP%], .shaka-player-container[_ngcontent-%COMP%]:-moz-full-screen   .video-wrapper[_ngcontent-%COMP%], .shaka-player-container[_ngcontent-%COMP%]:-ms-fullscreen   .video-wrapper[_ngcontent-%COMP%]{aspect-ratio:unset;height:100vh}.shaka-video[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:contain;background:#000}.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .shaka-video[_ngcontent-%COMP%]{object-fit:contain;max-width:100%;max-height:100%}.center-play-button[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:100;opacity:0;visibility:hidden;transition:opacity .3s ease,visibility .3s ease,transform .2s ease;pointer-events:none}.center-play-button.show[_ngcontent-%COMP%]{opacity:1;visibility:visible}.center-button-icon[_ngcontent-%COMP%]{width:80px;height:80px;background:rgba(0,0,0,.6);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 20px #0000004d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:2px solid rgba(255,255,255,.2)}.center-play-button[_ngcontent-%COMP%]   .icon[_ngcontent-%COMP%]{font-size:28px;color:#fff;display:block;line-height:1}.center-play-button.show[_ngcontent-%COMP%]   .center-button-icon[_ngcontent-%COMP%]{transform:scale(1);animation:centerButtonPulse .3s ease-out}@keyframes centerButtonPulse{0%{transform:scale(.8)}50%{transform:scale(1.1)}to{transform:scale(1)}}.shaka-controls[_ngcontent-%COMP%]{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,rgba(0,0,0,.8));padding:20px 16px 16px;transition:opacity .3s ease}
1.shaka-controls.hide-controls[_ngcontent-%COMP%]{opacity:0;pointer-events:none}.control-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;color:#fff}.control-btn[_ngcontent-%COMP%]{background:none;border:none;color:#fff;cursor:pointer;padding:8px;border-radius:4px;transition:background-color .2s;min-width:40px;height:40px;display:flex;align-items:center;justify-content:center}.control-btn[_ngcontent-%COMP%]:hover{background-color:#fff3}.icon[_ngcontent-%COMP%]{font-size:16px;display:block}.progress-container[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px}.progress-track[_ngcontent-%COMP%]{position:relative;width:100%;height:4px;border-radius:2px;overflow:hidden}.progress-background[_ngcontent-%COMP%]{position:absolute;width:100%;height:100%;background:rgba(255,255,255,.3);border-radius:2px;z-index:1}.progress-buffered[_ngcontent-%COMP%]{position:absolute;height:100%;background:rgba(255,255,255,.5);border-radius:2px;z-index:2;transition:width .3s ease}.progress-current[_ngcontent-%COMP%]{position:absolute;height:100%;background:var(--loading-color, #007bff);border-radius:2px;z-index:3;transition:width .1s ease}.progress-input[_ngcontent-%COMP%]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:4;margin:0;padding:0}.progress-input[_ngcontent-%COMP%]::-webkit-slider-thumb{appearance:none;width:12px;height:12px;background:#fff;border-radius:50%;cursor:pointer;opacity:1;box-shadow:0 2px 4px #0000004d}.progress-input[_ngcontent-%COMP%]::-moz-range-thumb{width:12px;height:12px;background:#fff;border-radius:50%;cursor:pointer;border:none;box-shadow:0 2px 4px #0000004d}.progress-thumb[_ngcontent-%COMP%]{width:18px;height:18px;background:#fff;border-radius:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:5;box-shadow:0 2px 8px #0000004d;border:2px solid var(--loading-color, #007bff);pointer-events:none;transition:transform .1s ease}.time-display[_ngcontent-%COMP%]{font-size:12px;color:#fffc;margin-top:4px}.volume-control[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.volume-slider[_ngcontent-%COMP%]{width:60px;height:4px}.control-select[_ngcontent-%COMP%]{background:rgba(0,0,0,.8);color:#fff;border:1px solid rgba(255,255,255,.3);border-radius:4px;padding:4px 8px;font-size:12px;cursor:pointer}.loading-indicator[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:200;width:88px;height:88px;display:flex;align-items:center;justify-content:center}.progress-circle[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;justify-content:center;width:88px;height:88px}.progress-ring[_ngcontent-%COMP%]{transform:rotate(-90deg);transform-origin:center center;overflow:visible;position:relative;z-index:2}.progress-ring-progress[_ngcontent-%COMP%]{transition:stroke-dashoffset .3s ease,stroke .3s ease}.progress-text[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:var(--loading-text-color);z-index:3}.progress-percentage[_ngcontent-%COMP%]{font-size:18px;font-weight:700;line-height:1;margin:0;padding:0}.buffer-health-bar[_ngcontent-%COMP%]{height:3px;background:rgba(255,255,255,.2);border-radius:2px;overflow:hidden;margin:2px 0}.buffer-health-fill[_ngcontent-%COMP%]{height:100%;transition:width .3s ease,background-color .3s ease;border-radius:2px}.buffer-health-text[_ngcontent-%COMP%]{font-size:10px;opacity:.7;margin-left:8px}.settings-menu[_ngcontent-%COMP%]{position:absolute;bottom:60px;right:16px;background:rgba(28,28,28,.95);border-radius:8px;min-width:220px;max-height:300px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 8px 32px #0009;z-index:99999;border:1px solid rgba(255,255,255,.1);overflow-y:auto;overflow-x:hidden}.settings-panel[_ngcontent-%COMP%]{color:#fff;position:relative;z-index:10000}.settings-header[_ngcontent-%COMP%]{padding:12px 16px;font-weight:500;border-bottom:1px solid rgba(255,255,255,.1);cursor:pointer;display:flex;align-items:center;font-size:12px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.settings-header[_ngcontent-%COMP%]:hover{background:rgba(255,255,255,.05)}.back-arrow[_ngcontent-%COMP%]{margin-right:8px;font-size:14px}.settings-item[_ngcontent-%COMP%]{padding:10px 16px;display:flex;justify-content:space-between;align-items:center;cursor:pointer;font-size:12px;transition:background-color .2s;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;position:relative;z-index:10001;min-height:40px}.settings-item[_ngcontent-%COMP%]:hover{background:rgba(255,255,255,.1)}.settings-item.active[_ngcontent-%COMP%]{color:var(--loading-color, #007bff)}.settings-value[_ngcontent-%COMP%]{display:flex;align-items:center;opacity:.8;font-size:11px;pointer-events:none}.arrow[_ngcontent-%COMP%]{margin-left:8px;font-size:14px}.check[_ngcontent-%COMP%]{color:var(--loading-color, #007bff);font-weight:700}.error-display[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;color:#fff;background:rgba(255,0,0,.8);padding:20px;border-radius:8px}.error-display[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]{background:white;color:#000;border:none;padding:8px 16px;border-radius:4px;cursor:pointer;margin-top:10px}.settings-backdrop[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.6);z-index:99998;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.settings-bottom-sheet[_ngcontent-%COMP%]{position:fixed;bottom:32px;left:16px;right:16px;background:rgba(28,28,28,.98);border-radius:16px;max-height:60vh;z-index:99999;transform:translateY(calc(100% + 32px));transition:transform .3s cubic-bezier(.4,0,.2,1);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.1)}.settings-bottom-sheet.show[_ngcontent-%COMP%]{transform:translateY(0)}.bottom-sheet-handle[_ngcontent-%COMP%]{width:32px;height:4px;background:rgba(255,255,255,.3);border-radius:2px;margin:12px auto 8px}.settings-bottom-sheet[_ngcontent-%COMP%]   .settings-item[_ngcontent-%COMP%]{font-size:18px;padding:14px;min-height:48px}.settings-bottom-sheet[_ngcontent-%COMP%]   .settings-header[_ngcontent-%COMP%]{font-size:18px;padding:14px}.settings-bottom-sheet[_ngcontent-%COMP%]   .settings-value[_ngcontent-%COMP%]{font-size:15px}.mobile-top-controls[_ngcontent-%COMP%]{position:absolute;top:16px;right:16px;display:flex;gap:12px;z-index:100;transition:opacity .3s ease}
1.mobile-top-controls.hide-controls[_ngcontent-%COMP%]{opacity:0;pointer-events:none}.mobile-control-btn[_ngcontent-%COMP%]{background:rgba(0,0,0,.6);border:none;color:#fff;cursor:pointer;padding:10px;border-radius:50%;transition:background-color .2s;width:44px;height:44px;display:flex;align-items:center;justify-content:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.mobile-control-btn[_ngcontent-%COMP%]:hover{background:rgba(0,0,0,.8)}.mobile-control-btn[_ngcontent-%COMP%]   .icon[_ngcontent-%COMP%]{font-size:16px}.center-play-button.mobile-persistent[_ngcontent-%COMP%]{pointer-events:auto;z-index:150}.center-play-button.mobile-persistent[_ngcontent-%COMP%]   .center-button-icon[_ngcontent-%COMP%]{width:64px;height:64px;background:rgba(0,0,0,.7);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:2px solid rgba(255,255,255,.3)}.center-play-button.mobile-persistent[_ngcontent-%COMP%]   .icon[_ngcontent-%COMP%]{font-size:24px}.fas[_ngcontent-%COMP%]{color:#fff;font-size:16px}.fullscreen-icon[_ngcontent-%COMP%]{width:16px;height:16px;position:relative;display:flex;align-items:center;justify-content:center}.fullscreen-icon[_ngcontent-%COMP%]   .corner[_ngcontent-%COMP%]{position:absolute;width:5px;height:5px;border:2px solid white;transition:all .2s ease}.fullscreen-icon[_ngcontent-%COMP%]   .top-left[_ngcontent-%COMP%]{top:0;left:0;border-right:none;border-bottom:none}.fullscreen-icon[_ngcontent-%COMP%]   .top-right[_ngcontent-%COMP%]{top:0;right:0;border-left:none;border-bottom:none}.fullscreen-icon[_ngcontent-%COMP%]   .bottom-left[_ngcontent-%COMP%]{bottom:0;left:0;border-right:none;border-top:none}.fullscreen-icon[_ngcontent-%COMP%]   .bottom-right[_ngcontent-%COMP%]{bottom:0;right:0;border-left:none;border-top:none}.fullscreen-icon.exit-fullscreen[_ngcontent-%COMP%]   .top-left[_ngcontent-%COMP%]{top:2px;left:2px;border-left:none;border-top:none;border-right:2px solid white;border-bottom:2px solid white}.fullscreen-icon.exit-fullscreen[_ngcontent-%COMP%]   .top-right[_ngcontent-%COMP%]{top:2px;right:2px;border-right:none;border-top:none;border-left:2px solid white;border-bottom:2px solid white}.fullscreen-icon.exit-fullscreen[_ngcontent-%COMP%]   .bottom-left[_ngcontent-%COMP%]{bottom:2px;left:2px;border-left:none;border-bottom:none;border-right:2px solid white;border-top:2px solid white}.fullscreen-icon.exit-fullscreen[_ngcontent-%COMP%]   .bottom-right[_ngcontent-%COMP%]{bottom:2px;right:2px;border-right:none;border-bottom:none;border-left:2px solid white;border-top:2px solid white}@media (max-width: 768px){.mobile-control-btn[_ngcontent-%COMP%]{min-width:44px;min-height:44px;width:48px;height:48px}.center-play-button.mobile-persistent[_ngcontent-%COMP%]   .center-button-icon[_ngcontent-%COMP%]{min-width:64px;min-height:64px}.control-btn[_ngcontent-%COMP%]{min-width:44px;min-height:44px}.progress-input[_ngcontent-%COMP%]::-webkit-slider-thumb{opacity:0;width:24px;height:24px}.progress-input[_ngcontent-%COMP%]::-moz-range-thumb{opacity:0;width:24px;height:24px}.progress-thumb[_ngcontent-%COMP%]{width:20px;height:20px;border:3px solid var(--loading-color, #007bff);box-shadow:0 3px 12px #0006}.progress-container[_ngcontent-%COMP%]{padding:18px 0;margin:-18px 0}.progress-input[_ngcontent-%COMP%]{height:40px;margin-top:-18px}.mobile-control-btn[_ngcontent-%COMP%]   .fas[_ngcontent-%COMP%]{font-size:18px}.center-play-button[_ngcontent-%COMP%]   .fas[_ngcontent-%COMP%]{font-size:24px}}.desktop-only[_ngcontent-%COMP%]{display:flex!important}@media (max-width: 768px){.desktop-only[_ngcontent-%COMP%]{display:none!important}}@media (max-width: 768px){.video-wrapper[_ngcontent-%COMP%]{max-height:60vh}.loading-indicator[_ngcontent-%COMP%], .progress-circle[_ngcontent-%COMP%], .progress-ring[_ngcontent-%COMP%]{width:78px;height:78px}.progress-ring[_ngcontent-%COMP%]   circle[_ngcontent-%COMP%]{cx:39;cy:39}.progress-ring[_ngcontent-%COMP%]   .progress-background-circle[_ngcontent-%COMP%]{r:30;cx:39;cy:39}.progress-ring[_ngcontent-%COMP%]   .progress-ring-background[_ngcontent-%COMP%], .progress-ring[_ngcontent-%COMP%]   .progress-ring-progress[_ngcontent-%COMP%]{r:28;cx:39;cy:39}.progress-ring[_ngcontent-%COMP%]{viewBox:0 0 78 78}.progress-percentage[_ngcontent-%COMP%]{font-size:16px;line-height:1;margin:0;padding:0}.buffer-health-text[_ngcontent-%COMP%]{display:none}.settings-menu[_ngcontent-%COMP%]{position:absolute;right:8px;bottom:50px;min-width:180px;max-height:250px;z-index:99999}.settings-menu.mobile-hidden[_ngcontent-%COMP%]{display:none}.settings-item[_ngcontent-%COMP%], .settings-header[_ngcontent-%COMP%]{padding:12px;font-size:12px}.settings-value[_ngcontent-%COMP%]{font-size:10px}}@media (max-height: 600px){.settings-menu[_ngcontent-%COMP%]{position:absolute;bottom:45px;max-height:200px;right:4px;z-index:99999}.settings-item[_ngcontent-%COMP%]{padding:8px 12px;min-height:36px}.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:70vw;max-height:80vh;margin:0 auto}.control-bar[_ngcontent-%COMP%]{gap:8px}
1.control-btn[_ngcontent-%COMP%]{min-width:36px;height:36px;padding:6px}.volume-control[_ngcontent-%COMP%], .volume-slider[_ngcontent-%COMP%]{display:none}.time-display[_ngcontent-%COMP%]{font-size:10px}.control-select[_ngcontent-%COMP%]{font-size:11px;padding:2px 6px}}@media (orientation: portrait) and (max-width: 768px){.video-wrapper[_ngcontent-%COMP%]{max-height:50vh}.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:80vw;max-height:70vh;margin:0 auto}.loading-indicator[_ngcontent-%COMP%], .progress-circle[_ngcontent-%COMP%]{width:78px;height:78px}.progress-ring[_ngcontent-%COMP%]{transform:rotate(-90deg);transform-origin:center center}}@media (orientation: landscape) and (max-width: 768px){.video-wrapper[_ngcontent-%COMP%]{max-height:85vh}.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:40vw;max-height:90vh;margin:0 auto}.loading-indicator[_ngcontent-%COMP%], .progress-circle[_ngcontent-%COMP%]{width:78px;height:78px}.progress-ring[_ngcontent-%COMP%]{width:78px;height:78px;transform:rotate(-90deg);transform-origin:center center}.progress-ring[_ngcontent-%COMP%]   circle[_ngcontent-%COMP%]{cx:39;cy:39}.progress-ring[_ngcontent-%COMP%]   .progress-background-circle[_ngcontent-%COMP%]{r:30;cx:39;cy:39}.progress-ring[_ngcontent-%COMP%]   .progress-ring-background[_ngcontent-%COMP%], .progress-ring[_ngcontent-%COMP%]   .progress-ring-progress[_ngcontent-%COMP%]{r:28;cx:39;cy:39}.progress-ring[_ngcontent-%COMP%]{viewBox:0 0 78 78}.progress-percentage[_ngcontent-%COMP%]{font-size:16px;line-height:1;margin:0;padding:0}}@media (max-width: 480px){.shaka-controls[_ngcontent-%COMP%]{padding:15px 12px 12px}.control-bar[_ngcontent-%COMP%]{gap:6px}.control-btn[_ngcontent-%COMP%]{min-width:32px;height:32px}.icon[_ngcontent-%COMP%]{font-size:14px}.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:85vw;max-height:75vh}.center-button-icon[_ngcontent-%COMP%]{width:70px;height:70px}.center-play-button[_ngcontent-%COMP%]   .icon[_ngcontent-%COMP%]{font-size:24px}}@media (max-width: 320px){.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:90vw;max-height:70vh}.control-bar[_ngcontent-%COMP%]{gap:4px}.progress-container[_ngcontent-%COMP%]{min-width:100px}.center-button-icon[_ngcontent-%COMP%]{width:60px;height:60px}.center-play-button[_ngcontent-%COMP%]   .icon[_ngcontent-%COMP%]{font-size:20px}}@media (min-width: 769px) and (max-width: 1024px) and (orientation: portrait){.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:60vw;max-height:75vh;margin:0 auto}}@media (min-width: 1025px){.shaka-player-container.portrait-video[_ngcontent-%COMP%]   .video-wrapper[_ngcontent-%COMP%]{max-width:45vw;max-height:80vh;margin:0 auto}}"]}),r})(),G=(()=>{class r{}return r.\u0275fac=function(t){return new(t||r)},r.\u0275mod=e.oAB({type:r}),r.\u0275inj=e.cJS({providers:[U],imports:[[b.ez]]}),r})()}}]);

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.