1import{a as Ge}from"./chunk-CCBZNE7O.js";import{a as Ne,b as Le}from"./chunk-GENQOKDX.js";import{a as Fe,b as ze}from"./chunk-TBV4UZNX.js";import"./chunk-G3NM4LJ6.js";import{a as be,b as Me,c as Ke,e as Te,f as Ee,h as Re,i as Ie,k as Oe,l as Pe,n as Ae,p as De,q as Ve}from"./chunk-CR6SM6H2.js";import{b as ve}from"./chunk-HUJARPMZ.js";import{a as ie}from"./chunk-3GDD2Y6P.js";import{m as L}from"./chunk-WDXC2KYD.js";import{d as ke,f as xe}from"./chunk-ONZKB5CH.js";import{a as we}from"./chunk-T4ZSFXYG.js";import{b as ne}from"./chunk-P47ABIHR.js";import{e as he}from"./chunk-53PDRIEQ.js";import{b as ye,h as Ce}from"./chunk-QMZE6H57.js";import{b as Se}from"./chunk-UUZAEKOK.js";import"./chunk-OYWHTECT.js";import{a as le,b as ce}from"./chunk-B6ML3TBS.js";import"./chunk-7VPF77TY.js";import{a as ue,i as fe}from"./chunk-X2HFMDUG.js";import"./chunk-4SSS2OJZ.js";import"./chunk-3XIPWIBB.js";import{b as oe,c as ae,e as re}from"./chunk-WAWFYPMX.js";import{a as _e,b as ge}from"./chunk-7MQTEMAJ.js";import"./chunk-HTCLQCOU.js";import"./chunk-6XPI5QYW.js";import"./chunk-YWMD53KQ.js";import{g as ee,j as te}from"./chunk-A6AWQOXQ.js";import{C as pe,c as se,h as de,l as me}from"./chunk-PJ5GV7IK.js";import{g as Y,h as q,i as J,x as Q}from"./chunk-EDUSMAQY.js";import{Ab as S,Bb as M,Da as m,Fb as D,Gb as V,Hb as N,Ib as Z,Xa as p,Ya as o,Za as i,_a as T,cb as h,db as y,f as j,fb as A,ia as s,jb as v,k as b,lb as x,p as _,q as g,vb as G,wb as U,xa as H,xb as X,zb as l}from"./chunk-FFQQO7O7.js";import{S as P}from"./chunk-ID4WHIPA.js";import"./chunk-QUA7QOZA.js";import{e as He}from"./chunk-C6Q5SG76.js";var $e=He(Ge());var F=class n{firestore=b(L);async scanKeywords(t,e,a,d=0){let r=await P(this.firestore.getKeywords()),c=await P(this.firestore.getKeywordRankSnapshots$()),f=await P(this.firestore.getKeywordAdCoverageSnapshots$()),C=[];for(let u of t){if(u.searchVolume!==null&&u.searchVolume!==void 0&&u.searchVolume<d)continue;let E=u.normalizedText,z=r.find(O=>O.normalizedText===E),R=!1,I=null,B="",$=null;if(z){let O=z.keywordId,K=f.filter(w=>w.keywordId===O&&w.accountId===e).sort((w,k)=>k.capturedAt.localeCompare(w.capturedAt))[0];if(K&&(R=K.advertised,B=K.campaignTypes.join(", "),$=K.bids.length>0?K.bids.reduce((w,k)=>w+k,0)/K.bids.length:null),a){let w=c.filter(k=>k.keywordId===O&&k.asin===a&&k.accountId===e).sort((k,je)=>je.capturedAt.localeCompare(k.capturedAt))[0];w&&(I=w.organicRank)}}let We=this.determineStatus(z!==void 0,R,I),W=this.calculateOpportunityScore(u,R,I);C.push({keywordText:u.keywordText,normalizedText:E,searchVolume:u.searchVolume??null,cpcEstimate:u.cpcEstimate??null,ourLatestRank:I,advertised:R,campaignTypes:B,avgBid:$,status:We,opportunityScore:W.score,reason:W.reason,competitorRank:u.competitorRank??null})}return C.sort((u,E)=>E.opportunityScore-u.opportunityScore)}determineStatus(t,e,a){return t?e?a!==null&&a>40?"KNOWN_WEAK_RANK":e?"KNOWN_ADVERTISED":"LOW_PRIORITY":"KNOWN_NOT_ADVERTISED":"MISSING"}calculateOpportunityScore(t,e,a){let d=50,r=[];if(t.searchVolume){let c=Math.min(30,Math.floor(t.searchVolume/500));c>0&&(d+=c,r.push(`High search volume (+${c})`))}return e||(d+=15,r.push("Not currently advertised (+15)")),(a===null||a>40)&&(d+=10,r.push(a===null?"Unknown rank (+10)":"Weak rank (+10)")),t.competitorRank!==void 0&&t.competitorRank!==null&&t.competitorRank<=10&&(a===null||a>20)&&(d+=20,r.push(`Competitor ranks high (#${t.competitorRank}) while we are weak (+20)`)),t.cpcEstimate&&t.cpcEstimate>4&&(d-=15,r.push("High CPC estimate (-15)")),{score:Math.min(100,Math.max(0,d)),reason:r.join(", ")||"Neutral priority"}}static \u0275fac=function(e){return new(e||n)};static \u0275prov=j({token:n,factory:n.\u0275fac,providedIn:"root"})};function Xe(n,t){if(n&1&&(o(0,"mat-option",21),l(1),i()),n&2){let e=t.$implicit;p("value",e.id),s(),S(e.name)}}function Ze(n,t){if(n&1&&(o(0,"mat-option",21),l(1),i()),n&2){let e=t.$implicit;p("value",e),s(),S(e)}}function Ye(n,t){n&1&&T(0,"mat-progress-bar",22)}function qe(n,t){n&1&&(o(0,"th",49),l(1," Keyword "),i())}function Je(n,t){if(n&1&&(o(0,"td",50),l(1),i()),n&2){let e=t.$implicit;s(),M(" ",e.keywordText," ")}}function Qe(n,t){n&1&&(o(0,"th",49),l(1," Volume "),i())}function et(n,t){if(n&1&&(o(0,"td",50),l(1),i()),n&2){let e=t.$implicit;s(),M(" ",e.searchVolume||"--"," ")}}function tt(n,t){n&1&&(o(0,"th",49),l(1," Status "),i())}function nt(n,t){if(n&1&&(o(0,"td",50)(1,"span",51),l(2),i()()),n&2){let e=t.$implicit;s(),p("ngClass",e.status.toLowerCase()),s(),S(e.status.replace("_"," "))}}function it(n,t){n&1&&(o(0,"th",49),l(1," Our Rank "),i())}function ot(n,t){if(n&1&&(o(0,"td",50),l(1),i()),n&2){let e=t.$implicit;s(),M(" ",e.ourLatestRank||"--"," ")}}function at(n,t){n&1&&(o(0,"th",49),l(1," Comp. Rank "),i())}function rt(n,t){if(n&1&&(o(0,"span",54),l(1),i()),n&2){let e=x().$implicit;s(),M(" ",e.competitorRank," ")}}function lt(n,t){if(n&1&&(o(0,"span"),l(1),i()),n&2){let e=x().$implicit;s(),M(" ",e.competitorRank||"--"," ")}}function ct(n,t){if(n&1&&(o(0,"td",50),m(1,rt,2,1,"span",52)(2,lt,2,1,"span",53),i()),n&2){let e=t.$implicit;s(),p("ngIf",e.competitorRank&&e.competitorRank<=10&&(e.ourLatestRank===null||e.ourLatestRank>20)),s(),p("ngIf",!(e.competitorRank&&e.competitorRank<=10&&(e.ourLatestRank===null||e.ourLatestRank>20)))}}function st(n,t){n&1&&(o(0,"th",49),l(1," Adv "),i())}function dt(n,t){if(n&1&&(o(0,"mat-icon",57),l(1,"check_circle"),i()),n&2){let e=x().$implicit;p("matTooltip",Z(e.campaignTypes))}}function mt(n,t){n&1&&(o(0,"mat-icon",58),l(1,"cancel"),i())}function pt(n,t){if(n&1&&(o(0,"td",50),m(1,dt,2,2,"mat-icon",55)(2,mt,2,0,"mat-icon",56),i()),n&2){let e=t.$implicit;s(),p("ngIf",e.advertised),s(),p("ngIf",!e.advertised)}}function ut(n,t){n&1&&(o(0,"th",49),l(1," Opp. Score "),i())}function ft(n,t){if(n&1&&(o(0,"td",50)(1,"div",59),l(2),i()()),n&2){let e=t.$implicit;s(),U("background-color",e.opportunityScore>70?"#dcfce7":e.opportunityScore>40?"#fef9c3":"#f1f5f9"),s(),M(" ",e.opportunityScore," ")}}function _t(n,t){n&1&&(o(0,"th",49),l(1," Highlights "),i())}function gt(n,t){if(n&1&&(o(0,"td",50)(1,"small"),l(2),i()()),n&2){let e=t.$implicit;s(2),S(e.reason)}}function ht(n,t){n&1&&T(0,"th",49)}function yt(n,t){if(n&1){let e=A();o(0,"button",61),v("click",function(){_(e);let d=x().$implicit,r=x(2);return g(r.saveToLibrary(d))}),o(1,"mat-icon"),l(2,"add_circle_outline"),i()()}}function Ct(n,t){if(n&1&&(o(0,"td",50),m(1,yt,3,0,"button",60),i()),n&2){let e=t.$implicit;s(),p("ngIf",e.status==="MISSING")}}function wt(n,t){n&1&&T(0,"tr",62)}function kt(n,t){n&1&&T(0,"tr",63)}function xt(n,t){if(n&1){let e=A();o(0,"div",23)(1,"div",24)(2,"mat-card",25)(3,"label"),l(4,"Total Keywords"),i(),o(5,"div",26),l(6),i()(),o(7,"mat-card",27)(8,"label"),l(9,"New (Not in Lib)"),i(),o(10,"div",26),l(11),i()(),o(12,"mat-card",28)(13,"label"),l(14,"Un-advertised"),i(),o(15,"div",26),l(16),i()(),o(17,"mat-card",29)(18,"label"),l(19,"Weak Rank (>40 or Unknown)"),i(),o(20,"div",26),l(21),i()()(),o(22,"mat-card",30)(23,"div",31)(24,"h3"),l(25,"Analysis Results"),i(),o(26,"div",32)(27,"button",33),v("click",function(){_(e);let d=x();return g(d.copyLaunchList())}),o(28,"mat-icon"),l(29,"content_copy"),i(),l(30," Copy Launch List "),i(),o(31,"button",34),v("click",function(){_(e);let d=x();return g(d.exportCsv())}),o(32,"mat-icon"),l(33,"download"),i(),l(34," Export CSV "),i()()(),o(35,"table",35),h(36,36),m(37,qe,2,0,"th",37)(38,Je,2,1,"td",38),y(),h(39,39),m(40,Qe,2,0,"th",37)(41,et,2,1,"td",38),y(),h(42,40),m(43,tt,2,0,"th",37)(44,nt,3,2,"td",38),y(),h(45,41),m(46,it,2,0,"th",37)(47,ot,2,1,"td",38),y(),h(48,42),m(49,at,2,0,"th",37)(50,ct,3,2,"td",38),y(),h(51,43),m(52,st,2,0,"th",37)(53,pt,3,2,"td",38),y(),h(54,44),m(55,ut,2,0,"th",37)(56,ft,3,3,"td",38),y(),h(57,45),m(58,_t,2,0,"th",37)(59,gt,3,1,"td",38),y(),h(60,46),m(61,ht,1,0,"th",37)(62,Ct,2,1,"td",38),y(),m(63,wt,1,0,"tr",47)(64,kt,1,0,"tr",48),i()()()}if(n&2){let e=x();s(6),S(e.summary.total),s(5),S(e.summary.missing),s(5),S(e.summary.notAdvertised),s(5),S(e.summary.weakRank),s(14),p("dataSource",e.dataSource),s(28),p("matHeaderRowDef",e.displayedColumns),s(),p("matRowDefColumns",e.displayedColumns)}}var Be=class n{checkService=b(F);firestore=b(L);accountService=b(Se);snackBar=b(le);accounts=[];selectedAccountId="";asins=[];selectedAsin="";inputText="";isScanning=!1;isDragging=!1;MAX_FILE_SIZE=5*1024*1024;dataSource=new Ve;displayedColumns=["keyword","volume","status","rank","competitor","ads","score","reason","actions"];summary={total:0,missing:0,notAdvertised:0,weakRank:0};constructor(){this.accountService.accounts$.subscribe(t=>{this.accounts=t,!this.selectedAccountId&&t.length>0&&(this.selectedAccountId=this.accountService.getCurrentAccountId()||"",this.loadAsins())})}loadAsins(){this.firestore.getAsinKeywords$().subscribe(t=>{this.asins=Array.from(new Set(t.map(e=>e.asin)))})}onDragOver(t){t.preventDefault(),t.stopPropagation(),this.isDragging=!0}onDragLeave(t){t.preventDefault(),t.stopPropagation(),this.isDragging=!1}async onDrop(t){t.preventDefault(),t.stopPropagation(),this.isDragging=!1;let e=t.dataTransfer?.files;e&&e.length>0&&await this.handleFiles(e)}async handleFiles(t){for(let e=0;e<t.length;e++){let a=t[e];if(a.size>this.MAX_FILE_SIZE){this.snackBar.open(`${a.name} exceeds 5MB limit.`,"Close",{duration:3e3});continue}await this.processFile(a)}}async onFileAnalyzed(t){let e=t.target.files;e&&e.length>0&&(await this.handleFiles(e),t.target.value="")}
1async processFile(t){let e=new FileReader;e.onload=async a=>{let d=a.target?.result;this.inputText=d,await this.runScan()},e.readAsText(t)}async runScan(){if(this.inputText.trim()){this.isScanning=!0;try{let t=this.parseInput(this.inputText),e=await this.checkService.scanKeywords(t,this.selectedAccountId,this.selectedAsin);this.dataSource.data=e,this.calculateSummary(e),this.snackBar.open(`Scan complete: ${e.length} keywords analyzed`,"Close",{duration:3e3})}catch(t){console.error(t),this.snackBar.open("Error during keyword scan","Close",{duration:3e3})}finally{this.isScanning=!1}}}parseInput(t){let e=$e.parse(t,{header:!0,skipEmptyLines:!0,delimiter:""}),a=e.data;return e.meta.fields&&(e.meta.fields.includes("Keyword Phrase")||e.meta.fields.includes("Organic Rank")||e.meta.fields.includes("Search Volume"))?a.map(r=>{let c=r["Keyword Phrase"]||r.Phrase||r.Keyword||r["Search Term"]||"",f=this.parseNum(r["Search Volume"]),C=this.parseNum(r["H10 PPC Sugg. Bid"]||r["Suggested Bid"]),u=this.parseRank(r["Organic Rank"]||r.Organic);return{keywordText:c,normalizedText:this.normalize(c),searchVolume:f>0?f:null,cpcEstimate:C>0?C:null,competitorRank:u}}).filter(r=>!!r.keywordText):t.split(` 2`).map(r=>r.trim()).filter(r=>!!r&&!r.startsWith("Keyword Phrase")).map(r=>{let c=r.split(/[\t,;]/),f=c[0].trim(),C=c.length>1?this.parseNum(c[1]):null,u=c.length>2?this.parseNum(c[2]):null;return{keywordText:f,normalizedText:this.normalize(f),searchVolume:C&&C>0?C:null,cpcEstimate:u&&u>0?u:null,competitorRank:null}})}parseNum(t){if(t==null||t==="")return 0;let e=parseFloat(t.toString().replace(/[$,]/g,""));return isNaN(e)?0:e}parseRank(t){if(t==null||t===""||t==="-"||t==="0")return null;let e=parseInt(t.toString());return isNaN(e)||e<=0?null:e}normalize(t){return t.toLowerCase().trim().replace(/\s+/g," ")}calculateSummary(t){this.summary={total:t.length,missing:t.filter(e=>e.status==="MISSING").length,notAdvertised:t.filter(e=>!e.advertised).length,weakRank:t.filter(e=>e.ourLatestRank===null||e.ourLatestRank>40).length}}async saveToLibrary(t){let e=new TextEncoder().encode(t.normalizedText),a=Array.from(e,c=>String.fromCharCode(c)).join(""),r={keywordId:btoa(a).replace(/=/g,"").substring(0,32),keywordText:t.keywordText,normalizedText:t.normalizedText,createdAt:new Date().toISOString()};await this.firestore.upsertKeyword(r),this.snackBar.open(`Saved "${t.keywordText}" to library`,"Close",{duration:2e3}),t.status=t.status==="MISSING"?"KNOWN_NOT_ADVERTISED":t.status}copyLaunchList(){let t=this.dataSource.data.filter(e=>e.opportunityScore>70).map(e=>e.keywordText).join(` 3`);navigator.clipboard.writeText(t),this.snackBar.open("High-opportunity keywords copied to clipboard","Close",{duration:3e3})}exportCsv(){let t=["Keyword","Search Volume","Opportunity Score","Status","Reason"],e=this.dataSource.data.map(f=>[f.keywordText,f.searchVolume||0,f.opportunityScore,f.status,f.reason]),a=[t,...e].map(f=>f.join(",")).join(` 4`),d=new Blob([a],{type:"text/csv;charset=utf-8;"}),r=document.createElement("a"),c=URL.createObjectURL(d);r.setAttribute("href",c),r.setAttribute("download",`keyword_gap_report_${new Date().toISOString().slice(0,10)}.csv`),r.style.visibility="hidden",document.body.appendChild(r),r.click(),document.body.removeChild(r)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=H({type:n,selectors:[["app-keyword-check"]],decls:46,vars:10,consts:[["fileInput",""],[1,"check-container"],[1,"header-nav"],["mat-button","","routerLink","/keywords"],[1,"input-card",3,"dragover","dragleave","drop"],[1,"card-header"],[1,"flex","justify-between","items-start"],[1,"flex","gap-2"],["mat-stroked-button","","color","primary",3,"click"],["type","file","hidden","","accept",".csv,.txt",3,"change"],[1,"input-grid"],[1,"text-input"],["appearance","outline",1,"w-full"],["matInput","","rows","8","placeholder","Keyword Phrase Search Volume Organic Rank...",3,"ngModelChange","ngModel"],[1,"scan-settings"],[3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],["value",""],["mat-flat-button","","color","primary",1,"w-full","h-14",3,"click","disabled"],["mode","indeterminate",4,"ngIf"],["class","results-area",4,"ngIf"],[3,"value"],["mode","indeterminate"],[1,"results-area"],[1,"summary-grid"],[1,"summary-card"],[1,"value"],[1,"summary-card","info"],[1,"summary-card","warning"],[1,"summary-card","alert"],[1,"table-card"],[1,"table-header"],[1,"table-actions"],["mat-stroked-button","","matTooltip","Copy keywords with Score > 70",3,"click"],["mat-stroked-button","",3,"click"],["mat-table","",3,"dataSource"],["matColumnDef","keyword"],["mat-header-cell","",4,"matHeaderCellDef"],["mat-cell","",4,"matCellDef"],["matColumnDef","volume"],["matColumnDef","status"],["matColumnDef","rank"],["matColumnDef","competitor"],["matColumnDef","ads"],["matColumnDef","score"],["matColumnDef","reason"],["matColumnDef","actions"],["mat-header-row","",4,"matHeaderRowDef"],["mat-row","",4,"matRowDef","matRowDefColumns"],["mat-header-cell",""],["mat-cell",""],[1,"status-badge",3,"ngClass"],["style","font-weight: 700; color: #38a3a5",4,"ngIf"],[4,"ngIf"],[2,"font-weight","700","color","#38a3a5"],["class","text-success",3,"matTooltip",4,"ngIf"],["class","text-muted",4,"ngIf"],[1,"text-success",3,"matTooltip"],[1,"text-muted"],[1,"score-pill"],["mat-icon-button","","color","primary","matTooltip","Save to Library",3,"click",4,"ngIf"],["mat-icon-button","","color","primary","matTooltip","Save to Library",3,"click"],["mat-header-row",""],["mat-row",""]],template:function(e,a){if(e&1){let d=A();o(0,"div",1)(1,"div",2)(2,"a",3)(3,"mat-icon"),l(4,"arrow_back"),i(),l(5," Back to Intelligence "),i()(),o(6,"mat-card",4),v("dragover",function(c){return _(d),g(a.onDragOver(c))})("dragleave",function(c){return _(d),g(a.onDragLeave(c))})("drop",function(c){return _(d),g(a.onDrop(c))}),o(7,"div",5)(8,"div",6)(9,"div")(10,"h2"),l(11,"Keyword Gap Scan"),i(),o(12,"p"),l(13,"Analyze competitor keywords against your current rank and ad coverage."),i()(),o(14,"div",7)(1
45,"button",8),v("click",function(){_(d);let c=G(20);return g(c.click())}),o(16,"mat-icon"),l(17,"upload_file"),i(),l(18," Analyze from File "),i(),o(19,"input",9,0),v("change",function(c){return _(d),g(a.onFileAnalyzed(c))}),i()()()(),o(21,"div",10)(22,"div",11)(23,"mat-form-field",12)(24,"mat-label"),l(25,"Paste Keywords (supports H10 Cerebro Copy/Paste or Row List)"),i(),o(26,"textarea",13),N("ngModelChange",function(c){return _(d),V(a.inputText,c)||(a.inputText=c),g(c)}),i()()(),o(27,"div",14)(28,"mat-form-field",12)(29,"mat-label"),l(30,"Account Context"),i(),o(31,"mat-select",15),N("ngModelChange",function(c){return _(d),V(a.selectedAccountId,c)||(a.selectedAccountId=c),g(c)}),m(32,Xe,2,2,"mat-option",16),i()(),o(33,"mat-form-field",12)(34,"mat-label"),l(35,"Compare Against ASIN (Optional)"),i(),o(36,"mat-select",15),N("ngModelChange",function(c){return _(d),V(a.selectedAsin,c)||(a.selectedAsin=c),g(c)}),o(37,"mat-option",17),l(38,"-- No ASIN (Ads only) --"),i(),m(39,Ze,2,2,"mat-option",16),i()(),o(40,"button",18),v("click",function(){return _(d),g(a.runScan())}),o(41,"mat-icon"),l(42,"analytics"),i(),l(43," Run Gap Scan "),i()()(),m(44,Ye,1,0,"mat-progress-bar",19),i(),m(45,xt,65,7,"div",20),i()}e&2&&(s(6),X("drag-over",a.isDragging),s(20),D("ngModel",a.inputText),s(5),D("ngModel",a.selectedAccountId),s(),p("ngForOf",a.accounts),s(4),D("ngModel",a.selectedAsin),s(3),p("ngForOf",a.asins),s(),p("disabled",a.isScanning||!a.inputText.trim()),s(4),p("ngIf",a.isScanning),s(),p("ngIf",a.dataSource.data.length>0))},dependencies:[Q,Y,q,J,pe,se,de,me,fe,ue,re,ae,oe,ze,Fe,Ce,ye,we,ge,_e,De,be,Ke,Ie,Te,Me,Oe,Ee,Re,Pe,Ae,xe,ke,he,ce,Le,Ne,ie,ne,ve,te,ee],styles:[".check-container[_ngcontent-%COMP%]{padding:24px;max-width:1400px;margin:0 auto}.header-nav[_ngcontent-%COMP%]{margin-bottom:16px}.input-card[_ngcontent-%COMP%]{padding:24px;border-radius:12px;margin-bottom:24px;transition:all .3s ease}.input-card.drag-over[_ngcontent-%COMP%]{border:2px dashed #3b82f6;background-color:#eff6ff;transform:scale(1.01)}.input-card[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:20px;font-weight:600}.input-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:4px 0 24px;color:#64748b}.input-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 300px;gap:24px}.w-full[_ngcontent-%COMP%]{width:100%}.h-14[_ngcontent-%COMP%]{height:56px}.flex[_ngcontent-%COMP%]{display:flex}.justify-between[_ngcontent-%COMP%]{justify-content:space-between}.items-start[_ngcontent-%COMP%]{align-items:flex-start}.gap-2[_ngcontent-%COMP%]{gap:8px}.font-bold[_ngcontent-%COMP%]{font-weight:700}.summary-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}.summary-card[_ngcontent-%COMP%]{padding:16px;text-align:center;border-radius:12px}.summary-card[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:12px;color:#64748b;text-transform:uppercase}.summary-card[_ngcontent-%COMP%] .value[_ngcontent-%COMP%]{font-size:24px;font-weight:700;color:#0f172a;margin-top:4px}.summary-card.info[_ngcontent-%COMP%]{background-color:#f0f9ff;border:1px solid #bae6fd}.summary-card.warning[_ngcontent-%COMP%]{background-color:#fffbeb;border:1px solid #fef3c7}.summary-card.alert[_ngcontent-%COMP%]{background-color:#fef2f2;border:1px solid #fee2e2}.table-card[_ngcontent-%COMP%]{border-radius:12px;overflow:hidden;padding:0}.table-header[_ngcontent-%COMP%]{padding:16px 24px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #f1f5f9}.table-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px}.table-header[_ngcontent-%COMP%] .table-actions[_ngcontent-%COMP%]{display:flex;gap:8px}table[_ngcontent-%COMP%]{width:100%}.status-badge[_ngcontent-%COMP%]{padding:2px 8px;border-radius:999px;font-size:10px;font-weight:600;text-transform:uppercase}.status-badge.missing[_ngcontent-%COMP%]{background:#f1f5f9;color:#64748b}.status-badge.known_not_advertised[_ngcontent-%COMP%]{background:#fffbeb;color:#b45309}.status-badge.known_weak_rank[_ngcontent-%COMP%]{background:#fef2f2;color:#b91c1c}.status-badge.known_advertised[_ngcontent-%COMP%]{background:#dcfce7;color:#15803d}.score-pill[_ngcontent-%COMP%]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-weight:700;font-size:11px}.text-success[_ngcontent-%COMP%]{color:#10b981}.text-muted[_ngcontent-%COMP%]{color:#94a3b8}"]})};export{Be as KeywordCheckComponent};
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.