1import{a as C}from"./chunk-7VEE6AXL.js";import{a as J}from"./chunk-QTDKHR62.js";import{h as U,k as X}from"./chunk-VJRRVSSS.js";import"./chunk-HX53FP47.js";import{a as K}from"./chunk-7UZ7RK7F.js";import{a as Q,b as G}from"./chunk-RDCFR2KU.js";import{$ as D,Bb as l,Cb as v,Da as H,Db as P,Gb as $,H as V,Ha as d,Hb as z,J as R,U as w,Va as x,Yb as q,Z as m,_ as u,_b as j,a as E,aa as A,cb as L,db as g,eb as f,ha as _,hb as F,ib as N,ja as I,jb as s,kb as i,lb as a,m as O,mb as p,qb as k,r as S,sb as h,ub as c,wb as B,xb as W,y as T,yb as Y}from"./chunk-ZK557EJ4.js";var ie=["videoEl"];function re(t,o){if(t&1&&p(0,"source",5),t&2){let e=c(2);s("src",e.video.webm)}}function ae(t,o){if(t&1&&p(0,"track",7),t&2){let e=c(2);s("src",e.video.captions)("srclang",e.video.captionsLang??"en")("label",e.video.captionsLabel??"English")}}function le(t,o){if(t&1){let e=k();i(0,"div",3),h("mouseenter",function(){m(e);let r=c();return u(r.onHover(!0))})("mouseleave",function(){m(e);let r=c();return u(r.onHover(!1))})("focusin",function(){m(e);let r=c();return u(r.onHover(!0))})("focusout",function(){m(e);let r=c();return u(r.onHover(!1))}),i(1,"video",4,0),h("error",function(){m(e);let r=c();return u(r.onVideoError())})("playing",function(){m(e);let r=c();return u(r.onPlaying())}),g(3,re,1,1,"source",5),i(4,"source",6),h("error",function(){m(e);let r=c();return u(r.onVideoError())}),a(),g(5,ae,1,3,"track",7),l(6," Your browser does not support HTML5 video. "),i(7,"a",8),l(8,"Contact us for a full demo"),a(),l(9,". "),a()()}if(t&2){let e=c();d(),s("controls",e.showControls())("poster",e.video.poster)("muted",e.autoplays),L("aria-label",e.video.label)("muted",e.autoplays?"":null)("autoplay",e.autoplays?"":null)("loop",e.autoplays?"":null),d(2),f(e.video.webm&&!e.skipWebm()?3:-1),d(),s("src",e.video.mp4),d(),f(e.video.captions?5:-1)}}function de(t,o){t&1&&(i(0,"p",11),l(1),a()),t&2&&(d(),v(o))}function ce(t,o){if(t&1){let e=k();i(0,"div",2),p(1,"app-image-placeholder",9),i(2,"button",10),h("click",function(){m(e);let r=c();return u(r.retry())}),l(3,"Reload video"),a(),g(4,de,2,1,"p",11),a()}if(t&2){let e,n=c();d(),s("category",n.fallbackCategory)("id",n.fallbackId)("radius",14)("placeholder",n.fallbackLabel),d(3),f((e=n.diagnostic())?4:-1,e)}}var b=class t{videoEl;video;fallbackCategory;fallbackId;fallbackLabel="Product screenshot";failed=_(!1);showControls=_(!0);diagnostic=_(void 0);skipWebm=_(!1);retryCount=0;static MAX_RETRIES=2;static PLAYED_MAX_RETRIES=10;static RETRY_DELAY_MS=800;static MAX_RETRY_DELAY_MS=6e3;everPlayed=!1;watchdog;reducedMotion=typeof window<"u"&&!!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;get autoplays(){return this.video.silentTeaser===!0&&!this.reducedMotion}ngOnInit(){this.showControls.set(!this.autoplays)}ngAfterViewInit(){this.armWatchdog()}ngOnChanges(o){o.video&&!o.video.firstChange&&(this.failed.set(!1),this.retryCount=0,this.everPlayed=!1,this.skipWebm.set(!1),this.showControls.set(!this.autoplays),setTimeout(()=>this.reload(),0))}ngOnDestroy(){clearTimeout(this.watchdog)}onHover(o){this.autoplays&&this.showControls.set(o)}retry(){this.failed.set(!1),this.retryCount=0,this.everPlayed=!1,this.reload()}onVideoError(){if(clearTimeout(this.watchdog),this.isUnrecoverableWebmDecodeError()){this.skipWebm.set(!0),this.logDiagnostic("webm decode error - switching to mp4 for this device",{retryCount:this.retryCount}),setTimeout(()=>this.reload(),0);return}let o=this.everPlayed?t.PLAYED_MAX_RETRIES:t.MAX_RETRIES,e=this.retryCount>=o;if(e&&this.failed.set(!0),this.logDiagnostic("error",{everPlayed:this.everPlayed,retryCount:this.retryCount,maxRetries:o}),!e){this.retryCount++;let n=Math.min(t.RETRY_DELAY_MS*this.retryCount,t.MAX_RETRY_DELAY_MS);setTimeout(()=>this.reload(),n)}}isUnrecoverableWebmDecodeError(){let o=this.videoEl?.nativeElement;if(!o||this.skipWebm()||!this.video.webm||o.error?.code!==3)return!1;let e=new URL(this.video.webm,document.baseURI).href;return o.currentSrc===e}onPlaying(){this.everPlayed=!0,this.retryCount=0}reload(){this.videoEl?.nativeElement.load(),this.armWatchdog()}armWatchdog(){clearTimeout(this.watchdog),this.watchdog=setTimeout(()=>{this.videoEl?.nativeElement.readyState===0&&this.onVideoError()},6e3)}static MEDIA_ERROR_NAMES={1:"ABORTED",2:"NETWORK",3:"DECODE",4:"SRC_NOT_SUPPORTED"};logDiagnostic(o,e){let n=this.videoEl?.nativeElement,r=n?.error?.code,M=r?t.MEDIA_ERROR_NAMES[r]??"UNKNOWN":void 0,y=E({src:n?.currentSrc,readyState:n?.readyState,networkState:n?.networkState,errorCode:r,errorName:M,errorMessage:n?.error?.message},e);if(console.warn("[video-hero]",o,y),this.failed()){let ee=n?.canPlayType('video/mp4; codecs="avc1.42E01E"')||"no",te=n?.canPlayType("video/webm")||"no";this.diagnostic.set(`net=${y.networkState} ready=${y.readyState} err=${r??"-"}(${M??"-"}) retries=${e.retryCount}/${e.maxRetries} mp4=${ee} webm=${te}`)}}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=x({type:t,selectors:[["app-video-hero"]],viewQuery:function(e,n){if(e&1&&B(ie,5),e&2){let r;
1W(r=Y())&&(n.videoEl=r.first)}},inputs:{video:"video",fallbackCategory:"fallbackCategory",fallbackId:"fallbackId",fallbackLabel:"fallbackLabel"},features:[I],decls:2,vars:1,consts:[["videoEl",""],[1,"video-frame"],[1,"video-fallback"],[1,"video-frame",3,"mouseenter","mouseleave","focusin","focusout"],["tabindex","0","playsinline","","preload","metadata",3,"error","playing","controls","poster","muted"],["type","video/webm",3,"src"],["type","video/mp4",3,"error","src"],["kind","subtitles",3,"src","srclang","label"],["href","contact"],["shape","rounded","width","100%","height","320px",3,"category","id","radius","placeholder"],["type","button",1,"retry-link",3,"click"],[1,"diagnostic"]],template:function(e,n){e&1&&g(0,le,10,10,"div",1)(1,ce,5,5,"div",2),e&2&&f(n.failed()?1:0)},dependencies:[C],styles:["[_nghost-%COMP%]{display:block;width:100%}.video-frame[_ngcontent-%COMP%]{aspect-ratio:16/9;width:100%;overflow:hidden;border-radius:14px}.video-frame[_ngcontent-%COMP%] video[_ngcontent-%COMP%]{display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit}.video-fallback[_ngcontent-%COMP%]{position:relative}.video-fallback[_ngcontent-%COMP%] .diagnostic[_ngcontent-%COMP%]{margin:6px 0 0;font-family:ui-monospace,monospace;font-size:.7rem;color:#00000059;word-break:break-all}.video-fallback[_ngcontent-%COMP%] .retry-link[_ngcontent-%COMP%]{position:absolute;right:12px;bottom:12px;padding:6px 14px;border:1px solid rgba(0,0,0,.12);border-radius:999px;background:#ffffffeb;color:inherit;font-size:.8rem;font-weight:500;cursor:pointer}.video-fallback[_ngcontent-%COMP%] .retry-link[_ngcontent-%COMP%]:hover, .video-fallback[_ngcontent-%COMP%] .retry-link[_ngcontent-%COMP%]:focus-visible{background:#fff}"]})};var se=(t,o)=>o.name;function pe(t,o){if(t&1&&p(0,"app-page-skeleton",0),t&2){let e=c();s("sections",e.skeletonSections)}}function me(t,o){if(t&1&&p(0,"app-video-hero",12),t&2){let e=c();s("video",e.heroVideo)("fallbackId",e.slot)("fallbackLabel",e.shotLabel)}}function ue(t,o){if(t&1&&p(0,"app-image-placeholder",13),t&2){let e=c();s("id",e.slot)("directUrl",e.featuredImage)("radius",14)("placeholder",e.shotLabel)}}function ge(t,o){if(t&1&&(i(0,"div",16)(1,"div",19)(2,"span",20),D(),i(3,"svg",21),p(4,"path",22),a()(),A(),i(5,"strong"),l(6),a()(),i(7,"p"),l(8),a()()),t&2){let e=o.$implicit;d(6),v(e.name),d(2),v(e.desc)}}function fe(t,o){if(t&1&&(i(0,"section",2)(1,"div",3)(2,"p",4)(3,"a",5),l(4,"Products"),a(),l(5),a(),i(6,"div",6)(7,"div")(8,"p",7),l(9),a(),i(10,"h1"),l(11),a(),p(12,"p",8),$(13,"richText"),i(14,"div",9)(15,"button",10),l(16,"Book a demo"),a(),i(17,"button",11),l(18,"All products"),a()()(),g(19,me,1,3,"app-video-hero",12)(20,ue,1,4,"app-image-placeholder",13),a()()(),i(21,"section",14)(22,"h2"),l(23,"Key capabilities"),a(),i(24,"div",15),F(25,ge,9,2,"div",16,se),a()(),i(27,"section",17)(28,"h2"),l(29),a(),i(30,"p"),l(31,"We will walk you through the platform discussing your specific requirements and workflows."),a(),i(32,"button",18),l(33,"Book a demo"),a()()),t&2){let e=o;d(5),P(" / ",e.name),d(4),v(e.tagline),d(2),v(e.name),d(),s("innerHTML",z(13,6,e.desc),H),d(7),f(e.heroVideo!=null&&e.heroVideo.enabled?19:20),d(6),N(e.feats),d(4),P("See ",e.name," in action")}}function ve(t,o){t&1&&(i(0,"section",1)(1,"p"),l(2,"Product not found. "),i(3,"a",5),l(4,"Back to all products"),a()()())}function _e(t,o){if(t&1&&g(0,fe,34,8)(1,ve,5,0,"section",1),t&2){let e,n=c();f((e=n.detail())?0:1,e)}}var Z=class t{route=w(U);api=w(j);skeletonSections=[{type:"hero",lines:3,actions:!0},{type:"grid",count:4},{type:"text",lines:2}];detail$=S([this.route.paramMap,this.route.queryParamMap]).pipe(R(([o,e])=>{let n=e.get("preview");return(n?this.api.productPreview(n):this.api.product(o.get("id"))).pipe(T(()=>O(null)))}),V(1));loading=Q(this.detail$);detail=q(this.detail$,{initialValue:null});static \u0275fac=function(e){return new(e||t)};static \u0275cmp=x({type:t,selectors:[["app-product-detail"]],decls:2,vars:1,consts:[[3,"sections"],["appReveal","",1,"not-found"],["appReveal","",1,"hero"],[1,"hero-inner"],[1,"breadcrumb"],["routerLink","/products"],[1,"hero-grid"],[1,"eyebrow"],[1,"intro",3,"innerHTML"],[1,"actions"],["type","button","routerLink","/contact",1,"btn-primary"],["type","button","routerLink","/products",1,"btn-secondary"],["fallbackCategory","products",3,"video","fallbackId","fallbackLabel"],["category","products","shape","rounded","width","100%","height","320px",3,"id","directUrl","radius","placeholder"],["appReveal","",1,"feats-section"],[1,"feats-grid"],[1,"feat"],["appReveal","",1,"cta-section"],["type","button","routerLink","/contact",1,"btn-primary","btn-cta"],[1,"feat-head"],[1,"icon-badge"],["width","16","height","16","viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2.4","stroke-linecap","round","stroke-linejoin","round"],["d","M20 6 9 17l-5-5"]],template:function(e,n){e&1&&g(0,pe,1,1,"app-page-skeleton",0)(1,_e,2,1),e&2&&f(n.loading()?0:1)},dependencies:[X,C,K,b,G,J],styles:['[_ngcontent-%COMP%]:root{--bg: #FBF
1DFB;--bg2: #F1F6F1;--card: rgba(255, 255, 255, .75);--ink: #0E1811;--ink2: #4B5F50;--ink3: #93A698;--acc: #3E7346;--acc-soft: #EAF2EB;--acc2: #5A8F4E;--line: #E3EEE4;--line2: #C9DACC;--fd: "Geist", system-ui, sans-serif;--fb: "Geist", system-ui, sans-serif;--rad: 18px;--rad-s: 12px;--sh1: 0 1px 3px rgba(30, 90, 45, .06);--sh2: 0 18px 44px rgba(62, 115, 70, .14);--btn: linear-gradient(135deg, #4C8A55, #2F6B3B);--btn-ink: #FFFFFF;--navbg: rgba(251, 253, 251, .72);--blur: 14px;--hero-bg: radial-gradient(900px 480px at 15% -12%, rgba(90, 143, 78, .1), rgba(255, 255, 255, 0) 55%), radial-gradient(900px 520px at 90% 0%, rgba(62, 115, 70, .12), rgba(255, 255, 255, 0) 55%), #FBFDFB;--code-bg: #12241A;--code-ink: #BAD6C2;--code-tag: #7FC48C;--code-attr: #F0B36A}@keyframes _ngcontent-%COMP%_rvt-up{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes _ngcontent-%COMP%_rvt-drawer{0%{transform:translate(40px);opacity:.4}to{transform:none;opacity:1}}[_nghost-%COMP%]{display:block}section[_ngcontent-%COMP%]{max-width:1280px;margin:0 auto;padding:clamp(16px,4vw,40px)}.eyebrow[_ngcontent-%COMP%]{font:600 13px var(--fb);letter-spacing:.12em;text-transform:uppercase;color:var(--acc);margin:0}h1[_ngcontent-%COMP%], h2[_ngcontent-%COMP%]{font-family:var(--fd);color:var(--ink)}.hero[_ngcontent-%COMP%]{max-width:none;background:var(--hero-bg);border-bottom:1px solid var(--line);padding:0}.hero-inner[_ngcontent-%COMP%]{max-width:1280px;margin:0 auto;padding:clamp(48px,6vw,80px) clamp(16px,4vw,40px)}.breadcrumb[_ngcontent-%COMP%]{font:500 13px var(--fb);color:var(--ink3);margin:0}.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{cursor:pointer;color:var(--acc)}.hero-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:clamp(32px,5vw,64px);align-items:center;margin-top:24px}h1[_ngcontent-%COMP%]{font-size:clamp(28px,10px + 3.2vw,54px);line-height:1.1;letter-spacing:-.025em;margin:14px 0 0}.intro[_ngcontent-%COMP%]{max-width:560px;color:var(--ink2);font-size:17.5px;line-height:1.7;margin:20px 0 0}.intro[_ngcontent-%COMP%] p:empty{min-height:1.7em}.actions[_ngcontent-%COMP%]{display:flex;gap:14px;flex-wrap:wrap;margin-top:32px}.btn-primary[_ngcontent-%COMP%]{background:var(--btn);color:var(--btn-ink);border:none;border-radius:var(--rad-s);padding:14px 26px;font:600 15px var(--fb);cursor:pointer;box-shadow:var(--sh1);transition:transform .15s,box-shadow .2s}.btn-primary[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:var(--sh2)}.btn-secondary[_ngcontent-%COMP%]{background:transparent;color:var(--ink);border:1px solid var(--line2);border-radius:var(--rad-s);padding:14px 26px;font:600 15px var(--fb);cursor:pointer;transition:all .15s}.btn-secondary[_ngcontent-%COMP%]:hover{border-color:var(--acc);background:var(--acc-soft)}.feats-section[_ngcontent-%COMP%]{padding-top:clamp(56px,7vw,90px);padding-bottom:clamp(56px,7vw,90px)}.feats-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:clamp(23px,8px + 2.2vw,38px);line-height:1.2;letter-spacing:-.02em;margin:0 0 40px}.feats-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:18px}.feat[_ngcontent-%COMP%]{transition:transform .2s,box-shadow .2s;display:flex;flex-direction:column;gap:12px;background:var(--card);-webkit-backdrop-filter:blur(var(--blur));backdrop-filter:blur(var(--blur));border:1px solid var(--line);border-radius:var(--rad);padding:24px;box-shadow:var(--sh1)}.feat[_ngcontent-%COMP%]:hover{transform:translateY(-4px);box-shadow:var(--sh2)}.feat[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--ink2);font-size:13.5px;line-height:1.6}.feat-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.feat-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-family:var(--fd);color:var(--ink);font-size:15.5px}.icon-badge[_ngcontent-%COMP%]{width:34px;height:34px;border-radius:9px;background:var(--acc-soft);color:var(--acc);display:grid;place-items:center;flex:none}.cta-section[_ngcontent-%COMP%]{text-align:center;background:var(--bg2);border-top:1px solid var(--line);padding-top:clamp(48px,6vw,72px);padding-bottom:clamp(48px,6vw,72px)}.cta-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:clamp(22px,8px + 1.9vw,34px);line-height:1.2;letter-spacing:-.02em;margin:0}.cta-section[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{max-width:520px;margin:14px auto 0;color:var(--ink2);font-size:16px;line-height:1.7}.btn-cta[_ngcontent-%COMP%]{margin-top:28px;transition:transform .15s}.btn-cta[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:var(--sh1)}.not-found[_ngcontent-%COMP%]{text-align:center;color:var(--ink2);font-size:16px}.not-found[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--acc);font-weight:600}']})};export{Z as ProductDetailComponent};
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.